spree_essential_cms 0.3.0.rc1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. data/.gitignore +8 -0
  2. data/.travis.yml +15 -0
  3. data/Gemfile +2 -0
  4. data/LICENSE +1 -1
  5. data/README.md +64 -5
  6. data/Versionfile +8 -0
  7. data/app/controllers/spree/admin/contents_controller.rb +4 -4
  8. data/app/controllers/spree/admin/pages_controller.rb +6 -12
  9. data/app/controllers/spree/base_controller_decorator.rb +15 -0
  10. data/app/controllers/spree/home_controller_decorator.rb +23 -0
  11. data/app/controllers/spree/pages_controller.rb +2 -11
  12. data/app/models/spree/content.rb +40 -39
  13. data/app/models/spree/page.rb +21 -10
  14. data/app/models/spree/page_image.rb +10 -15
  15. data/app/views/spree/admin/contents/_form.html.erb +9 -4
  16. data/app/views/spree/admin/contents/edit.html.erb +0 -2
  17. data/app/views/spree/admin/contents/index.html.erb +22 -23
  18. data/app/views/spree/admin/contents/new.html.erb +0 -2
  19. data/app/views/spree/admin/contents/show.html.erb +0 -1
  20. data/app/views/spree/admin/page_images/edit.html.erb +1 -3
  21. data/app/views/spree/admin/page_images/index.html.erb +25 -25
  22. data/app/views/spree/admin/page_images/new.html.erb +3 -1
  23. data/app/views/spree/admin/pages/edit.html.erb +0 -2
  24. data/app/views/spree/admin/pages/index.html.erb +26 -26
  25. data/app/views/spree/admin/pages/new.html.erb +1 -1
  26. data/app/views/spree/admin/pages/show.html.erb +0 -2
  27. data/app/views/spree/pages/home.html.erb +10 -0
  28. data/app/views/spree/shared/_main_menu.html.erb +3 -7
  29. data/app/views/spree/shared/_main_menu_items.html.erb +6 -0
  30. data/config/locales/en.yml +1 -0
  31. data/config/locales/it.yml +63 -0
  32. data/config/routes.rb +10 -12
  33. data/{lib/generators/templates/db/migrate/create_pages.rb → db/migrate/20120306185628_create_pages.rb} +0 -0
  34. data/{lib/generators/templates/db/migrate/create_contents.rb → db/migrate/20120306185638_create_contents.rb} +0 -0
  35. data/{lib/generators/templates/db/migrate/add_spree_namespace.rb → db/migrate/20120306185648_add_spree_namespace.rb} +0 -0
  36. data/lib/generators/spree_essentials/cms_generator.rb +3 -8
  37. data/lib/spree_essential_cms.rb +5 -19
  38. data/lib/spree_essential_cms/engine.rb +16 -0
  39. data/lib/spree_essential_cms/version.rb +1 -1
  40. data/lib/tasks/sample.rake +9 -13
  41. data/spree_essential_cms.gemspec +34 -0
  42. data/test/dummy_hooks/after_app_generator.rb +17 -0
  43. data/test/dummy_hooks/after_migrate.rb.sample +1 -0
  44. data/test/dummy_hooks/before_migrate.rb +11 -0
  45. data/test/dummy_hooks/templates/assets/javascripts/admin/all.js +1 -0
  46. data/test/dummy_hooks/templates/assets/javascripts/store/all.js +1 -0
  47. data/test/dummy_hooks/templates/assets/stylesheets/admin/all.css +3 -0
  48. data/test/dummy_hooks/templates/assets/stylesheets/store/all.css +3 -0
  49. data/test/dummy_hooks/templates/assets/stylesheets/store/screen.css +749 -0
  50. data/test/dummy_hooks/templates/initializers/spree_user_error_fix.rb +3 -0
  51. data/test/dummy_hooks/templates/overrides/main_menu.rb +6 -0
  52. data/test/integration/spree/admin/contents_integration_test.rb +116 -0
  53. data/test/integration/spree/admin/page_images_integration_test.rb +94 -0
  54. data/test/integration/spree/admin/pages_integration_test.rb +131 -0
  55. data/test/integration/spree/home_integration_test.rb +54 -0
  56. data/test/integration/spree/pages_integration_test.rb +122 -0
  57. data/test/support/factories.rb +21 -0
  58. data/test/support/files/1.jpg +0 -0
  59. data/test/support/files/2.jpg +0 -0
  60. data/test/support/helpers.rb +13 -0
  61. data/test/test_helper.rb +19 -0
  62. data/test/unit/spree/content_test.rb +39 -0
  63. data/test/unit/spree/essential_test.rb +9 -0
  64. data/test/unit/spree/page_image_test.rb +47 -0
  65. data/test/unit/spree/page_test.rb +53 -0
  66. metadata +117 -48
  67. data/app/assets/stylesheets/essentials/cms.css +0 -39
  68. data/app/controllers/spree/page_controller.rb +0 -20
  69. data/app/controllers/spree/spree_base_controller_decorator.rb +0 -12
@@ -1,27 +1,25 @@
1
1
  class Spree::PossiblePage
2
- def self.matches?(request)
3
- path = request.fullpath
4
- return if path =~ /(^\/(admin|account|cart|checkout|content|login|pg\/|orders|products|s\/|session|signup|shipments|states|t\/|tax_categories|user)+)/
5
- count = Spree::Page.active.where(:path => path.gsub("//","/")).count
6
- 0 < count
2
+ def self.matches?(request)
3
+ return false if request.fullpath =~ /(^\/+(admin|account|cart|checkout|content|login|pg\/|orders|products|s\/|session|signup|shipments|states|t\/|tax_categories|user)+)/
4
+ !Spree::Page.active.find_by_path(request.fullpath).nil?
7
5
  end
8
6
  end
9
7
 
10
- Spree::Core::Engine.routes.draw do
11
-
8
+ Spree::Core::Engine.routes.append do
9
+
12
10
  namespace :admin do
13
-
14
- resources :pages do
11
+
12
+ resources :pages, :constraints => { :id => /.*/ } do
15
13
  collection do
16
14
  post :update_positions
17
15
  end
18
-
16
+
19
17
  resources :contents do
20
18
  collection do
21
19
  post :update_positions
22
20
  end
23
21
  end
24
-
22
+
25
23
  resources :images, :controller => "page_images" do
26
24
  collection do
27
25
  post :update_positions
@@ -30,7 +28,7 @@ Spree::Core::Engine.routes.draw do
30
28
  end
31
29
 
32
30
  end
33
-
31
+
34
32
  constraints(Spree::PossiblePage) do
35
33
  get '(:page_path)', :to => 'pages#show', :page_path => /.*/, :as => :page
36
34
  end
@@ -1,16 +1,11 @@
1
- require 'generators/essentials_base'
2
-
3
1
  module SpreeEssentials
4
2
  module Generators
5
- class CmsGenerator < SpreeEssentials::Generators::EssentialsBase
3
+ class CmsGenerator < Rails::Generators::Base
6
4
 
7
5
  desc "Installs required migrations for spree_essentials"
8
- source_root File.expand_path("../../templates/db/migrate", __FILE__)
9
-
6
+
10
7
  def copy_migrations
11
- migration_template "create_pages.rb", "db/migrate/create_pages.rb"
12
- migration_template "create_contents.rb", "db/migrate/create_contents.rb"
13
- migration_template "add_spree_namespace.rb", "db/migrate/add_spree_namespace.rb"
8
+ rake "spree_essential_cms:install:migrations"
14
9
  end
15
10
 
16
11
  end
@@ -1,4 +1,8 @@
1
- require 'spree_essentials'
1
+ require "spree_essentials"
2
+ require "spree_sample" unless Rails.env.production?
3
+
4
+ require "spree_essential_cms/version"
5
+ require "spree_essential_cms/engine"
2
6
 
3
7
  module SpreeEssentialCms
4
8
 
@@ -10,24 +14,6 @@ module SpreeEssentialCms
10
14
  [ :pages, { :match_path => '/pages' }]
11
15
  end
12
16
 
13
- class Engine < Rails::Engine
14
-
15
- config.autoload_paths += %W(#{config.root}/lib)
16
-
17
- config.to_prepare do
18
- #loads application's model / class decorators
19
- Dir.glob File.expand_path("../../app/**/*_decorator.rb", __FILE__) do |c|
20
- Rails.configuration.cache_classes ? require(c) : load(c)
21
- end
22
-
23
- #loads application's deface view overrides
24
- Dir.glob File.expand_path("../../app/overrides/*.rb", __FILE__) do |c|
25
- Rails.application.config.cache_classes ? require(c) : load(c)
26
- end
27
- end
28
-
29
- end
30
-
31
17
  end
32
18
 
33
19
  SpreeEssentials.register :cms, SpreeEssentialCms
@@ -0,0 +1,16 @@
1
+ module SpreeEssentialCms
2
+ class Engine < Rails::Engine
3
+
4
+ engine_name "spree_essential_cms"
5
+
6
+ config.to_prepare do
7
+
8
+ #loads application's model / class decorators
9
+ Dir.glob File.expand_path("../../../app/**/*_decorator.rb", __FILE__) do |c|
10
+ Rails.configuration.cache_classes ? require(c) : load(c)
11
+ end
12
+
13
+ end
14
+
15
+ end
16
+ end
@@ -1,3 +1,3 @@
1
1
  module SpreeEssentialCms
2
- VERSION = "0.3.0.rc1"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -3,36 +3,32 @@ namespace :db do
3
3
  desc "Create admin username and password"
4
4
  task :cms => :environment do
5
5
 
6
- # dependent on spree_core
7
- require 'faker'
6
+ require 'ffaker'
8
7
 
9
- unless Page.count == 0
8
+ unless Spree::Page.count == 0
10
9
  require 'highline/import'
11
- continue = ask("Sample data will destroy existing data. Continue? [y/n]", String) do |q|
12
- q.echo = true
13
- q.whitespace = :strip
14
- end
10
+ continue = ask("Sample data will destroy existing data. Continue? [y/n]")
15
11
  exit unless continue =~ /y/i
16
- Page.destroy_all
12
+ Spree::Page.destroy_all
17
13
  end
18
14
 
19
15
  images = Dir[File.expand_path("../sample", __FILE__) + "/*.jpg"]
20
16
 
21
- home = Page.create(:title => "Home", :path => "/")
22
- home.contents.first.update_attributes(:body => FFaker::Lorem.paragraphs().join("\n\n"), :context => "main")
17
+ home = Spree::Page.create(:title => "Home", :path => "/")
18
+ home.contents.first.update_attributes(:body => Faker::Lorem.paragraphs().join("\n\n"), :context => "main")
23
19
  home.contents.create(:title => Faker::Lorem.words(3 + rand(3)).join(" "), :body => Faker::Lorem.sentence, :context => "intro")
24
20
 
25
21
  images.each {|image|
26
- PageImage.create(:viewable => home, :attachment => File.open(image), :alt => "Sailing")
22
+ Spree::PageImage.create(:viewable => home, :attachment => File.open(image), :alt => "Sailing")
27
23
  }
28
24
 
29
25
  %w(About Contact).each do |title|
30
- page = Page.create(:title => title, :path => title.downcase)
26
+ page = Spree::Page.create(:title => title, :path => title.downcase)
31
27
  page.contents.first.update_attributes(:body => Faker::Lorem.paragraphs().join("\n\n"))
32
28
  end
33
29
 
34
30
  puts "done."
35
-
31
+
36
32
  end
37
33
  end
38
34
  end
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "spree_essential_cms/version"
4
+
5
+ Gem::Specification.new do |s|
6
+
7
+ s.name = "spree_essential_cms"
8
+ s.version = SpreeEssentialCms::VERSION
9
+ s.platform = Gem::Platform::RUBY
10
+ s.authors = ["Spencer Steffen"]
11
+ s.email = ["spencer@citrusme.com"]
12
+ s.homepage = "https://github.com/citrus/spree_essential_cms"
13
+ s.summary = %q{SpreeEssentialCms is a full featured content management system for Spree Commerce.}
14
+ s.description = %q{SpreeEssentialCms is a full featured content management system for Spree Commerce. It's designed to be used with the spree_essentials base.}
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+
19
+ s.require_paths = ['lib']
20
+
21
+ # Spree Essentials
22
+ s.add_runtime_dependency('spree_essentials', '~> 0.5.0')
23
+
24
+ # Development
25
+ s.add_development_dependency('spree_sample', '~> 1.1.0')
26
+ s.add_development_dependency('dummier', '~> 0.3.2')
27
+ s.add_development_dependency('shoulda', '~> 3.0.0')
28
+ s.add_development_dependency('factory_girl', '~> 2.6.0')
29
+ s.add_development_dependency('capybara', '~> 1.1.2')
30
+ s.add_development_dependency('sqlite3', '~> 1.3.5')
31
+ # s.add_development_dependency('simplecov', '~> 0.6.1')
32
+ # s.add_development_dependency('turn', '~> 0.9.3')
33
+
34
+ end
@@ -0,0 +1,17 @@
1
+ # Add our main menu override
2
+ copy_file "overrides/main_menu.rb", "app/overrides/main_menu.rb"
3
+
4
+ # Fix uninitialized constant Spree::User::DestroyWithOrdersError
5
+ template "initializers/spree_user_error_fix.rb", "config/initializers/spree_user_error_fix.rb"
6
+
7
+ # remove all stylesheets except core
8
+ %w(admin store).each do |ns|
9
+ template "assets/javascripts/#{ns}/all.js", "app/assets/javascripts/#{ns}/all.js", :force => true
10
+ template "assets/stylesheets/#{ns}/all.css", "app/assets/stylesheets/#{ns}/all.css", :force => true
11
+ end
12
+
13
+ # Fix sass load error by using the converted css file
14
+ template "assets/stylesheets/store/screen.css", "app/assets/stylesheets/store/screen.css"
15
+
16
+ # Enable forgery_protection since we need AUTH_TOKEN to be defined to avoid JS errors
17
+ gsub_file "config/environments/test.rb", "forgery_protection = false", "forgery_protection = true"
@@ -0,0 +1 @@
1
+ rake "db:migrate db:seed db:sample:cms", :env => "development"
@@ -0,0 +1,11 @@
1
+ # Install spree's migrations
2
+ rake "spree:install:migrations"
3
+
4
+ # Mount the Spree::Core routes
5
+ insert_into_file File.join('config', 'routes.rb'), :after => "Application.routes.draw do\n" do
6
+ " # Mount Spree's routes\n mount Spree::Core::Engine, :at => '/'\n"
7
+ end
8
+
9
+ # Install spree essentials & CMS
10
+ run "bundle exec rails g spree_essentials:install"
11
+ run "bundle exec rails g spree_essentials:cms"
@@ -0,0 +1 @@
1
+ //= require admin/spree_core
@@ -0,0 +1 @@
1
+ //= require store/spree_core
@@ -0,0 +1,3 @@
1
+ /*
2
+ *= require admin/spree_core
3
+ */
@@ -0,0 +1,3 @@
1
+ /*
2
+ *= require store/spree_core
3
+ */
@@ -0,0 +1,749 @@
1
+ @import url(http://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic,700italic|&subset=latin,cyrillic,greek,greek-ext,latin-ext,cyrillic-ext);
2
+ /*--------------------------------------*/
3
+ /* Colors
4
+ /*--------------------------------------*/
5
+ /* Dark gray */
6
+ /* Mid light gray */
7
+ /* Light blue */
8
+ /* Lighter blue */
9
+ /* Light gray */
10
+ /* Spree green */
11
+ /* Error red */
12
+ /*--------------------------------------*/
13
+ /* Fonts
14
+ /*--------------------------------------*/
15
+ /*--------------------------------------*/
16
+ /* Basic styles
17
+ /*--------------------------------------*/
18
+ body {
19
+ font-family: 'Ubuntu', sans-serif;
20
+ color: #404042;
21
+ line-height: 18px;
22
+ font-size: 12px; }
23
+
24
+ /* Line style */
25
+ hr {
26
+ border-color: #dedede; }
27
+
28
+ /* Custom text-selection colors (remove any text shadows: twitter.com/miketaylr/status/12228805301) */
29
+ ::-moz-selection {
30
+ background: #00adee;
31
+ color: white;
32
+ text-shadow: none; }
33
+
34
+ ::selection {
35
+ background: #00adee;
36
+ color: white;
37
+ text-shadow: none; }
38
+
39
+ /* j.mp/webkit-tap-highlight-color */
40
+ a:link {
41
+ -webkit-tap-highlight-color: #00adee; }
42
+
43
+ ins {
44
+ background-color: #00adee;
45
+ color: white;
46
+ text-decoration: none; }
47
+
48
+ mark {
49
+ background-color: #00adee;
50
+ color: white;
51
+ font-style: italic;
52
+ font-weight: bold; }
53
+
54
+ /*--------------------------------------*/
55
+ /* Links
56
+ /*--------------------------------------*/
57
+ a {
58
+ text-decoration: none;
59
+ color: #404042; }
60
+ a:hover {
61
+ color: #00adee !important; }
62
+
63
+ /*--------------------------------------*/
64
+ /* Lists
65
+ /*--------------------------------------*/
66
+ ul.inline li, ol.inline li {
67
+ display: inline-block; }
68
+
69
+ dl dt, dl dd {
70
+ display: inline-block;
71
+ width: 50%;
72
+ padding: 5px; }
73
+ dl dt.odd, dl dd.odd {
74
+ background-color: #dedede; }
75
+ dl dt {
76
+ font-weight: bold;
77
+ text-transform: uppercase; }
78
+ dl dd {
79
+ margin-left: -23px; }
80
+
81
+ /*--------------------------------------*/
82
+ /* Headers
83
+ /*--------------------------------------*/
84
+ h1, h2, h3, h4, h5, h6 {
85
+ font-weight: bold; }
86
+
87
+ h1 {
88
+ font-size: 24px;
89
+ line-height: 34px; }
90
+
91
+ h2 {
92
+ font-size: 23px;
93
+ line-height: 32px; }
94
+
95
+ h3 {
96
+ font-size: 20px;
97
+ line-height: 30px; }
98
+
99
+ h4 {
100
+ font-size: 18px;
101
+ line-height: 28px; }
102
+
103
+ h5 {
104
+ font-size: 16px;
105
+ line-height: 26px; }
106
+
107
+ h6 {
108
+ font-size: 14px;
109
+ line-height: 24px; }
110
+
111
+ /*--------------------------------------*/
112
+ /* Forms
113
+ /*--------------------------------------*/
114
+ textarea, input[type="date"],
115
+ input[type="datetime"], input[type="datetime-local"],
116
+ input[type="email"], input[type="month"], input[type="number"],
117
+ input[type="password"], input[type="search"], input[type="tel"],
118
+ input[type="text"], input[type="time"], input[type="url"],
119
+ input[type="week"] {
120
+ border: 1px solid #dedede;
121
+ padding: 2px 5px;
122
+ font-family: "Ubuntu", sans-serif; }
123
+ textarea:active, textarea:focus, input[type="date"]:active, input[type="date"]:focus,
124
+ input[type="datetime"]:active,
125
+ input[type="datetime"]:focus, input[type="datetime-local"]:active, input[type="datetime-local"]:focus,
126
+ input[type="email"]:active,
127
+ input[type="email"]:focus, input[type="month"]:active, input[type="month"]:focus, input[type="number"]:active, input[type="number"]:focus,
128
+ input[type="password"]:active,
129
+ input[type="password"]:focus, input[type="search"]:active, input[type="search"]:focus, input[type="tel"]:active, input[type="tel"]:focus,
130
+ input[type="text"]:active,
131
+ input[type="text"]:focus,
132
+ select:active,
133
+ select:focus, input[type="time"]:active, input[type="time"]:focus, input[type="url"]:active, input[type="url"]:focus,
134
+ input[type="week"]:active,
135
+ input[type="week"]:focus {
136
+ border-color: #00adee;
137
+ outline: none;
138
+ -webkit-box-shadow: none;
139
+ -moz-box-shadow: none;
140
+ -o-box-shadow: none;
141
+ box-shadow: none; }
142
+ textarea.error, input[type="date"].error,
143
+ input[type="datetime"].error, input[type="datetime-local"].error,
144
+ input[type="email"].error, input[type="month"].error, input[type="number"].error,
145
+ input[type="password"].error, input[type="search"].error, input[type="tel"].error,
146
+ input[type="text"].error, input[type="time"].error, input[type="url"].error,
147
+ input[type="week"].error {
148
+ border-color: #e45353; }
149
+
150
+ select {
151
+ border: 1px solid #dedede;
152
+ font-family: "Ubuntu", sans-serif;
153
+ background-image: url("select_arrow.gif");
154
+ background-repeat: no-repeat;
155
+ background-position: right center; }
156
+
157
+ label.error {
158
+ display: block;
159
+ font-size: 11px;
160
+ color: #e45353;
161
+ margin-top: 3px; }
162
+
163
+ input[type="submit"], input[type="button"],
164
+ input[type="reset"], button, a.button {
165
+ background-color: #00adee;
166
+ background-image: none;
167
+ text-shadow: none;
168
+ color: white;
169
+ font-weight: bold;
170
+ font-family: "Ubuntu", sans-serif;
171
+ border: 1px solid rgba(0, 138, 189, 0.75);
172
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4);
173
+ -khtml-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4);
174
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4);
175
+ -o-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4);
176
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4);
177
+ -webkit-border-radius: 0px;
178
+ -khtml-border-radius: 0px;
179
+ -moz-border-radius: 0px;
180
+ -ms-border-radius: 0px;
181
+ -o-border-radius: 0px;
182
+ border-radius: 0px;
183
+ vertical-align: text-top; }
184
+ input[type="submit"].large, input[type="button"].large,
185
+ input[type="reset"].large, button.large, a.button.large {
186
+ padding: 7px 10px;
187
+ font-size: 14px; }
188
+ input[type="submit"]:hover, input[type="button"]:hover,
189
+ input[type="reset"]:hover, button:hover, a.button:hover {
190
+ background-image: none;
191
+ background-color: #404042;
192
+ border-color: #404042;
193
+ color: white !important; }
194
+
195
+ .ie8 a.button {
196
+ line-height: 16px; }
197
+
198
+ input[type="checkbox"], input[type="button"],
199
+ input[type="submit"], input[type="reset"],
200
+ button, label {
201
+ vertical-align: middle; }
202
+
203
+ a.button {
204
+ display: inline-block;
205
+ line-height: 15px;
206
+ margin-top: -2px;
207
+ vertical-align: bottom; }
208
+
209
+ /*--------------------------------------*/
210
+ /* Footer
211
+ /*--------------------------------------*/
212
+ footer#footer {
213
+ padding: 10px 0;
214
+ border-top: 1px solid #dedede; }
215
+
216
+ /*--------------------------------------*/
217
+ /* Paragraphs
218
+ /*--------------------------------------*/
219
+ p {
220
+ padding: 10px 0; }
221
+
222
+ /*--------------------------------------*/
223
+ /* Tables
224
+ /*--------------------------------------*/
225
+ table thead {
226
+ background-color: #dedede;
227
+ text-transform: uppercase; }
228
+ table thead tr th {
229
+ padding: 5px 10px; }
230
+ table tbody tr, table tfoot tr {
231
+ border-bottom: 1px solid #dedede; }
232
+ table tbody tr td, table tfoot tr td {
233
+ vertical-align: middle;
234
+ padding: 5px 10px; }
235
+ table tbody tr.alt, table tbody tr.odd, table tfoot tr.alt, table tfoot tr.odd {
236
+ background-color: #f0f8ff; }
237
+
238
+ /*--------------------------------------*/
239
+ /* Navigation
240
+ /*--------------------------------------*/
241
+ nav#top-nav-bar {
242
+ text-align: right;
243
+ margin-top: 20px; }
244
+ nav#top-nav-bar ul li {
245
+ margin-bottom: 5px;
246
+ padding-left: 10px; }
247
+ nav#top-nav-bar ul li a {
248
+ font-weight: bold;
249
+ font-size: 14px;
250
+ text-transform: uppercase; }
251
+
252
+ nav #main-nav-bar {
253
+ text-transform: uppercase;
254
+ font-weight: bold;
255
+ margin-top: 20px;
256
+ border-bottom: 1px solid #dedede;
257
+ padding-bottom: 6px; }
258
+ nav #main-nav-bar li a {
259
+ font-size: 16px;
260
+ padding: 5px; }
261
+ nav #main-nav-bar li#link-to-cart {
262
+ float: right;
263
+ padding-left: 24px;
264
+ background: url("cart.png") no-repeat left center; }
265
+ nav #main-nav-bar li#link-to-cart:hover {
266
+ border-color: #00adee; }
267
+ nav #main-nav-bar li#link-to-cart:hover .amount {
268
+ border-color: #00adee; }
269
+ nav #main-nav-bar li#link-to-cart a {
270
+ font-weight: normal;
271
+ font-size: 16px;
272
+ color: #00adee; }
273
+ nav #main-nav-bar li#link-to-cart a .amount {
274
+ font-size: 18px;
275
+ font-weight: bold;
276
+ border-left: 1px solid #dedede;
277
+ padding-left: 5px;
278
+ padding-bottom: 5px; }
279
+
280
+ nav#taxonomies .taxonomy-root {
281
+ text-transform: uppercase;
282
+ border-bottom: 1px solid #dedede;
283
+ margin-bottom: 5px;
284
+ color: #00adee; }
285
+ nav#taxonomies .taxons-list {
286
+ padding-left: 20px;
287
+ margin-bottom: 20px;
288
+ list-style: disc outside; }
289
+
290
+ #breadcrumbs {
291
+ border-bottom: 1px solid #dedede;
292
+ padding: 3px 0;
293
+ margin-bottom: 15px; }
294
+ #breadcrumbs li a {
295
+ color: #00adee; }
296
+ #breadcrumbs li span {
297
+ text-transform: uppercase;
298
+ font-weight: bold; }
299
+
300
+ /*--------------------------------------*/
301
+ /* Flash notices & errors
302
+ /*--------------------------------------*/
303
+ .flash, .errorExplanation {
304
+ padding: 10px;
305
+ color: white;
306
+ font-weight: bold;
307
+ margin-bottom: 10px; }
308
+ .flash.notice, .notice.errorExplanation {
309
+ background-color: #00adee; }
310
+ .flash.success, .success.errorExplanation {
311
+ background-color: #8dba53; }
312
+ .flash.error, .errorExplanation, .error.errorExplanation {
313
+ background-color: #e45353; }
314
+
315
+ .errorExplanation p {
316
+ font-weight: normal; }
317
+ .errorExplanation ul {
318
+ list-style: disc outside;
319
+ margin-left: 30px; }
320
+ .errorExplanation ul li {
321
+ font-weight: normal; }
322
+
323
+ /*--------------------------------------*/
324
+ /* Main search bar
325
+ /*--------------------------------------*/
326
+ #search-bar {
327
+ display: block; }
328
+
329
+ /*--------------------------------------*/
330
+ /* Products
331
+ /*--------------------------------------*/
332
+ .product-section-title {
333
+ text-transform: uppercase;
334
+ color: #00adee;
335
+ margin-top: 15px; }
336
+
337
+ .add-to-cart {
338
+ margin-top: 15px; }
339
+ .add-to-cart input[type="number"] {
340
+ width: 60px;
341
+ vertical-align: middle;
342
+ padding: 5px;
343
+ height: 35px; }
344
+
345
+ span.price, #checkout-summary table tr[data-hook="item_total"] td:last-child strong, #checkout-summary table #summary-order-total, #order_details td.price span, #order_details td.total span, #order_summary td.price span, #order_summary td.total span, table#cart-detail tbody#line_items tr td[data-hook="cart_item_price"], table#cart-detail tbody#line_items tr td[data-hook="cart_item_total"], div[data-hook="inside_cart_form"] #subtotal span.order-total {
346
+ font-weight: bold;
347
+ color: #00adee; }
348
+ span.price.selling, #checkout-summary table tr[data-hook="item_total"] td:last-child strong.selling, #checkout-summary table .selling#summary-order-total, #order_details td.price span.selling, #order_details td.total span.selling, #order_summary td.price span.selling, #order_summary td.total span.selling, table#cart-detail tbody#line_items tr td.selling[data-hook="cart_item_price"], table#cart-detail tbody#line_items tr td.selling[data-hook="cart_item_total"], table#cart-detail tbody#line_items tr td[data-hook="cart_item_price"], table#cart-detail tbody#line_items tr td[data-hook="cart_item_total"], div[data-hook="inside_cart_form"] #subtotal span.selling.order-total {
349
+ font-size: 20px; }
350
+ span.price.diff, #checkout-summary table tr[data-hook="item_total"] td:last-child strong.diff, #checkout-summary table .diff#summary-order-total, #order_details td.price span.diff, #order_details td.total span.diff, #order_summary td.price span.diff, #order_summary td.total span.diff, table#cart-detail tbody#line_items tr td.diff[data-hook="cart_item_price"], table#cart-detail tbody#line_items tr td.diff[data-hook="cart_item_total"], div[data-hook="inside_cart_form"] #subtotal span.diff.order-total {
351
+ font-weight: bold; }
352
+
353
+ ul#products {
354
+ margin-left: -10px;
355
+ margin-right: -10px; }
356
+ ul#products li {
357
+ text-align: center;
358
+ font-weight: bold;
359
+ margin-bottom: 20px; }
360
+ ul#products li a {
361
+ display: block; }
362
+ ul#products li a.info {
363
+ height: 35px;
364
+ margin-top: 5px;
365
+ color: #bbbbbb;
366
+ border-bottom: 1px solid #dedede; }
367
+ ul#products li .product-image {
368
+ border: 1px solid #dedede;
369
+ padding: 5px;
370
+ min-height: 110px; }
371
+ ul#products li .product-image:hover {
372
+ border-color: #00adee; }
373
+ ul#products li .price {
374
+ color: #00adee;
375
+ font-size: 16px;
376
+ padding-top: 5px;
377
+ display: block; }
378
+
379
+ .subtaxon-title {
380
+ text-transform: uppercase; }
381
+ .subtaxon-title a {
382
+ color: #00adee; }
383
+
384
+ .search-results-title {
385
+ text-transform: uppercase;
386
+ border-bottom: 1px solid #dedede;
387
+ margin-bottom: 10px; }
388
+
389
+ #sidebar_products_search .navigation {
390
+ margin-bottom: 15px; }
391
+ #sidebar_products_search span.category {
392
+ display: block;
393
+ font-weight: bold;
394
+ text-transform: uppercase;
395
+ border-bottom: 1px solid #ededed;
396
+ margin-bottom: 5px;
397
+ color: #00adee;
398
+ font-size: 14px;
399
+ line-height: 24px; }
400
+
401
+ .taxon {
402
+ overflow: hidden; }
403
+
404
+ #product-images #main-image {
405
+ text-align: center;
406
+ border: 1px solid #dedede; }
407
+
408
+ #product-description .product-title {
409
+ border-bottom: 1px solid #dedede;
410
+ margin-bottom: 15px; }
411
+
412
+ #product-thumbnails {
413
+ margin-top: 10px; }
414
+ #product-thumbnails li {
415
+ margin-right: 6px;
416
+ border: 1px solid #dedede; }
417
+ #product-thumbnails li img {
418
+ padding: 5px; }
419
+ #product-thumbnails li:hover, #product-thumbnails li.selected {
420
+ border-color: #00adee; }
421
+
422
+ #product-properties {
423
+ border: 1px solid #dedede;
424
+ padding: 10px; }
425
+
426
+ #product-variants ul li {
427
+ padding: 5px; }
428
+
429
+ /*--------------------------------------*/
430
+ /* Checkout
431
+ /*--------------------------------------*/
432
+ .progress-steps {
433
+ list-style: decimal inside;
434
+ overflow: auto; }
435
+ .progress-steps li {
436
+ float: left;
437
+ margin-right: 20px;
438
+ font-weight: bold;
439
+ text-transform: uppercase;
440
+ padding: 5px 20px;
441
+ color: #bbbbbb; }
442
+ .progress-steps li.current-first, .progress-steps li.current {
443
+ background-color: #00adee;
444
+ color: white; }
445
+ .progress-steps li.completed-first, .progress-steps li.completed {
446
+ background-color: #dedede;
447
+ color: white; }
448
+ .progress-steps li.completed-first a, .progress-steps li.completed a {
449
+ color: white; }
450
+ .progress-steps li.completed-first:hover, .progress-steps li.completed:hover {
451
+ background-color: #00adee;
452
+ color: white; }
453
+ .progress-steps li.completed-first:hover a, .progress-steps li.completed:hover a {
454
+ color: white; }
455
+ .progress-steps li.completed-first:hover a:hover, .progress-steps li.completed:hover a:hover {
456
+ color: white !important; }
457
+
458
+ #checkout-summary {
459
+ text-align: center;
460
+ border: 1px solid #dedede;
461
+ margin-top: 23px;
462
+ margin-left: 0; }
463
+ #checkout-summary h3 {
464
+ text-transform: uppercase;
465
+ font-size: 14px;
466
+ color: #00adee;
467
+ border-bottom: 1px solid #dedede; }
468
+ #checkout-summary table {
469
+ width: 100%; }
470
+ #checkout-summary table tr[data-hook="order_total"] {
471
+ border-bottom: none; }
472
+ #checkout-summary table #summary-order-total {
473
+ font-size: 14px; }
474
+
475
+ #billing, #shipping, #shipping_method,
476
+ #payment, #order_details, #order_summary {
477
+ margin-top: 10px;
478
+ border: 1px solid #dedede;
479
+ padding: 10px; }
480
+ #billing legend, #shipping legend, #shipping_method legend,
481
+ #payment legend, #order_details legend, #order_summary legend {
482
+ text-transform: uppercase;
483
+ font-weight: bold;
484
+ font-size: 14px;
485
+ color: #00adee;
486
+ padding: 5px;
487
+ margin-left: 15px; }
488
+
489
+ #order_details, #order_summary {
490
+ padding: 0; }
491
+ #order_details div:last-child, #order_summary div:last-child {
492
+ margin-left: -1px; }
493
+ #order_details .payment-info .cc-type img, #order_summary .payment-info .cc-type img {
494
+ vertical-align: middle; }
495
+ #order_details table tfoot, #order_summary table tfoot {
496
+ text-align: right;
497
+ color: #bbbbbb; }
498
+ #order_details table tfoot tr, #order_summary table tfoot tr {
499
+ border: none; }
500
+ #order_details table tfoot#order-total, #order_summary table tfoot#order-total {
501
+ text-transform: uppercase;
502
+ font-size: 16px;
503
+ color: #404042; }
504
+ #order_details table tfoot#order-total tr, #order_summary table tfoot#order-total tr {
505
+ border-top: 1px solid #dedede; }
506
+ #order_details table tfoot#order-total tr td, #order_summary table tfoot#order-total tr td {
507
+ padding: 10px; }
508
+ #order_details .steps-data, #order_summary .steps-data {
509
+ padding: 10px; }
510
+ #order_details .steps-data h6, #order_summary .steps-data h6 {
511
+ border-bottom: 1px solid #dedede;
512
+ margin-bottom: 5px; }
513
+
514
+ #shipping_method p label {
515
+ float: left;
516
+ font-weight: bold;
517
+ font-size: 14px;
518
+ margin-right: 40px;
519
+ padding: 5px; }
520
+
521
+ p[data-hook="use_billing"] {
522
+ float: right;
523
+ margin-top: -38px;
524
+ background-color: white;
525
+ padding: 5px; }
526
+
527
+ /*--------------------------------------*/
528
+ /* Cart
529
+ /*--------------------------------------*/
530
+ table#cart-detail {
531
+ width: 100%; }
532
+ table#cart-detail tbody#line_items tr td[data-hook="cart_item_quantity"] .line_item_quantity {
533
+ width: 40px; }
534
+ table#cart-detail tbody#line_items tr td[data-hook="cart_item_delete"] .delete {
535
+ display: block;
536
+ width: 20px; }
537
+
538
+ div[data-hook="inside_cart_form"] .links {
539
+ margin-top: 15px; }
540
+ div[data-hook="inside_cart_form"] #subtotal {
541
+ text-align: right;
542
+ text-transform: uppercase;
543
+ margin-top: 15px; }
544
+
545
+ #empty-cart {
546
+ margin-top: 15px;
547
+ float: right; }
548
+
549
+ /*--------------------------------------*/
550
+ /* Account
551
+ /*--------------------------------------*/
552
+ #existing-customer h6, #new-customer h6, #forgot-password h6 {
553
+ text-transform: uppercase;
554
+ color: #00adee; }
555
+
556
+ #registration h6 {
557
+ text-transform: uppercase;
558
+ color: #00adee; }
559
+ #registration #existing-customer {
560
+ width: auto;
561
+ text-align: left; }
562
+
563
+ #user-info {
564
+ margin-bottom: 15px;
565
+ border: 1px solid #dedede;
566
+ padding: 10px; }
567
+
568
+ /*--------------------------------------*/
569
+ /* Order
570
+ /*--------------------------------------*/
571
+ #order_summary {
572
+ margin-top: 0; }
573
+
574
+ #order p[data-hook="links"] {
575
+ margin-left: 10px;
576
+ overflow: auto; }
577
+
578
+ table.order-summary tbody tr td {
579
+ width: 10%;
580
+ text-align: center; }
581
+ table.order-summary tbody tr td:first-child a {
582
+ text-transform: uppercase;
583
+ font-weight: bold;
584
+ color: #00adee; }
585
+
586
+ /* #Media Queries
587
+ ================================================== */
588
+ /* Smaller than standard 960 (devices and browsers) */
589
+ /* Tablet Portrait size to standard 960 (devices and browsers) */
590
+ @media only screen and (min-width: 768px) and (max-width: 959px) {
591
+ .container {
592
+ padding-left: 10px;
593
+ width: 758px; }
594
+
595
+ footer#footer {
596
+ width: 748px; }
597
+
598
+ p[data-hook="use_billing"] {
599
+ margin-top: -15px; } }
600
+ /* All Mobile Sizes (devices and browser) */
601
+ @media only screen and (max-width: 767px) {
602
+ html {
603
+ -webkit-text-size-adjust: none; }
604
+
605
+ nav#taxonomies {
606
+ text-align: center; }
607
+ nav#taxonomies ul {
608
+ padding-left: 0 !important;
609
+ list-style: none !important; }
610
+
611
+ ul#nav-bar {
612
+ text-align: center; }
613
+
614
+ .steps-data div.columns {
615
+ margin-bottom: 15px;
616
+ text-align: center; }
617
+
618
+ #order_details table[data-hook="order_details"], #order table[data-hook="order_details"] {
619
+ width: 100%; }
620
+
621
+ #update-cart #subtotal, #update-cart .links {
622
+ width: 50%;
623
+ float: left;
624
+ text-align: left; }
625
+ #update-cart #subtotal {
626
+ text-align: right; } }
627
+ /* Mobile Landscape Size to Tablet Portrait (devices and browsers) */
628
+ @media only screen and (min-width: 480px) and (max-width: 767px) {
629
+ footer#footer {
630
+ width: auto !important; }
631
+
632
+ input, select {
633
+ vertical-align: baseline !important; }
634
+
635
+ figure#logo {
636
+ text-align: center; }
637
+
638
+ #link-to-login {
639
+ display: block;
640
+ text-align: center; }
641
+
642
+ #search-bar {
643
+ display: block;
644
+ text-align: center; }
645
+ #search-bar select {
646
+ margin-bottom: 10px; }
647
+
648
+ ul#products {
649
+ margin-left: 0;
650
+ margin-right: -20px; }
651
+ ul#products li {
652
+ width: 133px;
653
+ margin-right: 10px; }
654
+
655
+ table#cart-detail tbody tr td[data-hook="cart_item_description"], table#cart-detail tbody tr td[data-hook="order_item_description"], table[data-hook="order_details"] tbody tr td[data-hook="cart_item_description"], table[data-hook="order_details"] tbody tr td[data-hook="order_item_description"] {
656
+ font-size: 11px;
657
+ line-height: 15px;
658
+ width: 100px; }
659
+ table#cart-detail tbody tr td[data-hook="cart_item_description"] h4, table#cart-detail tbody tr td[data-hook="order_item_description"] h4, table[data-hook="order_details"] tbody tr td[data-hook="cart_item_description"] h4, table[data-hook="order_details"] tbody tr td[data-hook="order_item_description"] h4 {
660
+ font-size: 14px;
661
+ line-height: 17px;
662
+ margin-bottom: 10px; }
663
+ table#cart-detail tbody tr td[data-hook="cart_item_price"], table#cart-detail tbody tr td[data-hook="cart_item_total"],
664
+ table#cart-detail tbody tr td[data-hook="order_item_price"], table#cart-detail tbody tr td[data-hook="order_item_total"], table[data-hook="order_details"] tbody tr td[data-hook="cart_item_price"], table[data-hook="order_details"] tbody tr td[data-hook="cart_item_total"], table[data-hook="order_details"] tbody tr td[data-hook="order_item_price"], table[data-hook="order_details"] tbody tr td[data-hook="order_item_total"] {
665
+ font-size: 12px !important; }
666
+ table#cart-detail tbody tr td[data-hook="cart_item_image"] img, table#cart-detail tbody tr td[data-hook="order_item_image"] img, table[data-hook="order_details"] tbody tr td[data-hook="cart_item_image"] img, table[data-hook="order_details"] tbody tr td[data-hook="order_item_image"] img {
667
+ width: 70px; } }
668
+ /* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */
669
+ @media only screen and (max-width: 479px) {
670
+ .progress-steps li {
671
+ padding: 0;
672
+ margin: 0;
673
+ width: 50%; }
674
+ .progress-steps li span {
675
+ display: block;
676
+ padding: 10px 20px; }
677
+
678
+ #shipping_method p label {
679
+ float: none;
680
+ display: block;
681
+ text-align: center;
682
+ margin-right: 0; }
683
+
684
+ p[data-hook="use_billing"] {
685
+ float: none;
686
+ margin-top: 0; }
687
+
688
+ table#cart-detail tbody tr td[data-hook="cart_item_description"], table#cart-detail tbody tr td[data-hook="order_item_description"], table[data-hook="order_details"] tbody tr td[data-hook="cart_item_description"], table[data-hook="order_details"] tbody tr td[data-hook="order_item_description"] {
689
+ padding: 0 !important;
690
+ text-indent: -9999px; }
691
+ table#cart-detail tbody tr td[data-hook="cart_item_description"] h4, table#cart-detail tbody tr td[data-hook="order_item_description"] h4, table[data-hook="order_details"] tbody tr td[data-hook="cart_item_description"] h4, table[data-hook="order_details"] tbody tr td[data-hook="order_item_description"] h4 {
692
+ display: none; }
693
+ table#cart-detail tbody tr td[data-hook="cart_item_image"] img, table#cart-detail tbody tr td[data-hook="order_item_image"] img, table[data-hook="order_details"] tbody tr td[data-hook="cart_item_image"] img, table[data-hook="order_details"] tbody tr td[data-hook="order_item_image"] img {
694
+ width: 70px; }
695
+ table#cart-detail tbody tr td[data-hook="cart_item_price"], table#cart-detail tbody tr td[data-hook="cart_item_total"], table[data-hook="order_details"] tbody tr td[data-hook="cart_item_price"], table[data-hook="order_details"] tbody tr td[data-hook="cart_item_total"] {
696
+ font-size: 14px !important; }
697
+
698
+ table.order-summary {
699
+ display: block;
700
+ position: relative;
701
+ width: 100%; }
702
+ table.order-summary thead {
703
+ display: block;
704
+ float: left; }
705
+ table.order-summary tbody {
706
+ display: block;
707
+ width: auto;
708
+ position: relative;
709
+ overflow-x: auto;
710
+ white-space: nowrap; }
711
+ table.order-summary thead tr {
712
+ display: block; }
713
+ table.order-summary th {
714
+ display: block; }
715
+ table.order-summary tbody tr {
716
+ display: inline-block;
717
+ vertical-align: top; }
718
+ table.order-summary td {
719
+ display: block;
720
+ min-height: 1.25em; }
721
+
722
+ figure#logo {
723
+ text-align: center; }
724
+
725
+ #link-to-login {
726
+ display: block;
727
+ text-align: center; }
728
+
729
+ #search-bar {
730
+ display: block;
731
+ text-align: center; }
732
+ #search-bar select {
733
+ margin-bottom: 10px; }
734
+
735
+ aside#sidebar {
736
+ text-align: center; }
737
+ aside#sidebar ul {
738
+ padding-left: 0 !important; }
739
+ aside#sidebar ul li {
740
+ list-style-type: none; }
741
+
742
+ ul#products {
743
+ margin-left: 0; }
744
+ ul#products li {
745
+ width: 140px;
746
+ margin-right: 15px; }
747
+
748
+ #content {
749
+ text-align: center; } }