jqtools-rails 0.1.1

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 (31) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +11 -0
  4. data/Gemfile.lock +37 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +34 -0
  7. data/Rakefile +49 -0
  8. data/VERSION +1 -0
  9. data/jqtools-rails.gemspec +81 -0
  10. data/lib/jqtools-rails.rb +5 -0
  11. data/spec/jqtools-rails_spec.rb +7 -0
  12. data/spec/spec_helper.rb +12 -0
  13. data/vendor/assets/javascripts/dateinput/dateinput.js +791 -0
  14. data/vendor/assets/javascripts/jquery.tools.min.js +39 -0
  15. data/vendor/assets/javascripts/overlay/overlay.apple.js +155 -0
  16. data/vendor/assets/javascripts/overlay/overlay.js +293 -0
  17. data/vendor/assets/javascripts/rangeinput/rangeinput.js +471 -0
  18. data/vendor/assets/javascripts/scrollable/scrollable.autoscroll.js +96 -0
  19. data/vendor/assets/javascripts/scrollable/scrollable.js +368 -0
  20. data/vendor/assets/javascripts/scrollable/scrollable.navigator.js +134 -0
  21. data/vendor/assets/javascripts/tabs/tabs.js +319 -0
  22. data/vendor/assets/javascripts/tabs/tabs.slideshow.js +191 -0
  23. data/vendor/assets/javascripts/toolbox/toolbox.expose.js +224 -0
  24. data/vendor/assets/javascripts/toolbox/toolbox.flashembed.js +301 -0
  25. data/vendor/assets/javascripts/toolbox/toolbox.history.js +108 -0
  26. data/vendor/assets/javascripts/toolbox/toolbox.mousewheel.js +65 -0
  27. data/vendor/assets/javascripts/tooltip/tooltip.dynamic.js +154 -0
  28. data/vendor/assets/javascripts/tooltip/tooltip.js +358 -0
  29. data/vendor/assets/javascripts/tooltip/tooltip.slide.js +78 -0
  30. data/vendor/assets/javascripts/validator/validator.js +598 -0
  31. metadata +135 -0
@@ -0,0 +1,134 @@
1
+ /**
2
+ * @license
3
+ * jQuery Tools @VERSION / Scrollable Navigator
4
+ *
5
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
6
+ *
7
+ * http://flowplayer.org/tools/scrollable/navigator.html
8
+ *
9
+ * Since: September 2009
10
+ * Date: @DATE
11
+ */
12
+ (function($) {
13
+
14
+ var t = $.tools.scrollable;
15
+
16
+ t.navigator = {
17
+
18
+ conf: {
19
+ navi: '.navi',
20
+ naviItem: null,
21
+ activeClass: 'active',
22
+ indexed: false,
23
+ idPrefix: null,
24
+
25
+ // 1.2
26
+ history: false
27
+ }
28
+ };
29
+
30
+ function find(root, query) {
31
+ var el = $(query);
32
+ return el.length < 2 ? el : root.parent().find(query);
33
+ }
34
+
35
+ // jQuery plugin implementation
36
+ $.fn.navigator = function(conf) {
37
+
38
+ // configuration
39
+ if (typeof conf == 'string') { conf = {navi: conf}; }
40
+ conf = $.extend({}, t.navigator.conf, conf);
41
+
42
+ var ret;
43
+
44
+ this.each(function() {
45
+
46
+ var api = $(this).data("scrollable"),
47
+ navi = conf.navi.jquery ? conf.navi : find(api.getRoot(), conf.navi),
48
+ buttons = api.getNaviButtons(),
49
+ cls = conf.activeClass,
50
+ hashed = conf.history && !!history.pushState,
51
+ size = api.getConf().size;
52
+
53
+
54
+ // @deprecated stuff
55
+ if (api) { ret = api; }
56
+
57
+ api.getNaviButtons = function() {
58
+ return buttons.add(navi);
59
+ };
60
+
61
+
62
+ if (hashed) {
63
+ history.pushState({i: 0});
64
+
65
+ $(window).bind("popstate", function(evt) {
66
+ var s = evt.originalEvent.state;
67
+ if (s) { api.seekTo(s.i); }
68
+ });
69
+ }
70
+
71
+ function doClick(el, i, e) {
72
+ api.seekTo(i);
73
+ e.preventDefault();
74
+ if (hashed) { history.pushState({i: i}); }
75
+ }
76
+
77
+ function els() {
78
+ return navi.find(conf.naviItem || '> *');
79
+ }
80
+
81
+ function addItem(i) {
82
+
83
+ var item = $("<" + (conf.naviItem || 'a') + "/>").click(function(e) {
84
+ doClick($(this), i, e);
85
+ });
86
+
87
+ // index number / id attribute
88
+ if (i === 0) { item.addClass(cls); }
89
+ if (conf.indexed) { item.text(i + 1); }
90
+ if (conf.idPrefix) { item.attr("id", conf.idPrefix + i); }
91
+
92
+ return item.appendTo(navi);
93
+ }
94
+
95
+
96
+ // generate navigator
97
+ if (els().length) {
98
+ els().each(function(i) {
99
+ $(this).click(function(e) {
100
+ doClick($(this), i, e);
101
+ });
102
+ });
103
+
104
+ } else {
105
+ $.each(api.getItems(), function(i) {
106
+ if (i % size == 0) addItem(i);
107
+ });
108
+ }
109
+
110
+ // activate correct entry
111
+ api.onBeforeSeek(function(e, index) {
112
+ setTimeout(function() {
113
+ if (!e.isDefaultPrevented()) {
114
+ var i = index / size,
115
+ el = els().eq(i);
116
+
117
+ if (el.length) { els().removeClass(cls).eq(i).addClass(cls); }
118
+ }
119
+ }, 1);
120
+ });
121
+
122
+ // new item being added
123
+ api.onAddItem(function(e, item) {
124
+ var i = api.getItems().index(item);
125
+ if (i % size == 0) addItem(i);
126
+ });
127
+
128
+ });
129
+
130
+ return conf.api ? ret : this;
131
+
132
+ };
133
+
134
+ })(jQuery);
@@ -0,0 +1,319 @@
1
+ /**
2
+ * @license
3
+ * jQuery Tools @VERSION Tabs- The basics of UI design.
4
+ *
5
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
6
+ *
7
+ * http://flowplayer.org/tools/tabs/
8
+ *
9
+ * Since: November 2008
10
+ * Date: @DATE
11
+ */
12
+ (function($) {
13
+
14
+ // static constructs
15
+ $.tools = $.tools || {version: '@VERSION'};
16
+
17
+ $.tools.tabs = {
18
+
19
+ conf: {
20
+ tabs: 'a',
21
+ current: 'current',
22
+ onBeforeClick: null,
23
+ onClick: null,
24
+ effect: 'default',
25
+ initialIndex: 0,
26
+ event: 'click',
27
+ rotate: false,
28
+
29
+ // slide effect
30
+ slideUpSpeed: 400,
31
+ slideDownSpeed: 400,
32
+
33
+ // 1.2
34
+ history: false
35
+ },
36
+
37
+ addEffect: function(name, fn) {
38
+ effects[name] = fn;
39
+ }
40
+
41
+ };
42
+
43
+ var effects = {
44
+
45
+ // simple "toggle" effect
46
+ 'default': function(i, done) {
47
+ this.getPanes().hide().eq(i).show();
48
+ done.call();
49
+ },
50
+
51
+ /*
52
+ configuration:
53
+ - fadeOutSpeed (positive value does "crossfading")
54
+ - fadeInSpeed
55
+ */
56
+ fade: function(i, done) {
57
+
58
+ var conf = this.getConf(),
59
+ speed = conf.fadeOutSpeed,
60
+ panes = this.getPanes();
61
+
62
+ if (speed) {
63
+ panes.fadeOut(speed);
64
+ } else {
65
+ panes.hide();
66
+ }
67
+
68
+ panes.eq(i).fadeIn(conf.fadeInSpeed, done);
69
+ },
70
+
71
+ // for basic accordions
72
+ slide: function(i, done) {
73
+ var conf = this.getConf();
74
+
75
+ this.getPanes().slideUp(conf.slideUpSpeed);
76
+ this.getPanes().eq(i).slideDown(conf.slideDownSpeed, done);
77
+ },
78
+
79
+ /**
80
+ * AJAX effect
81
+ */
82
+ ajax: function(i, done) {
83
+ this.getPanes().eq(0).load(this.getTabs().eq(i).attr("href"), done);
84
+ }
85
+ };
86
+
87
+ /**
88
+ * Horizontal accordion
89
+ *
90
+ * @deprecated will be replaced with a more robust implementation
91
+ */
92
+
93
+ var
94
+ /**
95
+ * @type {Boolean}
96
+ *
97
+ * Mutex to control horizontal animation
98
+ * Disables clicking of tabs while animating
99
+ * They mess up otherwise as currentPane gets set *after* animation is done
100
+ */
101
+ animating,
102
+ /**
103
+ * @type {Number}
104
+ *
105
+ * Initial width of tab panes
106
+ */
107
+ w;
108
+
109
+ $.tools.tabs.addEffect("horizontal", function(i, done) {
110
+ if (animating) return; // don't allow other animations
111
+
112
+ var nextPane = this.getPanes().eq(i),
113
+ currentPane = this.getCurrentPane();
114
+
115
+ // store original width of a pane into memory
116
+ w || ( w = this.getPanes().eq(0).width() );
117
+ animating = true;
118
+
119
+ nextPane.show(); // hidden by default
120
+
121
+ // animate current pane's width to zero
122
+ // animate next pane's width at the same time for smooth animation
123
+ currentPane.animate({width: 0}, {
124
+ step: function(now){
125
+ nextPane.css("width", w-now);
126
+ },
127
+ complete: function(){
128
+ $(this).hide();
129
+ done.call();
130
+ animating = false;
131
+ }
132
+ });
133
+ // Dirty hack... onLoad, currentPant will be empty and nextPane will be the first pane
134
+ // If this is the case, manually run callback since the animation never occured, and reset animating
135
+ if (!currentPane.length){
136
+ done.call();
137
+ animating = false;
138
+ }
139
+ });
140
+
141
+
142
+ function Tabs(root, paneSelector, conf) {
143
+
144
+ var self = this,
145
+ trigger = root.add(this),
146
+ tabs = root.find(conf.tabs),
147
+ panes = paneSelector.jquery ? paneSelector : root.children(paneSelector),
148
+ current;
149
+
150
+
151
+ // make sure tabs and panes are found
152
+ if (!tabs.length) { tabs = root.children(); }
153
+ if (!panes.length) { panes = root.parent().find(paneSelector); }
154
+ if (!panes.length) { panes = $(paneSelector); }
155
+
156
+
157
+ // public methods
158
+ $.extend(this, {
159
+ click: function(i, e) {
160
+
161
+ var tab = tabs.eq(i);
162
+
163
+ if (typeof i == 'string' && i.replace("#", "")) {
164
+ tab = tabs.filter("[href*=" + i.replace("#", "") + "]");
165
+ i = Math.max(tabs.index(tab), 0);
166
+ }
167
+
168
+ if (conf.rotate) {
169
+ var last = tabs.length -1;
170
+ if (i < 0) { return self.click(last, e); }
171
+ if (i > last) { return self.click(0, e); }
172
+ }
173
+
174
+ if (!tab.length) {
175
+ if (current >= 0) { return self; }
176
+ i = conf.initialIndex;
177
+ tab = tabs.eq(i);
178
+ }
179
+
180
+ // current tab is being clicked
181
+ if (i === current) { return self; }
182
+
183
+ // possibility to cancel click action
184
+ e = e || $.Event();
185
+ e.type = "onBeforeClick";
186
+ trigger.trigger(e, [i]);
187
+ if (e.isDefaultPrevented()) { return; }
188
+
189
+ // call the effect
190
+ effects[conf.effect].call(self, i, function() {
191
+ current = i;
192
+ // onClick callback
193
+ e.type = "onClick";
194
+ trigger.trigger(e, [i]);
195
+ });
196
+
197
+ // default behaviour
198
+ tabs.removeClass(conf.current);
199
+ tab.addClass(conf.current);
200
+
201
+ return self;
202
+ },
203
+
204
+ getConf: function() {
205
+ return conf;
206
+ },
207
+
208
+ getTabs: function() {
209
+ return tabs;
210
+ },
211
+
212
+ getPanes: function() {
213
+ return panes;
214
+ },
215
+
216
+ getCurrentPane: function() {
217
+ return panes.eq(current);
218
+ },
219
+
220
+ getCurrentTab: function() {
221
+ return tabs.eq(current);
222
+ },
223
+
224
+ getIndex: function() {
225
+ return current;
226
+ },
227
+
228
+ next: function() {
229
+ return self.click(current + 1);
230
+ },
231
+
232
+ prev: function() {
233
+ return self.click(current - 1);
234
+ },
235
+
236
+ destroy: function() {
237
+ tabs.unbind(conf.event).removeClass(conf.current);
238
+ panes.find("a[href^=#]").unbind("click.T");
239
+ return self;
240
+ }
241
+
242
+ });
243
+
244
+ // callbacks
245
+ $.each("onBeforeClick,onClick".split(","), function(i, name) {
246
+
247
+ // configuration
248
+ if ($.isFunction(conf[name])) {
249
+ $(self).bind(name, conf[name]);
250
+ }
251
+
252
+ // API
253
+ self[name] = function(fn) {
254
+ if (fn) { $(self).bind(name, fn); }
255
+ return self;
256
+ };
257
+ });
258
+
259
+
260
+ if (conf.history && $.fn.history) {
261
+ $.tools.history.init(tabs);
262
+ conf.event = 'history';
263
+ }
264
+
265
+ // setup click actions for each tab
266
+ tabs.each(function(i) {
267
+ $(this).bind(conf.event, function(e) {
268
+ self.click(i, e);
269
+ return e.preventDefault();
270
+ });
271
+ });
272
+
273
+ // cross tab anchor link
274
+ panes.find("a[href^=#]").bind("click.T", function(e) {
275
+ self.click($(this).attr("href"), e);
276
+ });
277
+
278
+ // open initial tab
279
+ if (location.hash && conf.tabs == "a" && root.find("[href=" +location.hash+ "]").length) {
280
+ self.click(location.hash);
281
+
282
+ } else {
283
+ if (conf.initialIndex === 0 || conf.initialIndex > 0) {
284
+ self.click(conf.initialIndex);
285
+ }
286
+ }
287
+
288
+ }
289
+
290
+
291
+ // jQuery plugin implementation
292
+ $.fn.tabs = function(paneSelector, conf) {
293
+
294
+ // return existing instance
295
+ var el = this.data("tabs");
296
+ if (el) {
297
+ el.destroy();
298
+ this.removeData("tabs");
299
+ }
300
+
301
+ if ($.isFunction(conf)) {
302
+ conf = {onBeforeClick: conf};
303
+ }
304
+
305
+ // setup conf
306
+ conf = $.extend({}, $.tools.tabs.conf, conf);
307
+
308
+
309
+ this.each(function() {
310
+ el = new Tabs($(this), paneSelector, conf);
311
+ $(this).data("tabs", el);
312
+ });
313
+
314
+ return conf.api ? el: this;
315
+ };
316
+
317
+ }) (jQuery);
318
+
319
+