scrivito_editors 0.0.12 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +19 -0
- data/app/assets/fonts/redactor-font.eot +0 -0
- data/app/assets/javascripts/redactor.js +844 -415
- data/app/assets/javascripts/scrivito_editors/date_editor.js.coffee +1 -1
- data/app/assets/javascripts/scrivito_editors/enum_editor.js.coffee +1 -1
- data/app/assets/javascripts/scrivito_editors/html_editor.js.coffee +1 -1
- data/app/assets/javascripts/scrivito_editors/image_editor.js.coffee +72 -0
- data/app/assets/javascripts/scrivito_editors/link_editor.js.coffee +124 -0
- data/app/assets/javascripts/scrivito_editors/linklist_editor.js.coffee +1 -1
- data/app/assets/javascripts/scrivito_editors/multienum_editor.js.coffee +1 -1
- data/app/assets/javascripts/scrivito_editors/reference_editor.js.coffee +1 -1
- data/app/assets/javascripts/scrivito_editors/referencelist_editor.js.coffee +1 -1
- data/app/assets/javascripts/scrivito_editors/slider_editor.js.coffee +1 -1
- data/app/assets/javascripts/scrivito_editors/string_editor.js.coffee +5 -3
- data/app/assets/javascripts/scrivito_editors/text_editor.js.coffee +2 -2
- data/app/assets/javascripts/scrivito_editors.js +2 -7
- data/app/assets/javascripts/scrivito_editors_addons.js +4 -0
- data/app/assets/javascripts/scrivito_editors_core.js +3 -0
- data/app/assets/stylesheets/redactor.css.erb +66 -53
- data/app/assets/stylesheets/scrivito_editors/editors/image_editor.css +7 -0
- data/app/assets/stylesheets/scrivito_editors/editors/link_editor.css +80 -0
- data/app/assets/stylesheets/scrivito_editors.css +2 -2
- data/lib/scrivito_editors/version.rb +1 -1
- metadata +23 -4
- data/app/assets/javascripts/jquery_additions/jquery_center.js.coffee +0 -6
@@ -27,7 +27,7 @@ $ ->
|
|
27
27
|
cmsField.trigger('save.scrivito_editors')
|
28
28
|
cmsField.trigger('scrivito_reload')
|
29
29
|
|
30
|
-
$('body').on 'click', '[data-scrivito-field-type="date"]:not(.hasDatepicker):not([data-editor]), [data-editor
|
30
|
+
$('body').on 'click', '[data-scrivito-field-type="date"]:not(.hasDatepicker):not([data-editor]), [data-editor~="date"]', (event) ->
|
31
31
|
event.preventDefault()
|
32
32
|
|
33
33
|
cmsField = $(this)
|
@@ -22,7 +22,7 @@ $ ->
|
|
22
22
|
cmsField.scrivito('save', content).done ->
|
23
23
|
cmsField.trigger('save.scrivito_editors')
|
24
24
|
|
25
|
-
$(document).on 'click', '[data-scrivito-field-type="enum"]:not([data-editor]), [data-editor
|
25
|
+
$(document).on 'click', '[data-scrivito-field-type="enum"]:not([data-editor]), [data-editor~="enum"]', (event) ->
|
26
26
|
cmsField = $(event.currentTarget)
|
27
27
|
selected = cmsField.scrivito('content')
|
28
28
|
values = cmsField.data('values')
|
@@ -77,7 +77,7 @@ $ ->
|
|
77
77
|
|
78
78
|
# Registers Redactor for all CMS html attributes found in the given scope of the DOM element.
|
79
79
|
addOnclickRedactorHandlers = (domElement) ->
|
80
|
-
domElement.on 'click', '[data-scrivito-field-type="html"]:not([data-editor]), [data-editor
|
80
|
+
domElement.on 'click', '[data-scrivito-field-type="html"]:not([data-editor]), [data-editor~="html"]', (event) ->
|
81
81
|
event.preventDefault()
|
82
82
|
cmsField = $(@)
|
83
83
|
|
@@ -0,0 +1,72 @@
|
|
1
|
+
$ ->
|
2
|
+
# Integrates an image drag & drop editor.
|
3
|
+
|
4
|
+
scrivito.on 'load', ->
|
5
|
+
if scrivito.in_editable_view()
|
6
|
+
# Activate the image editor for all supported field types.
|
7
|
+
activateForFieldType('linklist')
|
8
|
+
activateForFieldType('reference')
|
9
|
+
|
10
|
+
# Activate the image editor if it is explicitely selected.
|
11
|
+
activateForSelector('[data-editor~="image"]')
|
12
|
+
|
13
|
+
# Disable DnD for all elements by default to prevent the user
|
14
|
+
# from accidentally opening an image in browser.
|
15
|
+
$('body').on 'dragover', -> false
|
16
|
+
$('body').on 'drop', -> false
|
17
|
+
|
18
|
+
statusIndicatorClass = 'image-editor-dragover'
|
19
|
+
|
20
|
+
activateForFieldType = (fieldType) ->
|
21
|
+
selector = 'img[data-scrivito-field-type=' + fieldType + ']:not([data-editor])'
|
22
|
+
activateForSelector(selector)
|
23
|
+
|
24
|
+
activateForSelector = (selector) ->
|
25
|
+
bodyElement = $('body')
|
26
|
+
bodyElement.on 'dragover.image-editor', selector, (event) ->
|
27
|
+
event.preventDefault()
|
28
|
+
$(event.target).addClass(statusIndicatorClass)
|
29
|
+
|
30
|
+
bodyElement.on 'dragleave.image-editor', selector, (event) ->
|
31
|
+
event.preventDefault()
|
32
|
+
$(event.target).removeClass(statusIndicatorClass)
|
33
|
+
|
34
|
+
bodyElement.on 'drop.image-editor', selector, (event) ->
|
35
|
+
event.preventDefault()
|
36
|
+
target = $(event.target)
|
37
|
+
fieldType = target.attr('data-scrivito-field-type')
|
38
|
+
save(event, $(event.target), fieldType)
|
39
|
+
|
40
|
+
save = (event, element, fieldType) ->
|
41
|
+
file = fetchFile(event, element)
|
42
|
+
return unless file
|
43
|
+
|
44
|
+
createImage(file).then (obj) ->
|
45
|
+
value = switch
|
46
|
+
when fieldType == 'reference' then obj.id
|
47
|
+
when fieldType == 'linklist' then [{obj_id: obj.id}]
|
48
|
+
else $.error('Field type must be "reference" or "linklist".')
|
49
|
+
|
50
|
+
element.scrivito('save', value).then ->
|
51
|
+
element.trigger('scrivito_reload')
|
52
|
+
|
53
|
+
fetchFile = (event, element) ->
|
54
|
+
data_transfer = event.originalEvent.dataTransfer
|
55
|
+
return unless data_transfer
|
56
|
+
|
57
|
+
files = data_transfer.files
|
58
|
+
if (files.length > 1)
|
59
|
+
alert('You dropped multiple files, but only one file is supported.')
|
60
|
+
element.removeClass(statusIndicatorClass)
|
61
|
+
return
|
62
|
+
|
63
|
+
files[0]
|
64
|
+
|
65
|
+
createImage = (file) ->
|
66
|
+
name = file.name.replace(/[^a-z0-9_.$\-]/ig, '-')
|
67
|
+
path = '_resources/' + Math.floor(Math.random() * 1000) + '/' + name
|
68
|
+
|
69
|
+
scrivito.create_obj
|
70
|
+
blob: file
|
71
|
+
_path: path
|
72
|
+
_obj_class: 'Image'
|
@@ -0,0 +1,124 @@
|
|
1
|
+
$ ->
|
2
|
+
# An editor for CMS linklist attributes.
|
3
|
+
|
4
|
+
# Creates the DOM for one link element of the linklist and substitutes the
|
5
|
+
# title and url attribute.
|
6
|
+
template = (attributes) ->
|
7
|
+
attributes ||= {}
|
8
|
+
|
9
|
+
title = attributes['title'] || ''
|
10
|
+
url = attributes['url'] || ''
|
11
|
+
|
12
|
+
$("<ul><li>
|
13
|
+
<input type=\"text\" name=\"title\" value=\"#{title}\" placeholder=\"Title\" />
|
14
|
+
<input type=\"text\" name=\"url\" value=\"#{url}\" placeholder=\"Url\" class=\"editing-url\" />
|
15
|
+
<div class=\"actions\">
|
16
|
+
<a href=\"#\" class=\"editing-button resourcebrowser-open editing-green\">
|
17
|
+
<i class=\"editing-icon editing-icon-search\" />
|
18
|
+
</a>
|
19
|
+
</div></li></ul>")
|
20
|
+
|
21
|
+
resourcebrowserButtonTemplate = ->
|
22
|
+
icon = $('<i></i>')
|
23
|
+
.addClass('editing-icon')
|
24
|
+
.addClass('editing-icon-plus')
|
25
|
+
|
26
|
+
button = $('<button></button>')
|
27
|
+
.addClass('editing-button')
|
28
|
+
.addClass('editing-green')
|
29
|
+
.addClass('add-link')
|
30
|
+
.html(icon)
|
31
|
+
|
32
|
+
button
|
33
|
+
|
34
|
+
# Returns the closest linklist DOM element.
|
35
|
+
getCmsField = (element) ->
|
36
|
+
element.closest('[data-scrivito-field-type=link]')
|
37
|
+
|
38
|
+
# Saves the entire linklist to the CMS and stores the last successfully saved value.
|
39
|
+
save = (cmsField) ->
|
40
|
+
value = getAttributes(cmsField) || null
|
41
|
+
|
42
|
+
cmsField.scrivito('save', value).done ->
|
43
|
+
cmsField.trigger('save.scrivito_editors')
|
44
|
+
|
45
|
+
# Run when clicking the '...' button inside a li.
|
46
|
+
onOpenResourcebrowser = (event) ->
|
47
|
+
event.preventDefault()
|
48
|
+
|
49
|
+
linkItem = $(event.currentTarget).closest('li')
|
50
|
+
cmsField = getCmsField(linkItem)
|
51
|
+
filters = cmsField.data('filters') || cmsField.data('filter')
|
52
|
+
|
53
|
+
Resourcebrowser.open
|
54
|
+
selection: []
|
55
|
+
filters: filters
|
56
|
+
selectionMode: 'single'
|
57
|
+
onSave: (selection) =>
|
58
|
+
onResourcebrowserSaveLinkItem(selection, linkItem)
|
59
|
+
|
60
|
+
# Resource browser callback for saving a single link.
|
61
|
+
onResourcebrowserSaveLinkItem = (selection, linkItem) ->
|
62
|
+
url = buildUrl(selection[0])
|
63
|
+
linkItem.find('[name=url]').val(url)
|
64
|
+
|
65
|
+
# trigger save after inserting the value
|
66
|
+
cmsField = getCmsField(linkItem)
|
67
|
+
save(cmsField)
|
68
|
+
|
69
|
+
true
|
70
|
+
|
71
|
+
# Transforms an obj id into an url that can be parsed by Scrivito
|
72
|
+
# to establish an internal link.
|
73
|
+
buildUrl = (id) ->
|
74
|
+
"/#{id}"
|
75
|
+
|
76
|
+
# Collects all link attributes.
|
77
|
+
getAttributes = (cmsField) ->
|
78
|
+
items = $(cmsField).find('li')
|
79
|
+
|
80
|
+
if items.length > 0
|
81
|
+
item = $(items[0])
|
82
|
+
title = item.find('[name=title]').val()
|
83
|
+
url = item.find('[name=url]').val()
|
84
|
+
|
85
|
+
if url
|
86
|
+
'title': title
|
87
|
+
'url': url
|
88
|
+
|
89
|
+
# Turns the server side generated link data into the link editor using a template.
|
90
|
+
transformLinks = (cmsFields) ->
|
91
|
+
for cmsField in cmsFields
|
92
|
+
cmsField = $(cmsField)
|
93
|
+
items = cmsField.find('li')
|
94
|
+
|
95
|
+
for item in items
|
96
|
+
item = $(item)
|
97
|
+
|
98
|
+
content = template
|
99
|
+
title: item.data('title')
|
100
|
+
url: item.data('url')
|
101
|
+
|
102
|
+
item.html(content)
|
103
|
+
|
104
|
+
if items.length == 0
|
105
|
+
cmsField.append(template())
|
106
|
+
|
107
|
+
# Automatically save when focus is lost.
|
108
|
+
onBlur = (event) ->
|
109
|
+
cmsField = getCmsField($(event.currentTarget))
|
110
|
+
|
111
|
+
save(cmsField)
|
112
|
+
|
113
|
+
initialize = (root) ->
|
114
|
+
linkElements = $(root).find('[data-scrivito-field-type="link"]:not([data-editor]), [data-editor="link"]')
|
115
|
+
|
116
|
+
if linkElements.length
|
117
|
+
transformLinks(linkElements)
|
118
|
+
|
119
|
+
linkElements.on 'blur', 'li input', onBlur
|
120
|
+
linkElements.on 'click', 'a.resourcebrowser-open', onOpenResourcebrowser
|
121
|
+
|
122
|
+
# Initialize link editor and setup event callbacks.
|
123
|
+
scrivito.on 'content', (root) ->
|
124
|
+
initialize(root)
|
@@ -151,7 +151,7 @@ $ ->
|
|
151
151
|
save(cmsField)
|
152
152
|
|
153
153
|
initialize = (root) ->
|
154
|
-
linklistElements = $(root).find('[data-scrivito-field-type="linklist"]:not([data-editor]), [data-editor
|
154
|
+
linklistElements = $(root).find('[data-scrivito-field-type="linklist"]:not([data-editor]), [data-editor~="linklist"]')
|
155
155
|
|
156
156
|
if linklistElements.length
|
157
157
|
transformLinks(linklistElements)
|
@@ -23,7 +23,7 @@ $ ->
|
|
23
23
|
cmsField.scrivito('save', content).done ->
|
24
24
|
cmsField.trigger('save.scrivito_editors')
|
25
25
|
|
26
|
-
$(document).on 'click', '[data-scrivito-field-type="multienum"]:not([data-editor]), [data-editor
|
26
|
+
$(document).on 'click', '[data-scrivito-field-type="multienum"]:not([data-editor]), [data-editor~="multienum"]', (event) ->
|
27
27
|
cmsField = $(event.currentTarget)
|
28
28
|
selected = cmsField.scrivito('content')
|
29
29
|
values = cmsField.data('values')
|
@@ -3,7 +3,7 @@ $ ->
|
|
3
3
|
|
4
4
|
scrivito.on 'load', ->
|
5
5
|
if scrivito.in_editable_view()
|
6
|
-
$('body').on 'click', '[data-scrivito-field-type="reference"]:not([data-editor]), [data-editor
|
6
|
+
$('body').on 'click', '[data-scrivito-field-type="reference"]:not([data-editor]), [data-editor~="reference"]', (event) ->
|
7
7
|
event.preventDefault()
|
8
8
|
|
9
9
|
cmsField = $(event.currentTarget)
|
@@ -93,7 +93,7 @@ $ ->
|
|
93
93
|
# Initialize referencelist editor and setup event callbacks.
|
94
94
|
scrivito.on 'content', (root) ->
|
95
95
|
if scrivito.in_editable_view()
|
96
|
-
elements = $(root).find('[data-scrivito-field-type="referencelist"]:not([data-editor]), [data-editor
|
96
|
+
elements = $(root).find('[data-scrivito-field-type="referencelist"]:not([data-editor]), [data-editor~="referencelist"]')
|
97
97
|
|
98
98
|
if elements.length
|
99
99
|
transform(elements)
|
@@ -18,7 +18,7 @@ $ ->
|
|
18
18
|
content = ui.value
|
19
19
|
cmsField.text(ui.value)
|
20
20
|
|
21
|
-
$('body').on 'click', '[data-editor
|
21
|
+
$('body').on 'click', '[data-editor~="slider"]:not(.active)', (event) ->
|
22
22
|
cmsField = $(event.currentTarget)
|
23
23
|
content = cmsField.scrivito('content')
|
24
24
|
min = cmsField.attr('data-min') || 1
|
@@ -53,7 +53,7 @@ $ ->
|
|
53
53
|
cmsField.siblings().addBack().not(cmsField.data('siblings_before_edit'))
|
54
54
|
|
55
55
|
initialize = ->
|
56
|
-
$('body').on 'mouseenter', '[data-scrivito-field-type="string"]:not([data-editor]), [data-editor
|
56
|
+
$('body').on 'mouseenter', '[data-scrivito-field-type="string"]:not([data-editor]), [data-editor~="string"]', (event) ->
|
57
57
|
cmsField = $(event.currentTarget)
|
58
58
|
|
59
59
|
unless cmsField.attr('contenteditable')?
|
@@ -63,10 +63,12 @@ $ ->
|
|
63
63
|
.blur(onBlur)
|
64
64
|
.keypress(onKey)
|
65
65
|
.keyup(onKey)
|
66
|
-
|
66
|
+
|
67
|
+
if cmsField.attr('data-autosave') != 'false'
|
68
|
+
cmsField.on('input', onInput)
|
67
69
|
|
68
70
|
# Prevent editable link strings to follow the link target on click.
|
69
|
-
$('body').on 'click', '[data-scrivito-field-type="string"]:not([data-editor]), [data-editor
|
71
|
+
$('body').on 'click', '[data-scrivito-field-type="string"]:not([data-editor]), [data-editor~="string"]', (event) ->
|
70
72
|
event.preventDefault()
|
71
73
|
|
72
74
|
scrivito.on 'load', ->
|
@@ -51,7 +51,7 @@ $ ->
|
|
51
51
|
cmsField.siblings().addBack().not(cmsField.data('siblings_before_edit'))
|
52
52
|
|
53
53
|
initialize = ->
|
54
|
-
$('body').on 'mouseenter', '[data-scrivito-field-type="text"]:not([data-editor]), [data-editor
|
54
|
+
$('body').on 'mouseenter', '[data-scrivito-field-type="text"]:not([data-editor]), [data-editor~="text"]', (event) ->
|
55
55
|
cmsField = $(event.currentTarget)
|
56
56
|
|
57
57
|
unless cmsField.attr('contenteditable')?
|
@@ -69,7 +69,7 @@ $ ->
|
|
69
69
|
.on('input', onInput)
|
70
70
|
|
71
71
|
# Prevent editable link text to follow the link target on click.
|
72
|
-
$('body').on 'click', '[data-scrivito-field-type="text"]:not([data-editor]), [data-editor
|
72
|
+
$('body').on 'click', '[data-scrivito-field-type="text"]:not([data-editor]), [data-editor~="text"]', (event) ->
|
73
73
|
event.preventDefault()
|
74
74
|
|
75
75
|
scrivito.on 'load', ->
|
@@ -10,10 +10,5 @@
|
|
10
10
|
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
|
11
11
|
// about supported directives.
|
12
12
|
//
|
13
|
-
//= require
|
14
|
-
//= require
|
15
|
-
//= require jquery.ui.slider
|
16
|
-
//= require jquery-ui-timepicker-addon.min
|
17
|
-
//= require redactor
|
18
|
-
//= require scrivito_resourcebrowser
|
19
|
-
//= require_tree .
|
13
|
+
//= require scrivito_editors_addons
|
14
|
+
//= require scrivito_editors_core
|