2 (function ($, window
, document
, undefined) {
5 Foundation
.libs
.offcanvas
= {
15 init: function (scope
, method
, options
) {
16 this.bindings(method
, options
);
26 if (this.settings
.open_method
=== 'move') {
28 right_postfix
= 'right';
29 left_postfix
= 'left';
30 } else if (this.settings
.open_method
=== 'overlap_single') {
31 move_class
= 'offcanvas-overlap-';
32 right_postfix
= 'right';
33 left_postfix
= 'left';
34 } else if (this.settings
.open_method
=== 'overlap') {
35 move_class
= 'offcanvas-overlap';
38 S(this.scope
).off('.offcanvas')
39 .on('click.fndtn.offcanvas', '.left-off-canvas-toggle', function (e
) {
40 self
.click_toggle_class(e
, move_class
+ right_postfix
);
41 if (self
.settings
.open_method
!== 'overlap') {
42 S('.left-submenu').removeClass(move_class
+ right_postfix
);
44 $('.left-off-canvas-toggle').attr('aria-expanded', 'true');
46 .on('click.fndtn.offcanvas', '.left-off-canvas-menu a', function (e
) {
47 var settings
= self
.get_settings(e
);
48 var parent
= S(this).parent();
50 if (settings
.close_on_click
&& !parent
.hasClass('has-submenu') && !parent
.hasClass('back')) {
51 self
.hide
.call(self
, move_class
+ right_postfix
, self
.get_wrapper(e
));
52 parent
.parent().removeClass(move_class
+ right_postfix
);
53 } else if (S(this).parent().hasClass('has-submenu')) {
55 S(this).siblings('.left-submenu').toggleClass(move_class
+ right_postfix
);
56 } else if (parent
.hasClass('back')) {
58 parent
.parent().removeClass(move_class
+ right_postfix
);
60 $('.left-off-canvas-toggle').attr('aria-expanded', 'true');
62 .on('click.fndtn.offcanvas', '.right-off-canvas-toggle', function (e
) {
63 self
.click_toggle_class(e
, move_class
+ left_postfix
);
64 if (self
.settings
.open_method
!== 'overlap') {
65 S('.right-submenu').removeClass(move_class
+ left_postfix
);
67 $('.right-off-canvas-toggle').attr('aria-expanded', 'true');
69 .on('click.fndtn.offcanvas', '.right-off-canvas-menu a', function (e
) {
70 var settings
= self
.get_settings(e
);
71 var parent
= S(this).parent();
73 if (settings
.close_on_click
&& !parent
.hasClass('has-submenu') && !parent
.hasClass('back')) {
74 self
.hide
.call(self
, move_class
+ left_postfix
, self
.get_wrapper(e
));
75 parent
.parent().removeClass(move_class
+ left_postfix
);
76 } else if (S(this).parent().hasClass('has-submenu')) {
78 S(this).siblings('.right-submenu').toggleClass(move_class
+ left_postfix
);
79 } else if (parent
.hasClass('back')) {
81 parent
.parent().removeClass(move_class
+ left_postfix
);
83 $('.right-off-canvas-toggle').attr('aria-expanded', 'true');
85 .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e
) {
86 self
.click_remove_class(e
, move_class
+ left_postfix
);
87 S('.right-submenu').removeClass(move_class
+ left_postfix
);
89 self
.click_remove_class(e
, move_class
+ right_postfix
);
90 S('.left-submenu').removeClass(move_class
+ left_postfix
);
92 $('.right-off-canvas-toggle').attr('aria-expanded', 'true');
94 .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e
) {
95 self
.click_remove_class(e
, move_class
+ left_postfix
);
96 $('.left-off-canvas-toggle').attr('aria-expanded', 'false');
98 self
.click_remove_class(e
, move_class
+ right_postfix
);
99 $('.right-off-canvas-toggle').attr('aria-expanded', 'false');
104 toggle: function (class_name
, $off_canvas
) {
105 $off_canvas
= $off_canvas
|| this.get_wrapper();
106 if ($off_canvas
.is('.' + class_name
)) {
107 this.hide(class_name
, $off_canvas
);
109 this.show(class_name
, $off_canvas
);
113 show: function (class_name
, $off_canvas
) {
114 $off_canvas
= $off_canvas
|| this.get_wrapper();
115 $off_canvas
.trigger('open').trigger('open.fndtn.offcanvas');
116 $off_canvas
.addClass(class_name
);
119 hide: function (class_name
, $off_canvas
) {
120 $off_canvas
= $off_canvas
|| this.get_wrapper();
121 $off_canvas
.trigger('close').trigger('close.fndtn.offcanvas');
122 $off_canvas
.removeClass(class_name
);
125 click_toggle_class: function (e
, class_name
) {
127 var $off_canvas
= this.get_wrapper(e
);
128 this.toggle(class_name
, $off_canvas
);
131 click_remove_class: function (e
, class_name
) {
133 var $off_canvas
= this.get_wrapper(e
);
134 this.hide(class_name
, $off_canvas
);
137 get_settings: function (e
) {
138 var offcanvas
= this.S(e
.target
).closest('[' + this.attr_name() + ']');
139 return offcanvas
.data(this.attr_name(true) + '-init') || this.settings
;
142 get_wrapper: function (e
) {
143 var $off_canvas
= this.S(e
? e
.target
: this.scope
).closest('.off-canvas-wrap');
145 if ($off_canvas
.length
=== 0) {
146 $off_canvas
= this.S('.off-canvas-wrap');
151 reflow: function () {
154 }(jQuery
, window
, window
.document
));