疯掉了,尽然有js写的操作系统


Posted in Javascript onApril 23, 2007

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

Javascript 相关文章推荐
jQuery Mobile的loading对话框显示/隐藏方法分享
Nov 26 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
Dec 11 Javascript
javascript获取dom的下一个节点方法
Sep 05 Javascript
jquery背景跟随鼠标滑动导航
Nov 20 Javascript
深入理解逻辑表达式的用法 与或非的用法
Jun 06 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
Dec 08 Javascript
Node.js实现注册邮箱激活功能的方法示例
Mar 23 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
Apr 10 Javascript
Node.js console控制台简单用法分析
Jan 04 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
Oct 17 Javascript
对layui数据表格动态cols(字段)动态变化详解
Oct 25 Javascript
javascript中导出与导入实现模块化管理教程
Dec 03 Javascript
刷新时清空文本框内容的js代码
Apr 23 #Javascript
漂亮的widgets,支持换肤和后期开发新皮肤
Apr 23 #Javascript
IE与FireFox的兼容性问题分析
Apr 22 #Javascript
javascript生成/解析dom的CDATA类型的字段的代码
Apr 22 #Javascript
XML+XSL 与 HTML 两种方案的结合
Apr 22 #Javascript
用javascript实现的图片马赛克后显示并切换加文字功能
Apr 21 #Javascript
JS Timing
Apr 21 #Javascript
You might like
4.与数据库的连接
2006/10/09 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
JavaScript类库D
2010/10/24 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
js 模仿锚点定位的实现方法
2016/11/19 Javascript
JS简单判断函数是否存在的方法
2017/02/13 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
2017/10/26 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
Python格式化压缩后的JS文件的方法
2015/03/05 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
Django中使用Celery的方法示例
2018/11/29 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
使用django自带的user做外键的方法
2020/11/30 Python
python爬取微博评论的实例讲解
2021/01/15 Python
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
先进个人获奖感言
2014/01/24 职场文书
期终自我鉴定
2014/02/17 职场文书
主持词开场白
2014/03/17 职场文书
合作协议书模板2014
2014/09/26 职场文书
创业计划书之酒店
2019/08/30 职场文书