spree_suppliers 0.60.3 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- metadata +41 -215
- data/README +0 -46
- data/Rakefile +0 -137
- data/app/controllers/admin/pickup_locations_controller.rb +0 -52
- data/app/controllers/admin/pickups_controller.rb +0 -84
- data/app/controllers/admin/shipping_options_controller.rb +0 -32
- data/app/controllers/admin/supplier_taxons_controller.rb +0 -65
- data/app/controllers/admin/suppliers_controller.rb +0 -203
- data/app/controllers/admin/vendor_overview_controller.rb +0 -18
- data/app/controllers/dash/base_controller.rb +0 -10
- data/app/controllers/dash/overview_controller.rb +0 -6
- data/app/controllers/dash/pickup_locations_controller.rb +0 -27
- data/app/controllers/dash/pickups_controller.rb +0 -40
- data/app/controllers/dash/products_controller.rb +0 -15
- data/app/controllers/messages_controller.rb +0 -17
- data/app/controllers/suppliers_controller.rb +0 -19
- data/app/controllers/user_sessions_decorator.rb +0 -39
- data/app/helpers/admin/suppliers_helper.rb +0 -21
- data/app/helpers/cities_helper.rb +0 -2
- data/app/helpers/dragonfly_helper.rb +0 -16
- data/app/helpers/messages_helper.rb +0 -2
- data/app/helpers/suppliers_helper.rb +0 -16
- data/app/mailers/supplier_mailer.rb +0 -11
- data/app/models/ability_decorator.rb +0 -19
- data/app/models/delivery.rb +0 -6
- data/app/models/hour.rb +0 -4
- data/app/models/item.rb +0 -5
- data/app/models/message.rb +0 -3
- data/app/models/pickup.rb +0 -10
- data/app/models/pickup_date.rb +0 -3
- data/app/models/pickup_location.rb +0 -7
- data/app/models/supplier.rb +0 -33
- data/app/models/supplier_invoice.rb +0 -5
- data/app/views/admin/orders/index.html.erb +0 -107
- data/app/views/admin/orders/show.html.erb +0 -35
- data/app/views/admin/orders/user.html.erb +0 -19
- data/app/views/admin/pickup_locations/_pickup_location.html.erb +0 -10
- data/app/views/admin/pickup_locations/edit.html.erb +0 -44
- data/app/views/admin/pickup_locations/new.html.erb +0 -48
- data/app/views/admin/pickup_locations/show.html.erb +0 -1
- data/app/views/admin/pickups/_pickup.erb +0 -0
- data/app/views/admin/pickups/index.html.erb +0 -44
- data/app/views/admin/pickups/new.html.erb +0 -33
- data/app/views/admin/pickups/show.html.erb +0 -42
- data/app/views/admin/products/_suppliers_form.html.erb +0 -5
- data/app/views/admin/shared/_order_tabs_decide.html.erb +0 -5
- data/app/views/admin/shared/_vendor_order_tabs.html.erb +0 -39
- data/app/views/admin/shipping_options/edit.html.erb +0 -38
- data/app/views/admin/supplier_taxons/_form.html.erb +0 -23
- data/app/views/admin/supplier_taxons/_taxon_table.html.erb +0 -23
- data/app/views/admin/supplier_taxons/available.js.erb +0 -33
- data/app/views/admin/supplier_taxons/edit.html.erb +0 -11
- data/app/views/admin/supplier_taxons/remove.html.erb +0 -1
- data/app/views/admin/supplier_taxons/select.js.erb +0 -2
- data/app/views/admin/supplier_taxons/selected.html.erb +0 -51
- data/app/views/admin/suppliers/_edit_form.html.erb +0 -75
- data/app/views/admin/suppliers/_edit_hours_form.html.erb +0 -18
- data/app/views/admin/suppliers/_form.html.erb +0 -72
- data/app/views/admin/suppliers/_hours_form.html.erb +0 -11
- data/app/views/admin/suppliers/_image_form.html.erb +0 -40
- data/app/views/admin/suppliers/_supplier.html.erb +0 -37
- data/app/views/admin/suppliers/_supplier_tabs.html.erb +0 -18
- data/app/views/admin/suppliers/_suppliers_table.html.erb +0 -25
- data/app/views/admin/suppliers/_upload_image.html.erb +0 -14
- data/app/views/admin/suppliers/available.js.erb +0 -34
- data/app/views/admin/suppliers/edit.html.erb +0 -20
- data/app/views/admin/suppliers/index.html.erb +0 -102
- data/app/views/admin/suppliers/line_items.html.erb +0 -20
- data/app/views/admin/suppliers/new.html.erb +0 -22
- data/app/views/admin/suppliers/remove.html.erb +0 -1
- data/app/views/admin/suppliers/select.html.erb +0 -1
- data/app/views/admin/suppliers/selected.html.erb +0 -40
- data/app/views/admin/suppliers/show.html.erb +0 -2
- data/app/views/admin/users/_form.html.erb +0 -40
- data/app/views/admin/vendor_overview/index.html.erb +0 -1
- data/app/views/checkout/_delivery.html.erb +0 -5
- data/app/views/dash/overview/index.html.erb +0 -58
- data/app/views/dash/pickup_locations/_pickup_location.html.erb +0 -3
- data/app/views/dash/pickup_locations/new.html.erb +0 -47
- data/app/views/dash/pickups/_pickup.erb +0 -3
- data/app/views/dash/pickups/new.html.erb +0 -24
- data/app/views/dash/products/new.html.erb +0 -38
- data/app/views/layouts/admin.html.erb +0 -81
- data/app/views/messages/_message_form.html.erb +0 -17
- data/app/views/messages/create.html.erb +0 -2
- data/app/views/messages/destroy.html.erb +0 -2
- data/app/views/messages/new.html.erb +0 -2
- data/app/views/shared/_deliveries.html.erb +0 -113
- data/app/views/shared/_hours.html.erb +0 -21
- data/app/views/shared/_products_vendor.html.erb +0 -49
- data/app/views/shared/_supplier_invoices.html.erb +0 -67
- data/app/views/supplier_mailer/invoice_email.html.erb +0 -72
- data/app/views/suppliers/_supplier.html.erb +0 -7
- data/app/views/suppliers/_supplier_list.erb +0 -20
- data/app/views/suppliers/index.html.erb +0 -17
- data/app/views/suppliers/show.html.erb +0 -106
- data/app/views/suppliers/supplier_list.erb +0 -14
- data/config/initializers/dragonfly.rb +0 -8
- data/config/initializers/supplier_invoice_mailer.rb +0 -10
- data/config/locales/en-US.yml +0 -13
- data/config/routes.rb +0 -48
- data/db/migrate/20091209201716_supplier_setup.rb +0 -36
- data/db/migrate/20110922213437_create_messages.rb +0 -18
- data/db/migrate/20110928203155_create_hours.rb +0 -21
- data/db/migrate/20111006185052_create_pickups.rb +0 -17
- data/db/migrate/20111010191125_add_location_to_addresses.rb +0 -9
- data/db/migrate/20111010214313_create_pickup_dates.rb +0 -14
- data/db/migrate/20111011180211_add_supplier_id_to_user.rb +0 -9
- data/db/migrate/20111012211422_create_pickup_locations.rb +0 -21
- data/db/migrate/20111013155257_create_supplier_invoices.rb +0 -16
- data/db/migrate/20111013161225_create_items.rb +0 -18
- data/db/migrate/20111018133543_add_attributes_to_products.rb +0 -17
- data/db/migrate/20111028190454_add_attributes_to_assets.rb +0 -11
- data/db/migrate/20111029230805_create_suppliers_taxons.rb +0 -16
- data/db/migrate/20111101165933_create_deliveries.rb +0 -17
- data/db/migrate/20111108213108_create_shipping_methods_suppliers.rb +0 -16
- data/db/seeds.rb +0 -14
- data/lib/spree_suppliers.rb +0 -411
- data/lib/spree_suppliers_hooks.rb +0 -40
- data/lib/tasks/spree_suppliers.rake +0 -27
- data/public/javascripts/jquery-ui.js +0 -312
- data/public/javascripts/jquery-ui.multidatespicker.js +0 -398
- data/public/javascripts/jquery.ui.datepicker.js +0 -1791
- data/public/stylesheets/suppliers.css +0 -676
- data/spec/controllers/cities_controller_spec.rb +0 -157
- data/spec/controllers/shipping_options_controller_spec.rb +0 -12
- data/spec/helpers/cities_helper_spec.rb +0 -15
- data/spec/models/city_spec.rb +0 -5
- data/spec/models/comment_spec.rb +0 -64
- data/spec/models/item_spec.rb +0 -5
- data/spec/models/message_spec.rb +0 -5
- data/spec/models/pickup_date_spec.rb +0 -5
- data/spec/models/pickup_location_spec.rb +0 -5
- data/spec/models/pickup_spec.rb +0 -5
- data/spec/models/rating_spec.rb +0 -24
- data/spec/models/supplier_invoice_spec.rb +0 -5
- data/spec/models/supplier_spec.rb +0 -11
- data/spec/requests/cities_spec.rb +0 -11
- data/spec/routing/cities_routing_spec.rb +0 -35
- data/spec/spec.opts +0 -6
- data/spec/spec_helper.rb +0 -37
- data/spec/views/cities/edit.html.erb_spec.rb +0 -22
- data/spec/views/cities/index.html.erb_spec.rb +0 -28
- data/spec/views/cities/new.html.erb_spec.rb +0 -22
- data/spec/views/cities/show.html.erb_spec.rb +0 -21
- data/spec/views/shipping_options/edit.html.erb_spec.rb +0 -5
- 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 );
|