scrivito_editors 1.0.0 → 1.1.0.rc1
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/README.md +1 -1
- data/app/assets/javascripts/scrivito_editors/enum_editor.js +22 -25
- data/app/assets/javascripts/scrivito_editors/helpers/file_dropzone.js +5 -0
- data/app/assets/javascripts/scrivito_editors/html_editor.js +2 -2
- data/app/assets/javascripts/scrivito_editors/image_editor.js +20 -30
- data/app/assets/javascripts/scrivito_editors/link_editor.js +23 -18
- data/app/assets/javascripts/scrivito_editors/linklist_editor.js +33 -32
- data/app/assets/javascripts/scrivito_editors/medium_editor.js +28 -14
- data/app/assets/javascripts/scrivito_editors/redactor_plugins/scrivito_editors_image_manager.js +1 -1
- data/app/assets/javascripts/scrivito_editors/redactor_plugins/scrivito_editors_link_manager.js +4 -9
- data/app/assets/javascripts/scrivito_editors/reference_editor.js +7 -5
- data/app/assets/javascripts/scrivito_editors/string_editor.js +3 -7
- data/app/assets/javascripts/scrivito_editors/stringlist_editor.js +11 -0
- data/app/assets/javascripts/scrivito_editors_addons.js +1 -0
- data/app/assets/stylesheets/scrivito_editors/editors/button_container.css +5 -1
- data/app/assets/stylesheets/scrivito_editors/editors/medium_editor.css +1 -1
- data/app/assets/stylesheets/scrivito_editors/placeholder.css +3 -2
- data/app/assets/stylesheets/scrivito_editors/stringlist_editor.css +1 -0
- data/vendor/assets/javascripts/medium-editor.js +252 -12
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e3270ccf6587292e9e95e6451970a021be1650c
|
4
|
+
data.tar.gz: ccb599722a4db3e062a13ad5be2fd99fbe0d10d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 384bfe1abec2ddf9c28a932818d2ce237a902e7140071ed5e2d1f702d1134ae8d0969957bf16ec5f6ed38f1a11c181ac2ddc936f4de5b7e8e76b7e95d8912c44
|
7
|
+
data.tar.gz: 231c54b4d4f644f5e145ab10a6fde84cedbc49afab87543e6a509b0d223a92616b9ea4a57509c58d44293ea0142db626d01260868e2bc40c2de51a7b582deef3
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Scrivito Editors
|
2
2
|
|
3
|
-
[](https://badge.fury.io/rb/scrivito_editors)
|
4
4
|
|
5
5
|
The [Scrivito](http://scrivito.com) Editors gem is a collection of useful standard
|
6
6
|
JavaScript editors based on the Scrivito SDK. The editors allow to edit all CMS
|
@@ -1,34 +1,38 @@
|
|
1
1
|
(function() {
|
2
|
-
var activate,
|
3
|
-
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
4
|
-
|
5
|
-
clear = '__scrivito_editors_enum_clear';
|
2
|
+
var activate, blur, change, save, template;
|
6
3
|
|
7
4
|
template = function(values) {
|
8
5
|
var element;
|
9
6
|
element = $('<select></select>').addClass('form-control');
|
10
7
|
$.each(values, function(index, value) {
|
11
|
-
|
12
|
-
if (value === clear) {
|
13
|
-
text = '';
|
14
|
-
} else {
|
15
|
-
text = value;
|
16
|
-
}
|
17
|
-
return $('<option></option>').attr('value', value).text(text).appendTo(element);
|
8
|
+
return $('<option></option>').attr('value', value).text(value).appendTo(element);
|
18
9
|
});
|
19
10
|
return element;
|
20
11
|
};
|
21
12
|
|
22
|
-
save = function(event) {
|
13
|
+
save = function(event, options) {
|
23
14
|
var cmsField, content, element;
|
24
15
|
element = $(event.currentTarget);
|
25
|
-
cmsField = element.data('
|
16
|
+
cmsField = element.data('scrivitoEditorsCmsField');
|
26
17
|
content = element.val();
|
27
|
-
if (content ===
|
18
|
+
if (content === '') {
|
28
19
|
content = null;
|
29
20
|
}
|
30
21
|
return cmsField.scrivito('save', content).done(function() {
|
31
|
-
|
22
|
+
cmsField.trigger('scrivito_editors:save');
|
23
|
+
if (options != null ? options.blur : void 0) {
|
24
|
+
return cmsField.trigger('scrivito_editors:blur');
|
25
|
+
}
|
26
|
+
});
|
27
|
+
};
|
28
|
+
|
29
|
+
change = function(event) {
|
30
|
+
return save(event);
|
31
|
+
};
|
32
|
+
|
33
|
+
blur = function(event) {
|
34
|
+
return save(event, {
|
35
|
+
blur: true
|
32
36
|
});
|
33
37
|
};
|
34
38
|
|
@@ -36,18 +40,11 @@
|
|
36
40
|
var cmsField;
|
37
41
|
cmsField = $(element);
|
38
42
|
return cmsField.on('click', function() {
|
39
|
-
var content,
|
43
|
+
var content, values;
|
40
44
|
content = cmsField.scrivito('content');
|
41
45
|
values = cmsField.scrivito('allowed_values');
|
42
|
-
|
43
|
-
|
44
|
-
}
|
45
|
-
if (content) {
|
46
|
-
selected = content;
|
47
|
-
} else {
|
48
|
-
selected = clear;
|
49
|
-
}
|
50
|
-
template(values).data('cmsField', cmsField).val(selected).insertAfter(cmsField).change(save).focusout(save).focus();
|
46
|
+
values.unshift('');
|
47
|
+
template(values).data('scrivitoEditorsCmsField', cmsField).val(content || '').insertAfter(cmsField).change(change).blur(blur).focus();
|
51
48
|
return cmsField.hide();
|
52
49
|
});
|
53
50
|
};
|
@@ -24,7 +24,12 @@
|
|
24
24
|
var files, ref, ref1;
|
25
25
|
el.removeClass('image-editor-dragover');
|
26
26
|
if (((ref = (files = (ref1 = e.originalEvent.dataTransfer) != null ? ref1.files : void 0)) != null ? ref.length : void 0) === 1) {
|
27
|
+
el.addClass('scrivito_element_overlay');
|
27
28
|
callback(el, files[0]);
|
29
|
+
} else {
|
30
|
+
el.children().not('img').css({
|
31
|
+
pointerEvents: 'auto'
|
32
|
+
});
|
28
33
|
}
|
29
34
|
return false;
|
30
35
|
});
|
@@ -1,10 +1,10 @@
|
|
1
1
|
(function() {
|
2
2
|
scrivito.editors.html_editor = {
|
3
3
|
can_edit: function(element) {
|
4
|
-
return scrivito.editors.
|
4
|
+
return scrivito.editors.medium_editor.can_edit(element);
|
5
5
|
},
|
6
6
|
activate: function(element) {
|
7
|
-
return scrivito.editors.
|
7
|
+
return scrivito.editors.medium_editor.activate(element);
|
8
8
|
}
|
9
9
|
};
|
10
10
|
|
@@ -52,39 +52,29 @@
|
|
52
52
|
};
|
53
53
|
|
54
54
|
setup_image_kit_container = function(element, dialog) {
|
55
|
-
var container,
|
55
|
+
var container, image;
|
56
56
|
container = $(".image_kit_start");
|
57
57
|
image = new Image();
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
if (url.indexOf("?") < 0) {
|
63
|
-
fallbackUrl = url + "?=" + new Date().getTime();
|
64
|
-
} else {
|
65
|
-
fallbackUrl = url + "&=" + new Date().getTime();
|
66
|
-
}
|
67
|
-
image.onerror = function() {
|
68
|
-
if (image.src === fallbackUrl) {
|
58
|
+
return element.scrivito('content').no_cache_url().then(function(no_cache_url) {
|
59
|
+
image.crossOrigin = "Anonymous";
|
60
|
+
image.src = no_cache_url;
|
61
|
+
image.onerror = function() {
|
69
62
|
return $("<div style='padding:20px'>\n <h1>We're sorry,</h1>\n <p>Scrivito can't edit this image in your browser. What now?</p>\n <ul>\n <li>Check for browser updates</li>\n <li>Try using a different browser</li>\n <li>Contact us at\n <a href=\"https://scrivito.com/support\" target=\"_blank\">https://scrivito.com/support</a>\n </li>\n </ul>\n</div>").appendTo(container);
|
70
|
-
}
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
};
|
86
|
-
})(this));
|
87
|
-
};
|
63
|
+
};
|
64
|
+
return image.onload = function() {
|
65
|
+
var kit;
|
66
|
+
kit = setup_image_kit(image, container);
|
67
|
+
kit.ui.selectOperations({
|
68
|
+
except: "stickers"
|
69
|
+
});
|
70
|
+
kit.run();
|
71
|
+
return dialog.when_closed.then((function(_this) {
|
72
|
+
return function() {
|
73
|
+
return save_edited_image(element, kit);
|
74
|
+
};
|
75
|
+
})(this));
|
76
|
+
};
|
77
|
+
});
|
88
78
|
};
|
89
79
|
|
90
80
|
save_edited_image = function(element, kit) {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
(function() {
|
2
|
-
var activate, openContentBrowser, save, template;
|
2
|
+
var activate, fetchDescription, openContentBrowser, save, template;
|
3
3
|
|
4
4
|
scrivito.on('load', function() {
|
5
5
|
return scrivito.define_editor('link', scrivito.editors.link_editor);
|
@@ -14,18 +14,22 @@
|
|
14
14
|
}
|
15
15
|
};
|
16
16
|
|
17
|
+
fetchDescription = function(cmsField, objId) {
|
18
|
+
return scrivito.description_for_editor([objId]).then(function(descriptions) {
|
19
|
+
var urlInput;
|
20
|
+
urlInput = cmsField.find('[name=url]');
|
21
|
+
if (descriptions[0] && urlInput.not(':focus')) {
|
22
|
+
return urlInput.val(descriptions[0]);
|
23
|
+
}
|
24
|
+
});
|
25
|
+
};
|
26
|
+
|
17
27
|
activate = function(cmsField) {
|
18
|
-
var link
|
28
|
+
var link;
|
19
29
|
link = cmsField.scrivito('content') || {};
|
20
30
|
cmsField.html(template(link));
|
21
|
-
if (
|
22
|
-
|
23
|
-
var urlInput;
|
24
|
-
urlInput = cmsField.find('[name=url]');
|
25
|
-
if (!urlInput.is(':focus')) {
|
26
|
-
return urlInput.val(descriptions[0]);
|
27
|
-
}
|
28
|
-
});
|
31
|
+
if (link.obj_id) {
|
32
|
+
fetchDescription(cmsField, link.obj_id);
|
29
33
|
}
|
30
34
|
cmsField.on('blur', 'li input', function() {
|
31
35
|
return save(cmsField);
|
@@ -35,24 +39,24 @@
|
|
35
39
|
return cmsField.find('[name=url]').on('focus', function() {
|
36
40
|
var input, raw;
|
37
41
|
input = $(this);
|
38
|
-
raw = input.
|
42
|
+
raw = input.attr('data-value');
|
39
43
|
if (raw) {
|
40
44
|
input.val(raw);
|
41
45
|
}
|
42
|
-
return input.
|
46
|
+
return input.attr('data-value', null);
|
43
47
|
});
|
44
48
|
};
|
45
49
|
|
46
50
|
template = function(link) {
|
47
51
|
var obj_url;
|
48
|
-
obj_url = link.obj_id && (
|
52
|
+
obj_url = link.obj_id && scrivito.path_for_id(link.obj_id);
|
49
53
|
return $("<ul>\n <li data-id=\"" + link.obj_id + "\" data-title=\"" + link.title + "\" data-url=\"" + link.url + "\">\n <input type=\"text\" name=\"title\" value=\"" + (link.title || '') + "\" placeholder=\"Title\" />\n <input type=\"text\" name=\"url\" value=\"" + (link.url || obj_url || '') + "\"\n data-value=\"" + (link.url || obj_url || '') + "\" placeholder=\"Url\" class=\"editing-url\" />\n <div class=\"actions\">\n <a href=\"#\" class=\"scrivito_open_content_browser editing-button editing-green\">\n <i class=\"editing-icon editing-icon-search\" />\n </a>\n </div>\n </li>\n</ul>");
|
50
54
|
};
|
51
55
|
|
52
56
|
openContentBrowser = function(cmsField) {
|
53
57
|
var id, linkItem;
|
54
58
|
linkItem = cmsField.find('li');
|
55
|
-
id = linkItem.
|
59
|
+
id = linkItem.attr('data-id');
|
56
60
|
scrivito.content_browser.open({
|
57
61
|
selection: id ? [id] : [],
|
58
62
|
selection_mode: 'single',
|
@@ -61,10 +65,11 @@
|
|
61
65
|
}).done(function(selection) {
|
62
66
|
var url, val;
|
63
67
|
if (id = selection[0]) {
|
64
|
-
url =
|
68
|
+
url = scrivito.path_for_id(id);
|
65
69
|
val = "Content browser selection (" + url + ")";
|
66
|
-
linkItem.
|
67
|
-
|
70
|
+
linkItem.attr('data-id', id).find('[name=url]').attr('data-value', url).val(val);
|
71
|
+
save(cmsField);
|
72
|
+
return fetchDescription(cmsField, id);
|
68
73
|
}
|
69
74
|
});
|
70
75
|
return false;
|
@@ -75,7 +80,7 @@
|
|
75
80
|
li = cmsField.find('li');
|
76
81
|
title = li.find('[name=title]').val();
|
77
82
|
urlInput = li.find('[name=url]');
|
78
|
-
url = urlInput.
|
83
|
+
url = urlInput.attr('data-value') || urlInput.val();
|
79
84
|
value = url ? {
|
80
85
|
title: title,
|
81
86
|
url: url
|
@@ -1,5 +1,5 @@
|
|
1
1
|
(function() {
|
2
|
-
var activate, addLink, attachHandlers, attachLinkHandlers, fetchDescriptions, linkTemplate, openContentBrowser, removeLink, render, save, storeLastSaved;
|
2
|
+
var activate, addLink, attachHandlers, attachLinkHandlers, fetchDescriptions, linkTemplate, objIdsFor, openContentBrowser, removeLink, render, save, storeLastSaved;
|
3
3
|
|
4
4
|
scrivito.on('load', function() {
|
5
5
|
return scrivito.define_editor('linklist', scrivito.editors.linklist_editor);
|
@@ -18,7 +18,7 @@
|
|
18
18
|
var linklist;
|
19
19
|
linklist = cmsField.scrivito('content');
|
20
20
|
render(cmsField, linklist);
|
21
|
-
fetchDescriptions(cmsField, linklist);
|
21
|
+
fetchDescriptions(cmsField, objIdsFor(linklist));
|
22
22
|
attachHandlers(cmsField);
|
23
23
|
return storeLastSaved(cmsField, linklist);
|
24
24
|
};
|
@@ -34,27 +34,15 @@
|
|
34
34
|
return cmsField.append('<button class="editing-button editing-green add-link">\n <i class="editing-icon editing-icon-plus"></i>\n</button>');
|
35
35
|
};
|
36
36
|
|
37
|
-
fetchDescriptions = function(cmsField,
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
results = [];
|
42
|
-
for (j = 0, len = linklist.length; j < len; j++) {
|
43
|
-
link = linklist[j];
|
44
|
-
if (link.obj_id) {
|
45
|
-
results.push(link.obj_id);
|
46
|
-
}
|
47
|
-
}
|
48
|
-
return results;
|
49
|
-
})();
|
50
|
-
if (obj_ids.length) {
|
51
|
-
return scrivito.description_for_editor(obj_ids).then(function(descriptions) {
|
52
|
-
var i, j, len, obj_id, results, urlInput;
|
37
|
+
fetchDescriptions = function(cmsField, objIds) {
|
38
|
+
if (objIds.length) {
|
39
|
+
return scrivito.description_for_editor(objIds).then(function(descriptions) {
|
40
|
+
var i, j, len, objId, results, urlInput;
|
53
41
|
results = [];
|
54
|
-
for (i = j = 0, len =
|
55
|
-
|
56
|
-
urlInput = cmsField.find("[data-id='" +
|
57
|
-
if (
|
42
|
+
for (i = j = 0, len = objIds.length; j < len; i = ++j) {
|
43
|
+
objId = objIds[i];
|
44
|
+
urlInput = cmsField.find("[data-id='" + objId + "'] [name=url]");
|
45
|
+
if (descriptions[i] && urlInput.not(':focus')) {
|
58
46
|
results.push(urlInput.val(descriptions[i]));
|
59
47
|
} else {
|
60
48
|
results.push(void 0);
|
@@ -65,6 +53,18 @@
|
|
65
53
|
}
|
66
54
|
};
|
67
55
|
|
56
|
+
objIdsFor = function(linklist) {
|
57
|
+
var j, len, link, results;
|
58
|
+
results = [];
|
59
|
+
for (j = 0, len = linklist.length; j < len; j++) {
|
60
|
+
link = linklist[j];
|
61
|
+
if (link.obj_id) {
|
62
|
+
results.push(link.obj_id);
|
63
|
+
}
|
64
|
+
}
|
65
|
+
return results;
|
66
|
+
};
|
67
|
+
|
68
68
|
attachHandlers = function(cmsField) {
|
69
69
|
var j, len, li, ref, results, ul;
|
70
70
|
ul = cmsField.find('ul');
|
@@ -95,17 +95,17 @@
|
|
95
95
|
}).find('[name=url]').on('focus', function() {
|
96
96
|
var input, raw;
|
97
97
|
input = $(this);
|
98
|
-
raw = input.
|
98
|
+
raw = input.attr('data-value');
|
99
99
|
if (raw) {
|
100
100
|
input.val(raw);
|
101
101
|
}
|
102
|
-
return input.
|
102
|
+
return input.attr('data-value', null);
|
103
103
|
});
|
104
104
|
};
|
105
105
|
|
106
106
|
linkTemplate = function(link) {
|
107
107
|
var obj_url;
|
108
|
-
obj_url = link.obj_id && (
|
108
|
+
obj_url = link.obj_id && scrivito.path_for_id(link.obj_id);
|
109
109
|
return $("<li " + (link.obj_id ? "data-id='" + link.obj_id + "'" : void 0) + " data-title=\"" + link.title + "\" data-url=\"" + link.url + "\">\n <input type=\"text\" name=\"title\" value=\"" + (link.title || '') + "\" placeholder=\"Title\" />\n <input type=\"text\" name=\"url\" value=\"" + (link.url || obj_url || '') + "\"\n data-value=\"" + (link.url || obj_url || '') + "\" placeholder=\"Url\" class=\"editing-url\" />\n <div class=\"actions\">\n <a href=\"#\" class=\"scrivito_open_content_browser editing-button editing-green\">\n <i class=\"editing-icon editing-icon-search\" />\n </a>\n <a href=\"#\" class=\"editing-button editing-red delete\">\n <i class=\"editing-icon editing-icon-trash\" />\n </a>\n </div>\n</li>");
|
110
110
|
};
|
111
111
|
|
@@ -120,7 +120,7 @@
|
|
120
120
|
li = $(li);
|
121
121
|
title = li.find('[name=title]').val();
|
122
122
|
input = li.find('[name=url]');
|
123
|
-
url = input.
|
123
|
+
url = input.attr('data-value') || input.val();
|
124
124
|
if (url) {
|
125
125
|
results.push({
|
126
126
|
title: title,
|
@@ -135,7 +135,7 @@
|
|
135
135
|
value = $.grep(value, function(n) {
|
136
136
|
return n;
|
137
137
|
});
|
138
|
-
lastSaved = cmsField.
|
138
|
+
lastSaved = cmsField.attr('data-scrivito-editors-linklist-last-saved');
|
139
139
|
if (JSON.stringify(value) !== JSON.stringify(lastSaved)) {
|
140
140
|
return cmsField.scrivito('save', value).done(function() {
|
141
141
|
cmsField.trigger('save.scrivito_editors');
|
@@ -154,7 +154,7 @@
|
|
154
154
|
|
155
155
|
openContentBrowser = function(cmsField, li) {
|
156
156
|
var id;
|
157
|
-
id = li.
|
157
|
+
id = li.attr('data-id');
|
158
158
|
scrivito.content_browser.open({
|
159
159
|
selection: id ? [id] : [],
|
160
160
|
selection_mode: 'single',
|
@@ -164,10 +164,11 @@
|
|
164
164
|
return function(selection) {
|
165
165
|
var url, val;
|
166
166
|
if (id = selection[0]) {
|
167
|
-
url =
|
167
|
+
url = scrivito.path_for_id(id);
|
168
168
|
val = "Content browser selection (" + url + ")";
|
169
|
-
li.
|
170
|
-
|
169
|
+
li.attr('data-id', id).find('[name=url]').attr('data-value', url).val(val);
|
170
|
+
save(cmsField);
|
171
|
+
return fetchDescriptions(cmsField, [id]);
|
171
172
|
}
|
172
173
|
};
|
173
174
|
})(this));
|
@@ -181,7 +182,7 @@
|
|
181
182
|
};
|
182
183
|
|
183
184
|
storeLastSaved = function(cmsField, lastSaved) {
|
184
|
-
return cmsField.
|
185
|
+
return cmsField.attr('data-scrivito-editors-linklist-last-saved', lastSaved);
|
185
186
|
};
|
186
187
|
|
187
188
|
}).call(this);
|
@@ -1,5 +1,5 @@
|
|
1
1
|
(function() {
|
2
|
-
var ScrivitoAnchor, activate, editorOptions;
|
2
|
+
var ScrivitoAnchor, activate, customOptions, defaultOptions, editorOptions;
|
3
3
|
|
4
4
|
ScrivitoAnchor = MediumEditor.extensions.anchor.extend({
|
5
5
|
name: 'scrivito_anchor',
|
@@ -26,9 +26,8 @@
|
|
26
26
|
input = form.find('.medium-editor-toolbar-input');
|
27
27
|
return form.find('.medium-editor-toolbar-browse').on('click', (function(_this) {
|
28
28
|
return function() {
|
29
|
-
var cmsField,
|
30
|
-
|
31
|
-
selection = matches != null ? [matches[1]] : [];
|
29
|
+
var cmsField, id, selection;
|
30
|
+
selection = (id = scrivito.id_from_path(input.val())) ? [id] : [];
|
32
31
|
cmsField = $(_this.base.origElements);
|
33
32
|
scrivito.content_browser.open({
|
34
33
|
filter: cmsField.data('scrivitoEditorsFilter'),
|
@@ -38,7 +37,11 @@
|
|
38
37
|
}).always(function() {
|
39
38
|
return input.focus();
|
40
39
|
}).done(function(selection) {
|
41
|
-
|
40
|
+
if (selection.length) {
|
41
|
+
return input.val(scrivito.path_for_id(selection[0]));
|
42
|
+
} else {
|
43
|
+
return input.val('');
|
44
|
+
}
|
42
45
|
});
|
43
46
|
return false;
|
44
47
|
};
|
@@ -55,28 +58,36 @@
|
|
55
58
|
}
|
56
59
|
});
|
57
60
|
|
58
|
-
editorOptions = function(
|
59
|
-
|
60
|
-
|
61
|
+
editorOptions = function() {
|
62
|
+
return $.extend({}, defaultOptions(), customOptions());
|
63
|
+
};
|
64
|
+
|
65
|
+
defaultOptions = function() {
|
66
|
+
return {
|
61
67
|
anchorPreview: false,
|
62
68
|
extensions: {
|
63
69
|
scrivito_anchor: new ScrivitoAnchor
|
64
70
|
},
|
71
|
+
placeholder: false,
|
65
72
|
toolbar: {
|
66
|
-
buttons: ['
|
73
|
+
buttons: ['bold', 'italic', 'scrivito_anchor', 'h2', 'h3', 'unorderedlist', 'orderedlist'],
|
74
|
+
standardizeSelectionStart: true
|
67
75
|
}
|
68
76
|
};
|
69
|
-
|
70
|
-
|
77
|
+
};
|
78
|
+
|
79
|
+
customOptions = function() {
|
80
|
+
if (typeof scrivito.editors.medium_editor.options === 'function') {
|
81
|
+
return scrivito.editors.medium_editor.options();
|
82
|
+
} else {
|
83
|
+
return scrivito.editors.medium_editor.options;
|
71
84
|
}
|
72
|
-
options.toolbar.standardizeSelectionStart = true;
|
73
|
-
return options;
|
74
85
|
};
|
75
86
|
|
76
87
|
activate = function(element) {
|
77
88
|
var cmsField;
|
78
89
|
cmsField = $(element);
|
79
|
-
return new MediumEditor(cmsField, editorOptions(
|
90
|
+
return new MediumEditor(cmsField, editorOptions()).subscribe('editableInput', function() {
|
80
91
|
return cmsField.scrivito('save', cmsField.html());
|
81
92
|
});
|
82
93
|
};
|
@@ -87,6 +98,9 @@
|
|
87
98
|
},
|
88
99
|
activate: function(element) {
|
89
100
|
return activate(element);
|
101
|
+
},
|
102
|
+
options: function() {
|
103
|
+
return {};
|
90
104
|
}
|
91
105
|
};
|
92
106
|
|
data/app/assets/javascripts/scrivito_editors/redactor_plugins/scrivito_editors_link_manager.js
CHANGED
@@ -8,7 +8,6 @@
|
|
8
8
|
return self = {
|
9
9
|
init: function() {
|
10
10
|
this.modal.addTemplate('scrivito_link_manager_browse', self.browseButtonHtml);
|
11
|
-
this.modal.addTemplate('scrivito_link_manager_url', '/$id');
|
12
11
|
this.modal.addCallback('imageEdit', self.addBrowseToModal);
|
13
12
|
return this.modal.addCallback('link', self.addBrowseToModal);
|
14
13
|
},
|
@@ -36,19 +35,15 @@
|
|
36
35
|
})(this));
|
37
36
|
},
|
38
37
|
getObjIds: function() {
|
39
|
-
var
|
40
|
-
|
41
|
-
|
42
|
-
return [matches[1]];
|
38
|
+
var id;
|
39
|
+
if (id = scrivito.id_from_path(self.urlInput().val())) {
|
40
|
+
return [id];
|
43
41
|
} else {
|
44
42
|
return [];
|
45
43
|
}
|
46
44
|
},
|
47
45
|
setObjId: function(id) {
|
48
|
-
return self.urlInput().val(
|
49
|
-
},
|
50
|
-
toUrl: function(id) {
|
51
|
-
return this.modal.getTemplate('scrivito_link_manager_url').replace("$id", id);
|
46
|
+
return self.urlInput().val(scrivito.path_for_id(id));
|
52
47
|
}
|
53
48
|
};
|
54
49
|
};
|
@@ -4,11 +4,13 @@
|
|
4
4
|
activate = function(element) {
|
5
5
|
var cmsField, objId;
|
6
6
|
cmsField = $(element);
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
if (!cmsField.is('video, audio, img')) {
|
8
|
+
objId = cmsField.scrivito('content');
|
9
|
+
if (objId && !cmsField.children().length) {
|
10
|
+
scrivito.description_for_editor([objId]).then(function(results) {
|
11
|
+
return cmsField.text(results[0]);
|
12
|
+
});
|
13
|
+
}
|
12
14
|
}
|
13
15
|
return cmsField.on('click', function(event) {
|
14
16
|
var filterContext, filters, isImage, selected;
|
@@ -42,13 +42,9 @@
|
|
42
42
|
save = function(cmsField) {
|
43
43
|
var content;
|
44
44
|
content = getCurrentContent(cmsField);
|
45
|
-
|
46
|
-
return cmsField.
|
47
|
-
|
48
|
-
});
|
49
|
-
} else {
|
50
|
-
return $.Deferred().resolve();
|
51
|
-
}
|
45
|
+
return cmsField.scrivito('save', content).done(function() {
|
46
|
+
return cmsField.trigger('scrivito_editors:save');
|
47
|
+
});
|
52
48
|
};
|
53
49
|
|
54
50
|
getCurrentContent = function(cmsField) {
|
@@ -8,6 +8,17 @@
|
|
8
8
|
field = $(element);
|
9
9
|
return field.tagEditor({
|
10
10
|
initialTags: field.scrivito('content'),
|
11
|
+
autocomplete: {
|
12
|
+
source: (function(_this) {
|
13
|
+
return function(request, response) {
|
14
|
+
var fieldName;
|
15
|
+
fieldName = $(element).data("scrivitoFieldName");
|
16
|
+
return scrivito.suggest_completion(fieldName, request.term).then(function(suggestions) {
|
17
|
+
return response(suggestions);
|
18
|
+
});
|
19
|
+
};
|
20
|
+
})(this)
|
21
|
+
},
|
11
22
|
onChange: function(field, editor, tags) {
|
12
23
|
return field.scrivito('save', tags);
|
13
24
|
}
|
@@ -5,10 +5,14 @@
|
|
5
5
|
}
|
6
6
|
.scrivito-editor-binary-button-container:not(.scrivito-editor-image-button-container) {
|
7
7
|
display:block; position: relative;
|
8
|
-
background: rgba(0,0,0,.1);
|
9
8
|
box-shadow: 0 0 0 2px rgba(0,0,0,.2);
|
10
9
|
min-height: 90px; padding:5px;
|
11
10
|
}
|
11
|
+
|
12
|
+
.scrivito-editor-binary-button-container:not(.scrivito-editor-image-button-container):not(.scrivito_element_overlay) {
|
13
|
+
background: rgba(0,0,0,.1);
|
14
|
+
}
|
15
|
+
|
12
16
|
.scrivito-editor-image-button-container .editing-button,
|
13
17
|
.scrivito-editor-binary-button-container .editing-button {
|
14
18
|
padding: 5px 8px; margin: 0px;
|
@@ -4,7 +4,7 @@
|
|
4
4
|
*= require_self
|
5
5
|
*/
|
6
6
|
.medium-toolbar-arrow-under::after { top: auto;}
|
7
|
-
.medium-editor-toolbar { z-index:
|
7
|
+
.medium-editor-toolbar { z-index: 111112; margin:0 10px; background:rgba(67, 148, 57, 0.9);
|
8
8
|
border-radius:4px;}
|
9
9
|
.medium-editor-toolbar li button { height:40px; min-width:40px; padding:10px;
|
10
10
|
border:none; margin:1px; background:rgba(0,0,0,.1);
|
@@ -4,7 +4,7 @@
|
|
4
4
|
*/
|
5
5
|
[data-scrivito-display-mode="editing"] [data-scrivito-editors-placeholder]:empty:not(:focus):before {
|
6
6
|
content: attr(data-scrivito-editors-placeholder);
|
7
|
-
color:
|
7
|
+
color: rgba(64, 64, 64, 0.53);
|
8
8
|
display: inline-block;
|
9
9
|
font-size: 13px;
|
10
10
|
font-style: normal;
|
@@ -24,6 +24,7 @@
|
|
24
24
|
/* Firefox: Let the input cursor appear at the expected position */
|
25
25
|
[data-scrivito-display-mode="editing"] [data-scrivito-editors-placeholder]:empty:focus:after,
|
26
26
|
[data-scrivito-display-mode="editing"] [data-scrivito-editors-placeholder]:empty:focus:before {
|
27
|
-
content: "
|
27
|
+
content: "\200b";
|
28
|
+
color: transparent;
|
28
29
|
display: inline-block;
|
29
30
|
}
|
@@ -625,7 +625,7 @@ MediumEditor.extensions = {};
|
|
625
625
|
/*
|
626
626
|
* Take an element, and break up all of its text content into unique pieces such that:
|
627
627
|
* 1) All text content of the elements are in separate blocks. No piece of text content should span
|
628
|
-
*
|
628
|
+
* across multiple blocks. This means no element return by this function should have
|
629
629
|
* any blocks as children.
|
630
630
|
* 2) The union of the textcontent of all of the elements returned here covers all
|
631
631
|
* of the text within the element.
|
@@ -2307,6 +2307,10 @@ MediumEditor.extensions = {};
|
|
2307
2307
|
// Detecting keydown on the contenteditables
|
2308
2308
|
this.attachToEachElement('keydown', this.handleKeydown);
|
2309
2309
|
break;
|
2310
|
+
case 'editableKeydownSpace':
|
2311
|
+
// Detecting keydown for SPACE on the contenteditables
|
2312
|
+
this.setupListener('editableKeydown');
|
2313
|
+
break;
|
2310
2314
|
case 'editableKeydownEnter':
|
2311
2315
|
// Detecting keydown for ENTER on the contenteditables
|
2312
2316
|
this.setupListener('editableKeydown');
|
@@ -2519,8 +2523,13 @@ MediumEditor.extensions = {};
|
|
2519
2523
|
},
|
2520
2524
|
|
2521
2525
|
handleKeydown: function (event) {
|
2526
|
+
|
2522
2527
|
this.triggerCustomEvent('editableKeydown', event, event.currentTarget);
|
2523
2528
|
|
2529
|
+
if (MediumEditor.util.isKey(event, MediumEditor.util.keyCode.SPACE)) {
|
2530
|
+
return this.triggerCustomEvent('editableKeydownSpace', event, event.currentTarget);
|
2531
|
+
}
|
2532
|
+
|
2524
2533
|
if (MediumEditor.util.isKey(event, MediumEditor.util.keyCode.ENTER) || (event.ctrlKey && MediumEditor.util.isKey(event, MediumEditor.util.keyCode.M))) {
|
2525
2534
|
return this.triggerCustomEvent('editableKeydownEnter', event, event.currentTarget);
|
2526
2535
|
}
|
@@ -3322,7 +3331,7 @@ MediumEditor.extensions = {};
|
|
3322
3331
|
var targetCheckbox = this.getAnchorTargetCheckbox(),
|
3323
3332
|
buttonCheckbox = this.getAnchorButtonCheckbox(),
|
3324
3333
|
opts = {
|
3325
|
-
url: this.getInput().value
|
3334
|
+
url: this.getInput().value.trim()
|
3326
3335
|
};
|
3327
3336
|
|
3328
3337
|
if (this.linkValidation) {
|
@@ -3442,6 +3451,7 @@ MediumEditor.extensions = {};
|
|
3442
3451
|
|
3443
3452
|
MediumEditor.extensions.anchor = AnchorForm;
|
3444
3453
|
}());
|
3454
|
+
|
3445
3455
|
(function () {
|
3446
3456
|
'use strict';
|
3447
3457
|
|
@@ -3460,6 +3470,11 @@ MediumEditor.extensions = {};
|
|
3460
3470
|
*/
|
3461
3471
|
previewValueSelector: 'a',
|
3462
3472
|
|
3473
|
+
/* showWhenToolbarIsVisible: [boolean]
|
3474
|
+
* determines whether the anchor tag preview shows up when the toolbar is visible
|
3475
|
+
*/
|
3476
|
+
showWhenToolbarIsVisible: false,
|
3477
|
+
|
3463
3478
|
init: function () {
|
3464
3479
|
this.anchorPreview = this.createPreview();
|
3465
3480
|
|
@@ -3611,7 +3626,7 @@ MediumEditor.extensions = {};
|
|
3611
3626
|
|
3612
3627
|
// only show when toolbar is not present
|
3613
3628
|
var toolbar = this.base.getExtensionByName('toolbar');
|
3614
|
-
if (toolbar && toolbar.isDisplayed && toolbar.isDisplayed()) {
|
3629
|
+
if (!this.showWhenToolbarIsVisible && toolbar && toolbar.isDisplayed && toolbar.isDisplayed()) {
|
3615
3630
|
return true;
|
3616
3631
|
}
|
3617
3632
|
|
@@ -3774,11 +3789,26 @@ MediumEditor.extensions = {};
|
|
3774
3789
|
},
|
3775
3790
|
|
3776
3791
|
performLinking: function (contenteditable) {
|
3777
|
-
|
3778
|
-
|
3779
|
-
|
3780
|
-
|
3781
|
-
|
3792
|
+
/*
|
3793
|
+
Perform linking on blockElement basis, blockElements are HTML elements with text content and without
|
3794
|
+
child element.
|
3795
|
+
|
3796
|
+
Example:
|
3797
|
+
- HTML content
|
3798
|
+
<blockquote>
|
3799
|
+
<p>link.</p>
|
3800
|
+
<p>my</p>
|
3801
|
+
</blockquote>
|
3802
|
+
|
3803
|
+
- blockElements
|
3804
|
+
[<p>link.</p>, <p>my</p>]
|
3805
|
+
|
3806
|
+
otherwise the detection can wrongly find the end of one paragraph and the beginning of another paragraph
|
3807
|
+
to constitute a link, such as a paragraph ending "link." and the next paragraph beginning with "my" is
|
3808
|
+
interpreted into "link.my" and the code tries to create a link across blockElements - which doesn't work
|
3809
|
+
and is terrible.
|
3810
|
+
(Medium deletes the spaces/returns between P tags so the textContent ends up without paragraph spacing)
|
3811
|
+
*/
|
3782
3812
|
var blockElements = MediumEditor.util.splitByBlockElements(contenteditable),
|
3783
3813
|
documentModified = false;
|
3784
3814
|
if (blockElements.length === 0) {
|
@@ -3917,6 +3947,7 @@ MediumEditor.extensions = {};
|
|
3917
3947
|
|
3918
3948
|
MediumEditor.extensions.autoLink = AutoLink;
|
3919
3949
|
}());
|
3950
|
+
|
3920
3951
|
(function () {
|
3921
3952
|
'use strict';
|
3922
3953
|
|
@@ -4090,6 +4121,191 @@ MediumEditor.extensions = {};
|
|
4090
4121
|
MediumEditor.extensions.keyboardCommands = KeyboardCommands;
|
4091
4122
|
}());
|
4092
4123
|
|
4124
|
+
(function () {
|
4125
|
+
'use strict';
|
4126
|
+
|
4127
|
+
var FontNameForm = MediumEditor.extensions.form.extend({
|
4128
|
+
|
4129
|
+
name: 'fontname',
|
4130
|
+
action: 'fontName',
|
4131
|
+
aria: 'change font name',
|
4132
|
+
contentDefault: '±', // ±
|
4133
|
+
contentFA: '<i class="fa fa-font"></i>',
|
4134
|
+
|
4135
|
+
fonts: ['', 'Arial', 'Verdana', 'Times New Roman'],
|
4136
|
+
|
4137
|
+
init: function () {
|
4138
|
+
MediumEditor.extensions.form.prototype.init.apply(this, arguments);
|
4139
|
+
},
|
4140
|
+
|
4141
|
+
// Called when the button the toolbar is clicked
|
4142
|
+
// Overrides ButtonExtension.handleClick
|
4143
|
+
handleClick: function (event) {
|
4144
|
+
event.preventDefault();
|
4145
|
+
event.stopPropagation();
|
4146
|
+
|
4147
|
+
if (!this.isDisplayed()) {
|
4148
|
+
// Get FontName of current selection (convert to string since IE returns this as number)
|
4149
|
+
var fontName = this.document.queryCommandValue('fontName') + '';
|
4150
|
+
this.showForm(fontName);
|
4151
|
+
}
|
4152
|
+
|
4153
|
+
return false;
|
4154
|
+
},
|
4155
|
+
|
4156
|
+
// Called by medium-editor to append form to the toolbar
|
4157
|
+
getForm: function () {
|
4158
|
+
if (!this.form) {
|
4159
|
+
this.form = this.createForm();
|
4160
|
+
}
|
4161
|
+
return this.form;
|
4162
|
+
},
|
4163
|
+
|
4164
|
+
// Used by medium-editor when the default toolbar is to be displayed
|
4165
|
+
isDisplayed: function () {
|
4166
|
+
return this.getForm().style.display === 'block';
|
4167
|
+
},
|
4168
|
+
|
4169
|
+
hideForm: function () {
|
4170
|
+
this.getForm().style.display = 'none';
|
4171
|
+
this.getSelect().value = '';
|
4172
|
+
},
|
4173
|
+
|
4174
|
+
showForm: function (fontName) {
|
4175
|
+
var select = this.getSelect();
|
4176
|
+
|
4177
|
+
this.base.saveSelection();
|
4178
|
+
this.hideToolbarDefaultActions();
|
4179
|
+
this.getForm().style.display = 'block';
|
4180
|
+
this.setToolbarPosition();
|
4181
|
+
|
4182
|
+
select.value = fontName || '';
|
4183
|
+
select.focus();
|
4184
|
+
},
|
4185
|
+
|
4186
|
+
// Called by core when tearing down medium-editor (destroy)
|
4187
|
+
destroy: function () {
|
4188
|
+
if (!this.form) {
|
4189
|
+
return false;
|
4190
|
+
}
|
4191
|
+
|
4192
|
+
if (this.form.parentNode) {
|
4193
|
+
this.form.parentNode.removeChild(this.form);
|
4194
|
+
}
|
4195
|
+
|
4196
|
+
delete this.form;
|
4197
|
+
},
|
4198
|
+
|
4199
|
+
// core methods
|
4200
|
+
|
4201
|
+
doFormSave: function () {
|
4202
|
+
this.base.restoreSelection();
|
4203
|
+
this.base.checkSelection();
|
4204
|
+
},
|
4205
|
+
|
4206
|
+
doFormCancel: function () {
|
4207
|
+
this.base.restoreSelection();
|
4208
|
+
this.clearFontName();
|
4209
|
+
this.base.checkSelection();
|
4210
|
+
},
|
4211
|
+
|
4212
|
+
// form creation and event handling
|
4213
|
+
createForm: function () {
|
4214
|
+
var doc = this.document,
|
4215
|
+
form = doc.createElement('div'),
|
4216
|
+
select = doc.createElement('select'),
|
4217
|
+
close = doc.createElement('a'),
|
4218
|
+
save = doc.createElement('a'),
|
4219
|
+
option;
|
4220
|
+
|
4221
|
+
// Font Name Form (div)
|
4222
|
+
form.className = 'medium-editor-toolbar-form';
|
4223
|
+
form.id = 'medium-editor-toolbar-form-fontname-' + this.getEditorId();
|
4224
|
+
|
4225
|
+
// Handle clicks on the form itself
|
4226
|
+
this.on(form, 'click', this.handleFormClick.bind(this));
|
4227
|
+
|
4228
|
+
// Add font names
|
4229
|
+
for (var i = 0; i<this.fonts.length; i++) {
|
4230
|
+
option = doc.createElement('option');
|
4231
|
+
option.innerHTML = this.fonts[i];
|
4232
|
+
option.value = this.fonts[i];
|
4233
|
+
select.appendChild(option);
|
4234
|
+
}
|
4235
|
+
|
4236
|
+
select.className = 'medium-editor-toolbar-select';
|
4237
|
+
form.appendChild(select);
|
4238
|
+
|
4239
|
+
// Handle typing in the textbox
|
4240
|
+
this.on(select, 'change', this.handleFontChange.bind(this));
|
4241
|
+
|
4242
|
+
// Add save buton
|
4243
|
+
save.setAttribute('href', '#');
|
4244
|
+
save.className = 'medium-editor-toobar-save';
|
4245
|
+
save.innerHTML = this.getEditorOption('buttonLabels') === 'fontawesome' ?
|
4246
|
+
'<i class="fa fa-check"></i>' :
|
4247
|
+
'✓';
|
4248
|
+
form.appendChild(save);
|
4249
|
+
|
4250
|
+
// Handle save button clicks (capture)
|
4251
|
+
this.on(save, 'click', this.handleSaveClick.bind(this), true);
|
4252
|
+
|
4253
|
+
// Add close button
|
4254
|
+
close.setAttribute('href', '#');
|
4255
|
+
close.className = 'medium-editor-toobar-close';
|
4256
|
+
close.innerHTML = this.getEditorOption('buttonLabels') === 'fontawesome' ?
|
4257
|
+
'<i class="fa fa-times"></i>' :
|
4258
|
+
'×';
|
4259
|
+
form.appendChild(close);
|
4260
|
+
|
4261
|
+
// Handle close button clicks
|
4262
|
+
this.on(close, 'click', this.handleCloseClick.bind(this));
|
4263
|
+
|
4264
|
+
return form;
|
4265
|
+
},
|
4266
|
+
|
4267
|
+
getSelect: function () {
|
4268
|
+
return this.getForm().querySelector('select.medium-editor-toolbar-select');
|
4269
|
+
},
|
4270
|
+
|
4271
|
+
clearFontName: function () {
|
4272
|
+
MediumEditor.selection.getSelectedElements(this.document).forEach(function (el) {
|
4273
|
+
if (el.nodeName.toLowerCase() === 'font' && el.hasAttribute('face')) {
|
4274
|
+
el.removeAttribute('face');
|
4275
|
+
}
|
4276
|
+
});
|
4277
|
+
},
|
4278
|
+
|
4279
|
+
handleFontChange: function () {
|
4280
|
+
var font = this.getSelect().value;
|
4281
|
+
if (font === '') {
|
4282
|
+
this.clearFontName();
|
4283
|
+
} else {
|
4284
|
+
this.execAction('fontName', { name: font });
|
4285
|
+
}
|
4286
|
+
},
|
4287
|
+
|
4288
|
+
handleFormClick: function (event) {
|
4289
|
+
// make sure not to hide form when clicking inside the form
|
4290
|
+
event.stopPropagation();
|
4291
|
+
},
|
4292
|
+
|
4293
|
+
handleSaveClick: function (event) {
|
4294
|
+
// Clicking Save -> create the font size
|
4295
|
+
event.preventDefault();
|
4296
|
+
this.doFormSave();
|
4297
|
+
},
|
4298
|
+
|
4299
|
+
handleCloseClick: function (event) {
|
4300
|
+
// Click Close -> close the form
|
4301
|
+
event.preventDefault();
|
4302
|
+
this.doFormCancel();
|
4303
|
+
}
|
4304
|
+
});
|
4305
|
+
|
4306
|
+
MediumEditor.extensions.fontName = FontNameForm;
|
4307
|
+
}());
|
4308
|
+
|
4093
4309
|
(function () {
|
4094
4310
|
'use strict';
|
4095
4311
|
|
@@ -5354,15 +5570,26 @@ MediumEditor.extensions = {};
|
|
5354
5570
|
|
5355
5571
|
// Event handlers that shouldn't be exposed externally
|
5356
5572
|
|
5573
|
+
function handleDisableExtraSpaces(event) {
|
5574
|
+
var node = MediumEditor.selection.getSelectionStart(this.options.ownerDocument),
|
5575
|
+
textContent = node.textContent,
|
5576
|
+
caretPositions = MediumEditor.selection.getCaretOffsets(node);
|
5577
|
+
|
5578
|
+
if ((textContent[caretPositions.left - 1] === undefined) || (textContent[caretPositions.left - 1] === ' ') || (textContent[caretPositions.left] === undefined)) {
|
5579
|
+
event.preventDefault();
|
5580
|
+
}
|
5581
|
+
}
|
5582
|
+
|
5357
5583
|
function handleDisabledEnterKeydown(event, element) {
|
5358
5584
|
if (this.options.disableReturn || element.getAttribute('data-disable-return')) {
|
5359
5585
|
event.preventDefault();
|
5360
5586
|
} else if (this.options.disableDoubleReturn || element.getAttribute('data-disable-double-return')) {
|
5361
5587
|
var node = MediumEditor.selection.getSelectionStart(this.options.ownerDocument);
|
5362
5588
|
|
5363
|
-
// if current text selection is empty OR previous sibling text is empty
|
5364
|
-
if ((node && node.textContent.trim() === '') ||
|
5365
|
-
(node.previousElementSibling && node.previousElementSibling.
|
5589
|
+
// if current text selection is empty OR previous sibling text is empty OR it is not a list
|
5590
|
+
if ((node && node.textContent.trim() === '' && node.nodeName.toLowerCase() !== 'li') ||
|
5591
|
+
(node.previousElementSibling && node.previousElementSibling.nodeName.toLowerCase() !== 'br' &&
|
5592
|
+
node.previousElementSibling.textContent.trim() === '')) {
|
5366
5593
|
event.preventDefault();
|
5367
5594
|
}
|
5368
5595
|
}
|
@@ -5702,6 +5929,11 @@ MediumEditor.extensions = {};
|
|
5702
5929
|
this.subscribe('editableKeydownDelete', handleBlockDeleteKeydowns.bind(this));
|
5703
5930
|
this.subscribe('editableKeydownEnter', handleBlockDeleteKeydowns.bind(this));
|
5704
5931
|
|
5932
|
+
// Bind double space event
|
5933
|
+
if (this.options.disableExtraSpaces) {
|
5934
|
+
this.subscribe('editableKeydownSpace', handleDisableExtraSpaces.bind(this));
|
5935
|
+
}
|
5936
|
+
|
5705
5937
|
// disabling return or double return
|
5706
5938
|
if (this.options.disableReturn || this.options.disableDoubleReturn) {
|
5707
5939
|
this.subscribe('editableKeydownEnter', handleDisabledEnterKeydown.bind(this));
|
@@ -5828,6 +6060,10 @@ MediumEditor.extensions = {};
|
|
5828
6060
|
return this.options.ownerDocument.execCommand('fontSize', false, opts.size);
|
5829
6061
|
}
|
5830
6062
|
|
6063
|
+
if (action === 'fontName') {
|
6064
|
+
return this.options.ownerDocument.execCommand('fontName', false, opts.name);
|
6065
|
+
}
|
6066
|
+
|
5831
6067
|
if (action === 'createLink') {
|
5832
6068
|
return this.createLink(opts);
|
5833
6069
|
}
|
@@ -6057,6 +6293,9 @@ MediumEditor.extensions = {};
|
|
6057
6293
|
case 'fileDragging':
|
6058
6294
|
extension = new MediumEditor.extensions.fileDragging(opts);
|
6059
6295
|
break;
|
6296
|
+
case 'fontname':
|
6297
|
+
extension = new MediumEditor.extensions.fontName(this.options.fontName);
|
6298
|
+
break;
|
6060
6299
|
case 'fontsize':
|
6061
6300
|
extension = new MediumEditor.extensions.fontSize(opts);
|
6062
6301
|
break;
|
@@ -6410,6 +6649,7 @@ MediumEditor.extensions = {};
|
|
6410
6649
|
delay: 0,
|
6411
6650
|
disableReturn: false,
|
6412
6651
|
disableDoubleReturn: false,
|
6652
|
+
disableExtraSpaces: false,
|
6413
6653
|
disableEditing: false,
|
6414
6654
|
autoLink: false,
|
6415
6655
|
elementsContainer: false,
|
@@ -6438,7 +6678,7 @@ MediumEditor.parseVersionString = function (release) {
|
|
6438
6678
|
|
6439
6679
|
MediumEditor.version = MediumEditor.parseVersionString.call(this, ({
|
6440
6680
|
// grunt-bump looks for this:
|
6441
|
-
'version': '5.
|
6681
|
+
'version': '5.10.0'
|
6442
6682
|
}).version);
|
6443
6683
|
|
6444
6684
|
return MediumEditor;
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scrivito_editors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.1.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scrivito
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jquery-ui-rails
|
@@ -44,28 +44,28 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.0.
|
47
|
+
version: 1.1.0.rc1
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.0.
|
54
|
+
version: 1.1.0.rc1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: scrivito_sdk
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.0.
|
61
|
+
version: 1.1.0.rc1
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.0.
|
68
|
+
version: 1.1.0.rc1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: coffee-rails
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|