-
Notifications
You must be signed in to change notification settings - Fork 80
/
Copy pathTinyMCE_ssembed.js
1 lines (1 loc) · 10 KB
/
TinyMCE_ssembed.js
1
!function(){"use strict";var e={4333:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.Component=void 0;var r=f(n(5815)),o=p(n(1594)),i=n(9367),s=n(9040),a=f(n(8737)),d=p(n(2811)),l=f(n(6935)),c=n(5125);function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(u=function(e){return e?n:t})(e)}function p(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=u(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&{}.hasOwnProperty.call(e,i)){var s=o?Object.getOwnPropertyDescriptor(e,i):null;s&&(s.get||s.set)?Object.defineProperty(r,i,s):r[i]=e[i]}return r.default=e,n&&n.set(e,r),r}function f(e){return e&&e.__esModule?e:{default:e}}class m extends o.Component{constructor(e){super(e),this.handleSubmit=this.handleSubmit.bind(this)}componentDidMount(){this.setOverrides(this.props)}componentDidUpdate(e){this.props.isOpen&&!e.isOpen&&this.setOverrides(this.props)}componentWillUnmount(){this.clearOverrides()}setOverrides(e){if(this.props.schemaUrl!==e.schemaUrl&&this.clearOverrides(),e.schemaUrl){const t=Object.assign({},e.fileAttributes);delete t.ID;const n={fields:Object.entries(t).map((e=>{const[t,n]=e;return{name:t,value:n}}))};this.props.actions.schema.setSchemaStateOverrides(e.schemaUrl,n)}}getModalProps(){const e=Object.assign({onSubmit:this.handleSubmit,onLoadingError:this.handleLoadingError,showErrorMessage:!0,responseClassBad:"alert alert-danger",identifier:"AssetAdmin.InsertEmbedModal"},this.props,{className:`insert-embed-modal ${this.props.className}`,size:"lg",onClosed:this.props.onClosed,title:this.props.targetUrl?r.default._t("AssetAdmin.EditTitle","Media from the web"):r.default._t("AssetAdmin.CreateTitle","Insert new media from the web")});return delete e.sectionConfig,delete e.onInsert,delete e.fileAttributes,e}clearOverrides(){this.props.actions.schema.setSchemaStateOverrides(this.props.schemaUrl,null)}handleLoadingError(e){"function"==typeof this.props.onLoadingError&&this.props.onLoadingError(e)}handleSubmit(e,t){switch(t){case"action_addmedia":this.props.onCreate(e);break;case"action_insertmedia":this.props.onInsert(e);break;case"action_cancel":this.props.onClosed()}return Promise.resolve()}render(){const{FormBuilderModalComponent:e}=this.props;return o.default.createElement(e,this.getModalProps())}}t.Component=m,m.propTypes={sectionConfig:l.default.shape({url:l.default.string,form:l.default.object}),isOpen:l.default.bool,onInsert:l.default.func.isRequired,onCreate:l.default.func.isRequired,fileAttributes:l.default.shape({Url:l.default.string,CaptionText:l.default.string,PreviewUrl:l.default.string,Placement:l.default.string,Width:l.default.number,Height:l.default.number}),onClosed:l.default.func.isRequired,className:l.default.string,actions:l.default.object,schemaUrl:l.default.string.isRequired,targetUrl:l.default.string,onLoadingError:l.default.func,FormBuilderModalComponent:l.default.oneOfType([l.default.object,l.default.func])},m.defaultProps={className:"",fileAttributes:{},FormBuilderModalComponent:a.default};t.default=(0,s.connect)((function(e,t){const n=e.config.sections.find((e=>"SilverStripe\\AssetAdmin\\Controller\\AssetAdmin"===e.name)),r=t.fileAttributes?t.fileAttributes.Url:"",o=n.form.remoteEditForm.schemaUrl,i=r&&(0,c.joinUrlPaths)(o,`/?embedurl=${encodeURIComponent(r)}`),s=n.form.remoteCreateForm.schemaUrl;return{sectionConfig:n,schemaUrl:i||s,targetUrl:r}}),(function(e){return{actions:{schema:(0,i.bindActionCreators)(d,e)}}}))(m)},8737:function(e){e.exports=FormBuilderModal},5207:function(e){e.exports=Injector},6935:function(e){e.exports=PropTypes},1594:function(e){e.exports=React},5145:function(e){e.exports=ReactDomClient},9040:function(e){e.exports=ReactRedux},9367:function(e){e.exports=Redux},2811:function(e){e.exports=SchemaActions},2121:function(e){e.exports=ShortcodeSerialiser},5815:function(e){e.exports=i18n},1669:function(e){e.exports=jQuery},5125:function(e){e.exports=ssUrlLib}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}var r=u(n(1669)),o=u(n(1594)),i=n(5145),s=n(5207),a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=c(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&{}.hasOwnProperty.call(e,i)){var s=o?Object.getOwnPropertyDescriptor(e,i):null;s&&(s.get||s.set)?Object.defineProperty(r,i,s):r[i]=e[i]}return r.default=e,n&&n.set(e,r),r}(n(2121)),d=u(n(4333)),l=u(n(5815));function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(c=function(e){return e?n:t})(e)}function u(e){return e&&e.__esModule?e:{default:e}}const p=(0,s.loadComponent)(d.default),f='div[data-shortcode="embed"]';(()=>{const e=e=>{const t=l.default._t("AssetAdmin.INSERT_VIA_URL","Insert media via URL"),n=l.default._t("AssetAdmin.EDIT_MEDIA","Edit media"),o=l.default._t("AssetAdmin.DELETE_MEDIA","Delete media"),i=l.default._t("AssetAdmin.MEDIA","Media");return e.addCommand("ssembed",(()=>{(0,r.default)(`#${e.id}`).entwine("ss").openEmbedDialog()})),e.addCommand("ssembed-delete",(()=>{const t=e.selection.getNode();e.dom.is(t,f)?t.remove():e.dom.is(t.parentNode,f)?t.parentNode.remove():console.error({error:"Unexpected selection - expected embed",selectedNode:t})})),e.ui.registry.addButton("ssembed",{tooltip:t,icon:"embed",onAction:()=>e.execCommand("ssembed"),stateSelector:f}),e.ui.registry.addMenuItem("ssembed",{text:i,icon:"embed",onAction:()=>e.execCommand("ssembed")}),e.ui.registry.addButton("ssembededit",{tooltip:n,icon:"edit-block",onAction:()=>e.execCommand("ssembed")}),e.ui.registry.addButton("ssembeddelete",{tooltip:o,icon:"remove",onAction:()=>e.execCommand("ssembed-delete")}),e.ui.registry.addContextToolbar("ssembed",{predicate:t=>e.dom.is(t,f),position:"node",scope:"node",items:"alignleft aligncenter alignright | ssembededit ssembeddelete"}),e.on("BeforeExecCommand",(t=>{const n=t.command,r=t.ui,o=t.value;"mceMedia"===n&&(t.preventDefault(),e.execCommand("ssembed",r,o))})),e.on("GetContent",(e=>{const t=(0,r.default)(`<div>${e.content}</div>`);t.find(f).each((function(){const e=(0,r.default)(this),t=e.find("img.placeholder");if(0===t.length)return e.removeAttr("data-url"),void e.removeAttr("data-shortcode");const n=e.find(".caption").text(),o=parseInt(t.attr("width"),10),i=parseInt(t.attr("height"),10),s=e.data("url"),d=(0,a.sanitiseShortCodeProperties)({url:s,thumbnail:t.prop("src"),class:e.prop("class"),width:isNaN(o)?null:o,height:isNaN(i)?null:i,caption:n}),l=a.default.serialise({name:"embed",properties:d,wrapped:!0,content:d.url});e.replaceWith(l)})),e.content=t.html()})),e.on("BeforeSetContent",(e=>{let t=e.content,n=a.default.match("embed",!0,t);for(;n;){const e=n.properties,o=(0,r.default)("<div/>").attr("data-url",e.url||n.content).attr("data-shortcode","embed").addClass(e.class).addClass("ss-htmleditorfield-file embed"),i=(0,r.default)("<img />").attr("src",e.thumbnail).addClass("placeholder");if(e.width&&i.attr("width",e.width),e.height&&i.attr("height",e.height),o.append(i),e.caption){const t=(0,r.default)("<p />").addClass("caption").text(e.caption);o.append(t)}t=t.replace(n.original,(0,r.default)("<div/>").append(o).html()),n=a.default.match("embed",!0,t)}e.content=t})),{getMetadata(){return{name:"Silverstripe Embed",url:"https://docs.silverstripe.org/en/4/developer_guides/forms/field_types/htmleditorfield"}}}};tinymce.PluginManager.add("ssembed",(t=>e(t)))})(),r.default.entwine("ss",(e=>{e(".js-injector-boot #insert-embed-react__dialog-wrapper").entwine({Element:null,Data:{},ReactRoot:null,onunmatch(){this._clearModal()},_clearModal(){const e=this.getReactRoot();e&&(e.unmount(),this.setReactRoot(null))},open(){this._renderModal(!0)},close(){this.setData({}),this._renderModal(!1)},_renderModal(e){var t=this;const n=this.getOriginalAttributes();let r=this.getReactRoot();r||(r=(0,i.createRoot)(this[0])),r.render(o.default.createElement(p,{isOpen:e,onCreate:function(){return t._handleCreate(...arguments)},onInsert:function(){return t._handleInsert(...arguments)},onClosed:()=>this.close(),onLoadingError:function(){return t._handleLoadingError(...arguments)},bodyClassName:"modal__dialog",className:"insert-embed-react__dialog-wrapper",fileAttributes:n})),this.setReactRoot(r)},_handleLoadingError(){this.setData({}),this.open()},_handleInsert(e){const t=this.getData();this.setData(Object.assign({Url:t.Url},e)),this.insertRemote(),this.close()},_handleCreate(e){this.setData(Object.assign({},this.getData(),e)),this.open()},getOriginalAttributes(){const t=this.getData(),n=this.getElement();if(!n)return t;const r=e(n.getEditor().getSelectedNode());if(!r.length)return t;const o=r.closest(f).add(r.filter(f));if(!o.length)return t;const i=o.find("img.placeholder");if(0===i.length)return t;const s=o.find(".caption").text(),a=parseInt(i.width(),10),d=parseInt(i.height(),10);return{Url:o.data("url")||t.Url,CaptionText:s,PreviewUrl:i.attr("src"),Width:isNaN(a)?null:a,Height:isNaN(d)?null:d,Placement:this.findPosition(o.prop("class"))}},findPosition(e){if("string"!=typeof e)return"";const t=e.split(" ");return["leftAlone","center","rightAlone","left","right"].find((e=>t.indexOf(e)>-1))},insertRemote(){const t=this.getElement();if(!t)return!1;const n=t.getEditor();if(!n)return!1;const o=this.getData(),i=(0,r.default)("<div/>").attr("data-url",o.Url).attr("data-shortcode","embed").addClass(o.Placement).addClass("ss-htmleditorfield-file embed"),s=(0,r.default)("<img />").attr("src",o.PreviewUrl).addClass("placeholder");if(o.Width&&s.attr("width",o.Width),o.Height&&s.attr("height",o.Height),i.append(s),o.CaptionText){const e=(0,r.default)("<p />").addClass("caption").text(o.CaptionText);i.append(e)}const a=e(n.getSelectedNode());let d=e(null);return a.length&&(d=a.filter(f),0===d.length&&(d=a.closest(f)),0===d.length&&(d=a.filter("img.placeholder"))),d.length?d.replaceWith(i):(n.repaint(),n.insertContent(e("<div />").append(i.clone()).html(),{skip_undo:1})),n.addUndo(),n.repaint(),!0}})}))}();