summaryrefslogtreecommitdiff
path: root/frontend/gamma/js/JQTouch/extensions/jqt.menusheet.js
Side-by-side diff
Diffstat (limited to 'frontend/gamma/js/JQTouch/extensions/jqt.menusheet.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/gamma/js/JQTouch/extensions/jqt.menusheet.js137
1 files changed, 137 insertions, 0 deletions
diff --git a/frontend/gamma/js/JQTouch/extensions/jqt.menusheet.js b/frontend/gamma/js/JQTouch/extensions/jqt.menusheet.js
new file mode 100644
index 0000000..8d21aca
--- a/dev/null
+++ b/frontend/gamma/js/JQTouch/extensions/jqt.menusheet.js
@@ -0,0 +1,137 @@
+/*
+
+ _/ _/_/ _/_/_/_/_/ _/
+ _/ _/ _/ _/_/ _/ _/ _/_/_/ _/_/_/
+ _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/ _/_/ _/ _/ _/_/ _/_/_/ _/_/_/ _/ _/
+ _/
+ _/
+
+ Documentation and issue tracking on Google Code <http://code.google.com/p/jqtouch/>
+
+ (c) 2012 by jQTouch project members.
+ See LICENSE.txt for license.
+
+ Author: Thomas Yip
+*/
+
+(function($) {
+ var src = $("head script").last().attr("src") || '';
+ var scriptpath = src.split('?')[0].split('/').slice(0, -1).join('/')+'/';
+ var csspath = scriptpath + 'jqt.menusheet.css';
+ var link = $('<link href="' + csspath + '" rel="stylesheet">');
+ $('head').append($(link));
+
+ function hide(callback) {
+ var $target = $(this);
+ var data = $(this).data('menusheet');
+ if (data.shown) {
+ $(this).data('menusheet', {});
+ var $source = data.source;
+ $source.unbind('touchstart mousedown', data.closehandler);
+ $source.one('webkitTransitionEnd', function() {
+ $source.removeClass('inmotion transition in');
+ $target.removeClass('inmotion out');
+ !callback || callback.apply(this, arguments);
+ });
+
+ $source.addClass('inmotion transition in');
+ $target.addClass('inmotion out').removeClass('current');
+ $('#jqt').removeClass('menuopened');
+ }
+ return $target;
+ }
+
+ function show(callback) {
+ var $target = $(this);
+ var data = $(this).data('menusheet') || {};
+ if (!data.shown) {
+ var $source = $('#jqt .current:not(.menusheet)');
+ var closehandler = function() {
+ $target.menusheet('hide');
+ return false;
+ };
+
+ $source.one('webkitTransitionEnd', function() {
+ $source.one('touchstart mousedown', closehandler);
+ $source.removeClass('inmotion transition out');
+ $target.removeClass('inmotion in');
+ !callback || callback.apply(this, arguments);
+ });
+
+ data.shown = true;
+ data.closehandler = closehandler;
+ data.source = $source;
+ $(this).data('menusheet', data);
+
+ $source.addClass('inmotion transition out');
+ $target.addClass('current in');
+ $('#jqt').addClass('menuopened');
+ }
+ return $target;
+ }
+
+ var methods = {
+ init: function(options) {
+ $(this).addClass('menusheet');
+ $(this).data({shown: false});
+ },
+ show: show,
+ hide: hide
+ };
+
+ $.fn.menusheet = function(method) {
+ if (methods[method]) {
+ if ($(this).is('.menusheet')) {
+ return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+ } else {
+ var msg = 'Target is not a `menusheet`. Action `' + method + '` is ignored.';
+ console.warn(msg);
+ }
+ } else if ( typeof method === 'object' || ! method ) {
+ return methods.init.apply(this, arguments);
+ } else {
+ $.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );
+ }
+ };
+
+ if ($.jQTouch) {
+ $.jQTouch.addTapHandler({
+ name: 'open-menusheet',
+ isSupported: function(e, params) {
+ return params.$el.is('.menu');
+ },
+ fn: function(e, params) {
+ params.$el.removeClass('active');
+
+ var $target = $(params.hash);
+ $target.menusheet('show');
+
+ return false;
+ }
+ });
+ $.jQTouch.addTapHandler({
+ name: 'follow-menulink',
+ isSupported: function(e, params) {
+ if ($('#jqt').hasClass('menuopened')) {
+ return params.$el.is('.menusheet a');
+ }
+ return false;
+ },
+ fn: function(e, params) {
+ params.$el.removeClass('active');
+
+ var $target = params.$el.closest('.menusheet');
+ $target.menusheet('hide', function() {
+ if (!params.$el.is('.dismiss')) {
+ params.$el.trigger('tap');
+ }
+ });
+ return false;
+ }
+ });
+ } else {
+ console.error('Extension `jqt.menusheet` failed to load. jQT not found');
+ }
+})($);