130 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.8 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.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);
 | |
| 	});
 | |
| });
 |