11776c5c5Sdh-tools(function () { 21776c5c5Sdh-tools 'use strict'; 31776c5c5Sdh-tools 41776c5c5Sdh-tools var iconTokenPattern = /<icon:([A-Za-z0-9_-]+)(?:\|(toc|notoc))?>/g; 51776c5c5Sdh-tools 61776c5c5Sdh-tools function getFontelloInfo() { 71776c5c5Sdh-tools if (!window.JSINFO || !window.JSINFO.plugin_fontello) return null; 81776c5c5Sdh-tools return window.JSINFO.plugin_fontello; 91776c5c5Sdh-tools } 101776c5c5Sdh-tools 111776c5c5Sdh-tools function tokenShowsInToc(flag, info) { 121776c5c5Sdh-tools if (flag === 'notoc') return false; 131776c5c5Sdh-tools if (flag === 'toc') return true; 141776c5c5Sdh-tools 151776c5c5Sdh-tools return !!info.showInToc; 161776c5c5Sdh-tools } 171776c5c5Sdh-tools 181776c5c5Sdh-tools function createIconSpan(cssClass) { 191776c5c5Sdh-tools var span = document.createElement('span'); 201776c5c5Sdh-tools span.className = 'fontello-icon ' + cssClass; 211776c5c5Sdh-tools span.setAttribute('aria-hidden', 'true'); 221776c5c5Sdh-tools return span; 231776c5c5Sdh-tools } 241776c5c5Sdh-tools 251776c5c5Sdh-tools function replaceTextNodeTokens(textNode, info) { 261776c5c5Sdh-tools var text = textNode.nodeValue; 271776c5c5Sdh-tools var fragment = document.createDocumentFragment(); 281776c5c5Sdh-tools var lastIndex = 0; 291776c5c5Sdh-tools var changed = false; 301776c5c5Sdh-tools var match; 311776c5c5Sdh-tools 321776c5c5Sdh-tools iconTokenPattern.lastIndex = 0; 331776c5c5Sdh-tools while ((match = iconTokenPattern.exec(text)) !== null) { 341776c5c5Sdh-tools var raw = match[0]; 351776c5c5Sdh-tools var name = match[1]; 361776c5c5Sdh-tools var flag = match[2] || ''; 371776c5c5Sdh-tools var cssClass = info.icons && info.icons[name]; 381776c5c5Sdh-tools var visible = tokenShowsInToc(flag, info); 391776c5c5Sdh-tools 401776c5c5Sdh-tools if (match.index > lastIndex) { 411776c5c5Sdh-tools fragment.appendChild(document.createTextNode(text.slice(lastIndex, match.index))); 421776c5c5Sdh-tools } 431776c5c5Sdh-tools 441776c5c5Sdh-tools if (cssClass && visible) { 451776c5c5Sdh-tools fragment.appendChild(createIconSpan(cssClass)); 461776c5c5Sdh-tools changed = true; 471776c5c5Sdh-tools } else if (cssClass) { 481776c5c5Sdh-tools changed = true; 491776c5c5Sdh-tools } else { 501776c5c5Sdh-tools fragment.appendChild(document.createTextNode(raw)); 511776c5c5Sdh-tools } 521776c5c5Sdh-tools 531776c5c5Sdh-tools lastIndex = match.index + raw.length; 541776c5c5Sdh-tools } 551776c5c5Sdh-tools 561776c5c5Sdh-tools if (!changed) return; 571776c5c5Sdh-tools if (lastIndex < text.length) { 581776c5c5Sdh-tools fragment.appendChild(document.createTextNode(text.slice(lastIndex))); 591776c5c5Sdh-tools } 601776c5c5Sdh-tools 611776c5c5Sdh-tools textNode.parentNode.replaceChild(fragment, textNode); 621776c5c5Sdh-tools } 631776c5c5Sdh-tools 641776c5c5Sdh-tools function replaceTocLinkTokens(link, info) { 651776c5c5Sdh-tools var walker = document.createTreeWalker(link, NodeFilter.SHOW_TEXT, null, false); 661776c5c5Sdh-tools var nodes = []; 671776c5c5Sdh-tools var node; 681776c5c5Sdh-tools 691776c5c5Sdh-tools while ((node = walker.nextNode()) !== null) { 701776c5c5Sdh-tools if (node.nodeValue.indexOf('<icon:') !== -1) { 711776c5c5Sdh-tools nodes.push(node); 721776c5c5Sdh-tools } 731776c5c5Sdh-tools } 741776c5c5Sdh-tools 751776c5c5Sdh-tools nodes.forEach(function (textNode) { 761776c5c5Sdh-tools replaceTextNodeTokens(textNode, info); 771776c5c5Sdh-tools }); 781776c5c5Sdh-tools } 791776c5c5Sdh-tools 801776c5c5Sdh-tools function renderTocIcons() { 811776c5c5Sdh-tools var info = getFontelloInfo(); 821776c5c5Sdh-tools if (!info || !info.icons) return; 831776c5c5Sdh-tools 841776c5c5Sdh-tools Array.prototype.forEach.call(document.querySelectorAll('#dw__toc a'), function (link) { 851776c5c5Sdh-tools replaceTocLinkTokens(link, info); 861776c5c5Sdh-tools }); 871776c5c5Sdh-tools } 881776c5c5Sdh-tools 891776c5c5Sdh-tools function scheduleTocIconRendering() { 901776c5c5Sdh-tools window.setTimeout(renderTocIcons, 0); 911776c5c5Sdh-tools } 921776c5c5Sdh-tools 931776c5c5Sdh-tools if (document.readyState === 'loading') { 941776c5c5Sdh-tools document.addEventListener('DOMContentLoaded', scheduleTocIconRendering); 951776c5c5Sdh-tools } else { 961776c5c5Sdh-tools scheduleTocIconRendering(); 971776c5c5Sdh-tools } 981776c5c5Sdh-tools 991776c5c5Sdh-tools window.addBtnActionFontello = function ($btn, props, edid) { 1001776c5c5Sdh-tools if (!props.list || !props.list.length) return ''; 1011776c5c5Sdh-tools 1021776c5c5Sdh-tools var pickerid = 'picker' + (pickercounter++); 1031776c5c5Sdh-tools var $picker = jQuery(document.createElement('div')) 1041776c5c5Sdh-tools .addClass('picker a11y pk_fontello') 1051776c5c5Sdh-tools .attr('id', pickerid) 106*e9d41e7dSDaniel Hofer .attr('aria-hidden', 'true') 1071776c5c5Sdh-tools .css('position', 'absolute') 108*e9d41e7dSDaniel Hofer .removeAttr('hidden'); 1091776c5c5Sdh-tools 1101776c5c5Sdh-tools jQuery.each(props.list, function (_, icon) { 1111776c5c5Sdh-tools var name = icon.name || ''; 1121776c5c5Sdh-tools var cssClass = icon['class'] || ''; 1131776c5c5Sdh-tools var insert = icon.insert || '<icon:' + name + '>'; 1141776c5c5Sdh-tools if (!name || !cssClass) return; 1151776c5c5Sdh-tools 1161776c5c5Sdh-tools jQuery(document.createElement('button')) 1171776c5c5Sdh-tools .addClass('pickerbutton fontello-picker-button') 1181776c5c5Sdh-tools .attr('type', 'button') 1191776c5c5Sdh-tools .attr('title', name) 1201776c5c5Sdh-tools .attr('aria-label', name) 1211776c5c5Sdh-tools .attr('aria-controls', edid) 1221776c5c5Sdh-tools .on('click', function (event) { 1231776c5c5Sdh-tools insertAtCarret(edid, insert); 1241776c5c5Sdh-tools pickerClose(); 1251776c5c5Sdh-tools event.preventDefault(); 1261776c5c5Sdh-tools }) 1271776c5c5Sdh-tools .append( 1281776c5c5Sdh-tools jQuery(document.createElement('span')) 1291776c5c5Sdh-tools .addClass('fontello-icon ' + cssClass) 1301776c5c5Sdh-tools .attr('aria-hidden', 'true') 1311776c5c5Sdh-tools ) 1321776c5c5Sdh-tools .appendTo($picker); 1331776c5c5Sdh-tools }); 1341776c5c5Sdh-tools 1351776c5c5Sdh-tools jQuery('body').append($picker); 1361776c5c5Sdh-tools 1371776c5c5Sdh-tools $btn.on('click', function (event) { 1381776c5c5Sdh-tools pickerToggle(pickerid, $btn); 139*e9d41e7dSDaniel Hofer $picker.removeAttr('hidden').prop('hidden', false); 1401776c5c5Sdh-tools event.preventDefault(); 1411776c5c5Sdh-tools }); 1421776c5c5Sdh-tools 1431776c5c5Sdh-tools return pickerid; 1441776c5c5Sdh-tools }; 1451776c5c5Sdh-tools}()); 146