決渠阻,勝隼嗤js亟議荷恬狼由

http://www.masswerk.at/jsuix/

  // JS/UIX v0.44

  // (c) mass:werk (N.Landsteiner) 2003

  // all rights reserved

  // term gui

  var conf_term_x=102;

  var conf_term_y=34;

  var conf_kbd_offset=34;

  var termImgPath='jsuix_support/';

  var termDiv='termDiv';

  var termBgColor='#181818';

  var termFrameColor='#555555';

  var termPageColor='#222222';

  var conf_repeat_delay1=320;

  var conf_repeat_delay2=170;

  var termKbdDiv='termKbdDiv';

  var termKbdBgColor='#222222';

  var keycapspath='jsuix_support/keycaps/';

  var termSubDivs=false;

  var termLayers=false;

  var termDocNS4=null;

  var termStringStart='';

  var termStringEnd='';

  var termKbdDocNS4=null;

  var termKbdOn=false;

  var keycapsShift=false;

  var keycapsCpslk=false;

  var keycapsShiftRef=new Array();

  var keycapsCpslkRef=new Array();

  var termSpecials=new Array();

  termSpecials[0]=' ';

  termSpecials[1]='$';

  termSpecials[2]=' ';

  termSpecials[3]='?';

  termSpecials[4]='#';

  termSpecials[32]=' ';

  termSpecials[34]='"';

  termSpecials[38]='&';

  termSpecials[60]='<';

  termSpecials[62]='>';

  termSpecials[127]='◊';

  var termStyles=new Array(1,2,4,8);

  var termStyleOpen=new Array();

  var termStyleClose=new Array();

  termStyleOpen[1]='<SPAN CLASS="termReverse">';

  termStyleClose[1]='<\/SPAN>';

  termStyleOpen[2]='<U>';

  termStyleClose[2]='<\/U>';

  termStyleOpen[4]='<I>';

  termStyleClose[4]='<\/I>';

  termStyleOpen[8]='<STRIKE>';

  termStyleClose[8]='<\/STRIKE>';

  // buttons UI

  var termImgNames=new Array('left_lo', 'left_hi', 'right_lo', 'right_hi', 'delete_lo', 'delete_hi', 'esc_lo', 'esc_hi', 'kbd_show_lo', 'kbd_show_hi', 'kbd_hide_lo', 'kbd_hide_hi');

  var termImages=new Array();

  function termImgPreload(path,imgnames) {

  for (var i=0; i<imgnames.length; i++) {

  var n=imgnames[i];

  termImages[n]=new Image();

  termImages[n].src=path+n+'.gif'

  }

  }

  if (document.images) termImgPreload(termImgPath,termImgNames);

  function termSetImg(n,v) {

  if (document.images) {

  var img=(termLayers)? termDocNS4.images['term_'+n] : document.images['term_'+n];

  var stat=(v)? '_hi' : '_lo';

  img.src=termImages[n+stat].src

  }

  }

  // UI keyboard

  // key maps (200=left shift, 202=right shift, 204=CpsLock)

  var termKeyMap= [

  [96,49,50,51,52,53,54,55,56,57,48,45,61,8],

  [27,113,119,101,114,116,121,117,105,111,112,91,93,13],

  [204,97,115,100,102,103,104,106,107,108,59,39,35],

  [200,92,122,120,99,118,98,110,109,44,46,47,30,202],

  [32,28,31,29]

  ];

  var termKeyMapShift=[

  [126,33,34,35,36,37,94,38,42,40,41,95,43,8],

  [27,81,87,69,82,84,89,85,73,79,80,123,125,13],

  [204,65,83,68,70,71,72,74,75,76,58,34,64],

  [200,124,90,88,67,86,66,78,77,60,62,63,30,202],

  [32,28,31,29]

  ];

  var termKeyMapCpslk=[

  [96,49,50,51,52,53,54,55,56,57,48,45,61,8],

  [27,81,87,69,82,84,89,85,73,79,80,91,93,13],

  [204,65,83,68,70,71,72,74,75,76,59,39,35],

  [200,92,90,88,67,86,66,78,77,44,46,47,30,202],

  [32,28,31,29]

  ];

  var termKeyWdth=[

  [35,35,35,35,35,35,35,35,35,35,35,35,35,69],

  [55,35,35,35,35,35,35,35,35,35,35,35,35,0],

  [65,35,35,35,35,35,35,35,35,35,35,35,35],

  [49,35,35,35,35,35,35,35,35,35,35,35,35,54],

  [252,35,35,35]

  ];

  var keycapsImgNames=new Array(200,201,202,203,204,205);

  function termKeyCaps(k) {

  if ((k<28) && (k>=32) && (repeatTimer)) clearTimeout(repeatTimer);

  if (k==204) {

  keycapsCpslk=(!keycapsCpslk);

  var cnr=(keycapsCpslk)? 205:204;

  termKbdSetImg(204,cnr)

  }

  else if ((k==200) || (k==202)) {

  keycapsShift=(!keycapsShift);

  var m=(keycapsShift)? 1:0;

  termKbdSetImg(200,200+m);

  termKbdSetImg(202,202+m)

  }

  else {

  var ch=0;

  if (keycapsShift) {

  ch=keycapsShiftRef[k]

  keycapsShift=false;

  termKbdSetImg(200,200);

  termKbdSetImg(202,202)

  }

  else if (keycapsCpslk) ch=keycapsCpslkRef[k]

  else ch=k;

  keyHandler({which:ch,jsuix_remapped:true})

  }

  }

  function termKbdSetImg(n,v) {

  if (document.images) {

  var img=(termLayers)? termKbdDocNS4.images['key'+n] : document.images['key'+n];

  img.src=termImages[v].src

  }

  }

  function termSetKbdButton(v) {

  if (document.images) {

  var img=(termLayers)? termDocNS4.images.term_kbd_show : document.images.term_kbd_show;

  var n=(termKbdOn)? 'kbd_hide' : 'kbd_show';

  var stat=(v)? '_hi' : '_lo';

  img.src=termImages[n+stat].src

  }

  }

  function termKbdShow() {

  if (termKbdOn) {

  setDivVisibility(termKbdDiv,0);

  termKbdOn=false;

  termSetKbdButton(0)

  }

  else {

  termImgPreload(keycapspath,keycapsImgNames);

  keycapsShift=false;

  keycapsCpslk=false;

  var s='<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0">\n';

  s+='<TR><TD WIDTH="7" BGCOLOR="'+termPageColor+'"><IMG SRC="'+keycapspath+'spacer.gif" WIDTH="7" HEIGHT="2"><\/TD>\n';

  s+='<TD BGCOLOR="'+termPageColor+'">'+termMakeKbd()+'</TD>\n';

  s+'<TD WIDTH="7" BGCOLOR="'+termPageColor+'"><IMG SRC="'+keycapspath+'spacer.gif" WIDTH="7" HEIGHT="2"><\/TD><\TR>\n';

  s+='<TR><TD HEIGHT="10" COLSPAN="3" BGCOLOR="'+termPageColor+'"><IMG SRC="'+keycapspath+'spacer.gif" WIDTH="2" HEIGHT="10"><\/TD><\/TR>\n';

  s+='<\/TABLE>';

  writeElement(termKbdDiv,s);

  setDivXY(termKbdDiv,conf_term_x,conf_term_y+conf_kbd_offset+conf_rows*conf_rowheigt);

  if (termLayers) termKbdDocNS4=document.layers[termKbdDiv].document;

  termKbdOn=true;

  setDivVisibility(termKbdDiv,1);

  termSetKbdButton(0)

  }

  }

  function termMakeKbd() {

  var s='<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0">\n';

  for (var i=0; i<termKeyMap.length; i++) {

  s+='<TR><TD NOWRAP HEIGHT="39" VALIGN="top" NOWRAP BGCOLOR="'+termKbdBgColor+'">';

  for (var k=0; k<termKeyMap[i].length; k++) {

  var kc=termKeyMap[i][k];

  keycapsShiftRef[kc]=termKeyMapShift[i][k];

  keycapsCpslkRef[kc]=termKeyMapCpslk[i][k];

  if (kc==13) {

  s+='<A HREF="javas'+'cript:termKeyCaps(13)" onfocus="if(this.blur)this.blur()"><IMG SRC="'+keycapspath+'13_1.gif" HSPACE="0" VSPACE="0" ALIGN="top" BORDER="0" WIDTH="47" HEIGHT="39"><\/A>';

  continue

  };

  if (kc==32) s+='<IMG SRC="'+keycapspath+'spacer.gif" WIDTH="139" HEIGHT="35" HSPACE="1" VSPACE="1" ALIGN="top">'

  else if (kc==28) {

  s+='<IMG SRC="'+keycapspath+'spacer.gif" WIDTH="23" HEIGHT="35" HSPACE="1" VSPACE="1" ALIGN="top">';

  s+='<A HREF="javasc'+'ript:cursorKbdLeft()" onfocus="if(this.blur)this.blur()" onmousedown="repeatSet(\'left\',1)" onmouseup="repeatClear()"><IMG SRC="'+keycapspath+kc+'.gif" NAME="key'+kc+'" HSPACE="1" VSPACE="1" ALIGN="top" BORDER="0" WIDTH="'+termKeyWdth[i][k]+'" HEIGHT="35"><\/A>';

  continue

  }

  else if (kc==29) {

  s+='<A HREF="javasc'+'ript:cursorKbdRight()" onfocus="if(this.blur)this.blur()" onmousedown="repeatSet(\'right\',1)" onmouseup="repeatClear()"><IMG SRC="'+keycapspath+kc+'.gif" NAME="key'+kc+'" HSPACE="1" VSPACE="1" ALIGN="top" BORDER="0" WIDTH="'+termKeyWdth[i][k]+'" HEIGHT="35"><\/A>';

  continue

  }

  else if (kc==8) {

  s+='<A HREF="javasc'+'ript:termKbdBackspace()" onfocus="if(this.blur)this.blur()" onmousedown="repeatSet(\'backspace\',1)" onmouseup="repeatClear()"><IMG SRC="'+keycapspath+kc+'.gif" NAME="key'+kc+'" HSPACE="1" VSPACE="1" ALIGN="top" BORDER="0" WIDTH="'+termKeyWdth[i][k]+'" HEIGHT="35"><\/A>';

  continue

  }

  s+='<A HREF="javas'+'cript:termKeyCaps('+kc+')" onfocus="if(this.blur)this.blur()"><IMG SRC="'+keycapspath+kc+'.gif" NAME="key'+kc+'" HSPACE="1" VSPACE="1" ALIGN="top" BORDER="0" WIDTH="'+termKeyWdth[i][k]+'" HEIGHT="35"><\/A>';

  if (kc==35) s+='<A HREF="javas'+'cript:termKeyCaps(13)" onfocus="if(this.blur)this.blur()"><IMG SRC="'+keycapspath+'13_2.gif" HSPACE="0" VSPACE="0" ALIGN="top" BORDER="0" WIDTH="37" HEIGHT="36"><\/A>';

  };

  s+='<\/TD><\/TR>\n';

  };

  s+='<\/TABLE>';

  return s

  }

  // term UI

  function termHide() {

  if (repeatTimer) clearTimeout(repeatTimer);

  if (termKbdOn) termKbdShow();

  setDivVisibility(termDiv,0)

  }

  function makeTerm() {

  window.status='Building terminal ...';

  termLayers=(document.layers)? true:false;

  termSubDivs=(navigator.userAgent.indexOf('Gecko')<0);

  var s='';

  s+='<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1">\n';

  s+='<TR><TD BGCOLOR="'+termFrameColor+'" COLSPAN="2"><TABLE BORDER="0" CELLSPACING="0" CELLPADDING="2"><TR><TD  BGCOLOR="'+termBgColor+'"><TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0">\n';

  var rstr='';

  for (var c=0; c<conf_cols; c++) rstr+=' ';

  for (var r=0; r<conf_rows; r++) {

  var id=((termLayers) || (termSubDivs))? '' : ' ID="term_'+r+'"';

  s+='<TR><TD NOWRAP HEIGHT="'+conf_rowheigt+'"'+id+' CLASS="term">'+rstr+'<\/TD><\/TR>\n';

  };

  s+='<\/TABLE><\/TD><\/TR>\n';

  s+='<\/TABLE><\/TD><\/TR>\n';

  s+='<TR>\n<TD VALIGN="middle" BGCOLOR="'+termPageColor+'"><TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1"><TR>\n';

  s+='<TD><A HREF="javasc'+'ript:termKbdShow()" onmouseover="termSetKbdButton(1); window.status=\'show/hide full graphic keyboard\'; return true" onmouseout="termSetKbdButton(0); window.status=\'\'; return true" onfocus="if(this.blur)this.blur()"><IMG SRC="'+termImgPath+'kbd_show_lo.gif" NAME="term_kbd_show" WIDTH="73" HEIGHT="19" BORDER="0" HSPACE="5" ALT="show/hide keyboard"><\/A><\/TD><\/TR><\/TABLE><\/TD>\n';

  s+='<TD ALIGN="right"><TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1"><TR>\n';

  s+='<TD><A HREF="javasc'+'ript:cursorKbdLeft()" onmouseover="termSetImg(\'left\',1); window.status=\'left\'; return true" onmouseout="termSetImg(\'left\',0); window.status=\'\'; return true" onfocus="if(this.blur)this.blur()" TITLE="cursor left" onmousedown="repeatSet(\'left\',1)" onmouseup="repeatClear()"><IMG SRC="'+termImgPath+'left_lo.gif" NAME="term_left" WIDTH="23" HEIGHT="23" ALT="cursor left" BORDER="0"><\/A><\/TD>\n';

  s+='<TD><A HREF="javasc'+'ript:cursorKbdRight()" onmouseover="termSetImg(\'right\',1); window.status=\'right\'; return true" onmouseout="termSetImg(\'right\',0); window.status=\'\'; return true" onfocus="if(this.blur)this.blur()" TITLE="cursor right" onmousedown="repeatSet(\'right\',1)" onmouseup="repeatClear()"><IMG SRC="'+termImgPath+'right_lo.gif" NAME="term_right" WIDTH="23" HEIGHT="23" ALT="cursor right" BORDER="0"><\/A><\/TD>\n';

  s+='<TD><A HREF="javasc'+'ript:termKbdBackspace()" onmouseover="termSetImg(\'delete\',1); window.status=\'backspace\'; return true" onmouseout="termSetImg(\'delete\',0); window.status=\'\'; return true" onfocus="if(this.blur)this.blur()" TITLE="backspace" onmousedown="repeatSet(\'backspace\',1)" onmouseup="repeatClear()"><IMG SRC="'+termImgPath+'delete_lo.gif" NAME="term_delete" WIDTH="23" HEIGHT="23" ALT="backspace" BORDER="0"><\/A><\/TD>\n';

  s+='<TD><A HREF="javasc'+'ript:termKbdEsc()" onmouseover="termSetImg(\'esc\',1); window.status=\'esc\'; return true" onmouseout="termSetImg(\'esc\',0); window.status=\'\'; return true" onfocus="if(this.blur)this.blur()" TITLE="esc"><IMG SRC="'+termImgPath+'esc_lo.gif" NAME="term_esc" WIDTH="23" HEIGHT="23" ALT="esc" BORDER="0"><\/A><\/TD>\n';

  s+='<\/TR><\/TABLE><\/TD><\/TR>\n';

  s+='<\/TABLE>\n';

  if (termLayers) {

  for (var r=0; r<conf_rows; r++) {

  s+='<LAYER NAME="term_'+r+'" TOP="'+(3+r*conf_rowheigt)+'" LEFT="3" CLASS="term"><\/LAYER>\n'

  };

  termDocNS4=document.layers[termDiv].document;

  termStringStart='<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD NOWRAP HEIGHT="'+conf_rowheigt+'" CLASS="term">';

  termStringEnd='<\/TD><\/TR><\/TABLE>';

  }

  else if (termSubDivs) {

  for (var r=0; r<conf_rows; r++) {

  s+='<DIV ID="term_'+r+'" STYLE="position:absolute; top:'+(3+r*conf_rowheigt)+'px; left: 3px;" CLASS="term"><\/DIV>\n'

  };

  termStringStart='<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD NOWRAP HEIGHT="'+conf_rowheigt+'" CLASS="term">';

  termStringEnd='<\/TD><\/TR><\/TABLE>';

  };

  writeElement(termDiv,s);

  setDivXY(termDiv,conf_term_x,conf_term_y);

  setDivVisibility(termDiv,1);

  window.status=''

  }

  function termDisplay(r) {

  var s=termStringStart;

  var curStyle=0;

  for (var i=0; i<conf_cols; i++) {

  var c=term[r][i];

  var cs=termStyle[r][i];

  if (cs!=curStyle) {

  if (curStyle) {

  for (var k=termStyles.length-1; k>=0; k--) {

  var st=termStyles[k];

  if (curStyle&st) s+=termStyleClose[st];

  }

  };

  curStyle=cs;

  for (var k=0; k<termStyles.length; k++) {

  var st=termStyles[k];

  if (curStyle&st) s+=termStyleOpen[st];

  }

  };

  s+= (termSpecials[c])? termSpecials[c] : String.fromCharCode(c);

  };

  if (curStyle>0) {

  for (var k=termStyles.length-1; k>=0; k--) {

  var st=termStyles[k];

  if (curStyle&st) s+=termStyleClose[st];

  }

  };

  s+=termStringEnd;

  writeElement('term_'+r,s,termDocNS4)

  }

  function termGuiReady() {

  ready=true;

  if (termGuiElementReady(termDiv, self.document)) {

  for (var r=0; r<conf_rows; r++) {

  if (termGuiElementReady('term_'+r,termDocNS4)==false) {

  ready=false;

  break

  }

  }

  }

  else ready=false;

  return ready

  }

  function cursorKbdLeft() {

  keyHandler({which:28})

  }

  function cursorKbdRight() {

  keyHandler({which:29})

  }

  function termKbdBackspace() {

  keyHandler({which:8})

  }

  function termKbdEsc() {

  keyHandler({which:27})

  }

  function termKbdClear() {

  if ((!cnslLock) && (!cnslRawMode)) cnslReset();

  }

  // UI-button repeat

  function repeatSet(cmd,on) {

  if (repeatTimer) clearTimeout(repeatTimer);

  repeatTimer=setTimeout('repeatDo("'+cmd+'")',conf_repeat_delay1);

  }

  function repeatClear() {

  if (repeatTimer) clearTimeout(repeatTimer);

  }

  function repeatDo(cmd) {

  if (repeatTimer) clearTimeout(repeatTimer);

  if (cmd=='left') cursorKbdLeft()

  else if (cmd=='right') cursorKbdRight()

  else if (cmd=='backspace') termKbdBackspace();

  repeatTimer=setTimeout('repeatDo("'+cmd+'")',conf_repeat_delay2);

  }

  // basic dynamics

  function writeElement(e,t,d) {

  if (document.layers) {

  var doc=(d)? d : self.document;

  doc.layers[e].document.open();

  doc.layers[e].document.write(t);

  doc.layers[e].document.close()

  }

  else if (document.getElementById) {

  var obj=document.getElementById(e);

  obj.innerHTML=t

  }

  else if (document.all) {

  document.all[e].innerHTML=t

  }

  }

  function setDivXY(d,x,y) {

  if (document.layers) {

  document.layers[d].moveTo(x,y)

  }

  else if (document.getElementById) {

  var obj=document.getElementById(d);

  obj.style.left=x+'px';

  obj.style.top=y+'px'

  }

  else if (document.all) {

  document.all[d].style.left=x+'px';

  document.all[d].style.top=y+'px'

  }

  }

  function setDivVisibility(d,v) {

  if (document.layers) {

  document.layers[d].visibility= (v)? 'show':'hide';

  }

  else if (document.getElementById) {

  var obj=document.getElementById(d);

  obj.style.visibility= (v)? 'visible':'hidden';

  }

  else if (document.all) {

  document.all[d].style.visibility= (v)? 'visible':'hidden';

  }

  }

  function termGuiElementReady(e,d) {

  if (document.layers) {

  var doc=(d)? d : self.document;

  return ((doc) && (doc.layers[e]))? true:false

  }

  else if (document.getElementById) {

  return (document.getElementById(e))? true:false

  }

  else if (document.all) {

  return (document.all[e])? true:false

  }

  else return false

  }

  //eof