scrivito_editors 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +48 -0
  3. data/LICENSE +4 -0
  4. data/README.md +55 -0
  5. data/Rakefile +9 -0
  6. data/app/assets/fonts/editing_icons-webfont.eot +0 -0
  7. data/app/assets/fonts/editing_icons-webfont.ttf +0 -0
  8. data/app/assets/fonts/editing_icons-webfont.woff +0 -0
  9. data/app/assets/javascripts/jquery_additions/jquery_center.js.coffee +6 -0
  10. data/app/assets/javascripts/mediabrowser/inspector.js.coffee +65 -0
  11. data/app/assets/javascripts/mediabrowser/mediabrowser.js.coffee +420 -0
  12. data/app/assets/javascripts/mediabrowser/uploader.js.coffee +132 -0
  13. data/app/assets/javascripts/scrivito_editors.js +18 -0
  14. data/app/assets/javascripts/scrivito_editors/date_editor.js.coffee +50 -0
  15. data/app/assets/javascripts/scrivito_editors/enum_editor.js.coffee +36 -0
  16. data/app/assets/javascripts/scrivito_editors/html_editor.js.coffee +140 -0
  17. data/app/assets/javascripts/scrivito_editors/linklist_editor.js.coffee +176 -0
  18. data/app/assets/javascripts/scrivito_editors/multienum_editor.js.coffee +37 -0
  19. data/app/assets/javascripts/scrivito_editors/placeholder.js.coffee +22 -0
  20. data/app/assets/javascripts/scrivito_editors/reference_editor.js.coffee +28 -0
  21. data/app/assets/javascripts/scrivito_editors/referencelist_editor.js.coffee +111 -0
  22. data/app/assets/javascripts/scrivito_editors/slider_editor.js.coffee +39 -0
  23. data/app/assets/javascripts/scrivito_editors/string_editor.js.coffee +83 -0
  24. data/app/assets/javascripts/scrivito_editors/text_editor.js.coffee +85 -0
  25. data/app/assets/stylesheets/scrivito_editors.css +16 -0
  26. data/app/assets/stylesheets/scrivito_editors/buttons.css +161 -0
  27. data/app/assets/stylesheets/scrivito_editors/editors/linklist_editor.css +105 -0
  28. data/app/assets/stylesheets/scrivito_editors/editors/referencelist_editor.css +67 -0
  29. data/app/assets/stylesheets/scrivito_editors/editors/text_editor.css +7 -0
  30. data/app/assets/stylesheets/scrivito_editors/icons.css.erb +229 -0
  31. data/app/assets/stylesheets/scrivito_editors/mediabrowser.css +1010 -0
  32. data/app/assets/stylesheets/scrivito_editors/placeholder.css +17 -0
  33. data/app/assets/stylesheets/scrivito_editors/widget_preview.css +38 -0
  34. data/app/controllers/scrivito_editors/mediabrowser_controller.rb +36 -0
  35. data/app/views/layouts/scrivito_editors/mediabrowser/inspector.html.erb +11 -0
  36. data/app/views/scrivito_editors/mediabrowser/_buttons.html.erb +16 -0
  37. data/app/views/scrivito_editors/mediabrowser/_header.html.erb +25 -0
  38. data/app/views/scrivito_editors/mediabrowser/modal.html.erb +12 -0
  39. data/app/views/scrivito_editors/obj/details.html +5 -0
  40. data/config/initializers/mediabrowser.rb +13 -0
  41. data/config/routes.rb +5 -0
  42. data/lib/scrivito_editors.rb +4 -0
  43. data/lib/scrivito_editors/engine.rb +7 -0
  44. data/lib/scrivito_editors/version.rb +3 -0
  45. data/spec/dummy/README.rdoc +28 -0
  46. data/spec/dummy/Rakefile +6 -0
  47. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  48. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  49. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  50. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  51. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  52. data/spec/dummy/bin/bundle +3 -0
  53. data/spec/dummy/bin/rails +4 -0
  54. data/spec/dummy/bin/rake +4 -0
  55. data/spec/dummy/config.ru +4 -0
  56. data/spec/dummy/config/application.rb +23 -0
  57. data/spec/dummy/config/boot.rb +5 -0
  58. data/spec/dummy/config/database.yml +25 -0
  59. data/spec/dummy/config/environment.rb +5 -0
  60. data/spec/dummy/config/environments/development.rb +29 -0
  61. data/spec/dummy/config/environments/production.rb +80 -0
  62. data/spec/dummy/config/environments/test.rb +36 -0
  63. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  64. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  65. data/spec/dummy/config/initializers/inflections.rb +16 -0
  66. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  67. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  68. data/spec/dummy/config/initializers/session_store.rb +3 -0
  69. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  70. data/spec/dummy/config/locales/en.yml +23 -0
  71. data/spec/dummy/config/routes.rb +4 -0
  72. data/spec/dummy/public/404.html +58 -0
  73. data/spec/dummy/public/422.html +58 -0
  74. data/spec/dummy/public/500.html +57 -0
  75. data/spec/dummy/public/favicon.ico +0 -0
  76. data/spec/spec_helper.rb +13 -0
  77. data/vendor/assets/fonts/redactor-font.eot +0 -0
  78. data/vendor/assets/javascripts/jquery-ui-timepicker-addon.min.js +5 -0
  79. data/vendor/assets/javascripts/redactor.js +7869 -0
  80. data/vendor/assets/stylesheets/jquery-ui-timepicker-addon.min.css +5 -0
  81. data/vendor/assets/stylesheets/redactor.css.erb +968 -0
  82. metadata +240 -0
@@ -0,0 +1,37 @@
1
+ $ ->
2
+ # Define editor behavior for multienum attributes.
3
+
4
+ scrivito.on 'editing', ->
5
+ template = (values) ->
6
+ element = $('<select></select>')
7
+ .attr('multiple', 'true')
8
+ .addClass('form-control')
9
+
10
+ $.each values, (index, value) ->
11
+ $('<option></option>')
12
+ .attr('value', value)
13
+ .text(value)
14
+ .appendTo(element)
15
+
16
+ element
17
+
18
+ save = (event) ->
19
+ element = $(event.currentTarget)
20
+ cmsField = element.data('cmsField')
21
+ content = element.val()
22
+ cmsField.scrivito('save', content).done ->
23
+ cmsField.trigger('scrivito_reload')
24
+
25
+ $(document).on 'click', '[data-scrivito-field-type="multienum"]:not([data-editor]), [data-editor="multienum"]', (event) ->
26
+ cmsField = $(event.currentTarget)
27
+ selected = cmsField.scrivito('content')
28
+ values = cmsField.data('values')
29
+
30
+ template(values)
31
+ .data('cmsField', cmsField)
32
+ .val(selected)
33
+ .insertAfter(cmsField)
34
+ .focusout(save)
35
+ .focus()
36
+
37
+ cmsField.hide()
@@ -0,0 +1,22 @@
1
+ $ ->
2
+ # Display a placeholder for empty CMS attributes. The placeholder can be overwritten by
3
+ # defining a +data-placeholder+ HTML attribute on the DOM element generated by +cms_tag+.
4
+ #
5
+ # For example:
6
+ # cms_tag(:div, @obj, :my_attribute, data: { placeholder: 'My custom placeholder text.' })
7
+ addPlaceholder = ->
8
+ cmsFields = $('[data-scrivito-field-type]')
9
+
10
+ cmsFields.each ->
11
+ cmsField = $(@)
12
+ fieldName = cmsField.attr('data-scrivito-field-name')
13
+ defaultPlaceholder = 'Click to edit the "' + fieldName + '" attribute ...'
14
+ placeholder = cmsField.attr('data-placeholder') || defaultPlaceholder
15
+
16
+ cmsField.attr('data-placeholder', placeholder)
17
+
18
+ scrivito.on 'new_content', ->
19
+ addPlaceholder()
20
+
21
+ scrivito.on 'editing', ->
22
+ addPlaceholder()
@@ -0,0 +1,28 @@
1
+ $ ->
2
+ # Integrates a mediabrowser based editor for reference CMS attributes.
3
+
4
+ scrivito.on 'editing', ->
5
+ $('body').on 'click', '[data-scrivito-field-type="reference"]:not([data-editor]), [data-editor="reference"]', (event) ->
6
+ event.preventDefault()
7
+
8
+ cmsField = $(event.currentTarget)
9
+ selected = [cmsField.scrivito('content')].filter (element) -> element
10
+ filters = cmsField.data('filters') || cmsField.data('filter')
11
+
12
+ # Open mediabrowser with current reference selected and restrict selection to one reference.
13
+ Mediabrowser.open
14
+ selection: selected
15
+ filters: filters
16
+
17
+ onSave: (selection) =>
18
+ onMediabrowserSave(selection, cmsField)
19
+
20
+ # Save single reference when media browser calls "save".
21
+ onMediabrowserSave = (selection, cmsField) ->
22
+ value = selection[0] || null
23
+
24
+ cmsField.scrivito('save', value)
25
+ .done ->
26
+ cmsField.trigger('scrivito_reload')
27
+
28
+ true
@@ -0,0 +1,111 @@
1
+ $ ->
2
+ # An editor for CMS referencelist attributes.
3
+
4
+ # Creates the DOM for one reference element of the referencelist and substitutes the
5
+ # name and id attribute.
6
+ itemTemplate = ->
7
+ $("<div class=\"actions\">
8
+ <a href=\"#\" class=\"editing-button editing-red delete\">
9
+ <i class=\"editing-icon editing-icon-trash\" />
10
+ </a>
11
+ </div>")
12
+
13
+ mediabrowserButtonTemplate = ->
14
+ icon = $('<i></i>')
15
+ .addClass('editing-icon')
16
+ .addClass('editing-icon-plus')
17
+
18
+ button = $('<button></button>')
19
+ .addClass('editing-button')
20
+ .addClass('editing-green')
21
+ .addClass('mediabrowser-open')
22
+ .html(icon)
23
+
24
+ button
25
+
26
+ # Returns the closest referencelist DOM element.
27
+ getCmsField = (element) ->
28
+ element.closest('[data-scrivito-field-type=referencelist]')
29
+
30
+ # Saves the referencelist to the CMS when changed and stores the last successfully saved value.
31
+ save = (ids, cmsField) ->
32
+ lastSaved = getLastSaved(cmsField)
33
+
34
+ unless JSON.stringify(ids) == JSON.stringify(lastSaved)
35
+ cmsField.scrivito('save', ids)
36
+ .done ->
37
+ storeLastSaved(cmsField, ids)
38
+ cmsField.trigger('scrivito_reload')
39
+
40
+ # Run when clicking the media browser button.
41
+ onMediabrowserOpen = (event) ->
42
+ event.preventDefault()
43
+
44
+ cmsField = getCmsField($(event.currentTarget))
45
+ filters = cmsField.data('filters') || cmsField.data('filter')
46
+ ids = getIds(cmsField)
47
+
48
+ Mediabrowser.open
49
+ selection: ids
50
+ filters: filters
51
+
52
+ onSave: (selection) =>
53
+ save(selection, cmsField)
54
+
55
+ # Collects all reference ids for a given referencelist.
56
+ getIds = (cmsField) ->
57
+ items = $(cmsField).find('li')
58
+
59
+ value =
60
+ for item in items
61
+ $(item).data('id')
62
+
63
+ # Removes a single reference from the referencelist.
64
+ remove = (event) ->
65
+ event.preventDefault()
66
+
67
+ target = $(event.currentTarget)
68
+ cmsField = getCmsField(target)
69
+
70
+ target.closest('li').remove()
71
+
72
+ ids = getIds(cmsField)
73
+ save(ids, cmsField)
74
+
75
+ # Turns the server side generated referencelist data into the reference editor using a template.
76
+ transform = (elements) ->
77
+ elements.append(mediabrowserButtonTemplate)
78
+
79
+ items = elements.find('li')
80
+
81
+ for item in items
82
+ $(item).append(itemTemplate)
83
+
84
+ # Returns the last saved value.
85
+ getLastSaved = (cmsField) ->
86
+ $(cmsField).data('last-saved')
87
+
88
+ # Stores a given value as last saved.
89
+ storeLastSaved = (cmsField, value) ->
90
+ $(cmsField).data('last-saved', value)
91
+
92
+ # Initialize referencelist editor and setup event callbacks.
93
+ scrivito.on 'new_content', (root) ->
94
+ elements = $(root).find('[data-scrivito-field-type="referencelist"]:not([data-editor]), [data-editor="referencelist"]')
95
+
96
+ if elements.length
97
+ transform(elements)
98
+
99
+ for element in elements
100
+ ids = getIds(element)
101
+ storeLastSaved(element, ids)
102
+
103
+ elements.on 'click', 'li a.delete', remove
104
+ elements.on 'click', 'button.mediabrowser-open', onMediabrowserOpen
105
+
106
+ elements.find('ul').sortable
107
+ update: (event) ->
108
+ cmsField = getCmsField($(event.target))
109
+ ids = getIds(cmsField)
110
+
111
+ save(ids, cmsField)
@@ -0,0 +1,39 @@
1
+ $ ->
2
+ # Slider for integer values stored in a string CMS attribute.
3
+
4
+ scrivito.on 'editing', ->
5
+ template = ->
6
+ $('<div></div>')
7
+
8
+ onStop = (event, ui) ->
9
+ cmsField = $(@).data('cmsField')
10
+ content = ui.value
11
+ cmsField.scrivito('save', content).done ->
12
+ cmsField.trigger('scrivito_reload')
13
+
14
+ onSlide = (event, ui) ->
15
+ cmsField = $(@).data('cmsField')
16
+ content = ui.value
17
+ cmsField.text(ui.value)
18
+
19
+ $('body').on 'click', '[data-editor="slider"]:not(.active)', (event) ->
20
+ cmsField = $(event.currentTarget)
21
+ content = cmsField.scrivito('content')
22
+ min = cmsField.attr('data-min') || 1
23
+ max = cmsField.attr('data-max') || 10
24
+ step = cmsField.attr('data-step') || 1
25
+
26
+ cmsField.addClass('active')
27
+
28
+ template()
29
+ .data('cmsField', cmsField)
30
+ .insertAfter(cmsField)
31
+ .slider(
32
+ min: parseInt(min)
33
+ max: parseInt(max)
34
+ step: parseInt(step)
35
+ value: content
36
+ range: 'min'
37
+ stop: onStop
38
+ slide: onSlide
39
+ )
@@ -0,0 +1,83 @@
1
+ $ ->
2
+ # This file integrates contenteditable for string attributes.
3
+
4
+ scrivito.on 'editing', ->
5
+ cmsField = undefined
6
+ timeout = undefined
7
+
8
+ onKey = (event) ->
9
+ if timeout?
10
+ clearTimeout(timeout)
11
+
12
+ if cmsField?
13
+ key = event.keyCode || event.which
14
+
15
+ switch key
16
+ when 13 # Enter
17
+ event.preventDefault()
18
+ cmsField.blur()
19
+ when 27 # Esc
20
+ if event.type == 'keyup'
21
+ event.stopPropagation()
22
+ cmsField
23
+ .off('blur')
24
+ .trigger('scrivito_reload')
25
+ cmsField = undefined
26
+ else
27
+ setTimeout(cleanUp)
28
+ timeout = setTimeout ( ->
29
+ save(false)
30
+ ), 3000
31
+
32
+ onBlur = (event) ->
33
+ if cmsField?
34
+ field = cmsField
35
+
36
+ save(true).done ->
37
+ if field.attr('data-reload') == 'true'
38
+ field.trigger('scrivito_reload')
39
+
40
+ save = (andClose) ->
41
+ if timeout?
42
+ clearTimeout(timeout)
43
+
44
+ cleanUp()
45
+
46
+ clone = cmsFieldAndPastedContent().clone()
47
+ clone.find('br').replaceWith('\n')
48
+ content = clone.text()
49
+ clone.remove()
50
+
51
+ field = cmsField
52
+
53
+ if andClose
54
+ cmsField.text(content)
55
+ cmsField = undefined
56
+
57
+ field.scrivito('save', content)
58
+
59
+ cleanUp = ->
60
+ siblings = cmsFieldAndPastedContent()
61
+ pasted = siblings.not(cmsField)
62
+ if pasted.length > 0
63
+ pasted.remove()
64
+ cmsField.text(siblings.text())
65
+
66
+ cmsFieldAndPastedContent = ->
67
+ cmsField.siblings().addBack().not(cmsField.data('siblings_before_edit'))
68
+
69
+ $('body').on 'mouseenter', '[data-scrivito-field-type="string"]:not([data-editor]), [data-editor="string"]', (event) ->
70
+ unless cmsField?
71
+ cmsField = $(event.currentTarget)
72
+
73
+ unless cmsField.attr('contenteditable')?
74
+ cmsField
75
+ .data('siblings_before_edit', cmsField.siblings())
76
+ .attr('contenteditable', true)
77
+ .blur(onBlur)
78
+ .keypress(onKey)
79
+ .keyup(onKey)
80
+
81
+ # Prevent editable link strings to follow the link target on click.
82
+ $('body').on 'click', '[data-scrivito-field-type="string"]:not([data-editor]), [data-editor="string"]', (event) ->
83
+ event.preventDefault()
@@ -0,0 +1,85 @@
1
+ $ ->
2
+ # This file integrates contenteditable for text attributes.
3
+ # It provides multiline editing support.
4
+
5
+ scrivito.on 'editing', ->
6
+ cmsField = undefined
7
+ timeout = undefined
8
+
9
+ onKey = (event) ->
10
+ if timeout?
11
+ clearTimeout(timeout)
12
+
13
+ if cmsField?
14
+ key = event.keyCode || event.which
15
+
16
+ switch key
17
+ when 27 # Esc
18
+ if event.type == 'keyup'
19
+ event.stopPropagation()
20
+ cmsField
21
+ .off('blur')
22
+ .trigger('scrivito_reload')
23
+ cmsField = undefined
24
+ else
25
+ setTimeout(cleanUp)
26
+ timeout = setTimeout ( ->
27
+ save(false)
28
+ ), 3000
29
+
30
+ onBlur = (event) ->
31
+ if cmsField?
32
+ field = cmsField
33
+
34
+ save(true).done ->
35
+ if field.attr('data-reload') == 'true'
36
+ field.trigger('scrivito_reload')
37
+
38
+ save = (andClose) ->
39
+ if timeout?
40
+ clearTimeout(timeout)
41
+
42
+ cleanUp()
43
+
44
+ clone = cmsFieldAndPastedContent().clone()
45
+ clone.find('br').replaceWith('\n')
46
+ content = clone.text()
47
+ clone.remove()
48
+
49
+ field = cmsField
50
+
51
+ if andClose
52
+ cmsField.text(content)
53
+ cmsField = undefined
54
+
55
+ field.scrivito('save', content)
56
+
57
+ cleanUp = ->
58
+ siblings = cmsFieldAndPastedContent()
59
+ pasted = siblings.not(cmsField)
60
+ if pasted.length > 0
61
+ pasted.remove()
62
+ cmsField.text(siblings.text())
63
+
64
+ cmsFieldAndPastedContent = ->
65
+ cmsField.siblings().addBack().not(cmsField.data('siblings_before_edit'))
66
+
67
+ $('body').on 'mouseenter', '[data-scrivito-field-type="text"]:not([data-editor]), [data-editor="text"]', (event) ->
68
+ unless cmsField?
69
+ cmsField = $(event.currentTarget)
70
+
71
+ html = cmsField.html()
72
+ html_nl2br = html.replace(/\n/g, '<br />')
73
+ cmsField.html(html_nl2br) if html != html_nl2br
74
+
75
+ unless cmsField.attr('contenteditable')?
76
+ cmsField
77
+ .data('siblings_before_edit', cmsField.siblings())
78
+ .attr('contenteditable', true)
79
+ .blur(onBlur)
80
+ .keypress(onKey)
81
+ .keyup(onKey)
82
+
83
+ # Prevent editable link text to follow the link target on click.
84
+ $('body').on 'click', '[data-scrivito-field-type="text"]:not([data-editor]), [data-editor="text"]', (event) ->
85
+ event.preventDefault()
@@ -0,0 +1,16 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require jquery.ui.datepicker
12
+ *= require jquery.ui.slider
13
+ *= require jquery-ui-timepicker-addon.min
14
+ *= require redactor
15
+ *= require_tree .
16
+ */
@@ -0,0 +1,161 @@
1
+ /*
2
+ Defines various button styles used throughout the inplace editing GUI. Button styles are not
3
+ bound to one particular inplace editing feature, but are shared accross the menubar, the
4
+ mediabrowser or on edit views.
5
+ */
6
+
7
+ .editing-button {
8
+ color: #555;
9
+ cursor: pointer;
10
+ border:0px;
11
+ display: inline-block;
12
+ font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
13
+ font-size: 14px;
14
+ font-weight: normal;
15
+ line-height: 14px;
16
+ margin: 0 10px 10px 0;
17
+ min-height: 14px;
18
+ min-width: 30px;
19
+ padding: 8px 15px;
20
+ text-align: center;
21
+ vertical-align: middle;
22
+ background: #fcfcfc;
23
+ -webkit-border-radius: 5px;
24
+ -moz-border-radius: 5px;
25
+ border-radius: 5px;
26
+ -webkit-box-shadow: 0 0 5px rgba(0,0,0,.2);
27
+ -moz-box-shadow: 0 0 5px rgba(0,0,0,.2);
28
+ box-shadow: 0 0 5px rgba(0,0,0,.2);
29
+ -webkit-user-select: none;
30
+ -moz-user-select: none;
31
+ -ms-user-select: none;
32
+ -o-user-select: none;
33
+ user-select: none;
34
+ }
35
+
36
+ .editing-button:hover {
37
+ color: #333;
38
+ cursor: pointer;
39
+ background: #fff;
40
+ }
41
+
42
+ .editing-button:active {
43
+ color: #333;
44
+ cursor: pointer;
45
+ background: #eee;
46
+ }
47
+
48
+ input.editing-button {
49
+ height: 30px;
50
+ }
51
+
52
+ a.editing-button,
53
+ a.editing-button:active {
54
+ text-decoration: none;
55
+ }
56
+
57
+
58
+ .editing-button.editing-blue {
59
+ background: #516b8b;
60
+ color: #fff;
61
+ }
62
+
63
+ .editing-button.editing-blue:hover {
64
+ background: #6781A1;
65
+ color: #fff;
66
+ }
67
+
68
+ .editing-button.editing-blue:active {
69
+ background-color: #425C7C;
70
+ color: #fff;
71
+ }
72
+
73
+ .editing-button.editing-green {
74
+ background: #658B51;
75
+ color: #fff;
76
+ }
77
+
78
+ .editing-button.editing-green:hover {
79
+ background: #7EA46A;
80
+ color: #fff;
81
+ }
82
+
83
+ .editing-button.editing-green:active {
84
+ background: #52783E;
85
+ color: #fff;
86
+ }
87
+
88
+ .editing-button.editing-red {
89
+ background: #AA4040;
90
+ color: #fff;
91
+ }
92
+
93
+ .editing-button.editing-red:hover {
94
+ background: #C05656;
95
+ color: #fff;
96
+ }
97
+
98
+ .editing-button.editing-red:active {
99
+ background: #A03636;
100
+ color: #fff;
101
+ }
102
+
103
+ .editing-button.editing-yellow {
104
+ background: #D8D63A;
105
+ color: #666;
106
+ }
107
+
108
+ .editing-button.editing-yellow:hover {
109
+ background: #F0EE52;
110
+ color: #666;
111
+ }
112
+
113
+ .editing-button.editing-yellow:active {
114
+ background: #CBC92D;
115
+ color: #666;
116
+ }
117
+
118
+ .editing-button.editing-disabled,
119
+ .editing-button.editing-disabled:hover,
120
+ .editing-button.editing-disabled:active {
121
+ color: #aaa!important;
122
+ cursor: not-allowed;
123
+ background: #eee;
124
+ }
125
+
126
+ .editing-button.editing-disabled .editing-icon,
127
+ .editing-button.editing-disabled .editing-icon:hover {
128
+ color: #aaa!important;
129
+ cursor: not-allowed;
130
+ }
131
+
132
+ .editing-button .editing-icon {
133
+ color: #333;
134
+ font-size: 9px;
135
+ line-height: 14px;
136
+ }
137
+
138
+ .editing-button .editing-icon:hover {
139
+ cursor: pointer;
140
+ }
141
+
142
+ .editing-button.editing-blue .editing-icon,
143
+ .editing-button.editing-green .editing-icon,
144
+ .editing-button.editing-red .editing-icon,
145
+ .editing-button.editing-yellow .editing-icon {
146
+ color: #fff;
147
+ }
148
+
149
+ /*
150
+ Styling for buttons in the details view dialog.
151
+ */
152
+
153
+ .details-view [data-scrivito-field-type="string"] .editing-button,
154
+ .details-view [data-scrivito-field-type="text"] .editing-button,
155
+ .details-view [data-scrivito-field-type="html"] .editing-button,
156
+ .details-view [data-scrivito-field-type="linklist"] .editing-button,
157
+ .details-view [data-scrivito-field-type="referencelist"] .editing-button,
158
+ .details-view [data-scrivito-field-type="reference"] .editing-button,
159
+ .details-view [data-scrivito-field-type="date"] .editing-button {
160
+ margin: 10px 10px 0 0;
161
+ }