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.'&amp;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

Reply via email to