liquid_cms 0.2.1.1 → 0.2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. data/CHANGELOG.rdoc +7 -0
  2. data/README.rdoc +15 -1
  3. data/TODO.rdoc +0 -2
  4. data/app/controllers/cms/assets_controller.rb +20 -6
  5. data/app/controllers/cms/components_controller.rb +11 -3
  6. data/app/controllers/cms/pages_controller.rb +15 -4
  7. data/app/helpers/cms/common_helper.rb +31 -31
  8. data/app/liquid/cms_paperclip_extension.rb +75 -3
  9. data/app/models/cms/asset.rb +1 -1
  10. data/app/models/cms/component.rb +3 -3
  11. data/app/views/cms/assets/_form.html.erb +1 -1
  12. data/app/views/cms/assets/update.js.rjs +1 -0
  13. data/app/views/cms/components/update.js.rjs +1 -0
  14. data/app/views/cms/pages/_form.html.erb +1 -1
  15. data/app/views/cms/pages/update.js.rjs +1 -0
  16. data/app/views/layouts/cms.html.erb +4 -3
  17. data/generators/liquid_cms/liquid_cms_generator.rb +1 -0
  18. data/generators/liquid_cms/templates/config/locales/cms/en.yml +4 -0
  19. data/generators/liquid_cms/templates/migration_rev2.rb +13 -0
  20. data/generators/liquid_cms/templates/public/cms/codemirror/LICENSE +16 -20
  21. data/generators/liquid_cms/templates/public/cms/codemirror/lib/codemirror.css +68 -0
  22. data/generators/liquid_cms/templates/public/cms/codemirror/lib/codemirror.js +2197 -0
  23. data/generators/liquid_cms/templates/public/cms/codemirror/lib/overlay.js +51 -0
  24. data/generators/liquid_cms/templates/public/cms/codemirror/lib/runmode.js +27 -0
  25. data/generators/liquid_cms/templates/public/cms/codemirror/mode/clike/clike.js +247 -0
  26. data/generators/liquid_cms/templates/public/cms/codemirror/mode/clike/index.html +102 -0
  27. data/generators/liquid_cms/templates/public/cms/codemirror/mode/clojure/clojure.js +207 -0
  28. data/generators/liquid_cms/templates/public/cms/codemirror/mode/clojure/index.html +85 -0
  29. data/generators/liquid_cms/templates/public/cms/codemirror/mode/coffeescript/LICENSE +22 -0
  30. data/generators/liquid_cms/templates/public/cms/codemirror/mode/coffeescript/coffeescript.js +325 -0
  31. data/generators/liquid_cms/templates/public/cms/codemirror/mode/coffeescript/index.html +722 -0
  32. data/generators/liquid_cms/templates/public/cms/codemirror/mode/css/css.js +124 -0
  33. data/generators/liquid_cms/templates/public/cms/codemirror/mode/css/index.html +56 -0
  34. data/generators/liquid_cms/templates/public/cms/codemirror/mode/diff/diff.css +3 -0
  35. data/generators/liquid_cms/templates/public/cms/codemirror/mode/diff/diff.js +13 -0
  36. data/generators/liquid_cms/templates/public/cms/codemirror/mode/diff/index.html +99 -0
  37. data/generators/liquid_cms/templates/public/cms/codemirror/mode/haskell/haskell.js +242 -0
  38. data/generators/liquid_cms/templates/public/cms/codemirror/mode/haskell/index.html +60 -0
  39. data/generators/liquid_cms/templates/public/cms/codemirror/mode/htmlmixed/htmlmixed.js +79 -0
  40. data/generators/liquid_cms/templates/public/cms/codemirror/mode/htmlmixed/index.html +52 -0
  41. data/generators/liquid_cms/templates/public/cms/codemirror/mode/javascript/index.html +78 -0
  42. data/generators/liquid_cms/templates/public/cms/codemirror/mode/javascript/javascript.js +352 -0
  43. data/generators/liquid_cms/templates/public/cms/codemirror/mode/jinja2/index.html +38 -0
  44. data/generators/liquid_cms/templates/public/cms/codemirror/mode/jinja2/jinja2.js +42 -0
  45. data/generators/liquid_cms/templates/public/cms/codemirror/mode/lua/index.html +72 -0
  46. data/generators/liquid_cms/templates/public/cms/codemirror/mode/lua/lua.js +140 -0
  47. data/generators/liquid_cms/templates/public/cms/codemirror/mode/markdown/index.html +340 -0
  48. data/generators/liquid_cms/templates/public/cms/codemirror/mode/markdown/markdown.css +10 -0
  49. data/generators/liquid_cms/templates/public/cms/codemirror/mode/markdown/markdown.js +230 -0
  50. data/generators/liquid_cms/templates/public/cms/codemirror/mode/ntriples/index.html +33 -0
  51. data/generators/liquid_cms/templates/public/cms/codemirror/mode/ntriples/ntriples.js +172 -0
  52. data/generators/liquid_cms/templates/public/cms/codemirror/mode/pascal/LICENSE +7 -0
  53. data/generators/liquid_cms/templates/public/cms/codemirror/mode/pascal/index.html +49 -0
  54. data/generators/liquid_cms/templates/public/cms/codemirror/mode/pascal/pascal.js +138 -0
  55. data/generators/liquid_cms/templates/public/cms/codemirror/mode/php/index.html +49 -0
  56. data/generators/liquid_cms/templates/public/cms/codemirror/mode/php/php.js +116 -0
  57. data/generators/liquid_cms/templates/public/cms/codemirror/mode/plsql/index.html +63 -0
  58. data/generators/liquid_cms/templates/public/cms/codemirror/mode/plsql/plsql.js +217 -0
  59. data/generators/liquid_cms/templates/public/cms/codemirror/mode/python/LICENSE.txt +21 -0
  60. data/generators/liquid_cms/templates/public/cms/codemirror/mode/python/index.html +123 -0
  61. data/generators/liquid_cms/templates/public/cms/codemirror/mode/python/python.js +320 -0
  62. data/generators/liquid_cms/templates/public/cms/codemirror/mode/r/LICENSE +24 -0
  63. data/generators/liquid_cms/templates/public/cms/codemirror/mode/r/index.html +74 -0
  64. data/generators/liquid_cms/templates/public/cms/codemirror/mode/r/r.js +141 -0
  65. data/generators/liquid_cms/templates/public/cms/codemirror/mode/rst/index.html +526 -0
  66. data/generators/liquid_cms/templates/public/cms/codemirror/mode/rst/rst.css +75 -0
  67. data/generators/liquid_cms/templates/public/cms/codemirror/mode/rst/rst.js +333 -0
  68. data/generators/liquid_cms/templates/public/cms/codemirror/mode/ruby/LICENSE +24 -0
  69. data/generators/liquid_cms/templates/public/cms/codemirror/mode/ruby/index.html +172 -0
  70. data/generators/liquid_cms/templates/public/cms/codemirror/mode/ruby/ruby.js +195 -0
  71. data/generators/liquid_cms/templates/public/cms/codemirror/mode/scheme/index.html +65 -0
  72. data/generators/liquid_cms/templates/public/cms/codemirror/mode/scheme/scheme.js +202 -0
  73. data/generators/liquid_cms/templates/public/cms/codemirror/mode/smalltalk/index.html +56 -0
  74. data/generators/liquid_cms/templates/public/cms/codemirror/mode/smalltalk/smalltalk.js +122 -0
  75. data/generators/liquid_cms/templates/public/cms/codemirror/mode/sparql/index.html +41 -0
  76. data/generators/liquid_cms/templates/public/cms/codemirror/mode/sparql/sparql.js +143 -0
  77. data/generators/liquid_cms/templates/public/cms/codemirror/mode/stex/index.html +96 -0
  78. data/generators/liquid_cms/templates/public/cms/codemirror/mode/stex/stex.js +167 -0
  79. data/generators/liquid_cms/templates/public/cms/codemirror/mode/velocity/index.html +103 -0
  80. data/generators/liquid_cms/templates/public/cms/codemirror/mode/velocity/velocity.js +146 -0
  81. data/generators/liquid_cms/templates/public/cms/codemirror/mode/xml/index.html +42 -0
  82. data/generators/liquid_cms/templates/public/cms/codemirror/mode/xml/xml.js +231 -0
  83. data/generators/liquid_cms/templates/public/cms/codemirror/mode/xmlpure/index.html +60 -0
  84. data/generators/liquid_cms/templates/public/cms/codemirror/mode/xmlpure/xmlpure.js +481 -0
  85. data/generators/liquid_cms/templates/public/cms/codemirror/mode/yaml/index.html +68 -0
  86. data/generators/liquid_cms/templates/public/cms/codemirror/mode/yaml/yaml.js +95 -0
  87. data/generators/liquid_cms/templates/public/cms/codemirror/theme/cobalt.css +17 -0
  88. data/generators/liquid_cms/templates/public/cms/codemirror/theme/default.css +19 -0
  89. data/generators/liquid_cms/templates/public/cms/codemirror/theme/eclipse.css +24 -0
  90. data/generators/liquid_cms/templates/public/cms/codemirror/theme/elegant.css +9 -0
  91. data/generators/liquid_cms/templates/public/cms/codemirror/theme/neat.css +8 -0
  92. data/generators/liquid_cms/templates/public/cms/codemirror/theme/night.css +20 -0
  93. data/generators/liquid_cms/templates/public/cms/javascripts/cms.js +1 -1
  94. data/generators/liquid_cms/templates/public/cms/javascripts/codemirror_custom.js +96 -0
  95. data/generators/liquid_cms/templates/public/cms/stylesheets/codemirror_changes.css +26 -0
  96. data/generators/liquid_cms/templates/public/cms/stylesheets/liquid.css +7 -0
  97. data/generators/liquid_cms/templates/public/cms/stylesheets/simple_form.css +0 -8
  98. data/lib/liquid_cms/version.rb +1 -1
  99. data/liquid_cms.gemspec +0 -1
  100. data/test/functional/assets_controller_test.rb +35 -20
  101. data/test/functional/components_controller_test.rb +15 -5
  102. data/test/functional/pages_controller_test.rb +19 -6
  103. data/test/rails_app/config/environment.rb +1 -1
  104. data/test/rails_app/config/locales/cms/en.yml +19 -4
  105. data/test/rails_app/db/migrate/20110511161859_create_liquid_cms_upgrade_rev2.rb +13 -0
  106. data/test/unit/asset_test.rb +1 -1
  107. metadata +100 -58
  108. data/generators/liquid_cms/templates/public/cms/codemirror/css/csscolors.css +0 -55
  109. data/generators/liquid_cms/templates/public/cms/codemirror/css/docs.css +0 -158
  110. data/generators/liquid_cms/templates/public/cms/codemirror/css/font.js +0 -15
  111. data/generators/liquid_cms/templates/public/cms/codemirror/css/jscolors.css +0 -59
  112. data/generators/liquid_cms/templates/public/cms/codemirror/css/sparqlcolors.css +0 -43
  113. data/generators/liquid_cms/templates/public/cms/codemirror/css/xmlcolors.css +0 -55
  114. data/generators/liquid_cms/templates/public/cms/codemirror/js/codemirror.js +0 -582
  115. data/generators/liquid_cms/templates/public/cms/codemirror/js/editor.js +0 -1671
  116. data/generators/liquid_cms/templates/public/cms/codemirror/js/highlight.js +0 -68
  117. data/generators/liquid_cms/templates/public/cms/codemirror/js/mirrorframe.js +0 -81
  118. data/generators/liquid_cms/templates/public/cms/codemirror/js/parsecss.js +0 -161
  119. data/generators/liquid_cms/templates/public/cms/codemirror/js/parsedummy.js +0 -32
  120. data/generators/liquid_cms/templates/public/cms/codemirror/js/parsehtmlmixed.js +0 -93
  121. data/generators/liquid_cms/templates/public/cms/codemirror/js/parsejavascript.js +0 -359
  122. data/generators/liquid_cms/templates/public/cms/codemirror/js/parsesparql.js +0 -162
  123. data/generators/liquid_cms/templates/public/cms/codemirror/js/parsexml.js +0 -291
  124. data/generators/liquid_cms/templates/public/cms/codemirror/js/select.js +0 -699
  125. data/generators/liquid_cms/templates/public/cms/codemirror/js/stringstream.js +0 -159
  126. data/generators/liquid_cms/templates/public/cms/codemirror/js/tokenize.js +0 -57
  127. data/generators/liquid_cms/templates/public/cms/codemirror/js/tokenizejavascript.js +0 -174
  128. data/generators/liquid_cms/templates/public/cms/codemirror/js/undo.js +0 -413
  129. data/generators/liquid_cms/templates/public/cms/codemirror/js/unittests.js +0 -44
  130. data/generators/liquid_cms/templates/public/cms/codemirror/js/util.js +0 -133
@@ -0,0 +1,24 @@
1
+ .cm-s-eclipse span.cm-meta {color: #FF1717;}
2
+ .cm-s-eclipse span.cm-keyword { font-weight: bold; color: #7F0055; }
3
+ .cm-s-eclipse span.cm-atom {color: #219;}
4
+ .cm-s-eclipse span.cm-number {color: #164;}
5
+ .cm-s-eclipse span.cm-def {color: #00f;}
6
+ .cm-s-eclipse span.cm-variable {color: black;}
7
+ .cm-s-eclipse span.cm-variable-2 {color: #0000C0;}
8
+ .cm-s-eclipse span.cm-variable-3 {color: #0000C0;}
9
+ .cm-s-eclipse span.cm-property {color: black;}
10
+ .cm-s-eclipse span.cm-operator {color: black;}
11
+ .cm-s-eclipse span.cm-comment {color: #3F7F5F;}
12
+ .cm-s-eclipse span.cm-string {color: #2A00FF;}
13
+ .cm-s-eclipse span.cm-string-2 {color: #f50;}
14
+ .cm-s-eclipse span.cm-error {color: #f00;}
15
+ .cm-s-eclipse span.cm-qualifier {color: #555;}
16
+ .cm-s-eclipse span.cm-builtin {color: #30a;}
17
+ .cm-s-eclipse span.cm-bracket {color: #cc7;}
18
+ .cm-s-eclipse span.cm-tag {color: #170;}
19
+ .cm-s-eclipse span.cm-attribute {color: #00c;}
20
+
21
+ .CodeMirror-matchingbracket{
22
+ border:1px solid grey;
23
+ color:black !important;;
24
+ }
@@ -0,0 +1,9 @@
1
+ .cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;}
2
+ .cm-s-elegant span.cm-comment {color: #262;font-style: italic;}
3
+ .cm-s-elegant span.cm-meta {color: #555;font-style: italic;}
4
+ .cm-s-elegant span.cm-variable {color: black;}
5
+ .cm-s-elegant span.cm-variable-2 {color: #b11;}
6
+ .cm-s-elegant span.cm-qualifier {color: #555;}
7
+ .cm-s-elegant span.cm-keyword {color: #730;}
8
+ .cm-s-elegant span.cm-builtin {color: #30a;}
9
+ .cm-s-elegant span.cm-error {background-color: #fdd;}
@@ -0,0 +1,8 @@
1
+ .cm-s-neat span.cm-comment { color: #a86; }
2
+ .cm-s-neat span.cm-keyword { font-weight: bold; color: blue; }
3
+ .cm-s-neat span.cm-string { color: #a22; }
4
+ .cm-s-neat span.cm-builtin { font-weight: bold; color: #077; }
5
+ .cm-s-neat span.cm-special { font-weight: bold; color: #0aa; }
6
+ .cm-s-neat span.cm-variable { color: black; }
7
+ .cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; }
8
+ .cm-s-neat span.cm-meta {color: #555;}
@@ -0,0 +1,20 @@
1
+ /* Loosely based on the Midnight Textmate theme */
2
+
3
+ .cm-s-night { background: #0a001f; color: #f8f8f8; }
4
+ .cm-s-night span.CodeMirror-selected { background: #a8f !important; }
5
+ .cm-s-night .CodeMirror-gutter { background: #0a001f; border-right: 1px solid #aaa; }
6
+ .cm-s-night .CodeMirror-gutter-text { color: #f8f8f8; }
7
+ .cm-s-night .CodeMirror-cursor { border-left: 1px solid white !important; }
8
+
9
+ .cm-s-night span.cm-comment { color: #6900a1; }
10
+ .cm-s-night span.cm-atom { color: #845dc4; }
11
+ .cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; }
12
+ .cm-s-night span.cm-keyword { color: #599eff; }
13
+ .cm-s-night span.cm-string { color: #37f14a; }
14
+ .cm-s-night span.cm-meta { color: #7678e2; }
15
+ .cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; }
16
+ .cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; }
17
+ .cm-s-night span.cm-error { color: #9d1e15; }
18
+ .cm-s-night span.cm-bracket { color: #8da6ce; }
19
+ .cm-s-night span.cm-comment { color: #6900a1; }
20
+ .cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; }
@@ -2,7 +2,7 @@
2
2
  function set_component_view_state(elem) {
3
3
  var key = elem.getAttribute('id');
4
4
  var current_folders = jar.get('component_folders') || {};
5
-
5
+
6
6
  if (elem.next('ul').visible())
7
7
  current_folders[key] = true;
8
8
  else
@@ -0,0 +1,96 @@
1
+ function codemirrorToggleFullscreenEditing()
2
+ {
3
+ var editorDiv = $$('.CodeMirror-scroll').first();
4
+
5
+ if (!editorDiv.hasClassName('fullscreen')) {
6
+ var height = document.viewport.getHeight()+document.viewport.getScrollOffsets()[1];
7
+
8
+ toggleFullscreenEditing.beforeFullscreen = { height: editorDiv.getHeight(), width: editorDiv.getWidth() }
9
+ editorDiv.addClassName('fullscreen');
10
+ editorDiv.setStyle({height:height+'px', width:'100%'});
11
+ editor.refresh();
12
+ }
13
+ else {
14
+ editorDiv.removeClassName('fullscreen');
15
+ editorDiv.setStyle({
16
+ height:toggleFullscreenEditing.beforeFullscreen.height,
17
+ width:toggleFullscreenEditing.beforeFullscreen.width
18
+ });
19
+ editor.refresh();
20
+ }
21
+ }
22
+
23
+ function codemirrorSave(editor, form, use_ajax) {
24
+ editor.save();
25
+
26
+ if (!use_ajax) {
27
+ form.submit();
28
+ return;
29
+ }
30
+
31
+ var has_indicator = $('indicator');
32
+
33
+ if (has_indicator)
34
+ Element.show('indicator');
35
+
36
+ new Ajax.Request(form.action, {asynchronous:true, evalScripts:true, onComplete:
37
+ function(request){
38
+ if (has_indicator)
39
+ Element.hide('indicator');
40
+
41
+ form.enable();
42
+ },
43
+ parameters:form.serialize()}
44
+ );
45
+
46
+ form.disable();
47
+ }
48
+
49
+ CodeMirror.defineMode("liquid", function(config, parserConfig) {
50
+ var liquidOverlay = {
51
+ token: function(stream, state) {
52
+ if (stream.match("{{", false)) {
53
+ stream.match("{{");
54
+ while ((ch = stream.next()) != null)
55
+ if (ch == "}" && stream.next() == "}") break;
56
+ return "liquid-control";
57
+ }
58
+
59
+ if (stream.match("{%", false)) {
60
+ stream.match("{%");
61
+ while ((ch = stream.next()) != null)
62
+ if (ch == "%" && stream.next() == "}") break;
63
+ return "liquid-output";
64
+ }
65
+
66
+ while (stream.next() != null && !stream.match("{{", false) && !stream.match("{%", false)) {}
67
+ return null;
68
+ }
69
+ };
70
+
71
+ return CodeMirror.overlayParser(CodeMirror.getMode(config, parserConfig.backdrop || "text/html"), liquidOverlay);
72
+ });
73
+
74
+ function initCodemirror(mode, form, textarea, use_ajax, liquid_support) {
75
+ var codeMirrorOptions = {
76
+ mode : mode,
77
+ onKeyEvent : function(instance, event){
78
+ if (event.type == 'keydown') {
79
+ if (event.ctrlKey && (event.which == 83 || event.keyCode == 83)) {
80
+ event.stop();
81
+ codemirrorSave(instance, form, use_ajax);
82
+ }
83
+ // Hook into F11
84
+ //else if (event.keyCode == 122 || event.keyCode == 27) {
85
+ // event.stop();
86
+ // codemirrorToggleFullscreenEditing();
87
+ //}
88
+ }
89
+ }
90
+ }
91
+
92
+ //if (liquid_support)
93
+ // codeMirrorOptions.mode = 'liquid';
94
+
95
+ var editor = CodeMirror.fromTextArea(textarea, codeMirrorOptions);
96
+ }
@@ -0,0 +1,26 @@
1
+ .CodeMirror {
2
+ background-color: white;
3
+ border: 1px solid #BBBBBB;
4
+ display: inline-block;
5
+ width: 89%;
6
+ }
7
+ .CodeMirror-scroll {
8
+ height: auto;
9
+ max-height: 800px;
10
+ min-height: 350px;
11
+ }
12
+
13
+ .fullscreen {
14
+ background-color: white;
15
+ display: block;
16
+ position: absolute;
17
+ top: 0;
18
+ left: 0;
19
+ width: 100%;
20
+ height: 100%;
21
+ z-index: 9999;
22
+ margin: 0;
23
+ padding: 0;
24
+ border: 0px solid #BBBBBB;
25
+ opacity: 1;
26
+ }
@@ -0,0 +1,7 @@
1
+ span.cm-liquid-control {
2
+ }
3
+ span.cm-liquid-output {
4
+ }
5
+ span.cm-liquid-control, span.cm-liquid-output {
6
+ color: purple;
7
+ }
@@ -104,14 +104,6 @@ form.simple_form .details .label {
104
104
  float: none;
105
105
  }
106
106
 
107
- .CodeMirror-wrapping {
108
- display: inline-block;
109
- }
110
- .CodeMirror-wrapping iframe {
111
- background-color: white;
112
- border: 1px solid #BBBBBB !important;
113
- }
114
-
115
107
  div.dimensions {
116
108
  margin-bottom: 1.3em;
117
109
  }
@@ -1,3 +1,3 @@
1
1
  module Cms
2
- VERSION = "0.2.1.1"
2
+ VERSION = "0.2.2.0"
3
3
  end
data/liquid_cms.gemspec CHANGED
@@ -19,7 +19,6 @@ Gem::Specification.new do |s|
19
19
 
20
20
  s.add_dependency 'rails', '~> 2.3.5'
21
21
  s.add_dependency 'paperclip', '~> 2.3.1'
22
- s.add_dependency 'vestal_versions', '~> 1.0.1'
23
22
  s.add_dependency 'simple_form', '1.0.4'
24
23
  s.add_dependency 'rubyzip', '~> 0.9.1'
25
24
  s.add_dependency 'will_paginate', '~> 2.3.12'
@@ -119,7 +119,8 @@ class Cms::AssetsControllerTest < ActionController::TestCase
119
119
 
120
120
  put :update, :id => asset, :cms_asset => {:asset => ActionController::TestUploadedFile.new(new_asset_file)}
121
121
  assert_response :redirect
122
- assert_redirected_to cms_root_path
122
+ assert_redirected_to edit_cms_asset_path(asset)
123
+ assert_equal 'The asset has been updated.', flash[:notice]
123
124
 
124
125
  # check that the file name updated
125
126
  assert_equal File.basename(new_asset_file), asset.reload.asset_file_name
@@ -131,27 +132,41 @@ class Cms::AssetsControllerTest < ActionController::TestCase
131
132
  # file contents are ignored for non-editable assets
132
133
  put :update, :id => asset, :cms_asset => {:file_content => 'new content'}
133
134
  assert_response :redirect
134
- assert_redirected_to cms_root_path
135
+ assert_redirected_to edit_cms_asset_path(asset)
136
+ assert_equal 'The asset has been updated.', flash[:notice]
135
137
  end
136
138
 
137
- should "modify the contents of an editable asset file and it's meta data" do
138
- asset = Factory(:js_asset, :context => @company)
139
- assert_nil asset.meta_data
140
- assert_equal 0, asset.meta.length
141
-
142
- asset_file = asset_file(asset.asset_file_name)
143
- setup_asset asset_file
144
-
145
- Cms::Asset.any_instance.stubs(:asset => stub(:path => asset_file))
146
- Cms::Asset.any_instance.expects(:file_content=).with('new content').returns('new content')
147
-
148
- put :update, :id => asset, :cms_asset => {:file_content => 'new content', :meta => {'new_0' => {:name => 'key_a', :value => 'test'}, 'new_1' => {:name => 'key_b', :value => 'test'}}}
149
- assert_response :redirect
150
- assert_redirected_to cms_root_path
151
-
152
- asset.reload
153
- assert_not_nil asset.meta_data
154
- assert_equal 2, asset.meta.length
139
+ context "update editable content" do
140
+ setup do
141
+ @asset = Factory(:js_asset, :context => @company)
142
+
143
+ asset_file = asset_file(@asset.asset_file_name)
144
+ setup_asset asset_file
145
+
146
+ Cms::Asset.any_instance.stubs(:asset => stub(:path => asset_file))
147
+ Cms::Asset.any_instance.expects(:file_content=).with('new content').returns('new content')
148
+ end
149
+
150
+ teardown do
151
+ assert_equal 'The asset has been updated.', flash[:notice]
152
+ @asset.reload
153
+ assert_not_nil @asset.meta_data
154
+ assert_equal 2, @asset.meta.length
155
+ end
156
+
157
+ should "modify the contents of an editable asset file and it's meta data" do
158
+ assert_nil @asset.meta_data
159
+ assert_equal 0, @asset.meta.length
160
+
161
+ put :update, :id => @asset, :cms_asset => {:file_content => 'new content', :meta => {'new_0' => {:name => 'key_a', :value => 'test'}, 'new_1' => {:name => 'key_b', :value => 'test'}}}
162
+ assert_response :redirect
163
+ assert_redirected_to edit_cms_asset_path(@asset)
164
+ end
165
+
166
+ should "update via XHR" do
167
+ xhr :put, :update, :id => @asset, :cms_asset => {:file_content => 'new content', :meta => {'new_0' => {:name => 'key_a', :value => 'test'}, 'new_1' => {:name => 'key_b', :value => 'test'}}}
168
+ assert_response :success
169
+ end
155
170
  end
156
171
  end
157
172
 
@@ -27,11 +27,21 @@ class Cms::ComponentsControllerTest < ActionController::TestCase
27
27
  assert_template 'edit'
28
28
  end
29
29
 
30
- should "update" do
31
- put :update, :url => [@file], :file_content => 'new content'
32
- assert_response :redirect
33
- assert_equal "The component file has been updated.", flash[:notice]
34
- assert_equal "new content\n", File.read(Cms::Component.full_path(@context).join(@file))
30
+ context "update" do
31
+ should "update via HTTP" do
32
+ put :update, :url => [@file], :file_content => 'new content'
33
+ assert_response :redirect
34
+ assert_redirected_to :controller => 'cms/components', :action => 'edit', :url => @file
35
+ assert_equal "The component file has been updated.", flash[:notice]
36
+ assert_equal "new content\n", File.read(Cms::Component.full_path(@context).join(@file))
37
+ end
38
+
39
+ should "update via XHR" do
40
+ xhr :put, :update, :url => [@file], :file_content => 'new content'
41
+ assert_response :success
42
+ assert_equal "The component file has been updated.", flash[:notice]
43
+ assert_equal "new content\n", File.read(Cms::Component.full_path(@context).join(@file))
44
+ end
35
45
  end
36
46
 
37
47
  should "valid destroy" do
@@ -70,12 +70,25 @@ class Cms::PagesControllerTest < ActionController::TestCase
70
70
  assert_template 'edit'
71
71
  end
72
72
 
73
- should "update a page" do
74
- put :update, :id => @company.pages.first.id, :cms_page => {:slug => '', :published => false}
75
- assert_response :redirect
76
- assert_equal true, assigns(:page).errors.empty?
77
- assert_equal 'The page has been updated.', flash[:notice]
78
- assert_redirected_to edit_cms_page_path
73
+ context "update" do
74
+ setup do
75
+ @page = @company.pages.first
76
+ end
77
+
78
+ should "update via HTTP" do
79
+ put :update, :id => @page.id, :cms_page => {:slug => '', :published => false}
80
+ assert_response :redirect
81
+ assert_equal true, assigns(:page).errors.empty?
82
+ assert_redirected_to edit_cms_page_path(@page)
83
+ assert_equal 'The page has been updated.', flash[:notice]
84
+ end
85
+
86
+ should "update via XHR" do
87
+ xhr :put, :update, :id => @page.id, :cms_page => {:slug => '', :published => false}
88
+ assert_response :success
89
+ assert_equal true, assigns(:page).errors.empty?
90
+ assert_equal 'The page has been updated.', flash[:notice]
91
+ end
79
92
  end
80
93
 
81
94
  should "destroy a page via HTML :DELETE" do
@@ -1,7 +1,7 @@
1
1
  # Be sure to restart your server when you modify this file
2
2
 
3
3
  # Specifies gem version of Rails to use when vendor/rails is not present
4
- RAILS_GEM_VERSION = '2.3.11' unless defined? RAILS_GEM_VERSION
4
+ RAILS_GEM_VERSION = '2.3.14' unless defined? RAILS_GEM_VERSION
5
5
 
6
6
  # Bootstrap the Rails environment, frameworks, and default configuration
7
7
  require File.join(File.dirname(__FILE__), 'boot')
@@ -1,14 +1,19 @@
1
1
  en:
2
2
  pages:
3
+ layout:
4
+ title: 'Liquid CMS'
3
5
  actions:
4
6
  index:
5
- title: 'Site Pages'
7
+ title: 'Pages'
6
8
  none: 'There are currently no pages.'
7
- new_link: 'Create a new page'
9
+ new: 'Create a new page'
10
+ search: 'Search'
8
11
  new:
9
12
  title: 'New Page'
10
13
  edit:
11
14
  title: 'Editing Page'
15
+ search:
16
+ title: 'Page Search'
12
17
  flash:
13
18
  created: 'The page has been saved.'
14
19
  updated: 'The page has been updated.'
@@ -17,9 +22,9 @@ en:
17
22
  assets:
18
23
  actions:
19
24
  index:
20
- title: 'Site Assets'
25
+ title: 'Assets'
21
26
  none: 'There are currently no assets.'
22
- new_link: 'Upload a new asset'
27
+ new: 'Upload a new asset'
23
28
  new:
24
29
  title: 'New Asset'
25
30
  edit:
@@ -33,6 +38,9 @@ en:
33
38
  actions:
34
39
  index:
35
40
  title: 'Components'
41
+ none: 'There are currently no components.'
42
+ flash:
43
+ updated: 'The component file has been updated.'
36
44
 
37
45
  simple_form:
38
46
  "yes": 'Yes'
@@ -55,16 +63,23 @@ en:
55
63
  root: 'Home Page'
56
64
  cms_asset:
57
65
  asset_file_name: 'File'
66
+ tag_list: 'Tags'
58
67
  hints:
59
68
  cms_page:
60
69
  name: 'The name must contain no whitespace or any other special characters. Letters, numbers, hyphens, underscores and periods are valid.<br/>The extensions <em>.css</em>, <em>.js</em>, <em>.xml</em>, <em>.json</em> and <em>.txt</em> can used to auto-identify the content-type. If no extension is provided, html is the default type.'
61
70
  content: 'To create a layout page, add the <em>{{ content_for_layout }}</em> tag which will act as a placeholder for the contents of another page. Use ctrl+s to save.'
62
71
  slug: 'The url path that will be used to access this page. Defaults to the page name if not provided. ie. /name.<br/> Ex. /home_page'
63
72
  layout_page_id: 'Optional page that will be used as this pages layout. Ie. This pages content will be inserted into the layout page where the <em>{{ content_for_layout }}</em> tag is specified.'
73
+ published: 'Make this page accessible via the pages name or url path?'
74
+ root: 'Make this page the sites root path (/)? Only one page can have this designation.'
64
75
  cms_component:
65
76
  file_content: '<em>No liquid support for editing components.</em> Use ctrl+s to save.'
66
77
  cms_asset:
67
78
  asset: 'Upload an asset file.'
79
+ tag_list: 'Seperate tags with commas.'
80
+ dimensions: 'Specify custom dimensions in pixels as width x height. The aspect ratio will be maintained, so actual dimensions may differ. Applies to image assets only.'
81
+ meta:
82
+ name: 'The name must begin with a letter and consist only of lowercase letters, numbers and underscores.'
68
83
  file_content: '<em>No liquid support for editing assets.</em> Use ctrl+s to save.'
69
84
  edit:
70
85
  asset: 'An existing file has been uploaded. Upload a new file to replace it.'
@@ -0,0 +1,13 @@
1
+ class CreateLiquidCmsUpgradeRev2 < ActiveRecord::Migration
2
+ def self.up
3
+ change_table :cms_assets do |t|
4
+ t.text :cms_asset_dimensions # serialized yaml
5
+ end
6
+ end
7
+
8
+ def self.down
9
+ change_table :cms_assets do |t|
10
+ t.remove :cms_asset_dimensions
11
+ end
12
+ end
13
+ end
@@ -122,7 +122,7 @@ class Cms::AssetTest < ActiveSupport::TestCase
122
122
 
123
123
  context "javascript" do
124
124
  setup do
125
- @asset.update_attribute :asset_content_type, 'text/javascript'
125
+ @asset.update_attributes :asset_content_type => 'text/javascript', :asset_file_name => 'test.js'
126
126
  setup_asset @asset.asset.path(:original)
127
127
  end
128
128