editor.js
上传用户:lm2018
上传日期:2015-12-12
资源大小:30449k
文件大小:35k
源码类别:

Jsp/Servlet

开发平台:

Java

  1. /*
  2. *######################################
  3. * eWebEditor v4.00 - Advanced online web based WYSIWYG HTML editor.
  4. * Copyright (c) 2003-2007 eWebSoft.com
  5. *
  6. * For further information go to http://www.ewebsoft.com/
  7. * This copyright notice MUST stay intact for use.
  8. *######################################
  9. */
  10. var sCurrMode = null;
  11. var bEditMode = null;
  12. var oLinkField = null;
  13. var BrowserInfo = new Object() ;
  14. BrowserInfo.MajorVer = navigator.appVersion.match(/MSIE (.)/)[1] ;
  15. BrowserInfo.MinorVer = navigator.appVersion.match(/MSIE ..(.)/)[1] ;
  16. BrowserInfo.IsIE55OrMore = BrowserInfo.MajorVer >= 6 || ( BrowserInfo.MajorVer >= 5 && BrowserInfo.MinorVer >= 5 ) ;
  17. config.IsSP2 = (navigator.userAgent.indexOf("SV1") != -1);
  18. window.onresize = initWidths;
  19. var yToolbars = new Array();
  20. var bInitialized = false;
  21.  document.onreadystatechange=function(){
  22. if (document.readyState!="complete") {return;}
  23. if (bInitialized) {return;}
  24. bInitialized = true;
  25. initHistory();
  26. initWidths();
  27. oLinkField = parent.document.getElementsByName(sLinkFieldName)[0];
  28. if ((!oLinkField)&&(config.ServerExt=="aspx")){
  29. oLinkField = getSpecialLinkFieldAspx("input");
  30. if (!oLinkField){
  31. oLinkField = getSpecialLinkFieldAspx("textarea");
  32. }
  33. }
  34. if (!BrowserInfo.IsIE55OrMore){
  35. config.InitMode = "TEXT";
  36. }
  37. if (ContentFlag.value=="0") { 
  38. ContentEdit.value = oLinkField.value;
  39. ContentLoad.value = oLinkField.value;
  40. ModeEdit.value = config.InitMode;
  41. ContentFlag.value = "1";
  42. }
  43. setMode(ModeEdit.value);
  44. setLinkedField() ;
  45. }
  46. function getSpecialLinkFieldAspx(s_Tag){
  47. var els = parent.document.getElementsByTagName(s_Tag);
  48. for(var i=0;i<els.length;i++){
  49. var s_Name = els[i].getAttribute("name");
  50. var n = s_Name.lastIndexOf("$");
  51. if (n<0){
  52. n = s_Name.lastIndexOf(":");
  53. }
  54. if (n >= 0){
  55. s_Name = s_Name.substr(n+1);
  56. if (s_Name==sLinkFieldName){
  57. return els[i];
  58. }
  59. }
  60. }
  61. return null;
  62. }
  63. function initWidths(){
  64. var i, curr;
  65. for (i=0; i<document.body.all.length;i++){
  66. curr=document.body.all[i];
  67. if (curr.className == "yToolbar"){
  68. InitTB(curr);
  69. yToolbars[yToolbars.length] = curr;
  70. }
  71. }
  72. }
  73. function InitBtn(btn) {
  74. btn.onmouseover = BtnMouseOver;
  75. btn.onmouseout = BtnMouseOut;
  76. btn.onmousedown = BtnMouseDown;
  77. btn.onmouseup = BtnMouseUp;
  78. btn.ondragstart = YCancelEvent;
  79. btn.onselectstart = YCancelEvent;
  80. btn.onselect = YCancelEvent;
  81. btn.YUSERONCLICK = btn.onclick;
  82. btn.onclick = YCancelEvent;
  83. btn.YINITIALIZED = true;
  84. return true;
  85. }
  86. function InitTB(y) {
  87. y.TBWidth = 0;
  88. if (! PopulateTB(y)) {return false;}
  89. y.style.posWidth = y.TBWidth;
  90. return true;
  91. }
  92. function YCancelEvent() {
  93. event.returnValue=false;
  94. event.cancelBubble=true;
  95. return false;
  96. }
  97. function BtnMouseOver() {
  98. if (event.srcElement.tagName != "IMG") {return false;}
  99. var image = event.srcElement;
  100. var element = image.parentElement;
  101. if (image.className == "Ico") {
  102. element.className = "BtnMouseOverUp";
  103. }else if (image.className == "IcoDown") {
  104. element.className = "BtnMouseOverDown";
  105. }
  106. event.cancelBubble = true;
  107. }
  108. function BtnMouseOut() {
  109. if (event.srcElement.tagName != "IMG") {
  110. event.cancelBubble = true;
  111. return false;
  112. }
  113. var image = event.srcElement;
  114. var element = image.parentElement;
  115. yRaisedElement = null;
  116. element.className = "Btn";
  117. image.className = "Ico";
  118. event.cancelBubble = true;
  119. }
  120. function BtnMouseDown() {
  121. if (event.srcElement.tagName != "IMG") {
  122. event.cancelBubble = true;
  123. event.returnValue=false;
  124. return false;
  125. }
  126. var image = event.srcElement;
  127. var element = image.parentElement;
  128. element.className = "BtnMouseOverDown";
  129. image.className = "IcoDown";
  130. event.cancelBubble = true;
  131. event.returnValue=false;
  132. return false;
  133. }
  134. function BtnMouseUp() {
  135. if (event.srcElement.tagName != "IMG") {
  136. event.cancelBubble = true;
  137. return false;
  138. }
  139. var image = event.srcElement;
  140. var element = image.parentElement;
  141. if (element.YUSERONCLICK) {
  142. eval(element.YUSERONCLICK + "anonymous()");
  143. }
  144. element.className = "BtnMouseOverUp";
  145. image.className = "Ico";
  146. event.cancelBubble = true;
  147. return false;
  148. }
  149. function PopulateTB(y) {
  150. var i, elements, element;
  151. elements = y.children;
  152. for (i=0; i<elements.length; i++) {
  153. element = elements[i];
  154. if (element.tagName == "SCRIPT" || element.tagName == "!") {continue;}
  155. switch (element.className) {
  156. case "Btn":
  157. if (element.YINITIALIZED == null) {
  158. if (! InitBtn(element)) {
  159. alert("Problem initializing:" + element.id);
  160. return false;
  161. }
  162. }
  163. element.style.posLeft = y.TBWidth;
  164. y.TBWidth += element.offsetWidth + 1;
  165. break;
  166. case "TBGen":
  167. element.style.posLeft = y.TBWidth;
  168. y.TBWidth += element.offsetWidth + 1;
  169. break;
  170. case "TBSep":
  171. element.style.posLeft = y.TBWidth + 2;
  172. y.TBWidth += 5;
  173. break;
  174. case "TBHandle":
  175. element.style.posLeft = 2;
  176. y.TBWidth += element.offsetWidth + 7;
  177. break;
  178. default:
  179. alert("Invalid class: " + element.className + " on Element: " + element.id + " <" + element.tagName + ">");
  180. return false;
  181. }
  182. }
  183. y.TBWidth += 1;
  184. return true;
  185. }
  186. function setLinkedField() {
  187. if (! oLinkField) {return ;}
  188. var oForm = oLinkField.form ;
  189. if (!oForm) {return ;}
  190. oForm.attachEvent("onsubmit", AttachSubmit) ;
  191. if (! oForm.submitEditor) oForm.submitEditor = new Array() ;
  192. oForm.submitEditor[oForm.submitEditor.length] = AttachSubmit ;
  193. if (! oForm.originalSubmit) {
  194. oForm.originalSubmit = oForm.submit ;
  195. oForm.submit = function() {
  196. if (this.submitEditor) {
  197. for (var i = 0 ; i < this.submitEditor.length ; i++) {
  198. this.submitEditor[i]() ;
  199. }
  200. }
  201. this.originalSubmit() ;
  202. }
  203. }
  204. oForm.attachEvent("onreset", AttachReset) ;
  205. if (! oForm.resetEditor) oForm.resetEditor = new Array() ;
  206. oForm.resetEditor[oForm.resetEditor.length] = AttachReset ;
  207. if (! oForm.originalReset) {
  208. oForm.originalReset = oForm.reset ;
  209. oForm.reset = function() {
  210. if (this.resetEditor) {
  211. for (var i = 0 ; i < this.resetEditor.length ; i++) {
  212. this.resetEditor[i]() ;
  213. }
  214. }
  215. this.originalReset() ;
  216. }
  217. }
  218. }
  219. function AttachSubmit() { 
  220. var oForm = oLinkField.form ;
  221. if (!oForm) {return;}
  222. var html = getHTML();
  223. ContentEdit.value = html;
  224. if (sCurrMode=="TEXT"){
  225. html = HTMLEncode(html);
  226. }
  227. splitTextField(oLinkField, html);
  228. function doSubmit(){
  229. var oForm = oLinkField.form ;
  230. if (!oForm) {return ;}
  231. oForm.submit();
  232. }
  233. function AttachReset() {
  234. if(bEditMode){
  235. eWebEditor.document.body.innerHTML = ContentLoad.value;
  236. }else{
  237. eWebEditor.document.body.innerText = ContentLoad.value;
  238. }
  239. }
  240. function onHelp(){
  241. showDialog('about.htm');
  242. return false;
  243. }
  244. function onPaste() {
  245. if (sCurrMode=="VIEW") {return false;}
  246. if (!history.saved){saveHistory();}
  247. if (sCurrMode=="EDIT"){
  248. var sHTML = GetClipboardHTML() ;
  249. if ((config.AutoDetectPasteFromWord=="1") && BrowserInfo.IsIE55OrMore) {
  250. var re = /<w[^>]* class="?MsoNormal"?/gi ;
  251. if ( re.test(sHTML)){
  252. if ( confirm("你要粘贴的内容好象是从Word中拷出来的,是否要先清除Word格式再粘贴?") ){
  253. cleanAndPaste( sHTML ) ;
  254. saveHistory();
  255. return false ;
  256. }
  257. }
  258. }
  259. return true;
  260. }else{
  261. eWebEditor.document.selection.createRange().pasteHTML(HTMLEncode( clipboardData.getData("Text"))) ;
  262. saveHistory();
  263. return false;
  264. }
  265. }
  266. function onKeyDown(event){
  267. var n_KeyCode = event.keyCode;
  268. var s_Key = String.fromCharCode(n_KeyCode).toUpperCase();
  269. // F2
  270. if (n_KeyCode==113){
  271. showBorders();
  272. return false;
  273. }
  274. if (event.ctrlKey){
  275. // Ctrl+Enter
  276. if (n_KeyCode==10){
  277. doSubmit();
  278. return false;
  279. }
  280. // Ctrl++
  281. if (s_Key=="+"){
  282. sizeChange(300);
  283. return false;
  284. }
  285. // Ctrl+-
  286. if (s_Key=="-"){
  287. sizeChange(-300);
  288. return false;
  289. }
  290. // Ctrl+1
  291. if (s_Key=="1"){
  292. setMode("CODE");
  293. return false;
  294. }
  295. // Ctrl+2
  296. if (s_Key=="2"){
  297. setMode("EDIT");
  298. return false;
  299. }
  300. // Ctrl+3
  301. if (s_Key=="3"){
  302. setMode("TEXT");
  303. return false;
  304. }
  305. // Ctrl+4
  306. if (s_Key=="4"){
  307. setMode("VIEW");
  308. return false;
  309. }
  310. }
  311. switch(sCurrMode){
  312. case "VIEW":
  313. return true;
  314. break;
  315. case "EDIT":
  316. if (event.ctrlKey){
  317. // Ctrl+D
  318. if (s_Key == "D"){
  319. PasteWord();
  320. return false;
  321. }
  322. // Ctrl+R
  323. if (s_Key == "R"){
  324. findReplace();
  325. return false;
  326. }
  327. // Ctrl+Z
  328. if (s_Key == "Z"){
  329. goHistory(-1);
  330. return false;
  331. }
  332. // Ctrl+Y
  333. if (s_Key == "Y"){
  334. goHistory(1);
  335. return false;
  336. }
  337. }
  338. break;
  339. default:
  340. if (n_KeyCode==13){
  341. if (!history.saved){saveHistory();}
  342. history.saved = false;
  343. var sel = eWebEditor.document.selection.createRange();
  344. sel.pasteHTML("<BR>");
  345. event.cancelBubble = true;
  346. event.returnValue = false;
  347. sel.select();
  348. sel.moveEnd("character", 1);
  349. sel.moveStart("character", 1);
  350. sel.collapse(false);
  351. return false;
  352. }
  353. if (event.ctrlKey){
  354. // Ctrl+B,I,U
  355. if ((s_Key == "B")||(s_Key == "I")||(s_Key == "U")){
  356. return false;
  357. }
  358. // Ctrl+Z
  359. if (s_Key == "Z"){
  360. goHistory(-1);
  361. return false;
  362. }
  363. // Ctrl+Y
  364. if (s_Key == "Y"){
  365. goHistory(1);
  366. return false;
  367. }
  368. }
  369. break;
  370. }
  371. if ((n_KeyCode==13)||(n_KeyCode==8)||(n_KeyCode==46)){ //Enter,Backspace,Del
  372. if (!history.saved){saveHistory();}
  373. history.saved = false;
  374. }else if ((n_KeyCode>=33)&&(n_KeyCode<=40)){ //PageUp,PageDown,End,Home,Left,Up,Right,Down
  375. if (!history.saved){saveHistory();}
  376. }else if (!event.ctrlKey && s_Key!="A" && s_Key!="F"){ //Ctrl+A,F
  377. history.saved = false;
  378. }
  379. return true;
  380. }
  381. var oResizing = new Object;
  382. function onMouseDown(){
  383. oResizing.El = null;
  384. if (eWebEditor.document.selection.type == "Control") {
  385. var oControlRange = eWebEditor.document.selection.createRange();
  386. oResizing.El = oControlRange(0);
  387. oResizing.W = oResizing.El.style.width;
  388. oResizing.H = oResizing.El.style.height;
  389. }
  390. if (!history.saved){saveHistory();}
  391. }
  392. function onMouseUp(){
  393. if (oResizing.El){
  394. if ((oResizing.El.style.width!=oResizing.W)||(oResizing.El.style.height!=oResizing.H)){
  395. saveHistory();
  396. }
  397. }
  398. }
  399. function doDragEnd(){
  400. if (!history.saved){saveHistory();}
  401. var oSelection = eWebEditor.document.selection.createRange();
  402. var sRangeType = eWebEditor.document.selection.type;
  403. if (sRangeType == "Control") {
  404. var oControl = oSelection.item(0);
  405. if (oControl.tagName == "IMG"){
  406. oControl.src = FullPath2SetPath(oControl.src);
  407. }
  408. }
  409. if (sRangeType == "Text") {
  410. var els = eWebEditor.document.body.getElementsByTagName("IMG");
  411. var oRngTemp = eWebEditor.document.body.createTextRange();
  412. for(var i=0;i<els.length;i++){
  413. oRngTemp.moveToElementText(els(i));
  414. if (oSelection.inRange(oRngTemp)){
  415. els(i).src = FullPath2SetPath(els(i).src)
  416. }
  417. }
  418. }
  419. saveHistory();
  420. return true;
  421. }
  422. function FullPath2SetPath(url){
  423. if (url.indexOf("://")<0){return url;}
  424. var s_SitePath = getSitePath();
  425. if (url.indexOf(s_SitePath) < 0){return url;}
  426. return url.substr(s_SitePath.length);
  427. }
  428. function getSitePath(){
  429. var sSitePath = document.location.protocol + "//" + document.location.host;
  430. if (sSitePath.substr(sSitePath.length-3) == ":80"){
  431. sSitePath = sSitePath.substring(0,sSitePath.length-3);
  432. }
  433. return sSitePath;
  434. }
  435. function GetClipboardHTML() {
  436. var oDiv = document.getElementById("eWebEditor_Temp_HTML")
  437. oDiv.innerHTML = "" ;
  438. var oTextRange = document.body.createTextRange() ;
  439. oTextRange.moveToElementText(oDiv) ;
  440. oTextRange.execCommand("Paste") ;
  441. var sData = oDiv.innerHTML ;
  442. oDiv.innerHTML = "" ;
  443. return sData ;
  444. }
  445. function cleanAndPaste( html ) {
  446. html = html.replace(/</?SPAN[^>]*>/gi, "" );
  447. html = html.replace(/<(w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;
  448. html = html.replace(/<(w[^>]*) style="([^"]*)"([^>]*)/gi, "<$1$3") ;
  449. html = html.replace(/<(w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;
  450. html = html.replace(/<\??xml[^>]*>/gi, "") ;
  451. html = html.replace(/</?w+:[^>]*>/gi, "") ;
  452. html = html.replace(/&nbsp;/, " " );
  453. insertHTML( html ) ;
  454. }
  455. function insertHTML(html) {
  456. if (isModeView()) {return false;}
  457. eWebEditor.focus();
  458. if (eWebEditor.document.selection.type.toLowerCase() != "none"){
  459. eWebEditor.document.selection.clear() ;
  460. }
  461. if (sCurrMode!="EDIT"){
  462. html=HTMLEncode(html);
  463. }
  464. eWebEditor.document.selection.createRange().pasteHTML(html) ; 
  465. }
  466. function setHTML(html, b_NotSaveHistory) {
  467. ContentEdit.value = html;
  468. switch (sCurrMode){
  469. case "CODE":
  470. eWebEditor.document.designMode="On";
  471. eWebEditor.document.open();
  472. eWebEditor.document.write(getStyleEditorHeader());
  473. eWebEditor.document.body.innerText=html;
  474. eWebEditor.document.body.contentEditable="true";
  475. eWebEditor.document.close();
  476. bEditMode=false;
  477. break;
  478. case "EDIT":
  479. eWebEditor.document.designMode="On";
  480. eWebEditor.document.open();
  481. eWebEditor.document.write(getStyleEditorHeader()+html);
  482. eWebEditor.document.body.contentEditable="true";
  483. eWebEditor.document.execCommand("2D-Position",true,true);
  484. eWebEditor.document.execCommand("MultipleSelection", true, true);
  485. eWebEditor.document.execCommand("LiveResize", true, true);
  486. eWebEditor.document.close();
  487. doZoom(nCurrZoomSize);
  488. bEditMode=true;
  489. break;
  490. case "TEXT":
  491. eWebEditor.document.designMode="On";
  492. eWebEditor.document.open();
  493. eWebEditor.document.write(getStyleEditorHeader());
  494. eWebEditor.document.body.innerText=html;
  495. eWebEditor.document.body.contentEditable="true";
  496. eWebEditor.document.close();
  497. bEditMode=false;
  498. break;
  499. case "VIEW":
  500. eWebEditor.document.designMode="off";
  501. eWebEditor.document.open();
  502. eWebEditor.document.write(getStyleEditorHeader()+html);
  503. eWebEditor.document.body.contentEditable="false";
  504. eWebEditor.document.close();
  505. bEditMode=false;
  506. break;
  507. }
  508. eWebEditor.document.body.onpaste = onPaste ;
  509. eWebEditor.document.body.onhelp = onHelp ;
  510. eWebEditor.document.body.ondragend = new Function("return doDragEnd();");
  511. eWebEditor.document.onkeydown = new Function("return onKeyDown(eWebEditor.event);");
  512. eWebEditor.document.oncontextmenu=new Function("return showContextMenu(eWebEditor.event);");
  513. eWebEditor.document.onmousedown = new Function("return onMouseDown();");
  514. eWebEditor.document.onmouseup = new Function("return onMouseUp();");
  515. if ((borderShown != "0")&&bEditMode) {
  516. borderShown = "0";
  517. showBorders();
  518. }
  519. if (!b_NotSaveHistory){
  520. saveHistory();
  521. }
  522. }
  523. function getHTML() {
  524. var html;
  525. if((sCurrMode=="EDIT")||(sCurrMode=="VIEW")){
  526. html = eWebEditor.document.body.innerHTML;
  527. }else{
  528. html = eWebEditor.document.body.innerText;
  529. }
  530. if (sCurrMode!="TEXT"){
  531. if ((html.toLowerCase()=="<p>&nbsp;</p>")||(html.toLowerCase()=="<p></p>")){
  532. html = "";
  533. }
  534. }
  535. return html;
  536. }
  537. function appendHTML(html) {
  538. if(isModeView()){return false;}
  539. if(sCurrMode=="EDIT"){
  540. eWebEditor.document.body.innerHTML += html;
  541. }else{
  542. eWebEditor.document.body.innerText += html;
  543. }
  544. }
  545. function PasteWord(){
  546. if(!validateMode()){return;}
  547. eWebEditor.focus();
  548. if (!history.saved){saveHistory();}
  549. if(BrowserInfo.IsIE55OrMore){
  550. cleanAndPaste( GetClipboardHTML() ) ;
  551. saveHistory();
  552. }else if(confirm("此功能要求IE5.5版本以上,你当前的浏览器不支持,是否按常规粘贴进行?")){
  553. format("paste") ;
  554. }
  555. eWebEditor.focus();
  556. }
  557. function PasteText(){
  558. if(!validateMode()){return;}
  559. eWebEditor.focus();
  560. if (!history.saved){saveHistory();}
  561. var sText = HTMLEncode( clipboardData.getData("Text") ) ;
  562. insertHTML(sText);
  563. saveHistory();
  564. eWebEditor.focus();
  565. }
  566. function validateMode() {
  567. if(sCurrMode=="EDIT"){return true;}
  568. alert("需转换为编辑状态后才能使用编辑功能!");
  569. eWebEditor.focus();
  570. return false;
  571. }
  572. function isModeView(){
  573. if (sCurrMode=="VIEW"){
  574. alert("预览时不允许设置编辑区内容。");
  575. return true;
  576. }
  577. return false;
  578. }
  579. function format(what,opt) {
  580. if(!validateMode()){return;}
  581. eWebEditor.focus();
  582. if (!history.saved){saveHistory();}
  583. if(opt=="RemoveFormat"){
  584. what=opt;
  585. opt=null;
  586. }
  587. if(opt==null) {
  588. var s = "";
  589. switch(what.toLowerCase()){
  590. case "justifyleft":
  591. s = "left";
  592. break;
  593. case "justifycenter":
  594. s = "center"
  595. break;
  596. case "justifyright":
  597. s = "right"
  598. break;
  599. }
  600. var b = false;
  601. if (s){
  602. var sel = eWebEditor.document.selection.createRange();
  603. sel.type = eWebEditor.document.selection.type;
  604. if (sel.type=="Control"){
  605. var oControl = sel.item(0);
  606. try{
  607. oControl.align = s;
  608. b = true;
  609. }catch(e){}
  610. }
  611. }
  612. if (!b){
  613. eWebEditor.document.execCommand(what);
  614. }
  615. }else{
  616. eWebEditor.document.execCommand(what,"",opt);
  617. }
  618. saveHistory();
  619. eWebEditor.focus();
  620. }
  621. function formatFont(what, v){
  622. if (!history.saved){saveHistory();}
  623. eWebEditor.document.execCommand("fontname","","eWebEditor_Temp_FontName");
  624. var a_Font = eWebEditor.document.body.getElementsByTagName("FONT");
  625. for (var i=0; i<a_Font.length; i++){
  626. var o_Font = a_Font[i];
  627. if (o_Font.getAttribute("face") == "eWebEditor_Temp_FontName"){
  628. delInFont(o_Font, what);
  629. setInFont(o_Font, what, v);
  630. o_Font.removeAttribute("face");
  631. }
  632. }
  633. saveHistory();
  634. }
  635. function setStyleValue(obj, what, v){
  636. try{
  637. switch(what){
  638. case "fontname":
  639. obj.style.fontFamily = v;
  640. break;
  641. case "fontsize":
  642. obj.style.fontSize = v;
  643. break;
  644. default:
  645. break;
  646. }
  647. }catch(e){}
  648. }
  649. function delInFont(obj, what){
  650. setStyleValue(obj, what, "");
  651. var o_Children = obj.children;
  652. for (var j=0; j<o_Children.length; j++){
  653. delInFont(o_Children[j], what);
  654. if ((o_Children[j].tagName=="FONT") || (o_Children[j].tagName=="SPAN")){
  655. if ((o_Children[j].style.cssText=="")||(o_Children[j].innerHTML=="")){
  656. o_Children[j].outerHTML = o_Children[j].innerHTML;
  657. }
  658. }
  659. }
  660. }
  661. function setInFont(obj, what, v){
  662. setStyleValue(obj, what, v);
  663. var o_Children = obj.children;
  664. for (var j=0; j<o_Children.length; j++){
  665. if (o_Children[j].innerHTML!=""){
  666. setInFont(o_Children[j], what, v);
  667. }
  668. }
  669. }
  670. function VerifyFocus() {
  671. if ( eWebEditor )
  672. eWebEditor.focus();
  673. }
  674. function setMode(NewMode){
  675. if (NewMode==sCurrMode){return;}
  676. if (!BrowserInfo.IsIE55OrMore){
  677. if ((NewMode=="CODE") || (NewMode=="EDIT") || (NewMode=="VIEW")){
  678. alert("HTML编辑模式需要IE5.5版本以上的支持!");
  679. return false;
  680. }
  681. }
  682. if (NewMode=="TEXT"){
  683. if (sCurrMode==ModeEdit.value){
  684. if (!confirm("警告!切换到纯文本模式会丢失您所有的HTML格式,您确认切换吗?")){
  685. return false;
  686. }
  687. }
  688. }
  689. var sBody = "";
  690. switch(sCurrMode){
  691. case "CODE":
  692. if (NewMode=="TEXT"){
  693. eWebEditor_Temp_HTML.innerHTML = eWebEditor.document.body.innerText;
  694. sBody = eWebEditor_Temp_HTML.innerText;
  695. }else{
  696. sBody = eWebEditor.document.body.innerText;
  697. }
  698. break;
  699. case "TEXT":
  700. sBody = eWebEditor.document.body.innerText;
  701. sBody = HTMLEncode(sBody);
  702. break;
  703. case "EDIT":
  704. case "VIEW":
  705. if (NewMode=="TEXT"){
  706. sBody = eWebEditor.document.body.innerText;
  707. }else{
  708. sBody = eWebEditor.document.body.innerHTML;
  709. }
  710. break;
  711. default:
  712. sBody = ContentEdit.value;
  713. break;
  714. }
  715. try{
  716. document.all["eWebEditor_CODE"].className = "StatusBarBtnOff";
  717. document.all["eWebEditor_EDIT"].className = "StatusBarBtnOff";
  718. document.all["eWebEditor_TEXT"].className = "StatusBarBtnOff";
  719. document.all["eWebEditor_VIEW"].className = "StatusBarBtnOff";
  720. document.all["eWebEditor_"+NewMode].className = "StatusBarBtnOn";
  721. }
  722. catch(e){
  723. }
  724. sCurrMode = NewMode;
  725. ModeEdit.value = NewMode;
  726. setHTML(sBody);
  727. disableChildren(eWebEditor_Toolbar);
  728. }
  729. function disableChildren(obj){
  730. if (obj){
  731. obj.disabled=(!bEditMode);
  732. for (var i=0; i<obj.children.length; i++){
  733. disableChildren(obj.children[i]);
  734. }
  735. }
  736. }
  737. function showDialog(url, optValidate){
  738. var sName;
  739. var nIndex = url.indexOf(".");
  740. if (nIndex<0){
  741. sName = url;
  742. url = url + ".htm";
  743. }else{
  744. sName = url.substring(0, nIndex);
  745. }
  746. url = "dialog/" + url;
  747. sName = sName.toLowerCase();
  748. url = url.toLowerCase();
  749. if (optValidate) {
  750. if (!validateMode()) {return;}
  751. }
  752. eWebEditor.focus();
  753. if (!history.saved){saveHistory();}
  754. var arr = showModalDialog(url, window, "dialogWidth:0px;dialogHeight:0px;help:no;scroll:no;status:no");
  755. saveHistory();
  756. eWebEditor.focus();
  757. }
  758. function Maximize() {
  759. if (!validateMode()) {return;}
  760. saveHistory();
  761. window.open("dialog/fullscreen.htm?style="+config.StyleName, 'FullScreen'+sLinkFieldName, 'toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,fullscreen=yes');
  762. }
  763. function createLink(){
  764. if (!validateMode()) {return;}
  765. if (eWebEditor.document.selection.type == "Control") {
  766. var oControlRange = eWebEditor.document.selection.createRange();
  767. if (oControlRange(0).tagName.toUpperCase() != "IMG") {
  768. alert("链接只能是图片或文本");
  769. return;
  770. }
  771. }
  772. showDialog("hyperlink.htm", true);
  773. }
  774. function HTMLEncode(text){
  775. text = text.replace(/&/g, "&amp;") ;
  776. text = text.replace(/"/g, "&quot;") ;
  777. text = text.replace(/</g, "&lt;") ;
  778. text = text.replace(/>/g, "&gt;") ;
  779. text = text.replace(/ /g,"&nbsp;");
  780. text = text.replace(/n/g,"<br>");
  781. text = text.replace(/t/g,"&nbsp;&nbsp;&nbsp;&nbsp;");
  782. return text;
  783. }
  784. function insert(what) {
  785. if (!validateMode()) {return;}
  786. eWebEditor.focus();
  787. saveHistory();
  788. var sel = eWebEditor.document.selection.createRange();
  789. switch(what){
  790. case "excel":
  791. insertHTML("<object classid='clsid:0002E510-0000-0000-C000-000000000046' id='Spreadsheet1' codebase='file:\Bobsoftwareoffice2000msowc.cab' width='100%' height='250'><param name='HTMLURL' value><param name='HTMLData' value='&lt;html xmlns:x=&quot;urn:schemas-microsoft-com:office:excel&quot;xmlns=&quot;http://www.w3.org/TR/REC-html40&quot;&gt;&lt;head&gt;&lt;style type=&quot;text/css&quot;&gt;&lt;!--tr{mso-height-source:auto;}td{black-space:nowrap;}.wc4590F88{black-space:nowrap;font-family:Verdana,Arial,Helvetica,sans-serif;mso-number-format:General;font-size:auto;font-weight:auto;font-style:auto;text-decoration:auto;mso-background-source:auto;mso-pattern:auto;mso-color-source:auto;text-align:general;vertical-align:bottom;border-top:none;border-left:none;border-right:none;border-bottom:none;mso-protection:locked;}--&gt;&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;&lt;x:ExcelWorkbook&gt;&lt;x:ExcelWorksheets&gt;&lt;x:ExcelWorksheet&gt;&lt;x:OWCVersion&gt;9.0.0.2710&lt;/x:OWCVersion&gt;&lt;x:Label Style='border-top:solid .5pt silver;border-left:solid .5pt silver;border-right:solid .5pt silver;border-bottom:solid .5pt silver'&gt;&lt;x:Caption&gt;Microsoft Office Spreadsheet&lt;/x:Caption&gt; &lt;/x:Label&gt;&lt;x:Name&gt;Sheet1&lt;/x:Name&gt;&lt;x:WorksheetOptions&gt;&lt;x:Selected/&gt;&lt;x:Height&gt;7620&lt;/x:Height&gt;&lt;x:Width&gt;15240&lt;/x:Width&gt;&lt;x:TopRowVisible&gt;0&lt;/x:TopRowVisible&gt;&lt;x:LeftColumnVisible&gt;0&lt;/x:LeftColumnVisible&gt; &lt;x:ProtectContents&gt;False&lt;/x:ProtectContents&gt; &lt;x:DefaultRowHeight&gt;210&lt;/x:DefaultRowHeight&gt; &lt;x:StandardWidth&gt;2389&lt;/x:StandardWidth&gt; &lt;/x:WorksheetOptions&gt; &lt;/x:ExcelWorksheet&gt;&lt;/x:ExcelWorksheets&gt; &lt;x:MaxHeight&gt;80%&lt;/x:MaxHeight&gt;&lt;x:MaxWidth&gt;80%&lt;/x:MaxWidth&gt;&lt;/x:ExcelWorkbook&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;table class=wc4590F88 x:str&gt;&lt;col width=&quot;56&quot;&gt;&lt;tr height=&quot;14&quot;&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;'> <param name='DataType' value='HTMLDATA'> <param name='AutoFit' value='0'><param name='DisplayColHeaders' value='-1'><param name='DisplayGridlines' value='-1'><param name='DisplayHorizontalScrollBar' value='-1'><param name='DisplayRowHeaders' value='-1'><param name='DisplayTitleBar' value='-1'><param name='DisplayToolbar' value='-1'><param name='DisplayVerticalScrollBar' value='-1'> <param name='EnableAutoCalculate' value='-1'> <param name='EnableEvents' value='-1'><param name='MoveAfterReturn' value='-1'><param name='MoveAfterReturnDirection' value='0'><param name='RightToLeft' value='0'><param name='ViewableRange' value='1:65536'></object>");
  792. break;
  793. case "nowdate":
  794. var d = new Date();
  795. insertHTML(d.toLocaleDateString());
  796. break;
  797. case "nowtime":
  798. var d = new Date();
  799. insertHTML(d.toLocaleTimeString());
  800. break;
  801. case "br":
  802. insertHTML("<br>")
  803. break;
  804. case "code":
  805. insertHTML('<table width=95% border="0" align="Center" cellpadding="6" cellspacing="0" style="border: 1px Dotted #CCCCCC; TABLE-LAYOUT: fixed"><tr><td bgcolor=#FDFDDF style="WORD-WRAP: break-word"><font style="color: #990000;font-weight:bold">以下是代码片段:</font><br>'+HTMLEncode(sel.text)+'</td></tr></table>');
  806. break;
  807. case "quote":
  808. insertHTML('<table width=95% border="0" align="Center" cellpadding="6" cellspacing="0" style="border: 1px Dotted #CCCCCC; TABLE-LAYOUT: fixed"><tr><td bgcolor=#F3F3F3 style="WORD-WRAP: break-word"><font style="color: #990000;font-weight:bold">以下是引用片段:</font><br>'+HTMLEncode(sel.text)+'</td></tr></table>');
  809. break;
  810. case "big":
  811. insertHTML("<big>" + sel.text + "</big>");
  812. break;
  813. case "small":
  814. insertHTML("<small>" + sel.text + "</small>");
  815. break;
  816. default:
  817. alert("错误参数调用!");
  818. break;
  819. }
  820. sel=null;
  821. }
  822. var borderShown = config.ShowBorder;
  823. function showBorders() {
  824. if (!validateMode()) {return;}
  825. var allForms = eWebEditor.document.body.getElementsByTagName("FORM");
  826. var allInputs = eWebEditor.document.body.getElementsByTagName("INPUT");
  827. var allTables = eWebEditor.document.body.getElementsByTagName("TABLE");
  828. var allLinks = eWebEditor.document.body.getElementsByTagName("A");
  829. // form
  830. for (a=0; a < allForms.length; a++) {
  831. if (borderShown == "0") {
  832. allForms[a].runtimeStyle.border = "1px dotted #FF0000"
  833. } else {
  834. allForms[a].runtimeStyle.cssText = ""
  835. }
  836. }
  837. // input
  838. for (b=0; b < allInputs.length; b++) {
  839. if (borderShown == "0") {
  840. if (allInputs[b].type.toUpperCase() == "HIDDEN") {
  841. allInputs[b].runtimeStyle.border = "1px dashed #000000"
  842. allInputs[b].runtimeStyle.width = "15px"
  843. allInputs[b].runtimeStyle.height = "15px"
  844. allInputs[b].runtimeStyle.backgroundColor = "#FDADAD"
  845. allInputs[b].runtimeStyle.color = "#FDADAD"
  846. }
  847. } else {
  848. if (allInputs[b].type.toUpperCase() == "HIDDEN")
  849. allInputs[b].runtimeStyle.cssText = ""
  850. }
  851. }
  852. // table
  853. for (i=0; i < allTables.length; i++) {
  854. if (borderShown == "0") {
  855. allTables[i].runtimeStyle.border = "1px dotted #BFBFBF"
  856. } else {
  857. allTables[i].runtimeStyle.cssText = ""
  858. }
  859. allRows = allTables[i].rows
  860. for (y=0; y < allRows.length; y++) {
  861.   allCellsInRow = allRows[y].cells
  862. for (x=0; x < allCellsInRow.length; x++) {
  863. if (borderShown == "0") {
  864. allCellsInRow[x].runtimeStyle.border = "1px dotted #BFBFBF"
  865. } else {
  866. allCellsInRow[x].runtimeStyle.cssText = ""
  867. }
  868. }
  869. }
  870. }
  871. // A
  872. for (a=0; a < allLinks.length; a++) {
  873. if (borderShown == "0") {
  874. if (allLinks[a].href.toUpperCase() == "") {
  875. allLinks[a].runtimeStyle.borderBottom = "1px dashed #000000"
  876. }
  877. } else {
  878. allLinks[a].runtimeStyle.cssText = ""
  879. }
  880. }
  881. if (borderShown == "0") {
  882. borderShown = "1"
  883. } else {
  884. borderShown = "0"
  885. }
  886. scrollUp()
  887. }
  888. function scrollUp() {
  889. eWebEditor.scrollBy(0,0);
  890. }
  891. var nCurrZoomSize = 100;
  892. var aZoomSize = new Array(10, 25, 50, 75, 100, 150, 200, 500);
  893. function doZoom(size) {
  894. eWebEditor.document.body.runtimeStyle.zoom = size + "%";
  895. nCurrZoomSize = size;
  896. }
  897. function findReplace(){
  898. showDialog('findreplace.htm', true)
  899. }
  900. function absolutePosition(){
  901. var objReference = null;
  902. var RangeType = eWebEditor.document.selection.type;
  903. if (RangeType != "Control") {return;}
  904. var selectedRange = eWebEditor.document.selection.createRange();
  905. for (var i=0; i<selectedRange.length; i++){
  906. objReference = selectedRange.item(i);
  907. if (objReference.style.position != 'relative') {
  908. objReference.style.position='relative';
  909. }else{
  910. objReference.style.position='static';
  911. }
  912. }
  913. }
  914. function zIndex(action){
  915. var objReference = null;
  916. var RangeType = eWebEditor.document.selection.type;
  917. if (RangeType != "Control") {return;}
  918. var selectedRange = eWebEditor.document.selection.createRange();
  919. for (var i=0; i<selectedRange.length; i++){
  920. objReference = selectedRange.item(i);
  921. if (action=='forward'){
  922. objReference.style.zIndex  +=1;
  923. }else{
  924. objReference.style.zIndex  -=1;
  925. }
  926. objReference.style.position='relative';
  927. }
  928. }
  929. function isControlSelected(tag){
  930. if (tag){
  931. if (eWebEditor.document.selection.type == "Control") {
  932. var oControlRange = eWebEditor.document.selection.createRange();
  933. if (oControlRange(0).tagName.toUpperCase() == tag) {
  934. return true;
  935. }
  936. }
  937. }
  938. return false;
  939. }
  940. function findParentElement(tag) {
  941. var el = null;
  942. if (eWebEditor.document.selection.type != "Control") {
  943. el = eWebEditor.document.selection.createRange().parentElement();
  944. while (el.tagName.toUpperCase() != tag){
  945. el = el.parentElement;
  946. if (el == null){
  947.                 break;
  948. }
  949. }
  950. }
  951. return el;
  952. }
  953. function sizeChange(size){
  954. if (!BrowserInfo.IsIE55OrMore){
  955. alert("此功能需要IE5.5版本以上的支持!");
  956. return false;
  957. }
  958. for (var i=0; i<parent.frames.length; i++){
  959. if (parent.frames[i].document==self.document){
  960. var obj=parent.frames[i].frameElement;
  961. var height = parseInt(obj.offsetHeight);
  962. if (height+size>=300){
  963. obj.height=height+size;
  964. }
  965. break;
  966. }
  967. }
  968. }
  969. function mapEdit(){
  970. if (!validateMode()) {return;}
  971. saveHistory();
  972. var b = false;
  973. if (eWebEditor.document.selection.type == "Control") {
  974. var oControlRange = eWebEditor.document.selection.createRange();
  975. if (oControlRange(0).tagName.toUpperCase() == "IMG") {
  976. b = true;
  977. }
  978. }
  979. if (!b){
  980. alert("热点链接只能作用于图片");
  981. return;
  982. }
  983. window.open("dialog/map.htm", "mapEdit"+sLinkFieldName, "toolbar=no,location=no,directories=no,status=not,menubar=no,scrollbars=no,resizable=yes,width=450,height=300");
  984. }
  985. function paragraphAttr(){
  986. if (!validateMode()) {return;}
  987. eWebEditor.focus();
  988. if (!tagInSelection("P")){
  989. alert("段落属性只能应用于段落,请至少选择一个段落!");
  990. return;
  991. }
  992. showDialog('paragraph.htm', true);
  993. }
  994. function tagInSelection(tag){
  995. var sel = eWebEditor.document.selection.createRange();
  996. sel.type = eWebEditor.document.selection.type;
  997. if (sel.type!="Control"){
  998. var oBody = eWebEditor.document.body;
  999. var aAllEl = oBody.getElementsByTagName(tag);
  1000. var aSelEl = new Array();
  1001. var oRngTemp = oBody.createTextRange();
  1002. for(var i=0;i<aAllEl.length;i++){
  1003. oRngTemp.moveToElementText(aAllEl(i));
  1004. if (sel.inRange(oRngTemp)){
  1005. aSelEl[aSelEl.length] = aAllEl[i];
  1006. }else{
  1007. if ( ((sel.compareEndPoints("StartToEnd",oRngTemp)<0)&&(sel.compareEndPoints("StartToStart",oRngTemp)>0)) || ((sel.compareEndPoints("EndToStart",oRngTemp)>0)&&(sel.compareEndPoints("EndToEnd",oRngTemp)<0)) ){
  1008. aSelEl[aSelEl.length] = aAllEl[i];
  1009. }
  1010. }
  1011. }
  1012. if (aSelEl.length>0){
  1013. return true;
  1014. }
  1015. }
  1016. return false;
  1017. }
  1018. function splitTextField(objField, html) { 
  1019. objField.value = html;
  1020. if (config.ServerExt != "asp") {return;}
  1021. var strFieldName = objField.name;
  1022. var objForm = objField.form;
  1023. var objDocument = objField.document;
  1024. var FormLimit = 50000 ;
  1025. for (var i=1;i<objDocument.getElementsByName(strFieldName).length;i++) {
  1026. objDocument.getElementsByName(strFieldName)[i].value = "";
  1027. }
  1028. if (html.length > FormLimit) { 
  1029. objField.value = html.substr(0, FormLimit) ;
  1030. html = html.substr(FormLimit) ;
  1031. while (html.length > 0) { 
  1032. var objTEXTAREA = objDocument.createElement("TEXTAREA") ;
  1033. objTEXTAREA.name = strFieldName ;
  1034. objTEXTAREA.style.display = "none" ;
  1035. objTEXTAREA.value = html.substr(0, FormLimit) ;
  1036. objForm.appendChild(objTEXTAREA) ;
  1037. html = html.substr(FormLimit) ;
  1038. }
  1039. var history = new Object;
  1040. history.data = [];
  1041. history.position = 0;
  1042. history.bookmark = [];
  1043. history.saved = false;
  1044. function saveHistory() {
  1045. history.saved = true;
  1046. var html = getHTML();
  1047. if (history.data[history.position] != html){
  1048. var nBeginLen = history.data.length;
  1049. var nPopLen = history.data.length - history.position;
  1050. for (var i=1; i<nPopLen; i++){
  1051. history.data.pop();
  1052. history.bookmark.pop();
  1053. }
  1054. history.data[history.data.length] = html;
  1055. if (eWebEditor.document.selection.type != "Control"){
  1056. try{
  1057. history.bookmark[history.bookmark.length] = eWebEditor.document.selection.createRange().getBookmark();
  1058. }catch(e){
  1059. history.bookmark[history.bookmark.length] = "";
  1060. }
  1061. } else {
  1062. var oRng = eWebEditor.document.selection.createRange();
  1063. var el = oRng.item(0);
  1064. history.bookmark[history.bookmark.length] = "[object]|" + el.tagName + "|" + getElementTagIndex(el);
  1065. }
  1066. if (nBeginLen!=0){
  1067. history.position++;
  1068. }
  1069. }
  1070. }
  1071. function getElementTagIndex(el){
  1072. var els = eWebEditor.document.body.getElementsByTagName(el.tagName);
  1073. for (var i=0; i<els.length; i++){
  1074. if (els[i]==el){
  1075. return i;
  1076. }
  1077. }
  1078. return null;
  1079. }
  1080. function initHistory() {
  1081. history.data.length = 0;
  1082. history.bookmark.length = 0;
  1083. history.position = 0;
  1084. history.saved = false;
  1085. }
  1086. function goHistory(value) {
  1087. if (!history.saved){saveHistory();}
  1088. //eWebEditor.focus();
  1089. // undo
  1090. if (value == -1){
  1091. if (history.position > 0){
  1092. history.position = history.position - 1;
  1093. setHTML(history.data[history.position], true);
  1094. setHistoryCursor();
  1095. }
  1096. // redo
  1097. } else {
  1098. if (history.position < history.data.length -1){
  1099. history.position = history.position + 1;
  1100. setHTML(history.data[history.position], true);
  1101. setHistoryCursor();
  1102. }
  1103. }
  1104. eWebEditor.focus();
  1105. }
  1106. function setHistoryCursor() {
  1107. var s_Bookmark = history.bookmark[history.position];
  1108. if (s_Bookmark){
  1109. //eWebEditor_Toolbar.focus();
  1110. eWebEditor_Layout.focus();
  1111. if (s_Bookmark.substring(0,8) != "[object]"){
  1112. r = eWebEditor.document.body.createTextRange();
  1113. if (r.moveToBookmark(history.bookmark[history.position])){
  1114. //r.duplicate();
  1115. //r.collapse(false);
  1116. r.select();
  1117. }
  1118. }else{
  1119. if (sCurrMode=="EDIT"){
  1120. r = eWebEditor.document.body.createControlRange();
  1121. var a = s_Bookmark.split("|");
  1122. var els = eWebEditor.document.body.getElementsByTagName(a[1]);
  1123. var el = els[a[2]];
  1124. r.addElement(el);
  1125. r.select();
  1126. }
  1127. }
  1128. }
  1129. }
  1130. function getStyleEditorHeader(){
  1131. if ((sCurrMode=="EDIT") || (sCurrMode=="VIEW")){
  1132. return config.StyleEditorHeader1 + sExtCSS + config.StyleEditorHeader2;
  1133. }else{
  1134. return config.StyleEditorHeader1 + config.StyleEditorHeader2;
  1135. }
  1136. }
  1137. // n_Type  -  0:en; 1:chs; 2:en+chs(1);3,en+chs(2)
  1138. function getCount(n_Type){
  1139. var str=getText();
  1140. str = str.replace(/n/g,"");
  1141. str = str.replace(/r/g,"");
  1142. var l=str.length;
  1143. var n=0;
  1144.     for (var i=0;i<l;i++){
  1145.         if (str.charCodeAt(i)<0||str.charCodeAt(i)>255){
  1146. if (n_Type!=0){
  1147. n++;
  1148. if (n_Type==3){
  1149. n++;
  1150. }
  1151. }
  1152. }else{
  1153. if (n_Type!=1){
  1154. n++;
  1155. }
  1156. }
  1157.     }
  1158.     return n;
  1159. }
  1160. function getText(){
  1161. eWebEditor_Temp_HTML.innerHTML = getHTML();
  1162. var s = eWebEditor_Temp_HTML.innerText;
  1163. return s;
  1164. }