Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/pat/tinymce/js/links.js
Original file line number Diff line number Diff line change
Expand Up @@ -899,10 +899,10 @@ export default Base.extend({
self.linkTypes[self.linkType].load(self.imgElm);

// set scale selection in link modal:
var pictureVariant = self.dom.getAttrib(
self.imgElm,
"data-picturevariant",
);
var pictureVariant =
self.dom.getAttrib(self.imgElm, "data-picturevariant") ||
// fallback for backwards compatibility
self.dom.getAttrib(self.imgElm, "data-scale");
self.$scale.val(pictureVariant);

// var selectedImageUid = self.dom.getAttrib(
Expand Down
8 changes: 5 additions & 3 deletions src/pat/tinymce/tinymce--implementation.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,17 @@ const log = logger.getLogger("tinymce--implementation");
let LinkModal = null;

export default class TinyMCE {
linkModal;
imageModal;

constructor(el, options) {
this.el = el;
this.$el = $(el);
this.options = options;
}
addLinkClicked() {
var self = this;
if (self.linkModal === null) {
if (!self.linkModal) {
var $el = $("<div/>").insertAfter(self.$el);
var linkTypes = ["internal", "upload", "external", "email", "anchor"];
if (!self.options.upload) {
Expand All @@ -38,7 +41,7 @@ export default class TinyMCE {
}
addImageClicked() {
var self = this;
if (self.imageModal === null) {
if (!self.imageModal) {
var linkTypes = ["image", "uploadImage", "externalImage"];
if (!self.options.upload) {
linkTypes.splice(1, 1);
Expand Down Expand Up @@ -221,7 +224,6 @@ export default class TinyMCE {
LinkModal = (await import("./js/links")).default;

var self = this;
self.linkModal = self.imageModal = self.uploadModal = self.pasteModal = null;
// tiny needs an id in order to initialize. Creat it if not set.
var id = utils.setId(self.$el);

Expand Down
55 changes: 51 additions & 4 deletions src/pat/tinymce/tinymce.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,19 @@ import $ from "jquery";
import sinon from "sinon";
import registry from "@patternslib/patternslib/src/core/registry";
import utils from "@patternslib/patternslib/src/core/utils";
import events from "@patternslib/patternslib/src/core/events";

$.fx.off = true;

var createTinymce = async function (options) {
return await registry.patterns.tinymce.init(
$('<textarea class="pat-tinymce"></textarea>').appendTo("body"),
options || {},
);
document.body.innerHTML = `
<textarea class="pat-tinymce"></textarea>
`;
const textarea = document.querySelector("textarea");
const instance = new TinyMCE(textarea, options || {});
await events.await_pattern_init(instance);

return instance;
};

const registry_scan = async () => {
Expand Down Expand Up @@ -249,6 +254,48 @@ describe("TinyMCE", function () {
);
});

it.skip("When parsing images from old Plone installations without picture-variants, TinyMCE‌'s image dialog falls back to data-scale", async function () {
// TinyMCE contents without a picture variant but a data-scale, as it
// was used in Plone 5.
const pat_instance = await createTinymce({
prependToScalePart: "/@@images/image/",
imageScales: '[{"title": "Preview", "value": "preview"}]',
pictureVariants: {
preview: {
title: "Preview",
sourceset: [
{
scale: "preview",
media: "",
},
],
},
},
});

// Await the TinyMCE initialization.
await utils.timeout(0);
const tiny = pat_instance.instance.tiny;

tiny.setContent(`
<img
src="resolveuid/foobar/@@images/image/preview"
data-scale="preview"
alt="This is an alt"
title="This is a title"
data-caption="This is a caption"
/>
`);

// Select the image before opening the image dialog.
const img = tiny.dom.getRoot().getElementsByTagName("img")[0];
tiny.selection.select(img);

pat_instance.instance.addImageClicked();

// TODO: Finalize tests.
});

it("test inline tinyMCE", async function () {
document.body.innerHTML = `
<textarea class="pat-tinymce" data-pat-tinymce='{"inline": true}'></textarea>
Expand Down