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

📄 widget.js

📁 软件的主要特点: 1.专门针对有"验证码"要求的论坛. 2.可以完成如下功能: 自动发布新帖,自动回复指定帖,自动注册论坛帐号 (所有操作不能同时针对一个网站,因为有"验证码"要求的网站是每次打开一个
💻 JS
📖 第 1 页 / 共 3 页
字号:
/** * @file   modules/widget/js/widget.js * @author zero (zero@nzeo.com) * @brief  위젯 관리용 자바스크립트 **//* document.write(ln)의 경우 ajax로 처리시 가로채기 위한 함수 */document.write = document.writeln = function(str){	if ( str.match(/^<\//) ) return;	if ( !window.opera ) str = str.replace(/&(?![#a-z0-9]+;)/g, "&");    str = str.replace(/(<[a-z]+)/g, "$1 xmlns='http://www.w3.org/1999/xhtml'");    var div = null;    if(document.createElementNS) div = document.createElementNS("http://www.w3.org/1999/xhtml","div");    else div = xCreateElement('div');    xInnerHtml(div, str);	var pos;    pos = document.getElementsByTagName("*");    pos = pos[pos.length - 1];	var nodes = div.childNodes;	while ( nodes.length ) {		pos.parentNode.appendChild( nodes[0] );    }};/* DOM 속성을 구하기 위한 몇가지 함수들.. */// style의 값을 구하는게 IE랑 그외가 다름.function getStyle(obj) {    var style = obj.getAttribute("style");    if(typeof(style)=="object") style = style["cssText"];    return style;}// float: 값을 구하는게 IE랑 그외가 다름function getFloat(obj) {    var cssFloat = xIE4Up?obj.style.styleFloat:obj.style.cssFloat;    if(!cssFloat) cssFloat = 'left';    return cssFloat;}function setFloat(obj, fl) {    if(xIE4Up) obj.style.styleFloat = fl;    else obj.style.cssFloat = fl;}// padding값을 구하는 함수 (없을 경우 0으로 세팅), zbxe의 위젯에서만 사용function getPadding(obj, direct) {    var padding = obj.getAttribute("widget_padding_"+direct);    if(!padding || padding == null) padding = 0;    return padding;}/* 위젯 핸들링 시작 */var zonePageObj = null;var zoneModuleSrl = 0;function doStartPageModify(zoneID, module_srl) {    zonePageObj = xGetElementById(zoneID);    zoneModuleSrl = module_srl;    // 위젯 크기/여백 조절 레이어를 가장 밖으로 뺌    var obj = xGetElementById("tmpPageSizeLayer");    var dummy = xCreateElement("div");    xInnerHtml(dummy, xInnerHtml(obj));    dummy.id="pageSizeLayer";    dummy.style.visibility = "hidden";    dummy.style.position = "absolute";    dummy.style.left = 0;    dummy.style.top = 0;    document.body.appendChild(dummy);    obj.parentNode.removeChild(obj);    // 모든 위젯들의 크기를 정해진 크기로 맞춤    doFitBorderSize();    // 드래그와 리사이즈와 관련된 이벤트 리스너 생성    xAddEventListener(document,"click",doCheckWidget);    xAddEventListener(document,"mousedown",doCheckWidgetDrag);}// 내용 모두 삭제function removeAllWidget() {    xInnerHtml(zonePageObj, '');}/**  * 특정 영역에 편집된 위젯들을 약속된 태그로 변환하여 return **/function getWidgetContent(obj) {    var html = "";    if(typeof(obj)=='undefined' || !obj) obj = zonePageObj;    var childObj = obj.firstChild;    while(childObj) {        if(childObj.nodeName == "DIV" && childObj.getAttribute("widget"))  {            var widget = childObj.getAttribute("widget");            if(widget) {                switch(widget) {                    case 'widgetBox' :                            html += getWidgetBoxCode(childObj, widget);                        break;                    case 'widgetContent' :                            html += getContentWidgetCode(childObj, widget);                        break;                    default :                            html += getWidgetCode(childObj, widget);                        break;                }            }        }        childObj = childObj.nextSibling;    }    return html;}// 컨텐츠 위젯 코드 구함function getContentWidgetCode(childObj, widget) {    var cobj = childObj.firstChild;    while(cobj) {        if(cobj.nodeName == "DIV" && cobj.className == "widgetContent") {            var body = xInnerHtml(cobj);            return '<img src="./common/tpl/images/widget_bg.jpg" class="zbxe_widget_output" widget="widgetContent" style="'+getStyle(childObj)+'" body="'+body+'" widget_padding_left="'+getPadding(childObj,'left')+'" widget_padding_right="'+getPadding(childObj, 'right')+'" widget_padding_top="'+getPadding(childObj, 'top')+'" widget_padding_bottom="'+getPadding(childObj,'bottom')+'" />';        }        cobj = cobj.nextSibling;    }}// 위젯 박스 컨텐츠 코드 구함function getWidgetBoxCode(childObj, widget) {    var cobj = childObj.firstChild;    while(cobj) {        if(cobj.className == "widgetBorder" || cobj.className == "widgetBoxBorder") {            var c2obj = cobj.firstChild;            while(c2obj) {                if(c2obj.className == "nullWidget") {                    var body = getWidgetContent(c2obj);                    return '<div widget="widgetBox" style="'+getStyle(childObj)+'" widget_padding_left="'+getPadding(childObj,'left')+'" widget_padding_right="'+getPadding(childObj,'right')+'" widget_padding_top="'+getPadding(childObj, 'top')+'" widget_padding_bottom="'+getPadding(childObj, 'bottom')+'"><div><div>'+body+'<div class="clear"></div></div></div></div>';                }                c2obj = c2obj.nextSibling;            }        }        cobj = cobj.nextSibling;    }}// 일반 위젯 컨텐츠 코드 구함function getWidgetCode(childObj, widget) {    var attrs = "";    var code = "";    for(var i=0;i<childObj.attributes.length;i++) {        if(!childObj.attributes[i].nodeName || !childObj.attributes[i].nodeValue) continue;        var name = childObj.attributes[i].nodeName.toLowerCase();        if(name == "contenteditable" || name == "id" || name=="style" || name=="src" || name=="widget" || name == "body" || name == "class" || name == "widget_width" || name == "widget_width_type" || name == "xdpx" || name == "xdpy" || name == "height") continue;        var value = childObj.attributes[i].nodeValue;        if(!value) continue;        attrs += name+'="'+escape(value)+'" ';    }    var style = childObj.getAttribute("style");    return '<img class="zbxe_widget_output" style="'+getStyle(childObj)+'" widget="'+widget+'" '+attrs+' />';}/** * 직접 내용을 입력하는 위젯을 추가 **/// 팝업 띄움function doAddContent() {    popopen("./?module=widget&act=dispWidgetAdminAddContent&module_srl="+zoneModuleSrl, "addContent");}// 직접 내용을 입력하기 위한 에디터 활성화 작업 및 form 데이터 입력function doSyncPageContent() {    if(opener && opener.selectedWidget) {        var fo_obj = xGetElementById("content_fo");        var sel_obj = opener.selectedWidget;        fo_obj.style.value = getStyle(opener.selectedWidget);        fo_obj.widget_padding_left.value = getPadding(sel_obj, 'left');        fo_obj.widget_padding_right.value = getPadding(sel_obj,'right');        fo_obj.widget_padding_bottom.value = getPadding(sel_obj,'bottom');        fo_obj.widget_padding_top.value = getPadding(sel_obj,'top');        var obj = sel_obj.firstChild;        while(obj && obj.className != "widgetContent") obj = obj.nextSibling;        if(obj && obj.className == "widgetContent") {            var content = Base64.decode(xInnerHtml(obj));            xGetElementById("content_fo").content.value = content;        }    }    editorStart(1, "module_srl", "content", false, 400 );    //editor_upload_start(1);    setFixedPopupSize();}// 부모창에 위젯을 추가function completeAddContent(fo_obj) {    var editor_sequence = fo_obj.getAttribute('editor_sequence');    var content = editorGetContent(editor_sequence);    var tpl = ''+        '<div class="widgetOutput" style="'+fo_obj.style.value+'" widget_padding_left="'+fo_obj.widget_padding_left.value+'" widget_padding_right="'+fo_obj.widget_padding_right.value+'" widget_padding_top="'+fo_obj.widget_padding_top.value+'" widget_padding_bottom="'+fo_obj.widget_padding_bottom.value+'" widget="widgetContent">'+        '<div class="widgetSetup"></div>'+        '<div class="widgetCopy"></div>'+        '<div class="widgetSize"></div>'+        '<div class="widgetRemove"></div>'+        '<div class="widgetResize"></div>'+        '<div class="widgetResizeLeft"></div>'+        '<div class="widgetBorder">'+        '<div style="padding:'+fo_obj.widget_padding_top.value+'px '+fo_obj.widget_padding_right.value+'px'+fo_obj.widget_padding_bottom.value+'px'+fo_obj.widget_padding_left.value+'px">'+        content+        '</div><div class="clear"></div>'+        '</div>'+        '<div class="widgetContent" style="display:none;width:1px;height:1px;overflow:hidden;">'+Base64.encode(content)+'</div>'+        '</div>';    opener.doAddWidgetCode(tpl);    window.close();}/* 박스 위젯 추가 */function doAddWidgetBox() {    var tpl = ''+    '<div class="widgetOutput" style="float:left;width:100%;height:12px;" widget="widgetBox" >'+        '<div class="widgetBoxCopy"></div>'+        '<div class="widgetBoxSize"></div>'+        '<div class="widgetBoxRemove"></div>'+        '<div class="widgetBoxResize"></div>'+        '<div class="widgetBoxResizeLeft"></div>'+        '<div class="widgetBoxBorder">'+            '<div class="nullWidget" style="width:100%;height:100px;"></div>'+            '<div class="clear"></div>'+        '</div>'+    '</div>';    xInnerHtml(zonePageObj, xInnerHtml(zonePageObj)+tpl);    doFitBorderSize();}/* 일반 위젯을 추가하기 위해 위젯 팝업창을 띄움 */function doAddWidget(fo) {    var sel = fo.widget_list;    var idx = sel.selectedIndex;    var val = sel.options[idx].value;    var module_srl = fo.module_srl.value;    var url = current_url.setQuery('module','widget').setQuery('act','dispWidgetGenerateCodeInPage').setQuery('selected_widget', val).setQuery('module_srl', module_srl);    popopen(url,'GenerateWidgetCode');}// widgetBorder에 height를 widgetOutput와 맞춰줌function doFitBorderSize() {    var obj_list = xGetElementsByClassName('widgetBorder', zonePageObj);    for(var i=0;i<obj_list.length;i++) {        var obj = obj_list[i];        xHeight(obj, xHeight(obj.parentNode));        obj.parentNode.style.clear = '';    }    var obj_list = xGetElementsByClassName('widgetBoxBorder', zonePageObj);    for(var i=0;i<obj_list.length;i++) {        var obj = obj_list[i];        xHeight(obj, xHeight(obj.parentNode));        obj.parentNode.style.clear = '';    }}var selectedWidget = null;// 위젯 추가function doAddWidgetCode(widget_code) {    var dummy = xCreateElement('div');    xInnerHtml(dummy, widget_code);    var nodes = dummy.childNodes;    var zoneObj = xGetElementById('zonePageContent');    //zoneObj.style.visibility = 'hidden';    zoneObj.style.opacity = 0.2;    zoneObj.style.filter = "alpha(opacity=20)";    if(selectedWidget  && selectedWidget.getAttribute("widget")) {        while ( nodes.length ) {            if(nodes[0].className == 'widgetClass') zoneObj.parentNode.insertBefore(nodes[0], zoneObj);            else selectedWidget.parentNode.insertBefore(nodes[0], selectedWidget);        }        selectedWidget.parentNode.removeChild(selectedWidget);    } else {        while ( nodes.length ) {            if(nodes[0].className == 'widgetClass') zoneObj.parentNode.insertBefore(nodes[0], zoneObj);            else zoneObj.appendChild(nodes[0]);        }    }    // 위젯 추가후 페이지 리로딩    var tpl = getWidgetContent();    var fo_obj = xGetElementById('pageFo');    fo_obj.content.value = tpl;    fo_obj.submit();}// 클릭 이벤트시 위젯의 수정/제거/이벤트 무효화 처리function doCheckWidget(e) {    var evt = new xEvent(e); if(!evt.target) return;    var obj = evt.target;     selectedWidget = null;    var pObj = obj.parentNode;    while(pObj) {        if(pObj.id == "pageSizeLayer") return;        pObj = pObj.parentNode;    }    doHideWidgetSizeSetup();    // 위젯 설정    if(obj.className == 'widgetSetup') {        var p_obj = obj.parentNode;        var widget = p_obj.getAttribute("widget");        if(!widget) return;        selectedWidget = p_obj;        if(widget == 'widgetContent') popopen("./?module=widget&act=dispWidgetAdminAddContent&module_srl="+zoneModuleSrl, "addContent");        else popopen(request_uri+"?module=widget&act=dispWidgetGenerateCodeInPage&selected_widget="+widget,'GenerateCodeInPage');        return;    // 위젯 복사    } else if(obj.className == 'widgetCopy' || obj.className == 'widgetBoxCopy') {        var p_obj = obj.parentNode;        if(p_obj.className == 'widgetOutput') {            var dummy = xCreateElement("DIV");            xInnerHtml(dummy,xInnerHtml(p_obj));            dummy.widget_sequence = '';            dummy.className = "widgetOutput";            for(var i=0;i<p_obj.attributes.length;i++) {

⌨️ 快捷键说明

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