135 lines
4.2 KiB
JavaScript
135 lines
4.2 KiB
JavaScript
/*******************************************************************************
|
||
* KindEditor - WYSIWYG HTML Editor for Internet
|
||
* Copyright (C) 2006-2011 kindsoft.net
|
||
*
|
||
* @author Roddy <luolonghao@gmail.com>
|
||
* @site http://www.kindsoft.net/
|
||
* @licence http://www.kindsoft.net/license.php
|
||
*******************************************************************************/
|
||
|
||
KindEditor.plugin('emoticons', function(K) {
|
||
var self = this, name = 'emoticons',
|
||
|
||
path = self.emotionsBasePath + (self.emoticonsPath || self.pluginsPath + 'emoticons/images/'),
|
||
allowPreview = self.allowPreviewEmoticons === undefined ? true : self.allowPreviewEmoticons,
|
||
currentPageNum = 1;
|
||
self.clickToolbar(name, function() {
|
||
this.edit.focus();//<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>_getSel()Ϊ<><CEAA> <20><><EFBFBD><EFBFBD>
|
||
var rows = 5, cols = 9, total = 135, startNum = 0,
|
||
cells = rows * cols, pages = Math.ceil(total / cells),
|
||
colsHalf = Math.floor(cols / 2),
|
||
wrapperDiv = K('<div class="ke-plugin-emoticons"></div>'),
|
||
elements = [],
|
||
menu = self.createMenu({
|
||
name : name,
|
||
beforeRemove : function() {
|
||
removeEvent();
|
||
}
|
||
});
|
||
menu.div.append(wrapperDiv);
|
||
var previewDiv, previewImg;
|
||
if (allowPreview) {
|
||
previewDiv = K('<div class="ke-preview"></div>').css('right', 0);
|
||
previewImg = K('<img class="ke-preview-img" src="' + path + startNum + '.gif" />');
|
||
wrapperDiv.append(previewDiv);
|
||
previewDiv.append(previewImg);
|
||
}
|
||
function bindCellEvent(cell, j, num) {
|
||
if (previewDiv) {
|
||
cell.mouseover(function() {
|
||
if (j > colsHalf) {
|
||
previewDiv.css('left', 0);
|
||
previewDiv.css('right', '');
|
||
} else {
|
||
previewDiv.css('left', '');
|
||
previewDiv.css('right', 0);
|
||
}
|
||
previewImg.attr('src', path + num + '.gif');
|
||
K(this).addClass('ke-on');
|
||
});
|
||
} else {
|
||
cell.mouseover(function() {
|
||
K(this).addClass('ke-on');
|
||
});
|
||
}
|
||
cell.mouseout(function() {
|
||
K(this).removeClass('ke-on');
|
||
});
|
||
cell.click(function(e) {
|
||
if(/^\s*<\w*\s*\w*\=\"\w*\"\s*\w*\=\"\w*\:\s*\#\d*\;\s*\w*\-\w*\:\s*\w*\;\"\>[\u4e00-\u9fa5]*<\/\w*\>\s*$/.test(self.edit.html())){
|
||
self.edit.html('');
|
||
}
|
||
self.insertHtml('<img src="' + path + num + '.gif" border="0" alt="" />').hideMenu().focus();
|
||
e.stop();
|
||
});
|
||
}
|
||
function createEmoticonsTable(pageNum, parentDiv) {
|
||
var table = document.createElement('table');
|
||
parentDiv.append(table);
|
||
if (previewDiv) {
|
||
K(table).mouseover(function() {
|
||
previewDiv.show('block');
|
||
});
|
||
K(table).mouseout(function() {
|
||
previewDiv.hide();
|
||
});
|
||
elements.push(K(table));
|
||
}
|
||
table.className = 'ke-table';
|
||
table.cellPadding = 0;
|
||
table.cellSpacing = 0;
|
||
table.border = 0;
|
||
var num = (pageNum - 1) * cells + startNum;
|
||
for (var i = 0; i < rows; i++) {
|
||
var row = table.insertRow(i);
|
||
for (var j = 0; j < cols; j++) {
|
||
var cell = K(row.insertCell(j));
|
||
cell.addClass('ke-cell');
|
||
bindCellEvent(cell, j, num);
|
||
var span = K('<span class="ke-img"></span>')
|
||
.css('background-position', '-' + (24 * num) + 'px 0px')
|
||
.css('background-image', 'url(' + path + 'static.gif)');
|
||
cell.append(span);
|
||
elements.push(cell);
|
||
num++;
|
||
}
|
||
}
|
||
return table;
|
||
}
|
||
var table = createEmoticonsTable(currentPageNum, wrapperDiv);
|
||
function removeEvent() {
|
||
K.each(elements, function() {
|
||
this.unbind();
|
||
});
|
||
}
|
||
var pageDiv;
|
||
function bindPageEvent(el, pageNum) {
|
||
el.click(function(e) {
|
||
removeEvent();
|
||
table.parentNode.removeChild(table);
|
||
pageDiv.remove();
|
||
table = createEmoticonsTable(pageNum, wrapperDiv);
|
||
createPageTable(pageNum);
|
||
currentPageNum = pageNum;
|
||
e.stop();
|
||
});
|
||
}
|
||
function createPageTable(currentPageNum) {
|
||
pageDiv = K('<div class="ke-page"></div>');
|
||
wrapperDiv.append(pageDiv);
|
||
for (var pageNum = 1; pageNum <= pages; pageNum++) {
|
||
if (currentPageNum !== pageNum) {
|
||
var a = K('<a href="javascript:;">[' + pageNum + ']</a>');
|
||
bindPageEvent(a, pageNum);
|
||
pageDiv.append(a);
|
||
elements.push(a);
|
||
} else {
|
||
pageDiv.append(K('@[' + pageNum + ']'));
|
||
}
|
||
pageDiv.append(K('@ '));
|
||
}
|
||
}
|
||
createPageTable(currentPageNum);
|
||
});
|
||
});
|