framous 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG.mkdn CHANGED
@@ -1,6 +1,12 @@
1
1
  Framous Changelog
2
2
  =================
3
3
 
4
+ v0.3.3 [Jul 25, 2013]
5
+ ---------------------
6
+ * manifest.rb : major updates
7
+ * custom config.rb
8
+ * new javascripts & stylesheets files
9
+
4
10
  v0.3.2 [Jul 23, 2013]
5
11
  ---------------------
6
12
  * typo & some changes here and there
@@ -1,10 +1,12 @@
1
1
  /* ---------------------------------------------------------------------------
2
- Base
2
+ Base Layout Style : Body, Header, Main, Footer
3
3
  */
4
4
 
5
5
  body {
6
6
  @include pie-clearfix;
7
+ position: relative;
7
8
  width: 100%;
9
+ background: $background-body-color;
8
10
  }
9
11
 
10
12
  .out-container {
@@ -1,5 +1,6 @@
1
- // ---------------------------------------------------------------------------
2
- // Typography
1
+ /* ---------------------------------------------------------------------------
2
+ Typography
3
+ */
3
4
 
4
5
  body,div,dl,dt,dd,ul,ol,li,
5
6
  h1,h2,h3,h4,h5,h6,
@@ -12,8 +13,6 @@ pre,form,p,blockquote,th,td {
12
13
 
13
14
  body {
14
15
  @include establish-baseline;
15
- position: relative;
16
- background: $background-body-color;
17
16
  color: $body-font-color;
18
17
  font-family: $body-font-family;
19
18
  font-weight: $font-weight-normal;
@@ -0,0 +1,28 @@
1
+ require 'framous'
2
+ # Require any additional compass plugins here.
3
+
4
+
5
+ # Set this to the root of your project when deployed:
6
+ http_path = "/"
7
+ css_dir = "stylesheets"
8
+ sass_dir = "sass"
9
+ images_dir = "images"
10
+ javascripts_dir = "javascripts"
11
+
12
+ # You can select your preferred output style here (can be overridden via the command line):
13
+ # output_style = :expanded or :nested or :compact or :compressed
14
+
15
+ # To enable relative paths to assets via compass helper functions. Uncomment:
16
+ # relative_assets = true
17
+
18
+ # To disable debugging comments that display the original location of your selectors. Uncomment:
19
+ line_comments = false
20
+
21
+ Sass::Script::Number.precision = 4
22
+
23
+
24
+ # If you prefer the indented syntax, you might want to regenerate this
25
+ # project again passing --syntax sass, or you can uncomment this:
26
+ # preferred_syntax = :sass
27
+ # and then run:
28
+ # sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass
@@ -38,6 +38,8 @@
38
38
  </footer><!-- /footer -->
39
39
 
40
40
  <!-- JS -->
41
+ <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
42
+ <script>window.jQuery || document.write('<script src="javascripts/vendor/jquery-1.10.1.min.js"><\/script>')</script>
41
43
 
42
44
  </body>
43
45
  </html>
@@ -0,0 +1,336 @@
1
+ /*
2
+ * Collapse 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
+ currentIndex = {},
16
+ btns= {},
17
+ contents = {},
18
+ // add event depending of touch device or not
19
+ add_event = function(el, action)
20
+ {
21
+ if(is_touch)
22
+ {
23
+ var init_x, int_y, delta_x, delta_y;
24
+
25
+ el.on("touchstart.framous.collapse", function(e){
26
+ init_x = (e && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0].pageX) ? e.originalEvent.touches[0].pageX : 0;
27
+ init_y = (e && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0].pageX) ? e.originalEvent.touches[0].pageY : 0;
28
+ delta_x = 0;
29
+ delta_y = 0;
30
+ });
31
+
32
+ el.on("touchmove.framous.collapse", function(e){
33
+ delta_x = e.originalEvent.touches[0].pageX - init_x;
34
+ delta_y = e.originalEvent.touches[0].pageY - init_y;
35
+ });
36
+
37
+ el.on("touchend.framous.collapse", function(e){
38
+ e.preventDefault();
39
+
40
+ // tap event -> no scroll
41
+ if(Math.abs(delta_x) < 2 && Math.abs(delta_y) < 2)
42
+ {
43
+ action(e);
44
+ }
45
+ });
46
+ }
47
+ else
48
+ {
49
+ el.on("click.framous.collapse",function(e){
50
+ action(e);
51
+ });
52
+ }
53
+ };
54
+
55
+ var methods = {
56
+ init : function( options )
57
+ {
58
+ // default options
59
+ var settings = $.extend({
60
+ content: 'js-content',
61
+ active_btn_class: "is-active",
62
+ active_content_class: "is-visible",
63
+ accordeon: true,
64
+ circular: true,
65
+ open_indexes: [],
66
+ show_time : 400,
67
+ hide_time: 400,
68
+
69
+ // effect: slide, fade, show, custom
70
+ effect: "slide",
71
+
72
+ // Custom Effect show - hide
73
+ custom_show : function(index, currentIndex, contents, onEnd, time){},
74
+ custom_hide : function(index, currentIndex, contents, onEnd, time){},
75
+
76
+ // event handler
77
+ before_show: null,
78
+ show: null,
79
+ before_hide: null,
80
+ hide: null,
81
+
82
+ }, options );
83
+
84
+ var selector = this.selector;
85
+
86
+ // boutons
87
+ btns[selector] = this;
88
+
89
+ // contents
90
+ contents[selector] = $("." + settings.content);
91
+
92
+ // currentIndex : used when only one open
93
+ currentIndex[selector] = (settings.open_indexes.length == 1) ? settings.open_indexes[0] : null;
94
+
95
+ // disable accordeon mode if more than one index open
96
+ if(settings.open_indexes.length > 1)
97
+ {
98
+ settings.accordeon = false
99
+ }
100
+
101
+ // set default
102
+ if(settings.allClose && settings.open_indexes.length == 0)
103
+ {
104
+ currentIndex[selector] = -1;
105
+ }
106
+
107
+ // Default effects functions
108
+ switch(settings.effect)
109
+ {
110
+ case "slide":
111
+ settings.custom_show = function(index, currentIndex,contents, time , onEnd){
112
+ contents.eq(index).slideDown(time, onEnd);
113
+ }
114
+
115
+ settings.custom_hide = function(index, currentIndex,contents, time, onEnd){
116
+ contents.eq(index).slideUp(time, onEnd);
117
+ }
118
+ break;
119
+
120
+ case "show":
121
+ settings.custom_show = function(index, currentIndex,contents ,time, onEnd){
122
+ contents.eq(index).show();
123
+ onEnd();
124
+ }
125
+
126
+ settings.custom_hide = function(index, currentIndex,contents ,time, onEnd){
127
+ contents.eq(index).hide();
128
+ onEnd();
129
+ }
130
+ break;
131
+ case "fade":
132
+ settings.custom_show = function(index, currentIndex,contents ,time, onEnd){
133
+ contents.eq(index).fadeIn(time, onEnd);
134
+ }
135
+
136
+ settings.custom_hide = function(index, currentIndex,contents ,time, onEnd){
137
+ contents.eq(index).fadeOut(time, onEnd);
138
+ }
139
+ break;
140
+ }
141
+
142
+ // show only indexes
143
+ if (settings.open_indexes.length > 0)
144
+ {
145
+ // hide all
146
+ if(settings.effect != "custom")
147
+ {
148
+ contents[selector].hide();
149
+ }
150
+
151
+ // open when in indexes
152
+ var l = settings.open_indexes.length;
153
+ for(var i = 0; i < l ; i++)
154
+ {
155
+ var index = settings.open_indexes[i];
156
+ btns[selector].eq(index).addClass(settings.active_btn_class)
157
+ contents[selector].eq(index).addClass(settings.active_content_class).show();
158
+ }
159
+ }
160
+ // show all content
161
+ else
162
+ {
163
+ btns[selector].addClass(settings.active_btn_class)
164
+ contents[selector].addClass(settings.active_content_class)
165
+ }
166
+
167
+ // open content
168
+ var openContent = function(i)
169
+ {
170
+ if (i < 0) return;
171
+
172
+ if(settings.before_show != null)
173
+ {
174
+ settings.before_show(i, currentIndex[selector], contents[selector]);
175
+ }
176
+
177
+ var onFinished = null;
178
+ if(settings.show != null)
179
+ {
180
+ onFinished = function()
181
+ {
182
+ settings.show(i, currentIndex[selector], contents[selector]);
183
+ }
184
+ }
185
+
186
+ var c = contents[selector].eq(i).addClass(settings.active_content_class);
187
+ settings.custom_show(i, currentIndex[selector], contents[selector],settings.show_time,onFinished);
188
+ };
189
+
190
+ // close content
191
+ var closeContent = function(i)
192
+ {
193
+ if (i < 0) return;
194
+
195
+ if(settings.before_hide != null)
196
+ {
197
+ settings.before_hide(i, contents[selector]);
198
+ }
199
+
200
+ var onFinished = null;
201
+ if(settings.hide != null)
202
+ {
203
+ onFinished = function()
204
+ {
205
+ settings.hide(i, contents[selector]);
206
+ }
207
+ }
208
+
209
+ var c = contents[selector].eq(i).removeClass(settings.active_content_class)
210
+ settings.custom_hide(i, currentIndex[selector],contents[selector],settings.show_time,onFinished);
211
+
212
+ btns[selector].eq(i).removeClass(settings.active_btn_class);
213
+ };
214
+
215
+ // chaining
216
+ return this.each(function(index) {
217
+
218
+ // get the btn
219
+ var btn = $(this);
220
+
221
+ var event_btn_action = function(e)
222
+ {
223
+ e.preventDefault();
224
+
225
+ // toggle class is-open
226
+ btn.toggleClass(settings.active_btn_class);
227
+
228
+ // open content
229
+ if(btn.hasClass(settings.active_btn_class))
230
+ {
231
+ openContent(index);
232
+
233
+ // if accordeon, on open -> close the current content
234
+ if(settings.accordeon && currentIndex[selector] != null)
235
+ {
236
+ // avoid open and directly close content
237
+ if(currentIndex[selector] != index)
238
+ {
239
+ closeContent(currentIndex[selector]);
240
+ }
241
+ currentIndex[selector] = index;
242
+ }
243
+ }
244
+ // close content
245
+ else
246
+ {
247
+ closeContent(index);
248
+ }
249
+ };
250
+
251
+ add_event(btn,event_btn_action);
252
+ });
253
+ },
254
+ next : function(circular)
255
+ {
256
+ if(circular == undefined)
257
+ {
258
+ circular = true
259
+ }
260
+ methods.nextSlide(this.selector, circular);
261
+ },
262
+ // Show next content
263
+ nextSlide : function(selector,circular)
264
+ {
265
+ var nextIndex = currentIndex[selector];
266
+ if(++nextIndex >= contents[selector].length)
267
+ {
268
+ nextIndex = contents[selector].length - 1;
269
+ if(circular)
270
+ {
271
+ nextIndex = 0;
272
+ }
273
+ }
274
+
275
+ if(nextIndex != currentIndex[selector])
276
+ {
277
+ var btn = btns[selector].eq(nextIndex);
278
+ btn.trigger((is_touch ? "touchstart.framous.collapse" : "click.framous.collapse"));
279
+ if (is_touch)
280
+ {
281
+ btn.trigger("touchend.framous.collapse");
282
+ }
283
+ }
284
+ },
285
+ prev : function(circular)
286
+ {
287
+ if(circular == undefined)
288
+ {
289
+ circular = true
290
+ }
291
+ methods.prevSlide(this.selector, circular)
292
+ },
293
+ // Show previous content
294
+ prevSlide : function(selector,circular)
295
+ {
296
+ var prevIndex = currentIndex[selector];
297
+ if(--prevIndex < 0)
298
+ {
299
+ prevIndex = 0;
300
+
301
+ if(circular)
302
+ {
303
+ prevIndex = contents[selector].length - 1;
304
+ }
305
+ }
306
+
307
+ if(prevIndex != currentIndex[selector])
308
+ {
309
+ var btn = btns[selector].eq(prevIndex);
310
+ btn.trigger((is_touch ? "touchstart.framous.collapse" : "click.framous.collapse"));
311
+ if (is_touch)
312
+ {
313
+ btn.trigger("touchend.framous.collapse");
314
+ }
315
+ }
316
+ }
317
+ }
318
+
319
+ $.fn.collapse = function(methodOrOptions)
320
+ {
321
+ if ( methods[methodOrOptions] )
322
+ {
323
+ return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
324
+ }
325
+ else if ( typeof methodOrOptions === 'object' || ! methodOrOptions )
326
+ {
327
+ // Default to "init"
328
+ return methods.init.apply( this, arguments );
329
+ }
330
+ else
331
+ {
332
+ $.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );
333
+ }
334
+ };
335
+
336
+ }( jQuery ));
@@ -0,0 +1,212 @@
1
+ /*
2
+ * Dropdown 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
+ dropdown_containers,
17
+ dropdowns,
18
+ all_dropdown_items,
19
+ body,
20
+ div_open = $('<div/>'),
21
+ current_dropdown_link,
22
+ add_event = function(el, action)
23
+ {
24
+ if(is_touch)
25
+ {
26
+ var init_x, int_y, delta_x, delta_y;
27
+
28
+ el.on("touchstart.framous.dropdown", function(e){
29
+ init_x = (e && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0].pageX) ? e.originalEvent.touches[0].pageX : 0;
30
+ init_y = (e && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0].pageX) ? e.originalEvent.touches[0].pageY : 0;
31
+ delta_x = 0;
32
+ delta_y = 0;
33
+ });
34
+
35
+ el.on("touchmove.framous.dropdown", function(e){
36
+ delta_x = e.originalEvent.touches[0].pageX - init_x;
37
+ delta_y = e.originalEvent.touches[0].pageY - init_y;
38
+ });
39
+
40
+ el.on("touchend.framous.dropdown", function(e){
41
+ e.preventDefault();
42
+
43
+ // tap event -> no scroll
44
+ if(Math.abs(delta_x) < 2 && Math.abs(delta_y) < 2)
45
+ {
46
+ action(e);
47
+ }
48
+ });
49
+ }
50
+ else
51
+ {
52
+ el.on("click.framous.dropdown",function(e){
53
+ action(e);
54
+ });
55
+ }
56
+ };
57
+
58
+
59
+ var methods = {
60
+
61
+ init : function( options ) {
62
+
63
+ // default options
64
+ var settings = $.extend({
65
+ z_index: 1,
66
+ open_class: "is-open",
67
+ active_class: "is-active",
68
+ dropdown_class: "js-menu-dropdown",
69
+ dropdown_link: "js-dropdown-link",
70
+ active_dropdown_class: "is-visible",
71
+ dropdown_item_class: "js-menu-dropdown-item",
72
+ active_dropdown_item_class: "is-active",
73
+
74
+ }, options );
75
+
76
+ dropdown_containers = this;
77
+ dropdowns = dropdown_containers.find("." + settings.dropdown_class);
78
+ all_dropdown_items = dropdowns.find("." + settings.dropdown_item_class);
79
+ body = $("body");
80
+ div_open.css({position:"fixed",zIndex:settings.z_index - 1,left:0,right:0,top:0,bottom:0,background:"rgba(0,0,0,0)"});
81
+
82
+ var close_dropdowns = function()
83
+ {
84
+ // close all dropdown
85
+ dropdown_containers.removeClass(settings.open_class);
86
+ dropdowns.removeClass(settings.active_dropdown_class);
87
+ };
88
+
89
+ var active_dropdown_container = function()
90
+ {
91
+ dropdown_containers.removeClass(settings.active_class);
92
+ if(dropdown_containers.find("." + settings.active_dropdown_item_class).length != 0)
93
+ {
94
+ dropdown_containers.each(function(i){
95
+ var dd_c = $(this);
96
+
97
+ if(dd_c.find("." + settings.active_dropdown_item_class).length > 0)
98
+ {
99
+ dd_c.addClass(settings.active_class);
100
+ }
101
+ });
102
+ }
103
+ };
104
+
105
+ // chaining
106
+ return this.each(function(index){
107
+ var dropdown_container = $(this);
108
+ var dropdown_link = dropdown_container.find("." + settings.dropdown_link);
109
+ var dropdown = dropdowns.eq(index);
110
+ var dropdown_items = dropdown.find("." + settings.dropdown_item_class);
111
+
112
+ var dropdown_container_action_event = function(e)
113
+ {
114
+ current_dropdown_link = dropdown_link;
115
+
116
+ // check if already displayed
117
+ var is_open= dropdown_container.hasClass(settings.open_class);
118
+ div_open.remove();
119
+
120
+ close_dropdowns();
121
+
122
+ // deactive all container
123
+ dropdown_containers.removeClass(settings.active_class);
124
+ dropdown_container.addClass(settings.active_class);
125
+
126
+ // if not already displayed -> display
127
+ if(!is_open)
128
+ {
129
+ // div open
130
+ if (is_touch)
131
+ {
132
+ body.append(div_open);
133
+ var div_open_action_event = function(e){
134
+ close_dropdowns();
135
+ div_open.remove();
136
+ active_dropdown_container();
137
+ };
138
+ add_event(div_open,div_open_action_event);
139
+ }
140
+ else
141
+ {
142
+ // create blur event (call after mousedown and before click)
143
+ dropdown_link.on("blur.framous.dropdown", function(e){
144
+
145
+ if (current_dropdown_link == dropdown_link)
146
+ {
147
+ close_dropdowns();
148
+ active_dropdown_container();
149
+ }
150
+ // kill blur event
151
+ dropdown_link.off("blur.framous.dropdown");
152
+ });
153
+
154
+ }
155
+
156
+ dropdown_container.addClass(settings.open_class);
157
+ setInterval(function(){dropdown.addClass(settings.active_dropdown_class)},0);
158
+ }
159
+ else
160
+ {
161
+ active_dropdown_container();
162
+ }
163
+ };
164
+ add_event(dropdown_container,dropdown_container_action_event);
165
+
166
+ // add action on dropdown_item
167
+ dropdown_items.each(function(i){
168
+ var dropdown_item = $(this);
169
+ var dropdown_item_action_event = function(e)
170
+ {
171
+ // active the item
172
+ all_dropdown_items.removeClass(settings.active_dropdown_item_class);
173
+ dropdown_item.addClass(settings.active_dropdown_item_class);
174
+ };
175
+ add_event(dropdown_item, dropdown_item_action_event);
176
+ });
177
+
178
+ // no link in url for dropdown_link
179
+ add_event(dropdown_link,function(e){
180
+ e.preventDefault();
181
+ dropdown_link.focus();
182
+ });
183
+
184
+ if (! is_touch)
185
+ {
186
+ // avoid the blur action -> mousedown is called before the blur event and before the click
187
+ dropdown_container.on("mousedown.framous.dropdown",function(){
188
+ current_dropdown_link = undefined;
189
+ });
190
+ }
191
+ });
192
+ }
193
+ }
194
+
195
+ $.fn.dropdown = function(methodOrOptions)
196
+ {
197
+ if ( methods[methodOrOptions] )
198
+ {
199
+ return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
200
+ }
201
+ else if ( typeof methodOrOptions === 'object' || ! methodOrOptions )
202
+ {
203
+ // Default to "init"
204
+ return methods.init.apply( this, arguments );
205
+ }
206
+ else
207
+ {
208
+ $.error('Method ' + method + ' does not exist on jQuery.scrollspy');
209
+ }
210
+ };
211
+
212
+ }( jQuery ));