1+ /* Plugin: jSide Menu (Responsive Side Menu)
2+ * Frameworks: jQuery 3.3.1 & Material Design Iconic Font 2.0
3+ * Author: Asif Mughal
4+ * GitHub: https://github.com/CodeHimBlog
5+ * URL: https://www.codehim.com
6+ * License: MIT License
7+ * Copyright (c) 2018 - Asif Mughal
8+ */
9+ /* File: jquery.jside.menu.js */
10+ ( function ( $ ) {
11+ $ . fn . jSideMenu = function ( options ) {
12+ var setting = $ . extend ( {
13+ jSidePosition : "position-left" , //possible options position-left or position-right
14+ jSideSticky : true , // menubar will be fixed on top, false to set static
15+ jSideSkin : "default-skin" , // to apply custom skin, just put its name in this string
16+
17+ } , options ) ;
18+
19+ return this . each ( function ( ) {
20+ var target , $headHeight ,
21+ $devHeight ,
22+ jSide ,
23+ arrow ,
24+ dimBackground ;
25+ target = $ ( this ) ;
26+
27+ /* Accessing DOM */
28+ jSide = $ ( ".menu-container, .menu-head" ) ;
29+ $devHeight = $ ( window ) . height ( ) ;
30+ $headHeight = $ ( ".menu-head" ) . height ( ) ;
31+ arrow = document . createElement ( "i" ) ;
32+ dimBackground = $ ( ".dim-overlay" ) ;
33+ // Set the height of side menu according to the available height of device
34+ $ ( target ) . css ( {
35+ 'height' : $devHeight - $headHeight ,
36+
37+ } ) ;
38+
39+ if ( setting . jSideSticky == true ) {
40+ $ ( ".menubar" ) . addClass ( "sticky" ) ;
41+ } else {
42+ $ ( ".menubar" ) . removeClass ( "sticky" ) ;
43+ }
44+
45+ $ ( ".menubar" ) . addClass ( setting . jSideSkin ) ;
46+ $ ( jSide ) . addClass ( setting . jSideSkin ) . addClass ( setting . jSidePosition ) ;
47+
48+ if ( $ ( jSide ) . hasClass ( "position-left" ) ) {
49+ $ ( ".menu-trigger" ) . addClass ( "left" ) . removeClass ( "right" ) ;
50+ }
51+ else {
52+ $ ( ".menu-trigger" ) . removeClass ( "left" ) . addClass ( "right" ) ;
53+ }
54+
55+ //Dropdown Arrow
56+ $ ( arrow ) . addClass ( "zmdi zmdi-chevron-down arrow" ) . appendTo ( ".dropdown-heading" ) ;
57+
58+ //Dropdowns
59+ $ ( ".dropdown-heading" ) . click ( function ( ) {
60+ var n = $ ( ".has-sub" ) . find ( "span:hover + ul li" ) . length ;
61+ var h = $ ( ".has-sub" ) . find ( "span:hover + ul li" ) . outerHeight ( ) ;
62+ var dropdown = h * n ;
63+ var todrop = $ ( ".has-sub" ) . find ( "span:hover + ul" ) ;
64+ var nodrop = $ ( ".has-sub ul" ) ;
65+
66+ $ ( todrop ) . animate ( { "height" : dropdown } , 100 ) ;
67+ $ ( this ) . find ( "i" ) . toggleClass ( "arrowdown" ) ;
68+ if ( $ ( todrop ) . height ( ) == dropdown ) {
69+ $ ( todrop ) . animate ( { "height" : 0 } , 100 ) ;
70+ }
71+
72+ if ( $ ( nodrop ) . height ( dropdown ) ) {
73+ $ ( nodrop ) . not ( todrop ) . height ( 0 ) ; $ ( ".dropdown-heading" ) . not ( this ) . find ( "i" ) . removeClass ( "arrowdown" ) ;
74+ }
75+ } ) ;
76+
77+ $ ( ".menu-trigger" ) . click ( function ( ) {
78+ $ ( jSide ) . toggleClass ( "open" ) ;
79+ $ ( dimBackground ) . show ( 500 ) ;
80+
81+ } ) ;
82+
83+ //close menu if user click outside of it
84+ $ ( window ) . click ( function ( e ) {
85+ if ( $ ( e . target ) . closest ( '.menu-trigger' ) . length ) {
86+ return ; }
87+ if ( $ ( e . target ) . closest ( jSide ) . length ) {
88+ return ; }
89+
90+ $ ( jSide ) . removeClass ( "open" ) ;
91+ if ( ! $ ( jSide ) . hasClass ( "open" ) ) {
92+ $ ( dimBackground ) . hide ( 500 ) ;
93+ }
94+ } ) ;
95+ } ) ;
96+ } ;
97+
98+ } ) ( jQuery ) ;
99+ /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
100+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
101+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
102+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
103+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
104+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
105+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
0 commit comments