spontaneous 0.2.0.alpha1 → 0.2.0.alpha2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/Rakefile +42 -18
- data/application/css/min/14c2a35812c443001b15d8b12a4780f88c678035.css +1 -0
- data/application/js/vendor/jquery-ui-1.8.16.custom.min.js +0 -0
- data/application/js/vendor/jquery-ui-1.8.9.custom.min.js +0 -0
- data/bin/limit-upload +0 -0
- data/bin/spot +0 -0
- data/bin/unlimit-upload +0 -0
- data/lib/spontaneous.rb +2 -0
- data/lib/spontaneous/cli.rb +4 -0
- data/lib/spontaneous/cli/site.rb +2 -76
- data/lib/spontaneous/generators/site.rb +2 -1
- data/lib/spontaneous/generators/site/Capfile.tt +8 -0
- data/lib/spontaneous/media.rb +1 -1
- data/lib/spontaneous/plugins/application/paths.rb +4 -2
- data/lib/spontaneous/rack/assets.rb +1 -1
- data/lib/spontaneous/tasks/database.rake +27 -0
- data/lib/spontaneous/utils.rb +6 -0
- data/lib/spontaneous/utils/database.rb +18 -0
- data/lib/spontaneous/utils/database/mysql_dumper.rb +75 -0
- data/lib/spontaneous/version.rb +1 -1
- data/spontaneous.gemspec +8 -12
- data/test/functional/test_back.rb +1 -1
- data/test/unit/test_generators.rb +2 -1
- metadata +87 -83
- data/application/css/min/d1b54ff4847c613618267ca1c15658e2aee0a4e5.css +0 -1
data/Gemfile
CHANGED
@@ -30,7 +30,7 @@ gem 'simultaneous', :path => "/Users/garry/Dropbox/Development/spontaneous3/simu
|
|
30
30
|
# gem 'xapian-full', '~> 1.2.3'
|
31
31
|
# gem 'xapian-fu', '~> 1.3'
|
32
32
|
|
33
|
-
gem "mysql2", "~> 0.3.
|
33
|
+
gem "mysql2", "~> 0.3.11"#, :git => "git://github.com/brianmario/mysql2.git", :ref => "d3a96b8"
|
34
34
|
group :development do
|
35
35
|
# gem 'minitest', '~> 2.1.0'
|
36
36
|
# # gem 'pg', '~> 0.9.0'
|
data/Rakefile
CHANGED
@@ -31,6 +31,10 @@ def gemspec_file
|
|
31
31
|
"#{name}.gemspec"
|
32
32
|
end
|
33
33
|
|
34
|
+
def gem_gemspec_file
|
35
|
+
"#{name}.tmp.gemspec"
|
36
|
+
end
|
37
|
+
|
34
38
|
def gem_file
|
35
39
|
"#{name}-#{version}.gem"
|
36
40
|
end
|
@@ -39,6 +43,22 @@ def replace_header(head, header_name)
|
|
39
43
|
head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
|
40
44
|
end
|
41
45
|
|
46
|
+
def generate_gemspec(spec, files)
|
47
|
+
head, manifest, tail = spec.split(" # = MANIFEST =\n")
|
48
|
+
# replace name version and date
|
49
|
+
replace_header(head, :name)
|
50
|
+
replace_header(head, :version)
|
51
|
+
replace_header(head, :date)
|
52
|
+
#comment this out if your rubyforge_project has a different name
|
53
|
+
filelist = files.sort.
|
54
|
+
map { |file| " #{file}" }.
|
55
|
+
join("\n")
|
56
|
+
replace_header(head, :rubyforge_project)
|
57
|
+
manifest = " s.files = %w[\n#{filelist}\n ]\n"
|
58
|
+
spec = [head, manifest, tail].join(" # = MANIFEST =\n")
|
59
|
+
spec
|
60
|
+
end
|
61
|
+
|
42
62
|
#############################################################################
|
43
63
|
#
|
44
64
|
# Standard tasks
|
@@ -161,7 +181,7 @@ namespace :gem do
|
|
161
181
|
desc "Build #{gem_file} into the pkg directory"
|
162
182
|
task :build => :gemspec do
|
163
183
|
sh "mkdir -p pkg"
|
164
|
-
sh "gem build #{
|
184
|
+
sh "gem build #{gem_gemspec_file}"
|
165
185
|
sh "mkdir -p #{@project_dir}/pkg"
|
166
186
|
sh "cp #{gem_file} #{@project_dir}/pkg"
|
167
187
|
sh "mv #{gem_file} pkg"
|
@@ -172,36 +192,36 @@ namespace :gem do
|
|
172
192
|
task :gemspec => :assets do
|
173
193
|
# read spec file and split out manifest section
|
174
194
|
spec = File.read(gemspec_file)
|
175
|
-
head, manifest, tail = spec.split(" # = MANIFEST
|
176
|
-
|
177
|
-
#
|
178
|
-
replace_header(head, :
|
179
|
-
replace_header(head, :
|
180
|
-
|
181
|
-
#
|
182
|
-
replace_header(head, :rubyforge_project)
|
195
|
+
# head, manifest, tail = spec.split(" # = MANIFEST =\\n")
|
196
|
+
# # replace name version and date
|
197
|
+
# replace_header(head, :name)
|
198
|
+
# replace_header(head, :version)
|
199
|
+
# replace_header(head, :date)
|
200
|
+
# #comment this out if your rubyforge_project has a different name
|
201
|
+
# replace_header(head, :rubyforge_project)
|
183
202
|
|
184
203
|
# determine file list from git ls-files
|
185
204
|
files = `git ls-files`.
|
186
205
|
split("\n").
|
187
206
|
reject { |file| file =~ /^\./ }.
|
188
207
|
reject { |file| file =~ /^(rdoc|pkg)/ }
|
208
|
+
|
209
|
+
File.open(gemspec_file, 'w') { |io| io.write(generate_gemspec(spec, files)) }
|
210
|
+
|
189
211
|
compressed_assets = Dir["application/{css,js}/min/*.*"]
|
190
|
-
|
191
|
-
|
192
|
-
map { |file| " #{file}" }.
|
193
|
-
join("\n")
|
212
|
+
|
213
|
+
File.open(gem_gemspec_file, 'w') { |io| io.write(generate_gemspec(spec, files.concat(compressed_assets))) }
|
194
214
|
|
195
215
|
# piece file back together and write
|
196
|
-
manifest = " s.files = %w[
|
197
|
-
spec = [head, manifest, tail].join(" # = MANIFEST
|
198
|
-
File.open(gemspec_file, 'w') { |io| io.write(spec) }
|
216
|
+
# manifest = " s.files = %w[\\n#{files}\\n ]\\n"
|
217
|
+
# spec = [head, manifest, tail].join(" # = MANIFEST =\\n")
|
218
|
+
# File.open(gemspec_file, 'w') { |io| io.write(spec) }
|
199
219
|
puts "Updated #{gemspec_file}"
|
200
|
-
FileUtils.cp(
|
220
|
+
FileUtils.cp(gemspec_file, @project_dir)
|
201
221
|
end
|
202
222
|
|
203
223
|
desc "Bundle & compress assets"
|
204
|
-
task :assets => :
|
224
|
+
task :assets => :working_copy do
|
205
225
|
app_dir = Spontaneous.application_dir
|
206
226
|
bundles = {}
|
207
227
|
[Spontaneous::Rack::Assets::JavaScript, Spontaneous::Rack::Assets::CSS].each do |mod|
|
@@ -238,6 +258,10 @@ namespace :gem do
|
|
238
258
|
File.open(module_path, 'w') { |file| file.write(converted.join) }
|
239
259
|
end
|
240
260
|
|
261
|
+
task :working_copy => :validate do
|
262
|
+
# @working_dir = Dir.mktmpdir
|
263
|
+
end
|
264
|
+
|
241
265
|
desc "Validate #{gemspec_file}"
|
242
266
|
task :validate => :generate do
|
243
267
|
libfiles = Dir['lib/*'] - ["lib/#{name}.rb", "lib/#{name}"]
|
@@ -0,0 +1 @@
|
|
1
|
+
.shadow,#page-slots.slots .slot-entries .entry-wrap .dialogue,#page-slots.slots .slot-entries .entry-wrap.ui-sortable-helper>.entry-contents,#dialogue-wrap #dialogue-outer,#editing,#status-bar,.pop-over,.editing-panel .field-group.image .field .value img{-webkit-box-shadow:0px 3px 30px #cccccc;-moz-box-shadow:0px 3px 30px #cccccc}.clearfix:after,#top:after,.fields-preview:after,.fields-preview-text li:after,.fields-preview-image:after,#page-slots.slots .slot-tabs:after,#page-slots.slots .slot-entries .entry-wrap:after,#page-slots.slots .slot-entries .entry-wrap .entry-inner:after,#page-slots.slots .slot-entries .entry-wrap .slots .slot-tabs:after,#editing:after,.editing-panel .editing-fields:after,#editing #content-panel .tabs:after,#editing #content-panel #content-wrapper .facet-allowed .type-list:after{content:".";display:block;height:0;clear:both;visibility:hidden}.box-flexible,.pop-over>header>h3,.pop-over #popover-delete a,.editing-panel .field-group.image{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1}.no-select,.interface,.button,.preview-label,.fields-preview-text .name,.fields-preview-image li .name,#top #navigation li select,#top #switch-mode,#top #open-publish,#page-content #page-info .path,#page-content #page-info .path h3,#page-content #page-info .path h3.developer a,#page-content #page-info .buttons .status,#page-slots.slots .slot-tabs li,#page-slots.slots .slot-addable a,#page-slots.slots .slot-entries .entry-wrap .title-bar,#page-slots.slots .slot-entries .entry-wrap .dialogue .buttons a,#page-slots.slots .slot-entries .entry-wrap .slots .slot-tabs li,#page-slots.slots .slot-entries .entry-wrap .slots .slot-addable,#page-slots.slots .slot-entries .entry-wrap .slots .slot-addable a,#create-home-dialogue .instructions,#publishing-dialogue .change-list .actions,#publishing-dialogue .change-set .add span,#editing .field-group .name,.pop-over>header>h3,.pop-over .button.close,.pop-over .button.cancel,.pop-over .pop-insert-link label,.pop-over .link-page-browser .page-list .page,.pop-over .link-page-browser .page-ancestors ul li,.pop-over #popover-delete a.ok,.pop-over #popover-delete a.cancel,.editing-panel .editing-toolbar .buttons .save,.editing-panel .editing-toolbar .buttons .cancel,.editing-panel .field-group .name,.editing-panel .field-group.image .field .value .info,.field .markdown-editor .md-toolbar a,#conflicted-fields-dialogue .instructions,#conflicted-fields-dialogue .labels .diff,#add-alias-dialogue .instructions,.fields-preview-image li .value img{-moz-user-select:none;-webkit-user-select:none}.interface,.button,.preview-label,.fields-preview-text .name,.fields-preview-image li .name,#top #navigation li select,#top #switch-mode,#top #open-publish,#page-content #page-info .path,#page-content #page-info .path h3,#page-content #page-info .path h3.developer a,#page-content #page-info .buttons .status,#page-slots.slots .slot-tabs li,#page-slots.slots .slot-addable a,#page-slots.slots .slot-entries .entry-wrap .title-bar,#page-slots.slots .slot-entries .entry-wrap .dialogue .buttons a,#page-slots.slots .slot-entries .entry-wrap .slots .slot-tabs li,#page-slots.slots .slot-entries .entry-wrap .slots .slot-addable,#page-slots.slots .slot-entries .entry-wrap .slots .slot-addable a,#create-home-dialogue .instructions,#publishing-dialogue .change-list .actions,#publishing-dialogue .change-set .add span,#editing .field-group .name,.pop-over>header>h3,.pop-over .button.close,.pop-over .button.cancel,.pop-over .pop-insert-link label,.pop-over .link-page-browser .page-list .page,.pop-over .link-page-browser .page-ancestors ul li,.pop-over #popover-delete a.ok,.pop-over #popover-delete a.cancel,.editing-panel .editing-toolbar .buttons .save,.editing-panel .editing-toolbar .buttons .cancel,.editing-panel .field-group .name,.editing-panel .field-group.image .field .value .info,.field .markdown-editor .md-toolbar a,#conflicted-fields-dialogue .instructions,#conflicted-fields-dialogue .labels .diff,#add-alias-dialogue .instructions{font-family:"HelveticaNeue","Helvetica Neue","FrutigerLTStd-Roman","Frutiger LT Std";-webkit-font-smoothing:antialiased;text-transform:uppercase;font-size:10px;font-weight:bold}.button{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;text-align:center;height:17px;padding-top:2px;font-weight:bold;display:inline-block;text-decoration:none;background-color:#10b2fe;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#29bafe), to(#01a6f3));background-image:-moz-linear-gradient(top, #29bafe, #01a6f3);color:white !important}.button:hover{background-color:#ff6c03 !important;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff6c03), to(#e96100));background-image:-moz-linear-gradient(top, #ff6c03, #e96100);color:white !important}.button:hover{background-color:#ff6c03 !important;color:white !important}.button .key-combo{opacity:0.5;margin-left:4px}.button.cancel{background-color:#6b6b6b;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#787878), to(#5e5e5e));background-image:-moz-linear-gradient(top, #787878, #5e5e5e)}.button.cancel:hover{background-color:#ff6c03 !important;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff6c03), to(#e96100));background-image:-moz-linear-gradient(top, #ff6c03, #e96100);color:white !important}.controls-gradient,#top,#dialogue-wrap #dialogue-outer #dialogue-title,#status-bar,.pop-over>header{background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#404040), to(#222));background-image:-moz-linear-gradient(top, #404040, #222)}body,h1,h2,h3,h4,h5,h6,dd,dt,ul,ol,li{margin:0;padding:0;font-weight:normal;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body{margin-bottom:300px;background-color:white;font-family:"HelveticaNeue","Helvetica Neue","FrutigerLTStd-Light","Frutiger LT Std 45 Light"}ul,ol{list-style-type:none}a{text-decoration:none}.preview-label,.fields-preview-text .name,.fields-preview-image li .name{color:#333333}.preview-value,.fields-preview-text .value{font-size:11px;font-family:"HelveticaNeue","Helvetica Neue","FrutigerLTStd-Light","Frutiger LT Std 45 Light";line-height:13px;color:#666666;font-weight:normal}.container-padding,#top,#page-content #page-info,#page-content #page-fields .fields-preview,#page-slots.slots .fields-preview.depth-box,#page-slots.slots .slot-addable,#status-bar{padding-left:64px;padding-right:64px}img.missing{width:100%;height:50px;background:url("/@spontaneous/static/missing.png") 50% 50% no-repeat;border:none}.clear{clear:both}#top{display:-webkit-box;display:-moz-box;display:box;box-align:center;-webkit-box-align:center;-moz-box-align:center;position:fixed;height:31px;top:0;right:0;left:0}#top #navigation{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;font-size:11px;font-weight:bold;color:#999999;width:100%}#top #navigation li{padding-left:10px;padding-right:15px;background:url("/@spontaneous/static/location-arrow.png") right 0 no-repeat;float:left;display:block;font-weight:bold}#top #navigation li select{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;text-transform:none;font-size:11px;-webkit-appearance:none;cursor:pointer;display:block;background:url("/@spontaneous/static/select-arrow.png") 95% 50% no-repeat;border:none;outline:none;position:relative;padding-top:0px;padding-right:25px;height:31px;color:#ccc;font-weight:bold;width:100%}#top #navigation li select.unselected{color:#888;font-weight:normal;font-style:italic;max-width:80px}#top #navigation li a{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;cursor:pointer;color:#ddd;height:31px;padding-top:9px;display:block;background:url("/@spontaneous/static/select-arrow.png") right 50% no-repeat;padding-right:20px}#top #navigation li a:hover,#top #navigation li select:hover{color:white}#top #navigation li.root a{background-image:none;padding-right:5px}#top #navigation li:first-child{background-image:url("/@spontaneous/static/spontaneous.png"),url("/@spontaneous/static/location-arrow.png");background-position:0 70%, right 0;background-repeat:no-repeat;padding-right:12px}#top #navigation li:first-child a{padding-right:28px}#top #switch-mode,#top #open-publish{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;text-align:center;height:17px;padding-top:2px;font-weight:bold;display:inline-block;text-decoration:none;background-color:#10b2fe;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#29bafe), to(#01a6f3));background-image:-moz-linear-gradient(top, #29bafe, #01a6f3);color:white !important;display:-webkit-box;display:-moz-box;display:box;box-orient:vertical;-webkit-box-orient:vertical;-moz-box-orient:vertical;box-align:center;-webkit-box-align:center;-moz-box-align:center;margin:0;width:64px}#top #switch-mode:hover,#top #open-publish:hover{background-color:#ff6c03 !important;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff6c03), to(#e96100));background-image:-moz-linear-gradient(top, #ff6c03, #e96100);color:white !important}#top #open-publish{position:relative;margin-right:8px}#top #open-publish #publish-progress{position:absolute;left:4px;top:1px}#top #open-publish.progress{padding-left:20px;padding-right:20px;width:124px;background-color:#666;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#737373), to(#595959));background-image:-moz-linear-gradient(top, #737373, #595959);color:#999999}#top #open-publish.progress:hover{background-color:#ff6c03 !important;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff6c03), to(#e96100));background-image:-moz-linear-gradient(top, #ff6c03, #e96100);color:white !important}#content{position:fixed;overflow:auto;top:31px;right:0;bottom:0px;left:0}#content #data_pane,#content #preview_pane{border:none;display:block;position:absolute;left:0;right:0;top:0;bottom:0;width:100%;height:100%}#page-content #page-info{background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#3a3a3a), to(#222));background-image:-moz-linear-gradient(top, #3a3a3a, #222);height:54px;padding-top:10px;position:relative}#page-content #page-info h1,#page-content #page-info h3{position:relative}#page-content #page-info h1{font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue","FrutigerLTStd-Light","Frutiger LT Std";font-weight:100;color:white;font-size:24px;line-height:21px}#page-content #page-info h1 span{color:#888888}#page-content #page-info .path,#page-content #page-info .path h3,#page-content #page-info .path h3.developer a{cursor:pointer;color:#c1c1c1;font-size:11px;line-height:12px;text-transform:none}#page-content #page-info .path .uid,#page-content #page-info .path .developer{margin-left:32px;opacity:0.5}#page-content #page-info .path .uid.missing,#page-content #page-info .path .developer.missing{opacity:0.5}#page-content #page-info>.path{display:-webkit-box;display:-moz-box;display:box;position:absolute;bottom:12px}#page-content #page-info .path .edit{display:-webkit-box;display:-moz-box;display:box;box-orient:horizontal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;box-align:center;-webkit-box-align:center;-moz-box-align:center}#page-content #page-info .path .edit .input-error{display:block;position:relative;top:0;vertical-align:top;margin-left:8px}#page-content #page-info .path .edit .input-error input[type="text"],#page-content #page-info .path .edit .input-error span{height:16px;padding:4px}#page-content #page-info .path .edit .input-error input[type="text"]{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;font-weight:bold;width:400px;border:none;outline:none;vertical-align:top}#page-content #page-info .path .edit .input-error span{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;padding-left:8px;padding-right:8px;background-color:red;position:absolute;right:-1px;top:0;color:white}#page-content #page-info .path .edit input[type="text"].error{color:red}#page-content #page-info .path .edit .input-error.uid-input input[type="text"]{padding-left:1.05em;width:200px}#page-content #page-info .path .edit .button{display:block;margin-left:8px;padding-left:32px;padding-right:32px}#page-content #page-info .path .edit .button.cancel{padding-left:10px;padding-right:10px}#page-content #page-info .path .edit span,#page-content #page-info .path .edit a.path{display:block;position:relative}#page-content #page-info .path .edit a.path{color:#c1c1c1;margin-right:1px}#page-content #page-info .path .edit a.path:hover{color:white}#page-content #page-info .path .edit span{color:#bbbbbb;margin-right:1px}#page-content #page-info .path .edit .hash{color:#666;position:absolute;left:4px;font-weight:bold;padding-top:5px}#page-content #page-info .path h3:hover{color:white}#page-content #page-info .buttons{position:absolute;right:64px;top:16px}#page-content #page-info .buttons .button.publish{width:120px;height:32px;padding-top:8px;background-color:#666666;font-size:12px;position:relative}#page-content #page-info .buttons .button.publish:hover{background-color:#ff6c03}#page-content #page-info .buttons .status{vertical-align:top;display:inline-block;text-transform:none;font-weight:normal;margin:0;padding:0;color:#666666;font-size:10px;line-height:11px;position:relative;top:5px;margin-right:8px}#page-content #page-info .buttons .status strong{display:block;text-transform:uppercase}#page-content #page-fields .fields-preview{padding-top:8px;padding-bottom:8px;position:relative}#page-content #page-fields .fields-preview .overlay{position:absolute;left:0;right:0;top:0;bottom:0;border-style:solid;border-width:2px;border-color:transparent}#page-content #page-fields .fields-preview.hover .overlay{border-color:#10b2fe}.fields-preview{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#fff;cursor:pointer}.fields-preview .value p{margin:0 0 8px 0;padding:0}.fields-preview .value p:last-child{margin-bottom:0}.fields-preview .fields-preview-text{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fields-preview-text{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:580px;float:left;padding-right:100px;margin-right:16px}.fields-preview-text.empty{display:none}.fields-preview-text li{border-bottom:solid 1px #eee;padding-top:3px;padding-bottom:3px;display:block;line-height:13px;font-size:11px;font-family:"HelveticaNeue","Helvetica Neue","FrutigerLTStd-Light","Frutiger LT Std 45 Light";float:left;width:100%;position:relative;padding-left:100px}.fields-preview-text li .name,.fields-preview-text li .value{float:left}.fields-preview-text li:last-child{border-bottom:none}.fields-preview-text .name{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100px;right:100px;margin-left:-100px;padding-right:8px}.fields-preview-text .value a{color:#ff6c03}.fields-preview-text .value h1,.fields-preview-text .value h2{font-size:1.2em;font-weight:bold;margin-bottom:1em}.fields-preview-text .value h2{font-size:1em}.fields-preview-text .value ul,.fields-preview-text .value ol{display:block;padding-left:1.4em;margin-bottom:8px}.fields-preview-text .value ul li,.fields-preview-text .value ol li{display:list-item;list-style-position:outside;border:none;margin:0;padding:0;float:none}.fields-preview-text .value ul{list-style-type:disc !important}.fields-preview-text .value ol{list-style-type:decimal !important}.fields-preview-image{float:left;width:300px}.fields-preview-image.empty{display:none}.fields-preview-image li{float:left;display:block;margin-right:4px;margin-bottom:4px;position:relative}.fields-preview-image li .name{opacity:0.7;color:black;padding-left:4px;padding-top:2px;background-color:#efefef;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;left:0;right:0;bottom:0;top:auto;height:16px;z-index:4}.fields-preview-image li .value{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background-color:#efefef;max-height:90px;min-height:45px;min-width:90px;cursor:pointer;text-align:center;position:relative}.fields-preview-image li .value .waiting{position:absolute;display:block;left:0;right:0;text-align:center;top:30%;height:16px;z-index:3}.fields-preview-image li .value .image-drop{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;z-index:100;position:absolute;top:0;right:0;bottom:0;left:0;text-align:center}.fields-preview-image li .value .image-drop .drop-upload-outer{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:solid 1px white;position:absolute;margin:4px;height:6px;left:0;right:0;bottom:50%;padding:0 1px}.fields-preview-image li .value .image-drop .drop-upload-outer .drop-upload-inner{position:relative;margin-right:2px;top:1px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background-color:white;height:4px}.fields-preview-image li .value .image-drop.drop-active{border:solid 2px #10b2fe;cursor:copy}.fields-preview-image li .value .image-drop.drop-invalid{cursor:no-drop}.fields-preview-image li .value .image-drop.uploading{background-color:rgba(0,0,0,0.5)}.fields-preview-image li .value img{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;position:relative;max-height:90px}#page-slots.slots{height:100%}#page-slots.slots .slot-tabs{height:32px;vertical-align:top;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#666), to(#4d4d4d));background-image:-moz-linear-gradient(top, #666, #4d4d4d)}#page-slots.slots .slot-tabs li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:11px;color:#dddddd;display:block;float:left;height:100%;padding-left:16px;width:160px;padding-top:9px;cursor:pointer;border-left:solid 1px transparent;border-right:solid 1px #494949;position:relative}#page-slots.slots .slot-tabs li .down{display:none}#page-slots.slots .slot-tabs li:hover,#page-slots.slots .slot-tabs li.active{background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff7d14), to(#ff6c03));background-image:-moz-linear-gradient(top, #ff7d14, #ff6c03);background-color:#ff6c03;color:white;border-right-color:#ff6c03}#page-slots.slots .slot-tabs li:hover .down,#page-slots.slots .slot-tabs li.active .down{position:absolute;display:block;left:0;right:0;bottom:-7px;height:7px;background:url("/@spontaneous/static/orange-down-arrow.png") 50% 0 no-repeat;z-index:100;display:none}#page-slots.slots .slot-tabs li:first-child{padding-left:64px;width:224px}#page-slots.slots .slot-tabs li:first-child.active .down{padding-left:64px}#page-slots.slots .slot-tabs li.active+li:hover{border-left-color:#ea5700}#page-slots.slots .fields-preview.depth-box{background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#eee), to(#ddd));background-image:-moz-linear-gradient(top, #eee, #ddd);display:-webkit-box;display:-moz-box;display:box;border-top:solid 1px #CCC;position:relative;padding-top:12px;padding-bottom:5px}#page-slots.slots .fields-preview.depth-box .overlay{position:absolute;left:0;right:0;top:-1px;bottom:0;border-style:solid;border-width:2px;border-color:transparent}#page-slots.slots .fields-preview.depth-box.hover .overlay{border-color:#10b2fe}#page-slots.slots .fields-preview.depth-box .value{color:#555555}#page-slots.slots .fields-preview.depth-box .fields-preview-text{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;width:60%}#page-slots.slots .fields-preview.depth-box .fields-preview-image{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;width:40%}#page-slots.slots .slot-addable{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:url("/@spontaneous/static/diagonal-texture.png");border-top:solid 1px #cccccc;text-align:center;height:40px;padding-top:8px;position:relative}#page-slots.slots .slot-addable a{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;text-align:center;height:17px;padding-top:2px;font-weight:bold;display:inline-block;text-decoration:none;background-color:#10b2fe;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#29bafe), to(#01a6f3));background-image:-moz-linear-gradient(top, #29bafe, #01a6f3);color:white !important;padding-right:16px;padding-left:16px;margin-right:4px;margin-left:4px}#page-slots.slots .slot-addable a:hover{background-color:#ff6c03 !important;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff6c03), to(#e96100));background-image:-moz-linear-gradient(top, #ff6c03, #e96100);color:white !important}#page-slots.slots .slot-addable .alias{font-style:italic}#page-slots.slots .slot-addable .down{position:absolute;display:block;left:0;right:0;bottom:-18px;height:18px;background:url("/@spontaneous/static/slot-down-arrow.png") 50% 0 no-repeat;display:none}#page-slots.slots .slot-addable.floating{background:none;border-top:0;padding-left:10px;padding-right:10px;padding-top:5px;text-align:center;background:url("/@spontaneous/static/plus-box.png") 10px 7px no-repeat}#page-slots.slots .slot-addable.floating .down{display:none}#page-slots.slots .slot-instructions{font-weight:100;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue","FrutigerLTStd-Light","Frutiger LT Std";-webkit-font-smoothing:antialiased;position:absolute;left:0;right:0;top:64px;display:none;text-align:center;color:#ccc}#page-slots.slots .slot-addable.drop-active{outline:solid 2px #10b2fe}#page-slots.slots .slot-content.empty .slot-instructions{display:block}#page-slots.slots .slot-entries{padding-top:32px;padding-bottom:50%;position:relative}#page-slots.slots .slot-entries .fields-preview{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:4px;background:none;background-color:white}#page-slots.slots .slot-entries .entry-wrap{position:relative;margin-left:64px;margin-right:64px}#page-slots.slots .slot-entries .entry-wrap .entry-contents{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background-color:#eee;padding:2px}#page-slots.slots .slot-entries .entry-wrap .entry-spacer{height:32px;position:relative}#page-slots.slots .slot-entries .entry-wrap .entry-spacer.add-entry{background:url("/@spontaneous/static/diagonal-texture.png");margin:0 4px;cursor:pointer}#page-slots.slots .slot-entries .entry-wrap .entry-inner{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;position:relative}#page-slots.slots .slot-entries .entry-wrap .title-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;background-color:transparent;width:20px;color:rgba(255,255,255,0.4);padding-top:4px;text-transform:none;font-weight:normal;cursor:ns-resize;position:absolute;left:auto;right:-20px;top:-3px;height:auto}#page-slots.slots .slot-entries .entry-wrap .title-bar .actions{display:-webkit-box;display:-moz-box;display:box;box-orient:vertical;-webkit-box-orient:vertical;-moz-box-orient:vertical;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;top:4px}#page-slots.slots .slot-entries .entry-wrap .title-bar .actions a{background:url("/@spontaneous/static/item-buttons-highlight.png") 0 0 no-repeat;display:block;width:15px;height:15px;cursor:pointer}#page-slots.slots .slot-entries .entry-wrap .title-bar .actions .delete{background-position:-61px 0}#page-slots.slots .slot-entries .entry-wrap .title-bar .actions .delete:hover{background-position:-61px -20px}#page-slots.slots .slot-entries .entry-wrap .title-bar .actions .visibility{background-position:-32px 0}#page-slots.slots .slot-entries .entry-wrap .title-bar .actions .visibility:hover{background-position:-32px -20px}#page-slots.slots .slot-entries .entry-wrap .dialogue{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;position:absolute;top:20px;left:4px;right:4px;background-color:rgba(0,0,0,0.9);z-index:30;padding:32px;color:white}#page-slots.slots .slot-entries .entry-wrap .dialogue .buttons a{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;text-align:center;height:17px;padding-top:2px;font-weight:bold;display:inline-block;text-decoration:none;background-color:#ccc;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#d9d9d9), to(#bfbfbf));background-image:-moz-linear-gradient(top, #d9d9d9, #bfbfbf);color:white !important;padding-left:16px;padding-right:16px}#page-slots.slots .slot-entries .entry-wrap .dialogue .buttons a:hover{background-color:#ff6c03 !important;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff6c03), to(#e96100));background-image:-moz-linear-gradient(top, #ff6c03, #e96100);color:white !important}#page-slots.slots .slot-entries .entry-wrap .dialogue .buttons a+a{margin-left:8px}#page-slots.slots .slot-entries .entry-wrap .dialogue .buttons a.default{background-color:#10b2fe}#page-slots.slots .slot-entries .entry-wrap .white-bg,#page-slots.slots .slot-entries .entry-wrap .grey-bg{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;left:0px;right:40%;top:0;bottom:0px;margin:0;background-color:white;z-index:1}#page-slots.slots .slot-entries .entry-wrap .white-bg{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;border-width:2px;border-color:transparent;border-style:solid}#page-slots.slots .slot-entries .entry-wrap .white-bg.active{border-color:#10b2fe}#page-slots.slots .slot-entries .entry-wrap .grey-bg{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;left:auto;width:40%;right:0;background-color:#eee;margin-left:0}#page-slots.slots .slot-entries .entry-wrap .entry{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;z-index:2;float:left}#page-slots.slots .slot-entries .entry-wrap .entry .fields-preview{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:4px;background:none;border-color:white}#page-slots.slots .slot-entries .entry-wrap .entry .fields-preview-text{width:100%;position:relative;margin-bottom:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#page-slots.slots .slot-entries .entry-wrap .entry .fields-preview-text li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#page-slots.slots .slot-entries .entry-wrap .slots{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;padding-left:0;float:left;width:40%;z-index:2;left:1px}#page-slots.slots .slot-entries .entry-wrap .slots .slot-tabs{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:24px;display:block;margin-right:1px;width:100%;background:none}#page-slots.slots .slot-entries .entry-wrap .slots .slot-tabs li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;width:25%;height:100%;display:block;padding-left:8px;padding-top:6px;cursor:pointer;border-right:solid 1px #b7b7b7;background-color:#c4c4c4;color:#666666}#page-slots.slots .slot-entries .entry-wrap .slots .slot-tabs li:nth-child(4){float:right;position:relative;border-right:none}#page-slots.slots .slot-entries .entry-wrap .slots .slot-tabs li:hover{background-color:#ff6c03;border-right-color:#ff6c03;color:#fff}#page-slots.slots .slot-entries .entry-wrap .slots .slot-tabs li.active:hover,#page-slots.slots .slot-entries .entry-wrap .slots .slot-tabs li.active{background:#ddd none;border-right:solid 1px #ddd;color:#666666}#page-slots.slots .slot-entries .entry-wrap .slots .slot-tabs li:hover+li:nth-child(4){border-left-color:#ff6c03}#page-slots.slots .slot-entries .entry-wrap .slots .slot-tabs li:last-child{border-right:none}#page-slots.slots .slot-entries .entry-wrap .slots .slot-tabs li .down{display:none}#page-slots.slots .slot-entries .entry-wrap .slots .slot-addable{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:none;background:none;background-color:#ddd;height:33px;padding:8px 8px 0 8px}#page-slots.slots .slot-entries .entry-wrap .slots .slot-addable a{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;text-align:center;height:17px;padding-top:2px;font-weight:bold;display:inline-block;text-decoration:none;background-color:#6b6b6b;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#787878), to(#5e5e5e));background-image:-moz-linear-gradient(top, #787878, #5e5e5e);color:white !important;padding-left:8px;padding-right:8px}#page-slots.slots .slot-entries .entry-wrap .slots .slot-addable a:hover{background-color:#ff6c03 !important;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff6c03), to(#e96100));background-image:-moz-linear-gradient(top, #ff6c03, #e96100);color:white !important}#page-slots.slots .slot-entries .entry-wrap .slots .slot-addable a+a{margin-left:8px}#page-slots.slots .slot-entries .entry-wrap .slots .slot-addable .alias{font-style:italic}#page-slots.slots .slot-entries .entry-wrap .slots .slot-addable .down{display:none}#page-slots.slots .slot-entries .entry-wrap .slots .slot-entries{padding-top:8px}#page-slots.slots .slot-entries .entry-wrap .slots .entry-wrap.depth-2{margin-left:8px;margin-right:20px;margin-bottom:8px}#page-slots.slots .slot-entries .entry-wrap .slots .entry-wrap.depth-2 .white-bg{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;width:auto;right:0}#page-slots.slots .slot-entries .entry-wrap .slots .entry-wrap.depth-2 .grey-bg{display:none}#page-slots.slots .slot-entries .entry-wrap .slots .entry-wrap.depth-2 .entry-contents{padding:0}#page-slots.slots .slot-entries .entry-wrap .slots .entry-wrap.depth-2 .entry-spacer{height:8px}#page-slots.slots .slot-entries .entry-wrap .slots .entry-wrap.depth-2:last-child .entry-spacer{outline:solid 1px red;display:none}#page-slots.slots .slot-entries .entry-wrap .slots .entry-wrap.depth-2 .entry{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;width:100%}#page-slots.slots .slot-entries .entry-wrap .slots .entry-wrap.depth-2 .entry .fields-preview{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:4px;background:none;width:100%;display:block}#page-slots.slots .slot-entries .entry-wrap .slots .entry-wrap.depth-2 .entry .fields-preview .fields-preview-text{width:100%;margin-bottom:0}#page-slots.slots .slot-entries .entry-wrap .slots .entry-wrap.depth-2 .entry .fields-preview .fields-preview-image{float:none;width:100%;margin-left:0;margin-top:4px;padding-top:4px}#page-slots.slots .slot-entries .entry-wrap .slots .entry-wrap.depth-2 .entry .fields-preview .fields-preview-text.empty+.fields-preview-image{margin-top:0}#page-slots.slots .slot-entries .entry-wrap .slots .entry-wrap.depth-2 .entry+.entry{margin-top:8px}#page-slots.slots .slot-entries .entry-wrap .alias-target{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;padding:4px;background-color:#444;color:white;font-size:14px;font-style:italic}#page-slots.slots .slot-entries .entry-wrap .alias-target.no-fields{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#page-slots.slots .slot-entries .entry-wrap .alias-target:hover{color:#ff6c03}#page-slots.slots .slot-entries .entry-wrap .alias-target .icon-wrap,#page-slots.slots .slot-entries .entry-wrap .alias-target a{display:inline-block;vertical-align:top;cursor:pointer}#page-slots.slots .slot-entries .entry-wrap .alias-target .icon-wrap{margin-right:8px}#page-slots.slots .slot-entries .entry-wrap.no-boxes .white-bg{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;right:0}#page-slots.slots .slot-entries .entry-wrap.no-boxes .grey-bg{display:none}#page-slots.slots .slot-entries .entry-wrap.no-boxes .entry{width:100%}#page-slots.slots .slot-entries .entry-wrap.no-boxes .entry .fields-preview{display:-webkit-box;display:-moz-box;display:box}#page-slots.slots .slot-entries .entry-wrap.no-boxes .entry .fields-preview .fields-preview-text{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;width:60%;padding-right:0}#page-slots.slots .slot-entries .entry-wrap.no-boxes .entry .fields-preview .fields-preview-image{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;width:40%}#page-slots.slots .slot-entries .entry-wrap.hidden{opacity:0.4 !important}#page-slots.slots .slot-entries .entry-wrap.editing.hidden{opacity:1 !important}#page-slots.slots .slot-entries .entry-wrap.page .white-bg{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;right:0}#page-slots.slots .slot-entries .entry-wrap.page .page-title{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;background-color:#444;padding:4px}#page-slots.slots .slot-entries .entry-wrap.page .page-title a{cursor:pointer;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue","FrutigerLTStd-Light","Frutiger LT Std";font-weight:100;color:#fff;font-size:16px;line-height:normal}#page-slots.slots .slot-entries .entry-wrap.page .page-title a:hover{color:#ff6c03}#page-slots.slots .slot-entries .entry-wrap.boxes.depth-1 .entry{width:60%}#page-slots.slots .slot-entries .entry-wrap.boxes.depth-1 .entry .fields-preview.depth-1 .fields-preview-text{margin-right:-110px;padding-right:110px}#page-slots.slots .slot-entries .entry-wrap.boxes.depth-1 .entry .fields-preview.depth-1 .fields-preview-image{width:94px;float:right}#page-slots.slots .slot-entries .entry-wrap.boxes.depth-1 .entry .fields-preview.depth-1 .fields-preview-image img{max-width:94px}#page-slots.slots .slot-entries .entry-wrap.boxes.depth-1 .entry .fields-preview.depth-1 .fields-preview-image li{margin-right:0}#page-slots.slots .slot-entries .entry-wrap.boxes.depth-1 .entry .fields-preview.depth-1 .fields-preview-image li:last-child{margin-bottom:0}#dialogue-overlay{position:fixed;left:0;right:0;top:0;bottom:0;background-color:rgba(255,255,255,0.9);z-index:1000}#dialogue-wrap{position:fixed;left:0;right:0;bottom:0;top:0;overflow:auto;z-index:1001}#dialogue-wrap #dialogue-outer{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;display:-webkit-box;display:-moz-box;display:box;box-orient:vertical;-webkit-box-orient:vertical;-moz-box-orient:vertical;background-color:#222;position:relative;top:50px;margin:0 auto;margin-bottom:50px}#dialogue-wrap #dialogue-outer #dialogue-title{font-weight:100;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue","FrutigerLTStd-Light","Frutiger LT Std";-webkit-font-smoothing:antialiased;-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;height:26px;color:#fff;padding:0 8px 0 10px;padding-top:6px}#dialogue-wrap #dialogue-outer #dialogue-body{overflow:auto;margin:0 2px;background-color:#fff}#dialogue-wrap #dialogue-outer #dialogue-control-wrap #dialogue-controls{position:relative}#dialogue-wrap #dialogue-outer #dialogue-control-wrap #dialogue-controls .dialogue-actions{display:-webkit-box;display:-moz-box;display:box}#dialogue-wrap #dialogue-outer #dialogue-control-wrap #dialogue-controls .dialogue-actions .spacer{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1}#dialogue-wrap #dialogue-outer #dialogue-control-wrap #dialogue-controls .dialogue-actions .button{display:block;width:128px;margin:8px 0}#dialogue-wrap #dialogue-outer #dialogue-control-wrap #dialogue-controls .dialogue-actions .button+.button{margin-left:8px}#dialogue-wrap #dialogue-outer #dialogue-control-wrap #dialogue-controls .dialogue-actions .button:last-child{margin-right:8px}#dialogue-wrap #dialogue-outer #dialogue-control-wrap #dialogue-controls .dialogue-actions .cancel{background-color:#6b6b6b;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#787878), to(#5e5e5e));background-image:-moz-linear-gradient(top, #787878, #5e5e5e)}#dialogue-wrap #dialogue-outer #dialogue-control-wrap #dialogue-controls .dialogue-actions .cancel:hover{background-color:#ff6c03 !important;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff6c03), to(#e96100));background-image:-moz-linear-gradient(top, #ff6c03, #e96100);color:white !important}#dialogue-wrap #dialogue-outer #dialogue-control-wrap #dialogue-controls .dialogue-actions .save{background-color:#10b2fe;float:right}#dialogue-wrap #dialogue-outer #dialogue-control-wrap #dialogue-controls .dialogue-actions .disabled,#dialogue-wrap #dialogue-outer #dialogue-control-wrap #dialogue-controls .dialogue-actions .disabled:hover{background-color:#333333 !important;color:#6b6b6b !important}.dialogue-wrapper,#editing{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;background-color:#cccccc;width:980px}#create-home-dialogue .instructions{margin:0;background-color:#f2f2f2;color:#666;padding:4px 8px;margin-bottom:8px}#create-home-dialogue .instructions .button{padding-left:2px;padding-right:2px}#create-home-dialogue .type{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;display:-webkit-box;display:-moz-box;display:box;cursor:pointer;padding:4px 8px;background-color:#fbfbfb;border:solid 1px #f2f2f2;margin:8px;margin-top:0}#create-home-dialogue .type:hover{background-color:#666;color:#fff}#create-home-dialogue .type.selected{background-color:#10b2fe;color:#fff}#publishing-dialogue{min-height:200px;max-height:90%;position:relative;display:-webkit-box;display:-moz-box;display:box;box-orient:horizontal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal}#publishing-dialogue .change-list{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;width:50%}#publishing-dialogue .change-list#changes{border-right:solid 2px #000}#publishing-dialogue .change-list .actions{display:-webkit-box;display:-moz-box;display:box;box-orient:horizontal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;box-align:center;-webkit-box-align:center;-moz-box-align:center;color:#666;background-color:#f2f2f2;padding:4px 8px}#publishing-dialogue .change-list .actions div{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1}#publishing-dialogue .change-list .actions .button{padding-left:8px;padding-right:8px}#publishing-dialogue .change-list .change-sets{overflow:auto}#publishing-dialogue .change-list .change-sets .instructions{font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue","FrutigerLTStd-Light","Frutiger LT Std";color:#999;text-align:center;position:relative;padding-top:50px}#publishing-dialogue .publish-up-to-date{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;position:absolute;left:0;right:0;top:0;bottom:0;margin:60px 200px 60px 200px;text-align:center;background-color:#333;opacity:0.95;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue","FrutigerLTStd-Light","Frutiger LT Std";font-size:24px;padding-top:24px;color:#fff}#publishing-dialogue .change-set{cursor:pointer;padding:8px 8px 0 8px}#publishing-dialogue .change-set .inner{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;display:-webkit-box;display:-moz-box;display:box;border:solid 3px transparent;background-color:#fbfbfb;border:solid 1px #f2f2f2}#publishing-dialogue .change-set .pages{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1}#publishing-dialogue .change-set .pages .title{padding:4px 8px;color:#333}#publishing-dialogue .change-set .pages .title+.title{border-top:solid 1px #f2f2f2}#publishing-dialogue .change-set .pages .url{font-size:10px;color:#666}#publishing-dialogue .change-set .add{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;display:-webkit-box;display:-moz-box;display:box;box-pack:center;-webkit-box-pack:center;-moz-box-pack:center;box-align:center;-webkit-box-align:center;-moz-box-align:center;width:64px;background-color:#f2f2f2;position:relative;color:#999}#publishing-dialogue .change-set .add span{font-size:40px;position:relative;top:-5px}#publishing-dialogue .change-set .add:hover{background-color:#10b2fe;color:#fff}#publishing-dialogue .change-set .titles a{display:block;margin-bottom:2px}#publishing-dialogue .change-set .titles a span{font-size:11px;margin-left:1em}#publishing-dialogue .change-set:hover{border-color:#10b2fe}#editing{z-index:1001}#editing .button{background-color:#42ab06}#editing .field-group-bg{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;position:absolute;margin:8px;top:0px;bottom:0px}#editing .field-group-bg.text{left:0;right:343px}#editing .field-group-bg.image{left:629px;right:0}#editing input[type="submit"]{visibility:hidden;position:absolute;width:0;height:0}#editing .field-group{position:relative;z-index:1010;float:left;padding:8px}#editing .field-group .field+.field{margin-top:8px}#editing .field-group .name{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#d1d1d1;display:block;height:24px;padding-left:8px;padding-top:6px}#editing .field-group .value{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;border:solid 2px transparent;padding:6px;background-color:white}#editing .field-group .value textarea,#editing .field-group .value input[type="text"]{font-family:"Lucida Grande";font-size:11px;line-height:14px;outline:none}#editing .field-group .value input[type="file"]{visibility:hidden;position:absolute;width:0;height:0}#editing .field-group .value textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:none;width:100%;padding-right:64px}#editing .field-group .value input[type="text"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;border:none;display:block;font-weight:bold}#editing .field-group .field.focus .name{background-color:#42ab06;color:white}#editing .field-group .field.focus .value{border-color:#42ab06}#editing .field-group.image{width:327px}#editing .field-group.image .field .value{position:relative;min-height:70px}#editing .field-group.image .field .value img{max-width:50%}#editing .field-group.image .field .value img.empty{width:50%;height:100px}#editing .field-group.image .field .value .actions{margin:8px;margin-left:0;position:absolute;top:0;right:0;bottom:0;width:109px}#editing .field-group.image .field .value .actions .button{display:block}#editing .field-group.image .field .value .actions .button.clear{color:#5b5b5b;background-color:#d1d1d1;position:absolute;bottom:0;width:100%}#editing .field-group.image .field .value .landscape img{max-width:100%;max-height:50%}#editing .field-group.image .field .value .landscape .actions{width:auto;display:block;margin:8px 0 0 0;position:relative}#editing .field-group.image .field .value .landscape .actions .button{display:inline-block;width:109px}#editing .field-group.image .field .value .landscape .actions .button.clear{position:static}#editing .field-group.image .field .value .landscape .actions .button.change{position:absolute;right:0}#status-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:fixed;height:32px;bottom:0;left:0;right:0;background-color:#cccccc;z-index:100000}#status-bar #progress-container{position:relative;top:12px;font-size:10px;color:#888888}#status-bar #progress-container #progress-bars{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;position:relative;width:50%;height:8px;border:solid 1px #151515}#status-bar #progress-container #progress-bars .bar,#status-bar #progress-container #progress-bars #editing #url-panel,#editing #status-bar #progress-container #progress-bars #url-panel,#status-bar #progress-container #progress-bars #editing #content-panel .tabs .tab,#editing #content-panel .tabs #status-bar #progress-container #progress-bars .tab,#status-bar #progress-container #progress-bars #editing #content-panel #content-wrapper .field-wrap .field.edit .name,#editing #content-panel #content-wrapper .field-wrap .field.edit #status-bar #progress-container #progress-bars .name,#status-bar #progress-container #progress-bars #editing #content-panel #content-wrapper .field-wrap .field.edit .value input.input,#editing #content-panel #content-wrapper .field-wrap .field.edit .value #status-bar #progress-container #progress-bars input.input,#status-bar #progress-container #progress-bars #editing #content-panel #content-wrapper .page-entry-link h3,#editing #content-panel #content-wrapper .page-entry-link #status-bar #progress-container #progress-bars h3{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;height:8px;padding:0;background-color:black;position:absolute;top:0;left:0;opacity:0.7}#status-bar #progress-container #progress-bars #progress-individual{opacity:0.3}#status-bar #progress-container #progress-bars #progress-total{background-color:#fff}#status-bar #progress-container #progress-name{position:absolute;right:16px;top:-1px;text-align:right}#status-bar #progress-container #progress-stats{position:absolute;left:50%;top:-1px;margin-left:10px}#script-load-splash{background:url("/@spontaneous/static/splash.png") 0 0 no-repeat;width:318px;height:43px;position:relative;margin:0 auto;top:150px}#script-load-splash #script-load-progress{-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px;position:relative;left:-31px;top:64px;border:solid 1px #ddd;padding:1px;width:380px;height:4px}#script-load-splash #script-load-progress div{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;background-color:#ddd;height:4px}#script-load-splash #script-load-progress.synchronous{border:none;color:#ddd;top:44px;left:47px}#script-load-splash.loaded{background-position:0 -80px}.icon-wrap{overflow:hidden;position:relative}.icon-wrap img{position:relative}.pop-over{display:inline-block;background-color:#222;margin:0px;-webkit-padding-start:0;-moz-padding-start:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;position:absolute;opacity:0px;z-index:1000000}.pop-over>div{margin:0px 8px 8px 8px !important;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.pop-over>header{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;position:relative;padding:8px 8px 8px 8px}.pop-over>header>h3{text-transform:none;margin:0px;margin-bottom:0;color:white;font-size:14px;line-height:22px;display:block;text-align:center;font-weight:normal}.pop-over header .button{min-width:50px}.pop-over .po-button.back{position:relative;padding-left:5px;margin-left:8px}.pop-over .back.black>.pointer{background-image:-webkit-gradient(linear, left top, right bottom, from(#7d828c), color-stop(0.5, #303749), color-stop(0.5, #121a2e), to(#121a2e));border-left:solid 1px rgba(79,79,79,0.75);border:solid 1px rgba(79,79,79,0.75);-webkit-border-radius:6px 0 6px 0;-moz-border-radius:6px 0 6px 0;border-radius:6px 0 6px 0;height:19px;width:19px;display:inline-block;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg);-webkit-mask-image:-webkit-gradient(linear, left bottom, right top, from(#000), color-stop(0.5, #000), color-stop(0.5, transparent), to(transparent));position:absolute;left:-7px;top:1px;-webkit-background-clip:content;-moz-background-clip:content;background-clip:content}.pop-over .back:hover .pointer,.pop-over .back.hover .pointer{background-image:-webkit-gradient(linear, left top, right bottom, from(#4286f5), color-stop(0.5, #4286f5), color-stop(0.5, #194fdb), to(#194fdb))}.pop-over .button{min-width:100px}.pop-over .button.close,.pop-over .button.cancel{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;text-align:center;height:17px;padding-top:2px;font-weight:bold;display:inline-block;text-decoration:none;background-color:#404040;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#4d4d4d), to(#333));background-image:-moz-linear-gradient(top, #4d4d4d, #333);color:white !important;min-width:50px}.pop-over .button.close:hover,.pop-over .button.cancel:hover{background-color:#ff6c03 !important;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff6c03), to(#e96100));background-image:-moz-linear-gradient(top, #ff6c03, #e96100);color:white !important}.pop-over .po-button.forward{position:relative;padding-right:5px;margin-right:8px}.pop-over .forward.black>.pointer{background-image:-webkit-gradient(linear, left top, right bottom, from(#7d828c), color-stop(0.5, #303749), color-stop(0.5, #121a2e), to(#121a2e));border-left:solid 1px rgba(79,79,79,0.75);border:solid 1px rgba(79,79,79,0.75);border-top-left-radius:6px;border-bottom-right-radius:6px;height:19px;width:19px;display:inline-block;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg);-webkit-mask-image:-webkit-gradient(linear, right top, left bottom, from(#000), color-stop(0.5, #000), color-stop(0.5, transparent), to(transparent));position:absolute;right:-7px;top:1px;-webkit-background-clip:content;-moz-background-clip:content;background-clip:content}.pop-over .forward:hover>.pointer,.pop-over .forward.hover>.pointer{background-image:-webkit-gradient(linear, left top, right bottom, from(#4286f5), color-stop(0.5, #4286f5), color-stop(0.5, #194fdb), to(#194fdb))}.pop-over header{display:-webkit-box;display:-moz-box;display:box;box-orient:horizontal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;box-align:stretch;-webkit-box-align:stretch;-moz-box-align:stretch}.pop-over .menuHandle{position:absolute;top:-14px;left:8px;height:30px !important;width:30px;border:solid 2px #4f4f4f;border-bottom:none;border-right:none;background-color:#404040 !important;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg);-webkit-transform:rotate(45deg);-webkit-mask-image:-webkit-gradient(linear, left top, right bottom, from(#000), color-stop(0.5, #000), color-stop(0.5, transparent), to(transparent))}.pop-over .hide{-webkit-transform:translate3d(-1000px, 0px);-moz-transform:translate3d(-1000px, 0px);transform:translate3d(-1000px, 0px)}.pop-over .show{-webkit-transform:translate3d(0px, 0px);-moz-transform:translate3d(0px, 0px);transform:translate3d(0px, 0px)}.pop-over .fade-in{-webkit-transition:opacity 0.25s ease-in-out;-moz-transition:opacity 0.25s ease-in-out;transition:opacity 0.25s ease-in-out;opacity:1}.pop-over .fade-out{-webkit-transition:opacity 0.25s ease-in-out;-moz-transition:opacity 0.25s ease-in-out;transition:opacity 0.25s ease-in-out;opacity:0}.pop-over ul.dropdown-menu-basic,.pop-over .dropdown-menu-basic li{margin:0px;padding:0px;list-style:none}.pop-over .dropdown-menu-basic li{border-bottom:1px solid #666666;font-size:18px !important;line-height:36px;padding:0px 8px}.pop-over .dropdown-menu-basic li:hover,.pop-over .dropdown-menu-basic li.hover{background-image:-webkit-gradient(linear, left top, left bottom, from(#4286f5), to(#194fdb));color:white}.pop-over .dropdown-menu-basic li:first-of-type{-webkit-border-top-right-radius:5px;-moz-border-radius-topright:5px;border-top-right-radius:5px;-webkit-border-top-left-radius:5px;-moz-border-radius-topleft:5px;border-top-left-radius:5px}.pop-over .dropdown-menu-basic li:last-of-type{-webkit-border-bottom-right-radius:5px;-moz-border-radius-bottomright:5px;border-bottom-right-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-bottomleft:5px;border-bottom-left-radius:5px}.pop-over .buttons{display:-webkit-box;display:-moz-box;display:box;box-orient:horizontal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;box-pack:justify;-webkit-box-pack:justify;-moz-box-pack:justify}.pop-over .buttons a{display:block}.pop-over .pop-insert-link p{margin-top:0;margin-bottom:8px}.pop-over .pop-insert-link label{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;display:block;background-color:#404040;color:#fff;padding:0}.pop-over .pop-insert-link label span{display:block;padding:4px 0 4px 4px}.pop-over .pop-insert-link input,.pop-over .pop-insert-link textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;border:none;display:block;outline:none;width:100%;padding:4px;margin:0}.pop-over .link-page-browser{margin-bottom:8px}.pop-over .link-page-browser label{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.pop-over .link-page-browser .page-list{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;background-color:#fff;padding:8px 0}.pop-over .link-page-browser .page-list .page{cursor:pointer;color:#333;text-transform:none;padding:4px 4px;padding-right:80px;position:relative;font-size:11px;border-bottom:solid 1px #eee}.pop-over .link-page-browser .page-list .page:last-child{border-bottom:none}.pop-over .link-page-browser .page-list .page:hover{background-color:#999;color:#fff}.pop-over .link-page-browser .page-list .page.active{background-color:#10b2fe;color:white}.pop-over .link-page-browser .page-list .page.active span:hover{background-color:#01a6f3}.pop-over .link-page-browser .page-list .page span{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;display:block;position:absolute;right:0;top:0;bottom:0;font-size:16px;line-height:13px;font-weight:normal;width:80px;margin:2px;background:url("/@spontaneous/static/page-browser-next.png") right 1px no-repeat}.pop-over .link-page-browser .page-list .page span:hover{background-position:right -39px;background-color:#8d8d8d}.pop-over .link-page-browser .page-list .page span:active{background-color:#10b2fe}.pop-over .link-page-browser .page-ancestors{background-color:#4d4d4d}.pop-over .link-page-browser .page-ancestors ul{display:-webkit-box;display:-moz-box;display:box;box-orient:horizontal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;margin:0;padding:0;padding:4px}.pop-over .link-page-browser .page-ancestors ul li{font-size:10px;text-transform:none;cursor:pointer}.pop-over .link-page-browser .page-ancestors ul li,.pop-over .link-page-browser .page-ancestors ul li a{color:#ccc}.pop-over .link-page-browser .page-ancestors ul li span{display:inline-block;color:#777;margin:0 2px;padding:0}.pop-over .link-page-browser .page-ancestors ul li:hover a{color:#fff}.pop-over .link-page-browser .page-ancestors ul li:active a{color:#10b2fe}.pop-over #popover-delete{display:-webkit-box;display:-moz-box;display:box;box-orient:horizontal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;box-pack:justify;-webkit-box-pack:justify;-moz-box-pack:justify}.pop-over #popover-delete a.ok{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;text-align:center;height:17px;padding-top:2px;font-weight:bold;display:inline-block;text-decoration:none;background-color:#10b2fe;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#29bafe), to(#01a6f3));background-image:-moz-linear-gradient(top, #29bafe, #01a6f3);color:white !important;display:block}.pop-over #popover-delete a.ok:hover{background-color:#ff6c03 !important;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff6c03), to(#e96100));background-image:-moz-linear-gradient(top, #ff6c03, #e96100);color:white !important}.pop-over #popover-delete a.cancel{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;text-align:center;height:17px;padding-top:2px;font-weight:bold;display:inline-block;text-decoration:none;background-color:#404040;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#4d4d4d), to(#333));background-image:-moz-linear-gradient(top, #4d4d4d, #333);color:white !important;display:block}.pop-over #popover-delete a.cancel:hover{background-color:#ff6c03 !important;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff6c03), to(#e96100));background-image:-moz-linear-gradient(top, #ff6c03, #e96100);color:white !important}.pop-over #popover-delete a{max-width:100px}.editing-panel{z-index:1001;background:url(/@spontaneous/static/editing-texture-1.png) repeat}.editing-panel .editing-fields{display:-webkit-box;display:-moz-box;display:box;box-align:horizontal;-webkit-box-align:horizontal;-moz-box-align:horizontal;padding:8px}.editing-panel .editing-toolbar{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;background-color:rgba(0,0,0,0.2);padding:4px 16px}.editing-panel .editing-toolbar .indent{position:absolute;top:0;right:0;left:0;height:6px}.editing-panel .editing-toolbar.bottom .indent{top:auto;bottom:0}.editing-panel .editing-toolbar .buttons{display:-webkit-box;display:-moz-box;display:box;box-orient:horizontal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;box-pack:justify;-webkit-box-pack:justify;-moz-box-pack:justify;width:621px}.editing-panel .editing-toolbar .buttons .save,.editing-panel .editing-toolbar .buttons .cancel{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;text-align:center;height:17px;padding-top:2px;font-weight:bold;display:inline-block;text-decoration:none;background-color:#10b2fe;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#29bafe), to(#01a6f3));background-image:-moz-linear-gradient(top, #29bafe, #01a6f3);color:white !important}.editing-panel .editing-toolbar .buttons .save:hover,.editing-panel .editing-toolbar .buttons .cancel:hover{background-color:#ff6c03 !important;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff6c03), to(#e96100));background-image:-moz-linear-gradient(top, #ff6c03, #e96100);color:white !important}.editing-panel .editing-toolbar .buttons .cancel{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;text-align:center;height:17px;padding-top:2px;font-weight:bold;display:inline-block;text-decoration:none;background-color:#444;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#515151), to(#373737));background-image:-moz-linear-gradient(top, #515151, #373737);color:white !important}.editing-panel .editing-toolbar .buttons .cancel:hover{background-color:#ff6c03 !important;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff6c03), to(#e96100));background-image:-moz-linear-gradient(top, #ff6c03, #e96100);color:white !important}.editing-panel .editing-toolbar .buttons .save,.editing-panel .editing-toolbar .buttons .cancel{display:block;width:128px}.editing-panel .editing-toolbar.bottom{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.editing-panel .editing-toolbar.bottom .buttons{padding-top:0}.editing-panel .field-group-bg{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;position:absolute;margin:8px;top:0px;bottom:0px}.editing-panel .field-group-bg.text{left:0;right:343px}.editing-panel .field-group-bg.image{left:629px;right:0}.editing-panel input[type="submit"]{visibility:hidden;position:absolute;width:0;height:0}.editing-panel .field-group{position:relative;z-index:1010;float:left;padding:8px}.editing-panel .field-group .field+.field{margin-top:8px}.editing-panel .field-group .name{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:rgba(0,0,0,0.2);color:#fff;display:block;height:16px;padding-left:8px;padding-top:2px}.editing-panel .field-group .name .comment{font-weight:normal;text-transform:none;margin-left:8px}.editing-panel .field-group .value{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;border:solid 2px transparent;padding:6px;background-color:white;opacity:0.8}.editing-panel .field-group .value textarea,.editing-panel .field-group .value input[type="text"]{font-family:"Lucida Grande";font-size:11px;line-height:14px;outline:none}.editing-panel .field-group .value input[type="file"]{visibility:hidden;position:absolute;width:0;height:0}.editing-panel .field-group .value textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:none;width:100%;padding-right:64px;resize:vertical}.editing-panel .field-group .value input[type="text"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;border:none;display:block;font-weight:bold}.editing-panel .field-group .field.focus .name{background-color:rgba(0,0,0,0.6);color:white}.editing-panel .field-group .field.focus .name .comment{color:white}.editing-panel .field-group .field.focus .value{border-color:#fff;background-color:#fff;opacity:1}.editing-panel .field-group.text{width:621px}.editing-panel.depth-2 .editing-fields{padding:0;box-orient:vertical;-webkit-box-orient:vertical;-moz-box-orient:vertical}.editing-panel.depth-2 .editing-toolbar{padding-left:8px;padding-right:8px}.editing-panel.depth-2 .editing-toolbar .buttons{width:100%}.editing-panel.depth-2 .field-group.text{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.editing-panel.depth-2 .field-group.image{padding:8px}.editing-panel .field-group.image{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;padding:8px 0}.editing-panel .field-group.image .field{display:inline-block;vertical-align:top;min-width:100px;margin-right:8px;margin-bottom:8px;margin-top:0;margin-left:0}.editing-panel .field-group.image .field .name{background-color:rgba(0,0,0,0.6)}.editing-panel .field-group.image .field .value{opacity:1}.editing-panel .field-group.image .field .value{position:relative;min-height:70px;text-align:center}.editing-panel .field-group.image .field .value img{max-width:200px;cursor:pointer}.editing-panel .field-group.image .field .value img:hover{outline:solid 1px #10b2fe}.editing-panel .field-group.image .field .value img.empty{width:50%;height:100px}.editing-panel .field-group.image .field .value .image-drop{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;z-index:2;position:absolute;top:0;right:0;bottom:0;left:0}.editing-panel .field-group.image .field .value .image-drop.drop-active,.editing-panel .field-group.image .field .value .image-drop:hover{border:solid 1px #10b2fe}.editing-panel .field-group.image .field .value .actions{margin:0px;margin-left:0;position:absolute;top:0;right:0;width:60px}.editing-panel .field-group.image .field .value .actions .button{display:block}.editing-panel .field-group.image .field .value .actions .button.clear{color:#5b5b5b;background-color:#d1d1d1;width:100%}.editing-panel .field-group.image .field .value .info{position:absolute;left:0;right:0;bottom:0;padding:8px;opacity:0.7;color:black;padding-left:4px;padding-top:2px;background-color:#efefef;text-transform:none;display:-webkit-box;display:-moz-box;display:box;box-orient:vertical;-webkit-box-orient:vertical;-moz-box-orient:vertical}.editing-panel .field-group.image .field .value .info .filename{word-wrap:break-word}.editing-panel .field-group.image .field .value .info .sizes{padding-top:4px;display:-webkit-box;display:-moz-box;display:box;box-orient:horizontal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;box-pack:justify;-webkit-box-pack:justify;-moz-box-pack:justify}.editing-panel .field-group.image .field .value .landscape img{max-width:200px}.editing-panel .field-group.image .field .value .landscape .actions{width:auto;display:block;margin:8px 0 0 0;position:relative}.editing-panel .field-group.image .field .value .landscape .actions .button{display:inline-block;width:109px}.editing-panel .field-group.image .field .value .landscape .actions .button.clear{position:static}.editing-panel .field-group.image .field .value .landscape .actions .button.change{position:absolute;right:0}.clearfix:after,#top:after,.fields-preview:after,.fields-preview-text li:after,.fields-preview-image:after,#page-slots.slots .slot-tabs:after,#page-slots.slots .slot-entries .entry-wrap:after,#page-slots.slots .slot-entries .entry-wrap .entry-inner:after,#page-slots.slots .slot-entries .entry-wrap .slots .slot-tabs:after,#editing:after,.editing-panel .editing-fields:after,#editing #content-panel .tabs:after,#editing #content-panel #content-wrapper .facet-allowed .type-list:after{content:".";display:block;height:0;clear:both;visibility:hidden}.bar,#editing #url-panel,#editing #content-panel .tabs .tab,#editing #content-panel #content-wrapper .field-wrap .field.edit .name,#editing #content-panel #content-wrapper .field-wrap .field.edit .value input.input,#editing #content-panel #content-wrapper .page-entry-link h3{height:23px;padding-top:11px}.border-box,#editing #content-panel #content-wrapper .field-wrap .field.edit .value input.input{-webkit-box-sizing:border-box;-mox-box-sizing:border-box;box-sizing:border-box}#editing{position:absolute;top:0;left:0;right:0;bottom:0}#editing #url-panel{background-color:#e0e0e0;padding-left:10px;position:absolute;top:0;left:0;right:0}#editing #function-panel{position:absolute;top:34px;left:0;right:0;height:34px}#editing #content-panel{position:absolute;top:85px;left:0;right:0;bottom:0;overflow:auto;padding:0 10px;padding-bottom:100px}#editing #content-panel .tabs{-webkit-border-top-right-radius:5px;-moz-border-radius-topright:5px;border-top-right-radius:5px;-webkit-border-top-left-radius:5px;-moz-border-radius-topleft:5px;border-top-left-radius:5px;background-color:#d7d7d7;list-style:none;height:34px}#editing #content-panel .tabs .tab:first-child{-webkit-border-top-left-radius:5px;-moz-border-radius-topleft:5px;border-top-left-radius:5px}#editing #content-panel .tabs .tab{display:block;float:left;padding-left:10px;min-width:130px;border-right:solid 1px #c5c5c5;cursor:pointer}#editing #content-panel .tabs .tab:hover{background-color:#10b2fe}#editing #content-panel .tabs .tab.active{background-color:#c5c5c5;font-weight:bold}#editing #content-panel #content-wrapper{border-top:solid 1px #cecece;background-color:#e0e0e0}#editing #content-panel #content-wrapper .field-wrap .edit,#editing #content-panel #content-wrapper .field-wrap .preview{padding:10px;background-color:#cecece}#editing #content-panel #content-wrapper .field-wrap .field{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;width:100%}#editing #content-panel #content-wrapper .field-wrap .field .name,#editing #content-panel #content-wrapper .field-wrap .field .value{display:table-cell}#editing #content-panel #content-wrapper .field-wrap .field .name{-webkit-border-top-left-radius:5px;-moz-border-radius-topleft:5px;border-top-left-radius:5px;-webkit-border-bottom:5px;-moz-border-radius-bottomleft:5px;border-bottom-left-radius:5px;vertical-align:top;font-weight:bold;width:150px;padding-right:10px;text-align:right}#editing #content-panel #content-wrapper .field-wrap .field .value{-webkit-border-top-right-radius:5px;-moz-border-radius-topright:5px;border-top-right-radius:5px;-webkit-border-bottom:5px;-moz-border-radius-bottomright:5px;border-bottom-right-radius:5px;padding-left:10px}#editing #content-panel #content-wrapper .field-wrap .field.edit .name{background-color:#aaa}#editing #content-panel #content-wrapper .field-wrap .field.edit .name.active{background-color:#10b2fe;color:#fff}#editing #content-panel #content-wrapper .field-wrap .field.edit .value{padding-top:0;padding-bottom:0;padding-right:0;padding-left:0px;position:relative}#editing #content-panel #content-wrapper .field-wrap .field.edit .value input.input{-webkit-border-top-right-radius:5px;-moz-border-radius-topright:5px;border-top-right-radius:5px;-webkit-border-bottom:5px;-moz-border-radius-bottomright:5px;border-bottom-right-radius:5px;display:block;position:relative;left:0;width:100%;height:34px;border:solid 2px #10b2fe;outline:none;padding-left:10px;vertical-align:top}#editing #content-panel #content-wrapper .field-wrap .field.edit .value input.input:focus{border-color:#10b2fe}#editing #content-panel #content-wrapper .field-wrap .field+.field{margin-top:10px}#editing #content-panel #content-wrapper .facet-contents-wrap .facet-contents-wrap .facet-drag-bar{display:none}#editing #content-panel #content-wrapper .facet-contents-wrap .editing .facet-contents-wrap .facet-drag-bar{display:block}#editing #content-panel #content-wrapper .facet.depth-1 .facet-contents-wrap{background-color:#d7d7d7}#editing #content-panel #content-wrapper .facet.depth-2{background-color:#e0e0e0}#editing #content-panel #content-wrapper .facet.depth-2 .field-wrap .preview{background-color:#fff}#editing #content-panel #content-wrapper .facet.depth-2 .field-wrap .edit{background-color:#e0e0e0}#editing #content-panel #content-wrapper .facet.depth-2 .facet-contents-wrap{background-color:#e0e0e0}#editing #content-panel #content-wrapper .facet.depth-1>.facet-bottom-bar{-webkit-border-bottom-right-radius:5px;-moz-border-radius-bottomright:5px;border-bottom-right-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-bottomleft:5px;border-bottom-left-radius:5px;background-color:#e0e0e0}#editing #content-panel #content-wrapper .facet-allowed{background-color:#cecece;padding:0}#editing #content-panel #content-wrapper .facet-allowed .type-list{-webkit-border-top-right-radius:5px;-moz-border-radius-topright:5px;border-top-right-radius:5px;-webkit-border-top-left-radius:5px;-moz-border-radius-topleft:5px;border-top-left-radius:5px;padding-left:10px;padding-right:10px;padding-bottom:6px}#editing #content-panel #content-wrapper .facet-allowed .type-list a{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;display:block;float:left;min-width:95px;padding:7px 6px 0 6px;height:21px;background-color:#d7d7d7;margin-top:6px}#editing #content-panel #content-wrapper .facet-allowed .type-list a:hover{background-color:#10b2fe;color:#fff}#editing #content-panel #content-wrapper .facet-allowed .type-list a+a{margin-left:6px}#editing #content-panel #content-wrapper .page-entry-link h3{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;background-color:#e0e0e0;margin-bottom:10px;font-size:150%;padding-left:10px}#editing #content-panel #content-wrapper .page-entry-link h3 a{font-weight:normal}#editing #content-panel #content-wrapper .facet-contents-wrap{padding:10px}#editing #content-panel #content-wrapper .facet-contents-wrap .facet-drag-bar{-webkit-border-top-right-radius:5px;-moz-border-radius-topright:5px;border-top-right-radius:5px;-webkit-border-top-left-radius:5px;-moz-border-radius-topleft:5px;border-top-left-radius:5px;height:24px;background-color:#c5c5c5}#editing #content-panel #content-wrapper .facet-contents-wrap .facet{margin-top:20px}#editing #content-panel #content-wrapper .facet-contents-wrap .page .field-wrap{padding-bottom:10px}#editing #content-panel #content-wrapper .depth-2 .facet-contents-wrap{background-color:#cecece}#editing #content-panel #content-wrapper .facet-bottom-bar{-webkit-border-bottom-right-radius:5px;-moz-border-radius-bottomright:5px;border-bottom-right-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-bottomleft:5px;border-bottom-left-radius:5px;height:10px;background-color:#d7d7d7}#page-fields .editing-panel .editing-fields,#page-fields .editing-panel .editing-toolbar,.box-fields .editing-panel .editing-fields,.box-fields .editing-panel .editing-toolbar{padding-left:64px;padding-right:64px}#page-fields .editing-panel .field-group.text,.box-fields .editing-panel .field-group.text{padding-left:0}.box-fields .editing-panel .editing-toolbar.bottom .indent{opacity:0.2}.field .markdown-editor .md-toolbar{display:-webkit-box;display:-moz-box;display:box;box-orient:horizontal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;background-color:rgba(0,0,0,0.2)}.field .markdown-editor .md-toolbar a{color:#999;display:block;border:solid 1px transparent;padding:2px 6px;cursor:pointer}.field .markdown-editor .md-toolbar a.active{background-color:#ccc}.field .markdown-editor .md-toolbar a:hover{background-color:#999}.field .markdown-editor .md-toolbar a+a{margin-left:10px}.field.focus .markdown-editor .md-toolbar{background-color:rgba(0,0,0,0.6)}.field.focus .markdown-editor .md-toolbar a{color:#333}#conflicted-fields-dialogue .instructions{text-transform:none;margin:0;background-color:#f2f2f2;color:#666;padding:8px}#conflicted-fields-dialogue .differences{display:-webkit-box;display:-moz-box;display:box}#conflicted-fields-dialogue .diff{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:11px;width:50%;padding:8px 8px;border:solid 2px #f2f2f2;cursor:pointer}#conflicted-fields-dialogue .diff.selected{border-color:#10b2fe}#conflicted-fields-dialogue .diff ins{background-color:#deffdd;text-decoration:none}#conflicted-fields-dialogue .diff del{background-color:#fedddd;text-decoration:line-through}#conflicted-fields-dialogue .diff .para{color:#ccc}#conflicted-fields-dialogue .labels .diff{border:none;background-color:#fbfbfb;padding-top:5px;padding-bottom:5px}#conflicted-fields-dialogue .image-field-conflict.changes .diff{display:-webkit-box;display:-moz-box;display:box;box-orient:horizontal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;box-pack:center;-webkit-box-pack:center;-moz-box-pack:center;box-align:center;-webkit-box-align:center;-moz-box-align:center}#conflicted-fields-dialogue .image-field-conflict.changes .diff img{max-height:500px;max-width:100%;display:block}#add-alias-dialogue .instructions{margin:0;background-color:#f2f2f2;color:#666;padding:4px 8px}#add-alias-dialogue .type{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;display:-webkit-box;display:-moz-box;display:box;cursor:pointer;padding:4px 8px;background-color:#fbfbfb;border:solid 1px #f2f2f2;margin:8px;margin-bottom:0}#add-alias-dialogue .type:hover{background-color:#666;color:#fff}#add-alias-dialogue .type.selected{background-color:#10b2fe;color:#fff}a.developer.source{color:rgba(255,255,255,0.6)}a.developer.source:hover{color:#fff}
|
File without changes
|
File without changes
|
data/bin/limit-upload
CHANGED
File without changes
|
data/bin/spot
CHANGED
File without changes
|
data/bin/unlimit-upload
CHANGED
File without changes
|
data/lib/spontaneous.rb
CHANGED
@@ -85,6 +85,8 @@ module Spontaneous
|
|
85
85
|
autoload :Application, "spontaneous/application"
|
86
86
|
autoload :Search, "spontaneous/search"
|
87
87
|
autoload :Storage, "spontaneous/storage"
|
88
|
+
autoload :Cli, "spontaneous/cli"
|
89
|
+
autoload :Utils, "spontaneous/utils"
|
88
90
|
|
89
91
|
module Prototypes
|
90
92
|
autoload :FieldPrototype, "spontaneous/prototypes/field_prototype"
|
data/lib/spontaneous/cli.rb
CHANGED
data/lib/spontaneous/cli/site.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'spontaneous/cli'
|
1
2
|
|
2
3
|
module Spontaneous
|
3
4
|
module Cli
|
@@ -7,86 +8,11 @@ module Spontaneous
|
|
7
8
|
|
8
9
|
default_task :browse
|
9
10
|
|
10
|
-
|
11
|
-
class MySQL
|
12
|
-
def initialize(database)
|
13
|
-
@database = database
|
14
|
-
end
|
15
|
-
|
16
|
-
def load(path)
|
17
|
-
options = [
|
18
|
-
"mysql",
|
19
|
-
option(:password),
|
20
|
-
option(:user),
|
21
|
-
option(:default_character_set),
|
22
|
-
database_name
|
23
|
-
]
|
24
|
-
if path =~ /\.gz$/
|
25
|
-
options = ["gunzip", "<", path, "|"].concat(options)
|
26
|
-
end
|
27
|
-
|
28
|
-
command = options.join(" ")
|
29
|
-
system(command)
|
30
|
-
end
|
31
|
-
|
32
|
-
def dump(path, tables = nil)
|
33
|
-
options = [
|
34
|
-
option(:password),
|
35
|
-
option(:user),
|
36
|
-
option(:default_character_set),
|
37
|
-
database_name
|
38
|
-
]
|
39
|
-
unless tables.nil?
|
40
|
-
options.push(tables.join(" "))
|
41
|
-
end
|
42
|
-
|
43
|
-
options.push( "| gzip") if path =~ /\.gz$/
|
44
|
-
|
45
|
-
command = %(mysqldump #{options.join(" ")} > #{path} )
|
46
|
-
system(command)
|
47
|
-
end
|
48
|
-
|
49
|
-
def database_name
|
50
|
-
@database.opts[:database]
|
51
|
-
end
|
52
|
-
|
53
|
-
def user
|
54
|
-
@database.opts[:user]
|
55
|
-
end
|
56
|
-
|
57
|
-
def password
|
58
|
-
@database.opts[:password]
|
59
|
-
end
|
60
|
-
|
61
|
-
def default_character_set
|
62
|
-
"UTF8"
|
63
|
-
end
|
64
|
-
|
65
|
-
def option(option, add_if_nil=false)
|
66
|
-
value = self.send(option)
|
67
|
-
if !value.nil? or add_if_nil
|
68
|
-
"--#{option.to_s.gsub(/_/, '-')}=#{value}"
|
69
|
-
else
|
70
|
-
""
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
11
|
class DumpTask < ::Thor::Group
|
76
12
|
protected
|
77
13
|
|
78
14
|
def db_adapter
|
79
|
-
|
80
|
-
case database
|
81
|
-
when ::Sequel::Mysql2::Database
|
82
|
-
MySQL
|
83
|
-
else
|
84
|
-
raise "Unsupported adapter #{database.class}"
|
85
|
-
end
|
86
|
-
|
87
|
-
unless dumper_class.nil?
|
88
|
-
dumper = dumper_class.new(database)
|
89
|
-
end
|
15
|
+
::Spontaneous::Utils::Database.dumper_for_database(database)
|
90
16
|
end
|
91
17
|
|
92
18
|
def sqldump(path)
|
@@ -41,7 +41,8 @@ module Spontaneous
|
|
41
41
|
empty_directory "lib/tasks"
|
42
42
|
empty_directory "log"
|
43
43
|
empty_directory "tmp"
|
44
|
-
empty_directory "cache/media
|
44
|
+
empty_directory "cache/media"
|
45
|
+
empty_directory "cache/tmp"
|
45
46
|
empty_directory "cache/revisions"
|
46
47
|
copy_file ".gitignore"
|
47
48
|
template "lib/tasks/site.rake.tt", "lib/tasks/#{@site_name}.rake"
|
@@ -0,0 +1,8 @@
|
|
1
|
+
#load 'deploy' if respond_to?(:namespace) # cap2 differentiator
|
2
|
+
|
3
|
+
# Uncomment if you are using Rails' asset pipeline
|
4
|
+
# load 'deploy/assets'
|
5
|
+
|
6
|
+
#Dir['vendor/gems/*/recipes/*.rb','vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
|
7
|
+
|
8
|
+
load 'config/deploy' # remove this line to skip loading any of the default tasks
|
data/lib/spontaneous/media.rb
CHANGED
@@ -70,14 +70,16 @@ module Spontaneous::Plugins::Application
|
|
70
70
|
Spontaneous.instance.cache_dir(*path)
|
71
71
|
end
|
72
72
|
|
73
|
+
alias_method :cache_path, :cache_dir
|
74
|
+
|
73
75
|
def shard_path(hash=nil)
|
74
76
|
if hash
|
75
77
|
path = ['tmp', hash[0..1], hash[2..3], hash]
|
76
|
-
Spontaneous
|
78
|
+
Spontaneous.cache_path(*path).tap do |path|
|
77
79
|
::FileUtils.mkdir_p(::File.dirname(path))
|
78
80
|
end
|
79
81
|
else
|
80
|
-
Spontaneous
|
82
|
+
Spontaneous.cache_path('tmp')
|
81
83
|
end
|
82
84
|
end
|
83
85
|
|
@@ -90,7 +90,7 @@ module Spontaneous
|
|
90
90
|
end
|
91
91
|
|
92
92
|
LOGIN_CSS = %w(min/565d4c25e82148acb01c45c8d675b37a08676d77)
|
93
|
-
EDITING_CSS = %w(min/
|
93
|
+
EDITING_CSS = %w(min/14c2a35812c443001b15d8b12a4780f88c678035)
|
94
94
|
SCHEMA_MODIFICATION_CSS = %w(min/84dbe894ea96eafd321c30823d630817bfc4b03b)
|
95
95
|
end
|
96
96
|
|
@@ -6,4 +6,31 @@ namespace :spot do
|
|
6
6
|
Sequel.extension :migration
|
7
7
|
Sequel::Migrator.apply(Spontaneous.database, Spontaneous.gem_dir('db/migrations'))
|
8
8
|
end
|
9
|
+
|
10
|
+
|
11
|
+
namespace :database do
|
12
|
+
desc "Make a dump of the current database"
|
13
|
+
task :dump do
|
14
|
+
dumpfilename = ENV['dumpfile']
|
15
|
+
if dumpfilename.nil?
|
16
|
+
dumpfilename = "#{Time.now.to_i}.mysql.gz"
|
17
|
+
end
|
18
|
+
dump_file = "tmp/#{dumpfilename}"
|
19
|
+
dumper = Spontaneous::Utils::Database.dumper_for_database
|
20
|
+
# Spontaneous::Cli::Site::MySQL.new(Spontaneous.database)
|
21
|
+
dumper.dump(dump_file)
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "Load a database dump into the local database"
|
25
|
+
task :load do
|
26
|
+
dumpfile = ENV['dumpfile']
|
27
|
+
if dumpfile.nil?
|
28
|
+
$stderr.puts "Usage: rake spot:database:load dumpfile=/path/to/dump.mysql.gz"
|
29
|
+
exit 1
|
30
|
+
end
|
31
|
+
dumper = Spontaneous::Utils::Database.dumper_for_database
|
32
|
+
# dumper = Spontaneous::Cli::Site::MySQL.new(Spontaneous.database)
|
33
|
+
dumper.load(dumpfile)
|
34
|
+
end
|
35
|
+
end
|
9
36
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
module Spontaneous
|
3
|
+
module Utils
|
4
|
+
module Database
|
5
|
+
|
6
|
+
def self.dumper_for_database(database = Spontaneous.database)
|
7
|
+
case database
|
8
|
+
when ::Sequel::Mysql2::Database
|
9
|
+
Spontaneous::Utils::Database::MySQLDumper
|
10
|
+
else
|
11
|
+
raise "Unsupported adapter #{database.class}"
|
12
|
+
end.new(database)
|
13
|
+
end
|
14
|
+
|
15
|
+
autoload :MySQLDumper, 'spontaneous/utils/database/mysql_dumper'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
|
2
|
+
module Spontaneous
|
3
|
+
module Utils
|
4
|
+
module Database
|
5
|
+
class MySQLDumper
|
6
|
+
def initialize(database)
|
7
|
+
@database = database
|
8
|
+
end
|
9
|
+
|
10
|
+
def load(path)
|
11
|
+
system(load_command(path))
|
12
|
+
end
|
13
|
+
|
14
|
+
def load_command(path)
|
15
|
+
options = [
|
16
|
+
"mysql",
|
17
|
+
option(:password),
|
18
|
+
option(:user),
|
19
|
+
option(:default_character_set),
|
20
|
+
database_name
|
21
|
+
]
|
22
|
+
if path =~ /\.gz$/
|
23
|
+
options = ["gunzip", "<", path, "|"].concat(options)
|
24
|
+
end
|
25
|
+
|
26
|
+
command = options.join(" ")
|
27
|
+
end
|
28
|
+
|
29
|
+
def dump(path, tables = nil)
|
30
|
+
system(dump_command(path, tables))
|
31
|
+
end
|
32
|
+
|
33
|
+
def dump_command(path, tables = nil)
|
34
|
+
options = [
|
35
|
+
option(:password),
|
36
|
+
option(:user),
|
37
|
+
option(:default_character_set),
|
38
|
+
database_name
|
39
|
+
]
|
40
|
+
unless tables.nil?
|
41
|
+
options.push(tables.join(" "))
|
42
|
+
end
|
43
|
+
|
44
|
+
options.push( "| gzip") if path =~ /\.gz$/
|
45
|
+
|
46
|
+
command = %(mysqldump #{options.join(" ")} > #{path} )
|
47
|
+
end
|
48
|
+
def database_name
|
49
|
+
@database.opts[:database]
|
50
|
+
end
|
51
|
+
|
52
|
+
def user
|
53
|
+
@database.opts[:user]
|
54
|
+
end
|
55
|
+
|
56
|
+
def password
|
57
|
+
@database.opts[:password]
|
58
|
+
end
|
59
|
+
|
60
|
+
def default_character_set
|
61
|
+
"UTF8"
|
62
|
+
end
|
63
|
+
|
64
|
+
def option(option, add_if_nil=false)
|
65
|
+
value = self.send(option)
|
66
|
+
if !value.nil? or add_if_nil
|
67
|
+
"--#{option.to_s.gsub(/_/, '-')}=#{value}"
|
68
|
+
else
|
69
|
+
""
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|