trusty-cms 3.1.8 → 3.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +2 -1
- data/Gemfile.lock +13 -9
- data/app/assets/images/admin/move_higher.png +0 -0
- data/app/assets/images/admin/move_lower.png +0 -0
- data/app/assets/images/admin/move_to_bottom.png +0 -0
- data/app/assets/images/admin/move_to_top.png +0 -0
- data/app/assets/images/admin/remove.png +0 -0
- data/app/assets/stylesheets/admin/_multi_site_main.scss +85 -0
- data/app/assets/stylesheets/admin/_site_chooser.scss +76 -0
- data/app/assets/stylesheets/admin/main.scss +3 -0
- data/app/controllers/admin/sites_controller.rb +14 -0
- data/app/helpers/scoped_helper.rb +19 -0
- data/app/helpers/sites_helper.rb +10 -0
- data/app/models/site.rb +86 -0
- data/app/models/snippet.rb +23 -0
- data/app/models/snippet_finder.rb +24 -0
- data/app/models/snippet_tags.rb +80 -0
- data/app/users/_choose_site.html.haml +8 -0
- data/app/views/admin/layouts/_choose_site.html.haml +8 -0
- data/app/views/admin/layouts/_site_chooser.html.haml +11 -0
- data/app/views/admin/sites/_form.haml +50 -0
- data/app/views/admin/sites/edit.haml +7 -0
- data/app/views/admin/sites/index.haml +43 -0
- data/app/views/admin/sites/new.haml +7 -0
- data/app/views/admin/snippets/_choose_site.html.haml +6 -0
- data/app/views/{snippets → admin/snippets}/_form.html.haml +0 -0
- data/app/views/{snippets → admin/snippets}/_popups.html.haml +0 -0
- data/app/views/{snippets → admin/snippets}/edit.html.haml +0 -0
- data/app/views/{snippets → admin/snippets}/index.html.haml +0 -0
- data/app/views/{snippets → admin/snippets}/new.html.haml +0 -0
- data/app/views/{snippets → admin/snippets}/remove.html.haml +0 -0
- data/app/views/admin/users/_choose_site.html.haml +8 -0
- data/config/application.rb +0 -2
- data/config/initializers/trusty_cms_config.rb +6 -0
- data/config/routes.rb +8 -0
- data/coverage/index.html +3837 -2759
- data/db/migrate/006_remove_user_login_index.rb +8 -0
- data/db/migrate/010_create_sites.rb +13 -0
- data/db/migrate/011_add_order_to_sites.rb +9 -0
- data/db/migrate/022_add_admin_fields_to_sites.rb +17 -0
- data/db/migrate/023_add_sites.rb +13 -0
- data/db/migrate/024_site_abbreviation.rb +9 -0
- data/db/migrate/025_recreate_non_unique_index_on_snippets_name.rb +11 -0
- data/db/migrate/026_add_site_id_to_pages.rb +24 -0
- data/db/migrate/027_add_base_domain_to_sites.rb +9 -0
- data/lib/trusty_cms.rb +1 -1
- data/spec/dummy/db/schema.rb +20 -2
- data/spec/dummy/log/test.log +44621 -0
- data/spec/dummy/node_modules/jquery/AUTHORS.txt +301 -0
- data/spec/dummy/node_modules/jquery/LICENSE.txt +36 -0
- data/spec/dummy/node_modules/jquery/README.md +67 -0
- data/spec/dummy/node_modules/jquery/bower.json +14 -0
- data/spec/dummy/node_modules/jquery/dist/core.js +476 -0
- data/spec/dummy/node_modules/jquery/dist/jquery.js +10253 -0
- data/spec/dummy/node_modules/jquery/dist/jquery.min.js +4 -0
- data/spec/dummy/node_modules/jquery/dist/jquery.min.map +1 -0
- data/spec/dummy/node_modules/jquery/dist/jquery.slim.js +8160 -0
- data/spec/dummy/node_modules/jquery/dist/jquery.slim.min.js +4 -0
- data/spec/dummy/node_modules/jquery/dist/jquery.slim.min.map +1 -0
- data/spec/dummy/node_modules/jquery/external/sizzle/LICENSE.txt +36 -0
- data/spec/dummy/node_modules/jquery/external/sizzle/dist/sizzle.js +2272 -0
- data/spec/dummy/node_modules/jquery/external/sizzle/dist/sizzle.min.js +3 -0
- data/spec/dummy/node_modules/jquery/external/sizzle/dist/sizzle.min.map +1 -0
- data/spec/dummy/node_modules/jquery/package.json +97 -0
- data/spec/dummy/node_modules/jquery/src/ajax/jsonp.js +102 -0
- data/spec/dummy/node_modules/jquery/src/ajax/load.js +76 -0
- data/spec/dummy/node_modules/jquery/src/ajax/parseXML.js +30 -0
- data/spec/dummy/node_modules/jquery/src/ajax/script.js +77 -0
- data/spec/dummy/node_modules/jquery/src/ajax/var/location.js +5 -0
- data/spec/dummy/node_modules/jquery/src/ajax/var/nonce.js +7 -0
- data/spec/dummy/node_modules/jquery/src/ajax/var/rquery.js +5 -0
- data/spec/dummy/node_modules/jquery/src/ajax/xhr.js +169 -0
- data/spec/dummy/node_modules/jquery/src/ajax.js +855 -0
- data/spec/dummy/node_modules/jquery/src/attributes/attr.js +141 -0
- data/spec/dummy/node_modules/jquery/src/attributes/classes.js +174 -0
- data/spec/dummy/node_modules/jquery/src/attributes/prop.js +143 -0
- data/spec/dummy/node_modules/jquery/src/attributes/support.js +33 -0
- data/spec/dummy/node_modules/jquery/src/attributes/val.js +190 -0
- data/spec/dummy/node_modules/jquery/src/attributes.js +13 -0
- data/spec/dummy/node_modules/jquery/src/callbacks.js +234 -0
- data/spec/dummy/node_modules/jquery/src/core/DOMEval.js +16 -0
- data/spec/dummy/node_modules/jquery/src/core/access.js +70 -0
- data/spec/dummy/node_modules/jquery/src/core/init.js +128 -0
- data/spec/dummy/node_modules/jquery/src/core/nodeName.js +13 -0
- data/spec/dummy/node_modules/jquery/src/core/parseHTML.js +65 -0
- data/spec/dummy/node_modules/jquery/src/core/ready-no-deferred.js +96 -0
- data/spec/dummy/node_modules/jquery/src/core/ready.js +86 -0
- data/spec/dummy/node_modules/jquery/src/core/readyException.js +13 -0
- data/spec/dummy/node_modules/jquery/src/core/stripAndCollapse.js +14 -0
- data/spec/dummy/node_modules/jquery/src/core/support.js +20 -0
- data/spec/dummy/node_modules/jquery/src/core/var/rsingleTag.js +6 -0
- data/spec/dummy/node_modules/jquery/src/core.js +476 -0
- data/spec/dummy/node_modules/jquery/src/css/addGetHookIf.js +26 -0
- data/spec/dummy/node_modules/jquery/src/css/adjustCSS.js +71 -0
- data/spec/dummy/node_modules/jquery/src/css/curCSS.js +65 -0
- data/spec/dummy/node_modules/jquery/src/css/hiddenVisibleSelectors.js +15 -0
- data/spec/dummy/node_modules/jquery/src/css/showHide.js +105 -0
- data/spec/dummy/node_modules/jquery/src/css/support.js +89 -0
- data/spec/dummy/node_modules/jquery/src/css/var/cssExpand.js +5 -0
- data/spec/dummy/node_modules/jquery/src/css/var/getStyles.js +17 -0
- data/spec/dummy/node_modules/jquery/src/css/var/isHiddenWithinTree.js +34 -0
- data/spec/dummy/node_modules/jquery/src/css/var/rmargin.js +5 -0
- data/spec/dummy/node_modules/jquery/src/css/var/rnumnonpx.js +7 -0
- data/spec/dummy/node_modules/jquery/src/css/var/swap.js +26 -0
- data/spec/dummy/node_modules/jquery/src/css.js +438 -0
- data/spec/dummy/node_modules/jquery/src/data/Data.js +161 -0
- data/spec/dummy/node_modules/jquery/src/data/var/acceptData.js +19 -0
- data/spec/dummy/node_modules/jquery/src/data/var/dataPriv.js +7 -0
- data/spec/dummy/node_modules/jquery/src/data/var/dataUser.js +7 -0
- data/spec/dummy/node_modules/jquery/src/data.js +179 -0
- data/spec/dummy/node_modules/jquery/src/deferred/exceptionHook.js +21 -0
- data/spec/dummy/node_modules/jquery/src/deferred.js +391 -0
- data/spec/dummy/node_modules/jquery/src/deprecated.js +40 -0
- data/spec/dummy/node_modules/jquery/src/dimensions.js +56 -0
- data/spec/dummy/node_modules/jquery/src/effects/Tween.js +123 -0
- data/spec/dummy/node_modules/jquery/src/effects/animatedSelector.js +15 -0
- data/spec/dummy/node_modules/jquery/src/effects.js +699 -0
- data/spec/dummy/node_modules/jquery/src/event/ajax.js +22 -0
- data/spec/dummy/node_modules/jquery/src/event/alias.js +29 -0
- data/spec/dummy/node_modules/jquery/src/event/focusin.js +55 -0
- data/spec/dummy/node_modules/jquery/src/event/support.js +11 -0
- data/spec/dummy/node_modules/jquery/src/event/trigger.js +185 -0
- data/spec/dummy/node_modules/jquery/src/event.js +746 -0
- data/spec/dummy/node_modules/jquery/src/exports/amd.js +26 -0
- data/spec/dummy/node_modules/jquery/src/exports/global.js +34 -0
- data/spec/dummy/node_modules/jquery/src/jquery.js +41 -0
- data/spec/dummy/node_modules/jquery/src/manipulation/_evalUrl.js +23 -0
- data/spec/dummy/node_modules/jquery/src/manipulation/buildFragment.js +104 -0
- data/spec/dummy/node_modules/jquery/src/manipulation/getAll.js +32 -0
- data/spec/dummy/node_modules/jquery/src/manipulation/setGlobalEval.js +22 -0
- data/spec/dummy/node_modules/jquery/src/manipulation/support.js +35 -0
- data/spec/dummy/node_modules/jquery/src/manipulation/var/rcheckableType.js +5 -0
- data/spec/dummy/node_modules/jquery/src/manipulation/var/rscriptType.js +5 -0
- data/spec/dummy/node_modules/jquery/src/manipulation/var/rtagName.js +5 -0
- data/spec/dummy/node_modules/jquery/src/manipulation/wrapMap.js +29 -0
- data/spec/dummy/node_modules/jquery/src/manipulation.js +488 -0
- data/spec/dummy/node_modules/jquery/src/offset.js +229 -0
- data/spec/dummy/node_modules/jquery/src/queue/delay.js +24 -0
- data/spec/dummy/node_modules/jquery/src/queue.js +145 -0
- data/spec/dummy/node_modules/jquery/src/selector-native.js +237 -0
- data/spec/dummy/node_modules/jquery/src/selector-sizzle.js +19 -0
- data/spec/dummy/node_modules/jquery/src/selector.js +3 -0
- data/spec/dummy/node_modules/jquery/src/serialize.js +130 -0
- data/spec/dummy/node_modules/jquery/src/traversing/findFilter.js +106 -0
- data/spec/dummy/node_modules/jquery/src/traversing/var/dir.js +22 -0
- data/spec/dummy/node_modules/jquery/src/traversing/var/rneedsContext.js +8 -0
- data/spec/dummy/node_modules/jquery/src/traversing/var/siblings.js +17 -0
- data/spec/dummy/node_modules/jquery/src/traversing.js +191 -0
- data/spec/dummy/node_modules/jquery/src/var/ObjectFunctionString.js +7 -0
- data/spec/dummy/node_modules/jquery/src/var/arr.js +5 -0
- data/spec/dummy/node_modules/jquery/src/var/class2type.js +6 -0
- data/spec/dummy/node_modules/jquery/src/var/concat.js +7 -0
- data/spec/dummy/node_modules/jquery/src/var/document.js +5 -0
- data/spec/dummy/node_modules/jquery/src/var/documentElement.js +7 -0
- data/spec/dummy/node_modules/jquery/src/var/fnToString.js +7 -0
- data/spec/dummy/node_modules/jquery/src/var/getProto.js +5 -0
- data/spec/dummy/node_modules/jquery/src/var/hasOwn.js +7 -0
- data/spec/dummy/node_modules/jquery/src/var/indexOf.js +7 -0
- data/spec/dummy/node_modules/jquery/src/var/pnum.js +5 -0
- data/spec/dummy/node_modules/jquery/src/var/push.js +7 -0
- data/spec/dummy/node_modules/jquery/src/var/rcssNum.js +9 -0
- data/spec/dummy/node_modules/jquery/src/var/rnothtmlwhite.js +8 -0
- data/spec/dummy/node_modules/jquery/src/var/slice.js +7 -0
- data/spec/dummy/node_modules/jquery/src/var/support.js +6 -0
- data/spec/dummy/node_modules/jquery/src/var/toString.js +7 -0
- data/spec/dummy/node_modules/jquery/src/wrap.js +77 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/AUTHORS.txt +333 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/LICENSE.txt +43 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/external/jquery/jquery.js +11008 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/images/ui-icons_444444_256x240.png +0 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/images/ui-icons_555555_256x240.png +0 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/images/ui-icons_777620_256x240.png +0 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/images/ui-icons_777777_256x240.png +0 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/images/ui-icons_cc0000_256x240.png +0 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/images/ui-icons_ffffff_256x240.png +0 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/index.html +559 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.css +1312 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.js +18706 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.min.css +7 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.min.js +13 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.structure.css +886 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.structure.min.css +5 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.theme.css +443 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.theme.min.css +5 -0
- data/spec/dummy/node_modules/jquery-ui-bundle/package.json +33 -0
- data/spec/dummy/node_modules/jquery-ujs/CONTRIBUTING.md +109 -0
- data/spec/dummy/node_modules/jquery-ujs/MIT-LICENSE +20 -0
- data/spec/dummy/node_modules/jquery-ujs/README.md +86 -0
- data/spec/dummy/node_modules/jquery-ujs/RELEASE.md +23 -0
- data/spec/dummy/node_modules/jquery-ujs/bower.json +19 -0
- data/spec/dummy/node_modules/jquery-ujs/package.json +26 -0
- data/spec/dummy/node_modules/jquery-ujs/src/rails.js +555 -0
- data/spec/dummy/tmp/cache/747/A70/TrustyCms%3A%3AConfig +0 -0
- data/spec/dummy/tmp/cache/85C/FA0/TrustyCms.cache_mtime +0 -0
- data/vendor/extensions/multi-site-extension/lib/multi_site/admin_ui.rb +45 -0
- data/vendor/extensions/multi-site-extension/lib/multi_site/application_controller_extensions.rb +40 -0
- data/vendor/extensions/multi-site-extension/lib/multi_site/application_controller_filter_extensions.rb +22 -0
- data/vendor/extensions/multi-site-extension/lib/multi_site/engine.rb +10 -0
- data/vendor/extensions/multi-site-extension/lib/multi_site/page_extensions.rb +81 -0
- data/vendor/extensions/multi-site-extension/lib/multi_site/pages_controller_extensions.rb +55 -0
- data/vendor/extensions/multi-site-extension/lib/multi_site/resource_controller_extensions.rb +42 -0
- data/vendor/extensions/multi-site-extension/lib/multi_site/route_extensions.rb +22 -0
- data/vendor/extensions/multi-site-extension/lib/multi_site/route_set_extensions.rb +17 -0
- data/vendor/extensions/multi-site-extension/lib/multi_site/scoped_model.rb +133 -0
- data/vendor/extensions/multi-site-extension/lib/multi_site/scoped_validation.rb +33 -0
- data/vendor/extensions/multi-site-extension/lib/multi_site/site_chooser_helper.rb +14 -0
- data/vendor/extensions/multi-site-extension/lib/multi_site/site_controller_extensions.rb +30 -0
- data/vendor/extensions/multi-site-extension/lib/tasks/multi_site_extension_tasks.rake +28 -0
- data/vendor/extensions/multi-site-extension/lib/tasks/scoped_admin_extension_tasks.rake +28 -0
- data/vendor/extensions/multi-site-extension/lib/trusty-multi-site-extension.rb +1 -0
- data/vendor/extensions/multi-site-extension/multi_site_extension.rb +61 -0
- data/vendor/extensions/snippets-extension/lib/trusty-snippets-extension.rb +0 -0
- data/vendor/extensions/snippets-extension/snippets_extension.rb +46 -0
- metadata +347 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 18b54542b314cc9d51fb925e10da972c5c68fbbd
|
|
4
|
+
data.tar.gz: ba928a6b156faf29ffa585f9105230b579e0d7c4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 051a933ff4cdd4f2c16f8d9775bdc391cc418c2ec90ad4530ff9854b904b4522b042632de7dd422716ba4141221fbe4a6ea112308f2d916882bb23c04080893c
|
|
7
|
+
data.tar.gz: c97576470adce60e37d1a2afd406ebbe56e38d54f8e88a76e4f3810637ce30ace0782af6f24a9771a06aa674bbb0f398897246bc8b6f75b62f01502da4ecee78
|
data/Gemfile
CHANGED
|
@@ -16,7 +16,7 @@ group :development, :test do
|
|
|
16
16
|
gem 'capybara', '~> 2.13.0'
|
|
17
17
|
gem 'rspec-rails'
|
|
18
18
|
gem 'launchy', '~> 2.4.2'
|
|
19
|
-
gem 'database_cleaner'
|
|
19
|
+
gem 'database_cleaner'
|
|
20
20
|
gem 'poltergeist', '~> 1.14.0'
|
|
21
21
|
gem 'factory_girl_rails', '~> 4.6.0'
|
|
22
22
|
gem 'rails-observers', :git => 'https://github.com/rails/rails-observers'
|
|
@@ -25,6 +25,7 @@ group :development, :test do
|
|
|
25
25
|
gem 'pry-byebug'
|
|
26
26
|
gem 'simplecov'
|
|
27
27
|
gem 'codeclimate-test-reporter'
|
|
28
|
+
gem 'acts_as_list'
|
|
28
29
|
end
|
|
29
30
|
|
|
30
31
|
gem 'nokogiri', '>= 1.7.1'
|
data/Gemfile.lock
CHANGED
|
@@ -8,7 +8,7 @@ GIT
|
|
|
8
8
|
PATH
|
|
9
9
|
remote: .
|
|
10
10
|
specs:
|
|
11
|
-
trusty-cms (3.1.
|
|
11
|
+
trusty-cms (3.1.9)
|
|
12
12
|
RedCloth (~> 4.3.2)
|
|
13
13
|
acts_as_tree (~> 2.6.1)
|
|
14
14
|
bundler (~> 1.7)
|
|
@@ -75,6 +75,8 @@ GEM
|
|
|
75
75
|
i18n (~> 0.7)
|
|
76
76
|
minitest (~> 5.1)
|
|
77
77
|
tzinfo (~> 1.1)
|
|
78
|
+
acts_as_list (0.9.10)
|
|
79
|
+
activerecord (>= 3.0)
|
|
78
80
|
acts_as_tree (2.6.1)
|
|
79
81
|
activerecord (>= 3.0.0)
|
|
80
82
|
addressable (2.5.2)
|
|
@@ -120,7 +122,7 @@ GEM
|
|
|
120
122
|
crass (1.0.3)
|
|
121
123
|
css_parser (1.6.0)
|
|
122
124
|
addressable
|
|
123
|
-
database_cleaner (1.
|
|
125
|
+
database_cleaner (1.6.2)
|
|
124
126
|
delocalize (0.4.0)
|
|
125
127
|
rails (>= 3.0)
|
|
126
128
|
diff-lcs (1.3)
|
|
@@ -151,7 +153,7 @@ GEM
|
|
|
151
153
|
haml (>= 4.0, < 6)
|
|
152
154
|
nokogiri (>= 1.6.0)
|
|
153
155
|
ruby_parser (~> 3.5)
|
|
154
|
-
i18n (0.9.
|
|
156
|
+
i18n (0.9.3)
|
|
155
157
|
concurrent-ruby (~> 1.0)
|
|
156
158
|
json (2.1.0)
|
|
157
159
|
launchy (2.4.3)
|
|
@@ -168,11 +170,11 @@ GEM
|
|
|
168
170
|
mime-types-data (3.2016.0521)
|
|
169
171
|
mini_mime (1.0.0)
|
|
170
172
|
mini_portile2 (2.3.0)
|
|
171
|
-
minitest (5.11.
|
|
173
|
+
minitest (5.11.3)
|
|
172
174
|
multi_json (1.13.1)
|
|
173
175
|
mysql2 (0.4.10)
|
|
174
176
|
nio4r (2.2.0)
|
|
175
|
-
nokogiri (1.8.
|
|
177
|
+
nokogiri (1.8.2)
|
|
176
178
|
mini_portile2 (~> 2.3.0)
|
|
177
179
|
orm_adapter (0.5.0)
|
|
178
180
|
poltergeist (1.14.0)
|
|
@@ -189,8 +191,8 @@ GEM
|
|
|
189
191
|
pry-rails (0.3.6)
|
|
190
192
|
pry (>= 0.10.4)
|
|
191
193
|
public_suffix (3.0.1)
|
|
192
|
-
puma (3.11.
|
|
193
|
-
rack (2.0.
|
|
194
|
+
puma (3.11.2)
|
|
195
|
+
rack (2.0.4)
|
|
194
196
|
rack-cache (1.7.1)
|
|
195
197
|
rack (>= 0.4)
|
|
196
198
|
rack-test (0.8.2)
|
|
@@ -247,7 +249,7 @@ GEM
|
|
|
247
249
|
rspec-expectations (~> 3.7.0)
|
|
248
250
|
rspec-mocks (~> 3.7.0)
|
|
249
251
|
rspec-support (~> 3.7.0)
|
|
250
|
-
rspec-support (3.7.
|
|
252
|
+
rspec-support (3.7.1)
|
|
251
253
|
ruby_parser (3.10.1)
|
|
252
254
|
sexp_processor (~> 4.9)
|
|
253
255
|
sass (3.4.25)
|
|
@@ -296,9 +298,10 @@ PLATFORMS
|
|
|
296
298
|
ruby
|
|
297
299
|
|
|
298
300
|
DEPENDENCIES
|
|
301
|
+
acts_as_list
|
|
299
302
|
capybara (~> 2.13.0)
|
|
300
303
|
codeclimate-test-reporter
|
|
301
|
-
database_cleaner
|
|
304
|
+
database_cleaner
|
|
302
305
|
factory_girl_rails (~> 4.6.0)
|
|
303
306
|
launchy (~> 2.4.2)
|
|
304
307
|
mysql2 (~> 0.4.2)
|
|
@@ -314,5 +317,6 @@ DEPENDENCIES
|
|
|
314
317
|
trusty-cms!
|
|
315
318
|
trustygems (~> 0.2.0)
|
|
316
319
|
|
|
320
|
+
|
|
317
321
|
BUNDLED WITH
|
|
318
322
|
1.16.0
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
//fonts
|
|
2
|
+
$font_0: Georgia;
|
|
3
|
+
$font_1: Palatino;
|
|
4
|
+
$font_2: Times New Roman;
|
|
5
|
+
$font_3: Times;
|
|
6
|
+
$font_4: serif;
|
|
7
|
+
|
|
8
|
+
#content {
|
|
9
|
+
table.index {
|
|
10
|
+
tr.node {
|
|
11
|
+
td {
|
|
12
|
+
padding: .5em;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
&.node {
|
|
16
|
+
&.site {
|
|
17
|
+
small {
|
|
18
|
+
color: #666;
|
|
19
|
+
font-size: 90%;
|
|
20
|
+
font-style: italic;
|
|
21
|
+
font-weight: normal;
|
|
22
|
+
margin-left: .5em;
|
|
23
|
+
}
|
|
24
|
+
a {
|
|
25
|
+
&:visited {
|
|
26
|
+
font-size: 115%;
|
|
27
|
+
font-weight: bold;
|
|
28
|
+
color: black;
|
|
29
|
+
text-decoration: none;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
.form-area {
|
|
36
|
+
p {
|
|
37
|
+
&.domain {
|
|
38
|
+
float: left;
|
|
39
|
+
width: 40%;
|
|
40
|
+
margin: 1em 1em 0 0;
|
|
41
|
+
overflow: hidden;
|
|
42
|
+
label {
|
|
43
|
+
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
&.subtitle {
|
|
47
|
+
margin: 1em 0 0 0;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
#content {
|
|
55
|
+
div.form-area p.homepage {
|
|
56
|
+
float: right;
|
|
57
|
+
width: 16%;
|
|
58
|
+
margin: 1em 0 0;
|
|
59
|
+
overflow: hidden;
|
|
60
|
+
}
|
|
61
|
+
.form-area p {
|
|
62
|
+
&.domain label {
|
|
63
|
+
display: block;
|
|
64
|
+
position: relative;
|
|
65
|
+
}
|
|
66
|
+
&.homepage label {
|
|
67
|
+
display: block;
|
|
68
|
+
position: relative;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
p.formnote {
|
|
73
|
+
clear: both;
|
|
74
|
+
padding: 2em 0;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
//@extend-elements
|
|
79
|
+
//original selectors
|
|
80
|
+
//#content div.form-area p.domain .textbox, #content div.form-area p.homepage .textbox, #content div.form-area p.subtitle .textbox, #content div.form-area p.subtitle select
|
|
81
|
+
%extend_1 {
|
|
82
|
+
font-family: $font_0, $font_1, $font_2, $font_3, $font_4;
|
|
83
|
+
font-size: 140%;
|
|
84
|
+
width: 100%;
|
|
85
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
//colors
|
|
2
|
+
$color_turquoise_blue_approx: #66d9e0;
|
|
3
|
+
$white: #fff;
|
|
4
|
+
$black: #000;
|
|
5
|
+
|
|
6
|
+
#site_chooser {
|
|
7
|
+
width: 20%;
|
|
8
|
+
border-collapse: collapse;
|
|
9
|
+
float: right;
|
|
10
|
+
}
|
|
11
|
+
#nav {
|
|
12
|
+
list-style: none;
|
|
13
|
+
font-weight: bold;
|
|
14
|
+
margin-bottom: 10px;
|
|
15
|
+
width: 100%;
|
|
16
|
+
padding-top: 10px;
|
|
17
|
+
padding-bottom: 10px;
|
|
18
|
+
padding-left: 5px;
|
|
19
|
+
margin: 0;
|
|
20
|
+
cursor: pointer;
|
|
21
|
+
li {
|
|
22
|
+
margin-right: 10px;
|
|
23
|
+
position: relative;
|
|
24
|
+
color: $color_turquoise_blue_approx;
|
|
25
|
+
&:hover {
|
|
26
|
+
a {
|
|
27
|
+
background: $black;
|
|
28
|
+
text-decoration: underline;
|
|
29
|
+
}
|
|
30
|
+
ul a {
|
|
31
|
+
text-decoration: none;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
a {
|
|
36
|
+
display: block;
|
|
37
|
+
padding: 5px;
|
|
38
|
+
color: $white;
|
|
39
|
+
background: $black;
|
|
40
|
+
text-decoration: none;
|
|
41
|
+
&:hover {
|
|
42
|
+
color: $white;
|
|
43
|
+
background: $black;
|
|
44
|
+
text-decoration: underline;
|
|
45
|
+
}
|
|
46
|
+
&.site-link:hover {
|
|
47
|
+
color: $color_turquoise_blue_approx;
|
|
48
|
+
//Instead of the line below you could use @include transition($transition-1, $transition-2, $transition-3, $transition-4, $transition-5, $transition-6, $transition-7, $transition-8, $transition-9, $transition-10)
|
|
49
|
+
transition: all 0.2s;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
ul {
|
|
53
|
+
background: $white;
|
|
54
|
+
background: rgba(255,255,255,0);
|
|
55
|
+
list-style: none;
|
|
56
|
+
position: absolute;
|
|
57
|
+
margin-top: 10px;
|
|
58
|
+
visibility: hidden;
|
|
59
|
+
opacity: 0;
|
|
60
|
+
//Instead of the line below you could use @include transition($transition-1, $transition-2, $transition-3, $transition-4, $transition-5, $transition-6, $transition-7, $transition-8, $transition-9, $transition-10)
|
|
61
|
+
transition: opacity 0.2s;
|
|
62
|
+
li {
|
|
63
|
+
float: none;
|
|
64
|
+
}
|
|
65
|
+
a {
|
|
66
|
+
white-space: nowrap;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
&:hover ul {
|
|
70
|
+
visibility: visible;
|
|
71
|
+
opacity: 1;
|
|
72
|
+
//Instead of the line below you could use @include transition($transition-1, $transition-2, $transition-3, $transition-4, $transition-5, $transition-6, $transition-7, $transition-8, $transition-9, $transition-10)
|
|
73
|
+
transition: opacity 0.2s;
|
|
74
|
+
z-index: 99999;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class Admin::SitesController < Admin::ResourceController
|
|
2
|
+
helper :sites
|
|
3
|
+
only_allow_access_to :index, :show, :new, :create, :edit, :update, :remove, :destroy,
|
|
4
|
+
:when => :admin,
|
|
5
|
+
:denied_url => { :controller => 'pages', :action => 'index' },
|
|
6
|
+
:denied_message => 'You must have administrative privileges to perform this action.'
|
|
7
|
+
|
|
8
|
+
%w(move_higher move_lower move_to_top move_to_bottom).each do |action|
|
|
9
|
+
define_method action do
|
|
10
|
+
model.send(action)
|
|
11
|
+
response_for :update
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module ScopedHelper
|
|
2
|
+
def self.included(base)
|
|
3
|
+
|
|
4
|
+
base.module_eval do
|
|
5
|
+
def title
|
|
6
|
+
t = current_site.name
|
|
7
|
+
t = TrustyCms::Config['admin.title'] || 'Radiant CMS' if t.blank?
|
|
8
|
+
t
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def subtitle
|
|
12
|
+
st = current_site.subtitle
|
|
13
|
+
st = TrustyCms::Config['admin.subtitle'] || 'publishing for small teams' if st.blank?
|
|
14
|
+
st
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module SitesHelper
|
|
2
|
+
def order_links(site)
|
|
3
|
+
String.new.tap do |output|
|
|
4
|
+
output << link_to(image("move_to_top.png", :alt => "Move to top"), move_to_top_admin_site_path(site), :method => :put)
|
|
5
|
+
output << link_to(image("move_higher.png", :alt => "Move up"), move_higher_admin_site_path(site), :method => :post)
|
|
6
|
+
output << link_to(image("move_lower.png", :alt => "Move down"), move_lower_admin_site_path(site), :method => :post)
|
|
7
|
+
output << link_to(image("move_to_bottom.png", :alt => "Move to bottom"), move_to_bottom_admin_site_path(site), :method => :put)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
data/app/models/site.rb
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# The site class includes - in find_for_host - some key retrieval and creation logic that is called from ApplicationController to set the current site context.
|
|
2
|
+
# Otherwise it's just another Trusty data model.
|
|
3
|
+
|
|
4
|
+
class Site < ActiveRecord::Base
|
|
5
|
+
acts_as_list
|
|
6
|
+
belongs_to :created_by, :class_name => 'User'
|
|
7
|
+
belongs_to :updated_by, :class_name => 'User'
|
|
8
|
+
belongs_to :production_homepage , :class_name => 'ProductionPage'
|
|
9
|
+
|
|
10
|
+
default_scope {order('position ASC')}
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
attr_accessor :several
|
|
14
|
+
|
|
15
|
+
# I've added one or two sql queries here for the sake of a separate default method
|
|
16
|
+
|
|
17
|
+
def find_for_host(hostname = '')
|
|
18
|
+
return default if hostname.blank?
|
|
19
|
+
sites = where("domain IS NOT NULL")
|
|
20
|
+
site = sites.find { |site| hostname == site.base_domain || hostname =~ Regexp.compile(site.domain) }
|
|
21
|
+
site || default
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Site.default returns the the first site it can find with an empty domain pattern.
|
|
25
|
+
|
|
26
|
+
def default
|
|
27
|
+
find_by_domain('') || find_by_domain(nil) || catchall
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# If none is found, we are probably brand new, so a workable default site is created.
|
|
31
|
+
|
|
32
|
+
def catchall
|
|
33
|
+
create({
|
|
34
|
+
:domain => '',
|
|
35
|
+
:name => 'default_site',
|
|
36
|
+
:base_domain => 'localhost',
|
|
37
|
+
:homepage => Page.find_by_parent_id(nil)
|
|
38
|
+
})
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Returns true if more than one site is present. This is normally only used to make interface decisions, eg whether to show the site-chooser dropdown.
|
|
42
|
+
|
|
43
|
+
def several?
|
|
44
|
+
several = (count > 1) if several.nil?
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
belongs_to :homepage, :class_name => "Page", :foreign_key => "homepage_id"
|
|
49
|
+
validates_presence_of :name, :base_domain
|
|
50
|
+
validates_uniqueness_of :domain
|
|
51
|
+
|
|
52
|
+
after_create :create_homepage
|
|
53
|
+
after_save :reload_routes
|
|
54
|
+
|
|
55
|
+
# Returns the fully specified web address for the supplied path, or the root of this site if no path is given.
|
|
56
|
+
|
|
57
|
+
def url(path = "/")
|
|
58
|
+
uri = URI.join("http://#{self.base_domain}", path)
|
|
59
|
+
uri.to_s
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Returns the fully specified web address for the development version of this site and the supplied path, or the root of this site if no path is given.
|
|
63
|
+
|
|
64
|
+
def dev_url(path = "/")
|
|
65
|
+
uri = URI.join("http://#{TrustyCms::Config['dev.host'] || 'dev'}.#{self.base_domain}", path)
|
|
66
|
+
uri.to_s
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def create_homepage
|
|
70
|
+
if self.homepage_id.blank?
|
|
71
|
+
self.homepage = self.build_homepage(:title => "#{self.name} Homepage",
|
|
72
|
+
:slug => "#{self.name.to_slug}", :breadcrumb => "Home")
|
|
73
|
+
default_status = TrustyCms::Config['defaults.page.status']
|
|
74
|
+
self.homepage.status = Status[default_status] if default_status
|
|
75
|
+
default_parts = TrustyCms::Config['defaults.page.parts'].to_s.strip.split(/\s*,\s*/)
|
|
76
|
+
default_parts.each do |name|
|
|
77
|
+
self.homepage.parts << PagePart.new(:name => name, :filter_id => TrustyCms::Config['defaults.page.filter'])
|
|
78
|
+
end
|
|
79
|
+
save
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def reload_routes
|
|
84
|
+
TrustyCms::Application.reload_routes!
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class Snippet < ActiveRecord::Base
|
|
2
|
+
|
|
3
|
+
# Default Order
|
|
4
|
+
default_scope {order('name')}
|
|
5
|
+
|
|
6
|
+
# Associations
|
|
7
|
+
belongs_to :created_by, :class_name => 'User'
|
|
8
|
+
belongs_to :updated_by, :class_name => 'User'
|
|
9
|
+
|
|
10
|
+
# Validations
|
|
11
|
+
validates_presence_of :name
|
|
12
|
+
validates_length_of :name, :maximum => 100
|
|
13
|
+
validates_length_of :filter_id, :maximum => 25, :allow_nil => true
|
|
14
|
+
validates_format_of :name, :with => %r{\A\S*\z}
|
|
15
|
+
validates_uniqueness_of :name
|
|
16
|
+
|
|
17
|
+
object_id_attr :filter, TextFilter
|
|
18
|
+
|
|
19
|
+
def after_initialize
|
|
20
|
+
self.filter_id ||= TrustyCms::Config['defaults.snippet.filter'] if new_record?
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
class SnippetFinder
|
|
2
|
+
class << self
|
|
3
|
+
def find(id)
|
|
4
|
+
find_map('find',id)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def find_by_name(name)
|
|
8
|
+
find_map('find_by_name', name)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def finder_types
|
|
12
|
+
[Snippet]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def find_map(meth, *args)
|
|
18
|
+
finder_types.find{|type|
|
|
19
|
+
found = type.send(meth, *args)
|
|
20
|
+
return found if found
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
module SnippetTags
|
|
2
|
+
include TrustyCms::Taggable
|
|
3
|
+
|
|
4
|
+
class TagError < StandardError; end
|
|
5
|
+
|
|
6
|
+
desc %{
|
|
7
|
+
Renders the snippet specified in the @name@ attribute within the context of a page.
|
|
8
|
+
|
|
9
|
+
*Usage:*
|
|
10
|
+
|
|
11
|
+
<pre><code><r:snippet name="snippet_name" /></code></pre>
|
|
12
|
+
|
|
13
|
+
When used as a double tag, the part in between both tags may be used within the
|
|
14
|
+
snippet itself, being substituted in place of @<r:yield/>@.
|
|
15
|
+
|
|
16
|
+
*Usage:*
|
|
17
|
+
|
|
18
|
+
<pre><code><r:snippet name="snippet_name">Lorem ipsum dolor...</r:snippet></code></pre>
|
|
19
|
+
}
|
|
20
|
+
tag 'snippet' do |tag|
|
|
21
|
+
required_attr(tag, 'name')
|
|
22
|
+
name = tag['name']
|
|
23
|
+
|
|
24
|
+
snippet = snippet_cache(name.strip)
|
|
25
|
+
|
|
26
|
+
if snippet
|
|
27
|
+
tag.locals.yield = tag.expand if tag.double?
|
|
28
|
+
tag.globals.page.render_snippet(snippet)
|
|
29
|
+
else
|
|
30
|
+
raise TagError.new("snippet '#{name}' not found")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def snippet_cache(name)
|
|
35
|
+
@snippet_cache ||= {}
|
|
36
|
+
|
|
37
|
+
snippet = @snippet_cache[name]
|
|
38
|
+
unless snippet
|
|
39
|
+
snippet = SnippetFinder.find_by_name(name)
|
|
40
|
+
@snippet_cache[name] = snippet
|
|
41
|
+
end
|
|
42
|
+
snippet
|
|
43
|
+
end
|
|
44
|
+
private :snippet_cache
|
|
45
|
+
|
|
46
|
+
desc %{
|
|
47
|
+
Used within a snippet as a placeholder for substitution of child content, when
|
|
48
|
+
the snippet is called as a double tag.
|
|
49
|
+
|
|
50
|
+
*Usage (within a snippet):*
|
|
51
|
+
|
|
52
|
+
<pre><code>
|
|
53
|
+
<div id="outer">
|
|
54
|
+
<p>before</p>
|
|
55
|
+
<r:yield/>
|
|
56
|
+
<p>after</p>
|
|
57
|
+
</div>
|
|
58
|
+
</code></pre>
|
|
59
|
+
|
|
60
|
+
If the above snippet was named "yielding", you could call it from any Page,
|
|
61
|
+
Layout or Snippet as follows:
|
|
62
|
+
|
|
63
|
+
<pre><code><r:snippet name="yielding">Content within</r:snippet></code></pre>
|
|
64
|
+
|
|
65
|
+
Which would output the following:
|
|
66
|
+
|
|
67
|
+
<pre><code>
|
|
68
|
+
<div id="outer">
|
|
69
|
+
<p>before</p>
|
|
70
|
+
Content within
|
|
71
|
+
<p>after</p>
|
|
72
|
+
</div>
|
|
73
|
+
</code></pre>
|
|
74
|
+
|
|
75
|
+
When called in the context of a Page or a Layout, @<r:yield/>@ outputs nothing.
|
|
76
|
+
}
|
|
77
|
+
tag 'yield' do |tag|
|
|
78
|
+
tag.locals.yield
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
- unless current_user.site
|
|
2
|
+
%tr
|
|
3
|
+
%th.label
|
|
4
|
+
%label{:for=>"user_admin"} Can edit site
|
|
5
|
+
%td.field{:style => 'text-align: left;'}
|
|
6
|
+
= select :user, :site_id, [['<any>', '']] + Site.all.map { |s| [s.name, s.id] }
|
|
7
|
+
%td.help
|
|
8
|
+
A user with no site is able to act (to whatever extent their status allows) on any site.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
- unless current_user.site
|
|
2
|
+
%p{:style => 'float: left; margin-right: 32px'}
|
|
3
|
+
%label{:for=>"layout_site_id", :Class => "admin_only"}
|
|
4
|
+
Site
|
|
5
|
+
- sites = Site.all.map { |s| [s.name, s.id] }
|
|
6
|
+
- selection = {:include_blank => Layout.is_shareable?}
|
|
7
|
+
- selection[:selected] = current_site.id if @layout.new_record? && ! Layout.is_shareable?
|
|
8
|
+
= select :layout, :site_id, sites, selection
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
= stylesheet_link_tag 'admin/multi_site'
|
|
2
|
+
|
|
3
|
+
- if admin? && defined?(Site) && defined?(controller) && controller.sited_model? && controller.template_name == 'index' && Site.several?
|
|
4
|
+
%nav#site_chooser
|
|
5
|
+
%ul#nav
|
|
6
|
+
%li
|
|
7
|
+
= "Current Site: #{current_site.name}"
|
|
8
|
+
%ul.expansion
|
|
9
|
+
- Site.all.each do |site|
|
|
10
|
+
%li
|
|
11
|
+
= link_to( site.name, "#{request.path}?site_id=#{site.id}", :class => site == current_site ? 'fg site-link' : 'site-link')
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
= render_region :form_top
|
|
2
|
+
.form-area
|
|
3
|
+
- render_region :form do |form|
|
|
4
|
+
|
|
5
|
+
- form.edit_name do
|
|
6
|
+
%fieldset.title
|
|
7
|
+
%h1
|
|
8
|
+
%i.fa.fa-sitemap
|
|
9
|
+
Site Information
|
|
10
|
+
%label{:for => "site_name"} Site title
|
|
11
|
+
= f.text_field :name, :class => "textbox", :size => 50
|
|
12
|
+
%br
|
|
13
|
+
%label{:for => "site_subtitle"} and subtitle
|
|
14
|
+
= f.text_field :subtitle, :class => "textbox"
|
|
15
|
+
|
|
16
|
+
- form.edit_domain do
|
|
17
|
+
%fieldset.domain
|
|
18
|
+
%h1
|
|
19
|
+
%i.fa.fa-lightbulb-o
|
|
20
|
+
Domain Information
|
|
21
|
+
%label{:for => "site_domain"}
|
|
22
|
+
Domain pattern
|
|
23
|
+
= f.text_field :domain, :class => "textbox", :size => 50
|
|
24
|
+
%br
|
|
25
|
+
%label{:for => "site_base_domain"}
|
|
26
|
+
Base domain name
|
|
27
|
+
= f.text_field :base_domain, :class => "textbox", :size => 50
|
|
28
|
+
|
|
29
|
+
- form.edit_homepage do
|
|
30
|
+
%fieldset.homepage
|
|
31
|
+
%h1
|
|
32
|
+
%i.fa.fa-home
|
|
33
|
+
Homepage ID
|
|
34
|
+
%label{:for => "site_homepage_id"} Homepage ID
|
|
35
|
+
= f.text_field :homepage_id, :class => "textbox"
|
|
36
|
+
|
|
37
|
+
%p.formnote
|
|
38
|
+
- if f.object.new_record?
|
|
39
|
+
A new homepage will be created automatically if none is specified.
|
|
40
|
+
- else
|
|
41
|
+
If you change the site homepage ID, be sure it is to a page with no parents.
|
|
42
|
+
|
|
43
|
+
- render_region :form_bottom do |form_bottom|
|
|
44
|
+
- form_bottom.edit_timestamp do
|
|
45
|
+
= updated_stamp @site
|
|
46
|
+
- form_bottom.edit_buttons do
|
|
47
|
+
%p.buttons
|
|
48
|
+
= save_model_button(@site)
|
|
49
|
+
or
|
|
50
|
+
= link_to "cancel", admin_sites_path
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
= stylesheet_link_tag 'admin/multi_site'
|
|
2
|
+
- render_region :main do |main|
|
|
3
|
+
- main.edit_header do
|
|
4
|
+
%h1 Edit Site
|
|
5
|
+
- main.edit_form do
|
|
6
|
+
= form_for @site, :url => admin_site_path(@site), :html => {:method => :put} do |f|
|
|
7
|
+
= render :partial => "form", :locals => {:f => f}
|