⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editor_plugin_src.js

📁 Zomplog is an easy to use weblog application which uses php and MySQL
💻 JS
📖 第 1 页 / 共 3 页
字号:
						// Delete cells
						for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {
							if (tdElm != lastTDElm) {
								var sd = getColRowSpan(tdElm);

								if (sd['colspan'] > 1)
									tdElm.colSpan = sd['colspan'] - 1;
								else {
									if (tdElm.parentNode)
										tdElm.parentNode.removeChild(tdElm);
								}

								lastTDElm = tdElm;
							}
						}

						cpos.cellindex--;
						if (cpos.cellindex < 0)
							cpos.cellindex = 0;

						inst.selectNode(getCell(grid, 0, cpos.cellindex), true, true);
					break;

				case "mceTableSplitCells":
					if (!trElm || !tdElm)
						return true;

					var spandata = getColRowSpan(tdElm);

					var colspan = spandata["colspan"];
					var rowspan = spandata["rowspan"];

					// Needs splitting
					if (colspan > 1 || rowspan > 1) {
						// Generate cols
						tdElm.colSpan = 1;
						for (var i=1; i<colspan; i++) {
							var newTD = doc.createElement("td");

							newTD.innerHTML = "&nbsp;";

							trElm.insertBefore(newTD, nextElm(tdElm, "TD,TH"));

							if (rowspan > 1)
								addRows(newTD, trElm, rowspan);
						}

						addRows(tdElm, trElm, rowspan);
					}

					// Apply visual aids
					tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
					break;

				case "mceTableMergeCells":
					var rows = new Array();
					var sel = inst.getSel();
					var grid = getTableGrid(tableElm);

					if (tinyMCE.isMSIE || sel.rangeCount == 1) {
						if (user_interface) {
							// Setup template
							var template = new Array();
							var sp = getColRowSpan(tdElm);

							template['file'] = '../../plugins/table/merge_cells.htm';
							template['width'] = 250;
							template['height'] = 105 + (tinyMCE.isNS7 ? 25 : 0);

							// Language specific width and height addons
							template['width'] += tinyMCE.getLang('lang_table_merge_cells_delta_width', 0);
							template['height'] += tinyMCE.getLang('lang_table_merge_cells_delta_height', 0);

							// Open window
							tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes", action : "update", numcols : sp.colspan, numrows : sp.rowspan});

							return true;
						} else {
							var numRows = parseInt(value['numrows']);
							var numCols = parseInt(value['numcols']);
							var cpos = getCellPos(grid, tdElm);

							if (("" + numRows) == "NaN")
								numRows = 1;

							if (("" + numCols) == "NaN")
								numCols = 1;

							// Get rows and cells
							var tRows = tableElm.rows;
							for (var y=cpos.rowindex; y<grid.length; y++) {
								var rowCells = new Array();

								for (var x=cpos.cellindex; x<grid[y].length; x++) {
									var td = getCell(grid, y, x);

									if (td && !inArray(rows, td) && !inArray(rowCells, td)) {
										var cp = getCellPos(grid, td);

										// Within range
										if (cp.cellindex < cpos.cellindex+numCols && cp.rowindex < cpos.rowindex+numRows)
											rowCells[rowCells.length] = td;
									}
								}

								if (rowCells.length > 0)
									rows[rows.length] = rowCells;
							}

							//return true;
						}
					} else {
						var cells = new Array();
						var sel = inst.getSel();
						var lastTR = null;
						var curRow = null;
						var x1 = -1, y1 = -1, x2, y2;

						// Only one cell selected, whats the point?
						if (sel.rangeCount < 2)
							return true;

						// Get all selected cells
						for (var i=0; i<sel.rangeCount; i++) {
							var rng = sel.getRangeAt(i);
							var tdElm = rng.startContainer.childNodes[rng.startOffset];

							if (!tdElm)
								break;

							if (tdElm.nodeName == "TD")
								cells[cells.length] = tdElm;
						}

						// Get rows and cells
						var tRows = tableElm.rows;
						for (var y=0; y<tRows.length; y++) {
							var rowCells = new Array();

							for (var x=0; x<tRows[y].cells.length; x++) {
								var td = tRows[y].cells[x];

								for (var i=0; i<cells.length; i++) {
									if (td == cells[i]) {
										rowCells[rowCells.length] = td;
									}
								}
							}

							if (rowCells.length > 0)
								rows[rows.length] = rowCells;
						}

						// Find selected cells in grid and box
						var curRow = new Array();
						var lastTR = null;
						for (var y=0; y<grid.length; y++) {
							for (var x=0; x<grid[y].length; x++) {
								grid[y][x]._selected = false;

								for (var i=0; i<cells.length; i++) {
									if (grid[y][x] == cells[i]) {
										// Get start pos
										if (x1 == -1) {
											x1 = x;
											y1 = y;
										}

										// Get end pos
										x2 = x;
										y2 = y;

										grid[y][x]._selected = true;
									}
								}
							}
						}

						// Is there gaps, if so deny
						for (var y=y1; y<=y2; y++) {
							for (var x=x1; x<=x2; x++) {
								if (!grid[y][x]._selected) {
									alert("Invalid selection for merge.");
									return true;
								}
							}
						}
					}

					// Validate selection and get total rowspan and colspan
					var rowSpan = 1, colSpan = 1;

					// Validate horizontal and get total colspan
					var lastRowSpan = -1;
					for (var y=0; y<rows.length; y++) {
						var rowColSpan = 0;

						for (var x=0; x<rows[y].length; x++) {
							var sd = getColRowSpan(rows[y][x]);

							rowColSpan += sd['colspan'];

							if (lastRowSpan != -1 && sd['rowspan'] != lastRowSpan) {
								alert("Invalid selection for merge.");
								return true;
							}

							lastRowSpan = sd['rowspan'];
						}

						if (rowColSpan > colSpan)
							colSpan = rowColSpan;

						lastRowSpan = -1;
					}

					// Validate vertical and get total rowspan
					var lastColSpan = -1;
					for (var x=0; x<rows[0].length; x++) {
						var colRowSpan = 0;

						for (var y=0; y<rows.length; y++) {
							var sd = getColRowSpan(rows[y][x]);

							colRowSpan += sd['rowspan'];

							if (lastColSpan != -1 && sd['colspan'] != lastColSpan) {
								alert("Invalid selection for merge.");
								return true;
							}

							lastColSpan = sd['colspan'];
						}

						if (colRowSpan > rowSpan)
							rowSpan = colRowSpan;

						lastColSpan = -1;
					}

					// Setup td
					tdElm = rows[0][0];
					tdElm.rowSpan = rowSpan;
					tdElm.colSpan = colSpan;

					// Merge cells
					for (var y=0; y<rows.length; y++) {
						for (var x=0; x<rows[y].length; x++) {
							var html = rows[y][x].innerHTML;
							var chk = tinyMCE.regexpReplace(html, "[ \t\r\n]", "");

							if (chk != "<br/>" && chk != "<br>" && chk != "&nbsp;" && (x+y > 0))
								tdElm.innerHTML += html;

							// Not current cell
							if (rows[y][x] != tdElm && !rows[y][x]._deleted) {
								var cpos = getCellPos(grid, rows[y][x]);
								var tr = rows[y][x].parentNode;

								tr.removeChild(rows[y][x]);
								rows[y][x]._deleted = true;

								// Empty TR, remove it
								if (!tr.hasChildNodes()) {
									tr.parentNode.removeChild(tr);

									var lastCell = null;
									for (var x=0; cellElm = getCell(grid, cpos.rowindex, x); x++) {
										if (cellElm != lastCell && cellElm.rowSpan > 1)
											cellElm.rowSpan--;

										lastCell = cellElm;
									}

									if (tdElm.rowSpan > 1)
										tdElm.rowSpan--;
								}
							}
						}
					}

					break;
				}

				tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
				tinyMCE.handleVisualAid(tableElm, true, tinyMCE.settings['visual'], tinyMCE.selectedInstance);
				tinyMCE.triggerNodeChange();
				inst.repaint();
			}

		return true;
	}

	// Pass to next handler in chain
	return false;
}

function TinyMCE_table_handleNodeChange(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {
	var colspan = "1", rowspan = "1";

	var inst = tinyMCE.getInstanceById(editor_id);

	// Reset table controls
	tinyMCE.switchClassSticky(editor_id + '_table', 'mceButtonNormal');
	tinyMCE.switchClassSticky(editor_id + '_row_props', 'mceButtonDisabled', true);
	tinyMCE.switchClassSticky(editor_id + '_cell_props', 'mceButtonDisabled', true);
	tinyMCE.switchClassSticky(editor_id + '_row_before', 'mceButtonDisabled', true);
	tinyMCE.switchClassSticky(editor_id + '_row_after', 'mceButtonDisabled', true);
	tinyMCE.switchClassSticky(editor_id + '_delete_row', 'mceButtonDisabled', true);
	tinyMCE.switchClassSticky(editor_id + '_col_before', 'mceButtonDisabled', true);
	tinyMCE.switchClassSticky(editor_id + '_col_after', 'mceButtonDisabled', true);
	tinyMCE.switchClassSticky(editor_id + '_delete_col', 'mceButtonDisabled', true);
	tinyMCE.switchClassSticky(editor_id + '_split_cells', 'mceButtonDisabled', true);
	tinyMCE.switchClassSticky(editor_id + '_merge_cells', 'mceButtonDisabled', true);

	// Within a tr element
	if (tinyMCE.getParentElement(node, "tr"))
		tinyMCE.switchClassSticky(editor_id + '_row_props', 'mceButtonSelected', false);

	// Within a td element
	if (tdElm = tinyMCE.getParentElement(node, "td,th")) {
		tinyMCE.switchClassSticky(editor_id + '_cell_props', 'mceButtonSelected', false);
		tinyMCE.switchClassSticky(editor_id + '_row_before', 'mceButtonNormal', false);
		tinyMCE.switchClassSticky(editor_id + '_row_after', 'mceButtonNormal', false);
		tinyMCE.switchClassSticky(editor_id + '_delete_row', 'mceButtonNormal', false);
		tinyMCE.switchClassSticky(editor_id + '_col_before', 'mceButtonNormal', false);
		tinyMCE.switchClassSticky(editor_id + '_col_after', 'mceButtonNormal', false);
		tinyMCE.switchClassSticky(editor_id + '_delete_col', 'mceButtonNormal', false);

		colspan = tinyMCE.getAttrib(tdElm, "colspan");
		rowspan = tinyMCE.getAttrib(tdElm, "rowspan");

		colspan = colspan == "" ? "1" : colspan;
		rowspan = rowspan == "" ? "1" : rowspan;

		if (colspan != "1" || rowspan != "1")
			tinyMCE.switchClassSticky(editor_id + '_split_cells', 'mceButtonNormal', false);
	}

	// Within table
	if (tinyMCE.getParentElement(node, "table")) {
		tinyMCE.switchClassSticky(editor_id + '_table', 'mceButtonSelected');
		tinyMCE.switchClassSticky(editor_id + '_merge_cells', 'mceButtonNormal', false);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -