plugin.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914
  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.0.7 (2019-06-05)
  8. */
  9. (function () {
  10. var help = (function () {
  11. 'use strict';
  12. var Cell = function (initial) {
  13. var value = initial;
  14. var get = function () {
  15. return value;
  16. };
  17. var set = function (v) {
  18. value = v;
  19. };
  20. var clone = function () {
  21. return Cell(get());
  22. };
  23. return {
  24. get: get,
  25. set: set,
  26. clone: clone
  27. };
  28. };
  29. var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
  30. var get = function (customTabs) {
  31. var addTab = function (spec) {
  32. var currentCustomTabs = customTabs.get();
  33. currentCustomTabs[spec.name] = spec;
  34. customTabs.set(currentCustomTabs);
  35. };
  36. return { addTab: addTab };
  37. };
  38. var register = function (editor, dialogOpener) {
  39. editor.addCommand('mceHelp', dialogOpener);
  40. };
  41. var Commands = { register: register };
  42. var register$1 = function (editor, dialogOpener) {
  43. editor.ui.registry.addButton('help', {
  44. icon: 'help',
  45. tooltip: 'Help',
  46. onAction: dialogOpener
  47. });
  48. editor.ui.registry.addMenuItem('help', {
  49. text: 'Help',
  50. icon: 'help',
  51. shortcut: 'Alt+0',
  52. onAction: dialogOpener
  53. });
  54. };
  55. var Buttons = { register: register$1 };
  56. var __assign = function () {
  57. __assign = Object.assign || function __assign(t) {
  58. for (var s, i = 1, n = arguments.length; i < n; i++) {
  59. s = arguments[i];
  60. for (var p in s)
  61. if (Object.prototype.hasOwnProperty.call(s, p))
  62. t[p] = s[p];
  63. }
  64. return t;
  65. };
  66. return __assign.apply(this, arguments);
  67. };
  68. var constant = function (value) {
  69. return function () {
  70. return value;
  71. };
  72. };
  73. function curry(fn) {
  74. var initialArgs = [];
  75. for (var _i = 1; _i < arguments.length; _i++) {
  76. initialArgs[_i - 1] = arguments[_i];
  77. }
  78. return function () {
  79. var restArgs = [];
  80. for (var _i = 0; _i < arguments.length; _i++) {
  81. restArgs[_i] = arguments[_i];
  82. }
  83. var all = initialArgs.concat(restArgs);
  84. return fn.apply(null, all);
  85. };
  86. }
  87. var not = function (f) {
  88. return function () {
  89. var args = [];
  90. for (var _i = 0; _i < arguments.length; _i++) {
  91. args[_i] = arguments[_i];
  92. }
  93. return !f.apply(null, args);
  94. };
  95. };
  96. var never = constant(false);
  97. var always = constant(true);
  98. var never$1 = never;
  99. var always$1 = always;
  100. var none = function () {
  101. return NONE;
  102. };
  103. var NONE = function () {
  104. var eq = function (o) {
  105. return o.isNone();
  106. };
  107. var call = function (thunk) {
  108. return thunk();
  109. };
  110. var id = function (n) {
  111. return n;
  112. };
  113. var noop = function () {
  114. };
  115. var nul = function () {
  116. return null;
  117. };
  118. var undef = function () {
  119. return undefined;
  120. };
  121. var me = {
  122. fold: function (n, s) {
  123. return n();
  124. },
  125. is: never$1,
  126. isSome: never$1,
  127. isNone: always$1,
  128. getOr: id,
  129. getOrThunk: call,
  130. getOrDie: function (msg) {
  131. throw new Error(msg || 'error: getOrDie called on none.');
  132. },
  133. getOrNull: nul,
  134. getOrUndefined: undef,
  135. or: id,
  136. orThunk: call,
  137. map: none,
  138. ap: none,
  139. each: noop,
  140. bind: none,
  141. flatten: none,
  142. exists: never$1,
  143. forall: always$1,
  144. filter: none,
  145. equals: eq,
  146. equals_: eq,
  147. toArray: function () {
  148. return [];
  149. },
  150. toString: constant('none()')
  151. };
  152. if (Object.freeze)
  153. Object.freeze(me);
  154. return me;
  155. }();
  156. var some = function (a) {
  157. var constant_a = function () {
  158. return a;
  159. };
  160. var self = function () {
  161. return me;
  162. };
  163. var map = function (f) {
  164. return some(f(a));
  165. };
  166. var bind = function (f) {
  167. return f(a);
  168. };
  169. var me = {
  170. fold: function (n, s) {
  171. return s(a);
  172. },
  173. is: function (v) {
  174. return a === v;
  175. },
  176. isSome: always$1,
  177. isNone: never$1,
  178. getOr: constant_a,
  179. getOrThunk: constant_a,
  180. getOrDie: constant_a,
  181. getOrNull: constant_a,
  182. getOrUndefined: constant_a,
  183. or: self,
  184. orThunk: self,
  185. map: map,
  186. ap: function (optfab) {
  187. return optfab.fold(none, function (fab) {
  188. return some(fab(a));
  189. });
  190. },
  191. each: function (f) {
  192. f(a);
  193. },
  194. bind: bind,
  195. flatten: constant_a,
  196. exists: bind,
  197. forall: bind,
  198. filter: function (f) {
  199. return f(a) ? me : NONE;
  200. },
  201. equals: function (o) {
  202. return o.is(a);
  203. },
  204. equals_: function (o, elementEq) {
  205. return o.fold(never$1, function (b) {
  206. return elementEq(a, b);
  207. });
  208. },
  209. toArray: function () {
  210. return [a];
  211. },
  212. toString: function () {
  213. return 'some(' + a + ')';
  214. }
  215. };
  216. return me;
  217. };
  218. var from = function (value) {
  219. return value === null || value === undefined ? NONE : some(value);
  220. };
  221. var Option = {
  222. some: some,
  223. none: none,
  224. from: from
  225. };
  226. var typeOf = function (x) {
  227. if (x === null)
  228. return 'null';
  229. var t = typeof x;
  230. if (t === 'object' && Array.prototype.isPrototypeOf(x))
  231. return 'array';
  232. if (t === 'object' && String.prototype.isPrototypeOf(x))
  233. return 'string';
  234. return t;
  235. };
  236. var isType = function (type) {
  237. return function (value) {
  238. return typeOf(value) === type;
  239. };
  240. };
  241. var isFunction = isType('function');
  242. var slice = Array.prototype.slice;
  243. var rawIndexOf = function () {
  244. var pIndexOf = Array.prototype.indexOf;
  245. var fastIndex = function (xs, x) {
  246. return pIndexOf.call(xs, x);
  247. };
  248. var slowIndex = function (xs, x) {
  249. return slowIndexOf(xs, x);
  250. };
  251. return pIndexOf === undefined ? slowIndex : fastIndex;
  252. }();
  253. var indexOf = function (xs, x) {
  254. var r = rawIndexOf(xs, x);
  255. return r === -1 ? Option.none() : Option.some(r);
  256. };
  257. var contains = function (xs, x) {
  258. return rawIndexOf(xs, x) > -1;
  259. };
  260. var map = function (xs, f) {
  261. var len = xs.length;
  262. var r = new Array(len);
  263. for (var i = 0; i < len; i++) {
  264. var x = xs[i];
  265. r[i] = f(x, i, xs);
  266. }
  267. return r;
  268. };
  269. var filter = function (xs, pred) {
  270. var r = [];
  271. for (var i = 0, len = xs.length; i < len; i++) {
  272. var x = xs[i];
  273. if (pred(x, i, xs)) {
  274. r.push(x);
  275. }
  276. }
  277. return r;
  278. };
  279. var find = function (xs, pred) {
  280. for (var i = 0, len = xs.length; i < len; i++) {
  281. var x = xs[i];
  282. if (pred(x, i, xs)) {
  283. return Option.some(x);
  284. }
  285. }
  286. return Option.none();
  287. };
  288. var slowIndexOf = function (xs, x) {
  289. for (var i = 0, len = xs.length; i < len; ++i) {
  290. if (xs[i] === x) {
  291. return i;
  292. }
  293. }
  294. return -1;
  295. };
  296. var from$1 = isFunction(Array.from) ? Array.from : function (x) {
  297. return slice.call(x);
  298. };
  299. var keys = Object.keys;
  300. var hasOwnProperty = Object.hasOwnProperty;
  301. var get$1 = function (obj, key) {
  302. return has(obj, key) ? Option.from(obj[key]) : Option.none();
  303. };
  304. var has = function (obj, key) {
  305. return hasOwnProperty.call(obj, key);
  306. };
  307. var cat = function (arr) {
  308. var r = [];
  309. var push = function (x) {
  310. r.push(x);
  311. };
  312. for (var i = 0; i < arr.length; i++) {
  313. arr[i].each(push);
  314. }
  315. return r;
  316. };
  317. var getHelpTabs = function (editor) {
  318. return Option.from(editor.getParam('help_tabs'));
  319. };
  320. var shortcuts = [
  321. {
  322. shortcuts: ['Meta + B'],
  323. action: 'Bold'
  324. },
  325. {
  326. shortcuts: ['Meta + I'],
  327. action: 'Italic'
  328. },
  329. {
  330. shortcuts: ['Meta + U'],
  331. action: 'Underline'
  332. },
  333. {
  334. shortcuts: ['Meta + A'],
  335. action: 'Select all'
  336. },
  337. {
  338. shortcuts: [
  339. 'Meta + Y',
  340. 'Meta + Shift + Z'
  341. ],
  342. action: 'Redo'
  343. },
  344. {
  345. shortcuts: ['Meta + Z'],
  346. action: 'Undo'
  347. },
  348. {
  349. shortcuts: ['Access + 1'],
  350. action: 'Header 1'
  351. },
  352. {
  353. shortcuts: ['Access + 2'],
  354. action: 'Header 2'
  355. },
  356. {
  357. shortcuts: ['Access + 3'],
  358. action: 'Header 3'
  359. },
  360. {
  361. shortcuts: ['Access + 4'],
  362. action: 'Header 4'
  363. },
  364. {
  365. shortcuts: ['Access + 5'],
  366. action: 'Header 5'
  367. },
  368. {
  369. shortcuts: ['Access + 6'],
  370. action: 'Header 6'
  371. },
  372. {
  373. shortcuts: ['Access + 7'],
  374. action: 'Paragraph'
  375. },
  376. {
  377. shortcuts: ['Access + 8'],
  378. action: 'Div'
  379. },
  380. {
  381. shortcuts: ['Access + 9'],
  382. action: 'Address'
  383. },
  384. {
  385. shortcuts: ['Alt + 0'],
  386. action: 'Open help dialog'
  387. },
  388. {
  389. shortcuts: ['Alt + F9'],
  390. action: 'Focus to menubar'
  391. },
  392. {
  393. shortcuts: ['Alt + F10'],
  394. action: 'Focus to toolbar'
  395. },
  396. {
  397. shortcuts: ['Alt + F11'],
  398. action: 'Focus to element path'
  399. },
  400. {
  401. shortcuts: ['Ctrl + F9'],
  402. action: 'Focus to contextual toolbar'
  403. },
  404. {
  405. shortcuts: ['Shift + Enter'],
  406. action: 'Open popup menu for split buttons'
  407. },
  408. {
  409. shortcuts: ['Meta + K'],
  410. action: 'Insert link (if link plugin activated)'
  411. },
  412. {
  413. shortcuts: ['Meta + S'],
  414. action: 'Save (if save plugin activated)'
  415. },
  416. {
  417. shortcuts: ['Meta + F'],
  418. action: 'Find (if searchreplace plugin activated)'
  419. },
  420. {
  421. shortcuts: ['Meta + Shift + F'],
  422. action: 'Switch to or from fullscreen mode'
  423. }
  424. ];
  425. var KeyboardShortcuts = { shortcuts: shortcuts };
  426. var global$1 = tinymce.util.Tools.resolve('tinymce.Env');
  427. var convertText = function (source) {
  428. var mac = {
  429. alt: '&#x2325;',
  430. ctrl: '&#x2303;',
  431. shift: '&#x21E7;',
  432. meta: '&#x2318;',
  433. access: '&#x2303;&#x2325;'
  434. };
  435. var other = {
  436. meta: 'Ctrl ',
  437. access: 'Shift + Alt '
  438. };
  439. var replace = global$1.mac ? mac : other;
  440. var shortcut = source.split('+');
  441. var updated = map(shortcut, function (segment) {
  442. var search = segment.toLowerCase().trim();
  443. return has(replace, search) ? replace[search] : segment;
  444. });
  445. return global$1.mac ? updated.join('').replace(/\s/, '') : updated.join('+');
  446. };
  447. var ConvertShortcut = { convertText: convertText };
  448. var tab = function () {
  449. var shortcutList = map(KeyboardShortcuts.shortcuts, function (shortcut) {
  450. var shortcutText = map(shortcut.shortcuts, ConvertShortcut.convertText).join(' or ');
  451. return [
  452. shortcut.action,
  453. shortcutText
  454. ];
  455. });
  456. var tablePanel = {
  457. type: 'table',
  458. header: [
  459. 'Action',
  460. 'Shortcut'
  461. ],
  462. cells: shortcutList
  463. };
  464. return {
  465. name: 'shortcuts',
  466. title: 'Handy Shortcuts',
  467. items: [tablePanel]
  468. };
  469. };
  470. var KeyboardShortcutsTab = { tab: tab };
  471. var supplant = function (str, obj) {
  472. var isStringOrNumber = function (a) {
  473. var t = typeof a;
  474. return t === 'string' || t === 'number';
  475. };
  476. return str.replace(/\$\{([^{}]*)\}/g, function (fullMatch, key) {
  477. var value = obj[key];
  478. return isStringOrNumber(value) ? value.toString() : fullMatch;
  479. });
  480. };
  481. var global$2 = tinymce.util.Tools.resolve('tinymce.util.I18n');
  482. var urls = [
  483. {
  484. key: 'advlist',
  485. name: 'Advanced List'
  486. },
  487. {
  488. key: 'anchor',
  489. name: 'Anchor'
  490. },
  491. {
  492. key: 'autolink',
  493. name: 'Autolink'
  494. },
  495. {
  496. key: 'autoresize',
  497. name: 'Autoresize'
  498. },
  499. {
  500. key: 'autosave',
  501. name: 'Autosave'
  502. },
  503. {
  504. key: 'bbcode',
  505. name: 'BBCode'
  506. },
  507. {
  508. key: 'charmap',
  509. name: 'Character Map'
  510. },
  511. {
  512. key: 'code',
  513. name: 'Code'
  514. },
  515. {
  516. key: 'codesample',
  517. name: 'Code Sample'
  518. },
  519. {
  520. key: 'colorpicker',
  521. name: 'Color Picker'
  522. },
  523. {
  524. key: 'directionality',
  525. name: 'Directionality'
  526. },
  527. {
  528. key: 'emoticons',
  529. name: 'Emoticons'
  530. },
  531. {
  532. key: 'fullpage',
  533. name: 'Full Page'
  534. },
  535. {
  536. key: 'fullscreen',
  537. name: 'Full Screen'
  538. },
  539. {
  540. key: 'help',
  541. name: 'Help'
  542. },
  543. {
  544. key: 'hr',
  545. name: 'Horizontal Rule'
  546. },
  547. {
  548. key: 'image',
  549. name: 'Image'
  550. },
  551. {
  552. key: 'imagetools',
  553. name: 'Image Tools'
  554. },
  555. {
  556. key: 'importcss',
  557. name: 'Import CSS'
  558. },
  559. {
  560. key: 'insertdatetime',
  561. name: 'Insert Date/Time'
  562. },
  563. {
  564. key: 'legacyoutput',
  565. name: 'Legacy Output'
  566. },
  567. {
  568. key: 'link',
  569. name: 'Link'
  570. },
  571. {
  572. key: 'lists',
  573. name: 'Lists'
  574. },
  575. {
  576. key: 'media',
  577. name: 'Media'
  578. },
  579. {
  580. key: 'nonbreaking',
  581. name: 'Nonbreaking'
  582. },
  583. {
  584. key: 'noneditable',
  585. name: 'Noneditable'
  586. },
  587. {
  588. key: 'pagebreak',
  589. name: 'Page Break'
  590. },
  591. {
  592. key: 'paste',
  593. name: 'Paste'
  594. },
  595. {
  596. key: 'preview',
  597. name: 'Preview'
  598. },
  599. {
  600. key: 'print',
  601. name: 'Print'
  602. },
  603. {
  604. key: 'save',
  605. name: 'Save'
  606. },
  607. {
  608. key: 'searchreplace',
  609. name: 'Search and Replace'
  610. },
  611. {
  612. key: 'spellchecker',
  613. name: 'Spell Checker'
  614. },
  615. {
  616. key: 'tabfocus',
  617. name: 'Tab Focus'
  618. },
  619. {
  620. key: 'table',
  621. name: 'Table'
  622. },
  623. {
  624. key: 'template',
  625. name: 'Template'
  626. },
  627. {
  628. key: 'textcolor',
  629. name: 'Text Color'
  630. },
  631. {
  632. key: 'textpattern',
  633. name: 'Text Pattern'
  634. },
  635. {
  636. key: 'toc',
  637. name: 'Table of Contents'
  638. },
  639. {
  640. key: 'visualblocks',
  641. name: 'Visual Blocks'
  642. },
  643. {
  644. key: 'visualchars',
  645. name: 'Visual Characters'
  646. },
  647. {
  648. key: 'wordcount',
  649. name: 'Word Count'
  650. },
  651. {
  652. key: 'advcode',
  653. name: 'Advanced Code Editor*'
  654. },
  655. {
  656. key: 'formatpainter',
  657. name: 'Format Painter*'
  658. },
  659. {
  660. key: 'powerpaste',
  661. name: 'PowerPaste*'
  662. },
  663. {
  664. key: 'tinydrive',
  665. name: 'Tiny Drive*'
  666. },
  667. {
  668. key: 'tinymcespellchecker',
  669. name: 'Spell Checker Pro*'
  670. },
  671. {
  672. key: 'a11ychecker',
  673. name: 'Accessibility Checker*'
  674. },
  675. {
  676. key: 'linkchecker',
  677. name: 'Link Checker*'
  678. },
  679. {
  680. key: 'mentions',
  681. name: 'Mentions*'
  682. },
  683. {
  684. key: 'mediaembed',
  685. name: 'Enhanced Media Embed*'
  686. },
  687. {
  688. key: 'checklist',
  689. name: 'Checklist*'
  690. },
  691. {
  692. key: 'casechange',
  693. name: 'Case Change*'
  694. },
  695. {
  696. key: 'permanentpen',
  697. name: 'Permanent Pen*'
  698. },
  699. {
  700. key: 'pageembed',
  701. name: 'Page Embed*'
  702. },
  703. {
  704. key: 'tinycomments',
  705. name: 'Tiny Comments*'
  706. }
  707. ];
  708. var PluginUrls = { urls: urls };
  709. var tab$1 = function (editor) {
  710. var availablePlugins = function () {
  711. var premiumPlugins = [
  712. 'Accessibility Checker',
  713. 'Advanced Code Editor',
  714. 'Case Change',
  715. 'Checklist',
  716. 'Tiny Comments',
  717. 'Tiny Drive',
  718. 'Enhanced Media Embed',
  719. 'Format Painter',
  720. 'Link Checker',
  721. 'Mentions',
  722. 'MoxieManager',
  723. 'Page Embed',
  724. 'Permanent Pen',
  725. 'PowerPaste',
  726. 'Spell Checker Pro'
  727. ];
  728. var premiumPluginList = map(premiumPlugins, function (plugin) {
  729. return '<li>' + global$2.translate(plugin) + '</li>';
  730. }).join('');
  731. return '<div data-mce-tabstop="1" tabindex="-1">' + '<p><b>' + global$2.translate('Premium plugins:') + '</b></p>' + '<ul>' + premiumPluginList + '<li style="list-style: none; margin-top: 1em;"><a href="https://www.tiny.cloud/pricing/?utm_campaign=editor_referral&utm_medium=help_dialog&utm_source=tinymce" target="_blank">' + global$2.translate('Learn more...') + '</a></li>' + '</ul>' + '</div>';
  732. };
  733. var makeLink = curry(supplant, '<a href="${url}" target="_blank" rel="noopener">${name}</a>');
  734. var maybeUrlize = function (editor, key) {
  735. return find(PluginUrls.urls, function (x) {
  736. return x.key === key;
  737. }).fold(function () {
  738. var getMetadata = editor.plugins[key].getMetadata;
  739. return typeof getMetadata === 'function' ? makeLink(getMetadata()) : key;
  740. }, function (x) {
  741. return makeLink({
  742. name: x.name,
  743. url: 'https://www.tiny.cloud/docs/plugins/' + x.key
  744. });
  745. });
  746. };
  747. var getPluginKeys = function (editor) {
  748. var keys$1 = keys(editor.plugins);
  749. return editor.settings.forced_plugins === undefined ? keys$1 : filter(keys$1, not(curry(contains, editor.settings.forced_plugins)));
  750. };
  751. var pluginLister = function (editor) {
  752. var pluginKeys = getPluginKeys(editor);
  753. var pluginLis = map(pluginKeys, function (key) {
  754. return '<li>' + maybeUrlize(editor, key) + '</li>';
  755. });
  756. var count = pluginLis.length;
  757. var pluginsString = pluginLis.join('');
  758. var html = '<p><b>' + global$2.translate([
  759. 'Plugins installed ({0}):',
  760. count
  761. ]) + '</b></p>' + '<ul>' + pluginsString + '</ul>';
  762. return html;
  763. };
  764. var installedPlugins = function (editor) {
  765. if (editor == null) {
  766. return '';
  767. }
  768. return '<div data-mce-tabstop="1" tabindex="-1">' + pluginLister(editor) + '</div>';
  769. };
  770. var htmlPanel = {
  771. type: 'htmlpanel',
  772. presets: 'document',
  773. html: [
  774. installedPlugins(editor),
  775. availablePlugins()
  776. ].join('')
  777. };
  778. return {
  779. name: 'plugins',
  780. title: 'Plugins',
  781. items: [htmlPanel]
  782. };
  783. };
  784. var PluginsTab = { tab: tab$1 };
  785. var global$3 = tinymce.util.Tools.resolve('tinymce.EditorManager');
  786. var tab$2 = function () {
  787. var getVersion = function (major, minor) {
  788. return major.indexOf('@') === 0 ? 'X.X.X' : major + '.' + minor;
  789. };
  790. var version = getVersion(global$3.majorVersion, global$3.minorVersion);
  791. var changeLogLink = '<a href="https://www.tinymce.com/docs/changelog/?utm_campaign=editor_referral&utm_medium=help_dialog&utm_source=tinymce" target="_blank">TinyMCE ' + version + '</a>';
  792. var htmlPanel = {
  793. type: 'htmlpanel',
  794. html: '<p>' + global$2.translate([
  795. 'You are using {0}',
  796. changeLogLink
  797. ]) + '</p>',
  798. presets: 'document'
  799. };
  800. return {
  801. name: 'versions',
  802. title: 'Version',
  803. items: [htmlPanel]
  804. };
  805. };
  806. var VersionTab = { tab: tab$2 };
  807. var parseHelpTabsSetting = function (tabsFromSettings, tabs) {
  808. var newTabs = {};
  809. var names = map(tabsFromSettings, function (t) {
  810. if (typeof t === 'string') {
  811. if (has(tabs, t)) {
  812. newTabs[t] = tabs[t];
  813. }
  814. return t;
  815. } else {
  816. newTabs[t.name] = t;
  817. return t.name;
  818. }
  819. });
  820. return {
  821. tabs: newTabs,
  822. names: names
  823. };
  824. };
  825. var getNamesFromTabs = function (tabs) {
  826. var names = keys(tabs);
  827. var versionsIdx = indexOf(names, 'versions');
  828. versionsIdx.each(function (idx) {
  829. names.splice(idx, 1);
  830. names.push('versions');
  831. });
  832. return {
  833. tabs: tabs,
  834. names: names
  835. };
  836. };
  837. var parseCustomTabs = function (editor, customTabs) {
  838. var _a;
  839. var shortcuts = KeyboardShortcutsTab.tab();
  840. var plugins = PluginsTab.tab(editor);
  841. var versions = VersionTab.tab();
  842. var tabs = __assign((_a = {}, _a[shortcuts.name] = shortcuts, _a[plugins.name] = plugins, _a[versions.name] = versions, _a), customTabs.get());
  843. return getHelpTabs(editor).fold(function () {
  844. return getNamesFromTabs(tabs);
  845. }, function (tabsFromSettings) {
  846. return parseHelpTabsSetting(tabsFromSettings, tabs);
  847. });
  848. };
  849. var init = function (editor, customTabs) {
  850. return function () {
  851. var _a = parseCustomTabs(editor, customTabs), tabs = _a.tabs, names = _a.names;
  852. var foundTabs = map(names, function (name) {
  853. return get$1(tabs, name);
  854. });
  855. var dialogTabs = cat(foundTabs);
  856. var body = {
  857. type: 'tabpanel',
  858. tabs: dialogTabs
  859. };
  860. editor.windowManager.open({
  861. title: 'Help',
  862. size: 'medium',
  863. body: body,
  864. buttons: [{
  865. type: 'cancel',
  866. name: 'close',
  867. text: 'Close',
  868. primary: true
  869. }],
  870. initialData: {}
  871. });
  872. };
  873. };
  874. global.add('help', function (editor) {
  875. var customTabs = Cell({});
  876. var api = get(customTabs);
  877. var dialogOpener = init(editor, customTabs);
  878. Buttons.register(editor, dialogOpener);
  879. Commands.register(editor, dialogOpener);
  880. editor.shortcuts.add('Alt+0', 'Open help dialog', 'mceHelp');
  881. return api;
  882. });
  883. function Plugin () {
  884. }
  885. return Plugin;
  886. }());
  887. })();