transit 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (186) hide show
  1. data/Gemfile +19 -11
  2. data/app/assets/images/transit/icon24x24.png +0 -0
  3. data/app/assets/images/transit/icon24x24_files.png +0 -0
  4. data/app/assets/images/transit/jplayer.swf +0 -0
  5. data/app/assets/images/transit/uploadify.swf +0 -0
  6. data/app/assets/images/transit/video_player.swf +0 -0
  7. data/app/assets/javascripts/jqtools/expose.js +224 -0
  8. data/app/assets/javascripts/jqtools/flashembed.js +300 -0
  9. data/app/assets/javascripts/jqtools/overlay.js +294 -0
  10. data/app/assets/javascripts/jqtools/scrollable.js +3 -0
  11. data/app/assets/javascripts/jqtools/scrollable/autoscroll.js +81 -0
  12. data/app/assets/javascripts/jqtools/scrollable/base.js +335 -0
  13. data/app/assets/javascripts/jqtools/scrollable/navigator.js +139 -0
  14. data/app/assets/javascripts/jqtools/validator.js +590 -0
  15. data/app/assets/javascripts/jqueryui/accordion.js +611 -0
  16. data/app/assets/javascripts/jqueryui/autocomplete.js +612 -0
  17. data/app/assets/javascripts/jqueryui/button.js +388 -0
  18. data/app/assets/javascripts/jqueryui/core.js +312 -0
  19. data/app/assets/javascripts/jqueryui/datepicker.js +1791 -0
  20. data/app/assets/javascripts/jqueryui/dialog.js +878 -0
  21. data/app/assets/javascripts/jqueryui/draggable.js +815 -0
  22. data/app/assets/javascripts/jqueryui/droppable.js +285 -0
  23. data/app/assets/javascripts/jqueryui/effects/blind.js +49 -0
  24. data/app/assets/javascripts/jqueryui/effects/bounce.js +78 -0
  25. data/app/assets/javascripts/jqueryui/effects/clip.js +54 -0
  26. data/app/assets/javascripts/jqueryui/effects/core.js +746 -0
  27. data/app/assets/javascripts/jqueryui/effects/drop.js +50 -0
  28. data/app/assets/javascripts/jqueryui/effects/explode.js +79 -0
  29. data/app/assets/javascripts/jqueryui/effects/fade.js +32 -0
  30. data/app/assets/javascripts/jqueryui/effects/fold.js +56 -0
  31. data/app/assets/javascripts/jqueryui/effects/highlight.js +50 -0
  32. data/app/assets/javascripts/jqueryui/effects/pulsate.js +51 -0
  33. data/app/assets/javascripts/jqueryui/effects/scale.js +178 -0
  34. data/app/assets/javascripts/jqueryui/effects/shake.js +57 -0
  35. data/app/assets/javascripts/jqueryui/effects/slide.js +50 -0
  36. data/app/assets/javascripts/jqueryui/effects/transfer.js +45 -0
  37. data/app/assets/javascripts/jqueryui/mouse.js +160 -0
  38. data/app/assets/javascripts/jqueryui/position.js +252 -0
  39. data/app/assets/javascripts/jqueryui/progressbar.js +109 -0
  40. data/app/assets/javascripts/jqueryui/resizable.js +814 -0
  41. data/app/assets/javascripts/jqueryui/selectable.js +266 -0
  42. data/app/assets/javascripts/jqueryui/slider.js +666 -0
  43. data/app/assets/javascripts/jqueryui/sortable.js +1077 -0
  44. data/app/assets/javascripts/jqueryui/tabs.js +758 -0
  45. data/app/assets/javascripts/jqueryui/widget.js +262 -0
  46. data/app/assets/javascripts/libs/backbone.js +1152 -0
  47. data/app/assets/javascripts/libs/cookie.js +89 -0
  48. data/app/assets/javascripts/libs/fileinput.js +130 -0
  49. data/app/assets/javascripts/libs/jplayer.js +1768 -0
  50. data/app/assets/javascripts/libs/proper.js +541 -0
  51. data/app/assets/javascripts/libs/sanitize.js +282 -0
  52. data/app/assets/javascripts/libs/selecttolist.js +75 -0
  53. data/app/assets/javascripts/libs/underscore.js +807 -0
  54. data/app/assets/javascripts/libs/uploadify.js +677 -0
  55. data/app/assets/javascripts/libs/wymeditor.js +9538 -0
  56. data/app/assets/javascripts/transit.js +4 -0
  57. data/app/assets/javascripts/transit/admin.js +22 -0
  58. data/app/assets/javascripts/transit/admin/contexts.js +52 -0
  59. data/app/assets/javascripts/transit/admin/fields.js +36 -0
  60. data/app/assets/javascripts/transit/admin/upload.js +109 -0
  61. data/app/assets/javascripts/transit/config.js.erb +101 -0
  62. data/app/assets/javascripts/transit/contexts/audio.js +39 -0
  63. data/app/assets/javascripts/transit/contexts/video.js +79 -0
  64. data/app/assets/javascripts/transit/core.js +171 -0
  65. data/app/assets/javascripts/transit/frontend.js +3 -0
  66. data/app/assets/javascripts/transit/lib/base64.js +120 -0
  67. data/app/assets/javascripts/transit/lib/editor.js +177 -0
  68. data/app/assets/javascripts/transit/views/audio_player.jst +22 -0
  69. data/app/assets/javascripts/transit/views/editor_toolbar.jst +12 -0
  70. data/app/assets/javascripts/transit/views/file_upload.jst +5 -0
  71. data/app/assets/javascripts/transit/views/video_player.jst +20 -0
  72. data/app/assets/javascripts/transit/views/wym_box.jst +4 -0
  73. data/app/assets/javascripts/transit/views/wym_iframe.jst +3 -0
  74. data/app/assets/stylesheets/transit.css.scss.erb +42 -0
  75. data/app/assets/stylesheets/transit/forms.css.scss +66 -0
  76. data/app/assets/stylesheets/transit/media/audio.css.scss +65 -0
  77. data/app/assets/stylesheets/transit/media/video.css.scss +30 -0
  78. data/app/assets/stylesheets/transit/panel.css.scss +100 -0
  79. data/app/assets/stylesheets/transit/ui.css.scss +507 -0
  80. data/app/controllers/pages_controller.rb +3 -0
  81. data/app/controllers/posts_controller.rb +3 -0
  82. data/app/controllers/transit/assets_controller.rb +38 -0
  83. data/app/controllers/transit/contexts_controller.rb +12 -9
  84. data/app/controllers/transit/pages_controller.rb +26 -0
  85. data/app/controllers/transit/posts_controller.rb +31 -0
  86. data/app/controllers/transit/topics_controller.rb +5 -0
  87. data/app/controllers/transit_controller.rb +16 -0
  88. data/app/helpers/transit/admin_helper.rb +43 -0
  89. data/app/helpers/transit/form_helper.rb +17 -0
  90. data/app/helpers/transit/package_helper.rb +41 -0
  91. data/app/helpers/transit/pagination_helper.rb +58 -0
  92. data/app/helpers/transit_helper.rb +42 -0
  93. data/app/models/comment.rb +37 -0
  94. data/app/models/contexts/audio.rb +12 -0
  95. data/app/models/{text.rb → contexts/text.rb} +0 -0
  96. data/app/models/contexts/video.rb +24 -0
  97. data/app/models/topic.rb +19 -0
  98. data/app/models/transit/asset.rb +68 -0
  99. data/{lib → app/models}/transit/context.rb +29 -0
  100. data/app/views/contexts/_text.html.erb +1 -1
  101. data/app/views/posts/index.rss.builder +18 -0
  102. data/app/views/transit/assets/_file.html.erb +4 -0
  103. data/app/views/transit/assets/_image.html.erb +13 -0
  104. data/app/views/transit/assets/create.js.erb +8 -0
  105. data/app/views/transit/assets/destroy.js.erb +3 -0
  106. data/app/views/transit/assets/manage.html.erb +20 -0
  107. data/app/views/transit/contexts/_audio.html.erb +18 -0
  108. data/app/views/transit/contexts/_text.html.erb +6 -0
  109. data/app/views/transit/contexts/_video.html.erb +13 -0
  110. data/app/views/transit/contexts/destroy.js.erb +1 -0
  111. data/app/views/transit/contexts/index.html.erb +5 -0
  112. data/app/views/transit/contexts/new.js.erb +7 -0
  113. data/app/views/transit/contexts/show.html.erb +8 -0
  114. data/app/views/transit/index.html.erb +26 -0
  115. data/app/views/transit/index.js.erb +1 -0
  116. data/app/views/transit/interface/post_panel.html.erb +96 -0
  117. data/app/views/transit/pages/_table.html.erb +7 -0
  118. data/app/views/transit/pages/edit.html.erb +17 -0
  119. data/app/views/transit/pages/index.html.erb +17 -0
  120. data/app/views/transit/pages/update.js.erb +1 -0
  121. data/app/views/transit/posts/_form.html.erb +49 -0
  122. data/app/views/transit/posts/edit.html.erb +14 -0
  123. data/app/views/transit/posts/new.html.erb +21 -0
  124. data/app/views/transit/table.html.erb +13 -0
  125. data/app/views/transit/table.js.erb +8 -0
  126. data/app/views/transit/topics/manage.html.erb +28 -0
  127. data/config/locales/en.yml +22 -0
  128. data/config/routes.rb +3 -3
  129. data/lib/transit.rb +51 -17
  130. data/lib/transit/admin.rb +85 -0
  131. data/lib/transit/builders/form_builder.rb +319 -0
  132. data/lib/transit/builders/jst_builder.rb +38 -0
  133. data/lib/transit/builders/package_builder.rb +45 -0
  134. data/lib/transit/config.rb +20 -0
  135. data/lib/transit/controller/generator.rb +42 -0
  136. data/lib/transit/controller/responder.rb +34 -0
  137. data/lib/transit/core_ext.rb +18 -0
  138. data/lib/transit/errors/resource_not_found.rb +6 -0
  139. data/lib/transit/model/assets.rb +14 -0
  140. data/lib/transit/model/attachments.rb +55 -0
  141. data/lib/transit/model/auto_increment.rb +22 -0
  142. data/lib/transit/model/base.rb +56 -0
  143. data/lib/transit/model/comments.rb +19 -0
  144. data/lib/transit/model/hooks.rb +38 -0
  145. data/lib/transit/model/owners.rb +14 -0
  146. data/lib/transit/model/paginator.rb +92 -0
  147. data/lib/transit/model/topics.rb +14 -0
  148. data/lib/transit/package/page.rb +20 -12
  149. data/lib/transit/package/post.rb +87 -33
  150. data/lib/transit/package/post/validations.rb +14 -0
  151. data/lib/transit/rails/engine.rb +29 -13
  152. data/lib/transit/rails/railtie.rb +31 -0
  153. data/lib/transit/rails/routing.rb +11 -6
  154. data/lib/transit/services.rb +13 -0
  155. data/lib/transit/services/base.rb +14 -0
  156. data/lib/transit/services/facebook.rb +13 -0
  157. data/lib/transit/services/ted.rb +10 -0
  158. data/lib/transit/services/twitter.rb +13 -0
  159. data/lib/transit/services/vimeo.rb +10 -0
  160. data/lib/transit/services/you_tube.rb +12 -0
  161. data/lib/transit/version.rb +1 -1
  162. metadata +178 -31
  163. data/app/assets/stylesheets/includes/_compat.scss +0 -24
  164. data/app/assets/stylesheets/includes/_defaults.scss +0 -99
  165. data/app/assets/stylesheets/includes/_global.scss +0 -16
  166. data/app/assets/stylesheets/includes/_imports.scss +0 -27
  167. data/app/assets/stylesheets/includes/_mixins.scss +0 -38
  168. data/app/assets/stylesheets/includes/_setup.scss +0 -85
  169. data/app/assets/stylesheets/layout.css.scss +0 -29
  170. data/app/assets/stylesheets/transit.css +0 -3
  171. data/app/controllers/application_controller.rb +0 -5
  172. data/app/controllers/transit/index_controller.rb +0 -7
  173. data/app/controllers/transit/packages_controller.rb +0 -64
  174. data/app/controllers/transit/transit_controller.rb +0 -4
  175. data/app/helpers/routing_helpers.rb +0 -7
  176. data/app/models/audio.rb +0 -4
  177. data/app/models/package_asset.rb +0 -11
  178. data/app/models/video.rb +0 -8
  179. data/app/views/contexts/_audio.html.erb +0 -1
  180. data/app/views/contexts/_video.html.erb +0 -1
  181. data/app/views/layouts/transit.html.erb +0 -31
  182. data/app/views/transit/index/index.html.erb +0 -0
  183. data/lib/transit/helpers/controller_helpers.rb +0 -40
  184. data/lib/transit/helpers/model_helpers.rb +0 -26
  185. data/lib/transit/package.rb +0 -25
  186. data/lib/transit/package/base.rb +0 -49
@@ -0,0 +1,57 @@
1
+ /*
2
+ * jQuery UI Effects Shake 1.8.13
3
+ *
4
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ * http://jquery.org/license
7
+ *
8
+ * http://docs.jquery.com/UI/Effects/Shake
9
+ *
10
+ * Depends:
11
+ * jquery.effects.core.js
12
+ */
13
+ (function( $, undefined ) {
14
+
15
+ $.effects.shake = function(o) {
16
+
17
+ return this.queue(function() {
18
+
19
+ // Create element
20
+ var el = $(this), props = ['position','top','bottom','left','right'];
21
+
22
+ // Set options
23
+ var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
24
+ var direction = o.options.direction || 'left'; // Default direction
25
+ var distance = o.options.distance || 20; // Default distance
26
+ var times = o.options.times || 3; // Default # of times
27
+ var speed = o.duration || o.options.duration || 140; // Default speed per shake
28
+
29
+ // Adjust
30
+ $.effects.save(el, props); el.show(); // Save & Show
31
+ $.effects.createWrapper(el); // Create Wrapper
32
+ var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
33
+ var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
34
+
35
+ // Animation
36
+ var animation = {}, animation1 = {}, animation2 = {};
37
+ animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
38
+ animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2;
39
+ animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2;
40
+
41
+ // Animate
42
+ el.animate(animation, speed, o.options.easing);
43
+ for (var i = 1; i < times; i++) { // Shakes
44
+ el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing);
45
+ };
46
+ el.animate(animation1, speed, o.options.easing).
47
+ animate(animation, speed / 2, o.options.easing, function(){ // Last shake
48
+ $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
49
+ if(o.callback) o.callback.apply(this, arguments); // Callback
50
+ });
51
+ el.queue('fx', function() { el.dequeue(); });
52
+ el.dequeue();
53
+ });
54
+
55
+ };
56
+
57
+ })(jQuery);
@@ -0,0 +1,50 @@
1
+ /*
2
+ * jQuery UI Effects Slide 1.8.13
3
+ *
4
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ * http://jquery.org/license
7
+ *
8
+ * http://docs.jquery.com/UI/Effects/Slide
9
+ *
10
+ * Depends:
11
+ * jquery.effects.core.js
12
+ */
13
+ (function( $, undefined ) {
14
+
15
+ $.effects.slide = function(o) {
16
+
17
+ return this.queue(function() {
18
+
19
+ // Create element
20
+ var el = $(this), props = ['position','top','bottom','left','right'];
21
+
22
+ // Set options
23
+ var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode
24
+ var direction = o.options.direction || 'left'; // Default Direction
25
+
26
+ // Adjust
27
+ $.effects.save(el, props); el.show(); // Save & Show
28
+ $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
29
+ var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
30
+ var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
31
+ var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true}));
32
+ if (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? "-" + distance : -distance) : distance); // Shift
33
+
34
+ // Animation
35
+ var animation = {};
36
+ animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
37
+
38
+ // Animate
39
+ el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
40
+ if(mode == 'hide') el.hide(); // Hide
41
+ $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
42
+ if(o.callback) o.callback.apply(this, arguments); // Callback
43
+ el.dequeue();
44
+ }});
45
+
46
+ });
47
+
48
+ };
49
+
50
+ })(jQuery);
@@ -0,0 +1,45 @@
1
+ /*
2
+ * jQuery UI Effects Transfer 1.8.13
3
+ *
4
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ * http://jquery.org/license
7
+ *
8
+ * http://docs.jquery.com/UI/Effects/Transfer
9
+ *
10
+ * Depends:
11
+ * jquery.effects.core.js
12
+ */
13
+ (function( $, undefined ) {
14
+
15
+ $.effects.transfer = function(o) {
16
+ return this.queue(function() {
17
+ var elem = $(this),
18
+ target = $(o.options.to),
19
+ endPosition = target.offset(),
20
+ animation = {
21
+ top: endPosition.top,
22
+ left: endPosition.left,
23
+ height: target.innerHeight(),
24
+ width: target.innerWidth()
25
+ },
26
+ startPosition = elem.offset(),
27
+ transfer = $('<div class="ui-effects-transfer"></div>')
28
+ .appendTo(document.body)
29
+ .addClass(o.options.className)
30
+ .css({
31
+ top: startPosition.top,
32
+ left: startPosition.left,
33
+ height: elem.innerHeight(),
34
+ width: elem.innerWidth(),
35
+ position: 'absolute'
36
+ })
37
+ .animate(animation, o.duration, o.options.easing, function() {
38
+ transfer.remove();
39
+ (o.callback && o.callback.apply(elem[0], arguments));
40
+ elem.dequeue();
41
+ });
42
+ });
43
+ };
44
+
45
+ })(jQuery);
@@ -0,0 +1,160 @@
1
+ /*!
2
+ * jQuery UI Mouse 1.8.13
3
+ *
4
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ * http://jquery.org/license
7
+ *
8
+ * http://docs.jquery.com/UI/Mouse
9
+ *
10
+ * Depends:
11
+ * jquery.ui.widget.js
12
+ */
13
+ (function( $, undefined ) {
14
+
15
+ var mouseHandled = false;
16
+ $(document).mousedown(function(e) {
17
+ mouseHandled = false;
18
+ });
19
+
20
+ $.widget("ui.mouse", {
21
+ options: {
22
+ cancel: ':input,option',
23
+ distance: 1,
24
+ delay: 0
25
+ },
26
+ _mouseInit: function() {
27
+ var self = this;
28
+
29
+ this.element
30
+ .bind('mousedown.'+this.widgetName, function(event) {
31
+ return self._mouseDown(event);
32
+ })
33
+ .bind('click.'+this.widgetName, function(event) {
34
+ if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
35
+ $.removeData(event.target, self.widgetName + '.preventClickEvent');
36
+ event.stopImmediatePropagation();
37
+ return false;
38
+ }
39
+ });
40
+
41
+ this.started = false;
42
+ },
43
+
44
+ // TODO: make sure destroying one instance of mouse doesn't mess with
45
+ // other instances of mouse
46
+ _mouseDestroy: function() {
47
+ this.element.unbind('.'+this.widgetName);
48
+ },
49
+
50
+ _mouseDown: function(event) {
51
+ // don't let more than one widget handle mouseStart
52
+ if(mouseHandled) {return};
53
+
54
+ // we may have missed mouseup (out of window)
55
+ (this._mouseStarted && this._mouseUp(event));
56
+
57
+ this._mouseDownEvent = event;
58
+
59
+ var self = this,
60
+ btnIsLeft = (event.which == 1),
61
+ elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false);
62
+ if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
63
+ return true;
64
+ }
65
+
66
+ this.mouseDelayMet = !this.options.delay;
67
+ if (!this.mouseDelayMet) {
68
+ this._mouseDelayTimer = setTimeout(function() {
69
+ self.mouseDelayMet = true;
70
+ }, this.options.delay);
71
+ }
72
+
73
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
74
+ this._mouseStarted = (this._mouseStart(event) !== false);
75
+ if (!this._mouseStarted) {
76
+ event.preventDefault();
77
+ return true;
78
+ }
79
+ }
80
+
81
+ // Click event may never have fired (Gecko & Opera)
82
+ if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
83
+ $.removeData(event.target, this.widgetName + '.preventClickEvent');
84
+ }
85
+
86
+ // these delegates are required to keep context
87
+ this._mouseMoveDelegate = function(event) {
88
+ return self._mouseMove(event);
89
+ };
90
+ this._mouseUpDelegate = function(event) {
91
+ return self._mouseUp(event);
92
+ };
93
+ $(document)
94
+ .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
95
+ .bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
96
+
97
+ event.preventDefault();
98
+
99
+ mouseHandled = true;
100
+ return true;
101
+ },
102
+
103
+ _mouseMove: function(event) {
104
+ // IE mouseup check - mouseup happened when mouse was out of window
105
+ if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
106
+ return this._mouseUp(event);
107
+ }
108
+
109
+ if (this._mouseStarted) {
110
+ this._mouseDrag(event);
111
+ return event.preventDefault();
112
+ }
113
+
114
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
115
+ this._mouseStarted =
116
+ (this._mouseStart(this._mouseDownEvent, event) !== false);
117
+ (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
118
+ }
119
+
120
+ return !this._mouseStarted;
121
+ },
122
+
123
+ _mouseUp: function(event) {
124
+ $(document)
125
+ .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
126
+ .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
127
+
128
+ if (this._mouseStarted) {
129
+ this._mouseStarted = false;
130
+
131
+ if (event.target == this._mouseDownEvent.target) {
132
+ $.data(event.target, this.widgetName + '.preventClickEvent', true);
133
+ }
134
+
135
+ this._mouseStop(event);
136
+ }
137
+
138
+ return false;
139
+ },
140
+
141
+ _mouseDistanceMet: function(event) {
142
+ return (Math.max(
143
+ Math.abs(this._mouseDownEvent.pageX - event.pageX),
144
+ Math.abs(this._mouseDownEvent.pageY - event.pageY)
145
+ ) >= this.options.distance
146
+ );
147
+ },
148
+
149
+ _mouseDelayMet: function(event) {
150
+ return this.mouseDelayMet;
151
+ },
152
+
153
+ // These are placeholder methods, to be overriden by extending plugin
154
+ _mouseStart: function(event) {},
155
+ _mouseDrag: function(event) {},
156
+ _mouseStop: function(event) {},
157
+ _mouseCapture: function(event) { return true; }
158
+ });
159
+
160
+ })(jQuery);
@@ -0,0 +1,252 @@
1
+ /*
2
+ * jQuery UI Position 1.8.13
3
+ *
4
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ * http://jquery.org/license
7
+ *
8
+ * http://docs.jquery.com/UI/Position
9
+ */
10
+ (function( $, undefined ) {
11
+
12
+ $.ui = $.ui || {};
13
+
14
+ var horizontalPositions = /left|center|right/,
15
+ verticalPositions = /top|center|bottom/,
16
+ center = "center",
17
+ _position = $.fn.position,
18
+ _offset = $.fn.offset;
19
+
20
+ $.fn.position = function( options ) {
21
+ if ( !options || !options.of ) {
22
+ return _position.apply( this, arguments );
23
+ }
24
+
25
+ // make a copy, we don't want to modify arguments
26
+ options = $.extend( {}, options );
27
+
28
+ var target = $( options.of ),
29
+ targetElem = target[0],
30
+ collision = ( options.collision || "flip" ).split( " " ),
31
+ offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ],
32
+ targetWidth,
33
+ targetHeight,
34
+ basePosition;
35
+
36
+ if ( targetElem.nodeType === 9 ) {
37
+ targetWidth = target.width();
38
+ targetHeight = target.height();
39
+ basePosition = { top: 0, left: 0 };
40
+ // TODO: use $.isWindow() in 1.9
41
+ } else if ( targetElem.setTimeout ) {
42
+ targetWidth = target.width();
43
+ targetHeight = target.height();
44
+ basePosition = { top: target.scrollTop(), left: target.scrollLeft() };
45
+ } else if ( targetElem.preventDefault ) {
46
+ // force left top to allow flipping
47
+ options.at = "left top";
48
+ targetWidth = targetHeight = 0;
49
+ basePosition = { top: options.of.pageY, left: options.of.pageX };
50
+ } else {
51
+ targetWidth = target.outerWidth();
52
+ targetHeight = target.outerHeight();
53
+ basePosition = target.offset();
54
+ }
55
+
56
+ // force my and at to have valid horizontal and veritcal positions
57
+ // if a value is missing or invalid, it will be converted to center
58
+ $.each( [ "my", "at" ], function() {
59
+ var pos = ( options[this] || "" ).split( " " );
60
+ if ( pos.length === 1) {
61
+ pos = horizontalPositions.test( pos[0] ) ?
62
+ pos.concat( [center] ) :
63
+ verticalPositions.test( pos[0] ) ?
64
+ [ center ].concat( pos ) :
65
+ [ center, center ];
66
+ }
67
+ pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center;
68
+ pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center;
69
+ options[ this ] = pos;
70
+ });
71
+
72
+ // normalize collision option
73
+ if ( collision.length === 1 ) {
74
+ collision[ 1 ] = collision[ 0 ];
75
+ }
76
+
77
+ // normalize offset option
78
+ offset[ 0 ] = parseInt( offset[0], 10 ) || 0;
79
+ if ( offset.length === 1 ) {
80
+ offset[ 1 ] = offset[ 0 ];
81
+ }
82
+ offset[ 1 ] = parseInt( offset[1], 10 ) || 0;
83
+
84
+ if ( options.at[0] === "right" ) {
85
+ basePosition.left += targetWidth;
86
+ } else if ( options.at[0] === center ) {
87
+ basePosition.left += targetWidth / 2;
88
+ }
89
+
90
+ if ( options.at[1] === "bottom" ) {
91
+ basePosition.top += targetHeight;
92
+ } else if ( options.at[1] === center ) {
93
+ basePosition.top += targetHeight / 2;
94
+ }
95
+
96
+ basePosition.left += offset[ 0 ];
97
+ basePosition.top += offset[ 1 ];
98
+
99
+ return this.each(function() {
100
+ var elem = $( this ),
101
+ elemWidth = elem.outerWidth(),
102
+ elemHeight = elem.outerHeight(),
103
+ marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0,
104
+ marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0,
105
+ collisionWidth = elemWidth + marginLeft +
106
+ ( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ),
107
+ collisionHeight = elemHeight + marginTop +
108
+ ( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ),
109
+ position = $.extend( {}, basePosition ),
110
+ collisionPosition;
111
+
112
+ if ( options.my[0] === "right" ) {
113
+ position.left -= elemWidth;
114
+ } else if ( options.my[0] === center ) {
115
+ position.left -= elemWidth / 2;
116
+ }
117
+
118
+ if ( options.my[1] === "bottom" ) {
119
+ position.top -= elemHeight;
120
+ } else if ( options.my[1] === center ) {
121
+ position.top -= elemHeight / 2;
122
+ }
123
+
124
+ // prevent fractions (see #5280)
125
+ position.left = Math.round( position.left );
126
+ position.top = Math.round( position.top );
127
+
128
+ collisionPosition = {
129
+ left: position.left - marginLeft,
130
+ top: position.top - marginTop
131
+ };
132
+
133
+ $.each( [ "left", "top" ], function( i, dir ) {
134
+ if ( $.ui.position[ collision[i] ] ) {
135
+ $.ui.position[ collision[i] ][ dir ]( position, {
136
+ targetWidth: targetWidth,
137
+ targetHeight: targetHeight,
138
+ elemWidth: elemWidth,
139
+ elemHeight: elemHeight,
140
+ collisionPosition: collisionPosition,
141
+ collisionWidth: collisionWidth,
142
+ collisionHeight: collisionHeight,
143
+ offset: offset,
144
+ my: options.my,
145
+ at: options.at
146
+ });
147
+ }
148
+ });
149
+
150
+ if ( $.fn.bgiframe ) {
151
+ elem.bgiframe();
152
+ }
153
+ elem.offset( $.extend( position, { using: options.using } ) );
154
+ });
155
+ };
156
+
157
+ $.ui.position = {
158
+ fit: {
159
+ left: function( position, data ) {
160
+ var win = $( window ),
161
+ over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft();
162
+ position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left );
163
+ },
164
+ top: function( position, data ) {
165
+ var win = $( window ),
166
+ over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop();
167
+ position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top );
168
+ }
169
+ },
170
+
171
+ flip: {
172
+ left: function( position, data ) {
173
+ if ( data.at[0] === center ) {
174
+ return;
175
+ }
176
+ var win = $( window ),
177
+ over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(),
178
+ myOffset = data.my[ 0 ] === "left" ?
179
+ -data.elemWidth :
180
+ data.my[ 0 ] === "right" ?
181
+ data.elemWidth :
182
+ 0,
183
+ atOffset = data.at[ 0 ] === "left" ?
184
+ data.targetWidth :
185
+ -data.targetWidth,
186
+ offset = -2 * data.offset[ 0 ];
187
+ position.left += data.collisionPosition.left < 0 ?
188
+ myOffset + atOffset + offset :
189
+ over > 0 ?
190
+ myOffset + atOffset + offset :
191
+ 0;
192
+ },
193
+ top: function( position, data ) {
194
+ if ( data.at[1] === center ) {
195
+ return;
196
+ }
197
+ var win = $( window ),
198
+ over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(),
199
+ myOffset = data.my[ 1 ] === "top" ?
200
+ -data.elemHeight :
201
+ data.my[ 1 ] === "bottom" ?
202
+ data.elemHeight :
203
+ 0,
204
+ atOffset = data.at[ 1 ] === "top" ?
205
+ data.targetHeight :
206
+ -data.targetHeight,
207
+ offset = -2 * data.offset[ 1 ];
208
+ position.top += data.collisionPosition.top < 0 ?
209
+ myOffset + atOffset + offset :
210
+ over > 0 ?
211
+ myOffset + atOffset + offset :
212
+ 0;
213
+ }
214
+ }
215
+ };
216
+
217
+ // offset setter from jQuery 1.4
218
+ if ( !$.offset.setOffset ) {
219
+ $.offset.setOffset = function( elem, options ) {
220
+ // set position first, in-case top/left are set even on static elem
221
+ if ( /static/.test( $.curCSS( elem, "position" ) ) ) {
222
+ elem.style.position = "relative";
223
+ }
224
+ var curElem = $( elem ),
225
+ curOffset = curElem.offset(),
226
+ curTop = parseInt( $.curCSS( elem, "top", true ), 10 ) || 0,
227
+ curLeft = parseInt( $.curCSS( elem, "left", true ), 10) || 0,
228
+ props = {
229
+ top: (options.top - curOffset.top) + curTop,
230
+ left: (options.left - curOffset.left) + curLeft
231
+ };
232
+
233
+ if ( 'using' in options ) {
234
+ options.using.call( elem, props );
235
+ } else {
236
+ curElem.css( props );
237
+ }
238
+ };
239
+
240
+ $.fn.offset = function( options ) {
241
+ var elem = this[ 0 ];
242
+ if ( !elem || !elem.ownerDocument ) { return null; }
243
+ if ( options ) {
244
+ return this.each(function() {
245
+ $.offset.setOffset( this, options );
246
+ });
247
+ }
248
+ return _offset.call( this );
249
+ };
250
+ }
251
+
252
+ }( jQuery ));