scrivito_editors 0.0.8

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.
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
+ }