From 6e5e05755c106d436db809bd0f5850a659acdbac Mon Sep 17 00:00:00 2001 From: root Date: Sat, 11 Sep 2010 17:24:52 +0800 Subject: [PATCH] Add keyboard navigation module from http://photo.dragonsoft.us/clickcount/click.php?id=9 --- modules/kbd_nav/changelog.txt | 20 +++++ modules/kbd_nav/helpers/kbd_nav_theme.php | 8 ++ modules/kbd_nav/js/kbd_nav.js | 97 +++++++++++++++++++++++ modules/kbd_nav/module.info | 3 + 4 files changed, 128 insertions(+) create mode 100644 modules/kbd_nav/changelog.txt create mode 100644 modules/kbd_nav/helpers/kbd_nav_theme.php create mode 100644 modules/kbd_nav/js/kbd_nav.js create mode 100644 modules/kbd_nav/module.info diff --git a/modules/kbd_nav/changelog.txt b/modules/kbd_nav/changelog.txt new file mode 100644 index 00000000..203fdea1 --- /dev/null +++ b/modules/kbd_nav/changelog.txt @@ -0,0 +1,20 @@ +Kbd Navigation Changelog + +version 1.5: +- Fix for RTL detection +- Added support for Wind theme + +version 1.4: +- Added RTL detection + +version 1.3: +- Internal revision + +version 1.2: +- Added support for GreyDragon Photo Slideshow navigation - in Photo SB slideshow mode, key navigation is superseded by slideshow navigation. + +version 1.1: +- Internal revision + +version 1.0: +- Initial release \ No newline at end of file diff --git a/modules/kbd_nav/helpers/kbd_nav_theme.php b/modules/kbd_nav/helpers/kbd_nav_theme.php new file mode 100644 index 00000000..6540f020 --- /dev/null +++ b/modules/kbd_nav/helpers/kbd_nav_theme.php @@ -0,0 +1,8 @@ +script("kbd_nav.js"); + } +} \ No newline at end of file diff --git a/modules/kbd_nav/js/kbd_nav.js b/modules/kbd_nav/js/kbd_nav.js new file mode 100644 index 00000000..83c95969 --- /dev/null +++ b/modules/kbd_nav/js/kbd_nav.js @@ -0,0 +1,97 @@ +/** +* +* Copyright (c) 2010 Serguei Dosyukov, http://blog.dragonsoft.us +* +* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation +* files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, +* modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +* IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +* +*/ + +$.fn.KbdNavigation = function(options, callback) { + + this.options = options || {}; + var opt = this.options; + this.callback = callback || null; + var clbk = this.callback; + + $(this).bind("keydown", function(event) { + if ($('#sb-body-inner>img#sb-content').is(':visible')) { + return false; + } + + var direction = "ltr"; + if (document.body) { + if (window.getComputedStyle) { + direction = window.getComputedStyle(document.body, null).direction; + } else if (document.body.currentStyle) { + direction = document.body.currentStyle.direction; + } + } + + var lnk = ""; + var lnk_first, lnk_prev, lnk_parent, lnk_next, lnk_last; + + if(opt.first) { lnk_first = opt.first; } else { lnk_first = $("#g-navi-first").attr("href"); } + if(opt.prev) { lnk_prev = opt.prev; } else { lnk_prev = $("#g-navi-prev").attr("href"); } + if(opt.parent) { lnk_parent = opt.parent; } else { lnk_parent = $("#g-navi-parent").attr("href"); } + if(opt.next) { lnk_next = opt.next; } else { lnk_next = $("#g-navi-next").attr("href"); } + if(opt.last) { lnk_last = opt.last; } else { lnk_last = $("#g-navi-last").attr("href"); } + + // Support for standard Wind Theme tags + if(!lnk_first) { lnk_first = $(".g-paginator .ui-icon-seek-first").parent().attr("href"); } + if(!lnk_prev) { lnk_prev = $(".g-paginator .ui-icon-seek-prev").parent().attr("href"); } + if(!lnk_next) { lnk_next = $(".g-paginator .ui-icon-seek-next").parent().attr("href"); } + if(!lnk_last) { lnk_last = $(".g-paginator .ui-icon-seek-end").parent().attr("href"); } + + var keyCode = event.keyCode; + + if (direction == "rtl") { + switch(keyCode) { + case 0x25: // Left + keyCode = 0x27; + break; + case 0x27: // Right + keyCode = 0x25; + break; + } + } + + switch(keyCode) { + case 0x25: // Ctr+Left/Left + if(event.ctrlKey) { lnk = lnk_first; } else { lnk = lnk_prev; } + break; + case 0x26: // Ctrl+Up + if(event.ctrlKey) { lnk = lnk_parent; } + break; + case 0x27: // Ctrl+Right/Right + if(event.ctrlKey) { lnk = lnk_last; } else { lnk = lnk_next; } + break; + } + + if(lnk) { + if(typeof clbk == 'function') { + clbk(); + return false; + } else { + window.location = lnk; + return true; + } + } + + return true; + }); +} + +$(document).ready( function() { + $(document).KbdNavigation({}); + if ($('#sb-content').is(':visible')) { return true; } +}); \ No newline at end of file diff --git a/modules/kbd_nav/module.info b/modules/kbd_nav/module.info new file mode 100644 index 00000000..2eda7c73 --- /dev/null +++ b/modules/kbd_nav/module.info @@ -0,0 +1,3 @@ +name = "Kbd Navigation" +description = "Adds keyboard navigation to the gallery.
Version 1.5 | By Serguei Dosyukov | Visit plugin Site | Support" +version = 5