spree_suppliers 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. metadata +14 -182
  2. data/README.markdown +0 -84
  3. data/Rakefile +0 -137
  4. data/app/controllers/admin/pickup_locations_controller.rb +0 -52
  5. data/app/controllers/admin/pickups_controller.rb +0 -84
  6. data/app/controllers/admin/shipping_options_controller.rb +0 -32
  7. data/app/controllers/admin/supplier_taxons_controller.rb +0 -65
  8. data/app/controllers/admin/suppliers_controller.rb +0 -203
  9. data/app/controllers/admin/vendor_overview_controller.rb +0 -18
  10. data/app/controllers/dash/base_controller.rb +0 -10
  11. data/app/controllers/dash/overview_controller.rb +0 -6
  12. data/app/controllers/dash/pickup_locations_controller.rb +0 -27
  13. data/app/controllers/dash/pickups_controller.rb +0 -40
  14. data/app/controllers/dash/products_controller.rb +0 -15
  15. data/app/controllers/messages_controller.rb +0 -17
  16. data/app/controllers/suppliers_controller.rb +0 -19
  17. data/app/controllers/user_sessions_decorator.rb +0 -39
  18. data/app/helpers/admin/suppliers_helper.rb +0 -21
  19. data/app/helpers/cities_helper.rb +0 -2
  20. data/app/helpers/dragonfly_helper.rb +0 -16
  21. data/app/helpers/messages_helper.rb +0 -2
  22. data/app/helpers/suppliers_helper.rb +0 -16
  23. data/app/mailers/supplier_mailer.rb +0 -11
  24. data/app/models/ability_decorator.rb +0 -19
  25. data/app/models/delivery.rb +0 -6
  26. data/app/models/hour.rb +0 -4
  27. data/app/models/item.rb +0 -5
  28. data/app/models/message.rb +0 -3
  29. data/app/models/pickup.rb +0 -10
  30. data/app/models/pickup_date.rb +0 -3
  31. data/app/models/pickup_location.rb +0 -7
  32. data/app/models/supplier.rb +0 -33
  33. data/app/models/supplier_invoice.rb +0 -5
  34. data/app/views/admin/orders/index.html.erb +0 -107
  35. data/app/views/admin/orders/show.html.erb +0 -35
  36. data/app/views/admin/orders/user.html.erb +0 -19
  37. data/app/views/admin/pickup_locations/_pickup_location.html.erb +0 -10
  38. data/app/views/admin/pickup_locations/edit.html.erb +0 -44
  39. data/app/views/admin/pickup_locations/new.html.erb +0 -48
  40. data/app/views/admin/pickup_locations/show.html.erb +0 -1
  41. data/app/views/admin/pickups/_pickup.erb +0 -0
  42. data/app/views/admin/pickups/index.html.erb +0 -44
  43. data/app/views/admin/pickups/new.html.erb +0 -33
  44. data/app/views/admin/pickups/show.html.erb +0 -42
  45. data/app/views/admin/products/_suppliers_form.html.erb +0 -5
  46. data/app/views/admin/shared/_order_tabs_decide.html.erb +0 -5
  47. data/app/views/admin/shared/_vendor_order_tabs.html.erb +0 -39
  48. data/app/views/admin/shipping_options/edit.html.erb +0 -38
  49. data/app/views/admin/supplier_taxons/_form.html.erb +0 -23
  50. data/app/views/admin/supplier_taxons/_taxon_table.html.erb +0 -23
  51. data/app/views/admin/supplier_taxons/available.js.erb +0 -33
  52. data/app/views/admin/supplier_taxons/edit.html.erb +0 -11
  53. data/app/views/admin/supplier_taxons/remove.html.erb +0 -1
  54. data/app/views/admin/supplier_taxons/select.js.erb +0 -2
  55. data/app/views/admin/supplier_taxons/selected.html.erb +0 -51
  56. data/app/views/admin/suppliers/_edit_form.html.erb +0 -75
  57. data/app/views/admin/suppliers/_edit_hours_form.html.erb +0 -18
  58. data/app/views/admin/suppliers/_form.html.erb +0 -72
  59. data/app/views/admin/suppliers/_hours_form.html.erb +0 -11
  60. data/app/views/admin/suppliers/_image_form.html.erb +0 -40
  61. data/app/views/admin/suppliers/_supplier.html.erb +0 -37
  62. data/app/views/admin/suppliers/_supplier_tabs.html.erb +0 -18
  63. data/app/views/admin/suppliers/_suppliers_table.html.erb +0 -25
  64. data/app/views/admin/suppliers/_upload_image.html.erb +0 -14
  65. data/app/views/admin/suppliers/available.js.erb +0 -34
  66. data/app/views/admin/suppliers/edit.html.erb +0 -20
  67. data/app/views/admin/suppliers/index.html.erb +0 -102
  68. data/app/views/admin/suppliers/line_items.html.erb +0 -20
  69. data/app/views/admin/suppliers/new.html.erb +0 -22
  70. data/app/views/admin/suppliers/remove.html.erb +0 -1
  71. data/app/views/admin/suppliers/select.html.erb +0 -1
  72. data/app/views/admin/suppliers/selected.html.erb +0 -40
  73. data/app/views/admin/suppliers/show.html.erb +0 -2
  74. data/app/views/admin/users/_form.html.erb +0 -40
  75. data/app/views/admin/vendor_overview/index.html.erb +0 -1
  76. data/app/views/checkout/_delivery.html.erb +0 -5
  77. data/app/views/dash/overview/index.html.erb +0 -58
  78. data/app/views/dash/pickup_locations/_pickup_location.html.erb +0 -3
  79. data/app/views/dash/pickup_locations/new.html.erb +0 -47
  80. data/app/views/dash/pickups/_pickup.erb +0 -3
  81. data/app/views/dash/pickups/new.html.erb +0 -24
  82. data/app/views/dash/products/new.html.erb +0 -38
  83. data/app/views/layouts/admin.html.erb +0 -81
  84. data/app/views/messages/_message_form.html.erb +0 -17
  85. data/app/views/messages/create.html.erb +0 -2
  86. data/app/views/messages/destroy.html.erb +0 -2
  87. data/app/views/messages/new.html.erb +0 -2
  88. data/app/views/shared/_deliveries.html.erb +0 -113
  89. data/app/views/shared/_hours.html.erb +0 -21
  90. data/app/views/shared/_products_vendor.html.erb +0 -49
  91. data/app/views/shared/_supplier_invoices.html.erb +0 -67
  92. data/app/views/supplier_mailer/invoice_email.html.erb +0 -72
  93. data/app/views/suppliers/_supplier.html.erb +0 -7
  94. data/app/views/suppliers/_supplier_list.erb +0 -20
  95. data/app/views/suppliers/index.html.erb +0 -17
  96. data/app/views/suppliers/show.html.erb +0 -106
  97. data/app/views/suppliers/supplier_list.erb +0 -14
  98. data/config/initializers/dragonfly.rb +0 -8
  99. data/config/initializers/supplier_invoice_mailer.rb +0 -10
  100. data/config/locales/en-US.yml +0 -13
  101. data/config/routes.rb +0 -48
  102. data/db/migrate/20091209201716_supplier_setup.rb +0 -36
  103. data/db/migrate/20110922213437_create_messages.rb +0 -18
  104. data/db/migrate/20110928203155_create_hours.rb +0 -21
  105. data/db/migrate/20111006185052_create_pickups.rb +0 -17
  106. data/db/migrate/20111010191125_add_location_to_addresses.rb +0 -9
  107. data/db/migrate/20111010214313_create_pickup_dates.rb +0 -14
  108. data/db/migrate/20111011180211_add_supplier_id_to_user.rb +0 -9
  109. data/db/migrate/20111012211422_create_pickup_locations.rb +0 -21
  110. data/db/migrate/20111013155257_create_supplier_invoices.rb +0 -16
  111. data/db/migrate/20111013161225_create_items.rb +0 -18
  112. data/db/migrate/20111018133543_add_attributes_to_products.rb +0 -17
  113. data/db/migrate/20111028190454_add_attributes_to_assets.rb +0 -11
  114. data/db/migrate/20111029230805_create_suppliers_taxons.rb +0 -16
  115. data/db/migrate/20111101165933_create_deliveries.rb +0 -17
  116. data/db/migrate/20111108213108_create_shipping_methods_suppliers.rb +0 -16
  117. data/db/seeds.rb +0 -14
  118. data/lib/spree_suppliers.rb +0 -411
  119. data/lib/spree_suppliers_hooks.rb +0 -40
  120. data/lib/tasks/spree_suppliers.rake +0 -27
  121. data/public/javascripts/jquery-ui.js +0 -312
  122. data/public/javascripts/jquery-ui.multidatespicker.js +0 -398
  123. data/public/javascripts/jquery.ui.datepicker.js +0 -1791
  124. data/public/stylesheets/suppliers.css +0 -676
  125. data/spec/controllers/cities_controller_spec.rb +0 -157
  126. data/spec/controllers/shipping_options_controller_spec.rb +0 -12
  127. data/spec/helpers/cities_helper_spec.rb +0 -15
  128. data/spec/models/city_spec.rb +0 -5
  129. data/spec/models/comment_spec.rb +0 -64
  130. data/spec/models/item_spec.rb +0 -5
  131. data/spec/models/message_spec.rb +0 -5
  132. data/spec/models/pickup_date_spec.rb +0 -5
  133. data/spec/models/pickup_location_spec.rb +0 -5
  134. data/spec/models/pickup_spec.rb +0 -5
  135. data/spec/models/rating_spec.rb +0 -24
  136. data/spec/models/supplier_invoice_spec.rb +0 -5
  137. data/spec/models/supplier_spec.rb +0 -11
  138. data/spec/requests/cities_spec.rb +0 -11
  139. data/spec/routing/cities_routing_spec.rb +0 -35
  140. data/spec/spec.opts +0 -6
  141. data/spec/spec_helper.rb +0 -37
  142. data/spec/views/cities/edit.html.erb_spec.rb +0 -22
  143. data/spec/views/cities/index.html.erb_spec.rb +0 -28
  144. data/spec/views/cities/new.html.erb_spec.rb +0 -22
  145. data/spec/views/cities/show.html.erb_spec.rb +0 -21
  146. data/spec/views/shipping_options/edit.html.erb_spec.rb +0 -5
  147. data/spree_suppliers-0.60.3.gem +0 -0
  148. data/spree_suppliers.gemspec +0 -24
@@ -1,40 +0,0 @@
1
- class SuppliersHooks < Spree::ThemeSupport::HookListener
2
- insert_after :admin_tabs do
3
- %(<%= tab(:suppliers) %>)
4
- end
5
-
6
- # insert_after :admin_order_tabs do
7
- # %(<%= tab(:order_line_items) %>)
8
- # end
9
-
10
- # insert_after :admin_product_tabs do
11
- # %(<%= tab(:selected_admin_productor_vendors_url) %>)
12
- # end
13
- insert_after :admin_product_form_right ,"admin/products/suppliers_form"
14
-
15
- insert_after :admin_configuration_menu do
16
- %(<tr><td><%= link_to t("Suppliers"), admin_suppliers_url %><td><td><%= t("Suppliers_description") %></td></tr>)
17
- end
18
-
19
- # Add on_hand field to admin/products listing
20
- insert_after :admin_products_index_headers do
21
- %(<th><%= sort_link @search, :count_on_hand, t("count_on_hand") %></th>)
22
- end
23
-
24
- insert_after :admin_tabs do
25
- %(<%= tab(:pickups) %>)
26
- end
27
-
28
- insert_after :admin_inside_head do
29
- %(<%= javascript_include_tag 'jquery.ui.datepicker.js', 'jquery-ui.multidatespicker.js' %>)
30
- end
31
-
32
- insert_after :admin_inside_head do
33
- %(<%= stylesheet_link_tag 'suppliers.css' %>)
34
- end
35
-
36
- insert_after :admin_products_index_rows do
37
- %(<td><%= product.count_on_hand %></td>)
38
- end
39
-
40
- end
@@ -1,27 +0,0 @@
1
- namespace :spree_suppliers do
2
- desc "Copies all migrations and assets (NOTE: This will be obsolete with Rails 3.1)"
3
- task :install do
4
- Rake::Task['spree_suppliers:install:migrations'].invoke
5
- Rake::Task['spree_suppliers:install:assets'].invoke
6
- end
7
-
8
- namespace :install do
9
-
10
- desc "Copies all migrations (NOTE: This will be obsolete with Rails 3.1)"
11
- task :migrations do
12
- source = File.join(File.dirname(__FILE__), '..', '..', 'db')
13
- destination = File.join(Rails.root, 'db')
14
- Spree::FileUtilz.mirror_files(source, destination)
15
- end
16
-
17
- desc "Copies all assets (NOTE: This will be obsolete with Rails 3.1)"
18
- task :assets do
19
- source = File.join(File.dirname(__FILE__), '..', '..', 'public')
20
- destination = File.join(Rails.root, 'public')
21
- puts "INFO: Mirroring assets from #{source} to #{destination}"
22
- Spree::FileUtilz.mirror_files(source, destination)
23
- end
24
-
25
- end
26
-
27
- end
@@ -1,312 +0,0 @@
1
- /*!
2
- * jQuery UI 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
9
- */
10
- (function( $, undefined ) {
11
-
12
- // prevent duplicate loading
13
- // this is only a problem because we proxy existing functions
14
- // and we don't want to double proxy them
15
- $.ui = $.ui || {};
16
- if ( $.ui.version ) {
17
- return;
18
- }
19
-
20
- $.extend( $.ui, {
21
- version: "1.8.13",
22
-
23
- keyCode: {
24
- ALT: 18,
25
- BACKSPACE: 8,
26
- CAPS_LOCK: 20,
27
- COMMA: 188,
28
- COMMAND: 91,
29
- COMMAND_LEFT: 91, // COMMAND
30
- COMMAND_RIGHT: 93,
31
- CONTROL: 17,
32
- DELETE: 46,
33
- DOWN: 40,
34
- END: 35,
35
- ENTER: 13,
36
- ESCAPE: 27,
37
- HOME: 36,
38
- INSERT: 45,
39
- LEFT: 37,
40
- MENU: 93, // COMMAND_RIGHT
41
- NUMPAD_ADD: 107,
42
- NUMPAD_DECIMAL: 110,
43
- NUMPAD_DIVIDE: 111,
44
- NUMPAD_ENTER: 108,
45
- NUMPAD_MULTIPLY: 106,
46
- NUMPAD_SUBTRACT: 109,
47
- PAGE_DOWN: 34,
48
- PAGE_UP: 33,
49
- PERIOD: 190,
50
- RIGHT: 39,
51
- SHIFT: 16,
52
- SPACE: 32,
53
- TAB: 9,
54
- UP: 38,
55
- WINDOWS: 91 // COMMAND
56
- }
57
- });
58
-
59
- // plugins
60
- $.fn.extend({
61
- _focus: $.fn.focus,
62
- focus: function( delay, fn ) {
63
- return typeof delay === "number" ?
64
- this.each(function() {
65
- var elem = this;
66
- setTimeout(function() {
67
- $( elem ).focus();
68
- if ( fn ) {
69
- fn.call( elem );
70
- }
71
- }, delay );
72
- }) :
73
- this._focus.apply( this, arguments );
74
- },
75
-
76
- scrollParent: function() {
77
- var scrollParent;
78
- if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
79
- scrollParent = this.parents().filter(function() {
80
- return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
81
- }).eq(0);
82
- } else {
83
- scrollParent = this.parents().filter(function() {
84
- return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
85
- }).eq(0);
86
- }
87
-
88
- return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
89
- },
90
-
91
- zIndex: function( zIndex ) {
92
- if ( zIndex !== undefined ) {
93
- return this.css( "zIndex", zIndex );
94
- }
95
-
96
- if ( this.length ) {
97
- var elem = $( this[ 0 ] ), position, value;
98
- while ( elem.length && elem[ 0 ] !== document ) {
99
- // Ignore z-index if position is set to a value where z-index is ignored by the browser
100
- // This makes behavior of this function consistent across browsers
101
- // WebKit always returns auto if the element is positioned
102
- position = elem.css( "position" );
103
- if ( position === "absolute" || position === "relative" || position === "fixed" ) {
104
- // IE returns 0 when zIndex is not specified
105
- // other browsers return a string
106
- // we ignore the case of nested elements with an explicit value of 0
107
- // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
108
- value = parseInt( elem.css( "zIndex" ), 10 );
109
- if ( !isNaN( value ) && value !== 0 ) {
110
- return value;
111
- }
112
- }
113
- elem = elem.parent();
114
- }
115
- }
116
-
117
- return 0;
118
- },
119
-
120
- disableSelection: function() {
121
- return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
122
- ".ui-disableSelection", function( event ) {
123
- event.preventDefault();
124
- });
125
- },
126
-
127
- enableSelection: function() {
128
- return this.unbind( ".ui-disableSelection" );
129
- }
130
- });
131
-
132
- $.each( [ "Width", "Height" ], function( i, name ) {
133
- var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
134
- type = name.toLowerCase(),
135
- orig = {
136
- innerWidth: $.fn.innerWidth,
137
- innerHeight: $.fn.innerHeight,
138
- outerWidth: $.fn.outerWidth,
139
- outerHeight: $.fn.outerHeight
140
- };
141
-
142
- function reduce( elem, size, border, margin ) {
143
- $.each( side, function() {
144
- size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
145
- if ( border ) {
146
- size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
147
- }
148
- if ( margin ) {
149
- size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
150
- }
151
- });
152
- return size;
153
- }
154
-
155
- $.fn[ "inner" + name ] = function( size ) {
156
- if ( size === undefined ) {
157
- return orig[ "inner" + name ].call( this );
158
- }
159
-
160
- return this.each(function() {
161
- $( this ).css( type, reduce( this, size ) + "px" );
162
- });
163
- };
164
-
165
- $.fn[ "outer" + name] = function( size, margin ) {
166
- if ( typeof size !== "number" ) {
167
- return orig[ "outer" + name ].call( this, size );
168
- }
169
-
170
- return this.each(function() {
171
- $( this).css( type, reduce( this, size, true, margin ) + "px" );
172
- });
173
- };
174
- });
175
-
176
- // selectors
177
- function focusable( element, isTabIndexNotNaN ) {
178
- var nodeName = element.nodeName.toLowerCase();
179
- if ( "area" === nodeName ) {
180
- var map = element.parentNode,
181
- mapName = map.name,
182
- img;
183
- if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
184
- return false;
185
- }
186
- img = $( "img[usemap=#" + mapName + "]" )[0];
187
- return !!img && visible( img );
188
- }
189
- return ( /input|select|textarea|button|object/.test( nodeName )
190
- ? !element.disabled
191
- : "a" == nodeName
192
- ? element.href || isTabIndexNotNaN
193
- : isTabIndexNotNaN)
194
- // the element and all of its ancestors must be visible
195
- && visible( element );
196
- }
197
-
198
- function visible( element ) {
199
- return !$( element ).parents().andSelf().filter(function() {
200
- return $.curCSS( this, "visibility" ) === "hidden" ||
201
- $.expr.filters.hidden( this );
202
- }).length;
203
- }
204
-
205
- $.extend( $.expr[ ":" ], {
206
- data: function( elem, i, match ) {
207
- return !!$.data( elem, match[ 3 ] );
208
- },
209
-
210
- focusable: function( element ) {
211
- return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
212
- },
213
-
214
- tabbable: function( element ) {
215
- var tabIndex = $.attr( element, "tabindex" ),
216
- isTabIndexNaN = isNaN( tabIndex );
217
- return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
218
- }
219
- });
220
-
221
- // support
222
- $(function() {
223
- var body = document.body,
224
- div = body.appendChild( div = document.createElement( "div" ) );
225
-
226
- $.extend( div.style, {
227
- minHeight: "100px",
228
- height: "auto",
229
- padding: 0,
230
- borderWidth: 0
231
- });
232
-
233
- $.support.minHeight = div.offsetHeight === 100;
234
- $.support.selectstart = "onselectstart" in div;
235
-
236
- // set display to none to avoid a layout bug in IE
237
- // http://dev.jquery.com/ticket/4014
238
- body.removeChild( div ).style.display = "none";
239
- });
240
-
241
-
242
-
243
-
244
-
245
- // deprecated
246
- $.extend( $.ui, {
247
- // $.ui.plugin is deprecated. Use the proxy pattern instead.
248
- plugin: {
249
- add: function( module, option, set ) {
250
- var proto = $.ui[ module ].prototype;
251
- for ( var i in set ) {
252
- proto.plugins[ i ] = proto.plugins[ i ] || [];
253
- proto.plugins[ i ].push( [ option, set[ i ] ] );
254
- }
255
- },
256
- call: function( instance, name, args ) {
257
- var set = instance.plugins[ name ];
258
- if ( !set || !instance.element[ 0 ].parentNode ) {
259
- return;
260
- }
261
-
262
- for ( var i = 0; i < set.length; i++ ) {
263
- if ( instance.options[ set[ i ][ 0 ] ] ) {
264
- set[ i ][ 1 ].apply( instance.element, args );
265
- }
266
- }
267
- }
268
- },
269
-
270
- // will be deprecated when we switch to jQuery 1.4 - use jQuery.contains()
271
- contains: function( a, b ) {
272
- return document.compareDocumentPosition ?
273
- a.compareDocumentPosition( b ) & 16 :
274
- a !== b && a.contains( b );
275
- },
276
-
277
- // only used by resizable
278
- hasScroll: function( el, a ) {
279
-
280
- //If overflow is hidden, the element might have extra content, but the user wants to hide it
281
- if ( $( el ).css( "overflow" ) === "hidden") {
282
- return false;
283
- }
284
-
285
- var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
286
- has = false;
287
-
288
- if ( el[ scroll ] > 0 ) {
289
- return true;
290
- }
291
-
292
- // TODO: determine which cases actually cause this to happen
293
- // if the element doesn't have the scroll set, see if it's possible to
294
- // set the scroll
295
- el[ scroll ] = 1;
296
- has = ( el[ scroll ] > 0 );
297
- el[ scroll ] = 0;
298
- return has;
299
- },
300
-
301
- // these are odd functions, fix the API or move into individual plugins
302
- isOverAxis: function( x, reference, size ) {
303
- //Determines when x coordinate is over "b" element axis
304
- return ( x > reference ) && ( x < ( reference + size ) );
305
- },
306
- isOver: function( y, x, top, left, height, width ) {
307
- //Determines when x, y coordinates is over "b" element
308
- return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width );
309
- }
310
- });
311
-
312
- })( jQuery );
@@ -1,398 +0,0 @@
1
- /*
2
- * MultiDatesPicker v1.5.2
3
- * http://multidatespickr.sourceforge.net/
4
- *
5
- * Copyright 2011, Luca Lauretta
6
- * Dual licensed under the MIT or GPL version 2 licenses.
7
- */
8
- (function( $ ){
9
- $.extend($.ui, { multiDatesPicker: { version: "1.5.2" } });
10
-
11
- $.fn.multiDatesPicker = function(method) {
12
- var mdp_arguments = arguments;
13
- var ret = this;
14
- var today_date = new Date();
15
- var day_zero = new Date(0);
16
- var mdp_events = {};
17
-
18
- function removeDate(index, type) {
19
- if(!type) type = 'picked';
20
- this.multiDatesPicker.dates[type].splice(index, 1);
21
- }
22
- function addDate(date, type, no_sort) {
23
- if(!type) type = 'picked';
24
- if (methods.gotDate.call(this, date, type) === false) {
25
- this.multiDatesPicker.dates[type].push(dateConvert.call(this, date));
26
- if(!no_sort) this.multiDatesPicker.dates[type].sort(methods.compareDates);
27
- }
28
- }
29
- function sortDates(type) {
30
- if(!type) type = 'picked';
31
- this.multiDatesPicker.dates[type].sort(methods.compareDates);
32
- }
33
- function dateConvert(date, desired_type, date_format) {
34
- if(!desired_type) desired_type = 'object';
35
- if(!date_format && (typeof date == 'string')) {
36
- date_format = $(this).datepicker('option', 'dateFormat');
37
- if(!date_format) date_format = $.datepicker._defaults.dateFormat;
38
- }
39
-
40
- return methods.dateConvert.call(this, date, desired_type, date_format);
41
- }
42
-
43
- var methods = {
44
- init : function( options ) {
45
- var $this = $(this);
46
- this.multiDatesPicker.changed = false;
47
-
48
- var mdp_events = {
49
- beforeShow: function(input, inst) {
50
- this.multiDatesPicker.changed = false;
51
- if(this.multiDatesPicker.originalBeforeShow) this.multiDatesPicker.originalBeforeShow.call(this, input, inst);
52
- },
53
- onSelect : function(dateText, inst) {
54
- var $this = $(this);
55
- this.multiDatesPicker.changed = true;
56
-
57
- if (dateText) {
58
- $this.multiDatesPicker('toggleDate', dateText);
59
- var current_date = dateConvert.call(this, dateText);
60
- }
61
- var dates_picked = $this.multiDatesPicker('getDates');
62
- var datos = this.multiDatesPicker.mode.options;
63
-
64
- if (dates_picked.length > 0) {
65
- if (this.multiDatesPicker.mode.modeName == 'normal') {
66
- if (datos.pickableRange) {
67
- var min_date = methods.compareDates(dateConvert.call(this, this.multiDatesPicker.minDate, 'object'), today_date);
68
- var max_date = min_date + datos.pickableRangeDelay + pickableRange;
69
-
70
- // min
71
- var n_min_date = methods.compareDates(dateConvert.call(this, dates_picked[0], 'object'), dateConvert.call(this, min_date, 'object'));
72
-
73
- // max
74
- var n_max_date = n_min_date + datos.pickableRange;
75
-
76
- // adjust
77
- if (n_max_date > max_date) min_date = max_date - datos.pickableRange + 1;
78
- else {
79
- max_date = n_max_date;
80
- min_date = n_min_date;
81
- }
82
-
83
- // counts the number of disabled dates in the range
84
- var c_disabled;
85
- do {
86
- c_disabled = 0;
87
- for(var i in this.multiDatesPicker.dates.disabled) {
88
- var avdatei = dateConvert.call(this, this.multiDatesPicker.dates.disabled[i], 'object');
89
- if(methods.compareDates(avdatei, min_date) >= 0 &&
90
- methods.compareDates(avdatei, max_date) <= 0)
91
- c_disabled++;
92
- }
93
- max_date = max_date + c_disabled;
94
- } while(c_disabled != 0);
95
-
96
- $this.datepicker("option", "minDate", min_date);
97
- $this.datepicker("option", "maxDate", max_date);
98
- }
99
- }
100
- }
101
-
102
- if(this.tagName == 'INPUT') { // for inputs
103
- $this.val(
104
- $this.multiDatesPicker('getDates', 'string')
105
- );
106
- }
107
-
108
- if(this.multiDatesPicker.originalOnSelect && dateText)
109
- this.multiDatesPicker.originalOnSelect.call(this, dateText, inst);
110
-
111
- // thanks to bibendus83 -> http://sourceforge.net/tracker/?func=detail&atid=1495384&aid=3403159&group_id=358205
112
- if ($this.datepicker('option', 'altField') != undefined && $this.datepicker('option', 'altField') != "") {
113
- $($this.datepicker('option', 'altField')).val(
114
- $this.multiDatesPicker('getDates', 'string')
115
- );
116
- }
117
- },
118
- beforeShowDay : function(date) {
119
- var $this = $(this);
120
- var gotThisDate = $this.multiDatesPicker('gotDate', date) !== false;
121
- var highlight_class = gotThisDate
122
- ? 'ui-state-highlight'
123
- : '';
124
-
125
- var isDisabledDate = $this.multiDatesPicker('gotDate', date, 'disabled') !== false;
126
- var allSelected = this.multiDatesPicker.mode.options.maxPicks == $this.multiDatesPicker('getDates').length;
127
- var selectable_date = (isDisabledDate || (allSelected && !highlight_class))
128
- ? false
129
- : true;
130
-
131
- if(this.multiDatesPicker.originalBeforeShowDay) this.multiDatesPicker.originalBeforeShowDay.call(this, date);
132
-
133
- return [selectable_date, highlight_class];
134
- },
135
- onClose: function(dateText, inst) {
136
- if(this.tagName == 'INPUT' && this.multiDatesPicker.changed) {
137
- $(inst.dpDiv[0]).stop(false,true);
138
- setTimeout('$("#'+inst.id+'").datepicker("show")',50);
139
- }
140
- if(this.multiDatesPicker.originalOnClose) this.multiDatesPicker.originalOnClose.call(this, dateText, inst);
141
- }
142
- };
143
-
144
- if(options) {
145
- this.multiDatesPicker.originalBeforeShow = options.beforeShow;
146
- this.multiDatesPicker.originalOnSelect = options.onSelect;
147
- this.multiDatesPicker.originalBeforeShowDay = options.beforeShowDay;
148
- this.multiDatesPicker.originalOnClose = options.onClose;
149
-
150
- $this.datepicker(options);
151
-
152
- this.multiDatesPicker.minDate = $.datepicker._determineDate(this, options.minDate, day_zero);
153
- this.multiDatesPicker.firstAvailableDay = methods.compareDates(this.multiDatesPicker.minDate, day_zero);
154
-
155
- if(options.addDates) methods.addDates.call(this, options.addDates);
156
- if(options.addDisabledDates)
157
- methods.addDates.call(this, options.addDisabledDates, 'disabled');
158
-
159
- if(options.mode)
160
- methods.setMode.call(this, options.mode);
161
- } else {
162
- $this.datepicker();
163
- }
164
-
165
- $this.datepicker('option', mdp_events);
166
-
167
- if(this.tagName == 'INPUT') $this.val($this.multiDatesPicker('getDates', 'string'));
168
-
169
- // Fixes the altField filled with defaultDate by default
170
- var altFieldOption = $this.datepicker('option', 'altField');
171
- if (altFieldOption) $(altFieldOption).val($this.multiDatesPicker('getDates', 'string'));
172
- },
173
- compareDates : function(date1, date2) {
174
- var one_day = 1000*60*60*24;
175
- // return > 0 means date1 is later than date2
176
- // return == 0 means date1 is the same day as date2
177
- // return < 0 means date1 is earlier than date2
178
- return Math.ceil(date1.getTime()/one_day) - Math.ceil(date2.getTime()/one_day);
179
- },
180
- sumDays : function( date, n_days ) {
181
- var origDateType = typeof date;
182
- obj_date = dateConvert.call(this, date);
183
- obj_date.setDate(obj_date.getDate() + n_days);
184
- return dateConvert.call(this, obj_date, origDateType);
185
- },
186
- dateConvert : function( date, desired_format, dateFormat ) {
187
- if(typeof date == desired_format) return date;
188
-
189
- var $this = $(this);
190
- if(typeof date == 'undefined') date = new Date(0);
191
-
192
- if(desired_format != 'string' && desired_format != 'object')
193
- $.error('Date format "'+ desired_format +'" not supported on jQuery.multiDatesPicker');
194
-
195
- var conversion = typeof date + '->' + desired_format;
196
- if(!dateFormat) {
197
- dateFormat = $.datepicker._defaults.dateFormat;
198
-
199
- // thanks to bibendus83 -> http://sourceforge.net/tracker/index.php?func=detail&aid=3213174&group_id=358205&atid=1495382
200
- var dp_dateFormat = $this.datepicker('option', 'dateFormat');
201
- if (dp_dateFormat) {
202
- dateFormat = dp_dateFormat;
203
- }
204
- }
205
- switch(conversion) {
206
- case 'object->string':
207
- return $.datepicker.formatDate(dateFormat, date);
208
- case 'string->object':
209
- return $.datepicker.parseDate(dateFormat, date);
210
- default:
211
- $.error('Conversion "'+ conversion +'" not allowed on jQuery.multiDatesPicker');
212
- }
213
- return false;
214
- },
215
- gotDate : function( date, type ) {
216
- if(!type) type = 'picked';
217
- for(var i = 0; i < this.multiDatesPicker.dates[type].length; i++) {
218
- if(methods.compareDates(dateConvert.call(this, this.multiDatesPicker.dates[type][i]), dateConvert.call(this, date)) == 0) {
219
- return i;
220
- }
221
- }
222
- return false;
223
- },
224
- getDates : function( format, type ) {
225
- if(!type) type = 'picked';
226
- switch (format) {
227
- case 'object':
228
- return this.multiDatesPicker.dates[type];
229
- default:
230
- var o_dates = new Array();
231
- for(var i in this.multiDatesPicker.dates[type])
232
- o_dates.push(
233
- dateConvert.call(
234
- this,
235
- this.multiDatesPicker.dates[type][i],
236
- 'string'
237
- )
238
- );
239
- return o_dates;
240
- }
241
- },
242
- addDates : function( dates, type ) {
243
- if(!type) type = 'picked';
244
- switch(typeof dates) {
245
- case 'object':
246
- case 'array':
247
- if(dates.length) {
248
- for(var i in dates)
249
- addDate.call(this, dates[i], type, true);
250
- sortDates.call(this, type);
251
- break;
252
- } // else does the same as 'string'
253
- case 'string':
254
- addDate.call(this, dates, type);
255
- break;
256
- default:
257
- $.error('Date format "'+ typeof dates +'" not allowed on jQuery.multiDatesPicker');
258
- }
259
- $(this).datepicker('refresh');
260
- },
261
- removeDates : function( indexes, type ) {
262
- if(!type) type = 'picked';
263
- if(typeof indexes == 'array')
264
- for(var i in indexes) removeDate.call(this, i, type);
265
- else
266
- removeDate.call(this, indexes, type);
267
- $(this).datepicker('refresh');
268
- },
269
- resetDates : function ( type ) {
270
- if(!type) type = 'picked';
271
- this.multiDatesPicker.dates[type] = [];
272
- $(this).datepicker('refresh');
273
- },
274
- toggleDate : function( date, type ) {
275
- if(!type) type = 'picked';
276
- var index = methods.gotDate.call(this, date);
277
- var mode = this.multiDatesPicker.mode;
278
-
279
- switch(mode.modeName) {
280
- case 'daysRange':
281
- this.multiDatesPicker.dates[type] = []; // deletes all picked/disabled dates
282
- var end = mode.options.autoselectRange[1];
283
- var begin = mode.options.autoselectRange[0];
284
- if(end < begin) { // switch
285
- end = mode.options.autoselectRange[0];
286
- begin = mode.options.autoselectRange[1];
287
- }
288
- for(var i = begin; i < end; i++)
289
- methods.addDates.call(this, methods.sumDays(date, i), type);
290
- break;
291
- default:
292
- if(index === false) // adds dates
293
- methods.addDates.call(this, date, type);
294
- else // removes dates
295
- methods.removeDates.call(this, index, type);
296
- break;
297
- }
298
- },
299
- setMode : function( mode ) {
300
- this.multiDatesPicker.mode.modeName = mode.modeName;
301
- var option;
302
- switch(mode.modeName) {
303
- case 'normal':
304
- for(option in mode.options)
305
- switch(option) {
306
- case 'maxPicks':
307
- case 'minPicks':
308
- case 'pickableRange':
309
- case 'pickableRangeDelay':
310
- case 'adjustRangeToDisabled':
311
- this.multiDatesPicker.mode.options[option] = mode.options[option];
312
- break;
313
- default: $.error('Option ' + option + ' does not exist for setMode on jQuery.multiDatesPicker');
314
- }
315
- break;
316
- case 'daysRange':
317
- case 'weeksRange':
318
- var mandatory = 1;
319
- for(option in mode.options)
320
- switch(option) {
321
- case 'autoselectRange':
322
- mandatory--;
323
- case 'pickableRange':
324
- case 'pickableRangeDelay':
325
- case 'adjustRangeToDisabled':
326
- this.multiDatesPicker.mode.options[option] = mode.options[option];
327
- break;
328
- default: $.error('Option ' + option + ' does not exist for setMode on jQuery.multiDatesPicker');
329
- }
330
- if(mandatory > 0) $.error('Some mandatory options not specified!');
331
- break;
332
- }
333
-
334
- if(mode.options.pickableRange) {
335
- $(this).datepicker("option", "maxDate", mode.options.pickableRange + (mode.options.pickableRangeDelay || 0));
336
- $(this).datepicker("option", "minDate", this.multiDatesPicker.minDate);
337
- }
338
-
339
- if(mdp_events.onSelect) mdp_events.onSelect();
340
- $(this).datepicker('refresh');
341
- }
342
- };
343
-
344
- this.each(function() {
345
- if (!this.multiDatesPicker)
346
- this.multiDatesPicker = {
347
- dates: {
348
- picked: [],
349
- disabled: []
350
- },
351
- mode: {
352
- modeName: 'normal',
353
- options: {
354
- adjustRangeToDisabled: true
355
- }
356
- }
357
- };
358
-
359
- if(methods[method]) {
360
- var exec_result = methods[method].apply(this, Array.prototype.slice.call(mdp_arguments, 1));
361
- switch(method) {
362
- case 'getDates':
363
- case 'gotDate':
364
- case 'sumDays':
365
- case 'compareDates':
366
- case 'dateConvert':
367
- ret = exec_result;
368
- }
369
- return exec_result;
370
- } else if( typeof method === 'object' || ! method ) {
371
- return methods.init.apply(this, mdp_arguments);
372
- } else {
373
- $.error('Method ' + method + ' does not exist on jQuery.multiDatesPicker');
374
- }
375
- return false;
376
- });
377
-
378
- if(method != 'gotDate' && method != 'getDates') {
379
- aaaa = 1;
380
- }
381
-
382
- return ret;
383
- };
384
-
385
- var PROP_NAME = 'multiDatesPicker';
386
- var dpuuid = new Date().getTime();
387
- var instActive;
388
-
389
- $.multiDatesPicker = {version: false};
390
- //$.multiDatesPicker = new MultiDatesPicker(); // singleton instance
391
- $.multiDatesPicker.initialized = false;
392
- $.multiDatesPicker.uuid = new Date().getTime();
393
- $.multiDatesPicker.version = $.ui.multiDatesPicker.version;
394
-
395
- // Workaround for #4055
396
- // Add another global to avoid noConflict issues with inline event handlers
397
- window['DP_jQuery_' + dpuuid] = $;
398
- })( jQuery );