| /******************************************************************************* | 
| * 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.emoticonsPath || self.pluginsPath + 'emoticons/images/'), | 
|         allowPreview = self.allowPreviewEmoticons === undefined ? true : self.allowPreviewEmoticons, | 
|         currentPageNum = 1; | 
|     self.clickToolbar(name, function() { | 
|         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) { | 
|                 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); | 
|     }); | 
| }); |