// 添加 Holder 插件 KindEditor.plugin('holder', function(K) { var self = this; if (!self.options.htmlTags) { self.options.htmlTags = {}; } if (!self.options.htmlTags.div) { self.options.htmlTags.div = []; } if (!self.options.htmlTags.span) { self.options.htmlTags.span = []; } self.options.htmlTags.div.push('data-holder', 'data-holder-edit', 'contenteditable'); self.options.htmlTags.span.push('data-holder', 'data-holder-edit', 'contenteditable'); self.afterCreate(function() { $(self.edit.doc.head).append([ '' ].join('\n')); $(self.edit.doc).find('.holder-element[contenteditable="true"]').attr('contenteditable', false); if (self.options.holderEdit) { $(self.edit.doc).on('click', '.holder-element', function(e) { var $ele = $(this); if($(e.target).is('.holder-value')) { $ele.remove(); self.sync(); return; } showHolderEditModal($ele.attr('data-holder'), $ele.find('.holder-value').text(), $ele.hasClass('holder-block'), function(text, value, asBlock) { var $holderElement = $(asBlock ? '
' : '').attr('data-holder', text).attr('contenteditable', false).addClass(asBlock ? 'holder-block' : 'holder-span').addClass('holder-element'); $holderElement.append($(asBlock ? '
' : '').addClass('holder-value').text(value)); if (self.options.holderEditText) { $holderElement.attr('data-holder-edit', self.options.holderEditText); } $ele.replaceWith($holderElement); self.edit.focus(); self.sync(); }); }); } }); // 点击图标时执行 self.clickToolbar('holder', function() { showHolderEditModal('', '', false, function(text, value, asBlock) { if(text) { var $holderElement = $(asBlock ? '
' : '').attr('data-holder', text).attr('contenteditable', false).addClass(asBlock ? 'holder-block' : 'holder-span').addClass('holder-element'); $holderElement.append($(asBlock ? '
' : '').addClass('holder-value').text(value)); if(self.options.holderEditText) { $holderElement.attr('data-holder-edit', self.options.holderEditText); } self.insertHtml($holderElement[0].outerHTML + ' ' + (asBlock ? '
' : '')); } }); }); }); function showHolderEditModal(placeholder, value, asBlock, callback) { if(typeof placeholder === 'function') { callback = placeholder; placeholder = ''; value = ''; asBlock = false; } placeholder = placeholder || ''; value = value || ''; $('#holderText').val(placeholder); $('#holderValue').val(value); $('#holderAsBlock').prop('checked', !!asBlock); $('#holderModal').modal('show'); if(typeof afterHolderShow == 'function') afterHolderShow(value); $('#holderSaveBtn').off('click').on('click', function() { if(callback) { callback($('#holderText').val(), $('#holderValue').val(), $('#holderAsBlock').is(':checked')) } $('#holderModal').modal('hide'); }); };