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