arnold 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,113 @@
1
+ require 'fileutils'
2
+ require 'yaml'
3
+
4
+ require 'arnold/node'
5
+
6
+ module Arnold
7
+ class NodeManager
8
+
9
+ def initialize
10
+ @datadir = "#{$CONFIG[:datadir]}/arnold"
11
+
12
+ # make sure our data directories exist
13
+ makedir "#{@datadir}"
14
+ makedir "#{@datadir}/macaddr/"
15
+ makedir "#{@datadir}/name/"
16
+ end
17
+
18
+ def load(guid)
19
+ begin
20
+ data = YAML.load_file("#{@datadir}/#{guid}.yaml")
21
+ return Arnold::Node.new(guid, data['name'], data['macaddr'], data['parameters'], data['classes'])
22
+ rescue Exception
23
+ puts "Invalid node! #{data.to_yaml}"
24
+ return Arnold::Node.new(guid)
25
+ end
26
+ end
27
+
28
+ def loadall
29
+ nodes=[]
30
+ Dir.glob("#{@datadir}/*.yaml").each do |file|
31
+ nodes << load(File.basename(file, '.yaml'))
32
+ end
33
+ nodes
34
+ end
35
+
36
+ def write(node)
37
+ raise "Must have a name or mac address!" if (node.name.nil? and node.macaddr.nil?)
38
+
39
+ if node.guid.nil?
40
+ raise "Node name exists: please try again" if File.exists? "#{@datadir}/name/#{node.name}.yaml"
41
+ raise "MAC address exists: please try again" if File.exists? "#{@datadir}/macaddr/#{node.macaddr}.yaml"
42
+ node.guid = makeguid()
43
+ else
44
+ raise "Invalid Node" unless File.exists? "#{@datadir}/#{node.guid}.yaml"
45
+ end
46
+
47
+ data = {
48
+ 'parameters' => node.parameters,
49
+ 'classes' => node.classes,
50
+ }
51
+ data['name'] = node.name if node.name
52
+ data['macaddr'] = node.macaddr if node.macaddr
53
+
54
+ # duplicate the parameters hash. This allows hiera() calls to work as expected.
55
+ # Principle of least surprise, ya know.
56
+ data.merge! node.parameters
57
+
58
+ File.open("#{@datadir}/#{node.guid}.yaml", 'w') do |file|
59
+ file.write("###########################################################\n")
60
+ file.write("### This file is managed by Arnold: the provisionator. ###\n")
61
+ file.write("# Any manual modifications will be gleefully overwritten. #\n")
62
+ file.write("###########################################################\n")
63
+ file.write(data.to_yaml)
64
+ end
65
+
66
+ make_link(node.guid, node.macaddr, :macaddr)
67
+ make_link(node.guid, node.name, :name)
68
+ remove_stale_symlinks("#{@datadir}/macaddr/")
69
+ remove_stale_symlinks("#{@datadir}/name/")
70
+
71
+ return node.guid
72
+ end
73
+
74
+ private
75
+ def makedir(path)
76
+ if not File.exist? "#{path}"
77
+ FileUtils.mkdir_p "#{path}"
78
+ end
79
+ end
80
+
81
+ def make_link(guid, file, type)
82
+ raise "Invalid type" if not [ :name, :macaddr].include? type
83
+
84
+ begin
85
+ if not (file.nil? || file.empty?)
86
+ File.symlink("#{@datadir}/#{guid}.yaml", "#{@datadir}/#{type}/#{file}.yaml")
87
+ else
88
+ File.unlink("#{@datadir}/#{type}/#{file}.yaml")
89
+ end
90
+ rescue Errno::EEXIST
91
+ # noop
92
+ rescue Errno::ENOENT
93
+ # noop
94
+ end
95
+ end
96
+
97
+ # just loop through a directory and get rid of any stale symlinks
98
+ def remove_stale_symlinks(path)
99
+ Dir.glob("#{path}/*").each { |f| File.unlink(f) if not File.exist?(f) }
100
+ end
101
+
102
+ def makeguid
103
+ guid = nil
104
+ 5.times do
105
+ guid = (0..16).to_a.map{|a| rand(16).to_s(16)}.join
106
+ break if not File.exist? "#{@datadir}/#{guid}.yaml"
107
+ guid = nil
108
+ end
109
+ raise "GUID generation failed!" if guid.nil?
110
+ return guid
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,23 @@
1
+ require 'arnold/node'
2
+
3
+ module Arnold
4
+ class Provisioner
5
+ attr_accessor :node
6
+
7
+ def initialize
8
+ end
9
+
10
+ def provision(node)
11
+ @node = node
12
+ create
13
+ install
14
+ end
15
+
16
+ def create
17
+ end
18
+
19
+ def install
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ require 'arnold/node'
2
+ require 'arnold/provisioner'
3
+
4
+ module Arnold
5
+ class Provisioner::CloudProvisioner < Arnold::Provisioner
6
+ def create
7
+ puts "provisioning node #{@node.name}"
8
+ puts "Would have called:"
9
+ puts "puppet node_vmware create --name=#{@node.name} --template='#{@node.parameters['template']}' --wait-for-boot"
10
+ end
11
+
12
+ def install
13
+ enc_server = "--enc-server=#{$CONFIG[:enc_server]} --enc-port=#{$CONFIG[:enc_port]}"
14
+ enc_auth = "--enc-ssl --enc-auth-user=#{$CONFIG[:enc_user]} --enc-auth-passwd=#{$CONFIG[:enc_password]}"
15
+
16
+ enc = "#{enc_server} #{enc_auth}"
17
+ login = "--keyfile=#{$CONFIG[:keyfile]} --login=root"
18
+
19
+ puts "installing and classifying"
20
+ puts "would have called:"
21
+ puts "puppet node init --node-group=#{@node.parameters['group']} #{enc} #{login} #{@node.name}"
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,14 @@
1
+ require 'arnold/node'
2
+ require 'arnold/provisioner'
3
+
4
+ module Arnold
5
+ class Provisioner::Null < Arnold::Provisioner
6
+ def create
7
+ puts "creating node #{@node.name}"
8
+ end
9
+
10
+ def install
11
+ puts "installing"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,110 @@
1
+ require 'sinatra/base'
2
+ require 'webrick'
3
+ require 'webrick/https'
4
+ require 'openssl'
5
+ require 'json'
6
+
7
+ require 'arnold/node'
8
+ require 'arnold/node_manager'
9
+
10
+ module Arnold
11
+ class Server < Sinatra::Application
12
+ set :root, $CONFIG[:docroot]
13
+ # set :dump_errors, false
14
+ # set :logging, false
15
+ disable :raise_errors
16
+ disable :show_exceptions
17
+
18
+ def initialize
19
+ super
20
+ @manager = Arnold::NodeManager.new()
21
+ end
22
+
23
+ get '/' do
24
+ protected!
25
+ @nodes = @manager.loadall()
26
+ erb :nodes
27
+ end
28
+
29
+ get '/node/:guid' do |guid|
30
+ protected!
31
+ @node = @manager.load(guid)
32
+ erb :node
33
+ end
34
+
35
+ get '/new' do
36
+ protected!
37
+ @classes = $CONFIG[:classes]
38
+ erb :new
39
+ end
40
+
41
+ post '/create' do
42
+ protected!
43
+ node = Arnold::Node.new(nil, params[:name], params[:macaddr], parse_params(params), params[:classes])
44
+ @manager.write(node)
45
+ $CONFIG[:provisioner].provision(node)
46
+ redirect '/'
47
+ end
48
+
49
+ post '/update' do
50
+ protected!
51
+ node = Arnold::Node.new(params[:guid], params[:name], params[:macaddr], parse_params(params), params[:classes])
52
+ @manager.write(node)
53
+ redirect '/'
54
+ end
55
+
56
+ post '/api/v1/create' do
57
+ protected!
58
+ request.body.rewind # in case someone already read it
59
+ data = JSON.parse request.body.read
60
+ node = Arnold::Node.new(nil, data['name'], data['macaddr'], data['parameters'], data['classes'])
61
+ guid = @manager.write(node)
62
+ $CONFIG[:provisioner].provision(node)
63
+ return guid
64
+ end
65
+
66
+ get '/api/v1/:guid' do |guid|
67
+ protected!
68
+ node = @manager.load(guid)
69
+ node.to_json
70
+ end
71
+
72
+ not_found do
73
+ halt 404, 'page not found'
74
+ end
75
+
76
+ error do
77
+ @error = env['sinatra.error'].message
78
+
79
+ # just return the error if the api was called
80
+ return @error if request.path =~ /^\/api/
81
+
82
+ erb :error
83
+ end
84
+
85
+ helpers do
86
+ # Scrapes paramters from the post params object
87
+ #
88
+ def parse_params(params)
89
+ parsed = {}
90
+ # Pull out params, but only those which are valid variable names in Puppet
91
+ params.each {|k,v| parsed[k.sub('param_', '')] = v if k =~ /^param_[a-zA-Z0-9_]+$/ and v != '' }
92
+ return parsed
93
+ end
94
+
95
+ # Basic auth boilerplate
96
+ def protected!
97
+ unless authorized?
98
+ response['WWW-Authenticate'] = %(Basic realm="Restricted Area")
99
+ throw(:halt, [401, "Not authorized\n"])
100
+ end
101
+ end
102
+
103
+ def authorized?
104
+ @auth ||= Rack::Auth::Basic::Request.new(request.env)
105
+ @auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials == [$CONFIG[:user], $CONFIG[:password]]
106
+ end
107
+
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,464 @@
1
+ /*! jQuery UI - v1.8.23 - 2012-08-15
2
+ * https://github.com/jquery/jquery-ui
3
+ * Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.tabs.css, jquery.ui.theme.css
4
+ * Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
5
+
6
+ /* Layout helpers
7
+ ----------------------------------*/
8
+ .ui-helper-hidden { display: none; }
9
+ .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
10
+ .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
11
+ .ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
12
+ .ui-helper-clearfix:after { clear: both; }
13
+ .ui-helper-clearfix { zoom: 1; }
14
+ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
15
+
16
+
17
+ /* Interaction Cues
18
+ ----------------------------------*/
19
+ .ui-state-disabled { cursor: default !important; }
20
+
21
+
22
+ /* Icons
23
+ ----------------------------------*/
24
+
25
+ /* states and images */
26
+ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
27
+
28
+
29
+ /* Misc visuals
30
+ ----------------------------------*/
31
+
32
+ /* Overlays */
33
+ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
34
+
35
+ /* IE/Win - Fix animation bug - #4615 */
36
+ .ui-accordion { width: 100%; }
37
+ .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
38
+ .ui-accordion .ui-accordion-li-fix { display: inline; }
39
+ .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
40
+ .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
41
+ .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
42
+ .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
43
+ .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
44
+ .ui-accordion .ui-accordion-content-active { display: block; }
45
+
46
+ .ui-autocomplete { position: absolute; cursor: default; }
47
+
48
+ /* workarounds */
49
+ * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
50
+
51
+ /*
52
+ * jQuery UI Menu 1.8.23
53
+ *
54
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
55
+ * Dual licensed under the MIT or GPL Version 2 licenses.
56
+ * http://jquery.org/license
57
+ *
58
+ * http://docs.jquery.com/UI/Menu#theming
59
+ */
60
+ .ui-menu {
61
+ list-style:none;
62
+ padding: 2px;
63
+ margin: 0;
64
+ display:block;
65
+ float: left;
66
+ }
67
+ .ui-menu .ui-menu {
68
+ margin-top: -3px;
69
+ }
70
+ .ui-menu .ui-menu-item {
71
+ margin:0;
72
+ padding: 0;
73
+ zoom: 1;
74
+ float: left;
75
+ clear: left;
76
+ width: 100%;
77
+ }
78
+ .ui-menu .ui-menu-item a {
79
+ text-decoration:none;
80
+ display:block;
81
+ padding:.2em .4em;
82
+ line-height:1.5;
83
+ zoom:1;
84
+ }
85
+ .ui-menu .ui-menu-item a.ui-state-hover,
86
+ .ui-menu .ui-menu-item a.ui-state-active {
87
+ font-weight: normal;
88
+ margin: -1px;
89
+ }
90
+
91
+ .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
92
+ .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
93
+ button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
94
+ .ui-button-icons-only { width: 3.4em; }
95
+ button.ui-button-icons-only { width: 3.7em; }
96
+
97
+ /*button text element */
98
+ .ui-button .ui-button-text { display: block; line-height: 1.4; }
99
+ .ui-button-text-only .ui-button-text { padding: .4em 1em; }
100
+ .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
101
+ .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
102
+ .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
103
+ .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
104
+ /* no icon support for input elements, provide padding by default */
105
+ input.ui-button { padding: .4em 1em; }
106
+
107
+ /*button icon element(s) */
108
+ .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
109
+ .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
110
+ .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
111
+ .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
112
+ .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
113
+
114
+ /*button sets*/
115
+ .ui-buttonset { margin-right: 7px; }
116
+ .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
117
+
118
+ /* workarounds */
119
+ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
120
+
121
+ .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
122
+ .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
123
+ .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
124
+ .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
125
+ .ui-datepicker .ui-datepicker-prev { left:2px; }
126
+ .ui-datepicker .ui-datepicker-next { right:2px; }
127
+ .ui-datepicker .ui-datepicker-prev-hover { left:1px; }
128
+ .ui-datepicker .ui-datepicker-next-hover { right:1px; }
129
+ .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
130
+ .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
131
+ .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
132
+ .ui-datepicker select.ui-datepicker-month-year {width: 100%;}
133
+ .ui-datepicker select.ui-datepicker-month,
134
+ .ui-datepicker select.ui-datepicker-year { width: 49%;}
135
+ .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
136
+ .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
137
+ .ui-datepicker td { border: 0; padding: 1px; }
138
+ .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
139
+ .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
140
+ .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
141
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
142
+
143
+ /* with multiple calendars */
144
+ .ui-datepicker.ui-datepicker-multi { width:auto; }
145
+ .ui-datepicker-multi .ui-datepicker-group { float:left; }
146
+ .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
147
+ .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
148
+ .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
149
+ .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
150
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
151
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
152
+ .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
153
+ .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
154
+
155
+ /* RTL support */
156
+ .ui-datepicker-rtl { direction: rtl; }
157
+ .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
158
+ .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
159
+ .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
160
+ .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
161
+ .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
162
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
163
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
164
+ .ui-datepicker-rtl .ui-datepicker-group { float:right; }
165
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
166
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
167
+
168
+ /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
169
+ .ui-datepicker-cover {
170
+ position: absolute; /*must have*/
171
+ z-index: -1; /*must have*/
172
+ filter: mask(); /*must have*/
173
+ top: -4px; /*must have*/
174
+ left: -4px; /*must have*/
175
+ width: 200px; /*must have*/
176
+ height: 200px; /*must have*/
177
+ }
178
+ .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
179
+ .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
180
+ .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
181
+ .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
182
+ .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
183
+ .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
184
+ .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
185
+ .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
186
+ .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
187
+ .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
188
+ .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
189
+ .ui-draggable .ui-dialog-titlebar { cursor: move; }
190
+
191
+ .ui-progressbar { height:2em; text-align: left; overflow: hidden; }
192
+ .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
193
+ .ui-resizable { position: relative;}
194
+ .ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
195
+ .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
196
+ .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
197
+ .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
198
+ .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
199
+ .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
200
+ .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
201
+ .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
202
+ .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
203
+ .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
204
+ .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
205
+
206
+ .ui-slider { position: relative; text-align: left; }
207
+ .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
208
+ .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
209
+
210
+ .ui-slider-horizontal { height: .8em; }
211
+ .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
212
+ .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
213
+ .ui-slider-horizontal .ui-slider-range-min { left: 0; }
214
+ .ui-slider-horizontal .ui-slider-range-max { right: 0; }
215
+
216
+ .ui-slider-vertical { width: .8em; height: 100px; }
217
+ .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
218
+ .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
219
+ .ui-slider-vertical .ui-slider-range-min { bottom: 0; }
220
+ .ui-slider-vertical .ui-slider-range-max { top: 0; }
221
+ .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
222
+ .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
223
+ .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
224
+ .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
225
+ .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
226
+ .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
227
+ .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
228
+ .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
229
+ .ui-tabs .ui-tabs-hide { display: none !important; }
230
+
231
+ /* Component containers
232
+ ----------------------------------*/
233
+ .ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; }
234
+ .ui-widget .ui-widget { font-size: 1em; }
235
+ .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; }
236
+ .ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; }
237
+ .ui-widget-content a { color: #222222/*{fcContent}*/; }
238
+ .ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; }
239
+ .ui-widget-header a { color: #222222/*{fcHeader}*/; }
240
+
241
+ /* Interaction states
242
+ ----------------------------------*/
243
+ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }
244
+ .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; }
245
+ .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; }
246
+ .ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; }
247
+ .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; }
248
+ .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; }
249
+ .ui-widget :active { outline: none; }
250
+
251
+ /* Interaction Cues
252
+ ----------------------------------*/
253
+ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; }
254
+ .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; }
255
+ .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; }
256
+ .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; }
257
+ .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; }
258
+ .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
259
+ .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
260
+ .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
261
+
262
+ /* Icons
263
+ ----------------------------------*/
264
+
265
+ /* states and images */
266
+ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
267
+ .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
268
+ .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; }
269
+ .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; }
270
+ .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; }
271
+ .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; }
272
+ .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; }
273
+ .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; }
274
+
275
+ /* positioning */
276
+ .ui-icon-carat-1-n { background-position: 0 0; }
277
+ .ui-icon-carat-1-ne { background-position: -16px 0; }
278
+ .ui-icon-carat-1-e { background-position: -32px 0; }
279
+ .ui-icon-carat-1-se { background-position: -48px 0; }
280
+ .ui-icon-carat-1-s { background-position: -64px 0; }
281
+ .ui-icon-carat-1-sw { background-position: -80px 0; }
282
+ .ui-icon-carat-1-w { background-position: -96px 0; }
283
+ .ui-icon-carat-1-nw { background-position: -112px 0; }
284
+ .ui-icon-carat-2-n-s { background-position: -128px 0; }
285
+ .ui-icon-carat-2-e-w { background-position: -144px 0; }
286
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
287
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
288
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
289
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
290
+ .ui-icon-triangle-1-s { background-position: -64px -16px; }
291
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
292
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
293
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
294
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
295
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
296
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
297
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
298
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
299
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
300
+ .ui-icon-arrow-1-s { background-position: -64px -32px; }
301
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
302
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
303
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
304
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
305
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
306
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
307
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
308
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
309
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
310
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
311
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
312
+ .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
313
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
314
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
315
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
316
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
317
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
318
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
319
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
320
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
321
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
322
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
323
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
324
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
325
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
326
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
327
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
328
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
329
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
330
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
331
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
332
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
333
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
334
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
335
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
336
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
337
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
338
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
339
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
340
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
341
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
342
+ .ui-icon-extlink { background-position: -32px -80px; }
343
+ .ui-icon-newwin { background-position: -48px -80px; }
344
+ .ui-icon-refresh { background-position: -64px -80px; }
345
+ .ui-icon-shuffle { background-position: -80px -80px; }
346
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
347
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
348
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
349
+ .ui-icon-folder-open { background-position: -16px -96px; }
350
+ .ui-icon-document { background-position: -32px -96px; }
351
+ .ui-icon-document-b { background-position: -48px -96px; }
352
+ .ui-icon-note { background-position: -64px -96px; }
353
+ .ui-icon-mail-closed { background-position: -80px -96px; }
354
+ .ui-icon-mail-open { background-position: -96px -96px; }
355
+ .ui-icon-suitcase { background-position: -112px -96px; }
356
+ .ui-icon-comment { background-position: -128px -96px; }
357
+ .ui-icon-person { background-position: -144px -96px; }
358
+ .ui-icon-print { background-position: -160px -96px; }
359
+ .ui-icon-trash { background-position: -176px -96px; }
360
+ .ui-icon-locked { background-position: -192px -96px; }
361
+ .ui-icon-unlocked { background-position: -208px -96px; }
362
+ .ui-icon-bookmark { background-position: -224px -96px; }
363
+ .ui-icon-tag { background-position: -240px -96px; }
364
+ .ui-icon-home { background-position: 0 -112px; }
365
+ .ui-icon-flag { background-position: -16px -112px; }
366
+ .ui-icon-calendar { background-position: -32px -112px; }
367
+ .ui-icon-cart { background-position: -48px -112px; }
368
+ .ui-icon-pencil { background-position: -64px -112px; }
369
+ .ui-icon-clock { background-position: -80px -112px; }
370
+ .ui-icon-disk { background-position: -96px -112px; }
371
+ .ui-icon-calculator { background-position: -112px -112px; }
372
+ .ui-icon-zoomin { background-position: -128px -112px; }
373
+ .ui-icon-zoomout { background-position: -144px -112px; }
374
+ .ui-icon-search { background-position: -160px -112px; }
375
+ .ui-icon-wrench { background-position: -176px -112px; }
376
+ .ui-icon-gear { background-position: -192px -112px; }
377
+ .ui-icon-heart { background-position: -208px -112px; }
378
+ .ui-icon-star { background-position: -224px -112px; }
379
+ .ui-icon-link { background-position: -240px -112px; }
380
+ .ui-icon-cancel { background-position: 0 -128px; }
381
+ .ui-icon-plus { background-position: -16px -128px; }
382
+ .ui-icon-plusthick { background-position: -32px -128px; }
383
+ .ui-icon-minus { background-position: -48px -128px; }
384
+ .ui-icon-minusthick { background-position: -64px -128px; }
385
+ .ui-icon-close { background-position: -80px -128px; }
386
+ .ui-icon-closethick { background-position: -96px -128px; }
387
+ .ui-icon-key { background-position: -112px -128px; }
388
+ .ui-icon-lightbulb { background-position: -128px -128px; }
389
+ .ui-icon-scissors { background-position: -144px -128px; }
390
+ .ui-icon-clipboard { background-position: -160px -128px; }
391
+ .ui-icon-copy { background-position: -176px -128px; }
392
+ .ui-icon-contact { background-position: -192px -128px; }
393
+ .ui-icon-image { background-position: -208px -128px; }
394
+ .ui-icon-video { background-position: -224px -128px; }
395
+ .ui-icon-script { background-position: -240px -128px; }
396
+ .ui-icon-alert { background-position: 0 -144px; }
397
+ .ui-icon-info { background-position: -16px -144px; }
398
+ .ui-icon-notice { background-position: -32px -144px; }
399
+ .ui-icon-help { background-position: -48px -144px; }
400
+ .ui-icon-check { background-position: -64px -144px; }
401
+ .ui-icon-bullet { background-position: -80px -144px; }
402
+ .ui-icon-radio-off { background-position: -96px -144px; }
403
+ .ui-icon-radio-on { background-position: -112px -144px; }
404
+ .ui-icon-pin-w { background-position: -128px -144px; }
405
+ .ui-icon-pin-s { background-position: -144px -144px; }
406
+ .ui-icon-play { background-position: 0 -160px; }
407
+ .ui-icon-pause { background-position: -16px -160px; }
408
+ .ui-icon-seek-next { background-position: -32px -160px; }
409
+ .ui-icon-seek-prev { background-position: -48px -160px; }
410
+ .ui-icon-seek-end { background-position: -64px -160px; }
411
+ .ui-icon-seek-start { background-position: -80px -160px; }
412
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
413
+ .ui-icon-seek-first { background-position: -80px -160px; }
414
+ .ui-icon-stop { background-position: -96px -160px; }
415
+ .ui-icon-eject { background-position: -112px -160px; }
416
+ .ui-icon-volume-off { background-position: -128px -160px; }
417
+ .ui-icon-volume-on { background-position: -144px -160px; }
418
+ .ui-icon-power { background-position: 0 -176px; }
419
+ .ui-icon-signal-diag { background-position: -16px -176px; }
420
+ .ui-icon-signal { background-position: -32px -176px; }
421
+ .ui-icon-battery-0 { background-position: -48px -176px; }
422
+ .ui-icon-battery-1 { background-position: -64px -176px; }
423
+ .ui-icon-battery-2 { background-position: -80px -176px; }
424
+ .ui-icon-battery-3 { background-position: -96px -176px; }
425
+ .ui-icon-circle-plus { background-position: 0 -192px; }
426
+ .ui-icon-circle-minus { background-position: -16px -192px; }
427
+ .ui-icon-circle-close { background-position: -32px -192px; }
428
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
429
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
430
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
431
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
432
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
433
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
434
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
435
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
436
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
437
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
438
+ .ui-icon-circle-check { background-position: -208px -192px; }
439
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
440
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
441
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
442
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
443
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
444
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
445
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
446
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
447
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
448
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
449
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
450
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
451
+
452
+
453
+ /* Misc visuals
454
+ ----------------------------------*/
455
+
456
+ /* Corner radius */
457
+ .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; }
458
+ .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; }
459
+ .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; }
460
+ .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; }
461
+
462
+ /* Overlays */
463
+ .ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; }
464
+ .ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; }