ãã¥ãŒã¹ãèšäºãç·šéããããã®ããŒã¿ã«ã§ã¯ãTinyMCE WYSIWYGãšãã£ã¿ãŒããŒãžã§ã³4.2.4ã䜿çšããŠããŸãã 圌ã¯ãå®å®æ§ãšçæãããHTMLããŒã¯ã¢ããã®å質ã®äž¡æ¹ã®ç¹ã§ããã¹ãŠã®WYSIWYGãšãã£ã¿ãŒã®äžã§æé«ã§ããããšã瀺ããŸããã ããã«ããªãã£ã¹ã¢ããªã±ãŒã·ã§ã³ã§ã®äœæ¥ã«æ £ããŠãã人ã«ãšã£ãŠæãç°¡åã«åŠç¿ã§ããããšãããããŸããã
ãã ãããã®åºæ¬çãªæ©èœã ãã§ã¯ããã¹ãŠã®ç·šéäžã®ããŒãºãå®çŸããã«ã¯äžååã§ãã TinyMCEã®æ§æããã»ã¹ã«ã€ããŠã¯èª¬æããŸããããŸãã誰ããããŸããŸãªããŒãºãå¿ èŠãšãã次ã«ããã®ç¹ã¯ããã¥ã¡ã³ãã§éåžžã«ããã«ããŒãããŠããŸã ã ããããå€ãã®äººã«ãšã£ãŠæçšã§ããå¯èœæ§ããããã€ã³ã¿ãŒãããã§èŠã€ããã®ã¯ããã»ã©å®¹æã§ã¯ãªããœãªã¥ãŒã·ã§ã³ã«ã€ããŠã話ããŸãã
ãããŠæ¬æ¥ã¯ä»¥äžã«ã€ããŠã話ããŸãïŒ
- ç»åãæäœããŸãã
- å€éšãœãŒã¹ããããã¹ãã貌ãä»ãããšãã«HTMLããŒã¯ã¢ããããã©ãŒãããããŸã ã
- ã¿ã€ãã°ã©ã㣠ã
ç»åãæäœãã
æè¿ãç§ãã¡ã®èšäºã®ã€ã©ã¹ãã®æ°ã¯èããå¢å ããŸããã ãããã£ãŠãç§ãã¡ã«ãšã£ãŠæãéèŠãªã¿ã¹ã¯ã®1ã€ã¯ãç»åãæäœããããã®ã·ã³ãã«ã§äŸ¿å©ãªã¡ã«ããºã ã®å®è£ ã§ããã
ããã«ãç§ãã¡ãèªåãã¡ã®ããã«ç¹å®ããæãéèŠãªãã€ã³ãã瀺ããŸãã
- ã·ã³ãã«ãªç»åã¢ããããŒã;
- ããã¹ããžã®ç»åã®ç°¡åãªæ¿å ¥ã
- ããã¹ãã§æå®ããããµã€ãºã«ç»åã®ãµã€ãºãå€æŽããŸãã
- 倧ããªç»åãžã®ç°¡åãªãªã³ã¯ã
ã€ã³ã¿ãŒãããäžã®ã°ã©ãã£ãã¯ãæäœããããã®å€ãã®TinyMCEãã©ã°ã€ã³ïŒãã€ãã£ãã®ææã®MoxieManagerãã©ã°ã€ã³ãå«ãïŒãããããã¡ã€ã«ãããŒãžã£ãŒãæš¡å£ããŸãã ãã ããå®è·µãããããããã«ããšãã£ã¿ãŒã¯ãããã®è±å¯ãªæ©èœããã¹ãŠWindowsãšã¯ã¹ãããŒã©ãŒã«å¿ èŠãšããããã§ã¯ãããŸããã ããã§ããã®æŠå¿µãæŸæ£ããã€ã©ã¹ãã®èªã¿èŸŒã¿ãåçŽåããå¯èœãªéãèšäºã«è¿œå ããããšã«ããŸããã
ãããè¡ãããã«ãTinyMCEãŠã£ã³ããŠã®äžã«ãç¹ã«ç»åãæäœããããã®ç¹å¥ãªããã«ãè¿œå ããŸããã ç¹å®ã®ããã¹ããä¿®æ£ããå Žåããã®èšäºã«çŽæ¥é¢é£ããç»åã®ã¿ã衚瀺ããããšã«ããŸããã å€ãã¯ãããŸããããç»åãã«ã¿ãã°ããå¿ èŠã¯ãããŸããã ãŸããäžäžã®å Žåã«åããŠãããã«ã«2çªç®ã®ã¿ããè¿œå ããŸãããããã¯ããã¹ãŠã®èšäºã§å©çšå¯èœãªã°ããŒãã«ã€ã©ã¹ããæäœããããã®ãã®ã§ãïŒãã ãããŸã 䜿çšããŠããŸããïŒã
Dropzone.jsãã©ã°ã€ã³ã䜿çšããŠç»åãã¢ããããŒãããŸããã 次ã®æ©èœããããŸãã
- ãã©ãã°ã¢ã³ãããããã®ãµããŒãã
- Ajaxãä»ãããã«ãããŒãã
- ç°¡åãªã«ã¹ã¿ãã€ãºã
- äŸåé¢ä¿ãªã-ããã©JSã®ã¿ã
ãã®æ§æãšTinyMCEã®æ§æã«ã€ããŠã¯ãããã¥ã¡ã³ãã§è©³ãã説æãããŠããŸãã 圌ã®ä»äºãèªåã§ç°¡åã«ç ãããšãã§ãããšç¢ºä¿¡ããŠããã®ã§ãç§ã¯åœŒã«éäžããŸããã çŸåšå€ãã®ãã©ã°ã€ã³ããããããä»ã®åæ§ã®ãã©ã°ã€ã³ã䜿çšããããšãã§ããŸãã
ãã®ã¢ãããŒãã®ãããã§ãç»åã奜ããªããã«ãµãŒããŒã«ä¿åããã¢ããããŒãã®ããã»ã¹ãç°¡çŽ åããããšãã§ããŸããã ããããæçµçãªç®æšã¯ããŸã èšäºã®ããã¹ãã«ç»åãè¿œå ããããšã§ãã
ãã®ãããèšäºã«äœ¿çšã§ãããã¹ãŠã®ç»åã®ãªã¹ãã衚瀺ãããç¹å®ã®ããã«ãããããããã®ç»åãã¯ãªãã¯ãããšãã«ããããããã¹ãã«æ¿å ¥ããå¿ èŠããããŸãã ããã«ãããTinyMCE execCommandãšãã£ã¿ãŒã®æ©èœãå®çŸã§ããŸãã
tinymce.activeEditor.execCommand('mceInsertContent', false, img);
ããããããã¯ãã¹ãŠãšã¯çšé ãã§ã-æãèå³æ·±ãéšåã¯ãããããå§ãŸã£ãã°ããã§ãã åæ§ã«è¡åããŠãè¿œå ãããèŠçŽ ãå¶åŸ¡ããããã®è±å¯ãªæ©äŒãåŸãŸãã
ããšãã°ãèšäºçšã«äºçŽãããŠããã³ã³ãã³ãé åã®å¹ ã¯ãããŒã¿ã«ã§å³å¯ã«å¶éãããŠããŸãã ããŠã³ããŒãããç»åã®å¹ ãã¯ããã«åºãå Žåãå¿ èŠãªãµã€ãºã«çž®å°ãããå ã®ç»åãžã®ãªã³ã¯ãšå ±ã«æ¿å ¥ãããŸãã åæã«ãããªã倧ããªç»åãã©ãããŒã«æ¿å ¥ãããŸããã©ãããŒã¯èšäºã®å¹ å šäœã«åŒã䌞ã°ããã jQueryãã©ã°ã€ã³ã䜿çšããŠç«¯ã«æ²¿ã£ãŠäžéè²ã§å¡ãã€ã¶ãããŸã ã
é©åãªåäœã®æ±ºå®ã¯ãããã¹ãã«ã€ã©ã¹ããè¿œå ãã段éã§è¡ãããŸãã ãããããŠãŒã¶ãŒãæšæºã®TinyMCEã³ã³ãããŒã«ã§ç»åãç·šéãããã©ããªãã§ããããïŒ èŠçŽ ã®å¶åŸ¡ã倱ããªãããã«ããšãã£ã¿ãŒã®NodeChangeã€ãã³ããã³ãã©ãŒãè¿œå ããŸãïŒTinyMCEã®æ§ææã«ãããè¡ããŸãïŒã
tinymce.init({ /* */ setup: function (editor) { editor.on('NodeChange', function (e) { if (e.element.nodeName === 'IMG' && e.element.classList.contains('mce-object') === false) { /* */ } }); } });
TinyMCEã®ããŸããŸãªçµã¿èŸŒã¿èŠçŽ ïŒiframeãåã蟌ã¿ïŒã¯ã¹ã¿ãã€ã¡ãŒãžã«çœ®ãæãããããããéåžžã®å³ãšåºå¥ããããã«mce-objectã¯ã©ã¹ãååšããªãããšãããã«ç¢ºèªããŸãã
èŠçŽ ãå€åããã€ãã³ãããã£ãããããã®èŠçŽ ãã€ã¡ãŒãžã§ãããšå€æãããšãããã«å¯Ÿããå¶åŸ¡ãåãæ»ããŸãã ãµã€ãºïŒã€ãã³ããªããžã§ã¯ãã§èšå®ããããµã€ãºãéä¿¡ãããŸãïŒe.widthãe.heightïŒãå¶éãè¶ ããŠããããæ¯çïŒããã³ãããèµ·ãã£ãïŒã«éåããŠããªãããªã©ã確èªã§ããŸããå ã®ç»åãµã€ãºãdata- *å±æ§å±æ§ã
ãšãã£ã¿ãŒã§ç»åã®ãµã€ãºå€æŽããã£ããã£ããã«ã¯ãObjectResizeStartã€ãã³ããšObjectResizedã€ãã³ãã䜿çšããã ãã§ååã§ãããšèšãããšãã§ããŸã ã ãã ããç»åæ¿å ¥/ç·šéããŒã«ã䜿çšããŠã€ã©ã¹ãã®ãµã€ãºãå€æŽãããšããããã®ã€ãã³ãã¯æ©èœããŸããã
ãã1ã€ã®ããªãã¯ã¯ãæå®ãããå¶éïŒãããã¯ã³ã³ãã³ãé åã®å¶éãšç»åèªäœã®æ倧ãµã€ãºã®äž¡æ¹ã§ããå¯èœæ§ããããŸãïŒãè¶ ããŠç»åã䌞ã³ãªãããã«ããããšã§ããæ¿å ¥æã«ã¯ãstyleå±æ§ã§max-widthããã³max-heightããããã£ãèšå®ããŸãã
ãããã£ãŠãæåã®ã¿ã¹ã¯ã®ããã€ãã®ãã€ã³ãã解決ããŸãããããµãŒããŒåŽã®èšäºã§æå®ããããµã€ãºã«ç»åã®ãµã€ãºãå€æŽããããšããŸã å¿é ããŠããŸãããã®ãããããŒã¿ã«ã®èšªåè ã¯å€§ããªïŒéãïŒã€ã©ã¹ããã¢ããããŒãããå¿ èŠããªããèŠèŠçã«ã¯çž®å°ãããŸãã
bbã³ãŒãã䜿çšããŠããã¹ããç·šéãããšããã®åé¡ã¯éåžžã«ç°¡åã«è§£æ±ºãããŸããã³ãã³ããåŠçããŠããã¹ãã«æ¿å ¥ãããšãã«ç»åã®ãµã€ãºãå€æŽããã ãã§ãã WYSIWYGãšãã£ã¿ãŒã®å Žåã2ã€ã®ãªãã·ã§ã³ããããŸããçæãããHTMLã解æããããç¹å¥ãªãªã³ã¯ã䜿çšããŸãã 2çªç®ãéžæããŸããã
ããã¯ãšã³ããäœã«æžãããŠãããã«é¢ä¿ãªããç¹å®ã®ãã©ã¡ãŒã¿ãŒã«åŸã£ãŠé©åãªã€ã¡ãŒãžããªã³ã¯ã«åœ¢æããããã£ãã·ã¥ã«é 眮ãããããšã確èªã§ããŸãã ãšãã£ã¿ãŒã«èŠçŽ ãæ¿å ¥ãããšãã察å¿ãããªã³ã¯ã®çæã¯éåžžã«ç°¡åã§ãç»åã®ç·šéæã«NodeChangeã€ãã³ããã³ãã©ãŒãåã³åœ¹ç«ã¡ãŸãã èŠããŠããã¹ãäž»ãªããšã¯ãèŠçŽ ã®srcå±æ§ãå€æŽãããšããdata-mce-srcå±æ§ãå€æŽããå¿ èŠãããããšã§ãã
ããã«ããã®ãããªãã³ãã©ãŒããããŸãïŒjQueryã¯DOMã®æäœã«äœ¿çšãããŸãïŒ
resizeImage = function ($image, width, height) { var originalWidth = parseInt($image.data('originalWidth'), 10), originalHeight = parseInt($image.data('originalHeight'), 10), ratio, defaultWidth, defaultHeight, link = $image.attr('src'), linkParams; if (typeof width === 'undefined' || width === null) { width = parseInt($image.attr('width'), 10); } if (typeof height === 'undefined' || height === null) { height = parseInt($image.attr('height'), 10); } defaultWidth = width; defaultHeight = height; /* , */ if (isNaN(originalWidth) || originalWidth === 0 || isNaN(originalHeight) || originalHeight === 0) { $image .attr({ width: '', height: '' }) .css({ maxWidth: 'none', maxHeight: 'none' }); originalWidth = $image.width(); originalHeight = $image.height(); ratio = originalWidth / originalHeight; var maxWidth = Math.min(originalWidth, pageWidth), maxHeight = (maxWidth === originalWidth ? originalHeight : Math.round(maxWidth / ratio)); $image .attr({ width: width, height: height, 'data-original-width': originalWidth, 'data-original-height': originalHeight }) .css({ maxWidth: maxWidth, maxHeight: maxHeight }); } else { ratio = originalWidth / originalHeight; } width = Math.min(originalWidth, pageWidth, width); height = (width === originalWidth ? originalHeight : Math.round(width / ratio)); if (link.substr(0, 7) === 'http://') { linkParams = link.substr(7).split('/'); } else { linkParams = link.split('/'); } /* , */ if (linkParams.length === 6 && linkParams[0] === window.location.host && (linkParams[1] === 'r' || linkParams[1] === 'c') && isDecimal(linkParams[2]) && isDecimal(linkParams[3])) { link = 'http://' + linkParams[0] + '/' + linkParams[1] + '/' + width + '/' + height + '/' + linkParams[4] + '/' + linkParams[5]; $image.attr({ src: link, 'data-mce-src': link }); } if (width !== defaultWidth || height !== defaultHeight) { $image.attr({ width: width, height: height }); } } tinymce.init({ /* */ setup: function (editor) { editor.on('NodeChange', function (e) { if (e.element.nodeName === 'IMG' && e.element.classList.contains('mce-object') === false) { resizeImage($(e.element), e.width, e.height); } }); } });
ã芧ã®ãšãããå ã®ç»åãµã€ãºãdata- *å±æ§ã§æå®ãããŠããªãå Žåã§ããé¢æ°ã¯ããããèªåã§èšç®ããå¿ èŠãªãã¹ãŠã®ãã§ãã¯ãå®è¡ããããšããŸãã ãã®ã¢ãããŒãã«ãããããŒã¿ã«ã«ä»¥åã«èç©ããããããªã¢ã«ãšã®äºææ§ã確ä¿ã§ããŸãã
HTMLããŒã¯ã¢ããã®ãã©ãŒããã
ç§ãã¡ã«æãå°é£ããããããã®ã¯ãã®ä»äºã§ããã
TinyMCEã®ããã¥ã¡ã³ãã泚ææ·±ã調æ»ããçµæãWordãŸãã¯ä»ã®ãµã€ãããããã¹ããæ¿å ¥ãããšãã«ããŸããŸãªãŽãã®HTMLããŒã¯ã¢ãããã¯ãªã¢ããåæã«ãŠãŒã¶ãŒã®æ©èœãäœäžãããªãããã«ãšãã£ã¿ãŒãæ§æããæ¹æ³ããªãããšãããããŸããã ãŸããã€ã³ã¿ãŒãããäžã®ããŒãºãæºããæ¢è£œã®ãœãªã¥ãŒã·ã§ã³ãèŠã€ãããŸããã§ããã
ç§ã¯èªåã§å¯ŸåŠããªããã°ãªããŸããã§ãããããããgithub.com/WEACOMRU/html-formattingãåŸããã®ã§ã ã
ãªããžããªã«è¡šç€ºãããé¢æ°ã¯ãæž¡ãããã³ã³ããã®ã³ã³ãã³ããç¹å®ã®ã«ãŒã«ã«åŸã£ãŠããããšã確èªããäžèŠãªãã®ããã¹ãŠåãé€ããŸãã ããã¯çŽç²ãªJSã§æžãããŠãããäŸåé¢ä¿ãå¿ èŠãšãããMITã®äžã§ã©ã€ã»ã³ã¹ãããŠããŸãã
TinyMCEã«ããã¹ããæ¿å ¥ãããšãã«ããŒã¯ã¢ããããã©ãŒãããããã«ã¯ãpaste_postprocessã€ãã³ããã³ãã©ãŒãæå®ããå¿ èŠããããŸãã
tinymce.init({ /* */ paste_postprocess: function (plugin, args) { var valid_elements = { /* */ }; htmlFormatting(args.node, valid_elements); } });
githubã§ã«ãŒã«ãèšå®ããååãç解ããããšã¯ã§ããŸããããã®æ©èœãã©ã®ããã«æ©èœãããã«ã€ããŠèª¬æããŸãã
æ¢è£œã®ãœãªã¥ãŒã·ã§ã³ãèŠããšããã¹ãŠãéåžžã«åºæ¬çãªãã®ã§ããããšãããããŸããã«ãŒãã§ã¯ãHTMLã³ã³ãããŒã®ãã¹ãŠã®åããœãŒãããããããã«å¯ŸããŠåå¥ã®åŠçãéå§ããŸãã ãã¹ãã®æãæ·±ãã¬ãã«ã«éãããŸã§ãé¢æ°ãååž°çã«å®è¡ããŸãã
process = function (node, valid_elements) { var taskSet = [], i; for (i = 0; i < node.childNodes.length; i++) { processNode(node.childNodes[i], valid_elements, taskSet); } doTasks(taskSet); }
åã ã®èŠçŽ ãåŠçããããã»ã¹ã§ã¯ããŸãHTMLèŠçŽ ãŸãã¯ããã¹ãã®åŠçå 容ã確èªããŸãã
processNode = function (node, valid_elements, taskSet) { var rule; if (node.nodeType === 1) { /* HTML- */ } else if (node.nodeType === 3) { /* */ } }
ããã¹ãèŠçŽ ã¯ç¬èªã®æ¹æ³ã§åŠçãããŸã-è€éãªã¹ããŒã¹ã¯ãã¹ãŠåé€ãããŸãã
processText = function (node) { node.nodeValue = node.nodeValue.replace(/\xa0/g, ' '); }
ããã¯ãã³ããŒãããããã¹ãã«äžå¯è§£ãªã®ã£ãããæ®ã£ãŠããããã«ç·šéè ãå°é£ãçµéšãããããèšäºã®ãã€ãããŒã·ã§ã³ãç Žã£ãããã§ãã ãã®æé ã¯ãã®åé¡ã解決ããŸãããæãŸãããªãå ŽåããããŸãããã®å Žåã¯ãé¢æ°ã®ãœãŒã¹ã³ãŒããå¿ èŠã«å¿ããŠåŸ®èª¿æŽããŠãã ããã
HTMLèŠçŽ ã¯ãæå®ãããã«ãŒã«ã«åŸã£ãŠåŠçãããŸãã
getRule = function (node, valid_elements) { var re = new RegExp('(?:^|,)' + node.tagName.toLowerCase() + '(?:,|$)'), rules = Object.keys(valid_elements), rule = false, i; for (i = 0; i < rules.length && !rule; i++) { if (re.test(rules[i])) { rule = valid_elements[rules[i]]; } } return rule; } ... processNode = function (node, valid_elements, taskSet) { var rule; if (node.nodeType === 1) { rule = getRule(node, valid_elements); ... } else if (node.nodeType === 3) { processText(node); } }
ãã®èŠçŽ ã®ã«ãŒã«ãèŠã€ãããªãå Žåã¯ãå±éãããŸãã ãã®åèŠçŽ ã¯ãã¹ãŠæ¬¡ã®ã¬ãã«ã«ç§»åãããã®èŠçŽ ã眮ãæããŸãã
unpack = function (node) { var parent = node.parentNode; while (node.childNodes.length > 0) { parent.insertBefore(node.childNodes[0], node); } } ... if (rule) { if (typeof rule.valid_elements === 'undefined') { process(node, valid_elements); } else { process(node, rule.valid_elements) } ... } else { process(node, valid_elements); if (node.hasChildNodes()) { taskSet.push({ task: 'unpack', node: node }); } taskSet.push({ task: 'remove', node: node }) }
察å¿ããã«ãŒã«ãããå ŽåãèŠçŽ ã空ã§ãªãå Žåã¯ä¿åãããŸãïŒã¹ããŒã¹ã ãã§ãªãããã¹ãã¬ãã«ã§å°ãªããšã1ã€ã®ããã¹ãèŠçŽ ãå«ãã³ã³ãããŒïŒã¯ç©ºã§ã¯ãªããšèŠãªããããã空ã®èŠçŽ ãåé€ããèšå®ãã«ãŒã«ã«ãããŸããïŒno_emptyïŒã
isEmpty = function (node) { var result = true, re = /^\s*$/, i, child; if (node.hasChildNodes()) { for (i = 0; i < node.childNodes.length && result; i++) { child = node.childNodes[i]; if (child.nodeType === 1) { result = isEmpty(child); } else if (child.nodeType === 3 && !re.test(child.nodeValue)) { result = false; } } } return result; } ... if (rule.no_empty && isEmpty(node)) { taskSet.push({ task: 'remove', node: node }); } else { ... }
ã«ãŒã«ã®æ§æã«å¿ããŠãèŠçŽ ã®ã¹ã¿ã€ã«ãšã¯ã©ã¹ããã§ãã¯ãããŸãã
checkStyles = function (node, valid_styles) { var i, re; if (typeof valid_styles === 'string' && node.style.length) { for (i = node.style.length - 1; i >= 0; i--) { re = new RegExp('(?:^|,)' + node.style[i] + '(?:,|$)'); if (!re.test(valid_styles)) { node.style[node.style[i]] = ''; } } if (!node.style.cssText) { node.removeAttribute('style'); } } } checkClasses = function (node, valid_classes) { var i, re; if (typeof valid_classes === 'string' && node.classList.length) { for (i = node.classList.length - 1; i >= 0; i--) { re = new RegExp('(?:^|\\s)' + node.classList[i] + '(?:\\s|$)'); if (!re.test(valid_classes)) { node.classList.remove(node.classList[i]); } } if (!node.className) { node.removeAttribute('class'); } } } ... checkStyles(node, rule.valid_styles); checkClasses(node, rule.valid_classes);
å€æãšãã®è¿œå åŠçã®å¿ èŠæ§ãããã«ç¢ºèªããèå¥åãåé€ããŸãã
if (rule.convert_to) { taskSet.push({ task: 'convert', node: node, convert_to: rule.convert_to }); } else if (node.id) { node.removeAttribute('id'); } if (typeof rule.process === 'function') { taskSet.push({ task: 'process', node: node, process: rule.process }); }
å€æäžã«ãçŸåšã®ã³ã³ããã®ãã¹ãŠã®åèŠçŽ ãé 眮ãããæ°ããèŠçŽ ãäœæãããå©çšå¯èœãªå Žåã¯ã¹ã¿ã€ã«ãšã¯ã©ã¹ã転éããããã®åŸã³ã³ããããã®æ°ããèŠçŽ ã«çœ®ãæããããããšã«æ³šæããŠãã ããã
convert = function (node, convert_to) { var parent = node.parentNode, converted = document.createElement(convert_to); if (node.style.cssText) { converted.style.cssText = node.style.cssText; } if (node.className) { converted.className = node.className; } while (node.childNodes.length > 0) { converted.appendChild(node.childNodes[0]); } parent.replaceChild(converted, node); }
æ¢ã«ãæ°ã¥ããããããŸããããDOMã䜿çšãããã¹ãŠã®æäœã¯ãã¥ãŒã«å ¥ããããèŠçŽ ã®çŸåšã®ã«ãŒãã®æåŸã§å®è¡ãããéåããªãããã«ããŸãã
doTasks = function (taskSet) { var i; for (i = 0; i < taskSet.length; i++) { switch (taskSet[i].task) { case 'remove': taskSet[i].node.parentNode.removeChild(taskSet[i].node); break; case 'convert': convert(taskSet[i].node, taskSet[i].convert_to); break; case 'process': taskSet[i].process(taskSet[i].node); break; case 'unpack': unpack(taskSet[i].node); break; } } }
ãªããžããªã«é¢æ°ã®ãã¢ããããŸãã ãã®èª¬æããçŽç²ãªåœ¢ã§ããªããæºè¶³ãããªãããå°ãªããšãã€ããªãã®ãŒã®ã€ã³ã¹ãã¬ãŒã·ã§ã³ãšããŠåœ¹ç«ã€å Žåãç¹å®ã®ããŒãºã«åãããŠæ©èœãä¿®æ£ããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ã¿ã€ãã°ã©ãã£
ãããŠæåŸã«ãæãç°¡åãªã®ã¯å°å·äŒç€Ÿã®çŽ¹ä»ã§ãã Denis Seleznev hcodes github.com/typograf/typografã®ãã°ãããã¹ã¯ãªããã䜿çšããŸããã
å¿ èŠãªããšã¯ãå°ããªTinyMCEãã©ã°ã€ã³ãæžãããšã ãã§ãã
tinymce.PluginManager.add('typograf', function (editor, url) { 'use strict'; var scriptLoader = new tinymce.dom.ScriptLoader(), tp, typo = function () { if (tp) { editor.setContent(tp.execute(editor.getContent())); editor.undoManager.add(); } }; scriptLoader.add(url + '/typograf.min.js'); scriptLoader.loadQueue(function () { tp = new Typograf({ lang: 'ru', mode: 'name' }); }); editor.addButton('typograf', { text: '', icon: 'blockquote', onclick: typo }); editor.addMenuItem('typograf', { context: 'format', text: '', icon: 'blockquote', onclick: typo }); });
ã芧ã®ãšãããã¿ã€ãã°ã©ãã£ã¹ã¯ãªããã¯ãã©ã°ã€ã³ãã©ã«ããŒã«ããããšãã£ã¿ãŒhttps://www.tinymce.com/docs/api/class/tinymce.dom.scriptloader/ã䜿çšããŠéåæã«ããŒããããŸã ã ä»ã®æ©èœã§ããªã³ã¿ãŒã䜿çšããå Žåã¯ãTinyMCEããã¹ã¯ãªãããåå¥ã«ããŠã³ããŒãã§ããŸãã
ã¹ã¯ãªãããããŒãããããšãtpå€æ°ãåæåãããŸãã ãšãã£ã¿ãŒã®ã³ã³ãã³ãã«ã¯ã getContentïŒïŒããã³setContentïŒïŒã¡ãœããã䜿çšããŠã¢ã¯ã»ã¹ããŸãã ãã¡ãããã¿ã€ãã°ã©ãã£ãé©çšããåŸã undoManagerã䜿çšããŠå¥ã®ããŒã«ããã¯ã¬ãã«ã®å€æŽãè¿œå ããå¿ èŠããããŸãã
ãã¿ã³ãšã¡ãã¥ãŒé ç®ã®ã¢ã€ã³ã³ãšããŠãåŒçšç¬Šã«ã¯ãšãã£ã¿ãŒã®ãã©ã³ãã¢ã€ã³ã³ã䜿çšããŸããã skin.cssãã¡ã€ã«ïŒ.mce-i- *ã¯ã©ã¹ïŒã§TinyMCEã®å©çšå¯èœãªã¢ã€ã³ã³ã®ãªã¹ããèŠã€ããããšãã§ããŸãã
ããã ãã§ããç§ãã¡ã®çµéšãããªãèªèº«ã®ã¢ã€ãã¢ãå®è£ ãã解決çãèŠã€ããã®ã«ãããæéãççž®ããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã