th_simple_content_management 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. data/app/assets/images/simple_content_management/resize-handle.png +0 -0
  2. data/app/assets/javascripts/simple_content_management/simple_pages.js +1 -21
  3. data/app/assets/javascripts/simple_content_management/simple_pages/form.js +32 -0
  4. data/app/assets/javascripts/th-page-editor/column.js +136 -0
  5. data/app/assets/javascripts/th-page-editor/index.js +104 -0
  6. data/app/assets/javascripts/th-page-editor/row.js +90 -0
  7. data/app/assets/stylesheets/simple_content_management/simple_pages.css.scss +80 -8
  8. data/app/controllers/redactor_rails/documents_controller.rb +28 -0
  9. data/app/controllers/redactor_rails/pictures_controller.rb +28 -0
  10. data/app/helpers/simple_content_management/simple_pages_helper.rb +4 -0
  11. data/app/models/redactor/asset.rb +5 -0
  12. data/app/models/redactor/document.rb +11 -0
  13. data/app/models/redactor/picture.rb +7 -0
  14. data/app/models/simple_content_management/simple_menu.rb +1 -1
  15. data/app/models/simple_content_management/simple_page.rb +6 -0
  16. data/app/views/simple_content_management/simple_pages/_form.html.erb +48 -3
  17. data/config/routes.rb +4 -0
  18. data/lib/generators/redactor/config_generator.rb +18 -0
  19. data/lib/generators/redactor/install_generator.rb +75 -0
  20. data/lib/generators/redactor/templates/active_record/carrierwave/devise_migration.rb +30 -0
  21. data/lib/generators/redactor/templates/active_record/carrierwave/migration.rb +30 -0
  22. data/lib/generators/redactor/templates/active_record/carrierwave/redactor/asset.rb +5 -0
  23. data/lib/generators/redactor/templates/active_record/carrierwave/redactor/document.rb +11 -0
  24. data/lib/generators/redactor/templates/active_record/carrierwave/redactor/picture.rb +7 -0
  25. data/lib/generators/redactor/templates/base/carrierwave/uploaders/redactor_rails_document_uploader.rb +15 -0
  26. data/lib/generators/redactor/templates/base/carrierwave/uploaders/redactor_rails_picture_uploader.rb +53 -0
  27. data/lib/generators/redactor/templates/config.js +17 -0
  28. data/lib/generators/redactor/templates/mongoid/carrierwave/redactor/asset.rb +9 -0
  29. data/lib/generators/redactor/templates/mongoid/carrierwave/redactor/document.rb +14 -0
  30. data/lib/generators/redactor/templates/mongoid/carrierwave/redactor/picture.rb +7 -0
  31. data/lib/redactor-rails.rb +41 -0
  32. data/lib/redactor-rails/backend/carrierwave.rb +64 -0
  33. data/lib/redactor-rails/devise.rb +11 -0
  34. data/lib/redactor-rails/engine.rb +14 -0
  35. data/lib/redactor-rails/helper.rb +8 -0
  36. data/lib/redactor-rails/http.rb +89 -0
  37. data/lib/redactor-rails/orm/active_record.rb +27 -0
  38. data/lib/redactor-rails/orm/base.rb +38 -0
  39. data/lib/redactor-rails/orm/mongoid.rb +37 -0
  40. data/lib/redactor-rails/version.rb +3 -0
  41. data/lib/redactor_rails_document_uploader.rb +15 -0
  42. data/lib/redactor_rails_picture_uploader.rb +53 -0
  43. data/lib/simple_content_management.rb +5 -0
  44. data/lib/simple_content_management/content_text.rb +25 -0
  45. data/lib/simple_content_management/version.rb +1 -1
  46. data/vendor/assets/javascripts/redactor-rails/config.js +17 -0
  47. data/vendor/assets/javascripts/redactor-rails/css/docstyle.css +139 -0
  48. data/vendor/assets/javascripts/redactor-rails/css/style.css +26 -0
  49. data/vendor/assets/javascripts/redactor-rails/css/wym.css +151 -0
  50. data/vendor/assets/javascripts/redactor-rails/index.js +2 -0
  51. data/vendor/assets/javascripts/redactor-rails/langs/ar.js +66 -0
  52. data/vendor/assets/javascripts/redactor-rails/langs/ba.js +69 -0
  53. data/vendor/assets/javascripts/redactor-rails/langs/bg.js +67 -0
  54. data/vendor/assets/javascripts/redactor-rails/langs/by.js +65 -0
  55. data/vendor/assets/javascripts/redactor-rails/langs/cs.js +77 -0
  56. data/vendor/assets/javascripts/redactor-rails/langs/da.js +66 -0
  57. data/vendor/assets/javascripts/redactor-rails/langs/de.js +70 -0
  58. data/vendor/assets/javascripts/redactor-rails/langs/en.js +66 -0
  59. data/vendor/assets/javascripts/redactor-rails/langs/eo.js +66 -0
  60. data/vendor/assets/javascripts/redactor-rails/langs/es.js +66 -0
  61. data/vendor/assets/javascripts/redactor-rails/langs/fa.js +66 -0
  62. data/vendor/assets/javascripts/redactor-rails/langs/fi.js +69 -0
  63. data/vendor/assets/javascripts/redactor-rails/langs/fr.js +76 -0
  64. data/vendor/assets/javascripts/redactor-rails/langs/hr.js +69 -0
  65. data/vendor/assets/javascripts/redactor-rails/langs/hu.js +67 -0
  66. data/vendor/assets/javascripts/redactor-rails/langs/id.js +66 -0
  67. data/vendor/assets/javascripts/redactor-rails/langs/it.js +68 -0
  68. data/vendor/assets/javascripts/redactor-rails/langs/ja.js +66 -0
  69. data/vendor/assets/javascripts/redactor-rails/langs/ko.js +66 -0
  70. data/vendor/assets/javascripts/redactor-rails/langs/lv.js +65 -0
  71. data/vendor/assets/javascripts/redactor-rails/langs/nl.js +69 -0
  72. data/vendor/assets/javascripts/redactor-rails/langs/pl.js +66 -0
  73. data/vendor/assets/javascripts/redactor-rails/langs/pt_br.js +72 -0
  74. data/vendor/assets/javascripts/redactor-rails/langs/ro.js +66 -0
  75. data/vendor/assets/javascripts/redactor-rails/langs/ru.js +66 -0
  76. data/vendor/assets/javascripts/redactor-rails/langs/sk.js +66 -0
  77. data/vendor/assets/javascripts/redactor-rails/langs/sq.js +69 -0
  78. data/vendor/assets/javascripts/redactor-rails/langs/sr-cir.js +69 -0
  79. data/vendor/assets/javascripts/redactor-rails/langs/sr-lat.js +69 -0
  80. data/vendor/assets/javascripts/redactor-rails/langs/sv.js +66 -0
  81. data/vendor/assets/javascripts/redactor-rails/langs/tr.js +66 -0
  82. data/vendor/assets/javascripts/redactor-rails/langs/ua.js +67 -0
  83. data/vendor/assets/javascripts/redactor-rails/langs/vi.js +65 -0
  84. data/vendor/assets/javascripts/redactor-rails/langs/zh_cn.js +70 -0
  85. data/vendor/assets/javascripts/redactor-rails/langs/zh_tw.js +66 -0
  86. data/vendor/assets/javascripts/redactor-rails/redactor.js +6074 -0
  87. data/vendor/assets/stylesheets/redactor-rails/css/redactor-iframe.css +201 -0
  88. data/vendor/assets/stylesheets/redactor-rails/css/redactor.css +780 -0
  89. data/vendor/assets/stylesheets/redactor-rails/css/style.css +26 -0
  90. data/vendor/assets/stylesheets/redactor-rails/index.css +1 -0
  91. metadata +151 -70
  92. checksums.yaml +0 -15
@@ -1,23 +1,3 @@
1
1
  //= require bootstrap-tagmanager
2
2
  //= require redactor-rails
3
-
4
- $(function() {
5
- if(!$("#simple_content_management_simple_pages_new, #simple_content_management_simple_pages_edit").length)
6
- return;
7
- $tagsmanager = $("[data-simple-routes-list]");
8
- $tagsmanager.tagsManager({
9
- prefilled: $tagsmanager.val().split(/,/g),
10
- preventSubmitOnEnter: true,
11
- typeahead: false,
12
- hiddenTagListName: $tagsmanager.prop("name"),
13
- validator: function(pathname) { return !pathname.match(/(?:^\/|\s|\/$)/); }
14
- }).prop("name", "").val("");
15
-
16
- var $hiddenTagsField = $(":input[name='simple_content_management_simple_page[simple_routes_list]']");
17
-
18
- $tagsmanager.blur(function() {
19
- if($(this).val().length) {
20
- $(this).trigger(jQuery.Event("keypress", { which: 44 }));
21
- }
22
- });
23
- })
3
+ //= require_tree ./simple_pages
@@ -0,0 +1,32 @@
1
+ //= require th-page-editor
2
+
3
+ $(function() {
4
+ var $simplePageForm = $(".simple-page-form");
5
+ if(!$simplePageForm.length)
6
+ return;
7
+
8
+ (function() {
9
+ var $tagsmanager = $simplePageForm.find("[data-simple-routes-list]");
10
+ $tagsmanager.tagsManager({
11
+ prefilled: $tagsmanager.val().split(/,/g),
12
+ preventSubmitOnEnter: true,
13
+ typeahead: false,
14
+ hiddenTagListName: $tagsmanager.prop("name"),
15
+ validator: function(pathname) { return !pathname.match(/(?:^\/|\s|\/$)/); }
16
+ }).prop("name", "").val("").blur(function() {
17
+ if($(this).val().length) {
18
+ $(this).trigger(jQuery.Event("keypress", { which: 44 }));
19
+ }
20
+ });
21
+ })();
22
+
23
+ var $htmlContainer = $simplePageForm.find(".content-html-container");
24
+ $htmlContainer.pageeditor({
25
+ iframeStylePath: $("[data-iframe-style-path]").data("iframe-style-path")
26
+ });
27
+
28
+ $simplePageForm.submit(function() {
29
+ $htmlContainer.pageeditor("destroy");
30
+ $simplePageForm.find("#simple_content_management_simple_page_content_html").val($htmlContainer.html().replace(/^\s+|\s+$/g, ""));
31
+ });
32
+ });
@@ -0,0 +1,136 @@
1
+ //= require jquery.ui.widget
2
+ //= require jquery.ui.resizable
3
+
4
+ $.widget("th.pageeditorcolumn", {
5
+ options: {
6
+ row: null
7
+ },
8
+
9
+ _create: function() {
10
+ if(this.options.span) this.span(this.options.span);
11
+ if(this.options.offset) this.offset(this.options.offset);
12
+ if(!this.isPlaceholder()) {
13
+ if(this.element.find(".row").length) {
14
+ this.convertToEditor();
15
+ } else {
16
+ this.enableResize();
17
+ }
18
+ }
19
+ },
20
+
21
+ span: function(newSpan) {
22
+ if(newSpan) {
23
+ newSpan = Math.min(this.spanwidth(), Math.max(1, parseInt(newSpan)));
24
+ this.element.prop("className", this.element.prop("className").replace(/span\d+/, ""));
25
+ this.element.addClass("span"+newSpan);
26
+ } else {
27
+ var match = this.element.prop("className").match(/span(\d+)/);
28
+ return match ? parseInt(match[1]) : 0;
29
+ }
30
+ },
31
+
32
+ offset: function(newOffset) {
33
+ if(newOffset != null) {
34
+ newOffset = Math.min(this.spanwidth()-1, Math.max(0, parseInt(newOffset)));
35
+ this.element.prop("className", this.element.prop("className").replace(/offset\d+/, ""));
36
+ if(newOffset > 0) this.element.addClass("offset"+newOffset);
37
+ } else {
38
+ var match = this.element.prop("className").match(/offset(\d+)/);
39
+ return match ? parseInt(match[1]) : 0;
40
+ }
41
+ },
42
+
43
+ spanwidth: function() {
44
+ return this.options.row.spanwidth();
45
+ },
46
+
47
+ row: function() {
48
+ return this.options.row.element;
49
+ },
50
+
51
+ isPlaceholder: function() {
52
+ return this.element.is(".column-add-placeholder");
53
+ },
54
+
55
+ cleanval: function() {
56
+ var $fonts = this.element.find("font");
57
+ for(var i = $fonts.length-1; i>=0; i--) {
58
+ $($fonts[i]).replaceWith($($fonts[i]).html());
59
+ }
60
+ },
61
+
62
+ val: function(newValue) {
63
+ if(newValue !== undefined) {
64
+ var $content = $("<div></div>");
65
+ $content.html(newValue);
66
+ var $column = $("<div></div>").html(newValue).pageeditorcolumn({
67
+ span: this.span(),
68
+ offset: this.offset(),
69
+ row: this.options.row
70
+ });
71
+ this.destroy();
72
+ this.element.replaceWith($column);
73
+ } else {
74
+ var $content = this.element.clone();
75
+ $content.find(".ui-resizable-handle, .hovertool").remove();
76
+ return ""+$content.html();
77
+ }
78
+ },
79
+
80
+ enableResize: function() {
81
+ var self = this;
82
+ this.element.resizable({
83
+ grid: [100],
84
+ handles: "e, w",
85
+ start: function(_, ui) {
86
+ self.row().pageeditorrow("disableColumnPlaceholders");
87
+ ui.originalPosition.left = ui.position.left = self.offset()*100;
88
+ ui.element.css("left", self.offset()*100);
89
+ ui.element.css("margin-right", ui.position.left + (ui.originalPosition.left - ui.position.left) + (ui.originalSize.width - ui.size.width));
90
+ self.offset(0);
91
+ },
92
+ resize: function(_, ui) {
93
+ ui.element.css("margin-right", ui.position.left + (ui.originalPosition.left - ui.position.left) + (ui.originalSize.width - ui.size.width));
94
+ },
95
+ stop: function(_, ui) {
96
+ var offset = Math.round(ui.position.left/100);
97
+ if(offset < 0) {
98
+ ui.size.width += offset*100;
99
+ offset = 0;
100
+ }
101
+ self.offset(offset);
102
+ self.span(Math.round(ui.size.width/100));
103
+
104
+ var $next = self.element.next();
105
+ if(!$next.pageeditorcolumn("isPlaceholder")) {
106
+ $next.pageeditorcolumn("offset", $next.pageeditorcolumn("offset") + Math.round(((ui.originalPosition.left - ui.position.left) + (ui.originalSize.width - ui.size.width))/100));
107
+ }
108
+
109
+ $(this).removeAttr("style");
110
+ self.row().pageeditorrow("enableColumnPlaceholders");
111
+ }
112
+ });
113
+ },
114
+
115
+ convertToEditor: function() {
116
+ if(!this.element.find(".row").length) {
117
+ this.element.html("<div class=row><div class=span"+this.span()+">"+this.element.html()+"</div></div>");
118
+ }
119
+ if(this.element.data("uiResizable")) {
120
+ this.element.resizable("destroy");
121
+ }
122
+ this.element.addClass("nested-editor").find(".hovertool").remove();
123
+ this.asEditor = this.element.pageeditor($.extend(this.options.row.options.editor.options, { spanwidth: this.span() }));
124
+ },
125
+
126
+ destroy: function() {
127
+ this.element.find(".hovertool").remove();
128
+ if(this.element.data("uiResizable")) {
129
+ this.element.resizable("destroy");
130
+ }
131
+ if(this.asEditor) {
132
+ this.element.removeClass("nested-editor");
133
+ this.asEditor.pageeditor("destroy");
134
+ }
135
+ }
136
+ });
@@ -0,0 +1,104 @@
1
+ //= require jquery.ui.widget
2
+ //= require th-page-editor/row
3
+ //= require bootstrap-modal
4
+ //= require bootstrap-tab
5
+
6
+ (function($) {
7
+ var BASIC_SPANS_SELECTOR = ".span1, .span2, .span3, .span4, .span5, .span6, .span7, .span8, .span9, .span10, .span11, .span12".replace(/\.span\d+/g, function(classname) {
8
+ return classname + ":not(.nested-editor)";
9
+ });
10
+ var NO_PLACEHOLDER_SELECTOR = BASIC_SPANS_SELECTOR.replace(/\.span\d+/g, function(classname) {
11
+ return classname + ":not(.column-add-placeholder)";
12
+ });
13
+
14
+ $.widget("th.pageeditor", {
15
+ options: {
16
+ spanwidth: 12,
17
+ iframeStylePath: null,
18
+ editorModal: "#content-editor",
19
+ editorArea: "#content-editor textarea"
20
+ },
21
+
22
+ _create: function() {
23
+ this.addEmptyRow();
24
+ var self = this;
25
+ this.subeditors = [];
26
+ this.rows().each(function() {
27
+ $(this).pageeditorrow({ editor: self });
28
+ });
29
+
30
+ this.element.on("mouseenter", NO_PLACEHOLDER_SELECTOR, function() {
31
+ var $this = $(this);
32
+ $("<span class=\"hovertool btn btn-mini\"><i class=icon-trash></i></span>").prependTo(this).css({ marginTop: -11, marginLeft: -11 }).click(function() {
33
+ var $row = $this.pageeditorcolumn("row");
34
+ $this.remove();
35
+ $row.pageeditorrow("refreshColumnPlaceholders");
36
+ if(!$row.pageeditorrow("hasContentColumns")) {
37
+ $row.pageeditorrow("destroy");
38
+ }
39
+ self.checkEmptyRowRequired();
40
+ return false;
41
+ });
42
+ });
43
+
44
+ this.element.on("mouseleave", NO_PLACEHOLDER_SELECTOR, function() {
45
+ $(this).children(".hovertool").remove();
46
+ });
47
+
48
+ var $editorModal = $(this.options.editorModal);
49
+ var $editorArea = $(this.options.editorArea);
50
+ this.element.on("click", BASIC_SPANS_SELECTOR, function() {
51
+ var $column = $(this);
52
+ var saveCallback = function() {
53
+
54
+ switch($editorModal.find(".tab-pane.active").attr("id")) {
55
+ case "editor-container":
56
+ self.subeditors.push($column.pageeditorcolumn("convertToEditor"));
57
+ break;
58
+ default:
59
+ $column.pageeditorcolumn("val", $editorArea.val());
60
+ }
61
+
62
+ $editorModal.modal("hide");
63
+ self.checkEmptyRowRequired();
64
+
65
+ };
66
+
67
+ $editorModal.modal("show").find("[data-save-button]").on("click", saveCallback)
68
+ $editorModal.on("hide", function() {
69
+ $editorModal.find("[data-save-button]").off("click", saveCallback);
70
+ });
71
+
72
+ $editorArea.redactor($.extend(getRedactorOptions(), {
73
+ iframe: true,
74
+ css: self.options.iframeStylePath,
75
+ formattingTags: ['p', 'plead', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4']
76
+ })).redactor("set", $column.pageeditorcolumn("val"));
77
+ });
78
+ },
79
+
80
+ checkEmptyRowRequired: function() {
81
+ if(this.rows().last().pageeditorrow("hasContentColumns")) {
82
+ this.addEmptyRow();
83
+ }
84
+ },
85
+
86
+ spanwidth: function() {
87
+ return this.options.spanwidth;
88
+ },
89
+
90
+ addEmptyRow: function() {
91
+ $("<div class=row></div>").appendTo(this.element).pageeditorrow({ editor: this });
92
+ },
93
+
94
+ rows: function() {
95
+ return this.element.children(".row");
96
+ },
97
+
98
+ destroy: function() {
99
+ this.rows().each(function() {
100
+ $(this).pageeditorrow("destroy");
101
+ });
102
+ }
103
+ });
104
+ })(jQuery);
@@ -0,0 +1,90 @@
1
+ //= require jquery.ui.widget
2
+ //= require th-page-editor/column
3
+
4
+ (function($) {
5
+ var BASIC_SPANS_SELECTOR = ".span1, .span2, .span3, .span4, .span5, .span6, .span7, .span8, .span9, .span10, .span11, .span12";
6
+
7
+ $.widget("th.pageeditorrow", {
8
+ options: {
9
+ editor: null
10
+ },
11
+
12
+ _create: function() {
13
+ var self = this;
14
+ this.columns().each(function() {
15
+ $(this).pageeditorcolumn({ row: self });
16
+ });
17
+ this.enableColumnPlaceholders();
18
+ },
19
+
20
+ spanwidth: function() {
21
+ return this.options.editor.spanwidth();
22
+ },
23
+
24
+ columns: function() {
25
+ return this.element.children(BASIC_SPANS_SELECTOR);
26
+ },
27
+
28
+ refreshColumnPlaceholders: function() {
29
+ this.disableColumnPlaceholders();
30
+ this.enableColumnPlaceholders();
31
+ },
32
+
33
+ createColumnPlaceholder: function(span, offset) {
34
+ return $('<div class=column-add-placeholder></div>').pageeditorcolumn({ row: this, span: span, offset: offset });
35
+ },
36
+
37
+ disableColumnPlaceholders: function() {
38
+ this.columns().filter(".column-add-placeholder").each(function() {
39
+ $(this).next().pageeditorcolumn("offset", $(this).pageeditorcolumn("span"));
40
+ }).remove();
41
+ },
42
+
43
+ enableColumnPlaceholders: function(enabled) {
44
+ if(enabled === false) {
45
+ this.disableColumnPlaceholders();
46
+ return;
47
+ }
48
+
49
+ var $columns = this.columns();
50
+ if($columns.length == 0) {
51
+ this.createColumnPlaceholder(this.spanwidth()).appendTo(this.element);
52
+ } else {
53
+ var self = this;
54
+ var columnsRemaining = this.spanwidth();
55
+ $.each(this.columns(), function() {
56
+ columnsRemaining -= $(this).pageeditorcolumn("offset") + $(this).pageeditorcolumn("span");
57
+ if($(this).pageeditorcolumn("offset") > 0) {
58
+ self.createColumnPlaceholder($(this).pageeditorcolumn("offset")).insertBefore($(this));
59
+ $(this).pageeditorcolumn("offset", 0);
60
+ }
61
+ });
62
+ if(columnsRemaining > 0) {
63
+ this.createColumnPlaceholder(columnsRemaining).appendTo(this.element);
64
+ }
65
+ }
66
+ this._updatePlaceholderHeights();
67
+ },
68
+
69
+ hasContentColumns: function() {
70
+ return this.columns().filter(":not(.column-add-placeholder)").length;
71
+ },
72
+
73
+ destroy: function() {
74
+ if(this.hasContentColumns()) {
75
+ this.disableColumnPlaceholders();
76
+ this.columns().each(function() {
77
+ $(this).pageeditorcolumn("destroy");
78
+ });
79
+ } else {
80
+ this.element.remove();
81
+ }
82
+ },
83
+
84
+ _updatePlaceholderHeights: function() {
85
+ var $placeholders = this.columns().filter(".column-add-placeholder");
86
+ $placeholders.height(60);
87
+ $placeholders.height(this.element.height());
88
+ }
89
+ });
90
+ })(jQuery);
@@ -1,14 +1,86 @@
1
1
  @import "bootstrap-tagmanager";
2
+ @import "jquery.ui.resizable";
2
3
 
3
- .simple-routes-list span.myTag span {
4
- font-family: monospace;
4
+ .simple-page-form {
5
5
 
6
- &:before {
7
- content: "/";
8
- color: #aaa;
6
+ // tags
7
+ .simple-routes-list span.myTag span {
8
+ font-family: monospace;
9
+
10
+ &:before {
11
+ content: "/";
12
+ color: #aaa;
13
+ }
14
+ &:after {
15
+ content: ".html";
16
+ color: #aaa;
17
+ }
9
18
  }
10
- &:after {
11
- content: ".html";
12
- color: #aaa;
19
+
20
+ .content-html-container {
21
+ .row {
22
+ white-space: nowrap;
23
+ }
24
+ .span1, .span2, .span3, .span4, .span5, .span6, .span7, .span8, .span9, .span10, .span11, .span12 {
25
+ display: inline-block;
26
+ white-space: normal;
27
+ float: none;
28
+ vertical-align: top;
29
+
30
+ &:hover, &.ui-resizable-resizing {
31
+ outline: 1px solid rgba(82, 168, 236, 0.8);
32
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
33
+ background: rgba(82, 168, 236, 0.075);
34
+ cursor: pointer;
35
+
36
+ > .ui-resizable-e, > .ui-resizable-w {
37
+ background-image: image-url("simple_content_management/resize-handle.png");
38
+ background-repeat: no-repeat;
39
+ background-position: center center;
40
+ }
41
+ }
42
+
43
+ &.nested-editor:hover {
44
+ outline: none;
45
+ box-shadow: none;
46
+ background: transparent;
47
+ cursor: default;
48
+ }
49
+
50
+ &.column-add-placeholder {
51
+ min-height: 60px;
52
+ }
53
+
54
+ > .hovertool {
55
+ z-index: 91;
56
+ position: absolute;
57
+ border-radius: 22px;
58
+ width: 22px;
59
+ height: 22px;
60
+ margin: 0;
61
+ padding: 0;
62
+ }
63
+ }
64
+ }
65
+ }
66
+
67
+ #content-editor {
68
+ width: 800px;
69
+ margin-left: -400px;
70
+
71
+ .modal-header {
72
+ .nav {
73
+ margin-bottom: -1px;
74
+ }
75
+ padding-bottom: 0;
76
+ }
77
+
78
+ .modal-body {
79
+ height: 480px;
80
+ max-height: 480px;
81
+
82
+ textarea {
83
+ height: 480px - 32px;
84
+ }
13
85
  }
14
86
  }