[ Index ] |
PHP Cross Reference of Joomla 4.2.2 documentation |
[Summary view] [Print] [Text view]
1 /** 2 * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 * Licensed under the LGPL or a commercial license. 4 * For LGPL see License.txt in the project root for license information. 5 * For commercial licenses see https://www.tiny.cloud/ 6 * 7 * Version: 5.10.5 (2022-05-25) 8 */ 9 (function () { 10 'use strict'; 11 12 var global$4 = tinymce.util.Tools.resolve('tinymce.PluginManager'); 13 14 var typeOf = function (x) { 15 var t = typeof x; 16 if (x === null) { 17 return 'null'; 18 } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) { 19 return 'array'; 20 } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) { 21 return 'string'; 22 } else { 23 return t; 24 } 25 }; 26 var isType = function (type) { 27 return function (value) { 28 return typeOf(value) === type; 29 }; 30 }; 31 var isSimpleType = function (type) { 32 return function (value) { 33 return typeof value === type; 34 }; 35 }; 36 var isString = isType('string'); 37 var isFunction = isSimpleType('function'); 38 39 var noop = function () { 40 }; 41 var constant = function (value) { 42 return function () { 43 return value; 44 }; 45 }; 46 var identity = function (x) { 47 return x; 48 }; 49 function curry(fn) { 50 var initialArgs = []; 51 for (var _i = 1; _i < arguments.length; _i++) { 52 initialArgs[_i - 1] = arguments[_i]; 53 } 54 return function () { 55 var restArgs = []; 56 for (var _i = 0; _i < arguments.length; _i++) { 57 restArgs[_i] = arguments[_i]; 58 } 59 var all = initialArgs.concat(restArgs); 60 return fn.apply(null, all); 61 }; 62 } 63 var never = constant(false); 64 var always = constant(true); 65 66 var global$3 = tinymce.util.Tools.resolve('tinymce.util.Tools'); 67 68 var global$2 = tinymce.util.Tools.resolve('tinymce.util.XHR'); 69 70 var getCreationDateClasses = function (editor) { 71 return editor.getParam('template_cdate_classes', 'cdate'); 72 }; 73 var getModificationDateClasses = function (editor) { 74 return editor.getParam('template_mdate_classes', 'mdate'); 75 }; 76 var getSelectedContentClasses = function (editor) { 77 return editor.getParam('template_selected_content_classes', 'selcontent'); 78 }; 79 var getPreviewReplaceValues = function (editor) { 80 return editor.getParam('template_preview_replace_values'); 81 }; 82 var getContentStyle = function (editor) { 83 return editor.getParam('content_style', '', 'string'); 84 }; 85 var shouldUseContentCssCors = function (editor) { 86 return editor.getParam('content_css_cors', false, 'boolean'); 87 }; 88 var getTemplateReplaceValues = function (editor) { 89 return editor.getParam('template_replace_values'); 90 }; 91 var getTemplates = function (editor) { 92 return editor.getParam('templates'); 93 }; 94 var getCdateFormat = function (editor) { 95 return editor.getParam('template_cdate_format', editor.translate('%Y-%m-%d')); 96 }; 97 var getMdateFormat = function (editor) { 98 return editor.getParam('template_mdate_format', editor.translate('%Y-%m-%d')); 99 }; 100 var getBodyClassFromHash = function (editor) { 101 var bodyClass = editor.getParam('body_class', '', 'hash'); 102 return bodyClass[editor.id] || ''; 103 }; 104 var getBodyClass = function (editor) { 105 var bodyClass = editor.getParam('body_class', '', 'string'); 106 if (bodyClass.indexOf('=') === -1) { 107 return bodyClass; 108 } else { 109 return getBodyClassFromHash(editor); 110 } 111 }; 112 113 var addZeros = function (value, len) { 114 value = '' + value; 115 if (value.length < len) { 116 for (var i = 0; i < len - value.length; i++) { 117 value = '0' + value; 118 } 119 } 120 return value; 121 }; 122 var getDateTime = function (editor, fmt, date) { 123 if (date === void 0) { 124 date = new Date(); 125 } 126 var daysShort = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' '); 127 var daysLong = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' '); 128 var monthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' '); 129 var monthsLong = 'January February March April May June July August September October November December'.split(' '); 130 fmt = fmt.replace('%D', '%m/%d/%Y'); 131 fmt = fmt.replace('%r', '%I:%M:%S %p'); 132 fmt = fmt.replace('%Y', '' + date.getFullYear()); 133 fmt = fmt.replace('%y', '' + date.getYear()); 134 fmt = fmt.replace('%m', addZeros(date.getMonth() + 1, 2)); 135 fmt = fmt.replace('%d', addZeros(date.getDate(), 2)); 136 fmt = fmt.replace('%H', '' + addZeros(date.getHours(), 2)); 137 fmt = fmt.replace('%M', '' + addZeros(date.getMinutes(), 2)); 138 fmt = fmt.replace('%S', '' + addZeros(date.getSeconds(), 2)); 139 fmt = fmt.replace('%I', '' + ((date.getHours() + 11) % 12 + 1)); 140 fmt = fmt.replace('%p', '' + (date.getHours() < 12 ? 'AM' : 'PM')); 141 fmt = fmt.replace('%B', '' + editor.translate(monthsLong[date.getMonth()])); 142 fmt = fmt.replace('%b', '' + editor.translate(monthsShort[date.getMonth()])); 143 fmt = fmt.replace('%A', '' + editor.translate(daysLong[date.getDay()])); 144 fmt = fmt.replace('%a', '' + editor.translate(daysShort[date.getDay()])); 145 fmt = fmt.replace('%%', '%'); 146 return fmt; 147 }; 148 149 var createTemplateList = function (editor, callback) { 150 return function () { 151 var templateList = getTemplates(editor); 152 if (isFunction(templateList)) { 153 templateList(callback); 154 } else if (isString(templateList)) { 155 global$2.send({ 156 url: templateList, 157 success: function (text) { 158 callback(JSON.parse(text)); 159 } 160 }); 161 } else { 162 callback(templateList); 163 } 164 }; 165 }; 166 var replaceTemplateValues = function (html, templateValues) { 167 global$3.each(templateValues, function (v, k) { 168 if (isFunction(v)) { 169 v = v(k); 170 } 171 html = html.replace(new RegExp('\\{\\$' + k + '\\}', 'g'), v); 172 }); 173 return html; 174 }; 175 var replaceVals = function (editor, scope) { 176 var dom = editor.dom, vl = getTemplateReplaceValues(editor); 177 global$3.each(dom.select('*', scope), function (e) { 178 global$3.each(vl, function (v, k) { 179 if (dom.hasClass(e, k)) { 180 if (isFunction(v)) { 181 v(e); 182 } 183 } 184 }); 185 }); 186 }; 187 var hasClass = function (n, c) { 188 return new RegExp('\\b' + c + '\\b', 'g').test(n.className); 189 }; 190 var insertTemplate = function (editor, _ui, html) { 191 var dom = editor.dom; 192 var sel = editor.selection.getContent(); 193 html = replaceTemplateValues(html, getTemplateReplaceValues(editor)); 194 var el = dom.create('div', null, html); 195 var n = dom.select('.mceTmpl', el); 196 if (n && n.length > 0) { 197 el = dom.create('div', null); 198 el.appendChild(n[0].cloneNode(true)); 199 } 200 global$3.each(dom.select('*', el), function (n) { 201 if (hasClass(n, getCreationDateClasses(editor).replace(/\s+/g, '|'))) { 202 n.innerHTML = getDateTime(editor, getCdateFormat(editor)); 203 } 204 if (hasClass(n, getModificationDateClasses(editor).replace(/\s+/g, '|'))) { 205 n.innerHTML = getDateTime(editor, getMdateFormat(editor)); 206 } 207 if (hasClass(n, getSelectedContentClasses(editor).replace(/\s+/g, '|'))) { 208 n.innerHTML = sel; 209 } 210 }); 211 replaceVals(editor, el); 212 editor.execCommand('mceInsertContent', false, el.innerHTML); 213 editor.addVisual(); 214 }; 215 216 var none = function () { 217 return NONE; 218 }; 219 var NONE = function () { 220 var call = function (thunk) { 221 return thunk(); 222 }; 223 var id = identity; 224 var me = { 225 fold: function (n, _s) { 226 return n(); 227 }, 228 isSome: never, 229 isNone: always, 230 getOr: id, 231 getOrThunk: call, 232 getOrDie: function (msg) { 233 throw new Error(msg || 'error: getOrDie called on none.'); 234 }, 235 getOrNull: constant(null), 236 getOrUndefined: constant(undefined), 237 or: id, 238 orThunk: call, 239 map: none, 240 each: noop, 241 bind: none, 242 exists: never, 243 forall: always, 244 filter: function () { 245 return none(); 246 }, 247 toArray: function () { 248 return []; 249 }, 250 toString: constant('none()') 251 }; 252 return me; 253 }(); 254 var some = function (a) { 255 var constant_a = constant(a); 256 var self = function () { 257 return me; 258 }; 259 var bind = function (f) { 260 return f(a); 261 }; 262 var me = { 263 fold: function (n, s) { 264 return s(a); 265 }, 266 isSome: always, 267 isNone: never, 268 getOr: constant_a, 269 getOrThunk: constant_a, 270 getOrDie: constant_a, 271 getOrNull: constant_a, 272 getOrUndefined: constant_a, 273 or: self, 274 orThunk: self, 275 map: function (f) { 276 return some(f(a)); 277 }, 278 each: function (f) { 279 f(a); 280 }, 281 bind: bind, 282 exists: bind, 283 forall: bind, 284 filter: function (f) { 285 return f(a) ? me : NONE; 286 }, 287 toArray: function () { 288 return [a]; 289 }, 290 toString: function () { 291 return 'some(' + a + ')'; 292 } 293 }; 294 return me; 295 }; 296 var from = function (value) { 297 return value === null || value === undefined ? NONE : some(value); 298 }; 299 var Optional = { 300 some: some, 301 none: none, 302 from: from 303 }; 304 305 var map = function (xs, f) { 306 var len = xs.length; 307 var r = new Array(len); 308 for (var i = 0; i < len; i++) { 309 var x = xs[i]; 310 r[i] = f(x, i); 311 } 312 return r; 313 }; 314 var findUntil = function (xs, pred, until) { 315 for (var i = 0, len = xs.length; i < len; i++) { 316 var x = xs[i]; 317 if (pred(x, i)) { 318 return Optional.some(x); 319 } else if (until(x, i)) { 320 break; 321 } 322 } 323 return Optional.none(); 324 }; 325 var find = function (xs, pred) { 326 return findUntil(xs, pred, never); 327 }; 328 329 var global$1 = tinymce.util.Tools.resolve('tinymce.Env'); 330 331 var global = tinymce.util.Tools.resolve('tinymce.util.Promise'); 332 333 var hasOwnProperty = Object.hasOwnProperty; 334 var get = function (obj, key) { 335 return has(obj, key) ? Optional.from(obj[key]) : Optional.none(); 336 }; 337 var has = function (obj, key) { 338 return hasOwnProperty.call(obj, key); 339 }; 340 341 var entitiesAttr = { 342 '"': '"', 343 '<': '<', 344 '>': '>', 345 '&': '&', 346 '\'': ''' 347 }; 348 var htmlEscape = function (html) { 349 return html.replace(/["'<>&]/g, function (match) { 350 return get(entitiesAttr, match).getOr(match); 351 }); 352 }; 353 354 var getPreviewContent = function (editor, html) { 355 if (html.indexOf('<html>') === -1) { 356 var contentCssEntries_1 = ''; 357 var contentStyle = getContentStyle(editor); 358 var cors_1 = shouldUseContentCssCors(editor) ? ' crossorigin="anonymous"' : ''; 359 global$3.each(editor.contentCSS, function (url) { 360 contentCssEntries_1 += '<link type="text/css" rel="stylesheet" href="' + editor.documentBaseURI.toAbsolute(url) + '"' + cors_1 + '>'; 361 }); 362 if (contentStyle) { 363 contentCssEntries_1 += '<style type="text/css">' + contentStyle + '</style>'; 364 } 365 var bodyClass = getBodyClass(editor); 366 var encode = editor.dom.encode; 367 var isMetaKeyPressed = global$1.mac ? 'e.metaKey' : 'e.ctrlKey && !e.altKey'; 368 var preventClicksOnLinksScript = '<script>' + 'document.addEventListener && document.addEventListener("click", function(e) {' + 'for (var elm = e.target; elm; elm = elm.parentNode) {' + 'if (elm.nodeName === "A" && !(' + isMetaKeyPressed + ')) {' + 'e.preventDefault();' + '}' + '}' + '}, false);' + '</script> '; 369 var directionality = editor.getBody().dir; 370 var dirAttr = directionality ? ' dir="' + encode(directionality) + '"' : ''; 371 html = '<!DOCTYPE html>' + '<html>' + '<head>' + '<base href="' + encode(editor.documentBaseURI.getURI()) + '">' + contentCssEntries_1 + preventClicksOnLinksScript + '</head>' + '<body class="' + encode(bodyClass) + '"' + dirAttr + '>' + html + '</body>' + '</html>'; 372 } 373 return replaceTemplateValues(html, getPreviewReplaceValues(editor)); 374 }; 375 var open = function (editor, templateList) { 376 var createTemplates = function () { 377 if (!templateList || templateList.length === 0) { 378 var message = editor.translate('No templates defined.'); 379 editor.notificationManager.open({ 380 text: message, 381 type: 'info' 382 }); 383 return Optional.none(); 384 } 385 return Optional.from(global$3.map(templateList, function (template, index) { 386 var isUrlTemplate = function (t) { 387 return t.url !== undefined; 388 }; 389 return { 390 selected: index === 0, 391 text: template.title, 392 value: { 393 url: isUrlTemplate(template) ? Optional.from(template.url) : Optional.none(), 394 content: !isUrlTemplate(template) ? Optional.from(template.content) : Optional.none(), 395 description: template.description 396 } 397 }; 398 })); 399 }; 400 var createSelectBoxItems = function (templates) { 401 return map(templates, function (t) { 402 return { 403 text: t.text, 404 value: t.text 405 }; 406 }); 407 }; 408 var findTemplate = function (templates, templateTitle) { 409 return find(templates, function (t) { 410 return t.text === templateTitle; 411 }); 412 }; 413 var loadFailedAlert = function (api) { 414 editor.windowManager.alert('Could not load the specified template.', function () { 415 return api.focus('template'); 416 }); 417 }; 418 var getTemplateContent = function (t) { 419 return new global(function (resolve, reject) { 420 t.value.url.fold(function () { 421 return resolve(t.value.content.getOr('')); 422 }, function (url) { 423 return global$2.send({ 424 url: url, 425 success: function (html) { 426 resolve(html); 427 }, 428 error: function (e) { 429 reject(e); 430 } 431 }); 432 }); 433 }); 434 }; 435 var onChange = function (templates, updateDialog) { 436 return function (api, change) { 437 if (change.name === 'template') { 438 var newTemplateTitle = api.getData().template; 439 findTemplate(templates, newTemplateTitle).each(function (t) { 440 api.block('Loading...'); 441 getTemplateContent(t).then(function (previewHtml) { 442 updateDialog(api, t, previewHtml); 443 }).catch(function () { 444 updateDialog(api, t, ''); 445 api.disable('save'); 446 loadFailedAlert(api); 447 }); 448 }); 449 } 450 }; 451 }; 452 var onSubmit = function (templates) { 453 return function (api) { 454 var data = api.getData(); 455 findTemplate(templates, data.template).each(function (t) { 456 getTemplateContent(t).then(function (previewHtml) { 457 editor.execCommand('mceInsertTemplate', false, previewHtml); 458 api.close(); 459 }).catch(function () { 460 api.disable('save'); 461 loadFailedAlert(api); 462 }); 463 }); 464 }; 465 }; 466 var openDialog = function (templates) { 467 var selectBoxItems = createSelectBoxItems(templates); 468 var buildDialogSpec = function (bodyItems, initialData) { 469 return { 470 title: 'Insert Template', 471 size: 'large', 472 body: { 473 type: 'panel', 474 items: bodyItems 475 }, 476 initialData: initialData, 477 buttons: [ 478 { 479 type: 'cancel', 480 name: 'cancel', 481 text: 'Cancel' 482 }, 483 { 484 type: 'submit', 485 name: 'save', 486 text: 'Save', 487 primary: true 488 } 489 ], 490 onSubmit: onSubmit(templates), 491 onChange: onChange(templates, updateDialog) 492 }; 493 }; 494 var updateDialog = function (dialogApi, template, previewHtml) { 495 var content = getPreviewContent(editor, previewHtml); 496 var bodyItems = [ 497 { 498 type: 'selectbox', 499 name: 'template', 500 label: 'Templates', 501 items: selectBoxItems 502 }, 503 { 504 type: 'htmlpanel', 505 html: '<p aria-live="polite">' + htmlEscape(template.value.description) + '</p>' 506 }, 507 { 508 label: 'Preview', 509 type: 'iframe', 510 name: 'preview', 511 sandboxed: false 512 } 513 ]; 514 var initialData = { 515 template: template.text, 516 preview: content 517 }; 518 dialogApi.unblock(); 519 dialogApi.redial(buildDialogSpec(bodyItems, initialData)); 520 dialogApi.focus('template'); 521 }; 522 var dialogApi = editor.windowManager.open(buildDialogSpec([], { 523 template: '', 524 preview: '' 525 })); 526 dialogApi.block('Loading...'); 527 getTemplateContent(templates[0]).then(function (previewHtml) { 528 updateDialog(dialogApi, templates[0], previewHtml); 529 }).catch(function () { 530 updateDialog(dialogApi, templates[0], ''); 531 dialogApi.disable('save'); 532 loadFailedAlert(dialogApi); 533 }); 534 }; 535 var optTemplates = createTemplates(); 536 optTemplates.each(openDialog); 537 }; 538 539 var showDialog = function (editor) { 540 return function (templates) { 541 open(editor, templates); 542 }; 543 }; 544 var register$1 = function (editor) { 545 editor.addCommand('mceInsertTemplate', curry(insertTemplate, editor)); 546 editor.addCommand('mceTemplate', createTemplateList(editor, showDialog(editor))); 547 }; 548 549 var setup = function (editor) { 550 editor.on('PreProcess', function (o) { 551 var dom = editor.dom, dateFormat = getMdateFormat(editor); 552 global$3.each(dom.select('div', o.node), function (e) { 553 if (dom.hasClass(e, 'mceTmpl')) { 554 global$3.each(dom.select('*', e), function (e) { 555 if (dom.hasClass(e, getModificationDateClasses(editor).replace(/\s+/g, '|'))) { 556 e.innerHTML = getDateTime(editor, dateFormat); 557 } 558 }); 559 replaceVals(editor, e); 560 } 561 }); 562 }); 563 }; 564 565 var register = function (editor) { 566 var onAction = function () { 567 return editor.execCommand('mceTemplate'); 568 }; 569 editor.ui.registry.addButton('template', { 570 icon: 'template', 571 tooltip: 'Insert template', 572 onAction: onAction 573 }); 574 editor.ui.registry.addMenuItem('template', { 575 icon: 'template', 576 text: 'Insert template...', 577 onAction: onAction 578 }); 579 }; 580 581 function Plugin () { 582 global$4.add('template', function (editor) { 583 register(editor); 584 register$1(editor); 585 setup(editor); 586 }); 587 } 588 589 Plugin(); 590 591 }());
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Sep 7 05:41:13 2022 | Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer |