Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dldx/hpstr-hugo-theme.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'static/js/plugins/jquery.dlmenu.js')
-rw-r--r--static/js/plugins/jquery.dlmenu.js260
1 files changed, 260 insertions, 0 deletions
diff --git a/static/js/plugins/jquery.dlmenu.js b/static/js/plugins/jquery.dlmenu.js
new file mode 100644
index 0000000..2f54293
--- /dev/null
+++ b/static/js/plugins/jquery.dlmenu.js
@@ -0,0 +1,260 @@
+/**
+ * jquery.dlmenu.js v1.0.1
+ * http://www.codrops.com
+ *
+ * Licensed under the MIT license.
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Copyright 2013, Codrops
+ * http://www.codrops.com
+ *
+ * Modified by Michael Rose
+ */
+;( function( $, window, undefined ) {
+
+ 'use strict';
+
+ // global
+ var Modernizr = window.Modernizr, $body = $( 'body' );
+
+ $.DLMenu = function( options, element ) {
+ this.$el = $( element );
+ this._init( options );
+ };
+
+ // the options
+ $.DLMenu.defaults = {
+ // classes for the animation effects
+ animationClasses : { classin : 'dl-animate-in-1', classout : 'dl-animate-out-1' },
+ // callback: click a link that has a sub menu
+ // el is the link element (li); name is the level name
+ onLevelClick : function( el, name ) { return false; },
+ // callback: click a link that does not have a sub menu
+ // el is the link element (li); ev is the event obj
+ onLinkClick : function( el, ev ) { return false; }
+ };
+
+ $.DLMenu.prototype = {
+ _init : function( options ) {
+
+ // options
+ this.options = $.extend( true, {}, $.DLMenu.defaults, options );
+ // cache some elements and initialize some variables
+ this._config();
+
+ var animEndEventNames = {
+ 'WebkitAnimation' : 'webkitAnimationEnd',
+ 'OAnimation' : 'oAnimationEnd',
+ 'msAnimation' : 'MSAnimationEnd',
+ 'animation' : 'animationend'
+ },
+ transEndEventNames = {
+ 'WebkitTransition' : 'webkitTransitionEnd',
+ 'MozTransition' : 'transitionend',
+ 'OTransition' : 'oTransitionEnd',
+ 'msTransition' : 'MSTransitionEnd',
+ 'transition' : 'transitionend'
+ };
+ // animation end event name
+ this.animEndEventName = animEndEventNames[ Modernizr.prefixed( 'animation' ) ] + '.dlmenu';
+ // transition end event name
+ this.transEndEventName = transEndEventNames[ Modernizr.prefixed( 'transition' ) ] + '.dlmenu',
+ // support for css animations and css transitions
+ this.supportAnimations = Modernizr.cssanimations,
+ this.supportTransitions = Modernizr.csstransitions;
+
+ this._initEvents();
+
+ },
+ _config : function() {
+ this.open = false;
+ this.$menuwrapper = $( '#dl-menu' );
+ this.$trigger = this.$el.children( '.dl-trigger' );
+ this.$menu = this.$el.children( 'ul.dl-menu' );
+ this.$menuitems = this.$menu.find( 'li:not(.dl-back)' );
+ this.$el.find( 'ul.dl-submenu' ).prepend( '<li class="dl-back"><a href="#">back</a></li>' );
+ this.$back = this.$menu.find( 'li.dl-back' );
+ },
+ _initEvents : function() {
+
+ var self = this;
+
+ this.$trigger.on( 'click.dlmenu', function() {
+
+ if( self.open ) {
+ self._closeMenu();
+ }
+ else {
+ self._openMenu();
+ }
+ return false;
+
+ } );
+
+ this.$menuitems.on( 'click.dlmenu', function( event ) {
+
+ event.stopPropagation();
+
+ var $item = $(this),
+ $submenu = $item.children( 'ul.dl-submenu' );
+
+ if( $submenu.length > 0 ) {
+
+ var $flyin = $submenu.clone().css({
+ opacity: 0,
+ margin: 0
+ }).insertAfter( self.$menu ),
+ onAnimationEndFn = function() {
+ self.$menu.off( self.animEndEventName ).removeClass( self.options.animationClasses.classout ).addClass( 'dl-subview' );
+ $item.addClass( 'dl-subviewopen' ).parents( '.dl-subviewopen:first' ).removeClass( 'dl-subviewopen' ).addClass( 'dl-subview' );
+ $flyin.remove();
+ };
+
+ setTimeout( function() {
+ $flyin.addClass( self.options.animationClasses.classin );
+ self.$menu.addClass( self.options.animationClasses.classout );
+ if( self.supportAnimations ) {
+ self.$menu.on( self.animEndEventName, onAnimationEndFn );
+ }
+ else {
+ onAnimationEndFn.call();
+ }
+
+ self.options.onLevelClick( $item, $item.children( 'a:first' ).text() );
+ } );
+
+ return false;
+
+ }
+ else {
+ self.options.onLinkClick( $item, event );
+ }
+
+ } );
+
+ this.$back.on( 'click.dlmenu', function( event ) {
+
+ var $this = $( this ),
+ $submenu = $this.parents( 'ul.dl-submenu:first' ),
+ $item = $submenu.parent(),
+
+ $flyin = $submenu.clone().insertAfter( self.$menu );
+
+ var onAnimationEndFn = function() {
+ self.$menu.off( self.animEndEventName ).removeClass( self.options.animationClasses.classin );
+ $flyin.remove();
+ };
+
+ setTimeout( function() {
+ $flyin.addClass( self.options.animationClasses.classout );
+ self.$menu.addClass( self.options.animationClasses.classin );
+ if( self.supportAnimations ) {
+ self.$menu.on( self.animEndEventName, onAnimationEndFn );
+ }
+ else {
+ onAnimationEndFn.call();
+ }
+
+ $item.removeClass( 'dl-subviewopen' );
+
+ var $subview = $this.parents( '.dl-subview:first' );
+ if( $subview.is( 'li' ) ) {
+ $subview.addClass( 'dl-subviewopen' );
+ }
+ $subview.removeClass( 'dl-subview' );
+ } );
+
+ return false;
+
+ } );
+
+ },
+ closeMenu : function() {
+ if( this.open ) {
+ this._closeMenu();
+ }
+ },
+ _closeMenu : function() {
+ var self = this,
+ onTransitionEndFn = function() {
+ self.$menu.off( self.transEndEventName );
+ self._resetMenu();
+ };
+
+ this.$menuwrapper.removeClass( 'dl-menuopen' );
+ this.$menu.removeClass( 'dl-menuopen' );
+ this.$menu.addClass( 'dl-menu-toggle' );
+ this.$trigger.removeClass( 'dl-active' );
+
+ if( this.supportTransitions ) {
+ this.$menu.on( this.transEndEventName, onTransitionEndFn );
+ }
+ else {
+ onTransitionEndFn.call();
+ }
+
+ this.open = false;
+ },
+ openMenu : function() {
+ if( !this.open ) {
+ this._openMenu();
+ }
+ },
+ _openMenu : function() {
+ var self = this;
+ // clicking somewhere else makes the menu close
+ $body.off( 'click' ).on( 'click.dlmenu', function() {
+ self._closeMenu() ;
+ } );
+ this.$menuwrapper.addClass( 'dl-menuopen' );
+ this.$menu.addClass( 'dl-menuopen dl-menu-toggle' ).on( this.transEndEventName, function() {
+ $( this ).removeClass( 'dl-menu-toggle' );
+ } );
+ this.$trigger.addClass( 'dl-active' );
+ this.open = true;
+ },
+ // resets the menu to its original state (first level of options)
+ _resetMenu : function() {
+ this.$menu.removeClass( 'dl-subview' );
+ this.$menuitems.removeClass( 'dl-subview dl-subviewopen' );
+ }
+ };
+
+ var logError = function( message ) {
+ if ( window.console ) {
+ window.console.error( message );
+ }
+ };
+
+ $.fn.dlmenu = function( options ) {
+ if ( typeof options === 'string' ) {
+ var args = Array.prototype.slice.call( arguments, 1 );
+ this.each(function() {
+ var instance = $.data( this, 'dlmenu' );
+ if ( !instance ) {
+ logError( "cannot call methods on dlmenu prior to initialization; " +
+ "attempted to call method '" + options + "'" );
+ return;
+ }
+ if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) {
+ logError( "no such method '" + options + "' for dlmenu instance" );
+ return;
+ }
+ instance[ options ].apply( instance, args );
+ });
+ }
+ else {
+ this.each(function() {
+ var instance = $.data( this, 'dlmenu' );
+ if ( instance ) {
+ instance._init();
+ }
+ else {
+ instance = $.data( this, 'dlmenu', new $.DLMenu( options, this ) );
+ }
+ });
+ }
+ return this;
+ };
+
+} )( jQuery, window );