Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/aimogen-pro/scripts/classic-editor.js

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
1 -
1 + "use strict";
2 + function aiomatic_uniq_fast(a)
3 + {
4 + var seen = {};
5 + var out = [];
6 + var len = a.length;
7 + var j = 0;
8 + for(var i = 0; i < len; i++) {
9 + var item = a[i];
10 + var jsit = JSON.stringify(item);
11 + if(seen[jsit] !== 1) {
12 + seen[jsit] = 1;
13 + out[j++] = item;
14 + }
15 + }
16 + return out;
17 + }
18 + (function() {
19 + let menu = [];
20 + tinymce.create("tinymce.plugins.aiomatic_editor", {
21 + init : function(ed, url) {
22 + if ("object" == typeof aiomatic && "object" == typeof aiomatic.prompts)
23 + {
24 + for (let operation in aiomatic.prompts)
25 + {
26 + let prompt = aiomatic.prompts[operation];
27 + let icon = 'text';
28 + let thumb = 'toc';
29 + if(prompt[1] == 'image')
30 + {
31 + icon = 'format-image';
32 + thumb = 'image';
33 + }
34 + menu.push({
35 + text: operation,
36 + classes: 'aiomatic-classic-button',
37 + icon: thumb,
38 + onclick: async function () {
39 + ed = tinymce.activeEditor;
40 + let selectedText = ed.selection.getContent({format: 'text'});
41 + let send_prompt = prompt[0].replace('%%selected_text%%', selectedText);
42 + if(send_prompt.includes('%%'))
43 + {
44 + var pid = document.getElementById('post_ID');
45 + if(pid !== undefined && pid !== null && pid != '')
46 + {
47 + var postId = pid.value;
48 + const ajaxurl = aiomatic.ajaxurl;
49 + const nonce = aiomatic.nonce;
50 + const xdata = new FormData();
51 + xdata.append( 'postId', postId );
52 + xdata.append( 'nonce', nonce );
53 + xdata.append( 'send_prompt', send_prompt );
54 + xdata.append( 'action', 'aiomatic_shortcode_replacer' );
55 + const response = await fetch(ajaxurl, {
56 + method: 'POST',
57 + body: xdata
58 + }).catch(async error => {
59 + console.log('An exception occurred: ' + error.text());
60 + })
61 +
62 + if (!response.ok)
63 + {
64 + console.log('An error occurred: ' + response.text());
65 + }
66 + else
67 + {
68 + const ret = await response.json();
69 + if (ret.message !== undefined) {
70 + console.log('A general error occurred: ' + response.text());
71 + }
72 + else
73 + {
74 + send_prompt = ret.data.content;
75 + }
76 + }
77 + }
78 + }
79 + let dom = tinymce.activeEditor.dom;
80 + let $ = tinymce.dom.DomQuery;
81 +
82 + const loadingSpinnerId = await aiomatic_classic_addAutocompleteContainer(aiomatic.placement, ed);
83 +
84 + ed.selection.collapse();
85 + let spinner = dom.select('#' + loadingSpinnerId);
86 +
87 + let autocompletedText = '';
88 + try {
89 + if(icon == 'text')
90 + {
91 + autocompletedText = await aiomatic_classic_doAutocompleteRequest(send_prompt);
92 + if(autocompletedText === undefined)
93 + {
94 + throw new Error('Failed to generate text!');
95 + }
96 + autocompletedText = autocompletedText.replace(/\n/g, '<br/>');
97 + }
98 + else
99 + {
100 + if(icon == 'format-image')
101 + {
102 + autocompletedText = await aiomatic_classic_doImageRequest(send_prompt);
103 + if(autocompletedText === undefined)
104 + {
105 + throw new Error('Failed to generate text!');
106 + }
107 + }
108 + }
109 + } catch (error) {
110 + $(spinner).remove();
111 + alert('An API error occurred with the following response body: \n\n' + error.message);
112 + return;
113 + }
114 +
115 + $(spinner).removeAttr('class');
116 + $(spinner).removeAttr('id');
117 +
118 + $(spinner).html(autocompletedText);
119 +
120 + ed.undoManager.add();
121 + }
122 + });
123 + }
124 + var uniqueMenu = aiomatic_uniq_fast(menu);
125 + uniqueMenu.forEach((item, index) => {
126 + item.id = `menuitem-${index}`;
127 + });
128 + ed.addButton("aiomatic", {
129 + type: 'menubutton',
130 + title : "Aimogen Content Wizard",
131 + tooltip: 'Aimogen Content Wizard',
132 + image: aiomatic.xicon,
133 + icon: false,
134 + menu: uniqueMenu
135 + });
136 + }
137 + },
138 + createControl : function(n, cm) {
139 + return null;
140 + },
141 + getInfo : function() {
142 + return {
143 + longname : "Aimogen Buttons",
144 + author : "CodeRevolution",
145 + version : "1.0"
146 + };
147 + }
148 + });
149 + tinymce.PluginManager.add("aiomatic_editor", tinymce.plugins.aiomatic_editor);
150 + })();
151 +
152 + const aiomatic_createLoadingSpinner = function (selectedNode, loadingSpinnerId) {
153 + let spinnersrc = "data:image/gif;base64,R0lGODlhFAAUAPUAAP///4mJiYqKio+Pj5CQkJGRkZKSkpSUlJubm5ycnKKioqioqKurq62trbS0tLW1tbu7u729vb+/v8HBwcPDw8XFxcjIyNTU1NXV1dbW1tfX19jY2Nra2uPj4+Tk5OXl5efn5+vr6+/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgAAACH/C0ltYWdlTWFnaWNrDmdhbW1hPTAuNDU0NTQ1ACH+J0dJRiByZXNpemVkIG9uIGh0dHBzOi8vZXpnaWYuY29tL3Jlc2l6ZQAsAAAAABQAFAAABoFAgHA4LBSISORiKBAMTUniYAloCk+i6LBRiFSdABNUK0QkLodDeIy0PCzCiWJzuZxMp6t4WHlANlpie0QXEROBeFEhIGRIIB2QIGxJgmKPkZNELXeCSC1an4iiSJx5UaVPg3ctrC2JYSJsoWuuUINkWHmDt1G7YyZZZGy3mcLFQ0EAIfkECQoAAAAh/wtJbWFnZU1hZ2ljaw5nYW1tYT0wLjQ1NDU0NQAsAAAAABQAFACF////a2trb29vcnJygYGBg4ODh4eHi4uLjo6OmpqapaWlpqamq6urra2trq6usbGxtLS0tbW1vLy8vb29wcHBxcXFx8fHycnJ1dXV2NjY29vb3Nzc3d3d39/f4ODg4uLi4+Pj5OTk5eXl5ubm6urq7e3t7+/v8PDw8fHx8vLy8/Pz9PT09fX19vb2+Pj4+fn5+vr6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABohAgHA4bDCISGRluFgMDUliZAloChGCSFR4iWCqzkeAsB1KJKBGY3MYREUakVBDEW1AGkJCuEKhhiAbGyVbfSgrSCQgIFt+iEkrj2VDfo4wZZWZllswhn5Il1GhUZ+kf0iGkqiOlKV9MLAwh0IoJacAo36yiKVlKyW8p72mtKe/k7e9t5MAw0hBACH5BAkKAAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAAUABQAhf///2tra29vb3d3d4KCgoaGhoeHh42NjY+Pj5KSkpSUlKCgoKGhoaSkpKenp6mpqa+vr7Ozs8PDw8TExMfHx8nJydvb29zc3ODg4OHh4eLi4uPj4+Xl5efn5+rq6uvr6+zs7O/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vj4+Pn5+fr6+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaJQIBwOKxMiEgkZyiRDBtJokUjlBwBj8Q1yrl8AE3ABLGIEjWaUqXyeSiipRJKGEp/6ouIEBEwDEshcmYNAwIISChxZgYEEFErK2ZJcXEokWaJlJoll0krmYpEnUijSKGTJUmZc1Grf6GJkJCCAICpQp1xK4qBkkIoIXOhp3C3wyG+t7XKyr7LkkEAIfkECQoAAAAh/wtJbWFnZU1hZ2ljaw5nYW1tYT0wLjQ1NDU0NQAsAAAAABQAFACF////iYmJioqKj4+PkJCQkpKSlJSUmJiYoaGho6OjpKSkqampq6urtLS0tra2uLi4vb29wcHBwsLCxcXFx8fHzc3N0tLS1tbW2NjY2tra29vb4+Pj5OTk5eXl5ubm6+vr7+/v8PDw8fHx8vLy8/Pz9PT09fX19vb2+Pj4+fn5+vr6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABohAgHA45HCISCRpuNkMJUkiaQloCimOTFR4Ap2qzowDuhVOUUYS5RGdfgEnEup0+kgqQsYAMSSBSG9JEAYEDEhxVEkKCBRRKChbGVp9U4CQURcGApsElZZbFpqcSJdJgUlTW6mHbluIgZVcco8ogGZ/Q6VnqatlXV+rvW1UwSBlAIm9icfIy0hBACH5BAkKAAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAAUABQAhf///2tra3FxcXJycnx8fIGBgYKCgouLi46OjpqamqWlpaampqysrK2tra6urrGxsbS0tLe3t7q6ur6+vsDAwMLCwsbGxsfHx9PT09XV1dnZ2dzc3N3d3d7e3t/f3+Hh4eLi4uPj4+Tk5OXl5efn5+zs7O3t7e/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vj4+Pn5+fr6+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaIQIBwOFytiEjkUWgcgpLEJkAq2pygQtfJNT2eNk8s89gEbaBGLsC1FIJEwkuEUjyt1EmMJHJBsttIFBQaUC8vWCJwRUZ3h1AbDguSDIyNWJCSCw5IjkkZZ2iARAYHD35pWAkDAQiLS2yGhndCBgMEQ51GL7NSABNQWlxSvaFjTFdibb2iycxDQQAh+QQJCgAAACH/C0ltYWdlTWFnaWNrDmdhbW1hPTAuNDU0NTQ1ACwAAAAAFAAUAIX///9oaGhycnJ1dXV2dnaBgYGFhYWKioqLi4uPj4+UlJScnJygoKCioqKlpaWoqKipqamzs7PDw8PExMTHx8fJycnOzs7Y2Njb29vd3d3f39/h4eHi4uLj4+Pk5OTn5+fp6enq6urt7e3v7+/w8PDx8fHy8vLz8/P09PT19fX29vb4+Pj5+fn6+voAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgkCAcDg8nYhI5FFoLCaJTUBUNXoOqSrpMmrVernQUxagWjLHn8umOBJbQRrNB1k2IzebarLVsoKNRip9TyAVEhOIgEaDSYWHh0iMSHJ+dkQMDhN0gVYRCgkQRVMnfC0XBQxCDAoLQ4yLYh8GA0MWT1heDgEIXV6+CAKafqJDtL3EVkEAIfkECQoAAAAh/wtJbWFnZU1hZ2ljaw5nYW1tYT0wLjQ1NDU0NQAsAAAAABQAFACF////iYmJioqKjY2NkJCQkpKSlJSUlpaWl5eXoKCgpKSkp6entLS0t7e3uLi4ubm5urq6u7u7vb29vr6+wMDAwcHBxcXFx8fHzc3N09PT2NjY3Nzc4ODg4+Pj5OTk5eXl5ubm6urq7Ozs7+/v8PDw8fHx8vLy8/Pz9PT09fX19vb29/f3+Pj4+vr6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoZAgHA4PJ2ISORRaCwmiU1AVDV6Dqkq6TJq1Xq50FMWoFoyx2XzaSS2GtvEtBuObLWs9rBRdX+qPhyBH29ifUl/gRwfdVYhZkqPRBQWGkhpY0kYDg0WRVNiDg4bCQ5CFA0TQ4ZGIwQEGwoHQxx+I1kCAgATAwpdXgC4QrEZXWbBQrK+Q65dQQAh+QQJCgAAACH/C0ltYWdlTWFnaWNrDmdhbW1hPTAuNDU0NTQ1ACwAAAAAFAAUAIX///9tbW1zc3N5eXl9fX2AgICMjIySkpKlpaWmpqapqamrq6utra2vr6+zs7O3t7e5ubnAwMDCwsLFxcXMzMzNzc3Pz8/Q0NDT09PV1dXc3Nzd3d3g4ODh4eHj4+Pk5OTm5ubn5+fs7Ozv7+/w8PDx8fHy8vLz8/P09PT19fX29vb4+Pj6+voAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhECAcDg8nYhI5FFoLCaJTUBUNXoOqSrpMmrVernQUxagWjLHZfNpJLYawWR4sZ1ksbrKt+rufvvFfHVpcIFIe31WHR1VRGljSSEbGyFzSwsFFJkhERdCHRsdQ4EDBBcLC5sQQ4xIBwENAAkJABkOE3gBBkKyQhMPoVYCQ7xCqnhDDQtdQQAh+QQJCgAAACH/C0ltYWdlTWFnaWNrDmdhbW1hPTAuNDU0NTQ1ACwAAAAAFAAUAIX///9tbW1vb29xcXF7e3uBgYGNjY2QkJCRkZGTk5OVlZWWlpaZmZmcnJyfn5+oqKisrKyzs7O2tra/v7/CwsLDw8PExMTHx8fJycna2trb29vd3d3e3t7f39/h4eHi4uLj4+Po6Ojp6enq6urv7+/w8PDx8fHy8vLz8/P09PT19fX29vb6+vr8/PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhUCAcDhEoYhI5FFoLCaJTUB0RXoOqSvpMmrVerlQVBawWjLHZTOKJLYawWR4sZ1ksbrK9+rufvvFLVYsaWAiGYJWEQYFfUkLAQMLVmljAAQBCRQAEw0ZHBwoHiJMbEMSQwwNHBcXoRx4ABCZABSahh54CQ9CF5oAHqBdkkK1Q6+wQhgXXUEAIfkECQoAAAAh/wtJbWFnZU1hZ2ljaw5nYW1tYT0wLjQ1NDU0NQAsAAAAABQAFACF////iYmJioqKkJCQkZGRkpKSk5OTm5uboKCgqqqqrq6ur6+vtbW1ubm5u7u7vb29v7+/xcXFx8fHyMjI0dHR1dXV2NjY3t7e39/f4+Pj5OTk5eXl5+fn6+vr7Ozs7+/v8PDw8fHx8vLy8/Pz9PT09fX19vb29/f3+fn5+vr6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABn9AgHA4HI2ISORRaCwmiU1A9PR5Dqkn6TJq1Xq50FEWcFoyx2Xz6CO2GsFkeLGd/Iy7Q4Ngb4h030Z6fH5PKWlgFxdWKVYRCQhuZkMLBgYLVml3B5YUABUPGmspdGtmhAAODx0aGl54EwwWABkZTJJJDIS0TFVdDkO7THhErF1BACH5BAkKAAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAAUABQAhf///2pqam1tbXp6enx8fISEhIuLi5GRkZOTk6WlpaampqqqqqysrK2tra6urrW1tba2tre3t7y8vMDAwMfHx8nJycrKys7OztPT09TU1NXV1dra2tvb29zc3N7e3t/f3+Dg4OHh4ePj4+Tk5Ojo6Orq6uzs7O/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vj4+Pn5+fr6+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAQIBwOFytiEjkUWgsJolNQLR1eg6pLekyatV6ucRD4CBsLZlZgPlsEAwcViMYsCAU4qs0EnPpIhcKgQ4aXXJGgIKETzFrYCUlVjFWHBQTeEkWEREWVmt6EpsgACUgKzGneUwnZxxDHyAtZgCrfgAjH1VRqV2vTFtVvEVnZ7VzREEAIfkECQoAAAAh/wtJbWFnZU1hZ2ljaw5nYW1tYT0wLjQ1NDU0NQAsAAAAABQAFACF////ampqbGxseXl5fHx8hYWFi4uLj4+PkJCQkZGRkpKSm5ubnJycoqKiqKioqampq6urra2tr6+vv7+/w8PDxMTEx8fHyMjI2tra3Nzc3d3d39/f4ODg4eHh4+Pj5OTk5eXl5ubm7e3t7+/v8PDw8fHx8vLy8/Pz9PT09fX19vb2+Pj4+vr6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoRAgHA4JJGISGSieBQ2k8KAwdlEjaDDhAACMFKxwwEBgEJ1n0TIISKMFIgkM9krhCQWFKwxjpwsGnp8SRoYYEgVFIgXIWB7RhWQFBcdWCwojnBySSxYIyGUUHREIRoajFCXggAdpkeXLLAsgiQjT1dUlmaiWFa6Taqhv1VoSU+ixI3IQ0EAOw==";
154 + let spinnerHtml = '';
155 + if (['li'].includes(selectedNode.tagName.toLowerCase())) {
156 + spinnerHtml = '<' + selectedNode.tagName + ' id="' + loadingSpinnerId + '" class="aiomatic-mce-loading"><img src="' + spinnersrc + '"></' + selectedNode.tagName + '>';
157 + } else {
158 + spinnerHtml = '<p id="' + loadingSpinnerId + '" class="aiomatic-mce-loading"><img src="' + spinnersrc + '"></p>';
159 + }
160 +
161 + return spinnerHtml;
162 + }
163 +
164 + const aiomatic_classic_doAutocompleteRequest = async function (text) {
165 + const ajaxurl = aiomatic.ajaxurl;
166 + const nonce = aiomatic.nonce;
167 + const xdata = new FormData();
168 + xdata.append( 'prompt', text );
169 + xdata.append( 'nonce', nonce );
170 + xdata.append( 'action', 'aiomatic_editor' );
171 + const response = await fetch(ajaxurl, {
172 + method: 'POST',
173 + body: xdata
174 + }).catch(async error => {
175 + throw new Error(await error.text());
176 + })
177 +
178 + if (!response.ok) {
179 + throw new Error(await response.text());
180 + }
181 +
182 + const ret = await response.json();
183 + if (ret.message !== undefined) {
184 + throw new Error(await response.text());
185 + }
186 + return ret.data.content;
187 + }
188 +
189 + const aiomatic_classic_doImageRequest = async function (text) {
190 + const ajaxurl = aiomatic.ajaxurl;
191 + const nonce = aiomatic.nonce;
192 + const xdata = new FormData();
193 + xdata.append( 'prompt', text );
194 + xdata.append( 'nonce', nonce );
195 + xdata.append( 'action', 'aiomatic_imager' );
196 + const response = await fetch(ajaxurl, {
197 + method: 'POST',
198 + body: xdata
199 + }).catch(async error => {
200 + throw new Error(await error.text());
201 + })
202 +
203 + if (!response.ok) {
204 + throw new Error(await response.text());
205 + }
206 +
207 + const ret = await response.json();
208 + if (ret.message !== undefined) {
209 + throw new Error(await response.text());
210 + }
211 + return ret.data.content;
212 + }
213 + const aiomatic_classic_addAutocompleteContainer = async function (placement, ed) {
214 + let $ = tinymce.dom.DomQuery;
215 + const loadingSpinnerId = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
216 +
217 + let selectionRange = ed.selection.getRng();
218 + if (placement === 'below') {
219 + let selectedNode = ed.selection.getEnd();
220 +
221 + let spinnerHtml = aiomatic_createLoadingSpinner(
222 + selectedNode,
223 + loadingSpinnerId,
224 + )
225 + let spinnerDom = $(spinnerHtml)[0];
226 +
227 + let parentNode = selectionRange.endContainer.parentNode;
228 + if (parentNode.tagName.toLowerCase() === 'li') {
229 + $(selectedNode).after(spinnerDom);
230 + } else if (selectedNode.textContent) {
231 + selectionRange.collapse(false);
232 + selectionRange.insertNode(spinnerDom);
233 + ed.selection.collapse();
234 + } else {
235 + $(selectedNode).after(spinnerDom);
236 + }
237 +
238 + } else {
239 + let selectedNode = ed.selection.getStart();
240 + let spinnerHtml = aiomatic_createLoadingSpinner(
241 + selectedNode,
242 + loadingSpinnerId,
243 + )
244 + let spinnerDom = $(spinnerHtml)[0];
245 +
246 + let parentNode = selectionRange.startContainer.parentNode;
247 + if (parentNode.tagName.toLowerCase() === 'li') {
248 + $(selectedNode).before(spinnerDom);
249 + } else if (selectedNode.textContent) {
250 + selectionRange.collapse(true);
251 + selectionRange.insertNode(spinnerDom);
252 + ed.selection.collapse();
253 + } else {
254 + $(selectedNode).before(spinnerDom);
255 + }
256 + }
257 +
258 + ed.undoManager.add();
259 +
260 + return loadingSpinnerId;
261 + }