active_scaffold 3.6.0.pre → 3.6.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/{CHANGELOG → CHANGELOG.rdoc} +39 -0
- data/app/assets/javascripts/active_scaffold.js.erb +0 -1
- data/app/assets/javascripts/jquery/active_scaffold.js +35 -4
- data/app/assets/stylesheets/active_scaffold_colors.scss +1 -1
- data/app/assets/stylesheets/active_scaffold_layout.css +52 -29
- data/app/views/active_scaffold_overrides/_list_header.html.erb +5 -7
- data/app/views/active_scaffold_overrides/_list_record.html.erb +4 -5
- data/app/views/active_scaffold_overrides/_list_with_header.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_refresh_list.js.erb +4 -0
- data/config/locales/de.yml +2 -1
- data/config/locales/en.yml +1 -0
- data/config/locales/es.yml +1 -0
- data/config/locales/fr.yml +2 -1
- data/config/locales/hu.yml +1 -0
- data/config/locales/ja.yml +1 -0
- data/config/locales/ru.yml +1 -0
- data/lib/active_scaffold.rb +8 -3
- data/lib/active_scaffold/actions/common_search.rb +11 -8
- data/lib/active_scaffold/actions/core.rb +79 -51
- data/lib/active_scaffold/actions/create.rb +27 -27
- data/lib/active_scaffold/actions/delete.rb +1 -1
- data/lib/active_scaffold/actions/field_search.rb +52 -42
- data/lib/active_scaffold/actions/list.rb +106 -23
- data/lib/active_scaffold/actions/nested.rb +59 -42
- data/lib/active_scaffold/actions/show.rb +3 -3
- data/lib/active_scaffold/actions/subform.rb +9 -16
- data/lib/active_scaffold/actions/update.rb +95 -77
- data/lib/active_scaffold/attribute_params.rb +93 -68
- data/lib/active_scaffold/bridges/active_storage.rb +6 -0
- data/lib/active_scaffold/bridges/active_storage/active_storage_bridge.rb +33 -0
- data/lib/active_scaffold/bridges/active_storage/active_storage_helpers.rb +54 -0
- data/lib/active_scaffold/bridges/active_storage/form_ui.rb +22 -0
- data/lib/active_scaffold/bridges/active_storage/list_ui.rb +36 -0
- data/lib/active_scaffold/bridges/bitfields.rb +1 -0
- data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +12 -15
- data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +6 -0
- data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +2 -2
- data/lib/active_scaffold/bridges/date_picker/helper.rb +46 -41
- data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +1 -1
- data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +2 -2
- data/lib/active_scaffold/bridges/file_column/form_ui.rb +3 -3
- data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +3 -1
- data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +2 -2
- data/lib/active_scaffold/bridges/record_select/helpers.rb +3 -7
- data/lib/active_scaffold/bridges/shared/date_bridge.rb +19 -18
- data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +3 -1
- data/lib/active_scaffold/bridges/usa_state_select/usa_state_select_helper.rb +20 -3
- data/lib/active_scaffold/config/base.rb +58 -34
- data/lib/active_scaffold/config/core.rb +31 -12
- data/lib/active_scaffold/config/delete.rb +12 -1
- data/lib/active_scaffold/config/list.rb +17 -7
- data/lib/active_scaffold/config/mark.rb +1 -1
- data/lib/active_scaffold/configurable.rb +5 -3
- data/lib/active_scaffold/constraints.rb +21 -19
- data/lib/active_scaffold/core.rb +35 -26
- data/lib/active_scaffold/data_structures/action_columns.rb +1 -1
- data/lib/active_scaffold/data_structures/action_link.rb +34 -16
- data/lib/active_scaffold/data_structures/action_links.rb +9 -11
- data/lib/active_scaffold/data_structures/association/abstract.rb +35 -13
- data/lib/active_scaffold/data_structures/association/active_mongoid.rb +2 -6
- data/lib/active_scaffold/data_structures/association/active_record.rb +5 -1
- data/lib/active_scaffold/data_structures/association/mongoid.rb +0 -3
- data/lib/active_scaffold/data_structures/column.rb +49 -58
- data/lib/active_scaffold/data_structures/columns.rb +3 -2
- data/lib/active_scaffold/data_structures/nested_info.rb +20 -18
- data/lib/active_scaffold/data_structures/sorting.rb +5 -0
- data/lib/active_scaffold/delayed_setup.rb +16 -6
- data/lib/active_scaffold/extensions/action_controller_rendering.rb +1 -1
- data/lib/active_scaffold/extensions/action_view_rendering.rb +34 -14
- data/lib/active_scaffold/extensions/cow_proxy.rb +50 -2
- data/lib/active_scaffold/extensions/localize.rb +3 -1
- data/lib/active_scaffold/extensions/routing_mapper.rb +2 -2
- data/lib/active_scaffold/extensions/to_label.rb +3 -2
- data/lib/active_scaffold/finder.rb +81 -46
- data/lib/active_scaffold/helpers/action_link_helpers.rb +47 -21
- data/lib/active_scaffold/helpers/association_helpers.rb +13 -11
- data/lib/active_scaffold/helpers/controller_helpers.rb +14 -11
- data/lib/active_scaffold/helpers/form_column_helpers.rb +133 -99
- data/lib/active_scaffold/helpers/human_condition_helpers.rb +1 -1
- data/lib/active_scaffold/helpers/id_helpers.rb +4 -0
- data/lib/active_scaffold/helpers/list_column_helpers.rb +76 -49
- data/lib/active_scaffold/helpers/pagination_helpers.rb +2 -2
- data/lib/active_scaffold/helpers/search_column_helpers.rb +25 -30
- data/lib/active_scaffold/helpers/show_column_helpers.rb +3 -5
- data/lib/active_scaffold/helpers/view_helpers.rb +31 -22
- data/lib/active_scaffold/orm_checks.rb +2 -2
- data/lib/active_scaffold/paginator.rb +1 -3
- data/lib/active_scaffold/registry.rb +11 -0
- data/lib/active_scaffold/responds_to_parent.rb +6 -5
- data/lib/active_scaffold/tableless.rb +6 -8
- data/lib/active_scaffold/version.rb +1 -1
- data/shoulda_macros/macros.rb +3 -1
- data/test/bridges/paperclip_test.rb +1 -1
- data/test/company.rb +2 -2
- data/test/data_structures/action_columns_test.rb +2 -2
- data/test/data_structures/column_test.rb +3 -6
- data/test/data_structures/columns_test.rb +2 -2
- data/test/extensions/active_record_test.rb +4 -4
- data/test/extensions/routing_mapper_test.rb +2 -2
- data/test/helpers/list_column_helpers_test.rb +3 -1
- data/test/misc/active_record_permissions_test.rb +2 -2
- data/test/misc/attribute_params_test.rb +4 -0
- data/test/misc/configurable_test.rb +10 -10
- data/test/misc/convert_numbers_format_test.rb +4 -0
- data/test/mock_app/app/assets/config/manifest.js +0 -0
- data/test/mock_app/app/controllers/cars_controller.rb +1 -0
- data/test/mock_app/app/controllers/people_controller.rb +3 -1
- data/test/mock_app/config/application.rb +1 -0
- data/test/mock_app/config/routes.rb +4 -1
- data/test/mock_app/db/schema.rb +2 -0
- data/test/performance/list_cars_performance_test.rb +34 -0
- data/test/performance/list_people_performance_test.rb +31 -0
- data/test/performance_test_help.rb +3 -0
- data/test/test_helper.rb +2 -1
- metadata +22 -12
- data/app/assets/javascripts/prototype/rico_corner.js +0 -370
- data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +0 -5
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'performance_test_help'
|
3
|
+
|
4
|
+
class ListPeoplePerformanceTest < ActionDispatch::PerformanceTest
|
5
|
+
self.profile_options =
|
6
|
+
if ENV['BENCHMARK_TESTS']
|
7
|
+
{metrics: [:wall_time]}
|
8
|
+
else
|
9
|
+
{metrics: %i[process_time], formats: %i[flat graph_html call_stack]}
|
10
|
+
end
|
11
|
+
def setup
|
12
|
+
200.times do |i|
|
13
|
+
p = Person.create(first_name: "Name#{i}", last_name: 'Last')
|
14
|
+
p.buildings = Array.new(4) { |j| Building.create name: "B#{j} of #{p.first_name}" } unless (i % 4).zero?
|
15
|
+
end
|
16
|
+
PeopleController.class_eval do
|
17
|
+
before_action :setup
|
18
|
+
def list_columns
|
19
|
+
active_scaffold_config.columns.select { |col| %i[first_name last_name buildings].include?(col.name) }
|
20
|
+
end
|
21
|
+
|
22
|
+
def setup
|
23
|
+
active_scaffold_config.list.pagination = false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_list
|
29
|
+
get '/people'
|
30
|
+
end
|
31
|
+
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_scaffold
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.6.0.
|
4
|
+
version: 3.6.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Many, see README
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: '0.3'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: '0.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: ice_nine
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -76,7 +76,7 @@ extensions: []
|
|
76
76
|
extra_rdoc_files:
|
77
77
|
- README.md
|
78
78
|
files:
|
79
|
-
- CHANGELOG
|
79
|
+
- CHANGELOG.rdoc
|
80
80
|
- LICENSE.md
|
81
81
|
- README.md
|
82
82
|
- app/assets/images/active_scaffold/add.png
|
@@ -116,7 +116,6 @@ files:
|
|
116
116
|
- app/assets/javascripts/prototype/active_scaffold_chosen.js
|
117
117
|
- app/assets/javascripts/prototype/dhtml_history.js
|
118
118
|
- app/assets/javascripts/prototype/form_enhancements.js
|
119
|
-
- app/assets/javascripts/prototype/rico_corner.js
|
120
119
|
- app/assets/javascripts/prototype/tiny_mce_bridge.js
|
121
120
|
- app/assets/stylesheets/active_scaffold-ie.scss
|
122
121
|
- app/assets/stylesheets/active_scaffold.scss
|
@@ -216,6 +215,11 @@ files:
|
|
216
215
|
- lib/active_scaffold/active_record_permissions.rb
|
217
216
|
- lib/active_scaffold/attribute_params.rb
|
218
217
|
- lib/active_scaffold/bridges.rb
|
218
|
+
- lib/active_scaffold/bridges/active_storage.rb
|
219
|
+
- lib/active_scaffold/bridges/active_storage/active_storage_bridge.rb
|
220
|
+
- lib/active_scaffold/bridges/active_storage/active_storage_helpers.rb
|
221
|
+
- lib/active_scaffold/bridges/active_storage/form_ui.rb
|
222
|
+
- lib/active_scaffold/bridges/active_storage/list_ui.rb
|
219
223
|
- lib/active_scaffold/bridges/ancestry.rb
|
220
224
|
- lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb
|
221
225
|
- lib/active_scaffold/bridges/bitfields.rb
|
@@ -248,7 +252,6 @@ files:
|
|
248
252
|
- lib/active_scaffold/bridges/file_column/list_ui.rb
|
249
253
|
- lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb
|
250
254
|
- lib/active_scaffold/bridges/file_column/test/mock_model.rb
|
251
|
-
- lib/active_scaffold/bridges/file_column/test/test_helper.rb
|
252
255
|
- lib/active_scaffold/bridges/paper_trail.rb
|
253
256
|
- lib/active_scaffold/bridges/paper_trail/actions.rb
|
254
257
|
- lib/active_scaffold/bridges/paper_trail/config.rb
|
@@ -393,6 +396,7 @@ files:
|
|
393
396
|
- test/misc/tableless_test.rb
|
394
397
|
- test/mock_app/.gitignore
|
395
398
|
- test/mock_app/Rakefile
|
399
|
+
- test/mock_app/app/assets/config/manifest.js
|
396
400
|
- test/mock_app/app/controllers/addresses_controller.rb
|
397
401
|
- test/mock_app/app/controllers/application_controller.rb
|
398
402
|
- test/mock_app/app/controllers/buildings_controller.rb
|
@@ -428,6 +432,9 @@ files:
|
|
428
432
|
- test/mock_app/db/schema.rb
|
429
433
|
- test/mock_app/db/test.sqlite3
|
430
434
|
- test/model_stub.rb
|
435
|
+
- test/performance/list_cars_performance_test.rb
|
436
|
+
- test/performance/list_people_performance_test.rb
|
437
|
+
- test/performance_test_help.rb
|
431
438
|
- test/run_all.rb
|
432
439
|
- test/test_helper.rb
|
433
440
|
- vendor/assets/javascripts/getprototypeof.js
|
@@ -439,7 +446,7 @@ homepage: https://github.com/activescaffold/active_scaffold
|
|
439
446
|
licenses:
|
440
447
|
- MIT
|
441
448
|
metadata: {}
|
442
|
-
post_install_message:
|
449
|
+
post_install_message:
|
443
450
|
rdoc_options: []
|
444
451
|
require_paths:
|
445
452
|
- lib
|
@@ -454,9 +461,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
454
461
|
- !ruby/object:Gem::Version
|
455
462
|
version: 1.3.1
|
456
463
|
requirements: []
|
457
|
-
|
458
|
-
|
459
|
-
signing_key:
|
464
|
+
rubygems_version: 3.0.8
|
465
|
+
signing_key:
|
460
466
|
specification_version: 4
|
461
467
|
summary: Rails 4.x and 5.x versions of ActiveScaffold supporting prototype and jquery
|
462
468
|
test_files:
|
@@ -511,6 +517,7 @@ test_files:
|
|
511
517
|
- test/misc/tableless_test.rb
|
512
518
|
- test/mock_app/.gitignore
|
513
519
|
- test/mock_app/Rakefile
|
520
|
+
- test/mock_app/app/assets/config/manifest.js
|
514
521
|
- test/mock_app/app/controllers/addresses_controller.rb
|
515
522
|
- test/mock_app/app/controllers/application_controller.rb
|
516
523
|
- test/mock_app/app/controllers/buildings_controller.rb
|
@@ -546,5 +553,8 @@ test_files:
|
|
546
553
|
- test/mock_app/db/schema.rb
|
547
554
|
- test/mock_app/db/test.sqlite3
|
548
555
|
- test/model_stub.rb
|
556
|
+
- test/performance/list_cars_performance_test.rb
|
557
|
+
- test/performance/list_people_performance_test.rb
|
558
|
+
- test/performance_test_help.rb
|
549
559
|
- test/run_all.rb
|
550
560
|
- test/test_helper.rb
|
@@ -1,370 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
*
|
3
|
-
* Copyright 2005 Sabre Airline Solutions
|
4
|
-
*
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
|
6
|
-
* file except in compliance with the License. You may obtain a copy of the License at
|
7
|
-
*
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
*
|
10
|
-
* Unless required by applicable law or agreed to in writing, software distributed under the
|
11
|
-
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
12
|
-
* either express or implied. See the License for the specific language governing permissions
|
13
|
-
* and limitations under the License.
|
14
|
-
**/
|
15
|
-
|
16
|
-
|
17
|
-
//-------------------- rico.js
|
18
|
-
var Rico = {
|
19
|
-
Version: '1.1.0',
|
20
|
-
prototypeVersion: parseFloat(Prototype.Version.split(".")[0] + "." + Prototype.Version.split(".")[1])
|
21
|
-
}
|
22
|
-
|
23
|
-
//-------------------- ricoColor.js
|
24
|
-
Rico.Color = Class.create();
|
25
|
-
|
26
|
-
Rico.Color.prototype = {
|
27
|
-
|
28
|
-
initialize: function(red, green, blue) {
|
29
|
-
this.rgb = { r: red, g : green, b : blue };
|
30
|
-
},
|
31
|
-
|
32
|
-
blend: function(other) {
|
33
|
-
this.rgb.r = Math.floor((this.rgb.r + other.rgb.r)/2);
|
34
|
-
this.rgb.g = Math.floor((this.rgb.g + other.rgb.g)/2);
|
35
|
-
this.rgb.b = Math.floor((this.rgb.b + other.rgb.b)/2);
|
36
|
-
},
|
37
|
-
|
38
|
-
asRGB: function() {
|
39
|
-
return "rgb(" + this.rgb.r + "," + this.rgb.g + "," + this.rgb.b + ")";
|
40
|
-
},
|
41
|
-
|
42
|
-
asHex: function() {
|
43
|
-
return "#" + this.rgb.r.toColorPart() + this.rgb.g.toColorPart() + this.rgb.b.toColorPart();
|
44
|
-
},
|
45
|
-
|
46
|
-
asHSB: function() {
|
47
|
-
return Rico.Color.RGBtoHSB(this.rgb.r, this.rgb.g, this.rgb.b);
|
48
|
-
},
|
49
|
-
|
50
|
-
toString: function() {
|
51
|
-
return this.asHex();
|
52
|
-
}
|
53
|
-
|
54
|
-
};
|
55
|
-
|
56
|
-
Rico.Color.createFromHex = function(hexCode) {
|
57
|
-
if(hexCode.length==4) {
|
58
|
-
var shortHexCode = hexCode;
|
59
|
-
var hexCode = '#';
|
60
|
-
for(var i=1;i<4;i++) hexCode += (shortHexCode.charAt(i) + shortHexCode.charAt(i));
|
61
|
-
}
|
62
|
-
if ( hexCode.indexOf('#') == 0 )
|
63
|
-
hexCode = hexCode.substring(1);
|
64
|
-
var red = hexCode.substring(0,2);
|
65
|
-
var green = hexCode.substring(2,4);
|
66
|
-
var blue = hexCode.substring(4,6);
|
67
|
-
return new Rico.Color( parseInt(red,16), parseInt(green,16), parseInt(blue,16) );
|
68
|
-
}
|
69
|
-
|
70
|
-
/**
|
71
|
-
* Factory method for creating a color from the background of
|
72
|
-
* an HTML element.
|
73
|
-
*/
|
74
|
-
Rico.Color.createColorFromBackground = function(elem) {
|
75
|
-
|
76
|
-
//var actualColor = RicoUtil.getElementsComputedStyle($(elem), "backgroundColor", "background-color"); // Changed to prototype style
|
77
|
-
var actualColor = $(elem).getStyle('backgroundColor');
|
78
|
-
|
79
|
-
if ( actualColor == "transparent" && elem.parentNode )
|
80
|
-
return Rico.Color.createColorFromBackground(elem.parentNode);
|
81
|
-
|
82
|
-
if ( actualColor == null )
|
83
|
-
return new Rico.Color(255,255,255);
|
84
|
-
|
85
|
-
if ( actualColor.indexOf("rgb(") == 0 ) {
|
86
|
-
var colors = actualColor.substring(4, actualColor.length - 1 );
|
87
|
-
var colorArray = colors.split(",");
|
88
|
-
return new Rico.Color( parseInt( colorArray[0] ),
|
89
|
-
parseInt( colorArray[1] ),
|
90
|
-
parseInt( colorArray[2] ) );
|
91
|
-
|
92
|
-
}
|
93
|
-
else if ( actualColor.indexOf("#") == 0 ) {
|
94
|
-
return Rico.Color.createFromHex(actualColor);
|
95
|
-
}
|
96
|
-
else
|
97
|
-
return new Rico.Color(255,255,255);
|
98
|
-
}
|
99
|
-
|
100
|
-
/* next two functions changed to mootools color.js functions */
|
101
|
-
Rico.Color.HSBtoRGB = function(hue, saturation, brightness) {
|
102
|
-
|
103
|
-
var br = Math.round(brightness / 100 * 255);
|
104
|
-
if (this[1] == 0){
|
105
|
-
return [br, br, br];
|
106
|
-
} else {
|
107
|
-
var hue = this[0] % 360;
|
108
|
-
var f = hue % 60;
|
109
|
-
var p = Math.round((brightness * (100 - saturation)) / 10000 * 255);
|
110
|
-
var q = Math.round((brightness * (6000 - saturation * f)) / 600000 * 255);
|
111
|
-
var t = Math.round((brightness * (6000 - saturation * (60 - f))) / 600000 * 255);
|
112
|
-
switch(Math.floor(hue / 60)){
|
113
|
-
case 0: return { r : br, g : t, b : p };
|
114
|
-
case 1: return { r : q, g : br, b : p };
|
115
|
-
case 2: return { r : p, g : br, b : t };
|
116
|
-
case 3: return { r : p, g : q, b : br };
|
117
|
-
case 4: return { r : t, g : p, b : br };
|
118
|
-
case 5: return { r : br, g : p, b : q };
|
119
|
-
}
|
120
|
-
}
|
121
|
-
return false;
|
122
|
-
}
|
123
|
-
|
124
|
-
Rico.Color.RGBtoHSB = function(red, green, blue) {
|
125
|
-
var hue, saturation, brightness;
|
126
|
-
var max = Math.max(red, green, blue), min = Math.min(red, green, blue);
|
127
|
-
var delta = max - min;
|
128
|
-
brightness = max / 255;
|
129
|
-
saturation = (max != 0) ? delta / max : 0;
|
130
|
-
if (saturation == 0){
|
131
|
-
hue = 0;
|
132
|
-
} else {
|
133
|
-
var rr = (max - red) / delta;
|
134
|
-
var gr = (max - green) / delta;
|
135
|
-
var br = (max - blue) / delta;
|
136
|
-
if (red == max) hue = br - gr;
|
137
|
-
else if (green == max) hue = 2 + rr - br;
|
138
|
-
else hue = 4 + gr - rr;
|
139
|
-
hue /= 6;
|
140
|
-
if (hue < 0) hue++;
|
141
|
-
}
|
142
|
-
return { h : Math.round(hue * 360), s : Math.round(saturation * 100), b : Math.round(brightness * 100)};
|
143
|
-
}
|
144
|
-
|
145
|
-
|
146
|
-
//-------------------- ricoCorner.js
|
147
|
-
Rico.Corner = {
|
148
|
-
|
149
|
-
round: function(e, options) {
|
150
|
-
var e = $(e);
|
151
|
-
this._setOptions(options);
|
152
|
-
|
153
|
-
var color = this.options.color;
|
154
|
-
if ( this.options.color == "fromElement" )
|
155
|
-
color = this._background(e);
|
156
|
-
|
157
|
-
var bgColor = this.options.bgColor;
|
158
|
-
if ( this.options.bgColor == "fromParent" )
|
159
|
-
bgColor = this._background(e.offsetParent);
|
160
|
-
|
161
|
-
this._roundCornersImpl(e, color, bgColor);
|
162
|
-
},
|
163
|
-
|
164
|
-
_roundCornersImpl: function(e, color, bgColor) {
|
165
|
-
if(this.options.border)
|
166
|
-
this._renderBorder(e,bgColor);
|
167
|
-
if(this._isTopRounded())
|
168
|
-
this._roundTopCorners(e,color,bgColor);
|
169
|
-
if(this._isBottomRounded())
|
170
|
-
this._roundBottomCorners(e,color,bgColor);
|
171
|
-
},
|
172
|
-
|
173
|
-
_renderBorder: function(el,bgColor) {
|
174
|
-
var borderValue = "1px solid " + this._borderColor(bgColor);
|
175
|
-
var borderL = "border-left: " + borderValue;
|
176
|
-
var borderR = "border-right: " + borderValue;
|
177
|
-
var style = "style='" + borderL + ";" + borderR + "'";
|
178
|
-
el.innerHTML = "<div " + style + ">" + el.innerHTML + "</div>"
|
179
|
-
},
|
180
|
-
|
181
|
-
_roundTopCorners: function(el, color, bgColor) {
|
182
|
-
var corner = this._createCorner(bgColor);
|
183
|
-
for(var i=0 ; i < this.options.numSlices ; i++ )
|
184
|
-
corner.appendChild(this._createCornerSlice(color,bgColor,i,"top"));
|
185
|
-
el.style.paddingTop = 0;
|
186
|
-
el.insertBefore(corner,el.firstChild);
|
187
|
-
},
|
188
|
-
|
189
|
-
_roundBottomCorners: function(el, color, bgColor) {
|
190
|
-
var corner = this._createCorner(bgColor);
|
191
|
-
for(var i=(this.options.numSlices-1) ; i >= 0 ; i-- )
|
192
|
-
corner.appendChild(this._createCornerSlice(color,bgColor,i,"bottom"));
|
193
|
-
el.style.paddingBottom = 0;
|
194
|
-
el.appendChild(corner);
|
195
|
-
},
|
196
|
-
|
197
|
-
_createCorner: function(bgColor) {
|
198
|
-
var corner = document.createElement("div");
|
199
|
-
corner.style.backgroundColor = (this._isTransparent() ? "transparent" : bgColor);
|
200
|
-
return corner;
|
201
|
-
},
|
202
|
-
|
203
|
-
_createCornerSlice: function(color,bgColor, n, position) {
|
204
|
-
var slice = document.createElement("span");
|
205
|
-
|
206
|
-
var inStyle = slice.style;
|
207
|
-
inStyle.backgroundColor = color;
|
208
|
-
inStyle.display = "block";
|
209
|
-
inStyle.height = "1px";
|
210
|
-
inStyle.overflow = "hidden";
|
211
|
-
inStyle.fontSize = "1px";
|
212
|
-
|
213
|
-
var borderColor = this._borderColor(color,bgColor);
|
214
|
-
if ( this.options.border && n == 0 ) {
|
215
|
-
inStyle.borderTopStyle = "solid";
|
216
|
-
inStyle.borderTopWidth = "1px";
|
217
|
-
inStyle.borderLeftWidth = "0px";
|
218
|
-
inStyle.borderRightWidth = "0px";
|
219
|
-
inStyle.borderBottomWidth = "0px";
|
220
|
-
inStyle.height = "0px"; // assumes css compliant box model
|
221
|
-
inStyle.borderColor = borderColor;
|
222
|
-
}
|
223
|
-
else if(borderColor) {
|
224
|
-
inStyle.borderColor = borderColor;
|
225
|
-
inStyle.borderStyle = "solid";
|
226
|
-
inStyle.borderWidth = "0px 1px";
|
227
|
-
}
|
228
|
-
|
229
|
-
if ( !this.options.compact && (n == (this.options.numSlices-1)) )
|
230
|
-
inStyle.height = "2px";
|
231
|
-
|
232
|
-
this._setMargin(slice, n, position);
|
233
|
-
this._setBorder(slice, n, position);
|
234
|
-
return slice;
|
235
|
-
},
|
236
|
-
|
237
|
-
_setOptions: function(options) {
|
238
|
-
this.options = {
|
239
|
-
corners : "all",
|
240
|
-
color : "fromElement",
|
241
|
-
bgColor : "fromParent",
|
242
|
-
blend : true,
|
243
|
-
border : false,
|
244
|
-
compact : false
|
245
|
-
}
|
246
|
-
Object.extend(this.options, options || {});
|
247
|
-
|
248
|
-
this.options.numSlices = this.options.compact ? 2 : 4;
|
249
|
-
if ( this._isTransparent() )
|
250
|
-
this.options.blend = false;
|
251
|
-
},
|
252
|
-
|
253
|
-
_whichSideTop: function() {
|
254
|
-
if ( this._hasString(this.options.corners, "all", "top") )
|
255
|
-
return "";
|
256
|
-
|
257
|
-
if ( this.options.corners.indexOf("tl") >= 0 && this.options.corners.indexOf("tr") >= 0 )
|
258
|
-
return "";
|
259
|
-
|
260
|
-
if (this.options.corners.indexOf("tl") >= 0)
|
261
|
-
return "left";
|
262
|
-
else if (this.options.corners.indexOf("tr") >= 0)
|
263
|
-
return "right";
|
264
|
-
return "";
|
265
|
-
},
|
266
|
-
|
267
|
-
_whichSideBottom: function() {
|
268
|
-
if ( this._hasString(this.options.corners, "all", "bottom") )
|
269
|
-
return "";
|
270
|
-
|
271
|
-
if ( this.options.corners.indexOf("bl")>=0 && this.options.corners.indexOf("br")>=0 )
|
272
|
-
return "";
|
273
|
-
|
274
|
-
if(this.options.corners.indexOf("bl") >=0)
|
275
|
-
return "left";
|
276
|
-
else if(this.options.corners.indexOf("br")>=0)
|
277
|
-
return "right";
|
278
|
-
return "";
|
279
|
-
},
|
280
|
-
|
281
|
-
_borderColor : function(color,bgColor) {
|
282
|
-
if ( color == "transparent" )
|
283
|
-
return bgColor;
|
284
|
-
else if ( this.options.border )
|
285
|
-
return this.options.border;
|
286
|
-
else if ( this.options.blend )
|
287
|
-
return this._blend( bgColor, color );
|
288
|
-
else
|
289
|
-
return "";
|
290
|
-
},
|
291
|
-
|
292
|
-
|
293
|
-
_setMargin: function(el, n, corners) {
|
294
|
-
var marginSize = this._marginSize(n);
|
295
|
-
var whichSide = corners == "top" ? this._whichSideTop() : this._whichSideBottom();
|
296
|
-
|
297
|
-
if ( whichSide == "left" ) {
|
298
|
-
el.style.marginLeft = marginSize + "px"; el.style.marginRight = "0px";
|
299
|
-
}
|
300
|
-
else if ( whichSide == "right" ) {
|
301
|
-
el.style.marginRight = marginSize + "px"; el.style.marginLeft = "0px";
|
302
|
-
}
|
303
|
-
else {
|
304
|
-
el.style.marginLeft = marginSize + "px"; el.style.marginRight = marginSize + "px";
|
305
|
-
}
|
306
|
-
},
|
307
|
-
|
308
|
-
_setBorder: function(el,n,corners) {
|
309
|
-
var borderSize = this._borderSize(n);
|
310
|
-
var whichSide = corners == "top" ? this._whichSideTop() : this._whichSideBottom();
|
311
|
-
if ( whichSide == "left" ) {
|
312
|
-
el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = "0px";
|
313
|
-
}
|
314
|
-
else if ( whichSide == "right" ) {
|
315
|
-
el.style.borderRightWidth = borderSize + "px"; el.style.borderLeftWidth = "0px";
|
316
|
-
}
|
317
|
-
else {
|
318
|
-
el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = borderSize + "px";
|
319
|
-
}
|
320
|
-
if (this.options.border != false)
|
321
|
-
el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = borderSize + "px";
|
322
|
-
},
|
323
|
-
|
324
|
-
_marginSize: function(n) {
|
325
|
-
if ( this._isTransparent() )
|
326
|
-
return 0;
|
327
|
-
|
328
|
-
var marginSizes = [ 5, 3, 2, 1 ];
|
329
|
-
var blendedMarginSizes = [ 3, 2, 1, 0 ];
|
330
|
-
var compactMarginSizes = [ 2, 1 ];
|
331
|
-
var smBlendedMarginSizes = [ 1, 0 ];
|
332
|
-
|
333
|
-
if ( this.options.compact && this.options.blend )
|
334
|
-
return smBlendedMarginSizes[n];
|
335
|
-
else if ( this.options.compact )
|
336
|
-
return compactMarginSizes[n];
|
337
|
-
else if ( this.options.blend )
|
338
|
-
return blendedMarginSizes[n];
|
339
|
-
else
|
340
|
-
return marginSizes[n];
|
341
|
-
},
|
342
|
-
|
343
|
-
_borderSize: function(n) {
|
344
|
-
var transparentBorderSizes = [ 5, 3, 2, 1 ];
|
345
|
-
var blendedBorderSizes = [ 2, 1, 1, 1 ];
|
346
|
-
var compactBorderSizes = [ 1, 0 ];
|
347
|
-
var actualBorderSizes = [ 0, 2, 0, 0 ];
|
348
|
-
|
349
|
-
if ( this.options.compact && (this.options.blend || this._isTransparent()) )
|
350
|
-
return 1;
|
351
|
-
else if ( this.options.compact )
|
352
|
-
return compactBorderSizes[n];
|
353
|
-
else if ( this.options.blend )
|
354
|
-
return blendedBorderSizes[n];
|
355
|
-
else if ( this.options.border )
|
356
|
-
return actualBorderSizes[n];
|
357
|
-
else if ( this._isTransparent() )
|
358
|
-
return transparentBorderSizes[n];
|
359
|
-
return 0;
|
360
|
-
},
|
361
|
-
|
362
|
-
_hasString: function(str) { for(var i=1 ; i<arguments.length ; i++) if (str.indexOf(arguments[i]) >= 0) return true; return false; },
|
363
|
-
_blend: function(c1, c2) { var cc1 = Rico.Color.createFromHex(c1); cc1.blend(Rico.Color.createFromHex(c2)); return cc1; },
|
364
|
-
_background: function(el) { try { return Rico.Color.createColorFromBackground(el).asHex(); } catch(err) { return "#ffffff"; } },
|
365
|
-
_isTransparent: function() { return this.options.color == "transparent"; },
|
366
|
-
_isTopRounded: function() { return this._hasString(this.options.corners, "all", "top", "tl", "tr"); },
|
367
|
-
_isBottomRounded: function() { return this._hasString(this.options.corners, "all", "bottom", "bl", "br"); },
|
368
|
-
_hasSingleTextChild: function(el) { return el.childNodes.length == 1 && el.childNodes[0].nodeType == 3; }
|
369
|
-
}
|
370
|
-
|