From fdea3091b79b06139354449d214b388171ba8a69 Mon Sep 17 00:00:00 2001 From: Jack Lukic Date: Fri, 26 Jul 2013 14:13:03 -0400 Subject: [PATCH] Updates widget factory to be more consistent accross modules Former-commit-id: 0a9c0b81004df91f5385b3d21fce7b04fa5877f2 Former-commit-id: 6987d9702d850b69c2969b87e4c506d4959cb055 --- src/modules/accordion.js | 20 +- src/modules/carousel.js | 1 - src/modules/checkbox.js | 67 ++-- src/modules/dimmer.js | 24 +- src/modules/dropdown.js | 20 +- src/modules/modal.js | 13 +- src/modules/nag.js | 723 ++++++++++++++++++++++++--------------- src/modules/popup.js | 70 ++-- src/modules/search.js | 404 +++++++++++----------- src/modules/shape.js | 72 ++-- src/modules/tab.js | 6 +- 11 files changed, 780 insertions(+), 640 deletions(-) diff --git a/src/modules/accordion.js b/src/modules/accordion.js index de5cf14c4..19cbc0d3e 100755 --- a/src/modules/accordion.js +++ b/src/modules/accordion.js @@ -26,8 +26,7 @@ $.fn.accordion = function(parameters) { query = arguments[0], methodInvoked = (typeof query == 'string'), queryArguments = [].slice.call(arguments, 1), - invokedResponse, - allModules + invokedResponse ; $allModules .each(function() { @@ -37,14 +36,11 @@ $.fn.accordion = function(parameters) { $icon = $module.find(settings.selector.icon), $content = $module.find(settings.selector.content), - selector = $module.selector || '', element = this, - instance = $module.data('module-' + settings.namespace), + instance = $module.data(moduleNamespace), className = settings.className, - metadata = settings.metadata, namespace = settings.namespace, - animation = settings.animation, errors = settings.errors, module @@ -56,17 +52,18 @@ $.fn.accordion = function(parameters) { module.debug('Initializing accordion with bound events', $module); // initializing $title - .on('click', module.event.click) + .on('click' + eventNamespace, module.event.click) ; $module - .data('module', module) + .data(moduleNamespace, module) ; }, destroy: function() { module.debug('Destroying previous accordion for', $module); $module - .off(namespace) + .off(eventNamespace) + .removeData(moduleNamespace) ; }, @@ -247,7 +244,7 @@ $.fn.accordion = function(parameters) { performance.push({ 'Element' : element, 'Name' : message[0], - 'Arguments' : message[1] || '', + 'Arguments' : [].slice.call(message, 1) || '', 'Execution Time' : executionTime }); } @@ -306,7 +303,6 @@ $.fn.accordion = function(parameters) { }); } if ( $.isFunction( found ) ) { - instance.verbose('Executing invoked function', found); return found.apply(context, passedArguments); } return found || false; @@ -337,7 +333,7 @@ $.fn.accordion.settings = { debug : true, verbose : true, - performance : false, + performance : true, exclusive : true, collapsible : true, diff --git a/src/modules/carousel.js b/src/modules/carousel.js index 6f3eb8c66..3bd6a69ab 100755 --- a/src/modules/carousel.js +++ b/src/modules/carousel.js @@ -264,7 +264,6 @@ $.fn.carousel = function(parameters) { }); } if ( $.isFunction( found ) ) { - instance.verbose('Executing invoked function', found); return found.apply(context, passedArguments); } return found || false; diff --git a/src/modules/checkbox.js b/src/modules/checkbox.js index 90b640e8c..b328c5a14 100755 --- a/src/modules/checkbox.js +++ b/src/modules/checkbox.js @@ -18,8 +18,6 @@ $.fn.checkbox = function(parameters) { settings = $.extend(true, {}, $.fn.checkbox.settings, parameters), - eventNamespace = '.' + settings.namespace, - moduleNamespace = 'module-' + settings.namespace, moduleSelector = $allModules.selector || '', time = new Date().getTime(), @@ -34,33 +32,35 @@ $.fn.checkbox = function(parameters) { $allModules .each(function() { var - $module = $(this), - $label = $(this).next(settings.selector.label).first(), - $input = $(this).find(settings.selector.input), + $module = $(this), + $label = $(this).next(settings.selector.label).first(), + $input = $(this).find(settings.selector.input), + + eventNamespace = '.' + settings.namespace, + moduleNamespace = 'module-' + settings.namespace, - selector = $module.selector || '', - element = this, - instance = $module.data('module-' + settings.namespace), - - className = settings.className, - namespace = settings.namespace, - errors = settings.errors, + selector = $module.selector || '', + element = this, + instance = $module.data(moduleNamespace), + + className = settings.className, + namespace = settings.namespace, + errors = settings.errors, module ; module = { initialize: function() { + module.verbose('Initializing checkbox'); if(settings.context && selector !== '') { - module.verbose('Initializing checkbox with delegated events', $module); + module.verbose('Adding delegated events'); $(element, settings.context) .on(selector, 'click' + eventNamespace, module.toggle) .on(selector + ' + ' + settings.selector.label, 'click' + eventNamespace, module.toggle) - .data(moduleNamespace, module) ; } else { - module.verbose('Initializing checkbox with bound events', $module); $module .on('click' + eventNamespace, module.toggle) .data(moduleNamespace, module) @@ -69,10 +69,19 @@ $.fn.checkbox = function(parameters) { .on('click' + eventNamespace, module.toggle) ; } + module.instantiate(); + }, + + instantiate: function() { + module.verbose('Storing instance of module', module); + instance = module; + $module + .data(moduleNamespace, module) + ; }, destroy: function() { - module.verbose('Destroying previous module for', $module); + module.verbose('Destroying previous module'); $module .off(namespace) ; @@ -80,9 +89,7 @@ $.fn.checkbox = function(parameters) { is: { radio: function() { - return $module - .hasClass(className.radio) - ; + return $module.hasClass(className.radio); } }, @@ -119,8 +126,8 @@ $.fn.checkbox = function(parameters) { $.proxy(settings.onDisable, $input.get())(); }, - toggle: function() { - module.verbose('Toggling checkbox state'); + toggle: function(event) { + module.verbose('Determining new checkbox state', $(event.target)); if($input.prop('checked') === undefined || !$input.prop('checked')) { module.enable(); } @@ -128,15 +135,12 @@ $.fn.checkbox = function(parameters) { module.disable(); } }, - setting: function(name, value) { if(value !== undefined) { if( $.isPlainObject(name) ) { - module.verbose('Modifying settings object', name, value); $.extend(true, settings, name); } else { - module.verbose('Modifying setting', name, value); settings[name] = value; } } @@ -147,11 +151,9 @@ $.fn.checkbox = function(parameters) { internal: function(name, value) { if(value !== undefined) { if( $.isPlainObject(name) ) { - module.verbose('Modifying internal property', name, value); $.extend(true, module, name); } else { - module.verbose('Changing internal method to', value); module[name] = value; } } @@ -180,7 +182,7 @@ $.fn.checkbox = function(parameters) { } }, error: function() { - module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); + module.error = Function.prototype.bind.call(console.warn, console, settings.moduleName + ':'); }, performance: { log: function(message) { @@ -197,7 +199,7 @@ $.fn.checkbox = function(parameters) { performance.push({ 'Element' : element, 'Name' : message[0], - 'Arguments' : message[1] || '', + 'Arguments' : [].slice.call(message, 1) || '', 'Execution Time' : executionTime }); } @@ -245,18 +247,16 @@ $.fn.checkbox = function(parameters) { $.each(query, function(depth, value) { if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) { instance = instance[value]; - return true; } else if( instance[value] !== undefined ) { found = instance[value]; - return true; } - module.error(errors.method); - return false; + else { + module.error(errors.method); + } }); } if ( $.isFunction( found ) ) { - instance.verbose('Executing invoked function', found); return found.apply(context, passedArguments); } return found || false; @@ -277,6 +277,7 @@ $.fn.checkbox = function(parameters) { } }) ; + return (invokedResponse) ? invokedResponse : this diff --git a/src/modules/dimmer.js b/src/modules/dimmer.js index a2510db6e..ef6cb58ba 100755 --- a/src/modules/dimmer.js +++ b/src/modules/dimmer.js @@ -20,7 +20,6 @@ $.fn.dimmer = function(parameters) { eventNamespace = '.' + settings.namespace, moduleNamespace = 'module-' + settings.namespace, moduleSelector = $allModules.selector || '', - moduleCount = $allModules.size(), time = new Date().getTime(), performance = [], @@ -46,7 +45,7 @@ $.fn.dimmer = function(parameters) { animationEnd = 'animationend msAnimationEnd oAnimationEnd webkitAnimationEnd', element = this, - instance = $dimmer.data('module-' + namespace), + instance = $dimmer.data(moduleNamespace), module ; @@ -56,29 +55,29 @@ $.fn.dimmer = function(parameters) { if( module.is.dimmer() ) { $dimmer = $module; $module = $dimmer.parent(); - module.debug('Module initialized as dimmer', $dimmer); + module.debug('Module initialized as dimmer'); } else { if( module.has.dimmer() ) { $dimmer = $module.find(selector.dimmer); - module.debug('Module initialized with found dimmer', $dimmer); + module.debug('Module initialized with found dimmer'); } else { $dimmer = settings.template.dimmer(); $dimmer .appendTo($module) ; - module.debug('Module initialized with created dimmer', $dimmer); + module.debug('Module initialized with created dimmer'); } if(settings.on == 'hover') { $module - .on('mouseenter', module.show) - .on('mouseleave', module.hide) + .on('mouseenter' + eventNamespace, module.show) + .on('mouseleave' + eventNamespace, module.hide) ; } else if(settings.on == 'click') { $module - .on('click', module.toggle) + .on('click' + eventNamespace, module.toggle) ; } } @@ -97,12 +96,12 @@ $.fn.dimmer = function(parameters) { module.verbose('Storing instance of module'); instance = module; $dimmer - .data('module-' + namespace, instance) + .data(moduleNamespace, instance) ; }, destroy: function() { - module.verbose('Destroying previous module for', $module); + module.verbose('Destroying previous module'); $module .off(namespace) ; @@ -336,7 +335,7 @@ $.fn.dimmer = function(parameters) { performance.push({ 'Element' : element, 'Name' : message[0], - 'Arguments' : message[1] || '', + 'Arguments' : [].slice.call(message, 1) || '', 'Execution Time' : executionTime }); } @@ -394,7 +393,6 @@ $.fn.dimmer = function(parameters) { }); } if ( $.isFunction( found ) ) { - instance.verbose('Executing invoked function', found); return found.apply(context, passedArguments); } return found || false; @@ -408,7 +406,7 @@ $.fn.dimmer = function(parameters) { invokedResponse = module.invoke(query); } else { - if(instance === undefined) { + if(instance !== undefined) { module.destroy(); } module.initialize(); diff --git a/src/modules/dropdown.js b/src/modules/dropdown.js index a385274eb..1a0c45967 100755 --- a/src/modules/dropdown.js +++ b/src/modules/dropdown.js @@ -28,8 +28,7 @@ $.fn.dropdown = function(parameters) { query = arguments[0], methodInvoked = (typeof query == 'string'), queryArguments = [].slice.call(arguments, 1), - invokedResponse, - allModules + invokedResponse ; $allModules @@ -43,9 +42,8 @@ $.fn.dropdown = function(parameters) { isTouchDevice = ('ontouchstart' in document.documentElement), - selector = $module.selector || '', element = this, - instance = $module.data('module-' + settings.namespace), + instance = $module.data(moduleNamespace), className = settings.className, metadata = settings.metadata, @@ -59,7 +57,7 @@ $.fn.dropdown = function(parameters) { module = { initialize: function() { - module.verbose('Initializing dropdown with bound events', $module); + module.debug('Initializing dropdown with bound events', $module); if(isTouchDevice) { $module .on('touchstart' + eventNamespace, module.event.test.toggle) @@ -87,6 +85,11 @@ $.fn.dropdown = function(parameters) { $item .on(module.get.selectEvent() + eventNamespace, module.event.item.click) ; + module.instantiate(); + }, + + instantiate: function() { + module.verbose('Storing instance of module', module); $module .data(moduleNamespace, module) ; @@ -96,6 +99,7 @@ $.fn.dropdown = function(parameters) { module.verbose('Destroying previous module for', $module); $module .off(namespace) + .removeData(moduleNamespace) ; }, @@ -250,7 +254,6 @@ $.fn.dropdown = function(parameters) { }, selected: function(value) { var - selectedValue = value || $input.val(), $selectedItem = module.get.item(value), selectedText ; @@ -463,7 +466,7 @@ $.fn.dropdown = function(parameters) { } }, error: function() { - module.error = Function.prototype.bind.call(console.error, console, settings.moduleName + ':'); + module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); }, performance: { log: function(message) { @@ -480,7 +483,7 @@ $.fn.dropdown = function(parameters) { performance.push({ 'Element' : element, 'Name' : message[0], - 'Arguments' : message[1] || '', + 'Arguments' : [].slice.call(message, 1) || '', 'Execution Time' : executionTime }); } @@ -538,7 +541,6 @@ $.fn.dropdown = function(parameters) { }); } if ( $.isFunction( found ) ) { - instance.verbose('Executing invoked function', found); return found.apply(context, passedArguments); } return found || false; diff --git a/src/modules/modal.js b/src/modules/modal.js index 1a1018b17..a6dcafd88 100755 --- a/src/modules/modal.js +++ b/src/modules/modal.js @@ -121,10 +121,10 @@ instance = $modal.data('module-' + settings.namespace), methodInvoked = (typeof query == 'string'), - + className = settings.className, namespace = settings.namespace, - + module ; @@ -154,6 +154,7 @@ startPosition ; $modal + .removeClass('absolute fixed') .addClass(modalType) ; topCentering = (cantFit) @@ -341,16 +342,16 @@ unDim : function(){}, hide : function(){}, show : function(){}, - + context : 'body', opacity : 0.8, - + closeSpacing : 25, animationOffset : 15, - + duration : 400, easing : 'easeOutExpo', - + selector : { dimmer : '#dimmer', modal : '.modal', diff --git a/src/modules/nag.js b/src/modules/nag.js index 55566b087..bb4f75453 100755 --- a/src/modules/nag.js +++ b/src/modules/nag.js @@ -8,345 +8,500 @@ ;(function ($, window, document, undefined) { - $.fn.nag = function(parameters) { - var - settings = $.extend(true, {}, $.fn.nag.settings, parameters), - // hoist arguments - moduleArguments = arguments || false - ; - $(this) - .each(function() { - var - $module = $(this), - $close = $module.find(settings.selector.close), - - $context = $(settings.context), - - instance = $module.data('module'), - className = settings.className, - - moduleOffset, - moduleHeight, - - contextWidth, - contextHeight, - contextOffset, - - yOffset, - yPosition, - - timer, - module, - - requestAnimationFrame = window.requestAnimationFrame - || window.mozRequestAnimationFrame - || window.webkitRequestAnimationFrame - || window.msRequestAnimationFrame - || function(callback) { setTimeout(callback, 0); } - ; - module = { - - initialize: function() { - // calculate module offset once - moduleOffset = $module.offset(); - moduleHeight = $module.outerHeight(); - contextWidth = $context.outerWidth(); - contextHeight = $context.outerHeight(); - contextOffset = $context.offset(); - +$.fn.nag = function(parameters) { + var + $allModules = $(this), + settings = $.extend(true, {}, $.fn.nag.settings, parameters), + + eventNamespace = '.' + settings.namespace, + moduleNamespace = settings.namespace + '-module', + moduleSelector = $allModules.selector || '', + + time = new Date().getTime(), + performance = [], + + query = arguments[0], + methodInvoked = (typeof query == 'string'), + queryArguments = [].slice.call(arguments, 1), + invokedResponse + ; + $(this) + .each(function() { + var + $module = $(this), + + $close = $module.find(settings.selector.close), + $context = $(settings.context), + + + element = this, + instance = $module.data(moduleNamespace), + + className = settings.className, + errors = settings.errors, + + moduleOffset, + moduleHeight, + + contextWidth, + contextHeight, + contextOffset, + + yOffset, + yPosition, + + timer, + module, + + requestAnimationFrame = window.requestAnimationFrame + || window.mozRequestAnimationFrame + || window.webkitRequestAnimationFrame + || window.msRequestAnimationFrame + || function(callback) { setTimeout(callback, 0); } + ; + module = { + + initialize: function() { + module.verbose('Initializing element'); + // calculate module offset once + moduleOffset = $module.offset(); + moduleHeight = $module.outerHeight(); + contextWidth = $context.outerWidth(); + contextHeight = $context.outerHeight(); + contextOffset = $context.offset(); + + $module + .data(moduleNamespace, module) + ; + $close + .on('click' + eventNamespace, module.dismiss) + ; + // lets avoid javascript if we dont need to reposition + if(settings.context == window && settings.position == 'fixed') { $module - .data('module', module) - ; - $close - .on('click', module.dismiss) + .addClass(className.fixed) ; - // lets avoid javascript if we dont need to reposition - if(settings.context == window && settings.position == 'fixed') { - $module - .addClass(className.fixed) + } + if(settings.sticky) { + module.verbose('Adding scroll events'); + // retrigger on scroll for absolute + if(settings.position == 'absolute') { + $context + .on('scroll' + eventNamespace, module.event.scroll) + .on('resize' + eventNamespace, module.event.scroll) ; } - if(settings.sticky) { - // retrigger on scroll for absolute - if(settings.position == 'absolute') { - $context - .on('scroll resize', module.event.scroll) - ; - } - // fixed is always relative to window - else { - $(window) - .on('scroll resize', module.event.scroll) - ; - } - // fire once to position on init - $.proxy(module.event.scroll, this)(); + // fixed is always relative to window + else { + $(window) + .on('scroll' + eventNamespace, module.event.scroll) + .on('resize' + eventNamespace, module.event.scroll) + ; } + // fire once to position on init + $.proxy(module.event.scroll, this)(); + } - if(settings.displayTime > 0) { - setTimeout(module.hide, settings.displayTime); - } - if(module.should.show()) { - if( !$module.is(':visible') ) { - module.show(); - } - } - else { - module.hide(); + if(settings.displayTime > 0) { + setTimeout(module.hide, settings.displayTime); + } + if(module.should.show()) { + if( !$module.is(':visible') ) { + module.show(); } - }, + } + else { + module.hide(); + } + }, + + destroy: function() { + module.verbose('Destroying instance'); + $module + .removeData(moduleNamespace) + .off(eventNamespace) + ; + if(settings.sticky) { + $context + .off(eventNamespace) + ; + } + }, + + refresh: function() { + module.debug('Refreshing cached calculations'); + moduleOffset = $module.offset(); + moduleHeight = $module.outerHeight(); + contextWidth = $context.outerWidth(); + contextHeight = $context.outerHeight(); + contextOffset = $context.offset(); + }, + + show: function() { + module.debug('Showing nag', settings.animation.show); + if(settings.animation.show == 'fade') { + $module + .fadeIn(settings.duration, settings.easing) + ; + } + else { + $module + .slideDown(settings.duration, settings.easing) + ; + } + }, + + hide: function() { + module.debug('Showing nag', settings.animation.hide); + if(settings.animation.show == 'fade') { + $module + .fadeIn(settings.duration, settings.easing) + ; + } + else { + $module + .slideUp(settings.duration, settings.easing) + ; + } + }, - refresh: function() { - moduleOffset = $module.offset(); - moduleHeight = $module.outerHeight(); - contextWidth = $context.outerWidth(); - contextHeight = $context.outerHeight(); - contextOffset = $context.offset(); - }, + onHide: function() { + module.debug('Removing nag', settings.animation.hide); + $module.remove(); + if (settings.onHide) { + settings.onHide(); + } + }, + + stick: function() { + module.refresh(); + if(settings.position == 'fixed') { + var + windowScroll = $(window).prop('pageYOffset') || $(window).scrollTop(), + fixedOffset = ( $module.hasClass(className.bottom) ) + ? contextOffset.top + (contextHeight - moduleHeight) - windowScroll + : contextOffset.top - windowScroll + ; + $module + .css({ + position : 'fixed', + top : fixedOffset, + left : contextOffset.left, + width : contextWidth - settings.scrollBarWidth + }) + ; + } + else { + $module + .css({ + top : yPosition + }) + ; + } + }, + unStick: function() { + $module + .css({ + top : '' + }) + ; + }, + dismiss: function(event) { + if(settings.storageMethod) { + module.storage.set(settings.storedKey, settings.storedValue); + } + module.hide(); + event.stopImmediatePropagation(); + event.preventDefault(); + }, + + should: { show: function() { - if(settings.animation.show == 'fade') { - $module - .fadeIn(settings.duration, settings.easing) - ; + if(settings.persist) { + module.debug('Persistent nag is set, can show nag'); + return true; } - else { - $module - .slideDown(settings.duration, settings.easing) - ; + if(module.storage.get(settings.storedKey) != settings.storedValue) { + module.debug('Stored value is not set can show nag', module.storage.get(settings.storedKey)); + return true; } + module.debug('Stored value is set, cant show nag', module.storage.get(settings.storedKey)); + return false; }, - - hide: function() { - if(settings.animation.show == 'fade') { - $module - .fadeIn(settings.duration, settings.easing) - ; + stick: function() { + yOffset = $context.prop('pageYOffset') || $context.scrollTop(); + yPosition = ( $module.hasClass(className.bottom) ) + ? (contextHeight - $module.outerHeight() ) + yOffset + : yOffset + ; + // absolute position calculated when y offset met + if(yPosition > moduleOffset.top) { + return true; } - else { - $module - .slideUp(settings.duration, settings.easing) - ; + else if(settings.position == 'fixed') { + return true; } - }, + return false; + } + }, - onHide: function() { - $module.remove(); - if (settings.onHide) { - settings.onHide(); - } - }, + storage: { - stick: function() { - module.refresh(); - - if(settings.position == 'fixed') { - var - windowScroll = $(window).prop('pageYOffset') || $(window).scrollTop(), - fixedOffset = ( $module.hasClass(className.bottom) ) - ? contextOffset.top + (contextHeight - moduleHeight) - windowScroll - : contextOffset.top - windowScroll - ; - $module - .css({ - position : 'fixed', - top : fixedOffset, - left : contextOffset.left, - width : contextWidth - settings.scrollBarWidth - }) - ; + set: function(key, value) { + module.debug('Setting stored value', key, value, settings.storageMethod); + if(settings.storageMethod == 'local' && window.store !== undefined) { + window.store.set(key, value); + } + // store by cookie + else if($.cookie !== undefined) { + $.cookie(key, value); } else { - $module - .css({ - top : yPosition - }) - ; + module.error(errors.noStorage); } }, - unStick: function() { - $module - .css({ - top : '' - }) - ; - }, - dismiss: function(event) { - if(settings.storageMethod) { - module.storage.set(settings.storedKey, settings.storedValue); + get: function(key) { + module.debug('Getting stored value', key, settings.storageMethod); + if(settings.storageMethod == 'local' && window.store !== undefined) { + return window.store.get(key); } - module.hide(); - event.stopImmediatePropagation(); - event.preventDefault(); - }, - - should: { - show: function() { - if( !settings.persist && module.storage.get(settings.storedKey) == settings.storedValue) { - return false; - } - return true; - }, - stick: function() { - yOffset = $context.prop('pageYOffset') || $context.scrollTop(); - yPosition = ( $module.hasClass(className.bottom) ) - ? (contextHeight - $module.outerHeight() ) + yOffset - : yOffset - ; - // absolute position calculated when y offset met - if(yPosition > moduleOffset.top) { - return true; - } - else if(settings.position == 'fixed') { - return true; - } - return false; + // get by cookie + else if($.cookie !== undefined) { + return $.cookie(key); } - }, + else { + module.error(errors.noStorage); + } + } - storage: { + }, - set: function(key, value) { - if(settings.storageMethod == 'local' && window.store !== undefined) { - window.store.set(key, value); - } - // store by cookie - else if($.cookie !== undefined) { - $.cookie(key, value); - } - else { - module.error(settings.errors.noStorage); - } - }, - get: function(key) { - if(settings.storageMethod == 'local' && window.store !== undefined) { - return window.store.get(key); - } - // get by cookie - else if($.cookie !== undefined) { - return $.cookie(key); + event: { + scroll: function() { + if(timer !== undefined) { + clearTimeout(timer); + } + timer = setTimeout(function() { + if(module.should.stick() ) { + requestAnimationFrame(module.stick); } else { - module.error(settings.errors.noStorage); + module.unStick(); } + }, settings.lag); + } + }, + setting: function(name, value) { + module.debug('Changing setting', name, value); + if(value !== undefined) { + if( $.isPlainObject(name) ) { + $.extend(true, settings, name); } - - }, - - event: { - scroll: function() { - if(timer !== undefined) { - clearTimeout(timer); - } - timer = setTimeout(function() { - if(module.should.stick() ) { - requestAnimationFrame(module.stick); - } - else { - module.unStick(); - } - }, settings.lag); + else { + settings[name] = value; } - }, - - error: function(error) { - console.log('Nag Module:' + error); - }, - - // allows for dot notation method calls - invoke: function(methodName, context, methodArguments) { + } + else { + return settings[name]; + } + }, + internal: function(name, value) { + module.debug('Changing internal', name, value); + if(value !== undefined) { + if( $.isPlainObject(name) ) { + $.extend(true, module, name); + } + else { + module[name] = value; + } + } + else { + return module[name]; + } + }, + debug: function() { + if(settings.debug) { + if(settings.performance) { + module.performance.log(arguments); + } + else { + module.debug = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + } + } + }, + verbose: function() { + if(settings.verbose && settings.debug) { + if(settings.performance) { + module.performance.log(arguments); + } + else { + module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':'); + } + } + }, + error: function() { + module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':'); + }, + performance: { + log: function(message) { var - method + currentTime, + executionTime, + previousTime ; - methodArguments = methodArguments || Array.prototype.slice.call( arguments, 2 ); - if(typeof methodName == 'string' && instance !== undefined) { - methodName = methodName.split('.'); - $.each(methodName, function(index, name) { - if( $.isPlainObject( instance[name] ) ) { - instance = instance[name]; - return true; - } - else if( $.isFunction( instance[name] ) ) { - method = instance[name]; - return true; - } - module.error(settings.errors.method); - return false; + if(settings.performance) { + currentTime = new Date().getTime(); + previousTime = time || currentTime, + executionTime = currentTime - previousTime; + time = currentTime; + performance.push({ + 'Element' : element, + 'Name' : message[0], + 'Arguments' : [].slice.call(message, 1) || '', + 'Execution Time' : executionTime }); } - if ( $.isFunction( method ) ) { - return method.apply(context, methodArguments); + clearTimeout(module.performance.timer); + module.performance.timer = setTimeout(module.performance.display, 100); + }, + display: function() { + var + title = settings.moduleName + ':', + totalTime = 0 + ; + time = false; + $.each(performance, function(index, data) { + totalTime += data['Execution Time']; + }); + title += ' ' + totalTime + 'ms'; + if(moduleSelector) { + title += ' \'' + moduleSelector + '\''; + } + if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) { + console.groupCollapsed(title); + if(console.table) { + console.table(performance); + } + else { + $.each(performance, function(index, data) { + console.log(data['Name'] + ': ' + data['Execution Time']+'ms'); + }); + } + console.groupEnd(); } - // return retrieved variable or chain - return method; + performance = []; } - - }; - - if(instance !== undefined && moduleArguments) { - if(moduleArguments[0] == 'invoke') { - moduleArguments = Array.prototype.slice.call( moduleArguments, 1 ); + }, + invoke: function(query, passedArguments, context) { + var + maxDepth, + found + ; + passedArguments = passedArguments || queryArguments; + context = element || context; + if(typeof query == 'string' && instance !== undefined) { + query = query.split('.'); + maxDepth = query.length - 1; + $.each(query, function(depth, value) { + if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) { + instance = instance[value]; + return true; + } + else if( instance[value] !== undefined ) { + found = instance[value]; + return true; + } + module.error(errors.method); + return false; + }); + } + if ( $.isFunction( found ) ) { + return found.apply(context, passedArguments); } - return module.invoke(moduleArguments[0], this, Array.prototype.slice.call( moduleArguments, 1 ) ); + return found || false; + } + }; + if(methodInvoked) { + if(instance === undefined) { + module.initialize(); + } + invokedResponse = module.invoke(query); + } + else { + if(instance !== undefined) { + module.destroy(); } module.initialize(); + } + + }) + ; + return (invokedResponse) + ? invokedResponse + : this + ; +}; + +$.fn.nag.settings = { - }) - ; - return this; - }; + moduleName : 'Nag Module', - $.fn.nag.settings = { + verbose : true, + debug : true, + performance : true, + + namespace : 'Nag', - // allows cookie to be overriden - persist : false, + // allows cookie to be overriden + persist : false, - // set to zero to manually dismiss, otherwise hides on its own - displayTime : 0, + // set to zero to manually dismiss, otherwise hides on its own + displayTime : 0, - animation : { - show: 'slide', - hide: 'slide' - }, + animation : { + show: 'slide', + hide: 'slide' + }, - // method of stickyness - position : 'fixed', - scrollBarWidth : 18, + // method of stickyness + position : 'fixed', + scrollBarWidth : 18, - // type of storage to use - storageMethod : 'cookie', + // type of storage to use + storageMethod : 'cookie', - // value to store in dismissed localstorage/cookie - storedKey : 'nag', - storedValue : 'dismiss', + // value to store in dismissed localstorage/cookie + storedKey : 'nag', + storedValue : 'dismiss', - // need to calculate stickyness on scroll - sticky : false, + // need to calculate stickyness on scroll + sticky : false, - // how often to check scroll event - lag : 0, + // how often to check scroll event + lag : 0, - // context for scroll event - context : window, + // context for scroll event + context : window, - errors: { - noStorage : 'Neither $.cookie or store is defined. A storage solution is required for storing state' - }, + errors: { + noStorage : 'Neither $.cookie or store is defined. A storage solution is required for storing state' + }, - className : { - bottom : 'bottom', - fixed : 'fixed' - }, + className : { + bottom : 'bottom', + fixed : 'fixed' + }, - selector : { - close: '.icon.close' - }, + selector : { + close: '.icon.close' + }, - speed : 500, - easing : 'easeOutQuad', + speed : 500, + easing : 'easeOutQuad', - onHide: function() {} + onHide: function() {} - }; +}; })( jQuery, window , document ); diff --git a/src/modules/popup.js b/src/modules/popup.js index 7e71908e8..ecffe32c3 100755 --- a/src/modules/popup.js +++ b/src/modules/popup.js @@ -17,20 +17,11 @@ $.fn.popup = function(parameters) { ? $.extend(true, {}, $.fn.popup.settings, parameters) : $.fn.popup.settings, - eventNamespace = '.' + settings.namespace, - moduleNamespace = 'module-' + settings.namespace, moduleSelector = $allModules.selector || '', - moduleCount = $allModules.size(), time = new Date().getTime(), performance = [], - selector = settings.selector, - className = settings.className, - error = settings.error, - metadata = settings.metadata, - namespace = settings.namespace, - query = arguments[0], methodInvoked = (typeof query == 'string'), queryArguments = [].slice.call(arguments, 1), @@ -40,17 +31,27 @@ $.fn.popup = function(parameters) { $allModules .each(function() { var - $module = $(this), - $window = $(window), - $offsetParent = $module.offsetParent(), - $popup = (settings.inline) - ? $module.next(selector.popup) - : $window.children(selector.popup).last(), - - searchDepth = 0, - - element = this, - instance = $module.data('module-' + settings.namespace), + $module = $(this), + + $window = $(window), + $offsetParent = $module.offsetParent(), + $popup = (settings.inline) + ? $module.next(settings.selector.popup) + : $window.children(settings.selector.popup).last(), + + searchDepth = 0, + + eventNamespace = '.' + settings.namespace, + moduleNamespace = settings.namespace + '-module', + + selector = settings.selector, + className = settings.className, + error = settings.error, + metadata = settings.metadata, + namespace = settings.namespace, + + element = this, + instance = $module.data(moduleNamespace), module ; @@ -61,26 +62,26 @@ $.fn.popup = function(parameters) { module.debug('Initializing module', $module); if(settings.on == 'hover') { $module - .on('mouseenter.' + namespace, module.event.mouseenter) - .on('mouseleave.' + namespace, module.event.mouseleave) + .on('mouseenter' + eventNamespace, module.event.mouseenter) + .on('mouseleave' + eventNamespace, module.event.mouseleave) ; } else { $module - .on(settings.on + '.' + namespace, module.event[settings.on]) + .on(settings.on + '' + eventNamespace, module.event[settings.on]) ; } $window - .on('resize.' + namespace, module.event.resize) + .on('resize' + eventNamespace, module.event.resize) ; module.instantiate(); }, instantiate: function() { - module.verbose('Storing instance of module'); + module.verbose('Storing instance of module', module); instance = module; $module - .data('module-' + namespace, instance) + .data(moduleNamespace, instance) ; }, @@ -93,9 +94,10 @@ $.fn.popup = function(parameters) { }, destroy: function() { - module.debug('Destroying existing popups'); + module.debug('Destroying previous module'); $module - .off('.' + namespace) + .off(eventNamespace) + .removeData(moduleNamespace) ; }, @@ -109,7 +111,7 @@ $.fn.popup = function(parameters) { } }, settings.delay); }, - mouseleave: function(event) { + mouseleave: function() { clearTimeout(module.timer); if( $module.is(':visible') ) { module.hide(); @@ -150,11 +152,13 @@ $.fn.popup = function(parameters) { .html(html) ; if(settings.inline) { + module.verbose('Inserting popup element inline'); $popup .insertAfter($module) ; } else { + module.verbose('Appending popup element to body'); $popup .appendTo( $('body') ) ; @@ -167,6 +171,7 @@ $.fn.popup = function(parameters) { }, remove: function() { + module.debug('Removing popup'); $popup .remove() ; @@ -393,14 +398,12 @@ $.fn.popup = function(parameters) { .removeClass(className.loading) ; if(settings.animation == 'pop' && $.fn.popIn !== undefined) { - console.log($popup); $popup .stop() .popIn(settings.duration, settings.easing) ; } else { - console.log($popup); $popup .stop() .fadeIn(settings.duration, settings.easing) @@ -530,7 +533,7 @@ $.fn.popup = function(parameters) { performance.push({ 'Element' : element, 'Name' : message[0], - 'Arguments' : message[1] || '', + 'Arguments' : [].slice.call(message, 1) || '', 'Execution Time' : executionTime }); } @@ -588,7 +591,6 @@ $.fn.popup = function(parameters) { }); } if ( $.isFunction( found ) ) { - instance.verbose('Executing invoked function', found); return found.apply(context, passedArguments); } return found || false; @@ -602,7 +604,7 @@ $.fn.popup = function(parameters) { invokedResponse = module.invoke(query); } else { - if(instance === undefined) { + if(instance !== undefined) { module.destroy(); } module.initialize(); diff --git a/src/modules/search.js b/src/modules/search.js index 9ac6f3c22..179a6f2a6 100755 --- a/src/modules/search.js +++ b/src/modules/search.js @@ -9,9 +9,9 @@ ;(function ($, window, document, undefined) { -$.fn.searchPrompt = function(source, parameters) { +$.fn.search = function(source, parameters) { var - settings = $.extend(true, {}, $.fn.searchPrompt.settings, parameters), + settings = $.extend(true, {}, $.fn.search.settings, parameters), // make arguments available query = arguments[0], passedArguments = [].slice.call(arguments, 1), @@ -20,51 +20,49 @@ $.fn.searchPrompt = function(source, parameters) { $(this) .each(function() { var - $module = $(this), - $searchPrompt = $module.find(settings.selector.searchPrompt), - $searchButton = $module.find(settings.selector.searchButton), - $searchResults = $module.find(settings.selector.searchResults), - $result = $module.find(settings.selector.result), - $category = $module.find(settings.selector.category), - $emptyResult = $module.find(settings.selector.emptyResult), - $resultPage = $module.find(settings.selector.resultPage), - - element = this, - selector = $module.selector || '', - instance = $module.data('module-' + settings.namespace), - methodInvoked = (instance !== undefined && typeof query == 'string'), - - className = settings.className, - namespace = settings.namespace, - errors = settings.errors, + $module = $(this), + $prompt = $module.find(settings.selector.prompt), + $searchButton = $module.find(settings.selector.searchButton), + $results = $module.find(settings.selector.results), + $result = $module.find(settings.selector.result), + $category = $module.find(settings.selector.category), + + element = this, + selector = $module.selector || '', + instance = $module.data('module-' + settings.namespace), + methodInvoked = (instance !== undefined && typeof query == 'string'), + + className = settings.className, + namespace = settings.namespace, + errors = settings.errors, module ; module = { initialize: function() { var - searchPrompt = $searchPrompt[0], - inputEvent = (searchPrompt.oninput !== undefined) + prompt = $prompt[0], + inputEvent = (prompt.oninput !== undefined) ? 'input' - : (searchPrompt.onpropertychange !== undefined) + : (prompt.onpropertychange !== undefined) ? 'propertychange' : 'keyup' ; // attach events - $searchPrompt + $prompt .on('focus.' + namespace, module.event.focus) .on('blur.' + namespace, module.event.blur) .on('keydown.' + namespace, module.handleKeyboard) ; if(settings.automatic) { - $searchPrompt + $prompt .on(inputEvent + '.' + namespace, module.search.throttle) ; } $searchButton .on('click.' + namespace, module.search.query) ; - $searchResults + $results .on('click.' + namespace, settings.selector.result, module.results.select) ; $module @@ -106,12 +104,12 @@ $.fn.searchPrompt = function(source, parameters) { ; // search shortcuts if(keyCode == keys.escape) { - $searchPrompt + $prompt .trigger('blur') ; } // result shortcuts - if($searchResults.filter(':visible').size() > 0) { + if($results.filter(':visible').size() > 0) { if(keyCode == keys.enter) { if( $result.filter('.' + activeClass).exists() ) { $.proxy(module.results.select, $result.filter('.' + activeClass) )(); @@ -161,7 +159,7 @@ $.fn.searchPrompt = function(source, parameters) { $searchButton .addClass(className.down) ; - $searchPrompt + $prompt .one('keyup', function(){ $searchButton .removeClass(className.down) @@ -182,7 +180,7 @@ $.fn.searchPrompt = function(source, parameters) { }, throttle: function(event) { var - searchTerm = $searchPrompt.val(), + searchTerm = $prompt.val(), numCharacters = searchTerm.length, timer ; @@ -199,7 +197,7 @@ $.fn.searchPrompt = function(source, parameters) { }, query: function() { var - searchTerm = $searchPrompt.val(), + searchTerm = $prompt.val(), cachedHTML = module.search.cache.read(searchTerm) ; if(cachedHTML) { @@ -219,7 +217,7 @@ $.fn.searchPrompt = function(source, parameters) { }, local: function(searchTerm) { var - searchResults = [], + results = [], fullTextResults = [], searchFields = $.isArray(settings.searchFields) ? settings.searchFields @@ -235,9 +233,9 @@ $.fn.searchPrompt = function(source, parameters) { // iterate through search fields in array order $.each(searchFields, function(index, field) { $.each(source, function(label, thing) { - if(typeof thing[field] == 'string' && ($.inArray(thing, searchResults) == -1) && ($.inArray(thing, fullTextResults) == -1) ) { + if(typeof thing[field] == 'string' && ($.inArray(thing, results) == -1) && ($.inArray(thing, fullTextResults) == -1) ) { if( searchRegExp.test( thing[field] ) ) { - searchResults.push(thing); + results.push(thing); } else if( fullTextRegExp.test( thing[field] ) ) { fullTextResults.push(thing); @@ -246,7 +244,7 @@ $.fn.searchPrompt = function(source, parameters) { }); }); searchHTML = module.results.generate({ - results: $.merge(searchResults, fullTextResults) + results: $.merge(results, fullTextResults) }); $module .removeClass(className.loading) @@ -327,37 +325,34 @@ $.fn.searchPrompt = function(source, parameters) { else { html = module.message(errors.noResults, 'empty'); } - $.proxy(settings.onSearchResults, $module)(response); + $.proxy(settings.onresults, $module)(response); return html; }, add: function(html) { - if(settings.onResultsAdd == 'default' || $.proxy(settings.onResultsAdd, $searchResults)(html) == 'default') { - $searchResults + if(settings.onResultsAdd == 'default' || $.proxy(settings.onResultsAdd, $results)(html) == 'default') { + $results .html(html) ; } module.results.show(); }, show: function() { - if( ($searchResults.filter(':visible').size() === 0) && ($searchPrompt.filter(':focus').size() > 0) && $searchResults.html() !== '') { - $searchResults + if( ($results.filter(':visible').size() === 0) && ($prompt.filter(':focus').size() > 0) && $results.html() !== '') { + $results .stop() .fadeIn(200) ; - $.proxy(settings.onResultsOpen, $searchResults)(); + $.proxy(settings.onResultsOpen, $results)(); } }, hide: function() { - if($searchResults.filter(':visible').size() > 0) { - $searchResults + if($results.filter(':visible').size() > 0) { + $results .stop() .fadeOut(200) ; - $.proxy(settings.onResultsClose, $searchResults)(); + $.proxy(settings.onResultsClose, $results)(); } - }, - followLink: function() { - }, select: function(event) { module.debug('Search result selected'); @@ -369,14 +364,14 @@ $.fn.searchPrompt = function(source, parameters) { if(settings.onSelect == 'default' || $.proxy(settings.onSelect, this)(event) == 'default') { var $link = $result.find('a[href]').eq(0), - href = $link.attr('href'), - target = $link.attr('target') + href = $link.attr('href') || false, + target = $link.attr('target') || false ; - try { - module.results.hide(); - $searchPrompt - .val(title) - ; + module.results.hide(); + $prompt + .val(title) + ; + if(href) { if(target == '_blank' || event.ctrlKey) { window.open(href); } @@ -384,7 +379,6 @@ $.fn.searchPrompt = function(source, parameters) { window.location.href = (href); } } - catch(error) {} } } }, @@ -474,186 +468,182 @@ $.fn.searchPrompt = function(source, parameters) { ; }; - $.fn.searchPrompt.settings = { +$.fn.search.settings = { - moduleName : 'Search Module', - debug : true, - namespace : 'search', + moduleName : 'Search Module', + debug : true, + namespace : 'search', - // onSelect default action is defined in module - onSelect : 'default', - onResultsAdd : 'default', + // onSelect default action is defined in module + onSelect : 'default', + onResultsAdd : 'default', - onSearchQuery : function(){}, - onSearchResults : function(response){}, + onSearchQuery : function(){}, + onresults : function(response){}, - onResultsOpen : function(){}, - onResultsClose : function(){}, + onResultsOpen : function(){}, + onResultsClose : function(){}, - automatic : 'true', - type : 'simple', - minCharacters : 3, - searchThrottle : 300, - maxResults : 7, - cache : true, + automatic : 'true', + type : 'simple', + minCharacters : 3, + searchThrottle : 300, + maxResults : 7, + cache : true, - searchFields : [ - 'title', - 'description' - ], + searchFields : [ + 'title', + 'description' + ], - // api config - apiSettings: { + // api config + apiSettings: { - }, + }, - className: { - active : 'active', - down : 'down', - focus : 'focus', - empty : 'empty', - loading : 'loading' - }, + className: { + active : 'active', + down : 'down', + focus : 'focus', + empty : 'empty', + loading : 'loading' + }, - errors : { - noResults : 'Your search returned no results', - logging : 'Error in debug logging, exiting.', - noTemplate : 'A valid template name was not specified.', - serverError : 'There was an issue with querying the server.', - method : 'The method you called is not defined.' - }, - - selector : { - searchPrompt : '.prompt', - searchButton : '.search.button', - searchResults : '.results', + errors : { + noResults : 'Your search returned no results', + logging : 'Error in debug logging, exiting.', + noTemplate : 'A valid template name was not specified.', + serverError : 'There was an issue with querying the server.', + method : 'The method you called is not defined.' + }, - category : '.category', - result : '.result', - - emptyResult : '.results .message', - resultPage : '.results .page' - }, + selector : { + prompt : '.prompt', + searchButton : '.search.button', + results : '.results', + category : '.category', + result : '.result' + }, - templates: { - message: function(message, type) { - var - html = '' + templates: { + message: function(message, type) { + var + html = '' + ; + if(message !== undefined && type !== undefined) { + html += '' + + '
' ; - if(message !== undefined && type !== undefined) { - html += '' - + '
' + // message type + if(type == 'empty') { + html += '' + + '
No Results
' + + '
' + message + '
' ; - // message type - if(type == 'empty') { - html += '' - + '
No Results
' - + '
' + message + '
' - ; - } - else { - html += '
' + message + '
'; - } - html += '
'; } - return html; - }, - categories: function(response) { - var - html = '' - ; - if(response.results !== undefined) { - // each category - $.each(response.results, function(index, category) { - if(category.results !== undefined && category.results.length > 0) { - html += '' - + '
' - + '
' + category.name + '
' - ; - // each item inside category - $.each(category.results, function(index, result) { - html += '
'; - html += ''; - if(result.image !== undefined) { - html+= '' - + '
' - + ' ' - + '
' - ; - } - html += '
'; - if(result.price !== undefined) { - html+= '
' + result.price + '
'; - } - if(result.title !== undefined) { - html+= '
' + result.title + '
'; - } - if(result.description !== undefined) { - html+= '
' + result.description + '
'; - } - html += '' - + '
' + else { + html += '
' + message + '
'; + } + html += '
'; + } + return html; + }, + categories: function(response) { + var + html = '' + ; + if(response.results !== undefined) { + // each category + $.each(response.results, function(index, category) { + if(category.results !== undefined && category.results.length > 0) { + html += '' + + '
' + + '
' + category.name + '
' + ; + // each item inside category + $.each(category.results, function(index, result) { + html += '
'; + html += ''; + if(result.image !== undefined) { + html+= '' + + '
' + + ' ' + '
' ; - }); + } + html += '
'; + if(result.price !== undefined) { + html+= '
' + result.price + '
'; + } + if(result.title !== undefined) { + html+= '
' + result.title + '
'; + } + if(result.description !== undefined) { + html+= '
' + result.description + '
'; + } html += '' + '
' - ; - } - }); - if(response.resultPage) { - html += '' - + '' - + response.resultPage.text - + ''; - } - return html; - } - return false; - }, - simple: function(response) { - var - html = '' - ; - if(response.results !== undefined) { - - // each result - $.each(response.results, function(index, result) { - html += ''; - if(result.image !== undefined) { - html+= '' - + '
' - + ' ' + '
' ; - } - html += '
'; - if(result.price !== undefined) { - html+= '
' + result.price + '
'; - } - if(result.title !== undefined) { - html+= '
' + result.title + '
'; - } - if(result.description !== undefined) { - html+= '
' + result.description + '
'; - } + }); html += '' + '
' - + '
' ; - }); - - if(response.resultPage) { - html += '' - + '' - + response.resultPage.text - + ''; } - return html; + }); + if(response.resultPage) { + html += '' + + '' + + response.resultPage.text + + ''; } - return false; + return html; } + return false; + }, + simple: function(response) { + var + html = '' + ; + if(response.results !== undefined) { + + // each result + $.each(response.results, function(index, result) { + html += ''; + if(result.image !== undefined) { + html+= '' + + '
' + + ' ' + + '
' + ; + } + html += '
'; + if(result.price !== undefined) { + html+= '
' + result.price + '
'; + } + if(result.title !== undefined) { + html+= '
' + result.title + '
'; + } + if(result.description !== undefined) { + html+= '
' + result.description + '
'; + } + html += '' + + '
' + + '
' + ; + }); + + if(response.resultPage) { + html += '' + + '' + + response.resultPage.text + + ''; + } + return html; + } + return false; } - }; + } +}; })( jQuery, window , document ); \ No newline at end of file diff --git a/src/modules/shape.js b/src/modules/shape.js index 2bceb8b67..e73b52aef 100755 --- a/src/modules/shape.js +++ b/src/modules/shape.js @@ -90,29 +90,35 @@ $.fn.shape = function(parameters) { animate: function(propertyObject, callback) { module.verbose('Animating box with properties', propertyObject); callback = callback || function(event) { - module.verbose('Executing animation callback', event); - event.stopPropagation(); + module.verbose('Executing animation callback'); + if(event !== undefined) { + event.stopPropagation(); + } module.reset(); module.set.active(); - $.proxy(settings.onChange, $nextSide)(); }; if(settings.useCSS) { - module.verbose('Starting CSS animation'); - $module - .addClass(className.animating) - ; - module.set.stageSize(); - module.repaint(); - $module - .addClass(className.css) - ; - $activeSide - .addClass(className.hidden) - ; - $sides - .css(propertyObject) - .one(module.get.transitionEvent(), callback) - ; + if(module.get.transitionEvent()) { + module.verbose('Starting CSS animation'); + $module + .addClass(className.animating) + ; + module.set.stageSize(); + module.repaint(); + $module + .addClass(className.css) + ; + $activeSide + .addClass(className.hidden) + ; + $sides + .css(propertyObject) + .one(module.get.transitionEvent(), callback) + ; + } + else { + callback(); + } } else { // not yet supported until .animate() is extended to allow RotateX/Y @@ -151,17 +157,22 @@ $.fn.shape = function(parameters) { $module .removeClass(className.css) .removeClass(className.animating) + .attr('style', '') .removeAttr('style') ; + // removeAttr style does not consistently work in safari $sides + .attr('style', '') .removeAttr('style') ; $side + .attr('style', '') .removeAttr('style') .removeClass(className.hidden) ; $nextSide .removeClass(className.animating) + .attr('style', '') .removeAttr('style') ; }, @@ -247,6 +258,7 @@ $.fn.shape = function(parameters) { $nextSide .addClass(className.active) ; + $.proxy(settings.onChange, $nextSide)(); module.set.defaultSide(); } }, @@ -527,21 +539,6 @@ $.fn.shape = function(parameters) { ; } }, - setting: function(name, value) { - if(value !== undefined) { - if( $.isPlainObject(name) ) { - module.verbose('Modifying settings object', name, value); - $.extend(true, settings, name); - } - else { - module.verbose('Modifying setting', name, value); - settings[name] = value; - } - } - else { - return settings[name]; - } - }, setting: function(name, value) { if(value !== undefined) { if( $.isPlainObject(name) ) { @@ -666,7 +663,6 @@ $.fn.shape = function(parameters) { }); } if ( $.isFunction( found ) ) { - instance.verbose('Executing invoked function', found); return found.apply(context, passedArguments); } return found || false; @@ -699,13 +695,13 @@ $.fn.shape.settings = { moduleName : 'Shape Module', // debug content outputted to console - debug : false, + debug : true, // verbose debug output - verbose : false, + verbose : true, // performance data output - performance: false, + performance: true, // event namespace namespace : 'shape', diff --git a/src/modules/tab.js b/src/modules/tab.js index a186d8965..7462adc19 100755 --- a/src/modules/tab.js +++ b/src/modules/tab.js @@ -34,7 +34,6 @@ className = settings.className, metadata = settings.metadata, - namespace = settings.namespace, errors = settings.errors, instance = $module.data(moduleNamespace), @@ -78,7 +77,7 @@ // attach events if navigation wasn't set to window if( !$.isWindow( element ) ) { $module - .on('click.' + eventNamespace, module.event.click) + .on('click' + eventNamespace, module.event.click) ; } $module @@ -89,7 +88,7 @@ destroy: function() { module.debug('Destroying tabs', $module); $module - .off('.' + namespace) + .off(eventNamespace) ; }, @@ -544,6 +543,7 @@ }); } if ( $.isFunction( found ) ) { + module.verbose('Executing invoked function', found); return found.apply(context, passedArguments); } return found || false;