comparison src/test/tiny.html @ 35:1ce75c5ab0f7

minor
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 03 Aug 2022 14:13:12 -0600
parents 72a1b77b4548
children 3354d4ac89f8
comparison
equal deleted inserted replaced
34:c8d47981c74f 35:1ce75c5ab0f7
1 <!doctype html> 1 <!doctype html>
2 <html> 2 <html>
3 <head> 3 <head>
4 <meta name="viewport" content="width=device-width, initial-scale=1"> 4 <meta name="viewport" content="width=device-width, initial-scale=1">
5 <script src="/site.js"></script>
5 <script src="http://tinymce.luan.software/tinymce.min.js" xreferrerpolicy="origin"></script> 6 <script src="http://tinymce.luan.software/tinymce.min.js" xreferrerpolicy="origin"></script>
6 <style> 7 <style>
8 input[type="file"] {
9 display: none;
10 }
7 </style> 11 </style>
8 <script> 12 <script>
9 function videoIframe(url) { 13 function videoIframe(url) {
10 return '<iframe data-video="'+url+'" width="560" height="315" frameborder="0" allowfullscreen src="'+url+'"></iframe>'; 14 return '<iframe data-video="'+url+'" width="560" height="315" frameborder="0" allowfullscreen src="'+url+'"></iframe>';
11 } 15 }
91 if(html) return html; 95 if(html) return html;
92 } 96 }
93 return '<a data-video="'+url+'" href="'+url+'">'+url+'</a>'; 97 return '<a data-video="'+url+'" href="'+url+'">'+url+'</a>';
94 } 98 }
95 99
100 function uploaded(input,url,filename) {
101 input.parentNode.parentNode.querySelector('input[type="url"]').value = url;
102 }
103
104 let imageFileHtml = '<input type=file accept="image/*" onchange="upload(this,uploaded)">';
105 imageFileHtml += '<button class="tox-button tox-button--secondary" onclick="fileButtonClick(this)">Upload Image</button>';
106
107 let videoFileHtml = '<input type=file accept="video/*" onchange="upload(this,uploaded)">';
108 videoFileHtml += '<button class="tox-button tox-button--secondary" onclick="fileButtonClick(this)">Upload Video</button>';
96 109
97 function tinymceSetup(editor) { 110 function tinymceSetup(editor) {
111
112 editor.ui.registry.addButton('insertLink', {
113 icon: 'link',
114 tooltip: 'Insert link',
115 onAction: function(api) {
116 editor.windowManager.open({
117 title: 'Insert Link',
118 body: {
119 type: 'panel',
120 items: [
121 {
122 type: 'urlinput',
123 name: 'src',
124 label: 'URL'
125 },
126 {
127 type: 'input',
128 name: 'text',
129 label: 'Text to display'
130 },
131 ]
132 },
133 buttons: [
134 {
135 type: 'cancel',
136 text: 'Cancel'
137 },
138 {
139 type: 'submit',
140 text: 'Save',
141 buttonType: 'primary'
142 }
143 ],
144 onSubmit: function(dialogApi) {
145 let data = dialogApi.getData();
146 let src = data.src.value;
147 if(!src) return;
148 src = tinymce.DOM.encode(src);
149 let text = data.text;
150 let html = '<a href="' + src + '">' + text + '</a>';
151 dialogApi.close();
152 editor.insertContent(html);
153 }
154 });
155 },
156 });
98 157
99 editor.ui.registry.addButton('insertImage', { 158 editor.ui.registry.addButton('insertImage', {
100 icon: 'image', 159 icon: 'image',
101 tooltip: 'Insert image', 160 tooltip: 'Insert image',
102 onAction: function(api) { 161 onAction: function(api) {
109 type: 'urlinput', 168 type: 'urlinput',
110 name: 'src', 169 name: 'src',
111 filetype: 'image', 170 filetype: 'image',
112 label: 'Source URL' 171 label: 'Source URL'
113 }, 172 },
173 {
174 type: 'htmlpanel',
175 html: imageFileHtml
176 },
114 ] 177 ]
115 }, 178 },
116 buttons: [ 179 buttons: [
117 { 180 {
118 type: 'cancel', 181 type: 'cancel',
123 text: 'Save', 186 text: 'Save',
124 buttonType: 'primary' 187 buttonType: 'primary'
125 } 188 }
126 ], 189 ],
127 onSubmit: function(dialogApi) { 190 onSubmit: function(dialogApi) {
128 let src = dialogApi.getData('src').src.value; 191 let src = dialogApi.getData().src.value;
129 if(!src) return; 192 if(!src) return;
130 src = tinymce.DOM.encode(src); 193 src = tinymce.DOM.encode(src);
131 let html = '<img src="' + src + '">'; 194 let html = '<img src="' + src + '">';
132 dialogApi.close(); 195 dialogApi.close();
133 editor.insertContent(html); 196 editor.insertContent(html);
146 type: 'panel', 209 type: 'panel',
147 items: [ 210 items: [
148 { 211 {
149 type: 'urlinput', 212 type: 'urlinput',
150 name: 'src', 213 name: 'src',
151 filetype: 'image', 214 filetype: 'media',
152 label: 'Source URL' 215 label: 'Source URL'
216 },
217 {
218 type: 'htmlpanel',
219 html: videoFileHtml
153 }, 220 },
154 ] 221 ]
155 }, 222 },
156 buttons: [ 223 buttons: [
157 { 224 {
163 text: 'Save', 230 text: 'Save',
164 buttonType: 'primary' 231 buttonType: 'primary'
165 } 232 }
166 ], 233 ],
167 onSubmit: function(dialogApi) { 234 onSubmit: function(dialogApi) {
168 let src = dialogApi.getData('src').src.value; 235 let src = dialogApi.getData().src.value;
169 if(!src) return; 236 if(!src) return;
170 let html = videoUrlToHtml(src); 237 let html = videoUrlToHtml(src);
171 //alert(html); 238 //alert(html);
172 dialogApi.close(); 239 dialogApi.close();
173 editor.insertContent(html); 240 editor.insertContent(html);
209 selector: 'textarea', 276 selector: 'textarea',
210 setup: tinymceSetup, 277 setup: tinymceSetup,
211 //menubar: false, 278 //menubar: false,
212 statusbar: false, 279 statusbar: false,
213 plugins: ['link', 'image', 'media', 'lists', 'code', 'autoresize'], 280 plugins: ['link', 'image', 'media', 'lists', 'code', 'autoresize'],
214 toolbar: 'link insertImage insertVideo | styleCode bold italic underline strikethrough superscript styleText | blockquote numlist bullist', 281 toolbar: 'link insertLink insertImage insertVideo | styleCode bold italic underline strikethrough superscript styleText | blockquote numlist bullist',
215 autoresize_bottom_margin: 0, 282 autoresize_bottom_margin: 0,
216 link_target_list: false, 283 link_target_list: false,
217 link_title: false, 284 link_title: false,
218 object_resizing: false, 285 object_resizing: false,
219 contextmenu: false, 286 contextmenu: false,
231 console.log(tinymce.activeEditor.getContent()); 298 console.log(tinymce.activeEditor.getContent());
232 } 299 }
233 </script> 300 </script>
234 </head> 301 </head>
235 <body> 302 <body>
236 <p><a href="https://www.tiny.cloud/">TinyMCE</a></p> 303 <p>
304 <a href="https://www.tiny.cloud/">TinyMCE</a>
305 <a href="https://github.com/tinymce/tinymce">source</a>
306 </p>
237 <textarea></textarea> 307 <textarea></textarea>
238 <p><button onclick="log()">log</button></p> 308 <p><button onclick="log()">log</button></p>
239 </body> 309 </body>
240 </html> 310 </html>