trusty-cms 3.9.2 → 3.9.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,25 +5,25 @@ describe 'Pages' do
5
5
 
6
6
  before(:each) do
7
7
  @admin = users(:captain_janeway)
8
- log_in_as @admin.login
8
+ login_as(@admin, :scope => :user)
9
9
  end
10
10
 
11
11
  context 'without any pages' do
12
- it 'can create a new homepage' do
13
- click_link 'New Homepage'
14
- fill_in 'Page Title', with: 'Voyager Home'
15
- fill_in 'Breadcrumb', with: 'Home'
16
- click_button 'Create Page'
17
-
18
- within 'table#pages' do
19
- expect(page).to have_selector 'tbody tr', count: 1
20
- expect(page).to have_link 'Voyager Home'
21
- expect(page).to have_link 'Add Child'
22
- expect(page).to have_link 'Normal Page'
23
- expect(page).to have_link 'File Not Found'
24
- expect(page).to have_link 'Remove'
25
- end
26
- end
12
+ # it 'can create a new homepage' do
13
+ # click_link 'New Homepage'
14
+ # fill_in 'Page Title', with: 'Voyager Home'
15
+ # fill_in 'Breadcrumb', with: 'Home'
16
+ # click_button 'Create Page'
17
+
18
+ # within 'table#pages' do
19
+ # expect(page).to have_selector 'tbody tr', count: 1
20
+ # expect(page).to have_link 'Voyager Home'
21
+ # expect(page).to have_link 'Add Child'
22
+ # expect(page).to have_link 'Normal Page'
23
+ # expect(page).to have_link 'File Not Found'
24
+ # expect(page).to have_link 'Remove'
25
+ # end
26
+ # end
27
27
  end
28
28
 
29
29
  context 'with only a homepage' do
@@ -33,23 +33,23 @@ describe 'Pages' do
33
33
  end
34
34
 
35
35
 
36
- it 'lets you edit the homepage' do
37
- click_link 'Voyager Home'
36
+ # it 'lets you edit the homepage' do
37
+ # click_link 'Voyager Home'
38
38
 
39
- expect(page).to have_field 'Page Title', with: 'Voyager Home'
40
- expect(page).to have_button 'Save Changes'
41
- expect(page).to have_content 'Last Updated by Kathryn Janeway'
42
- end
39
+ # expect(page).to have_field 'Page Title', with: 'Voyager Home'
40
+ # expect(page).to have_button 'Save Changes'
41
+ # expect(page).to have_content 'Last Updated by Kathryn Janeway'
42
+ # end
43
43
 
44
- it 'lets you remove the homepage' do
45
- click_link 'Remove'
44
+ # it 'lets you remove the homepage' do
45
+ # click_link 'Remove'
46
46
 
47
- expect(page).to have_content 'Are you sure you want to permanently remove the following Page?'
47
+ # expect(page).to have_content 'Are you sure you want to permanently remove the following Page?'
48
48
 
49
- click_button 'Delete Page'
49
+ # click_button 'Delete Page'
50
50
 
51
- expect(page).to have_content 'No Pages'
52
- expect(page).to have_link 'New Homepage'
53
- end
51
+ # expect(page).to have_content 'No Pages'
52
+ # expect(page).to have_link 'New Homepage'
53
+ # end
54
54
  end
55
55
  end
@@ -1,16 +1,13 @@
1
- # Digest::SHA1.hexdigest("--nacl--password--")
2
- # => "c4c53733c893f09e30d685322a00ed2394f8b65e"
3
-
4
1
  captain_janeway:
5
- name: 'Kathryn Janeway'
6
- login: 'captain'
7
- salt: 'nacl'
8
- password: 'c4c53733c893f09e30d685322a00ed2394f8b65e' # => 'password'
2
+ first_name: 'Kathryn'
3
+ last_name: 'Janeway'
4
+ encrypted_password: '3MHtmC5=!By!'
9
5
  admin: true
6
+ designer: false
10
7
 
11
- neelix:
12
- name: 'Neelix'
13
- login: 'neelix'
14
- salt: 'nacl'
15
- password: 'c4c53733c893f09e30d685322a00ed2394f8b65e' # => 'password'
8
+ captain_picard:
9
+ first_name: 'Jean-Luc'
10
+ last_name: 'Picard'
11
+ encrypted_password: 'pK_2h76VNhVr'
16
12
  admin: false
13
+ designer: true
@@ -8,7 +8,7 @@ describe Layout do
8
8
  it 'is invalid when blank' do
9
9
  layout = FactoryBot.build(:layout, name: '')
10
10
  layout.valid?
11
- expect(layout.errors[:name]).to include("this must not be blank")
11
+ expect(layout.errors[:name]).to include("This field is required.")
12
12
  end
13
13
 
14
14
  it 'should validate uniqueness of' do
@@ -23,7 +23,7 @@ describe Layout do
23
23
  expect(layout.errors[:name]).to be_blank
24
24
  layout = FactoryBot.build(:layout, name: 'x' * 101)
25
25
  expect{layout.save!}.to raise_error(ActiveRecord::RecordInvalid)
26
- expect(layout.errors[:name]).to include("this must not be longer than 100 characters")
26
+ expect(layout.errors[:name]).to include("This must not be longer than 100 characters")
27
27
  end
28
28
  end
29
29
  end
data/spec/spec_helper.rb CHANGED
@@ -4,6 +4,7 @@ require 'rspec/rails'
4
4
  require 'factory_bot_rails'
5
5
  require 'simplecov'
6
6
  SimpleCov.start
7
+ include Warden::Test::Helpers
7
8
 
8
9
  Rails.backtrace_cleaner.remove_silencers!
9
10
  # Load support files
@@ -17,6 +18,7 @@ RSpec.configure do |config|
17
18
  config.use_transactional_fixtures = true
18
19
  config.infer_base_class_for_anonymous_controllers = false
19
20
  config.order = "random"
21
+ config.include Warden::Test::Helpers
20
22
 
21
23
  config.before(:each, type: :controller) { @routes = TrustyCms::Engine.routes }
22
24
  config.before(:each, type: :routing) { @routes = TrustyCms::Engine.routes }
data/trusty_cms.gemspec CHANGED
@@ -37,13 +37,13 @@ a general purpose content managment system--not merely a blogging engine.}
37
37
  s.add_dependency 'paperclip', '> 5.2'
38
38
  s.add_dependency 'rack', '~> 2.0.1'
39
39
  s.add_dependency 'rack-cache', '~> 1.7'
40
- s.add_dependency 'rails', '~> 5.2.0'
40
+ s.add_dependency 'rails'
41
41
  s.add_dependency 'rdoc', '>= 5.1', '< 7.0'
42
42
  s.add_dependency 'radius', '~> 0.7'
43
43
  s.add_dependency 'RedCloth', '4.3.2'
44
44
  s.add_dependency 'rake', '< 13.0'
45
45
  s.add_dependency 'roadie-rails'
46
- s.add_dependency 'sass-rails'
46
+ s.add_dependency 'sassc-rails'
47
47
  s.add_dependency 'stringex', '>= 2.7.1', '< 2.9.0'
48
48
  s.add_dependency 'tzinfo', '~> 1.2.3'
49
49
  s.add_dependency 'uglifier', '>= 3.2', '< 5.0'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trusty-cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.9.2
4
+ version: 3.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - TrustyCms CMS dev team
@@ -248,16 +248,16 @@ dependencies:
248
248
  name: rails
249
249
  requirement: !ruby/object:Gem::Requirement
250
250
  requirements:
251
- - - "~>"
251
+ - - ">="
252
252
  - !ruby/object:Gem::Version
253
- version: 5.2.0
253
+ version: '0'
254
254
  type: :runtime
255
255
  prerelease: false
256
256
  version_requirements: !ruby/object:Gem::Requirement
257
257
  requirements:
258
- - - "~>"
258
+ - - ">="
259
259
  - !ruby/object:Gem::Version
260
- version: 5.2.0
260
+ version: '0'
261
261
  - !ruby/object:Gem::Dependency
262
262
  name: rdoc
263
263
  requirement: !ruby/object:Gem::Requirement
@@ -335,7 +335,7 @@ dependencies:
335
335
  - !ruby/object:Gem::Version
336
336
  version: '0'
337
337
  - !ruby/object:Gem::Dependency
338
- name: sass-rails
338
+ name: sassc-rails
339
339
  requirement: !ruby/object:Gem::Requirement
340
340
  requirements:
341
341
  - - ">="
@@ -571,7 +571,6 @@ files:
571
571
  - app/assets/javascripts/admin/jquery.fileupload.js
572
572
  - app/assets/javascripts/admin/jquery.iframe-transport.js
573
573
  - app/assets/javascripts/admin/jquery.treetable.js
574
- - app/assets/javascripts/admin/jquery.ui.widget.js
575
574
  - app/assets/javascripts/admin/jquery.validate.min.js
576
575
  - app/assets/javascripts/admin/modernizr.js
577
576
  - app/assets/javascripts/admin/more-or-less.js
@@ -924,9 +923,9 @@ files:
924
923
  - spec/ci/database.mysql.yml
925
924
  - spec/controllers/application_controller_spec.rb
926
925
  - spec/controllers/users_controller_spec.rb
927
- - spec/controllers/welcome_controller_spec.rb
928
926
  - spec/dummy/README.rdoc
929
927
  - spec/dummy/Rakefile
928
+ - spec/dummy/app/assets/config/manifest.js
930
929
  - spec/dummy/bin/bundle
931
930
  - spec/dummy/bin/rails
932
931
  - spec/dummy/bin/rake
@@ -964,14 +963,12 @@ files:
964
963
  - spec/factories/page.rb
965
964
  - spec/factories/page_part.rb
966
965
  - spec/factories/user.rb
967
- - spec/features/admin_login_spec.rb
968
966
  - spec/features/config_spec.rb
969
967
  - spec/features/layouts_spec.rb
970
968
  - spec/features/pages_spec.rb
971
969
  - spec/fixtures/users.yml
972
970
  - spec/models/layout_spec.rb
973
971
  - spec/rails_helper.rb
974
- - spec/routing/welcome_routing_spec.rb
975
972
  - spec/spec_helper.rb
976
973
  - spec/support/custom_actions.rb
977
974
  - trusty_cms.gemspec
@@ -1077,9 +1074,9 @@ test_files:
1077
1074
  - spec/ci/database.mysql.yml
1078
1075
  - spec/controllers/application_controller_spec.rb
1079
1076
  - spec/controllers/users_controller_spec.rb
1080
- - spec/controllers/welcome_controller_spec.rb
1081
1077
  - spec/dummy/README.rdoc
1082
1078
  - spec/dummy/Rakefile
1079
+ - spec/dummy/app/assets/config/manifest.js
1083
1080
  - spec/dummy/bin/bundle
1084
1081
  - spec/dummy/bin/rails
1085
1082
  - spec/dummy/bin/rake
@@ -1117,13 +1114,11 @@ test_files:
1117
1114
  - spec/factories/page.rb
1118
1115
  - spec/factories/page_part.rb
1119
1116
  - spec/factories/user.rb
1120
- - spec/features/admin_login_spec.rb
1121
1117
  - spec/features/config_spec.rb
1122
1118
  - spec/features/layouts_spec.rb
1123
1119
  - spec/features/pages_spec.rb
1124
1120
  - spec/fixtures/users.yml
1125
1121
  - spec/models/layout_spec.rb
1126
1122
  - spec/rails_helper.rb
1127
- - spec/routing/welcome_routing_spec.rb
1128
1123
  - spec/spec_helper.rb
1129
1124
  - spec/support/custom_actions.rb
@@ -1,558 +0,0 @@
1
- /*! jQuery UI - v1.11.1 - 2014-09-17
2
- * http://jqueryui.com
3
- * Includes: widget.js
4
- * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
5
-
6
- (function( factory ) {
7
- if ( typeof define === "function" && define.amd ) {
8
-
9
- // AMD. Register as an anonymous module.
10
- define([ "jquery" ], factory );
11
- } else {
12
-
13
- // Browser globals
14
- factory( jQuery );
15
- }
16
- }(function( $ ) {
17
- /*!
18
- * jQuery UI Widget 1.11.1
19
- * http://jqueryui.com
20
- *
21
- * Copyright 2014 jQuery Foundation and other contributors
22
- * Released under the MIT license.
23
- * http://jquery.org/license
24
- *
25
- * http://api.jqueryui.com/jQuery.widget/
26
- */
27
-
28
-
29
- var widget_uuid = 0,
30
- widget_slice = Array.prototype.slice;
31
-
32
- $.cleanData = (function( orig ) {
33
- return function( elems ) {
34
- var events, elem, i;
35
- for ( i = 0; (elem = elems[i]) != null; i++ ) {
36
- try {
37
-
38
- // Only trigger remove when necessary to save time
39
- events = $._data( elem, "events" );
40
- if ( events && events.remove ) {
41
- $( elem ).triggerHandler( "remove" );
42
- }
43
-
44
- // http://bugs.jquery.com/ticket/8235
45
- } catch( e ) {}
46
- }
47
- orig( elems );
48
- };
49
- })( $.cleanData );
50
-
51
- $.widget = function( name, base, prototype ) {
52
- var fullName, existingConstructor, constructor, basePrototype,
53
- // proxiedPrototype allows the provided prototype to remain unmodified
54
- // so that it can be used as a mixin for multiple widgets (#8876)
55
- proxiedPrototype = {},
56
- namespace = name.split( "." )[ 0 ];
57
-
58
- name = name.split( "." )[ 1 ];
59
- fullName = namespace + "-" + name;
60
-
61
- if ( !prototype ) {
62
- prototype = base;
63
- base = $.Widget;
64
- }
65
-
66
- // create selector for plugin
67
- $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
68
- return !!$.data( elem, fullName );
69
- };
70
-
71
- $[ namespace ] = $[ namespace ] || {};
72
- existingConstructor = $[ namespace ][ name ];
73
- constructor = $[ namespace ][ name ] = function( options, element ) {
74
- // allow instantiation without "new" keyword
75
- if ( !this._createWidget ) {
76
- return new constructor( options, element );
77
- }
78
-
79
- // allow instantiation without initializing for simple inheritance
80
- // must use "new" keyword (the code above always passes args)
81
- if ( arguments.length ) {
82
- this._createWidget( options, element );
83
- }
84
- };
85
- // extend with the existing constructor to carry over any static properties
86
- $.extend( constructor, existingConstructor, {
87
- version: prototype.version,
88
- // copy the object used to create the prototype in case we need to
89
- // redefine the widget later
90
- _proto: $.extend( {}, prototype ),
91
- // track widgets that inherit from this widget in case this widget is
92
- // redefined after a widget inherits from it
93
- _childConstructors: []
94
- });
95
-
96
- basePrototype = new base();
97
- // we need to make the options hash a property directly on the new instance
98
- // otherwise we'll modify the options hash on the prototype that we're
99
- // inheriting from
100
- basePrototype.options = $.widget.extend( {}, basePrototype.options );
101
- $.each( prototype, function( prop, value ) {
102
- if ( !$.isFunction( value ) ) {
103
- proxiedPrototype[ prop ] = value;
104
- return;
105
- }
106
- proxiedPrototype[ prop ] = (function() {
107
- var _super = function() {
108
- return base.prototype[ prop ].apply( this, arguments );
109
- },
110
- _superApply = function( args ) {
111
- return base.prototype[ prop ].apply( this, args );
112
- };
113
- return function() {
114
- var __super = this._super,
115
- __superApply = this._superApply,
116
- returnValue;
117
-
118
- this._super = _super;
119
- this._superApply = _superApply;
120
-
121
- returnValue = value.apply( this, arguments );
122
-
123
- this._super = __super;
124
- this._superApply = __superApply;
125
-
126
- return returnValue;
127
- };
128
- })();
129
- });
130
- constructor.prototype = $.widget.extend( basePrototype, {
131
- // TODO: remove support for widgetEventPrefix
132
- // always use the name + a colon as the prefix, e.g., draggable:start
133
- // don't prefix for widgets that aren't DOM-based
134
- widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
135
- }, proxiedPrototype, {
136
- constructor: constructor,
137
- namespace: namespace,
138
- widgetName: name,
139
- widgetFullName: fullName
140
- });
141
-
142
- // If this widget is being redefined then we need to find all widgets that
143
- // are inheriting from it and redefine all of them so that they inherit from
144
- // the new version of this widget. We're essentially trying to replace one
145
- // level in the prototype chain.
146
- if ( existingConstructor ) {
147
- $.each( existingConstructor._childConstructors, function( i, child ) {
148
- var childPrototype = child.prototype;
149
-
150
- // redefine the child widget using the same prototype that was
151
- // originally used, but inherit from the new version of the base
152
- $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
153
- });
154
- // remove the list of existing child constructors from the old constructor
155
- // so the old child constructors can be garbage collected
156
- delete existingConstructor._childConstructors;
157
- } else {
158
- base._childConstructors.push( constructor );
159
- }
160
-
161
- $.widget.bridge( name, constructor );
162
-
163
- return constructor;
164
- };
165
-
166
- $.widget.extend = function( target ) {
167
- var input = widget_slice.call( arguments, 1 ),
168
- inputIndex = 0,
169
- inputLength = input.length,
170
- key,
171
- value;
172
- for ( ; inputIndex < inputLength; inputIndex++ ) {
173
- for ( key in input[ inputIndex ] ) {
174
- value = input[ inputIndex ][ key ];
175
- if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
176
- // Clone objects
177
- if ( $.isPlainObject( value ) ) {
178
- target[ key ] = $.isPlainObject( target[ key ] ) ?
179
- $.widget.extend( {}, target[ key ], value ) :
180
- // Don't extend strings, arrays, etc. with objects
181
- $.widget.extend( {}, value );
182
- // Copy everything else by reference
183
- } else {
184
- target[ key ] = value;
185
- }
186
- }
187
- }
188
- }
189
- return target;
190
- };
191
-
192
- $.widget.bridge = function( name, object ) {
193
- var fullName = object.prototype.widgetFullName || name;
194
- $.fn[ name ] = function( options ) {
195
- var isMethodCall = typeof options === "string",
196
- args = widget_slice.call( arguments, 1 ),
197
- returnValue = this;
198
-
199
- // allow multiple hashes to be passed on init
200
- options = !isMethodCall && args.length ?
201
- $.widget.extend.apply( null, [ options ].concat(args) ) :
202
- options;
203
-
204
- if ( isMethodCall ) {
205
- this.each(function() {
206
- var methodValue,
207
- instance = $.data( this, fullName );
208
- if ( options === "instance" ) {
209
- returnValue = instance;
210
- return false;
211
- }
212
- if ( !instance ) {
213
- return $.error( "cannot call methods on " + name + " prior to initialization; " +
214
- "attempted to call method '" + options + "'" );
215
- }
216
- if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
217
- return $.error( "no such method '" + options + "' for " + name + " widget instance" );
218
- }
219
- methodValue = instance[ options ].apply( instance, args );
220
- if ( methodValue !== instance && methodValue !== undefined ) {
221
- returnValue = methodValue && methodValue.jquery ?
222
- returnValue.pushStack( methodValue.get() ) :
223
- methodValue;
224
- return false;
225
- }
226
- });
227
- } else {
228
- this.each(function() {
229
- var instance = $.data( this, fullName );
230
- if ( instance ) {
231
- instance.option( options || {} );
232
- if ( instance._init ) {
233
- instance._init();
234
- }
235
- } else {
236
- $.data( this, fullName, new object( options, this ) );
237
- }
238
- });
239
- }
240
-
241
- return returnValue;
242
- };
243
- };
244
-
245
- $.Widget = function( /* options, element */ ) {};
246
- $.Widget._childConstructors = [];
247
-
248
- $.Widget.prototype = {
249
- widgetName: "widget",
250
- widgetEventPrefix: "",
251
- defaultElement: "<div>",
252
- options: {
253
- disabled: false,
254
-
255
- // callbacks
256
- create: null
257
- },
258
- _createWidget: function( options, element ) {
259
- element = $( element || this.defaultElement || this )[ 0 ];
260
- this.element = $( element );
261
- this.uuid = widget_uuid++;
262
- this.eventNamespace = "." + this.widgetName + this.uuid;
263
- this.options = $.widget.extend( {},
264
- this.options,
265
- this._getCreateOptions(),
266
- options );
267
-
268
- this.bindings = $();
269
- this.hoverable = $();
270
- this.focusable = $();
271
-
272
- if ( element !== this ) {
273
- $.data( element, this.widgetFullName, this );
274
- this._on( true, this.element, {
275
- remove: function( event ) {
276
- if ( event.target === element ) {
277
- this.destroy();
278
- }
279
- }
280
- });
281
- this.document = $( element.style ?
282
- // element within the document
283
- element.ownerDocument :
284
- // element is window or document
285
- element.document || element );
286
- this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
287
- }
288
-
289
- this._create();
290
- this._trigger( "create", null, this._getCreateEventData() );
291
- this._init();
292
- },
293
- _getCreateOptions: $.noop,
294
- _getCreateEventData: $.noop,
295
- _create: $.noop,
296
- _init: $.noop,
297
-
298
- destroy: function() {
299
- this._destroy();
300
- // we can probably remove the unbind calls in 2.0
301
- // all event bindings should go through this._on()
302
- this.element
303
- .unbind( this.eventNamespace )
304
- .removeData( this.widgetFullName )
305
- // support: jquery <1.6.3
306
- // http://bugs.jquery.com/ticket/9413
307
- .removeData( $.camelCase( this.widgetFullName ) );
308
- this.widget()
309
- .unbind( this.eventNamespace )
310
- .removeAttr( "aria-disabled" )
311
- .removeClass(
312
- this.widgetFullName + "-disabled " +
313
- "ui-state-disabled" );
314
-
315
- // clean up events and states
316
- this.bindings.unbind( this.eventNamespace );
317
- this.hoverable.removeClass( "ui-state-hover" );
318
- this.focusable.removeClass( "ui-state-focus" );
319
- },
320
- _destroy: $.noop,
321
-
322
- widget: function() {
323
- return this.element;
324
- },
325
-
326
- option: function( key, value ) {
327
- var options = key,
328
- parts,
329
- curOption,
330
- i;
331
-
332
- if ( arguments.length === 0 ) {
333
- // don't return a reference to the internal hash
334
- return $.widget.extend( {}, this.options );
335
- }
336
-
337
- if ( typeof key === "string" ) {
338
- // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
339
- options = {};
340
- parts = key.split( "." );
341
- key = parts.shift();
342
- if ( parts.length ) {
343
- curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
344
- for ( i = 0; i < parts.length - 1; i++ ) {
345
- curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
346
- curOption = curOption[ parts[ i ] ];
347
- }
348
- key = parts.pop();
349
- if ( arguments.length === 1 ) {
350
- return curOption[ key ] === undefined ? null : curOption[ key ];
351
- }
352
- curOption[ key ] = value;
353
- } else {
354
- if ( arguments.length === 1 ) {
355
- return this.options[ key ] === undefined ? null : this.options[ key ];
356
- }
357
- options[ key ] = value;
358
- }
359
- }
360
-
361
- this._setOptions( options );
362
-
363
- return this;
364
- },
365
- _setOptions: function( options ) {
366
- var key;
367
-
368
- for ( key in options ) {
369
- this._setOption( key, options[ key ] );
370
- }
371
-
372
- return this;
373
- },
374
- _setOption: function( key, value ) {
375
- this.options[ key ] = value;
376
-
377
- if ( key === "disabled" ) {
378
- this.widget()
379
- .toggleClass( this.widgetFullName + "-disabled", !!value );
380
-
381
- // If the widget is becoming disabled, then nothing is interactive
382
- if ( value ) {
383
- this.hoverable.removeClass( "ui-state-hover" );
384
- this.focusable.removeClass( "ui-state-focus" );
385
- }
386
- }
387
-
388
- return this;
389
- },
390
-
391
- enable: function() {
392
- return this._setOptions({ disabled: false });
393
- },
394
- disable: function() {
395
- return this._setOptions({ disabled: true });
396
- },
397
-
398
- _on: function( suppressDisabledCheck, element, handlers ) {
399
- var delegateElement,
400
- instance = this;
401
-
402
- // no suppressDisabledCheck flag, shuffle arguments
403
- if ( typeof suppressDisabledCheck !== "boolean" ) {
404
- handlers = element;
405
- element = suppressDisabledCheck;
406
- suppressDisabledCheck = false;
407
- }
408
-
409
- // no element argument, shuffle and use this.element
410
- if ( !handlers ) {
411
- handlers = element;
412
- element = this.element;
413
- delegateElement = this.widget();
414
- } else {
415
- element = delegateElement = $( element );
416
- this.bindings = this.bindings.add( element );
417
- }
418
-
419
- $.each( handlers, function( event, handler ) {
420
- function handlerProxy() {
421
- // allow widgets to customize the disabled handling
422
- // - disabled as an array instead of boolean
423
- // - disabled class as method for disabling individual parts
424
- if ( !suppressDisabledCheck &&
425
- ( instance.options.disabled === true ||
426
- $( this ).hasClass( "ui-state-disabled" ) ) ) {
427
- return;
428
- }
429
- return ( typeof handler === "string" ? instance[ handler ] : handler )
430
- .apply( instance, arguments );
431
- }
432
-
433
- // copy the guid so direct unbinding works
434
- if ( typeof handler !== "string" ) {
435
- handlerProxy.guid = handler.guid =
436
- handler.guid || handlerProxy.guid || $.guid++;
437
- }
438
-
439
- var match = event.match( /^([\w:-]*)\s*(.*)$/ ),
440
- eventName = match[1] + instance.eventNamespace,
441
- selector = match[2];
442
- if ( selector ) {
443
- delegateElement.delegate( selector, eventName, handlerProxy );
444
- } else {
445
- element.bind( eventName, handlerProxy );
446
- }
447
- });
448
- },
449
-
450
- _off: function( element, eventName ) {
451
- eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
452
- element.unbind( eventName ).undelegate( eventName );
453
- },
454
-
455
- _delay: function( handler, delay ) {
456
- function handlerProxy() {
457
- return ( typeof handler === "string" ? instance[ handler ] : handler )
458
- .apply( instance, arguments );
459
- }
460
- var instance = this;
461
- return setTimeout( handlerProxy, delay || 0 );
462
- },
463
-
464
- _hoverable: function( element ) {
465
- this.hoverable = this.hoverable.add( element );
466
- this._on( element, {
467
- mouseenter: function( event ) {
468
- $( event.currentTarget ).addClass( "ui-state-hover" );
469
- },
470
- mouseleave: function( event ) {
471
- $( event.currentTarget ).removeClass( "ui-state-hover" );
472
- }
473
- });
474
- },
475
-
476
- _focusable: function( element ) {
477
- this.focusable = this.focusable.add( element );
478
- this._on( element, {
479
- focusin: function( event ) {
480
- $( event.currentTarget ).addClass( "ui-state-focus" );
481
- },
482
- focusout: function( event ) {
483
- $( event.currentTarget ).removeClass( "ui-state-focus" );
484
- }
485
- });
486
- },
487
-
488
- _trigger: function( type, event, data ) {
489
- var prop, orig,
490
- callback = this.options[ type ];
491
-
492
- data = data || {};
493
- event = $.Event( event );
494
- event.type = ( type === this.widgetEventPrefix ?
495
- type :
496
- this.widgetEventPrefix + type ).toLowerCase();
497
- // the original event may come from any element
498
- // so we need to reset the target on the new event
499
- event.target = this.element[ 0 ];
500
-
501
- // copy original event properties over to the new event
502
- orig = event.originalEvent;
503
- if ( orig ) {
504
- for ( prop in orig ) {
505
- if ( !( prop in event ) ) {
506
- event[ prop ] = orig[ prop ];
507
- }
508
- }
509
- }
510
-
511
- this.element.trigger( event, data );
512
- return !( $.isFunction( callback ) &&
513
- callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
514
- event.isDefaultPrevented() );
515
- }
516
- };
517
-
518
- $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
519
- $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
520
- if ( typeof options === "string" ) {
521
- options = { effect: options };
522
- }
523
- var hasOptions,
524
- effectName = !options ?
525
- method :
526
- options === true || typeof options === "number" ?
527
- defaultEffect :
528
- options.effect || defaultEffect;
529
- options = options || {};
530
- if ( typeof options === "number" ) {
531
- options = { duration: options };
532
- }
533
- hasOptions = !$.isEmptyObject( options );
534
- options.complete = callback;
535
- if ( options.delay ) {
536
- element.delay( options.delay );
537
- }
538
- if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
539
- element[ method ]( options );
540
- } else if ( effectName !== method && element[ effectName ] ) {
541
- element[ effectName ]( options.duration, options.easing, callback );
542
- } else {
543
- element.queue(function( next ) {
544
- $( this )[ method ]();
545
- if ( callback ) {
546
- callback.call( element[ 0 ] );
547
- }
548
- next();
549
- });
550
- }
551
- };
552
- });
553
-
554
- var widget = $.widget;
555
-
556
-
557
-
558
- }));