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,296 +0,0 @@
1
- ;(function ($, window, document, undefined) {
2
- 'use strict';
3
-
4
- Foundation.libs.slider = {
5
- name : 'slider',
6
-
7
- version : '5.5.3',
8
-
9
- settings : {
10
- start : 0,
11
- end : 100,
12
- step : 1,
13
- precision : 2,
14
- initial : null,
15
- display_selector : '',
16
- vertical : false,
17
- trigger_input_change : false,
18
- on_change : function () {}
19
- },
20
-
21
- cache : {},
22
-
23
- init : function (scope, method, options) {
24
- Foundation.inherit(this, 'throttle');
25
- this.bindings(method, options);
26
- this.reflow();
27
- },
28
-
29
- events : function () {
30
- var self = this;
31
- $(this.scope)
32
- .off('.slider')
33
- .on('mousedown.fndtn.slider touchstart.fndtn.slider pointerdown.fndtn.slider',
34
- '[' + self.attr_name() + ']:not(.disabled, [disabled]) .range-slider-handle', function (e) {
35
- if (!self.cache.active) {
36
- e.preventDefault();
37
- self.set_active_slider($(e.target));
38
- }
39
- })
40
- .on('mousemove.fndtn.slider touchmove.fndtn.slider pointermove.fndtn.slider', function (e) {
41
- if (!!self.cache.active) {
42
- e.preventDefault();
43
- if ($.data(self.cache.active[0], 'settings').vertical) {
44
- var scroll_offset = 0;
45
- if (!e.pageY) {
46
- scroll_offset = window.scrollY;
47
- }
48
- self.calculate_position(self.cache.active, self.get_cursor_position(e, 'y') + scroll_offset);
49
- } else {
50
- self.calculate_position(self.cache.active, self.get_cursor_position(e, 'x'));
51
- }
52
- }
53
- })
54
- .on('mouseup.fndtn.slider touchend.fndtn.slider pointerup.fndtn.slider', function (e) {
55
- if(!self.cache.active) {
56
- // if the user has just clicked into the slider without starting to drag the handle
57
- var slider = $(e.target).attr('role') === 'slider' ? $(e.target) : $(e.target).closest('.range-slider').find("[role='slider']");
58
-
59
- if (slider.length && (!slider.parent().hasClass('disabled') && !slider.parent().attr('disabled'))) {
60
- self.set_active_slider(slider);
61
- if ($.data(self.cache.active[0], 'settings').vertical) {
62
- var scroll_offset = 0;
63
- if (!e.pageY) {
64
- scroll_offset = window.scrollY;
65
- }
66
- self.calculate_position(self.cache.active, self.get_cursor_position(e, 'y') + scroll_offset);
67
- } else {
68
- self.calculate_position(self.cache.active, self.get_cursor_position(e, 'x'));
69
- }
70
- }
71
- }
72
- self.remove_active_slider();
73
- })
74
- .on('change.fndtn.slider', function (e) {
75
- self.settings.on_change();
76
- });
77
-
78
- self.S(window)
79
- .on('resize.fndtn.slider', self.throttle(function (e) {
80
- self.reflow();
81
- }, 300));
82
-
83
- // update slider value as users change input value
84
- this.S('[' + this.attr_name() + ']').each(function () {
85
- var slider = $(this),
86
- handle = slider.children('.range-slider-handle')[0],
87
- settings = self.initialize_settings(handle);
88
-
89
- if (settings.display_selector != '') {
90
- $(settings.display_selector).each(function(){
91
- if ($(this).attr('value')) {
92
- $(this).off('change').on('change', function () {
93
- slider.foundation("slider", "set_value", $(this).val());
94
- });
95
- }
96
- });
97
- }
98
- });
99
- },
100
-
101
- get_cursor_position : function (e, xy) {
102
- var pageXY = 'page' + xy.toUpperCase(),
103
- clientXY = 'client' + xy.toUpperCase(),
104
- position;
105
-
106
- if (typeof e[pageXY] !== 'undefined') {
107
- position = e[pageXY];
108
- } else if (typeof e.originalEvent[clientXY] !== 'undefined') {
109
- position = e.originalEvent[clientXY];
110
- } else if (e.originalEvent.touches && e.originalEvent.touches[0] && typeof e.originalEvent.touches[0][clientXY] !== 'undefined') {
111
- position = e.originalEvent.touches[0][clientXY];
112
- } else if (e.currentPoint && typeof e.currentPoint[xy] !== 'undefined') {
113
- position = e.currentPoint[xy];
114
- }
115
-
116
- return position;
117
- },
118
-
119
- set_active_slider : function ($handle) {
120
- this.cache.active = $handle;
121
- },
122
-
123
- remove_active_slider : function () {
124
- this.cache.active = null;
125
- },
126
-
127
- calculate_position : function ($handle, cursor_x) {
128
- var self = this,
129
- settings = $.data($handle[0], 'settings'),
130
- handle_l = $.data($handle[0], 'handle_l'),
131
- handle_o = $.data($handle[0], 'handle_o'),
132
- bar_l = $.data($handle[0], 'bar_l'),
133
- bar_o = $.data($handle[0], 'bar_o');
134
-
135
- requestAnimationFrame(function () {
136
- var pct;
137
-
138
- if (Foundation.rtl && !settings.vertical) {
139
- pct = self.limit_to(((bar_o + bar_l - cursor_x) / bar_l), 0, 1);
140
- } else {
141
- pct = self.limit_to(((cursor_x - bar_o) / bar_l), 0, 1);
142
- }
143
-
144
- pct = settings.vertical ? 1 - pct : pct;
145
-
146
- var norm = self.normalized_value(pct, settings.start, settings.end, settings.step, settings.precision);
147
-
148
- self.set_ui($handle, norm);
149
- });
150
- },
151
-
152
- set_ui : function ($handle, value) {
153
- var settings = $.data($handle[0], 'settings'),
154
- handle_l = $.data($handle[0], 'handle_l'),
155
- bar_l = $.data($handle[0], 'bar_l'),
156
- norm_pct = this.normalized_percentage(value, settings.start, settings.end),
157
- handle_offset = norm_pct * (bar_l - handle_l) - 1,
158
- progress_bar_length = norm_pct * 100,
159
- $handle_parent = $handle.parent(),
160
- $hidden_inputs = $handle.parent().children('input[type=hidden]');
161
-
162
- if (Foundation.rtl && !settings.vertical) {
163
- handle_offset = -handle_offset;
164
- }
165
-
166
- handle_offset = settings.vertical ? -handle_offset + bar_l - handle_l + 1 : handle_offset;
167
- this.set_translate($handle, handle_offset, settings.vertical);
168
-
169
- if (settings.vertical) {
170
- $handle.siblings('.range-slider-active-segment').css('height', progress_bar_length + '%');
171
- } else {
172
- $handle.siblings('.range-slider-active-segment').css('width', progress_bar_length + '%');
173
- }
174
-
175
- $handle_parent.attr(this.attr_name(), value).trigger('change.fndtn.slider');
176
-
177
- $hidden_inputs.val(value);
178
- if (settings.trigger_input_change) {
179
- $hidden_inputs.trigger('change.fndtn.slider');
180
- }
181
-
182
- if (!$handle[0].hasAttribute('aria-valuemin')) {
183
- $handle.attr({
184
- 'aria-valuemin' : settings.start,
185
- 'aria-valuemax' : settings.end
186
- });
187
- }
188
- $handle.attr('aria-valuenow', value);
189
-
190
- if (settings.display_selector != '') {
191
- $(settings.display_selector).each(function () {
192
- if (this.hasAttribute('value')) {
193
- $(this).val(value);
194
- } else {
195
- $(this).text(value);
196
- }
197
- });
198
- }
199
-
200
- },
201
-
202
- normalized_percentage : function (val, start, end) {
203
- return Math.min(1, (val - start) / (end - start));
204
- },
205
-
206
- normalized_value : function (val, start, end, step, precision) {
207
- var range = end - start,
208
- point = val * range,
209
- mod = (point - (point % step)) / step,
210
- rem = point % step,
211
- round = ( rem >= step * 0.5 ? step : 0);
212
- return ((mod * step + round) + start).toFixed(precision);
213
- },
214
-
215
- set_translate : function (ele, offset, vertical) {
216
- if (vertical) {
217
- $(ele)
218
- .css('-webkit-transform', 'translateY(' + offset + 'px)')
219
- .css('-moz-transform', 'translateY(' + offset + 'px)')
220
- .css('-ms-transform', 'translateY(' + offset + 'px)')
221
- .css('-o-transform', 'translateY(' + offset + 'px)')
222
- .css('transform', 'translateY(' + offset + 'px)');
223
- } else {
224
- $(ele)
225
- .css('-webkit-transform', 'translateX(' + offset + 'px)')
226
- .css('-moz-transform', 'translateX(' + offset + 'px)')
227
- .css('-ms-transform', 'translateX(' + offset + 'px)')
228
- .css('-o-transform', 'translateX(' + offset + 'px)')
229
- .css('transform', 'translateX(' + offset + 'px)');
230
- }
231
- },
232
-
233
- limit_to : function (val, min, max) {
234
- return Math.min(Math.max(val, min), max);
235
- },
236
-
237
- initialize_settings : function (handle) {
238
- var settings = $.extend({}, this.settings, this.data_options($(handle).parent())),
239
- decimal_places_match_result;
240
-
241
- if (settings.precision === null) {
242
- decimal_places_match_result = ('' + settings.step).match(/\.([\d]*)/);
243
- settings.precision = decimal_places_match_result && decimal_places_match_result[1] ? decimal_places_match_result[1].length : 0;
244
- }
245
-
246
- if (settings.vertical) {
247
- $.data(handle, 'bar_o', $(handle).parent().offset().top);
248
- $.data(handle, 'bar_l', $(handle).parent().outerHeight());
249
- $.data(handle, 'handle_o', $(handle).offset().top);
250
- $.data(handle, 'handle_l', $(handle).outerHeight());
251
- } else {
252
- $.data(handle, 'bar_o', $(handle).parent().offset().left);
253
- $.data(handle, 'bar_l', $(handle).parent().outerWidth());
254
- $.data(handle, 'handle_o', $(handle).offset().left);
255
- $.data(handle, 'handle_l', $(handle).outerWidth());
256
- }
257
-
258
- $.data(handle, 'bar', $(handle).parent());
259
- return $.data(handle, 'settings', settings);
260
- },
261
-
262
- set_initial_position : function ($ele) {
263
- var settings = $.data($ele.children('.range-slider-handle')[0], 'settings'),
264
- initial = ((typeof settings.initial == 'number' && !isNaN(settings.initial)) ? settings.initial : Math.floor((settings.end - settings.start) * 0.5 / settings.step) * settings.step + settings.start),
265
- $handle = $ele.children('.range-slider-handle');
266
- this.set_ui($handle, initial);
267
- },
268
-
269
- set_value : function (value) {
270
- var self = this;
271
- $('[' + self.attr_name() + ']', this.scope).each(function () {
272
- $(this).attr(self.attr_name(), value);
273
- });
274
- if (!!$(this.scope).attr(self.attr_name())) {
275
- $(this.scope).attr(self.attr_name(), value);
276
- }
277
- self.reflow();
278
- },
279
-
280
- reflow : function () {
281
- var self = this;
282
- self.S('[' + this.attr_name() + ']').each(function () {
283
- var handle = $(this).children('.range-slider-handle')[0],
284
- val = $(this).attr(self.attr_name());
285
- self.initialize_settings(handle);
286
-
287
- if (val) {
288
- self.set_ui($(handle), parseFloat(val));
289
- } else {
290
- self.set_initial_position($(this));
291
- }
292
- });
293
- }
294
- };
295
-
296
- }(jQuery, window, window.document));
@@ -1,247 +0,0 @@
1
- ;(function ($, window, document, undefined) {
2
- 'use strict';
3
-
4
- Foundation.libs.tab = {
5
- name : 'tab',
6
-
7
- version : '5.5.3',
8
-
9
- settings : {
10
- active_class : 'active',
11
- callback : function () {},
12
- deep_linking : false,
13
- scroll_to_content : true,
14
- is_hover : false
15
- },
16
-
17
- default_tab_hashes : [],
18
-
19
- init : function (scope, method, options) {
20
- var self = this,
21
- S = this.S;
22
-
23
- // Store the default active tabs which will be referenced when the
24
- // location hash is absent, as in the case of navigating the tabs and
25
- // returning to the first viewing via the browser Back button.
26
- S('[' + this.attr_name() + '] > .active > a', this.scope).each(function () {
27
- self.default_tab_hashes.push(this.hash);
28
- });
29
-
30
- this.bindings(method, options);
31
- this.handle_location_hash_change();
32
- },
33
-
34
- events : function () {
35
- var self = this,
36
- S = this.S;
37
-
38
- var usual_tab_behavior = function (e, target) {
39
- var settings = S(target).closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');
40
- if (!settings.is_hover || Modernizr.touch) {
41
- // if user did not pressed tab key, prevent default action
42
- var keyCode = e.keyCode || e.which;
43
- if (keyCode !== 9) {
44
- e.preventDefault();
45
- e.stopPropagation();
46
- }
47
- self.toggle_active_tab(S(target).parent());
48
-
49
- }
50
- };
51
-
52
- S(this.scope)
53
- .off('.tab')
54
- // Key event: focus/tab key
55
- .on('keydown.fndtn.tab', '[' + this.attr_name() + '] > * > a', function(e) {
56
- var keyCode = e.keyCode || e.which;
57
- // if user pressed tab key
58
- if (keyCode === 13 || keyCode === 32) { // enter or space
59
- var el = this;
60
- usual_tab_behavior(e, el);
61
- }
62
- })
63
- // Click event: tab title
64
- .on('click.fndtn.tab', '[' + this.attr_name() + '] > * > a', function(e) {
65
- var el = this;
66
- usual_tab_behavior(e, el);
67
- })
68
- // Hover event: tab title
69
- .on('mouseenter.fndtn.tab', '[' + this.attr_name() + '] > * > a', function (e) {
70
- var settings = S(this).closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');
71
- if (settings.is_hover) {
72
- self.toggle_active_tab(S(this).parent());
73
- }
74
- });
75
-
76
- // Location hash change event
77
- S(window).on('hashchange.fndtn.tab', function (e) {
78
- e.preventDefault();
79
- self.handle_location_hash_change();
80
- });
81
- },
82
-
83
- handle_location_hash_change : function () {
84
-
85
- var self = this,
86
- S = this.S;
87
-
88
- S('[' + this.attr_name() + ']', this.scope).each(function () {
89
- var settings = S(this).data(self.attr_name(true) + '-init');
90
- if (settings.deep_linking) {
91
- // Match the location hash to a label
92
- var hash;
93
- if (settings.scroll_to_content) {
94
- hash = self.scope.location.hash;
95
- } else {
96
- // prefix the hash to prevent anchor scrolling
97
- hash = self.scope.location.hash.replace('fndtn-', '');
98
- }
99
- if (hash != '') {
100
- // Check whether the location hash references a tab content div or
101
- // another element on the page (inside or outside the tab content div)
102
- var hash_element = S(hash);
103
- if (hash_element.hasClass('content') && hash_element.parent().hasClass('tabs-content')) {
104
- // Tab content div
105
- self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=' + hash + ']').parent());
106
- } else {
107
- // Not the tab content div. If inside the tab content, find the
108
- // containing tab and toggle it as active.
109
- var hash_tab_container_id = hash_element.closest('.content').attr('id');
110
- if (hash_tab_container_id != undefined) {
111
- self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=#' + hash_tab_container_id + ']').parent(), hash);
112
- }
113
- }
114
- } else {
115
- // Reference the default tab hashes which were initialized in the init function
116
- for (var ind = 0; ind < self.default_tab_hashes.length; ind++) {
117
- self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=' + self.default_tab_hashes[ind] + ']').parent());
118
- }
119
- }
120
- }
121
- });
122
- },
123
-
124
- toggle_active_tab : function (tab, location_hash) {
125
- var self = this,
126
- S = self.S,
127
- tabs = tab.closest('[' + this.attr_name() + ']'),
128
- tab_link = tab.find('a'),
129
- anchor = tab.children('a').first(),
130
- target_hash = '#' + anchor.attr('href').split('#')[1],
131
- target = S(target_hash),
132
- siblings = tab.siblings(),
133
- settings = tabs.data(this.attr_name(true) + '-init'),
134
- interpret_keyup_action = function (e) {
135
- // Light modification of Heydon Pickering's Practical ARIA Examples: http://heydonworks.com/practical_aria_examples/js/a11y.js
136
-
137
- // define current, previous and next (possible) tabs
138
-
139
- var $original = $(this);
140
- var $prev = $(this).parents('li').prev().children('[role="tab"]');
141
- var $next = $(this).parents('li').next().children('[role="tab"]');
142
- var $target;
143
-
144
- // find the direction (prev or next)
145
-
146
- switch (e.keyCode) {
147
- case 37:
148
- $target = $prev;
149
- break;
150
- case 39:
151
- $target = $next;
152
- break;
153
- default:
154
- $target = false
155
- break;
156
- }
157
-
158
- if ($target.length) {
159
- $original.attr({
160
- 'tabindex' : '-1',
161
- 'aria-selected' : null
162
- });
163
- $target.attr({
164
- 'tabindex' : '0',
165
- 'aria-selected' : true
166
- }).focus();
167
- }
168
-
169
- // Hide panels
170
-
171
- $('[role="tabpanel"]')
172
- .attr('aria-hidden', 'true');
173
-
174
- // Show panel which corresponds to target
175
-
176
- $('#' + $(document.activeElement).attr('href').substring(1))
177
- .attr('aria-hidden', null);
178
-
179
- },
180
- go_to_hash = function(hash) {
181
- // This function allows correct behaviour of the browser's back button when deep linking is enabled. Without it
182
- // the user would get continually redirected to the default hash.
183
- var default_hash = settings.scroll_to_content ? self.default_tab_hashes[0] : 'fndtn-' + self.default_tab_hashes[0].replace('#', '');
184
-
185
- if (hash !== default_hash || window.location.hash) {
186
- window.location.hash = hash;
187
- }
188
- };
189
-
190
- // allow usage of data-tab-content attribute instead of href
191
- if (anchor.data('tab-content')) {
192
- target_hash = '#' + anchor.data('tab-content').split('#')[1];
193
- target = S(target_hash);
194
- }
195
-
196
- if (settings.deep_linking) {
197
-
198
- if (settings.scroll_to_content) {
199
-
200
- // retain current hash to scroll to content
201
- go_to_hash(location_hash || target_hash);
202
-
203
- if (location_hash == undefined || location_hash == target_hash) {
204
- tab.parent()[0].scrollIntoView();
205
- } else {
206
- S(target_hash)[0].scrollIntoView();
207
- }
208
- } else {
209
- // prefix the hashes so that the browser doesn't scroll down
210
- if (location_hash != undefined) {
211
- go_to_hash('fndtn-' + location_hash.replace('#', ''));
212
- } else {
213
- go_to_hash('fndtn-' + target_hash.replace('#', ''));
214
- }
215
- }
216
- }
217
-
218
- // WARNING: The activation and deactivation of the tab content must
219
- // occur after the deep linking in order to properly refresh the browser
220
- // window (notably in Chrome).
221
- // Clean up multiple attr instances to done once
222
- tab.addClass(settings.active_class).triggerHandler('opened');
223
- tab_link.attr({'aria-selected' : 'true', tabindex : 0});
224
- siblings.removeClass(settings.active_class)
225
- siblings.find('a').attr({'aria-selected' : 'false'/*, tabindex : -1*/});
226
- target.siblings().removeClass(settings.active_class).attr({'aria-hidden' : 'true'/*, tabindex : -1*/});
227
- target.addClass(settings.active_class).attr('aria-hidden', 'false').removeAttr('tabindex');
228
- settings.callback(tab);
229
- target.triggerHandler('toggled', [target]);
230
- tabs.triggerHandler('toggled', [tab]);
231
-
232
- tab_link.off('keydown').on('keydown', interpret_keyup_action );
233
- },
234
-
235
- data_attr : function (str) {
236
- if (this.namespace.length > 0) {
237
- return this.namespace + '-' + str;
238
- }
239
-
240
- return str;
241
- },
242
-
243
- off : function () {},
244
-
245
- reflow : function () {}
246
- };
247
- }(jQuery, window, window.document));