Commit: 94f395036cf20e506cae3409799396a838338141
Author: Hannes Magnusson <[email protected]> Thu, 26 Dec 2013
13:34:43 -0800
Parents: 72211d2473e87f900f89bf912e3ff893ed66de6a
Branches: master
Link:
http://git.php.net/?p=web/php.git;a=commitdiff;h=94f395036cf20e506cae3409799396a838338141
Log:
Bring back the mega dropdown, toggled with "?" keyboard shortcut
Changed paths:
M include/footer.inc
M include/header.inc
M include/layout.inc
M include/shared-manual.inc
M js/common.js
A js/ext/mousetrap.min.js
M styles/theme-base.css
diff --git a/include/footer.inc b/include/footer.inc
index 24cffd8..f291b3e 100644
--- a/include/footer.inc
+++ b/include/footer.inc
@@ -41,7 +41,7 @@
<!-- External and third party libraries. -->
<script type="text/javascript"
src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<?php
- $jsfiles = array("ext/modernizr.js", "ext/hogan-2.0.0.min.js",
"ext/typeahead.min.js", "search.js", "common.js");
+ $jsfiles = array("ext/modernizr.js", "ext/hogan-2.0.0.min.js",
"ext/typeahead.min.js", "ext/mousetrap.min.js", "search.js", "common.js");
foreach ($jsfiles as $filename) {
$path = dirname(dirname(__FILE__)).'/js/'.$filename;
echo '<script type="text/javascript" src="' . $MYSITE .
'cached.php?f=/js/'.$filename.'&t='.@filemtime($path).'"></script>'."\n";
diff --git a/include/header.inc b/include/header.inc
index 798f314..e8f45fb 100755
--- a/include/header.inc
+++ b/include/header.inc
@@ -94,6 +94,7 @@ if ($config["cache"]) {
</div>
<div id="flash-message"></div>
</nav>
+<nav id="trick"><div><?php doc_toc("en") ?></div></nav>
<?php if (!empty($config['breadcrumbs'])): ?>
<div id="breadcrumbs">
diff --git a/include/layout.inc b/include/layout.inc
index 3007e88..260d4ff 100644
--- a/include/layout.inc
+++ b/include/layout.inc
@@ -588,53 +588,42 @@ function doc_toc($lang) {
}
require dirname(__FILE__) . "/../manual/$lang/toc/index.inc";
-?>
- <dl>
- <dt><a href="/manual/">PHP Manual</a></dt>
- <?php doc_toc_list($lang, $TOC, 'getting-started'); ?>
- <?php doc_toc_title($lang, $TOC, 'install', 'dd'); ?>
- </dl>
-
- <dl>
- <?php doc_toc_title($lang, $TOC, 'langref'); ?>
- <?php doc_sub_entry($lang, 'langref', 'language.basic-syntax'); ?>
- <?php doc_sub_entry($lang, 'langref', 'language.variables'); ?>
- <?php doc_sub_entry($lang, 'langref', 'language.operators'); ?>
- <?php doc_sub_entry($lang, 'langref', 'language.functions'); ?>
- <?php doc_sub_entry($lang, 'langref', 'language.oop5'); ?>
- </dl>
-
- <dl>
- <?php doc_toc_title($lang, $TOC, 'funcref'); ?>
- <?php doc_sub_entry($lang, 'refs.basic.vartype', 'book.array'); ?>
- <?php doc_sub_entry($lang, 'refs.calendar', 'book.datetime'); ?>
- <?php doc_sub_entry($lang, 'refs.basic.text', 'book.strings'); ?>
- <?php doc_toc_title($lang, $TOC, 'faq'); ?>
- </dl>
-
- <dl>
- <?php doc_toc_title($lang, $TOC, 'security'); ?>
- <?php doc_sub_entry($lang, 'security', 'security.database'); ?>
- <?php doc_sub_entry($lang, 'security', 'security.variables'); ?>
- <?php doc_sub_entry($lang, 'faq', 'faq.passwords'); ?>
- <?php doc_toc_title($lang, $TOC, 'appendices'); ?>
- </dl>
-<?php
-}
-function doc_sub_entry($lang, $file, $subfile, $elm = "dd") {
- static $cache = array();
+ echo "<dl>\n";
+ doc_toc_list($lang, $TOC, "getting-started");
+ doc_toc_list($lang, $TOC, "langref");
+ echo "</dl>\n";
+
+ echo "<dl>\n";
+ doc_toc_list($lang, $TOC, "security");
+ doc_toc_list($lang, $TOC, "features");
+ echo "</dl>\n";
+
+ echo "<dl>\n";
+ doc_toc_list($lang, $TOC, "funcref");
+ echo "</dl>\n";
+
+ echo "<dl>\n";
+ echo "<dt>Keyboard Shortcuts</dt>";
+ echo "<dt>?</dt>\n";
+ echo "<dd>This help</dd>\n";
+ echo "<dt>j</dt>\n";
+ echo "<dd>Next menu item</dd>\n";
+ echo "<dt>k</dt>\n";
+ echo "<dd>Previous menu item</dd>\n";
+ echo "<dt>g p</dt>\n";
+ echo "<dd>Previous man page</dd>\n";
+ echo "<dt>g n</dt>\n";
+ echo "<dd>Next man page</dd>\n";
+ echo "<dt>G</dt>\n";
+ echo "<dd>Scroll to bottom</dd>\n";
+ echo "<dt>g g</dt>\n";
+ echo "<dd>Scroll to top</dd>\n";
+ echo "<dt>g h</dt>\n";
+ echo "<dd>Goto homepage</dd>\n";
+ echo "<dt>/</dt>\n";
+ echo "<dd>Focus search box</dd>\n";
+ echo "</dl>";
- if (isset($cache["$lang.$file"])) {
- $TOC = $cache["$lang.$file"];
- } else {
- include dirname(__FILE__) . "/../manual/$lang/toc/$file.inc";
- }
-
- foreach($TOC as $entry) {
- if (substr($entry[0], 0, strlen($subfile)) == $subfile) {
- echo "\t<$elm><a
href='/manual/$lang/{$entry[0]}'>{$entry[1]}</a></$elm>\n";
- }
- }
}
function doc_toc_list($lang, $index, $file) {
include dirname(__FILE__) . "/../manual/$lang/toc/$file.inc";
@@ -655,10 +644,5 @@ function doc_toc_title($lang, $index, $file, $elm = "dt") {
echo "<$elm><a href='/manual/$lang/$link'>$title</a></$elm>\n";
}
-
-
-
-
-
/* vim: set et ts=4 sw=4 ft=php: : */
diff --git a/include/shared-manual.inc b/include/shared-manual.inc
index 5e0e428..bff2c32 100644
--- a/include/shared-manual.inc
+++ b/include/shared-manual.inc
@@ -361,20 +361,21 @@ function manual_setup($setup) {
$menu[] = $last_item;
}
- $_SERVER["BASE_PAGE"] = "/manual/" . $setup["head"][1] . "/" .
$setup["this"][0];
+ $base = "manual/" . $setup["head"][1] . "/";
+ $_SERVER["BASE_PAGE"] = "/" . $base . $setup["this"][0];
$config = array(
"current" => "docs",
"leftmenu" => $siblings,
"breadcrumbs" => $menu,
"meta-navigation" => array(
- "contents" => $setup["home"][0],
- "index" => $setup["up"][0],
- "prev" => $setup["prev"][0],
- "next" => $setup["next"][0],
+ "contents" => $base . $setup["home"][0],
+ "index" => $base . $setup["up"][0],
+ "prev" => $base . $setup["prev"][0],
+ "next" => $base . $setup["next"][0],
),
- "lang" => $setup["head"][1],
- "thispage" => $setup["this"][0],
+ "lang" => $base . $setup["head"][1],
+ "thispage" => $base . $setup["this"][0],
"prev" => $setup["prev"],
"next" => $setup["next"],
);
diff --git a/js/common.js b/js/common.js
index 6a254f1..98c9aa1 100755
--- a/js/common.js
+++ b/js/common.js
@@ -53,6 +53,73 @@ function scroll(target, interval)
(function($){var
h=$.scrollTo=function(a,b,c){$(window).scrollTo(a,b,c)};h.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1,limit:true};h.window=function(a){return
$(window)._scrollable()};$.fn._scrollable=function(){return
this.map(function(){var
a=this,isWin=!a.nodeName||$.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!isWin)return
a;var
b=(a.contentWindow||a).document||a.ownerDocument||a;return/webkit/i.test(navigator.userAgent)||b.compatMode=='BackCompat'?b.body:b.documentElement})};$.fn.scrollTo=function(e,f,g){if(typeof
f=='object'){g=f;f=0}if(typeof
g=='function')g={onAfter:g};if(e=='max')e=9e9;g=$.extend({},h.defaults,g);f=f||g.duration;g.queue=g.queue&&g.axis.length>1;if(g.queue)f/=2;g.offset=both(g.offset);g.over=both(g.over);return
this._scrollable().each(function(){if(e==null)return;var
d=this,$elem=$(d),targ=e,toff,attr={},win=$elem.is('html,body');switch(typeof
targ){case'number':case'string':if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)){targ=both(targ);break}targ=$(targ,this);if(!targ.length)return;case'object':if(targ.is||targ.style)toff=(targ=$(targ)).offset()}$.each(g.axis.split(''),function(i,a){var
b=a=='x'?'Left':'Top',pos=b.toLowerCase(),key='scroll'+b,old=d[key],max=h.max(d,a);if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(g.margin){attr[key]-=parseInt(targ.css('margin'+b))||0;attr[key]-=parseInt(targ.css('border'+b+'Width'))||0}attr[key]+=g.offset[pos]||0;if(g.over[pos])attr[key]+=targ[a=='x'?'width':'height']()*g.over[pos]}else{var
c=targ[pos];attr[key]=c.slice&&c.slice(-1)=='%'?parseFloat(c)/100*max:c}if(g.limit&&/^\d+$/.test(attr[key]))attr[key]=attr[key]<=0?0:Math.min(attr[key],max);if(!i&&g.queue){if(old!=attr[key])animate(g.onAfterFirst);delete
attr[key]}});animate(g.onAfter);function
animate(a){$elem.animate(attr,f,g.easing,a&&function(){a.call(this,targ,g)})}}).end()};h.max=function(a,b){var
c=b=='x'?'Width':'Height',scroll='scroll'+c;if(!$(a).is('html,body'))return
a[scroll]-$(a)[c.toLowerCase()]();var
d='client'+c,html=a.ownerDocument.documentElement,body=a.ownerDocument.body;return
Math.max(html[scroll],body[scroll])-Math.min(html[d],body[d])};function
both(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
/*}}}*/
+Mousetrap.bind('up up down down left right left right b a enter', function() {
+ $(".brand img").attr("src", "/images/php_konami.gif");
+});
+Mousetrap.bind("?", function() {
+ $.scrollTo(0, 10);
+ $("#trick").slideToggle();
+});
+/*
+Mousetrap.bind("j", function() {
+ var n = window.pageYOffset + 20;
+ $.scrollTo(n, 10);
+});
+Mousetrap.bind("k", function() {
+ var n = window.pageYOffset - 20;
+ $.scrollTo(n, 10);
+});
+*/
+Mousetrap.bind("G", function() {
+ var n = $(document).height();
+ $.scrollTo(n, 10);
+});
+Mousetrap.bind("g h", function() {
+ window.location.href = "/";
+});
+Mousetrap.bind("g g", function() {
+ $.scrollTo(0, 10);
+});
+Mousetrap.bind("g p", function() {
+ var link = $("link[rel=prev]").attr("href");
+ if (link) {
+ window.location.href = link;
+ }
+});
+Mousetrap.bind("g n", function() {
+ var link = $("link[rel=next]").attr("href");
+ if (link) {
+ window.location.href = link;
+ }
+});
+Mousetrap.bind("j", function() {
+ var fixedheader = 50;
+ var node = $(".layout-menu .current");
+ if (node.next().length) {
+ var curr = node.toggleClass("current").next().toggleClass("current");
+ $.scrollTo(curr.offset().top-fixedheader);
+ curr.children("a").first().focus().css({outline: "none"});
+ }
+});
+Mousetrap.bind("k", function() {
+ var fixedheader = 50;
+ var node = $(".layout-menu .current");
+ if (node.prev().length) {
+ var curr = node.toggleClass("current").prev().toggleClass("current");
+ $.scrollTo(curr.offset().top-fixedheader);
+ curr.children("a").first().focus().css({outline: "none"});
+ }
+});
+Mousetrap.bind("/", function(e) {
+ if (e.preventDefault) {
+ e.preventDefault();
+ } else {
+ // internet explorer
+ e.returnValue = false;
+ }
+ $("input[type=search]").focus()
+});
+
$(window).load(function()
{
// Fire our scroll, webkit needs onload
diff --git a/js/ext/mousetrap.min.js b/js/ext/mousetrap.min.js
new file mode 100644
index 0000000..114a222
--- /dev/null
+++ b/js/ext/mousetrap.min.js
@@ -0,0 +1,9 @@
+/* mousetrap v1.4.6 craig.is/killing/mice */
+(function(J,r,f){function
s(a,b,d){a.addEventListener?a.addEventListener(b,d,!1):a.attachEvent("on"+b,d)}function
A(a){if("keypress"==a.type){var
b=String.fromCharCode(a.which);a.shiftKey||(b=b.toLowerCase());return b}return
h[a.which]?h[a.which]:B[a.which]?B[a.which]:String.fromCharCode(a.which).toLowerCase()}function
t(a){a=a||{};var b=!1,d;for(d in n)a[d]?b=!0:n[d]=0;b||(u=!1)}function
C(a,b,d,c,e,v){var
g,k,f=[],h=d.type;if(!l[a])return[];"keyup"==h&&w(a)&&(b=[a]);for(g=0;g<l[a].length;++g)if(k=
+l[a][g],!(!c&&k.seq&&n[k.seq]!=k.level||h!=k.action||("keypress"!=h||d.metaKey||d.ctrlKey)&&b.sort().join(",")!==k.modifiers.sort().join(","))){var
m=c&&k.seq==c&&k.level==v;(!c&&k.combo==e||m)&&l[a].splice(g,1);f.push(k)}return
f}function K(a){var
b=[];a.shiftKey&&b.push("shift");a.altKey&&b.push("alt");a.ctrlKey&&b.push("ctrl");a.metaKey&&b.push("meta");return
b}function
x(a,b,d,c){m.stopCallback(b,b.target||b.srcElement,d,c)||!1!==a(b,d)||(b.preventDefault?b.preventDefault():b.returnValue=!1,b.stopPropagation?
+b.stopPropagation():b.cancelBubble=!0)}function y(a){"number"!==typeof
a.which&&(a.which=a.keyCode);var
b=A(a);b&&("keyup"==a.type&&z===b?z=!1:m.handleKey(b,K(a),a))}function
w(a){return"shift"==a||"ctrl"==a||"alt"==a||"meta"==a}function
L(a,b,d,c){function e(b){return
function(){u=b;++n[a];clearTimeout(D);D=setTimeout(t,1E3)}}function
v(b){x(d,b,a);"keyup"!==c&&(z=A(b));setTimeout(t,10)}for(var
g=n[a]=0;g<b.length;++g){var
f=g+1===b.length?v:e(c||E(b[g+1]).action);F(b[g],f,c,a,g)}}function E(a,b){var
d,
+c,e,f=[];d="+"===a?["+"]:a.split("+");for(e=0;e<d.length;++e)c=d[e],G[c]&&(c=G[c]),b&&"keypress"!=b&&H[c]&&(c=H[c],f.push("shift")),w(c)&&f.push(c);d=c;e=b;if(!e){if(!p){p={};for(var
g in
h)95<g&&112>g||h.hasOwnProperty(g)&&(p[h[g]]=g)}e=p[d]?"keydown":"keypress"}"keypress"==e&&f.length&&(e="keydown");return{key:c,modifiers:f,action:e}}function
F(a,b,d,c,e){q[a+":"+d]=b;a=a.replace(/\s+/g," ");var f=a.split("
");1<f.length?L(a,f,b,d):(d=E(a,d),l[d.key]=l[d.key]||[],C(d.key,d.modifiers,{type:d.action},
+c,a,e),l[d.key][c?"unshift":"push"]({callback:b,modifiers:d.modifiers,action:d.action,seq:c,level:e,combo:a}))}var
h={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"},B={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},H={"~":"`","!":"1",
+"@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"},G={option:"alt",command:"meta","return":"enter",escape:"esc",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},p,l={},q={},n={},D,z=!1,I=!1,u=!1;for(f=1;20>f;++f)h[111+f]="f"+f;for(f=0;9>=f;++f)h[f+96]=f;s(r,"keypress",y);s(r,"keydown",y);s(r,"keyup",y);var
m={bind:function(a,b,d){a=a instanceof Array?a:[a];for(var
c=0;c<a.length;++c)F(a[c],b,d);return this},
+unbind:function(a,b){return
m.bind(a,function(){},b)},trigger:function(a,b){if(q[a+":"+b])q[a+":"+b]({},a);return
this},reset:function(){l={};q={};return
this},stopCallback:function(a,b){return-1<(" "+b.className+" ").indexOf("
mousetrap
")?!1:"INPUT"==b.tagName||"SELECT"==b.tagName||"TEXTAREA"==b.tagName||b.isContentEditable},handleKey:function(a,b,d){var
c=C(a,b,d),e;b={};var
f=0,g=!1;for(e=0;e<c.length;++e)c[e].seq&&(f=Math.max(f,c[e].level));for(e=0;e<c.length;++e)c[e].seq?c[e].level==f&&(g=!0,
+b[c[e].seq]=1,x(c[e].callback,d,c[e].combo,c[e].seq)):g||x(c[e].callback,d,c[e].combo);c="keypress"==d.type&&I;d.type!=u||w(a)||c||t(b);I=g&&"keydown"==d.type}};J.Mousetrap=m;"function"===typeof
define&&define.amd&&define(m)})(window,document);
diff --git a/styles/theme-base.css b/styles/theme-base.css
index e99155d..232a8a3 100755
--- a/styles/theme-base.css
+++ b/styles/theme-base.css
@@ -1587,6 +1587,7 @@ div.soft-deprecation-notice blockquote.sidebar {
#intro .container,
.navbar-inner,
#breadcrumbs,
+ #trick div,
#layout {
width:1170px;
}
@@ -1595,6 +1596,7 @@ div.soft-deprecation-notice blockquote.sidebar {
#intro .container,
.navbar-inner,
#breadcrumbs,
+ #trick div,
#layout {
width:1440px;
}
@@ -1732,6 +1734,38 @@ div.soft-deprecation-notice blockquote.sidebar {
}
}
+#trick {
+ display: none;
+ background-color: #333;
+ border: .5em solid #9999CC;
+ border-right: 0;
+ border-left: 0;
+ border-top: 0;
+ height: 100%;
+ width: 100%;
+}
+#trick div {
+ margin: 0 auto;
+}
+#trick dt {
+ margin: 0 auto;
+}
+#trick dt, #trick dl {
+ color: #eee;
+ font-weight: bold;
+ margin-top: 1em;
+}
+#trick dl {
+ display: inline-block;
+ vertical-align: top;
+}
+#trick a {
+ color: #eee;
+ display: block;
+ padding: 2px;
+ color: #ccc;
+ border-bottom: none;
+}
/* {{{ Right-hand sidebar */
aside.tips {
-moz-box-sizing:border-box;--
PHP Webmaster List Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php