edit.js
上传用户:nbluoke
上传日期:2013-08-09
资源大小:4851k
文件大小:10k
源码类别:

教育系统应用

开发平台:

WORD

  1. SEP_PADDING = 5
  2. HANDLE_PADDING = 7
  3. var yToolbars = new Array();
  4. var YInitialized = false;
  5. function document.onreadystatechange()
  6. {
  7.   if (YInitialized) return;
  8.   YInitialized = true;
  9.   var i, s, curr;
  10.   for (i=0; i<document.body.all.length; i++)
  11.   {
  12.     curr=document.body.all[i];
  13.     if (curr.className == "yToolbar")
  14.     {
  15.       InitTB(curr);
  16.       yToolbars[yToolbars.length] = curr;
  17.     }
  18.   }
  19.   DoLayout();
  20.   window.onresize = DoLayout;
  21.   Composition.document.open()
  22.   Composition.document.write("<head><style type="text/css">body {font-size: 10.8pt}</style><meta http-equiv=Content-Type content="text/html; charset=gb2312"></head><BODY bgcolor="#FFFFFF" MONOSPACE></body>");
  23.   Composition.document.close()
  24.   Composition.document.designMode="On"
  25. }
  26. function InitBtn(btn)
  27. {
  28.   btn.onmouseover = BtnMouseOver;
  29.   btn.onmouseout = BtnMouseOut;
  30.   btn.onmousedown = BtnMouseDown;
  31.   btn.onmouseup = BtnMouseUp;
  32.   btn.ondragstart = YCancelEvent;
  33.   btn.onselectstart = YCancelEvent;
  34.   btn.onselect = YCancelEvent;
  35.   btn.YUSERONCLICK = btn.onclick;
  36.   btn.onclick = YCancelEvent;
  37.   btn.YINITIALIZED = true;
  38.   return true;
  39. }
  40. function InitTB(y)
  41. {
  42.   y.TBWidth = 0;
  43.   if (! PopulateTB(y)) return false;
  44.   y.style.posWidth = y.TBWidth;
  45.   return true;
  46. }
  47. function YCancelEvent()
  48. {
  49.   event.returnValue=false;
  50.   event.cancelBubble=true;
  51.   return false;
  52. }
  53. function BtnMouseOver()
  54. {
  55.   if (event.srcElement.tagName != "IMG") return false;
  56.   var image = event.srcElement;
  57.   var element = image.parentElement;
  58.   if (image.className == "Ico") element.className = "BtnMouseOverUp";
  59.   else if (image.className == "IcoDown") element.className = "BtnMouseOverDown";
  60.   event.cancelBubble = true;
  61. }
  62. function BtnMouseOut()
  63. {
  64.   if (event.srcElement.tagName != "IMG") {
  65.     event.cancelBubble = true;
  66.     return false;
  67.   }
  68.   var image = event.srcElement;
  69.   var element = image.parentElement;
  70.   yRaisedElement = null;
  71.   element.className = "Btn";
  72.   image.className = "Ico";
  73.   event.cancelBubble = true;
  74. }
  75. function BtnMouseDown()
  76. {
  77.   if (event.srcElement.tagName != "IMG") {
  78.     event.cancelBubble = true;
  79.     event.returnValue=false;
  80.     return false;
  81.   }
  82.   var image = event.srcElement;
  83.   var element = image.parentElement;
  84.   element.className = "BtnMouseOverDown";
  85.   image.className = "IcoDown";
  86.   event.cancelBubble = true;
  87.   event.returnValue=false;
  88.   return false;
  89. }
  90. function BtnMouseUp()
  91. {
  92.   if (event.srcElement.tagName != "IMG") {
  93.     event.cancelBubble = true;
  94.     return false;
  95.   }
  96.   var image = event.srcElement;
  97.   var element = image.parentElement;
  98.   if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "anonymous()");
  99.   element.className = "BtnMouseOverUp";
  100.   image.className = "Ico";
  101.   event.cancelBubble = true;
  102.   return false;
  103. }
  104. function PopulateTB(y)
  105. {
  106.   var i, elements, element;
  107.   elements = y.children;
  108.   for (i=0; i<elements.length; i++) {
  109.     element = elements[i];
  110.     if (element.tagName == "SCRIPT" || element.tagName == "!") continue;
  111.     switch (element.className) {
  112.     case "Btn":
  113.       if (element.YINITIALIZED == null) {
  114. if (! InitBtn(element))
  115. return false;
  116.       }
  117.       element.style.posLeft = y.TBWidth;
  118.       y.TBWidth += element.offsetWidth + 1;
  119.       break;
  120.     case "TBGen":
  121.       element.style.posLeft = y.TBWidth;
  122.       y.TBWidth += element.offsetWidth + 1;
  123.       break;
  124.     case "TBSep":
  125.       element.style.posLeft = y.TBWidth + 2;
  126.       y.TBWidth += SEP_PADDING;
  127.       break;
  128.     case "TBHandle":
  129.       element.style.posLeft = 2;
  130.       y.TBWidth += element.offsetWidth + HANDLE_PADDING;
  131.       break;
  132.     default:
  133.       return false;
  134.     }
  135.   }
  136.   y.TBWidth += 1;
  137.   return true;
  138. }
  139. function DebugObject(obj)
  140. {
  141.   var msg = "";
  142.   for (var i in TB) {
  143.     ans=prompt(i+"="+TB[i]+"n");
  144.     if (! ans) break;
  145.   }
  146. }
  147. function LayoutTBs()
  148. {
  149.   NumTBs = yToolbars.length;
  150.   if (NumTBs == 0) return;
  151.   var i;
  152.   var ScrWid = (document.body.offsetWidth) - 6;
  153.   var TotalLen = ScrWid;
  154.   for (i = 0 ; i < NumTBs ; i++) {
  155.     TB = yToolbars[i];
  156.     if (TB.TBWidth > TotalLen) TotalLen = TB.TBWidth;
  157.   }
  158.   var PrevTB;
  159.   var LastStart = 0;
  160.   var RelTop = 0;
  161.   var LastWid, CurrWid;
  162.   var TB = yToolbars[0];
  163.   TB.style.posTop = 0;
  164.   TB.style.posLeft = 0;
  165.   var Start = TB.TBWidth;
  166.   for (i = 1 ; i < yToolbars.length ; i++) {
  167.     PrevTB = TB;
  168.     TB = yToolbars[i];
  169.     CurrWid = TB.TBWidth;
  170.     if ((Start + CurrWid) > ScrWid) {
  171.       Start = 0;
  172.       LastWid = TotalLen - LastStart;
  173.     }
  174.     else {
  175.       LastWid = PrevTB.TBWidth;
  176.       RelTop -= TB.offsetHeight;
  177.     }
  178.     TB.style.posTop = RelTop;
  179.     TB.style.posLeft = Start;
  180.     PrevTB.style.width = LastWid;
  181.     LastStart = Start;
  182.     Start += CurrWid;
  183.   }
  184.   TB.style.width = TotalLen - LastStart;
  185.   i--;
  186.   TB = yToolbars[i];
  187.   var TBInd = TB.sourceIndex;
  188.   var A = TB.document.all;
  189.   var item;
  190.   for (i in A) {
  191.     item = A.item(i);
  192.     if (! item) continue;
  193.     if (! item.style) continue;
  194.     if (item.sourceIndex <= TBInd) continue;
  195.     if (item.style.position == "absolute") continue;
  196.     item.style.posTop = RelTop;
  197.   }
  198. }
  199. function DoLayout()
  200. {
  201.   LayoutTBs();
  202. }
  203. function validateMode()
  204. {
  205.   if (! bTextMode) return true;
  206.   alert("请取消“使用 HTML 语法书写”选项再使用系统编辑功能!");
  207.   Composition.focus();
  208.   return false;
  209. }
  210. function format1(what,opt)
  211. {
  212.   if (opt=="removeFormat")
  213.   {
  214.     what=opt;
  215.     opt=null;
  216.   }
  217.   if (opt==null) Composition.document.execCommand(what);
  218.   else Composition.document.execCommand(what,"",opt);
  219.   pureText = false;
  220.   Composition.focus();
  221. }
  222. function format(what,opt)
  223. {
  224.   if (!validateMode()) return;
  225.   format1(what,opt);
  226. }
  227. function setMode(newMode)
  228. {
  229.   bTextMode = newMode;
  230.   var cont;
  231.   if (bTextMode) {
  232.     cleanHtml();
  233.     cleanHtml();
  234.     cont=Composition.document.body.innerHTML;
  235.     Composition.document.body.innerText=cont;
  236.   } else {
  237.     cont=Composition.document.body.innerText;
  238.     Composition.document.body.innerHTML=cont;
  239.   }
  240.   Composition.focus();
  241. }
  242. function getEl(sTag,start)
  243. {
  244.   while ((start!=null) && (start.tagName!=sTag)) start = start.parentElement;
  245.   return start;
  246. }
  247. function UserDialog(what)
  248. {
  249.   if (!validateMode()) return;
  250.   Composition.document.execCommand(what, true);
  251.   pureText = false;
  252.   Composition.focus();
  253. }
  254. function foreColor()
  255. {
  256.   if (! validateMode()) return;
  257.   var arr = showModalDialog("selcolor.htm", "", "dialogWidth:18.5em; dialogHeight:17.5em; status:0");
  258.   if (arr != null) format('forecolor', arr);
  259.   else Composition.focus();
  260. }
  261. function fortable()
  262. {
  263.   if (! validateMode()) return;
  264.   var arr = showModalDialog("table.htm", "", "dialogWidth:18.5em; dialogHeight:11.5em; status:0");
  265.   if (arr != null){
  266.   var ss;
  267.   ss=arr.split("*")
  268.   row=ss[0];
  269.   col=ss[1];
  270.   var string;
  271.   string="<table border=1>";
  272.   for(i=1;i<=row;i++){
  273.   string=string+"<tr>";
  274.   for(j=1;j<=col;j++){
  275.   string=string+"<td></td>";
  276.   }
  277.   string=string+"</tr>";
  278.   }
  279.   string=string+"</table>";
  280.   content=Composition.document.body.innerHTML;
  281.   content=content+string;
  282.    Composition.document.body.innerHTML=content;
  283.   }
  284.   else Composition.focus();
  285. }
  286. function cleanHtml()
  287. {
  288.   var fonts = Composition.document.body.all.tags("FONT");
  289.   var curr;
  290.   for (var i = fonts.length - 1; i >= 0; i--) {
  291.     curr = fonts[i];
  292.     if (curr.style.backgroundColor == "#ffffff") curr.outerHTML = curr.innerHTML;
  293.   }
  294. }
  295. function getPureHtml()
  296. {
  297.   var str = "";
  298.   var paras = Composition.document.body.all.tags("P");
  299.   if (paras.length > 0) {
  300.     for (var i=paras.length-1; i >= 0; i--) str = paras[i].innerHTML + "n" + str;
  301.   } else {
  302.     str = Composition.document.body.innerHTML;
  303.   }
  304.   return str;
  305. }
  306. var bLoad=false
  307. var pureText=true
  308. var bodyTag="<head><style type="text/css">body {font-size: 9pt;line-height: 20px;}</style><meta http-equiv=Content-Type content="text/html; charset=gb2312"></head><BODY bgcolor="#FFFFFF" MONOSPACE>"
  309. var bTextMode=false
  310. public_description=new Editor
  311. function Editor()
  312. {
  313.   this.put_HtmlMode=setMode;
  314.   this.put_value=putText;
  315.   this.get_value=getText;
  316. }
  317. function getText()
  318. {
  319. if (bTextMode)
  320. return Composition.document.body.innerText;
  321. else
  322. {
  323. cleanHtml();
  324. cleanHtml();
  325. return Composition.document.body.innerHTML;
  326. }
  327. }
  328. function putText(v)
  329. {
  330. if (bTextMode)
  331. Composition.document.body.innerText = v;
  332. else
  333. Composition.document.body.innerHTML = v;
  334. }
  335. function InitDocument()
  336. {
  337. Composition.document.open();
  338. Composition.document.write(bodyTag);
  339. Composition.document.close();
  340. bLoad=true;
  341. }
  342. function doSelectClick(str, el) {
  343. var Index = el.selectedIndex;
  344. if (Index != 0){
  345. el.selectedIndex = 0;
  346. if (el.id == "specialtype")
  347. specialtype(el.options[Index].value);
  348. else
  349. format(str,el.options[Index].value);
  350. }
  351. }
  352. var bIsIE5 = navigator.userAgent.indexOf("IE 5")  > -1;
  353. var edit;
  354. var RangeType;
  355. function specialtype(Mark){
  356. var strHTML;
  357. if (bIsIE5) selectRange();
  358. if (RangeType == "Text"){
  359. strHTML = "<" + Mark + ">" + edit.text + "</" + Mark + ">";
  360. edit.pasteHTML(strHTML);
  361. Composition.focus();
  362. edit.select();
  363. }
  364. }
  365. function selectRange(){
  366. edit = Composition.document.selection.createRange();
  367. RangeType =  Composition.document.selection.type;
  368. }
  369. function help()
  370. {
  371.     var helpmess;
  372.     helpmess="---------------帮助系统---------------rnrn"+
  373.       "1.发布资料前请先查找有无雷同的资料,以免重复发布!rnrn"+
  374.          "2.同一段换行时请用Shit+Enter。rnrn"+
  375.  "3.若非特殊需要,请别随意改变字体、大小及颜色。rnrn"+
  376.          "4.出处和标题不能超过50个字符,若超过则自动截断.";
  377.     alert(helpmess);
  378. }