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); | ||
|  | 	}); | ||
|  | }); |