framous 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,163 @@
1
+ /*
2
+ * Modal plugin for jQuery
3
+ * --
4
+ * source: http://github.com/borderlab/framous
5
+ * site:
6
+ *
7
+ * @author Thomas Hermant (http://hanami.be)
8
+ * Copyright 2013, Thomas Hermant
9
+ * Released under the MIT, BSD, and GPL Licenses.
10
+ */
11
+
12
+ (function ( $ ) {
13
+
14
+ // global vars
15
+ var is_touch = !!('ontouchstart' in window) || !!('onmsgesturechange' in window),
16
+ modals,
17
+ btn_close_and_backgrounds,
18
+ links,
19
+ // add event depending of touch device or not
20
+ add_event = function(el, action)
21
+ {
22
+ if(is_touch)
23
+ {
24
+ var init_x, int_y, delta_x, delta_y;
25
+
26
+ el.on("touchstart.framous.modal", function(e){
27
+ init_x = (e && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0].pageX) ? e.originalEvent.touches[0].pageX : 0;
28
+ init_y = (e && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0].pageX) ? e.originalEvent.touches[0].pageY : 0;
29
+ delta_x = 0;
30
+ delta_y = 0;
31
+ });
32
+
33
+ el.on("touchmove.framous.modal", function(e){
34
+ delta_x = e.originalEvent.touches[0].pageX - init_x;
35
+ delta_y = e.originalEvent.touches[0].pageY - init_y;
36
+ });
37
+
38
+ el.on("touchend.framous.modal", function(e){
39
+ e.preventDefault();
40
+
41
+ // tap event -> no scroll
42
+ if(Math.abs(delta_x) < 2 && Math.abs(delta_y) < 2)
43
+ {
44
+ action(e);
45
+ }
46
+ });
47
+ }
48
+ else
49
+ {
50
+ el.on("click.framous.modal",function(e){
51
+ action(e);
52
+ });
53
+ }
54
+ };
55
+
56
+ var methods = {
57
+
58
+ init : function( options ) {
59
+
60
+ // default options
61
+ var settings = $.extend({
62
+ link_active_class: "is-active",
63
+ modal_class: "js-modal",
64
+ modal_bkg_class: "js-modal",
65
+ modal_content_class: "js-modal-content",
66
+ modal_close_class: "js-modal-close",
67
+ modal_active_class: "is-visible",
68
+ }, options );
69
+
70
+ // get modals
71
+ modals = $("." + settings.modal_class);
72
+
73
+ // get links
74
+ links = $(this.selector);
75
+
76
+ // get btn close and background model for closing event
77
+ btn_close_and_backgrounds = $("." + settings.modal_close_class + ", ." + settings.modal_bkg_class);
78
+
79
+ // action close modal
80
+ var close_all_modals = function(e)
81
+ {
82
+ e.preventDefault();
83
+ links.removeClass(settings.link_active_class);
84
+ modals.removeClass(settings.modal_active_class);
85
+ };
86
+
87
+ // create event on "click"/"tap" close button
88
+ btn_close_and_backgrounds.each(function(index){
89
+ var btn = $(this);
90
+ add_event(btn,close_all_modals);
91
+ });
92
+
93
+ // init height and position of each content
94
+ modals.each(function(index){
95
+ var modal = $(this);
96
+ var modal_content = modal.find("." + settings.modal_content_class);
97
+ modal_content.on(is_touch ? "touchstart.framous.modal" : "click.framous.modal",function(e){
98
+ // to avoid hide content modal
99
+ e.stopPropagation();
100
+ });
101
+ modal_content.css({height:"auto"});
102
+ var h = modal_content.innerHeight();
103
+ modal_content.css({marginTop:- Math.round(h/2) + "px"})
104
+ });
105
+
106
+ var active_link = function(index)
107
+ {
108
+ links.removeClass(settings.link_active_class).eq(index).addClass(settings.link_active_class);
109
+ };
110
+
111
+ var active_modal = function(index)
112
+ {
113
+ modals.removeClass(settings.modal_active_class).eq(index).addClass(settings.modal_active_class);
114
+ };
115
+
116
+ // chaining
117
+ return this.each(function(index){
118
+
119
+ var link = $(this);
120
+
121
+ var event_link_action = function(e)
122
+ {
123
+ e.preventDefault();
124
+
125
+ var href = link.attr("href");
126
+ var modal = modals.filter(href);
127
+
128
+ active_link(index);
129
+ active_modal(index);
130
+ }
131
+
132
+ add_event(link,event_link_action);
133
+ });
134
+ },
135
+ // display the modal with the id
136
+ display : function(id) {
137
+ var link = $(this.selector).filter("[href='#"+id+"']");
138
+ link.trigger(is_touch ? "touchstart.framous.modal" : "click.framous.modal");
139
+ if(is_touch)
140
+ {
141
+ link.trigger("touchend.framous.modal");
142
+ }
143
+ }
144
+ }
145
+
146
+ $.fn.modal = function(methodOrOptions)
147
+ {
148
+ if ( methods[methodOrOptions] )
149
+ {
150
+ return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
151
+ }
152
+ else if ( typeof methodOrOptions === 'object' || ! methodOrOptions )
153
+ {
154
+ // Default to "init"
155
+ return methods.init.apply( this, arguments );
156
+ }
157
+ else
158
+ {
159
+ $.error('Method ' + method + ' does not exist on jQuery.scrollspy');
160
+ }
161
+ };
162
+
163
+ }( jQuery ));
@@ -0,0 +1,221 @@
1
+ /*
2
+ * ScrollSpy plugin for jQuery
3
+ * --
4
+ * source: http://github.com/borderlab/framous
5
+ * site:
6
+ *
7
+ * @author Thomas Hermant (http://hanami.be)
8
+ * Copyright 2013, Thomas Hermant
9
+ * Released under the MIT, BSD, and GPL Licenses.
10
+ */
11
+
12
+ (function ( $ ) {
13
+ // vars
14
+ var is_touch = !!('ontouchstart' in window) || !!('onmsgesturechange' in window),
15
+ win = $(window),
16
+ nav,
17
+ nav_links,
18
+ html_body,
19
+ targets,
20
+ targets_ids = [],
21
+ targets_offset_tops = [],
22
+ targets_count = 0,
23
+ time_out,
24
+ current_index = null,
25
+ after_scroll_func,
26
+ has_after_scroll = false,
27
+ // get window height
28
+ win_height = win.height(),
29
+ // add click or tap event depending if it's a touch device or not
30
+ add_event = function(el, action)
31
+ {
32
+ if(is_touch)
33
+ {
34
+ var init_x, int_y, delta_x, delta_y;
35
+
36
+ el.on("touchstart.framous.scrollspy", function(e){
37
+ init_x = (e && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0].pageX) ? e.originalEvent.touches[0].pageX : 0;
38
+ init_y = (e && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0].pageX) ? e.originalEvent.touches[0].pageY : 0;
39
+ delta_x = 0;
40
+ delta_y = 0;
41
+ });
42
+
43
+ el.on("touchmove.framous.scrollspy", function(e){
44
+ delta_x = e.originalEvent.touches[0].pageX - init_x;
45
+ delta_y = e.originalEvent.touches[0].pageY - init_y;
46
+ });
47
+
48
+ el.on("touchend.framous.scrollspy", function(e){
49
+ e.preventDefault();
50
+
51
+ // no scroll -> tap event
52
+ if(Math.abs(delta_x) < 2 && Math.abs(delta_y) < 2)
53
+ {
54
+ action(e);
55
+ }
56
+ });
57
+ }
58
+ else
59
+ {
60
+ el.on("click.framous.scrollspy",function(e){
61
+ action(e);
62
+ });
63
+ }
64
+ };
65
+
66
+
67
+ // listen to window resize event
68
+ win.on("resize.framous.scrollspy", function(e){
69
+ win_height = win.height();
70
+ });
71
+
72
+ var methods = {
73
+
74
+ init : function( options ) {
75
+
76
+ // default options
77
+ var settings = $.extend({
78
+ // time for scrolling animation
79
+ scroll_time: 700,
80
+ // link to spy in the navigation
81
+ link_class: null,
82
+ // active class for links of the navigation
83
+ active_link_class: "is-active",
84
+ // active class for targets
85
+ active_content_class: "is-target",
86
+ // delay for firing the after_scroll handler
87
+ after_scroll_delay: 100,
88
+ // after scroll handler
89
+ after_scroll: null, // function(index){...}
90
+ // activate or not the scroll when click/tap on link
91
+ link_scrolling: true,
92
+ // check the offset top of the target on each scroll event | when false check the offset top at launch plugin launch
93
+ live_target_offset_top: false
94
+ }, options );
95
+
96
+ // element for scroll animation
97
+ nav = this;
98
+ html_body = $("html, body");
99
+ nav_links = nav.find((settings.link_class == null ? "a" : "a." + settings.link_class));
100
+ targets_count = nav_links.length;
101
+ has_after_scroll = (settings.after_scroll != null && typeof settings.after_scroll == "function");
102
+
103
+ // init targets_ids array and targets_offset_tops array
104
+ nav_links.each(function(index){
105
+ var target_id = $(this).attr("href");
106
+ targets_ids.push(target_id);
107
+ var target = $(target_id);
108
+ targets_offset_tops.push(Math.ceil(target.offset().top));
109
+ });
110
+
111
+ targets = $(targets_ids.join(','));
112
+
113
+ // add events for links
114
+ if(settings.link_scrolling)
115
+ {
116
+ nav_links.each(function(index){
117
+ var nav_link = $(this);
118
+
119
+ // scrolling action when click/tap on link
120
+ var event_link_action = function(e)
121
+ {
122
+ e.preventDefault();
123
+ html_body.animate({scrollTop: targets_offset_tops[index]},{duration: settings.scroll_time});
124
+ };
125
+
126
+ add_event(nav_link,event_link_action);
127
+ });
128
+ }
129
+
130
+ // active the "index" target
131
+ var active_target = function(index)
132
+ {
133
+ targets.removeClass(settings.active_content_class).eq(index).addClass(settings.active_content_class);
134
+ };
135
+
136
+ // active the "index" link
137
+ var active_link = function(index)
138
+ {
139
+ nav_links.removeClass(settings.active_link_class).eq(index).addClass(settings.active_link_class);
140
+ };
141
+
142
+ // set current index from window scrollTop
143
+ var set_current_index = function(scroll_top)
144
+ {
145
+ // search for the current index
146
+ for(var i = 0 ; i < targets_count; i++)
147
+ {
148
+ var target_offset_top = (settings.live_target_offset_top) ? targets.eq(i).offset().top : targets_offset_tops[i];
149
+ if(target_offset_top - scroll_top <= 0)
150
+ {
151
+ current_index = i;
152
+ }
153
+ }
154
+
155
+ // check if we are at the end of the page scroll
156
+ if (scroll_top >= (html_body.prop("scrollHeight") - win_height))
157
+ {
158
+ current_index = targets_count - 1;
159
+ }
160
+ }
161
+
162
+ // after scroll
163
+ if(has_after_scroll)
164
+ {
165
+ after_scroll_func = function()
166
+ {
167
+ settings.after_scroll(current_index);
168
+ }
169
+ }
170
+
171
+ // listen the event scroll
172
+ win.on("scroll.framous.scrollspy", function(e){
173
+ set_current_index(win.scrollTop());
174
+ active_link(current_index);
175
+ active_target(current_index);
176
+
177
+ // after scroll action
178
+ if(has_after_scroll)
179
+ {
180
+ clearTimeout(time_out);
181
+ time_out = setTimeout(after_scroll_func,settings.after_scroll_delay);
182
+ }
183
+ });
184
+
185
+ // default event scroll
186
+ win.trigger("scroll.framous.scrollspy");
187
+
188
+ // chaining
189
+ return this;
190
+ },
191
+
192
+ // animate to id target
193
+ goto : function(id) {
194
+ var nav = $(this.selector);
195
+ var link = nav.find('a[href="#'+id + '"]');
196
+ link.trigger((is_touch ? "touchstart.framous.scrollspy" : "click.framous.scrollspy"));
197
+ if (is_touch)
198
+ {
199
+ link.trigger("touchend.framous.scrollspy");
200
+ }
201
+ }
202
+ }
203
+
204
+ $.fn.scrollspy = function(methodOrOptions)
205
+ {
206
+ if ( methods[methodOrOptions] )
207
+ {
208
+ return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
209
+ }
210
+ else if ( typeof methodOrOptions === 'object' || ! methodOrOptions )
211
+ {
212
+ // Default to "init"
213
+ return methods.init.apply( this, arguments );
214
+ }
215
+ else
216
+ {
217
+ $.error('Method ' + method + ' does not exist on jQuery.scrollspy');
218
+ }
219
+ };
220
+
221
+ }( jQuery ));
@@ -0,0 +1,75 @@
1
+ /*
2
+ * Sticky plugin for jQuery
3
+ * --
4
+ * source: http://github.com/borderlab/framous
5
+ * site:
6
+ *
7
+ * @author Thomas Hermant (http://hanami.be)
8
+ * Copyright 2013, Thomas Hermant
9
+ * Released under the MIT, BSD, and GPL Licenses.
10
+ */
11
+
12
+ (function ( $ ) {
13
+
14
+ // global vars
15
+ var is_touch = !!('ontouchstart' in window) || !!('onmsgesturechange' in window),
16
+ win = $(window),
17
+ body,
18
+ sticky,
19
+ sticky_offset_top;
20
+
21
+ var methods = {
22
+
23
+ init : function( options ) {
24
+
25
+ // default options
26
+ var settings = $.extend({
27
+ sticky_class: "is-sticky",
28
+ body_class: "has-sticky",
29
+ offset_top: 0
30
+ }, options );
31
+
32
+
33
+ body = $("body");
34
+ sticky = this;
35
+ sticky_offset_top = sticky.offset().top - settings.offset_top;
36
+
37
+ win.on("scroll.framous.sticky", function(e){
38
+ var scroll_top = win.scrollTop();
39
+ if(sticky_offset_top < scroll_top)
40
+ {
41
+ sticky.addClass(settings.sticky_class);
42
+ body.addClass(settings.body_class);
43
+ }
44
+ else
45
+ {
46
+ sticky.removeClass(settings.sticky_class);
47
+ body.removeClass(settings.body_class);
48
+ }
49
+ });
50
+
51
+ win.trigger("scroll.framous.sticky");
52
+
53
+ // chaining
54
+ return this;
55
+ }
56
+ }
57
+
58
+ $.fn.sticky = function(methodOrOptions)
59
+ {
60
+ if ( methods[methodOrOptions] )
61
+ {
62
+ return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
63
+ }
64
+ else if ( typeof methodOrOptions === 'object' || ! methodOrOptions )
65
+ {
66
+ // Default to "init"
67
+ return methods.init.apply( this, arguments );
68
+ }
69
+ else
70
+ {
71
+ $.error('Method ' + method + ' does not exist on jQuery.scrollspy');
72
+ }
73
+ };
74
+
75
+ }( jQuery ));
@@ -0,0 +1,162 @@
1
+ /*
2
+ * Toogle plugin for jQuery
3
+ * --
4
+ * source: http://github.com/borderlab/framous
5
+ * site:
6
+ *
7
+ * @author Thomas Hermant (http://hanami.be)
8
+ * Copyright 2013, Thomas Hermant
9
+ * Released under the MIT, BSD, and GPL Licenses.
10
+ */
11
+
12
+ (function ( $ ) {
13
+
14
+ var is_touch = !!('ontouchstart' in window) || !!('onmsgesturechange' in window),
15
+ btns= {},
16
+ contents = {},
17
+ active_toggle = null,
18
+ update_checkbox = function(btn)
19
+ {
20
+ var checkbox = btn.find("input[type=checkbox]").eq(0);
21
+ if (btn.hasClass(btn.data("settings").active_btn_class))
22
+ {
23
+ checkbox[0].checked = true;
24
+ }
25
+ else
26
+ {
27
+ checkbox[0].checked = false;
28
+ }
29
+ },
30
+ // add event depending of touch device or not
31
+ add_event = function(el, action)
32
+ {
33
+ if(is_touch)
34
+ {
35
+ var init_x, int_y, delta_x, delta_y;
36
+
37
+ el.on("touchstart.framous.toggle", function(e){
38
+ init_x = (e && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0].pageX) ? e.originalEvent.touches[0].pageX : 0;
39
+ init_y = (e && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0].pageX) ? e.originalEvent.touches[0].pageY : 0;
40
+ delta_x = 0;
41
+ delta_y = 0;
42
+ });
43
+
44
+ el.on("touchmove.framous.toggle", function(e){
45
+ delta_x = e.originalEvent.touches[0].pageX - init_x;
46
+ delta_y = e.originalEvent.touches[0].pageY - init_y;
47
+ });
48
+
49
+ el.on("touchend.framous.toggle", function(e){
50
+ e.preventDefault();
51
+
52
+ // tap event -> no scroll
53
+ if(Math.abs(delta_x) < 2 && Math.abs(delta_y) < 2)
54
+ {
55
+ action(e);
56
+ }
57
+ });
58
+ }
59
+ else
60
+ {
61
+ el.on("click.framous.toggle",function(e){
62
+ action(e);
63
+ });
64
+ }
65
+ };
66
+
67
+ var methods = {
68
+
69
+ init : function( options ) {
70
+
71
+ // default options
72
+ var settings = $.extend({
73
+ active_btn_class: "is-active",
74
+ radio: false,
75
+ active_index : null
76
+ }, options );
77
+
78
+ var selector = this.selector;
79
+
80
+ // buttons
81
+ btns[selector] = this;
82
+
83
+ // chaining
84
+ this.each(function(index){
85
+ var btn = $(this);
86
+ btn.data("settings",settings);
87
+
88
+ var event_btn_action = function(e)
89
+ {
90
+ e.preventDefault();
91
+ // radio -> only one is active
92
+ if(settings.radio)
93
+ {
94
+ btns[selector].removeClass(settings.active_btn_class);
95
+ btns[selector].each(function(i){
96
+ var b = $(this);
97
+ update_checkbox(b);
98
+ });
99
+ }
100
+
101
+ btn.toggleClass(settings.active_btn_class);
102
+ update_checkbox(btn);
103
+ };
104
+
105
+ add_event(btn,event_btn_action);
106
+
107
+ // init default checkbox of button with the active_btn_class
108
+ if (btn.has(settings.active_btn_class))
109
+ {
110
+ update_checkbox(btn);
111
+ }
112
+
113
+ });
114
+
115
+ if (settings.active_index != null && settings.active_index != undefined && typeof settings.active_index == "object" && typeof settings.active_index.length == "number")
116
+ {
117
+ var l = settings.active_index.length;
118
+ var continue_bool = true;
119
+ for (var i = 0 ; (i < l) && continue_bool ; i++)
120
+ {
121
+ if(i < settings.active_index.length)
122
+ {
123
+ btns[selector].eq(settings.active_index[i]).click();
124
+ }
125
+ if (settings.radio)
126
+ {
127
+ continue_bool = false;
128
+ }
129
+ }
130
+ }
131
+ return this;
132
+ }
133
+ ,
134
+ // select the indexed toggle
135
+ active : function(index) {
136
+ var btn = $(this.selector).eq(index);
137
+ btn.trigger(is_touch ? "touchstart.framous.toggle" : "click.framous.toggle");
138
+ if (is_touch)
139
+ {
140
+ btn.trigger("touchend.framous.toggle");
141
+ }
142
+ },
143
+ }
144
+
145
+ $.fn.toggle = function(methodOrOptions)
146
+ {
147
+ if ( methods[methodOrOptions] )
148
+ {
149
+ return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
150
+ }
151
+ else if ( typeof methodOrOptions === 'object' || ! methodOrOptions )
152
+ {
153
+ // Default to "init"
154
+ return methods.init.apply( this, arguments );
155
+ }
156
+ else
157
+ {
158
+ $.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );
159
+ }
160
+ };
161
+
162
+ }( jQuery ));