rails_db 1.5.0 → 1.6.0

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -2
  3. data/Gemfile.lock +51 -58
  4. data/app/assets/javascripts/rails_db/application.js +5 -21
  5. data/app/assets/javascripts/rails_db/{vendor/jquery.js → jquery.js} +0 -0
  6. data/app/assets/javascripts/rails_db/rails-ujs.js +685 -0
  7. data/app/assets/stylesheets/rails_db/{app.scss → app.css} +2 -2
  8. data/lib/rails_db.rb +0 -1
  9. data/lib/rails_db/engine.rb +2 -3
  10. data/lib/rails_db/version.rb +1 -1
  11. data/rails_db.gemspec +0 -2
  12. data/test/dummy/db/rails_db.sqlite3 +0 -0
  13. data/test/dummy/db/schema.rb +52 -47
  14. data/test/standalone/Gemfile +0 -1
  15. data/test/standalone/Gemfile.lock +0 -5
  16. metadata +113 -167
  17. data/app/assets/images/rails_db/down_arrow.gif +0 -0
  18. data/app/assets/images/rails_db/up_arrow.gif +0 -0
  19. data/app/assets/javascripts/rails_db/foundation/foundation.abide.js +0 -426
  20. data/app/assets/javascripts/rails_db/foundation/foundation.accordion.js +0 -125
  21. data/app/assets/javascripts/rails_db/foundation/foundation.alert.js +0 -43
  22. data/app/assets/javascripts/rails_db/foundation/foundation.clearing.js +0 -586
  23. data/app/assets/javascripts/rails_db/foundation/foundation.dropdown.js +0 -468
  24. data/app/assets/javascripts/rails_db/foundation/foundation.equalizer.js +0 -104
  25. data/app/assets/javascripts/rails_db/foundation/foundation.interchange.js +0 -360
  26. data/app/assets/javascripts/rails_db/foundation/foundation.joyride.js +0 -935
  27. data/app/assets/javascripts/rails_db/foundation/foundation.js +0 -732
  28. data/app/assets/javascripts/rails_db/foundation/foundation.magellan.js +0 -214
  29. data/app/assets/javascripts/rails_db/foundation/foundation.offcanvas.js +0 -225
  30. data/app/assets/javascripts/rails_db/foundation/foundation.orbit.js +0 -476
  31. data/app/assets/javascripts/rails_db/foundation/foundation.reveal.js +0 -522
  32. data/app/assets/javascripts/rails_db/foundation/foundation.slider.js +0 -296
  33. data/app/assets/javascripts/rails_db/foundation/foundation.tab.js +0 -247
  34. data/app/assets/javascripts/rails_db/foundation/foundation.tooltip.js +0 -348
  35. data/app/assets/javascripts/rails_db/foundation/foundation.topbar.js +0 -458
  36. data/app/assets/javascripts/rails_db/vendor/fastclick.js +0 -8
  37. data/app/assets/javascripts/rails_db/vendor/jquery.cookie.js +0 -8
  38. data/app/assets/javascripts/rails_db/vendor/modernizr.js +0 -8
  39. data/app/assets/javascripts/rails_db/vendor/placeholder.js +0 -2
  40. data/test/dummy/db/development.sqlite3 +0 -0
  41. data/test/dummy/db/rails_db_dev.sqlite3 +0 -0
@@ -1,43 +0,0 @@
1
- ;(function ($, window, document, undefined) {
2
- 'use strict';
3
-
4
- Foundation.libs.alert = {
5
- name : 'alert',
6
-
7
- version : '5.5.3',
8
-
9
- settings : {
10
- callback : function () {}
11
- },
12
-
13
- init : function (scope, method, options) {
14
- this.bindings(method, options);
15
- },
16
-
17
- events : function () {
18
- var self = this,
19
- S = this.S;
20
-
21
- $(this.scope).off('.alert').on('click.fndtn.alert', '[' + this.attr_name() + '] .close', function (e) {
22
- var alertBox = S(this).closest('[' + self.attr_name() + ']'),
23
- settings = alertBox.data(self.attr_name(true) + '-init') || self.settings;
24
-
25
- e.preventDefault();
26
- if (Modernizr.csstransitions) {
27
- alertBox.addClass('alert-close');
28
- alertBox.on('transitionend webkitTransitionEnd oTransitionEnd', function (e) {
29
- S(this).trigger('close.fndtn.alert').remove();
30
- settings.callback();
31
- });
32
- } else {
33
- alertBox.fadeOut(300, function () {
34
- S(this).trigger('close.fndtn.alert').remove();
35
- settings.callback();
36
- });
37
- }
38
- });
39
- },
40
-
41
- reflow : function () {}
42
- };
43
- }(jQuery, window, window.document));
@@ -1,586 +0,0 @@
1
- ;(function ($, window, document, undefined) {
2
- 'use strict';
3
-
4
- Foundation.libs.clearing = {
5
- name : 'clearing',
6
-
7
- version : '5.5.3',
8
-
9
- settings : {
10
- templates : {
11
- viewing : '<a href="#" class="clearing-close">&times;</a>' +
12
- '<div class="visible-img" style="display: none"><div class="clearing-touch-label"></div><img src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" />' +
13
- '<p class="clearing-caption"></p><a href="#" class="clearing-main-prev"><span></span></a>' +
14
- '<a href="#" class="clearing-main-next"><span></span></a></div>' +
15
- '<img class="clearing-preload-next" style="display: none" src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" />' +
16
- '<img class="clearing-preload-prev" style="display: none" src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" />'
17
- },
18
-
19
- // comma delimited list of selectors that, on click, will close clearing,
20
- // add 'div.clearing-blackout, div.visible-img' to close on background click
21
- close_selectors : '.clearing-close, div.clearing-blackout',
22
-
23
- // Default to the entire li element.
24
- open_selectors : '',
25
-
26
- // Image will be skipped in carousel.
27
- skip_selector : '',
28
-
29
- touch_label : '',
30
-
31
- // event initializer and locks
32
- init : false,
33
- locked : false
34
- },
35
-
36
- init : function (scope, method, options) {
37
- var self = this;
38
- Foundation.inherit(this, 'throttle image_loaded');
39
-
40
- this.bindings(method, options);
41
-
42
- if (self.S(this.scope).is('[' + this.attr_name() + ']')) {
43
- this.assemble(self.S('li', this.scope));
44
- } else {
45
- self.S('[' + this.attr_name() + ']', this.scope).each(function () {
46
- self.assemble(self.S('li', this));
47
- });
48
- }
49
- },
50
-
51
- events : function (scope) {
52
- var self = this,
53
- S = self.S,
54
- $scroll_container = $('.scroll-container');
55
-
56
- if ($scroll_container.length > 0) {
57
- this.scope = $scroll_container;
58
- }
59
-
60
- S(this.scope)
61
- .off('.clearing')
62
- .on('click.fndtn.clearing', 'ul[' + this.attr_name() + '] li ' + this.settings.open_selectors,
63
- function (e, current, target) {
64
- var current = current || S(this),
65
- target = target || current,
66
- next = current.next('li'),
67
- settings = current.closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init'),
68
- image = S(e.target);
69
-
70
- e.preventDefault();
71
-
72
- if (!settings) {
73
- self.init();
74
- settings = current.closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');
75
- }
76
-
77
- // if clearing is open and the current image is
78
- // clicked, go to the next image in sequence
79
- if (target.hasClass('visible') &&
80
- current[0] === target[0] &&
81
- next.length > 0 && self.is_open(current)) {
82
- target = next;
83
- image = S('img', target);
84
- }
85
-
86
- // set current and target to the clicked li if not otherwise defined.
87
- self.open(image, current, target);
88
- self.update_paddles(target);
89
- })
90
-
91
- .on('click.fndtn.clearing', '.clearing-main-next',
92
- function (e) { self.nav(e, 'next') })
93
- .on('click.fndtn.clearing', '.clearing-main-prev',
94
- function (e) { self.nav(e, 'prev') })
95
- .on('click.fndtn.clearing', this.settings.close_selectors,
96
- function (e) { Foundation.libs.clearing.close(e, this) });
97
-
98
- $(document).on('keydown.fndtn.clearing',
99
- function (e) { self.keydown(e) });
100
-
101
- S(window).off('.clearing').on('resize.fndtn.clearing',
102
- function () { self.resize() });
103
-
104
- this.swipe_events(scope);
105
- },
106
-
107
- swipe_events : function (scope) {
108
- var self = this,
109
- S = self.S;
110
-
111
- S(this.scope)
112
- .on('touchstart.fndtn.clearing', '.visible-img', function (e) {
113
- if (!e.touches) { e = e.originalEvent; }
114
- var data = {
115
- start_page_x : e.touches[0].pageX,
116
- start_page_y : e.touches[0].pageY,
117
- start_time : (new Date()).getTime(),
118
- delta_x : 0,
119
- is_scrolling : undefined
120
- };
121
-
122
- S(this).data('swipe-transition', data);
123
- e.stopPropagation();
124
- })
125
- .on('touchmove.fndtn.clearing', '.visible-img', function (e) {
126
- if (!e.touches) {
127
- e = e.originalEvent;
128
- }
129
- // Ignore pinch/zoom events
130
- if (e.touches.length > 1 || e.scale && e.scale !== 1) {
131
- return;
132
- }
133
-
134
- var data = S(this).data('swipe-transition');
135
-
136
- if (typeof data === 'undefined') {
137
- data = {};
138
- }
139
-
140
- data.delta_x = e.touches[0].pageX - data.start_page_x;
141
-
142
- if (Foundation.rtl) {
143
- data.delta_x = -data.delta_x;
144
- }
145
-
146
- if (typeof data.is_scrolling === 'undefined') {
147
- data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) );
148
- }
149
-
150
- if (!data.is_scrolling && !data.active) {
151
- e.preventDefault();
152
- var direction = (data.delta_x < 0) ? 'next' : 'prev';
153
- data.active = true;
154
- self.nav(e, direction);
155
- }
156
- })
157
- .on('touchend.fndtn.clearing', '.visible-img', function (e) {
158
- S(this).data('swipe-transition', {});
159
- e.stopPropagation();
160
- });
161
- },
162
-
163
- assemble : function ($li) {
164
- var $el = $li.parent();
165
-
166
- if ($el.parent().hasClass('carousel')) {
167
- return;
168
- }
169
-
170
- $el.after('<div id="foundationClearingHolder"></div>');
171
-
172
- var grid = $el.detach(),
173
- grid_outerHTML = '';
174
-
175
- if (grid[0] == null) {
176
- return;
177
- } else {
178
- grid_outerHTML = grid[0].outerHTML;
179
- }
180
-
181
- var holder = this.S('#foundationClearingHolder'),
182
- settings = $el.data(this.attr_name(true) + '-init'),
183
- data = {
184
- grid : '<div class="carousel">' + grid_outerHTML + '</div>',
185
- viewing : settings.templates.viewing
186
- },
187
- wrapper = '<div class="clearing-assembled"><div>' + data.viewing +
188
- data.grid + '</div></div>',
189
- touch_label = this.settings.touch_label;
190
-
191
- if (Modernizr.touch) {
192
- wrapper = $(wrapper).find('.clearing-touch-label').html(touch_label).end();
193
- }
194
-
195
- holder.after(wrapper).remove();
196
- },
197
-
198
- open : function ($image, current, target) {
199
- var self = this,
200
- body = $(document.body),
201
- root = target.closest('.clearing-assembled'),
202
- container = self.S('div', root).first(),
203
- visible_image = self.S('.visible-img', container),
204
- image = self.S('img', visible_image).not($image),
205
- label = self.S('.clearing-touch-label', container),
206
- error = false,
207
- loaded = {};
208
-
209
- // Event to disable scrolling on touch devices when Clearing is activated
210
- $('body').on('touchmove', function (e) {
211
- e.preventDefault();
212
- });
213
-
214
- image.error(function () {
215
- error = true;
216
- });
217
-
218
- function startLoad() {
219
- setTimeout(function () {
220
- this.image_loaded(image, function () {
221
- if (image.outerWidth() === 1 && !error) {
222
- startLoad.call(this);
223
- } else {
224
- cb.call(this, image);
225
- }
226
- }.bind(this));
227
- }.bind(this), 100);
228
- }
229
-
230
- function cb (image) {
231
- var $image = $(image);
232
- $image.css('visibility', 'visible');
233
- $image.trigger('imageVisible');
234
- // toggle the gallery
235
- body.css('overflow', 'hidden');
236
- root.addClass('clearing-blackout');
237
- container.addClass('clearing-container');
238
- visible_image.show();
239
- this.fix_height(target)
240
- .caption(self.S('.clearing-caption', visible_image), self.S('img', target))
241
- .center_and_label(image, label)
242
- .shift(current, target, function () {
243
- target.closest('li').siblings().removeClass('visible');
244
- target.closest('li').addClass('visible');
245
- });
246
- visible_image.trigger('opened.fndtn.clearing')
247
- }
248
-
249
- if (!this.locked()) {
250
- visible_image.trigger('open.fndtn.clearing');
251
- // set the image to the selected thumbnail
252
- loaded = this.load($image);
253
- if (loaded.interchange) {
254
- image
255
- .attr('data-interchange', loaded.interchange)
256
- .foundation('interchange', 'reflow');
257
- } else {
258
- image
259
- .attr('src', loaded.src)
260
- .attr('data-interchange', '');
261
- }
262
- image.css('visibility', 'hidden');
263
-
264
- startLoad.call(this);
265
- }
266
- },
267
-
268
- close : function (e, el) {
269
- e.preventDefault();
270
-
271
- var root = (function (target) {
272
- if (/blackout/.test(target.selector)) {
273
- return target;
274
- } else {
275
- return target.closest('.clearing-blackout');
276
- }
277
- }($(el))),
278
- body = $(document.body), container, visible_image;
279
-
280
- if (el === e.target && root) {
281
- body.css('overflow', '');
282
- container = $('div', root).first();
283
- visible_image = $('.visible-img', container);
284
- visible_image.trigger('close.fndtn.clearing');
285
- this.settings.prev_index = 0;
286
- $('ul[' + this.attr_name() + ']', root)
287
- .attr('style', '').closest('.clearing-blackout')
288
- .removeClass('clearing-blackout');
289
- container.removeClass('clearing-container');
290
- visible_image.hide();
291
- visible_image.trigger('closed.fndtn.clearing');
292
- }
293
-
294
- // Event to re-enable scrolling on touch devices
295
- $('body').off('touchmove');
296
-
297
- return false;
298
- },
299
-
300
- is_open : function (current) {
301
- return current.parent().prop('style').length > 0;
302
- },
303
-
304
- keydown : function (e) {
305
- var clearing = $('.clearing-blackout ul[' + this.attr_name() + ']'),
306
- NEXT_KEY = this.rtl ? 37 : 39,
307
- PREV_KEY = this.rtl ? 39 : 37,
308
- ESC_KEY = 27;
309
-
310
- if (e.which === NEXT_KEY) {
311
- this.go(clearing, 'next');
312
- }
313
- if (e.which === PREV_KEY) {
314
- this.go(clearing, 'prev');
315
- }
316
- if (e.which === ESC_KEY) {
317
- this.S('a.clearing-close').trigger('click.fndtn.clearing');
318
- }
319
- },
320
-
321
- nav : function (e, direction) {
322
- var clearing = $('ul[' + this.attr_name() + ']', '.clearing-blackout');
323
-
324
- e.preventDefault();
325
- this.go(clearing, direction);
326
- },
327
-
328
- resize : function () {
329
- var image = $('img', '.clearing-blackout .visible-img'),
330
- label = $('.clearing-touch-label', '.clearing-blackout');
331
-
332
- if (image.length) {
333
- this.center_and_label(image, label);
334
- image.trigger('resized.fndtn.clearing')
335
- }
336
- },
337
-
338
- // visual adjustments
339
- fix_height : function (target) {
340
- var lis = target.parent().children(),
341
- self = this;
342
-
343
- lis.each(function () {
344
- var li = self.S(this),
345
- image = li.find('img');
346
-
347
- if (li.height() > image.outerHeight()) {
348
- li.addClass('fix-height');
349
- }
350
- })
351
- .closest('ul')
352
- .width(lis.length * 100 + '%');
353
-
354
- return this;
355
- },
356
-
357
- update_paddles : function (target) {
358
- target = target.closest('li');
359
- var visible_image = target
360
- .closest('.carousel')
361
- .siblings('.visible-img');
362
-
363
- if (target.next().length > 0) {
364
- this.S('.clearing-main-next', visible_image).removeClass('disabled');
365
- } else {
366
- this.S('.clearing-main-next', visible_image).addClass('disabled');
367
- }
368
-
369
- if (target.prev().length > 0) {
370
- this.S('.clearing-main-prev', visible_image).removeClass('disabled');
371
- } else {
372
- this.S('.clearing-main-prev', visible_image).addClass('disabled');
373
- }
374
- },
375
-
376
- center_and_label : function (target, label) {
377
- if (!this.rtl && label.length > 0) {
378
- label.css({
379
- marginLeft : -(label.outerWidth() / 2),
380
- marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10
381
- });
382
- } else {
383
- label.css({
384
- marginRight : -(label.outerWidth() / 2),
385
- marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10,
386
- left: 'auto',
387
- right: '50%'
388
- });
389
- }
390
- return this;
391
- },
392
-
393
- // image loading and preloading
394
-
395
- load : function ($image) {
396
- var href,
397
- interchange,
398
- closest_a;
399
-
400
- if ($image[0].nodeName === 'A') {
401
- href = $image.attr('href');
402
- interchange = $image.data('clearing-interchange');
403
- } else {
404
- closest_a = $image.closest('a');
405
- href = closest_a.attr('href');
406
- interchange = closest_a.data('clearing-interchange');
407
- }
408
-
409
- this.preload($image);
410
-
411
- return {
412
- 'src': href ? href : $image.attr('src'),
413
- 'interchange': href ? interchange : $image.data('clearing-interchange')
414
- }
415
- },
416
-
417
- preload : function ($image) {
418
- this
419
- .img($image.closest('li').next(), 'next')
420
- .img($image.closest('li').prev(), 'prev');
421
- },
422
-
423
- img : function (img, sibling_type) {
424
- if (img.length) {
425
- var preload_img = $('.clearing-preload-' + sibling_type),
426
- new_a = this.S('a', img),
427
- src,
428
- interchange,
429
- image;
430
-
431
- if (new_a.length) {
432
- src = new_a.attr('href');
433
- interchange = new_a.data('clearing-interchange');
434
- } else {
435
- image = this.S('img', img);
436
- src = image.attr('src');
437
- interchange = image.data('clearing-interchange');
438
- }
439
-
440
- if (interchange) {
441
- preload_img.attr('data-interchange', interchange);
442
- } else {
443
- preload_img.attr('src', src);
444
- preload_img.attr('data-interchange', '');
445
- }
446
- }
447
- return this;
448
- },
449
-
450
- // image caption
451
-
452
- caption : function (container, $image) {
453
- var caption = $image.attr('data-caption');
454
-
455
- if (caption) {
456
- var containerPlain = container.get(0);
457
- containerPlain.innerHTML = caption;
458
- container.show();
459
- } else {
460
- container
461
- .text('')
462
- .hide();
463
- }
464
- return this;
465
- },
466
-
467
- // directional methods
468
-
469
- go : function ($ul, direction) {
470
- var current = this.S('.visible', $ul),
471
- target = current[direction]();
472
-
473
- // Check for skip selector.
474
- if (this.settings.skip_selector && target.find(this.settings.skip_selector).length != 0) {
475
- target = target[direction]();
476
- }
477
-
478
- if (target.length) {
479
- this.S('img', target)
480
- .trigger('click.fndtn.clearing', [current, target])
481
- .trigger('change.fndtn.clearing');
482
- }
483
- },
484
-
485
- shift : function (current, target, callback) {
486
- var clearing = target.parent(),
487
- old_index = this.settings.prev_index || target.index(),
488
- direction = this.direction(clearing, current, target),
489
- dir = this.rtl ? 'right' : 'left',
490
- left = parseInt(clearing.css('left'), 10),
491
- width = target.outerWidth(),
492
- skip_shift;
493
-
494
- var dir_obj = {};
495
-
496
- // we use jQuery animate instead of CSS transitions because we
497
- // need a callback to unlock the next animation
498
- // needs support for RTL **
499
- if (target.index() !== old_index && !/skip/.test(direction)) {
500
- if (/left/.test(direction)) {
501
- this.lock();
502
- dir_obj[dir] = left + width;
503
- clearing.animate(dir_obj, 300, this.unlock());
504
- } else if (/right/.test(direction)) {
505
- this.lock();
506
- dir_obj[dir] = left - width;
507
- clearing.animate(dir_obj, 300, this.unlock());
508
- }
509
- } else if (/skip/.test(direction)) {
510
- // the target image is not adjacent to the current image, so
511
- // do we scroll right or not
512
- skip_shift = target.index() - this.settings.up_count;
513
- this.lock();
514
-
515
- if (skip_shift > 0) {
516
- dir_obj[dir] = -(skip_shift * width);
517
- clearing.animate(dir_obj, 300, this.unlock());
518
- } else {
519
- dir_obj[dir] = 0;
520
- clearing.animate(dir_obj, 300, this.unlock());
521
- }
522
- }
523
-
524
- callback();
525
- },
526
-
527
- direction : function ($el, current, target) {
528
- var lis = this.S('li', $el),
529
- li_width = lis.outerWidth() + (lis.outerWidth() / 4),
530
- up_count = Math.floor(this.S('.clearing-container').outerWidth() / li_width) - 1,
531
- target_index = lis.index(target),
532
- response;
533
-
534
- this.settings.up_count = up_count;
535
-
536
- if (this.adjacent(this.settings.prev_index, target_index)) {
537
- if ((target_index > up_count) && target_index > this.settings.prev_index) {
538
- response = 'right';
539
- } else if ((target_index > up_count - 1) && target_index <= this.settings.prev_index) {
540
- response = 'left';
541
- } else {
542
- response = false;
543
- }
544
- } else {
545
- response = 'skip';
546
- }
547
-
548
- this.settings.prev_index = target_index;
549
-
550
- return response;
551
- },
552
-
553
- adjacent : function (current_index, target_index) {
554
- for (var i = target_index + 1; i >= target_index - 1; i--) {
555
- if (i === current_index) {
556
- return true;
557
- }
558
- }
559
- return false;
560
- },
561
-
562
- // lock management
563
-
564
- lock : function () {
565
- this.settings.locked = true;
566
- },
567
-
568
- unlock : function () {
569
- this.settings.locked = false;
570
- },
571
-
572
- locked : function () {
573
- return this.settings.locked;
574
- },
575
-
576
- off : function () {
577
- this.S(this.scope).off('.fndtn.clearing');
578
- this.S(window).off('.fndtn.clearing');
579
- },
580
-
581
- reflow : function () {
582
- this.init();
583
- }
584
- };
585
-
586
- }(jQuery, window, window.document));