tinymce.PluginManager.add("ccm-cms-insertimage", function(editor, url) { console.log("Adding plugin ccm-cms-insertimage..."); editor.addButton( "insertimage", { icon: "image", onclick: function() { openDialog(editor); }, tooltip: "Insert image", }, ); editor.addMenuItem( "insert-image", { text: "Insert image", context: "tools", onclick: function() { openDialog(editor); }, }, ); }); function openDialog(editor) { console.log("Opening dialog"); const selectedImage = { selectedUuid: undefined, get imageUuid() { this.selectedUuid; }, set imageUuid(value) { this.selectedUuid = value; console.log(`Set imageUuid to ${this.imageUuid}`); }, }; editor.windowManager.open({ body: [ { items: [ { direction: "row", items: [ { disabled: true, label: "Image", name: "imageUuid", type: "textbox", value: "foobar", }, { name: "browse", onclick: function() { openBrowseDialog(editor, selectedImage); }, text: "Browse", type: "button", }, ], label: "Image", layout: "flex", type: "container", }, { label: "Caption", name: "caption", type: "textbox", }, { label: "Width", name: "width", size: 4, type: "textbox", }, { label: "Height", name: "height", size: 4, type: "textbox", }, { name: "lightbox", text: "Lightbox?", type: "Checkbox", }, { border: "1 1 1 1", name: "imagePanel", type: "container", }, ], minHeight: 200, minWidth: 400, name: "insertimage_dialog_container", onPostRender: function() { // console.log(`imageUuid = ${this.find("#imageUuid").value()}`); const imageUuid = this.find("#imageUuid").value(); console.log(`imageUuid = ${imageUuid}`); // this.find("#imagePanel").innerHTML = `
${imageUuid}
`; this.find("#imagePanel").append([ { html: `
${imageUuid}
`, // text: `${imageUuid}`, // type: "label", type: "container", } ]); console.log(this.find("#imagePanel")); }, type: "form", }, ], onsubmit: function(event) { console.log(selectedImage.imageUuid); }, title: "Insert image", }); console.log("Dialog opened."); } function openBrowseDialog(editor, selectedImage) { editor.windowManager.open({ body: [ { // items: [ // { // html: '', // name: "imageList", // onPostRender: function() { // console.log(`contentSection: ${editor.getParam("contentsection")}`); // console.log(`contextPrefix: ${editor.getParam("contextprefix")}`); // // const contextPrefix = editor.getParam("contextprefix"); // const contentSection = editor.getParam("contentsection"); // // // // }, // type: "container", // } // ], layout: "flow", minHeight: 400, minWidth: 600, onClick: function(event) { console.log("Click in Image Container..."); console.log(`...on image ${event.target.getAttribute("data-uuid")}`); selectedImage.imageUuid = event.target.getAttribute("data-uuid"); editor.windowManager.close(); }, onPostRender: function() { console.log(`contentSection: ${editor.getParam("contentsection")}`); console.log(`contextPrefix: ${editor.getParam("contextprefix")}`); const contextPrefix = editor.getParam("contextprefix"); const contentSection = editor.getParam("contentsection"); // console.log(`this.find(#imageList) = ${JSON.stringify(this.find("#imageList"))}`); // this.find("#imageList").innerHtml(""); // const Throbber = tinymce.ui.Factory.get("Throbber"); // this.append(new tinymce.ui.Throbber(this.getContainerElm())); console.log(`containerElm = ${this.getEl()}`); const throbber = new tinymce.ui.Throbber(this.getEl()); throbber.show(); // const throbber = tinymce.ui.Factory.create({ // elm: this, // type: "Throbber"}); // this.append(throbber); const url = `${contextPrefix}/content-sections` + `${contentSection}assets/` + `?type=org.librecms.assets.Image`; const requestInit = { credentials: "same-origin", method: "GET", }; fetch(url, requestInit) .then((response) => { if (response.ok) { response .json() .then((data) => { // console.log(`imageList = ${this.find("#imageList")}`); // console.log(JSON.stringify(this.find("#imageList"))); // let imageList = `Found ${data.length} images`; // imageList = imageList + ""; const html = `
Found ${data.length} images
\
\ ${images.join("\n")}\
`; this.innerHtml(html); throbber.hide(); // for(const property of dialog.find("#imageList").getOwnPropertyNames()) { // console.log(`imageList.${propery}`); // } // console.log(`imageList.getEl = ${dialog.find("#imageList").getEl}`); // const imageList = dialog.find("#imageList").getEl(); // // for(const image of data) { // console.log(image.name); // imageList.append({ // html: `
  • ${image.name}
  • `, // }); // } }) .catch((error) => { throbber.hide(); editor.notificationManager.open({ text: `Failed to retrieve available images: ` + ` ${error}`, type: "error", }); }); } else { throbber.hide(); editor.notificationManager.open({ text: `Failed to retrieve images: ` + `Status: ${response.status} ` + `${response.statusText}` }); } }) .catch((error) => { throbber.hide(); editor.notificationManager.open({ text: `Failed to retrieve available images: ` + ` ${error}`, type: "error", }); }); }, style: "overflow: auto", type: "container", } ], minWidth: 600, minHeight: 400, // onSubmit: function() { // selectedImage.imageUuid = "0000-0000-0000-0000"; // }, title: "Select image", }); }