// 添加 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');
});
};