DiscuzX/upload/static/js/common_diy.js

1899 lines
65 KiB
JavaScript

/*
[Discuz!] (C)2001-2099 Comsenz Inc.
This is NOT a freeware, use is subject to license terms
$Id: common_diy.js 31093 2012-07-16 03:54:34Z zhangguosheng $
*/
String.prototype.property2js = function(){
var t = this.replace(/-([a-z])/g, function($0, $1) {return $1.toUpperCase();});
return t;
};
function styleCss(n) {
if(typeof n == "number") {
var _s = document.styleSheets[n];
} else {
return false;
}
this.sheet = _s;
this.rules = _s.cssRules ? _s.cssRules : _s.rules;
};
styleCss.prototype.indexOf = function(selector) {
for(var i = 0; i < this.rules.length; i++) {
if (typeof(this.rules[i].selectorText) == 'undefined') continue;
if(this.rules[i].selectorText == selector) {
return i;
}
}
return -1;
};
styleCss.prototype.removeRule = function(n) {
if(typeof n == "number") {
if(n < this.rules.length) {
this.sheet.removeRule ? this.sheet.removeRule(n) : this.sheet.deleteRule(n);
}
} else {
var i = this.indexOf(n);
if (i>0) this.sheet.removeRule ? this.sheet.removeRule(i) : this.sheet.deleteRule(i);
}
};
styleCss.prototype.addRule = function(selector, styles, n, porperty) {
var i = this.indexOf(selector);
var s = '';
var reg = '';
if (i != -1) {
reg = new RegExp('^'+porperty+'.*;','i');
s = this.getRule(selector);
if (s) {
s = s.replace(selector,'').replace('{', '').replace('}', '').replace(/ /g, ' ').replace(/^ | $/g,'');
s = (s != '' && s.substr(-1,1) != ';') ? s+ ';' : s;
s = s.toLowerCase().replace(reg, '');
if (s.length == 1) s = '';
}
this.removeRule(i);
}
s = s.indexOf('!important') > -1 || s.indexOf('! important') > -1 ? s : s.replace(/;/g,' !important;');
s = s + styles;
if (typeof n == 'undefined' || !isNaN(n)) {
n = this.rules.length;
}
if (this.sheet.insertRule) {
this.sheet.insertRule(selector+'{'+s+'}', n);
} else {
if (s) this.sheet.addRule(selector, s, n);
}
};
styleCss.prototype.setRule = function(selector, attribute, value) {
var i = this.indexOf(selector);
if(-1 == i) return false;
this.rules[i].style[attribute] = value;
return true;
};
styleCss.prototype.getRule = function(selector, attribute) {
var i = this.indexOf(selector);
if(-1 == i) return '';
var value = '';
if (typeof attribute == 'undefined') {
value = typeof this.rules[i].cssText != 'undefined' ? this.rules[i].cssText : this.rules[i].style['cssText'];
} else {
value = this.rules[i].style[attribute];
}
return typeof value != 'undefined' ? value : '';
};
styleCss.prototype.removeAllRule = function(noSearch) {
var num = this.rules.length;
var j = 0;
for(var i = 0; i < num; i ++) {
var selector = this.rules[this.rules.length - 1 - j].selectorText;
if(noSearch == 1) {
this.sheet.removeRule ? this.sheet.removeRule(this.rules.length - 1 - j) : this.sheet.deleteRule(this.rules.length - 1 - j);
} else {
j++;
}
}
};
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (element, index) {
var length = this.length;
if (index == null) {
index = 0;
} else {
index = (!isNaN(index) ? index : parseInt(index));
if (index < 0) index = length + index;
if (index < 0) index = 0;
}
for (var i = index; i < length; i++) {
var current = this[i];
if (!(typeof(current) === 'undefined') || i in this) {
if (current === element) return i;
}
}
return -1;
};
}
if (!Array.prototype.filter){
Array.prototype.filter = function(fun , thisp){
var len = this.length;
if (typeof fun != "function")
throw new TypeError();
var res = new Array();
var thisp = arguments[1];
for (var i = 0; i < len; i++){
if (i in this){
var val = this[i];
if (fun.call(thisp, val, i, this)) res.push(val);
}
}
return res;
};
}
var Util = {
event: function(event){
Util.e = event || window.event;
Util.e.aim = Util.e.target || Util.e.srcElement;
if (!Util.e.preventDefault) {
Util.e.preventDefault = function(){
Util.e.returnValue = false;
};
}
if (!Util.e.stopPropagation) {
Util.e.stopPropagation = function(){
Util.e.cancelBubble = true;
};
}
if (typeof Util.e.layerX == "undefined") {
Util.e.layerX = Util.e.offsetX;
}
if (typeof Util.e.layerY == "undefined") {
Util.e.layerY = Util.e.offsetY;
}
if (typeof Util.e.which == "undefined") {
Util.e.which = Util.e.button;
}
return Util.e;
},
url: function(s){
var s2 = s.replace(/(\(|\)|\,|\s|\'|\"|\\)/g, '\\$1');
if (/\\\\$/.test(s2)) {
s2 += ' ';
}
return "url('" + s2 + "')";
},
trimUrl : function(s){
var s2 = s.toLowerCase().replace(/url\(|\"|\'|\)/g,'');
return s2;
},
swapDomNodes: function(a, b){
var afterA = a.nextSibling;
if (afterA == b) {
swapDomNodes(b, a);
return;
}
var aParent = a.parentNode;
b.parentNode.replaceChild(a, b);
aParent.insertBefore(b, afterA);
},
hasClass: function(el, name){
return el && el.nodeType == 1 && el.className.split(/\s+/).indexOf(name) != -1;
},
addClass: function(el, name){
el.className += this.hasClass(el, name) ? '' : ' ' + name;
},
removeClass: function(el, name){
var names = el.className.split(/\s+/);
el.className = names.filter(function(n){
return name != n;
}).join(' ');
},
getTarget: function(e, attributeName, value){
var target = e.target || e.srcElement;
while (target != null) {
if (attributeName == 'className') {
if (this.hasClass(target, value)) {
return target;
}
}else if (target[attributeName] == value) {
return target;
}
target = target.parentNode;
}
return false;
},
getOffset:function (el, isLeft) {
var retValue = 0 ;
while (el != null ) {
retValue += el["offset" + (isLeft ? "Left" : "Top" )];
el = el.offsetParent;
}
return retValue;
},
insertBefore: function (newNode, targetNode) {
var parentNode = targetNode.parentNode;
var next = targetNode.nextSibling;
if (targetNode.id && targetNode.id.indexOf('temp')>-1) {
parentNode.insertBefore(newNode,targetNode);
} else if (!next) {
parentNode.appendChild(newNode);
} else {
parentNode.insertBefore(newNode,targetNode);
}
},
insertAfter : function (newNode, targetNode) {
var parentNode = targetNode.parentNode;
var next = targetNode.nextSibling;
if (next) {
parentNode.insertBefore(newNode,next);
} else {
parentNode.appendChild(newNode);
}
},
getScroll: function () {
var t, l, w, h;
if (document.documentElement && document.documentElement.scrollTop) {
t = document.documentElement.scrollTop;
l = document.documentElement.scrollLeft;
w = document.documentElement.scrollWidth;
h = document.documentElement.scrollHeight;
} else if (document.body) {
t = document.body.scrollTop;
l = document.body.scrollLeft;
w = document.body.scrollWidth;
h = document.body.scrollHeight;
}
return {t: t, l: l, w: w, h: h};
},
hide:function (ele){
if (typeof ele == 'string') {ele = $(ele);}
if (ele){ele.style.display = 'none';ele.style.visibility = 'hidden';}
},
show:function (ele){
if (typeof ele == 'string') {ele = $(ele);}
if (ele) {
this.removeClass(ele, 'hide');
ele.style.display = '';
ele.style.visibility = 'visible';
}
},
cancelSelect : function () {
window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
},
getSelectText : function () {
var t = '';
if (window.getSelection) {
t = window.getSelection();
} else if (document.getSelection) {
t = document.getSelection();
} else if (document.selection) {
t = document.selection.createRange().text;
} else {
t = '';
}
return t;
},
toggleEle : function (ele) {
ele = (typeof ele !='object') ? $(ele) : ele;
if (!ele) return false;
var value = this.getFinallyStyle(ele,'display');
if (value =='none') {
this.show(ele);
this.hide($('uploadmsg_button'));
} else {
this.hide(ele);
this.show($('uploadmsg_button'));
}
},
getFinallyStyle : function (ele,property) {
ele = (typeof ele !='object') ? $(ele) : ele;
var style = (typeof(ele['currentStyle']) == 'undefined') ? window.getComputedStyle(ele,null)[property] : ele['currentStyle'][property];
if (typeof style == 'undefined' && property == 'backgroundPosition') {
style = ele['currentStyle']['backgroundPositionX'] + ' ' +ele['currentStyle']['backgroundPositionY'];
}
return style;
},
recolored:function (){
var b = document.body;
b.style.zoom = b.style.zoom=="1"?"100%":"1";
},
getRandom : function (len,type) {
len = len < 0 ? 0 : len;
type = type && type<=3? type : 3;
var str = '';
for (var i = 0; i < len; i++) {
var j = Math.ceil(Math.random()*type);
if (j == 1) {
str += Math.ceil(Math.random()*9);
} else if (j == 2) {
str += String.fromCharCode(Math.ceil(Math.random()*25+65));
} else {
str += String.fromCharCode(Math.ceil(Math.random()*25+97));
}
}
return str;
},
fade : function(obj,timer,ftype,cur,fn) {
if (this.stack == undefined) {this.stack = [];}
obj = typeof obj == 'string' ? $(obj) : obj;
if (!obj) return false;
for (var i=0;i<this.stack.length;i++) {
if (this.stack[i] == obj && (cur == 0 || cur == 100)) return false;
}
if (cur == 0 || cur == 100) {this.stack.push(obj);}
ftype = ftype != 'in' && ftype != 'out' ? 'out' : ftype;
timer = timer || 400;
var step = 100/(timer/20);
obj.style.filter = 'Alpha(opacity=' + cur + ')';
obj.style.opacity = cur / 100;
cur = ftype == 'in' ? cur + step : cur - step ;
var fadeTimer = (function(){
return setTimeout(function () {
Util.fade(obj, timer, ftype, cur, fn);
}, 20);
})();
this[ftype == 'in' ? 'show' : 'hide'](obj);
if(ftype == 'in' && cur >= 100 || ftype == 'out' && cur <= 0) {
clearTimeout(fadeTimer);
for (i=0;i<this.stack.length;i++) {
if (this.stack[i] == obj ) {
this.stack.splice(i,1);break;
}
}
fn = fn || function(){};
fn(obj);
}
return obj;
},
fadeIn : function (obj,timer,fn) {
return this.fade(obj, timer, 'in', 0, fn);
},
fadeOut : function (obj,timer,fn) {
return this.fade(obj, timer, 'out', 100, fn);
},
getStyle : function (ele) {
if (ele) {
var s = ele.getAttribute('style') || '';
return typeof s == 'object' ? s.cssText : s;
}
return false;
},
setStyle : function (ele,cssText) {
if (ele) {
var s = ele.getAttribute('style') || '';
return typeof s == 'object' ? s.cssText = cssText : ele.setAttribute('style',cssText);
}
return false;
},
getText : function (ele) {
var t = ele.innerText ? ele.innerText : ele.textContent;
return !t ? '' : t;
},
rgb2hex : function (color) {
if (!color) return '';
var reg = new RegExp('(\\d+)[, ]+(\\d+)[, ]+(\\d+)','g');
var rgb = reg.exec(color);
if (rgb == null) rgb = [0,0,0,0];
var red = rgb[1], green = rgb[2], blue = rgb[3];
var decColor = 65536 * parseInt(red) + 256 * parseInt(green) + parseInt(blue);
var hex = decColor.toString(16).toUpperCase();
var pre = new Array(6 - hex.length + 1).join('0');
hex = pre + hex;
return hex;
},
formatColor : function (color) {
return color == '' || color.indexOf('#')>-1 || color.toLowerCase() == 'transparent' ? color : '#'+Util.rgb2hex(color);
}
};
(function(){
Frame = function(name, className, top, left, moveable){
this.name = name;
this.top = top;
this.left = left;
this.moveable = moveable ? true : false;
this.columns = [];
this.className = className;
this.titles = [];
if (typeof Frame._init == 'undefined') {
Frame.prototype.addColumn = function (column) {
if (column instanceof Column) {
this.columns[column.name] = column;
}
};
Frame.prototype.addFrame = function(columnId, frame) {
if (frame instanceof Frame || frame instanceof Tab){
this.columns[columnId].children.push(frame);
}
};
Frame.prototype.addBlock = function(columnId, block) {
if (block instanceof Block){
this.columns[columnId].children.push(block);
}
};
}
Frame._init = true;
};
Column = function (name, className) {
this.name = name;
this.className = className;
this.children = [];
};
Tab = function (name, className, top, left, moveable) {
Frame.apply(this, arguments);
};
Tab.prototype = new Frame();
Block = function(name, className, top, left) {
this.name = name;
this.top = top;
this.left = left;
this.className = className;
this.titles = [];
};
Drag = function () {
this.data = [];
this.scroll = {};
this.menu = [];
this.data = [];
this.allBlocks = [];
this.overObj = '';
this.dragObj = '';
this.dragObjFrame = '';
this.overObjFrame = '';
this.isDragging = false;
this.layout = 2;
this.frameClass = 'frame';
this.blockClass = 'block';
this.areaClass = 'area';
this.moveableArea = [];
this.moveableColumn = 'column';
this.moveableObject = 'move-span';
this.titleClass = 'title';
this.hideClass = 'hide';
this.titleTextClass = 'titletext';
this.frameTitleClass = 'frame-title',
this.tabClass = 'frame-tab';
this.tabActivityClass = 'tabactivity';
this.tabTitleClass = 'tab-title';
this.tabContentClass = 'tb-c';
this.moving = 'moving';
this.contentClass = 'dxb_bc';
this.tmpBoxElement = null ;
this.dargRelative = {};
this.scroll = {};
this.menu = [];
this.rein = [];
this.newFlag = false;
this.isChange = false;
this.fn = '';
this._replaceFlag = false;
this.sampleMode = false;
this.sampleBlocks = null;
this.advancedStyleSheet = null;
};
Drag.prototype = {
getTmpBoxElement : function () {
if (!this.tmpBoxElement) {
this.tmpBoxElement = document.createElement("div");
this.tmpBoxElement.id = 'tmpbox';
this.tmpBoxElement.className = "tmpbox" ;
this.tmpBoxElement.style.width = this.overObj.offsetWidth-4+"px";
this.tmpBoxElement.style.height = this.overObj.offsetHeight-4+"px";
} else if (this.overObj && this.overObj.offsetWidth > 0) {
this.tmpBoxElement.style.width = this.overObj.offsetWidth-4+"px";
}
return this.tmpBoxElement;
},
getPositionStr : function (){
this.initPosition();
var start = '<?xml version="1.0" encoding="ISO-8859-1"?><root>';
var end ="</root>";
var str = "";
for (var i in this.data) {
if (typeof this.data[i] == 'function') continue;
str += '<item id="' + i + '">';
for (var j in this.data[i]) {
if (!(this.data[i][j] instanceof Frame || this.data[i][j] instanceof Tab)) continue;
str += this._getFrameXML(this.data[i][j]);
}
str += '</item>';
}
return start + str + end;
},
_getFrameXML : function (frame) {
if (!(frame instanceof Frame || frame instanceof Tab) || frame.name.indexOf('temp') > 0) return '';
var itemId = frame instanceof Tab ? 'tab' : 'frame';
var Cstr = "";
var name = frame.name;
var frameAttr = this._getAttrXML(frame);
var columns = frame['columns'];
for (var j in columns) {
if (columns[j] instanceof Column) {
var Bstr = '';
var colChildren = columns[j].children;
for (var k in colChildren) {
if (k == 'attr' || typeof colChildren[k] == 'function' || colChildren[k].name.indexOf('temp') > 0) continue;
if (colChildren[k] instanceof Block) {
Bstr += '<item id="block`' + colChildren[k]['name'] + '">';
Bstr += this._getAttrXML(colChildren[k]);
Bstr += '</item>';
} else if (colChildren[k] instanceof Frame || colChildren[k] instanceof Tab) {
Bstr += this._getFrameXML(colChildren[k]);
}
}
var columnAttr = this._getAttrXML(columns[j]);
Cstr += '<item id="column`' + j + '">' + columnAttr + Bstr + '</item>';
}
}
return '<item id="' + itemId + '`' + name + '">' + frameAttr + Cstr + '</item>';
},
_getAttrXML : function (obj) {
var attrXml = '<item id="attr">';
var trimAttr = ['left', 'top'];
var xml = '';
if (obj instanceof Frame || obj instanceof Tab || obj instanceof Block || obj instanceof Column) {
for (var i in obj) {
if (i == 'titles') {
xml += this._getTitlesXML(obj[i]);
}
if (!(typeof obj[i] == 'object' || typeof obj[i] == 'function')) {
if (trimAttr.indexOf(i) >= 0) continue;
xml += '<item id="' + i + '"><![CDATA[' + obj[i] + ']]></item>';
}
}
}else {
xml += '';
}
return attrXml + xml + '</item>';
},
_getTitlesXML : function (titles) {
var xml = '<item id="titles">';
for (var i in titles) {
if (typeof titles[i] == 'function') continue;
xml += '<item id="'+i+'">';
for (var j in titles[i]) {
if (typeof titles[i][j] == 'function') continue;
xml += '<item id="'+j+'"><![CDATA[' + titles[i][j] + ']]></item>';
}
xml += '</item>';
}
xml += '</item>';
return xml;
},
getCurrentOverObj : function (e) {
var _clientX = parseInt(this.dragObj.style.left);
var _clientY = parseInt(this.dragObj.style.top);
var max = 10000000;
for (var i in this.data) {
for (var j in this.data[i]) {
if (!(this.data[i][j] instanceof Frame || this.data[i][j] instanceof Tab)) continue;
var min = this._getMinDistance(this.data[i][j], max);
if (min.distance < max) {
var id = min.id;
max = min.distance;
}
}
}
return $(id);
},
_getMinDistance : function (ele, max) {
if(ele.name==this.dragObj.id) return {"id":ele.name, "distance":max};
var _clientX = parseInt(this.dragObj.style.left);
var _clientY = parseInt(this.dragObj.style.top);
var id;
var isTabInTab = Util.hasClass(this.dragObj, this.tabClass) && Util.hasClass($(ele.name).parentNode.parentNode, this.tabClass);
if (ele instanceof Frame || ele instanceof Tab) {
if (ele.moveable && !isTabInTab) {
var isTab = Util.hasClass(this.dragObj, this.tabClass);
var isFrame = Util.hasClass(this.dragObj, this.frameClass);
var isBlock = Util.hasClass(this.dragObj, this.blockClass) && Util.hasClass($(ele.name).parentNode, this.moveableColumn);
if ( isTab || isFrame || isBlock) {
var _Y = ele['top'] - _clientY;
var _X = ele['left'] - _clientX;
var distance = Math.sqrt(Math.pow(_X, 2) + Math.pow(_Y, 2));
if (distance < max) {
max = distance;
id = ele.name;
}
}
}
for (var i in ele['columns']) {
var column = ele['columns'][i];
if (column instanceof Column) {
for (var j in column['children']) {
if ((column['children'][j] instanceof Tab || column['children'][j] instanceof Frame || column['children'][j] instanceof Block)) {
var min = this._getMinDistance(column['children'][j], max);
if (min.distance < max) {
id = min.id;
max = min.distance;
}
}
}
}
}
return {"id":id, "distance":max};
} else {
if (isTabInTab) return {'id': ele['name'], 'distance': max};
var _Y = ele['top'] - _clientY;
var _X = ele['left'] - _clientX;
var distance = Math.sqrt(Math.pow(_X, 2) + Math.pow(_Y, 2));
if (distance < max) {
return {'id': ele['name'], 'distance': distance};
} else {
return {'id': ele['name'], 'distance': max};
}
}
},
getObjByName : function (name, data) {
if (!name) return false;
data = data || this.data;
if ( data instanceof Frame) {
if (data.name == name) {
return data;
} else {
var d = this.getObjByName(name,data['columns']);
if (name == d.name) return d;
}
} else if (data instanceof Block) {
if (data.name == name) return data;
} else if (typeof data == 'object') {
for (var i in data) {
var d = this.getObjByName(name, data[i]);
if (name == d.name) return d;
}
}
return false;
},
initPosition : function () {
this.data = [],this.allBlocks = [];
var blocks = $C(this.blockClass);
for(var i = 0; i < blocks.length; i++) {
if (blocks[i]['id'].indexOf('temp') < 0) {
this.checkEdit(blocks[i]);
this.allBlocks.push(blocks[i]['id'].replace('portal_block_',''));
}
}
var areaLen = this.moveableArea.length;
for (var j = 0; j < areaLen; j++ ) {
var area = this.moveableArea[j];
var areaData = [];
if (typeof area == 'object') {
this.checkTempDiv(area.id);
var frames = area.childNodes;
for (var i in frames) {
if (typeof(frames[i]) != 'object') continue;
if (Util.hasClass(frames[i], this.frameClass) || Util.hasClass(frames[i], this.blockClass)
|| Util.hasClass(frames[i], this.tabClass) || Util.hasClass(frames[i], this.moveableObject)) {
areaData.push(this.initFrame(frames[i]));
}
}
this.data[area.id] = areaData;
}
}
this._replaceFlag = true;
},
removeBlockPointer : function(e) {this.removeBlock(e);},
toggleContent : function (e) {
if ( typeof e !== 'string') {
e = Util.event(e);
var id = e.aim.id.replace('_edit_toggle','');
} else {
id = e;
}
var obj = this.getObjByName(id);
var display = '';
if (obj instanceof Block || obj instanceof Tab) {
display = $(id+'_content').style.display;
Util.toggleEle(id+'_content');
} else {
var col = obj.columns;
for (var i in col) {
display = $(i).style.display;
Util.toggleEle($(i));
}
}
if(display != '') {
e.aim.src=STATICURL+'/image/common/fl_collapsed_no.gif';
} else {
e.aim.src=STATICURL+'/image/common/fl_collapsed_yes.gif';
}
},
checkEdit : function (ele) {
if (!ele || Util.hasClass(ele, 'temp') || ele.getAttribute('noedit')) return false;
var id = ele.id;
var _method = this;
if (!$(id+'_edit')) {
var _method = this;
var dom = document.createElement('div');
dom.className = 'edit hide';
dom.id = id+'_edit';
dom.innerHTML = '<span id="'+id+'_edit_menu">编辑</span>';
ele.appendChild(dom);
$(id+'_edit_menu').onclick = function (e){Drag.prototype.toggleMenu.call(_method, e, this);};
}
ele.onmouseover = function (e) {Drag.prototype.showEdit.call(_method,e);};
ele.onmouseout = function (e) {Drag.prototype.hideEdit.call(_method,e);};
},
initFrame : function (frameEle) {
if (typeof(frameEle) != 'object') return '';
var frameId = frameEle.id;
if(!this.sampleMode) {
this.checkEdit(frameEle);
}
var moveable = Util.hasClass(frameEle, this.moveableObject);
var frameObj = '';
if (Util.hasClass(frameEle, this.tabClass)) {
this._initTabActivity(frameEle);
frameObj = new Tab(frameId, frameEle.className, Util.getOffset(frameEle,false), Util.getOffset(frameEle,true), moveable);
} else if (Util.hasClass(frameEle, this.frameClass) || Util.hasClass(frameEle, this.moveableObject)) {
if (Util.hasClass(frameEle, this.frameClass) && !this._replaceFlag) this._replaceFrameColumn(frameEle);
frameObj = new Frame(frameId, frameEle.className, Util.getOffset(frameEle,false), Util.getOffset(frameEle,true), moveable);
}
this._initColumn(frameObj, frameEle);
return frameObj;
},
_initColumn : function (frameObj,frameEle) {
var columns = frameEle.children;
if (Util.hasClass(frameEle.parentNode.parentNode,this.tabClass)) {
var col2 = $(frameEle.id+'_content').children;
var len = columns.length;
for (var i in col2) {
if (typeof(col2[i]) == 'object') columns[len+i] = col2[i];
}
}
for (var i in columns) {
if (typeof(columns[i]) != 'object') continue;
if (Util.hasClass(columns[i], this.titleClass)) {
this._initTitle(frameObj, columns[i]);
}
this._initEleTitle(frameObj, frameEle);
if (Util.hasClass(columns[i], this.moveableColumn)) {
var columnId = columns[i].id;
var column = new Column(columnId, columns[i].className);
frameObj.addColumn(column);
this.checkTempDiv(columnId);
var elements = columns[i].children;
var eleLen = elements.length;
for (var j = 0; j < eleLen; j++) {
var ele = elements[j];
if (Util.hasClass(ele, this.frameClass) || Util.hasClass(ele, this.tabClass)) {
var frameObj2 = this.initFrame(ele);
frameObj.addFrame(columnId, frameObj2);
} else if (Util.hasClass(ele, this.blockClass) || Util.hasClass(ele, this.moveableObject)) {
var block = new Block(ele.id, ele.className, Util.getOffset(ele, false), Util.getOffset(ele, true));
for (var k in ele.children) {
if (Util.hasClass(ele.children[k], this.titleClass)) this._initTitle(block, ele.children[k]);
}
this._initEleTitle(block, ele);
frameObj.addBlock(columnId, block);
}
}
}
}
},
_initTitle : function (obj, ele) {
if (Util.hasClass(ele, this.titleClass)) {
obj.titles['className'] = [ele.className];
obj.titles['style'] = {};
if (ele.style.backgroundImage) obj.titles['style']['background-image'] = ele.style.backgroundImage;
if (ele.style.backgroundRepeat) obj.titles['style']['background-repeat'] = ele.style.backgroundRepeat;
if (ele.style.backgroundColor) obj.titles['style']['background-color'] = ele.style.backgroundColor;
if (obj instanceof Tab) {
obj.titles['switchType'] = [];
obj.titles['switchType'][0] = ele.getAttribute('switchtype') ? ele.getAttribute('switchtype') : 'click';
}
var ch = ele.children;
for (var k in ch) {
if (Util.hasClass(ch[k], this.titleTextClass)){
this._getTitleData(obj, ch[k], 'first');
} else if (typeof ch[k] == 'object' && !Util.hasClass(ch[k], this.moveableObject)) {
this._getTitleData(obj, ch[k]);
}
}
}
},
_getTitleData : function (obj, ele, i) {
var shref = '',ssize = '',sfloat = '',scolor = '',smargin = '',stext = '', src = '';
var collection = ele.getElementsByTagName('a');
if (collection.length > 0) {
shref = collection[0]['href'];
scolor = collection[0].style['color'] + ' !important';
}
collection = ele.getElementsByTagName('img');
if (collection.length > 0) {
src = collection[0]['src'];
}
stext = Util.getText(ele);
if (stext || src) {
scolor = scolor ? scolor : ele.style['color'];
sfloat = ele.style['styleFloat'] ? ele.style['styleFloat'] : ele.style['cssFloat'] ;
sfloat = sfloat == undefined ? '' : sfloat;
var margin_ = sfloat == '' ? 'left' : sfloat;
smargin = parseInt(ele.style[('margin-'+margin_).property2js()]);
smargin = smargin ? smargin : '';
ssize = parseInt(ele.style['fontSize']);
ssize = ssize ? ssize : '';
var data = {'text':stext, 'href':shref,'color':scolor, 'float':sfloat, 'margin':smargin, 'font-size':ssize, 'className':ele.className, 'src':src};
if (i) {
obj.titles[i] = data;
} else {
obj.titles.push(data);
}
}
},
_initEleTitle : function (obj,ele) {
if (Util.hasClass(ele, this.moveableObject)) {
if (obj.titles['first'] && obj.titles['first']['text']) {
var title = obj.titles['first']['text'];
} else {
var title = obj.name;
}
}
},
showBlockName : function (ele) {
var title = $C('block-name', ele, 'div');
if(title.length) {
Util.show(title[0]);
}
},
hideBlockName : function (ele) {
var title = $C('block-name', ele, 'div');
if(title.length) {
Util.hide(title[0]);
}
},
showEdit : function (e) {
e = Util.event(e);
var targetObject = Util.getTarget(e,'className',this.moveableObject);
if (targetObject) {
Util.show(targetObject.id + '_edit');
targetObject.style.backgroundColor="#fffacd";
this.showBlockName(targetObject);
} else {
var targetFrame = Util.getTarget(e,'className',this.frameClass);
if (typeof targetFrame == 'object') {
Util.show(targetFrame.id + '_edit');
targetFrame.style.backgroundColor="#fffacd";
}
}
},
hideEdit : function (e) {
e = Util.event(e);
var targetObject = Util.getTarget(e,'className',this.moveableObject);
var targetFrame = Util.getTarget(e,'className',this.frameClass);
if (typeof targetFrame == 'object') {
Util.hide(targetFrame.id + '_edit');
targetFrame.style.backgroundColor = '';
}
if (typeof targetObject == 'object') {
Util.hide(targetObject.id + '_edit');
targetObject.style.backgroundColor = '';
this.hideBlockName(targetObject);
}
},
toggleMenu : function (e, obj) {
e = Util.event(e);
e.stopPropagation();
var objPara = {'top' : Util.getOffset( obj, false),'left' : Util.getOffset( obj, true),
'width' : obj['offsetWidth'], 'height' : obj['offsetHeight']};
var dom = $('edit_menu');
if (dom) {
if (objPara.top + objPara.height == Util.getOffset(dom, false) && objPara.left == Util.getOffset(dom, true)) {
dom.parentNode.removeChild(dom);
} else {
dom.style.top = objPara.top + objPara.height + 'px';
dom.style.left = objPara.left + 'px';
dom.innerHTML = this._getMenuHtml(e, obj);
}
} else {
var html = this._getMenuHtml(e, obj);
if (html != '') {
dom = document.createElement('div');
dom.id = 'edit_menu';
dom.className = 'edit-menu';
dom.style.top = objPara.top + objPara.height + 'px';
dom.style.left = objPara.left + 'px';
dom.innerHTML = html;
document.body.appendChild(dom);
var _method = this;
document.body.onclick = function(e){Drag.prototype.removeMenu.call(_method, e);};
}
}
},
_getMenuHtml : function (e,obj) {
var id = obj.id.replace('_edit_menu','');
var html = '<ul>';
if (typeof this.menu[id] == 'object') html += this._getMenuHtmlLi(id, this.menu[id]);
if (Util.hasClass($(id),this.tabClass) && typeof this.menu['tab'] == 'object') html += this._getMenuHtmlLi(id, this.menu['tab']);
if (Util.hasClass($(id),this.frameClass) && typeof this.menu['frame'] == 'object') html += this._getMenuHtmlLi(id, this.menu['frame']);
if (Util.hasClass($(id),this.blockClass) && typeof this.menu['block'] == 'object') html += this._getMenuHtmlLi(id, this.menu['block']);
if (typeof this.menu['default'] == 'object' && this.getObjByName(id)) html += this._getMenuHtmlLi(id, this.menu['default']);
html += '</ul>';
return html == '<ul></ul>' ? '' : html;
},
_getMenuHtmlLi : function (id, cmds) {
var li = '';
var len = cmds.length;
for (var i=0; i<len; i++) {
li += '<li class="mitem" id="cmd_'+id+'" onclick='+"'"+cmds[i]['cmd']+"'"+'>'+cmds[i]['cmdName']+'</li>';
}
return li;
},
removeMenu : function (e) {
var dom = $('edit_menu');
if (dom) dom.parentNode.removeChild(dom);
document.body.onclick = '';
},
addMenu : function (objId,cmdName,cmd) {
if (typeof this.menu[objId] == 'undefined') this.menu[objId] = [];
this.menu[objId].push({'cmdName':cmdName, 'cmd':cmd});
},
setDefalutMenu : function () {},
setSampleMenu : function () {},
getPositionKey : function (n) {
this.initPosition();
n = parseInt(n);
var i = 0;
for (var k in this.position) {
if (i++ >= n) break;
}
return k;
},
checkTempDiv : function (_id) {
if(_id) {
var id = _id+'_temp';
var dom = $(id);
if (dom == null || typeof dom == 'undefined') {
dom = document.createElement("div");
dom.className = this.moveableObject+' temp';
dom.id = id;
$(_id).appendChild(dom);
}
}
},
_setCssPosition : function (ele, value) {
while (ele && ele.parentNode && ele.id != 'ct') {
if (Util.hasClass(ele,this.frameClass) || Util.hasClass(ele,this.tabClass)) ele.style.position = value;
ele = ele.parentNode;
}
},
initDragObj : function (e) {
e = Util.event(e);
var target = Util.getTarget(e,'className',this.moveableObject);
if (!target) {return false;}
if (this.overObj != target && target.id !='tmpbox') {
this.overObj = target;
this.overObj.style.cursor = 'move';
}
},
dragStart : function (e) {
e = Util.event(e);
if (e.aim['id'] && e.aim['id'].indexOf && e.aim['id'].indexOf('_edit') > 0) return false;
if(e.which != 1 ) {return false;}
this.overObj = this.dragObj = Util.getTarget(e,'className',this.moveableObject);
if (!this.dragObj || Util.hasClass(this.dragObj,'temp')) {return false;}
if (!this.getTmpBoxElement()) return false;
this.getRelative();
this._setCssPosition(this.dragObj.parentNode.parentNode, "static");
var offLeft = Util.getOffset( this.dragObj, true );
var offTop = Util.getOffset( this.dragObj, false );
var offWidth = this.dragObj['offsetWidth'];
this.dragObj.style.position = 'absolute';
this.dragObj.style.left = offLeft + "px";
this.dragObj.style.top = offTop - 3 + "px";
this.dragObj.style.width = offWidth + 'px';
this.dragObj.lastMouseX = e.clientX;
this.dragObj.lastMouseY = e.clientY;
Util.insertBefore(this.tmpBoxElement,this.overObj);
Util.addClass(this.dragObj,this.moving);
this.dragObj.style.zIndex = 500 ;
this.scroll = Util.getScroll();
var _method = this;
document.onscroll = function(){Drag.prototype.resetObj.call(_method, e);};
window.onscroll = function(){Drag.prototype.resetObj.call(_method, e);};
document.onmousemove = function (e){Drag.prototype.drag.call(_method, e);};
},
getRelative : function () {
this.dargRelative = {'up': this.dragObj.previousSibling, 'down': this.dragObj.nextSibling};
},
resetObj : function (e) {
if (this.dragObj){
e = Util.event(e);
var p = Util.getScroll();
var _t = p.t - this.scroll.t;
var _l = p.l - this.scroll.l;
var t = parseInt(this.dragObj.style.top);
var l = parseInt(this.dragObj.style.left);
t += _t;
l += _l;
this.dragObj.style.top =t+'px';
this.dragObj.style.left =l+'px';
this.scroll = Util.getScroll();
}
},
drag : function (e) {
e = Util.event(e);
if(!this.isDragging) {
this.dragObj.style.filter = "alpha(opacity=60)" ;
this.dragObj.style.opacity = 0.6 ;
this.isDragging = true ;
}
var _clientX = e.clientX;
var _clientY = e.clientY;
if (this.dragObj.lastMouseX == _clientX && this.dragObj.lastMouseY == _clientY) return false ;
var _lastY = parseInt(this.dragObj.style.top);
var _lastX = parseInt(this.dragObj.style.left);
_lastX = isNaN(_lastX) ? 0 :_lastX;
_lastY = isNaN(_lastY) ? 0 :_lastY;
var newX, newY;
newY = _lastY + _clientY - this.dragObj.lastMouseY;
newX = _lastX + _clientX - this.dragObj.lastMouseX;
this.dragObj.style.left = newX +"px ";
this.dragObj.style.top = newY + "px ";
this.dragObj.lastMouseX = _clientX;
this.dragObj.lastMouseY = _clientY;
var obj = this.getCurrentOverObj(e);
if (obj && this.overObj != obj) {
this.overObj = obj;
this.getTmpBoxElement();
Util.insertBefore(this.tmpBoxElement, this.overObj);
this.dragObjFrame = this.dragObj.parentNode.parentNode;
this.overObjFrame = this.overObj.parentNode.parentNode;
}
Util.cancelSelect();
},
_pushTabContent : function (tab, ele){
if (Util.hasClass(ele, this.frameClass) || Util.hasClass(ele, this.tabClass)) {
var dom = $(ele.id+'_content');
if (!dom) {
dom = document.createElement('div');
dom.id = ele.id+'_content';
dom.className = Util.hasClass(ele, this.frameClass) ? this.contentClass+' cl '+ele.className.substr(ele.className.lastIndexOf(' ')+1) : this.contentClass+' cl';
}
var frame = this.getObjByName(ele.id);
if (frame) {
for (var i in frame['columns']) {
if (frame['columns'][i] instanceof Column) dom.appendChild($(i));
}
} else {
var children = ele.childNodes;
var arrDom = [];
for (var i in children) {
if (typeof children[i] != 'object') continue;
if (Util.hasClass(children[i],this.moveableColumn) || Util.hasClass(children[i],this.tabContentClass)) {
arrDom.push(children[i]);
}
}
var len = arrDom.length;
for (var i = 0; i < len; i++) {
dom.appendChild(arrDom[i]);
}
}
$(tab.id+'_content').appendChild(dom);
} else if (Util.hasClass(ele, this.blockClass)) {
if ($(ele.id+'_content')) $(tab.id+'_content').appendChild($(ele.id+'_content'));
}
},
_popTabContent : function (tab, ele){
if (Util.hasClass(ele, this.frameClass) || Util.hasClass(ele, this.tabClass)) {
Util.removeClass(ele, this.tabActivityClass);
var eleContent = $(ele.id+'_content');
if (!eleContent) return false;
var children = eleContent.childNodes;
var arrEle = [];
for (var i in children) {
if (typeof children[i] == 'object') arrEle.push(children[i]);
}
var len = arrEle.length;
for (var i = 0; i < len; i++) {
ele.appendChild(arrEle[i]);
}
children = '';
$(tab.id+'_content').removeChild(eleContent);
} else if (Util.hasClass(ele, this.blockClass)) {
if ($(ele.id+'_content')) Util.show($(ele.id+'_content'));
if ($(ele.id+'_content')) ele.appendChild($(ele.id+'_content'));
}
},
_initTabActivity : function (ele) {
if (!Util.hasClass(ele,this.tabClass)) return false;
var tabs = $(ele.id+'_title').childNodes;
var arrTab = [];
for (var i in tabs) {
if (typeof tabs[i] != 'object') continue;
var tabId = tabs[i].id;
if (Util.hasClass(tabs[i],this.frameClass) || Util.hasClass(tabs[i],this.tabClass)) {
if (!this._replaceFlag) this._replaceFrameColumn(tabs[i]);
if (!$(tabId + '_content')) {
var arrColumn = [];
for (var j in tabs[i].childNodes) {
if (Util.hasClass(tabs[i].childNodes[j], this.moveableColumn)) arrColumn.push(tabs[i].childNodes[j]);
}
var frameContent = document.createElement('div');
frameContent.id = tabId + '_content';
frameContent.className = Util.hasClass(tabs[i], this.frameClass) ? this.contentClass+' cl '+tabs[i].className.substr(tabs[i].className.lastIndexOf(' ')+1) : this.contentClass+' cl';
var colLen = arrColumn.length;
for (var k = 0; k < colLen; k++) {
frameContent.appendChild(arrColumn[k]);
}
}
arrTab.push(tabs[i]);
} else if (Util.hasClass(tabs[i],this.blockClass)) {
var frameContent = $(tabId+'_content');
if (frameContent) {
frameContent = Util.hasClass(frameContent.parentNode,this.blockClass) ? frameContent : '';
} else {
frameContent = document.createElement('div');
frameContent.id = tabId+'_content';
}
arrTab.push(tabs[i]);
}
if (frameContent) $(ele.id + '_content').appendChild(frameContent);
}
var len = arrTab.length;
for (var i = 0; i < len; i++) {
Util[i > 0 ? 'hide' : 'show']($(arrTab[i].id+'_content'));
}
},
dragEnd : function (e) {
e = Util.event(e);
if(!this.dragObj) {return false;}
document.onscroll = function(){};
window.onscroll = function(){};
document.onmousemove = function(e){};
document.onmouseup = '';
if (this.tmpBoxElement.parentNode) {
if (this.tmpBoxElement.parentNode == document.body) {
document.body.removeChild(this.tmpBoxElement);
document.body.removeChild(this.dragObj);
this.fn = '';
} else {
Util.removeClass(this.dragObj,this.moving);
this.dragObj.style.display = 'none';
this.dragObj.style.width = '' ;
this.dragObj.style.top = '';
this.dragObj.style.left = '';
this.dragObj.style.zIndex = '';
this.dragObj.style.position = 'relative';
this.dragObj.style.backgroundColor = '';
this.isDragging = false ;
this.tmpBoxElement.parentNode.replaceChild(this.dragObj, this.tmpBoxElement);
Util.fadeIn(this.dragObj);
this.tmpBoxElement='';
this._setCssPosition(this.dragObjFrame, 'relative');
this.doEndDrag();
this.initPosition();
if (!(this.dargRelative.up == this.dragObj.previousSibling && this.dargRelative.down == this.dragObj.nextSibling)) {
this.setClose();
}
this.dragObjFrame = this.overObjFrame = null;
}
}
this.newFlag = false;
if (typeof this.fn == 'function') {this.fn();}
},
doEndDrag : function () {
if (!Util.hasClass(this.dragObjFrame, this.tabClass) && Util.hasClass(this.overObjFrame, this.tabClass)) {
this._pushTabContent(this.overObjFrame, this.dragObj);
}else if (Util.hasClass(this.dragObjFrame, this.tabClass) && !Util.hasClass(this.overObjFrame, this.tabClass)) {
this._popTabContent(this.dragObjFrame, this.dragObj);
}else if (Util.hasClass(this.dragObjFrame, this.tabClass) && Util.hasClass(this.overObjFrame, this.tabClass)) {
if (this.dragObjFrame != this.overObjFrame) {
this._popTabContent(this.dragObjFrame, this.dragObj);
this._pushTabContent(this.overObjFrame, this.dragObj);
}
} else {
}
},
_replaceFrameColumn : function (ele,flag) {
var children = ele.childNodes;
var fcn = ele.className.match(/(frame-[\w-]*)/);
if (!fcn) return false;
var frameClassName = fcn[1];
for (var i in children) {
if (Util.hasClass(children[i], this.moveableColumn)) {
var className = children[i].className;
className = className.replace(' col-l', ' '+frameClassName+'-l');
className = className.replace(' col-r', ' '+frameClassName+'-r');
className = className.replace(' col-c', ' '+frameClassName+'-c');
className = className.replace(' mn', ' '+frameClassName+'-l');
className = className.replace(' sd', ' '+frameClassName+'-r');
children[i].className = className;
}
}
},
stopCmd : function () {
this.rein.length > 0 ? this.rein.pop()() : '';
},
setClose : function () {
if (!this.isChange) {
window.onbeforeunload = function() {
return '您的数据已经修改,退出将无法保存您的修改。';
};
}
this.isChange = true;
},
clearClose : function () {
this.isChange = false;
window.onbeforeunload = function () {};
},
_getMoveableArea : function (ele) {
ele = ele ? ele : document.body;
this.moveableArea = $C(this.areaClass, ele, 'div');
},
initMoveableArea : function () {
var _method = this;
this._getMoveableArea();
var len = this.moveableArea.length;
for (var i = 0; i < len; i++) {
var el = this.moveableArea[i];
if (el == null || typeof el == 'undefined') return false;
el.ondragstart = function (e) {return false;};
el.onmouseover = function (e) {Drag.prototype.initDragObj.call(_method, e);};
el.onmousedown = function (e) {Drag.prototype.dragStart.call(_method, e);};
el.onmouseup = function (e) {Drag.prototype.dragEnd.call(_method, e);};
el.onclick = function (e) {e = Util.event(e);e.preventDefault();};
}
if ($('contentframe')) $('contentframe').ondragstart = function (e) {return false;};
},
disableAdvancedStyleSheet : function () {
if(this.advancedStyleSheet) {
this.advancedStyleSheet.disabled = true;
}
},
enableAdvancedStyleSheet : function () {
if(this.advancedStyleSheet) {
this.advancedStyleSheet.disabled = false;
}
},
init : function (sampleMode) {
this.initCommon();
this.setSampleMode(sampleMode);
if(!this.sampleMode) {
this.initAdvanced();
} else {
this.initSample();
}
return true;
},
initAdvanced : function () {
this.initMoveableArea();
this.initPosition();
this.setDefalutMenu();
this.enableAdvancedStyleSheet();
this.showControlPanel();
this.initTips();
if(this.goonDIY) this.goonDIY();
this.openfn();
},
openfn : function () {
var openfn = loadUserdata('openfn');
if(openfn) {
if(typeof openfn == 'function') {
openfn();
} else {
eval(openfn);
}
saveUserdata('openfn', '');
}
},
initCommon : function () {
this.advancedStyleSheet = $('diy_common');
this.menu = [];
},
initSample : function () {
this._getMoveableArea();
this.initPosition();
this.sampleBlocks = $C(this.blockClass);
this.initSampleBlocks();
this.setSampleMenu();
this.disableAdvancedStyleSheet();
this.hideControlPanel();
},
initSampleBlocks : function () {
if(this.sampleBlocks) {
for(var i = 0; i < this.sampleBlocks.length; i++){
this.checkEdit(this.sampleBlocks[i]);
}
}
},
setSampleMode : function (sampleMode) {
if(loadUserdata('diy_advance_mode')) {
this.sampleMode = '';
} else {
this.sampleMode = sampleMode;
saveUserdata('diy_advance_mode', sampleMode ? '' : '1');
}
},
hideControlPanel : function() {
Util.show('samplepanel');
Util.hide('controlpanel');
Util.hide('diy-tg');
},
showControlPanel : function() {
Util.hide('samplepanel');
Util.show('controlpanel');
Util.show('diy-tg');
},
checkHasFrame : function (obj) {
obj = !obj ? this.data : obj;
for (var i in obj) {
if (obj[i] instanceof Frame && obj[i].className.indexOf('temp') < 0 ) {
return true;
} else if (typeof obj[i] == 'object') {
if (this.checkHasFrame(obj[i])) return true;
}
}
return false;
},
deleteFrame : function (name) {
if (typeof name == 'string') {
if (typeof window['c'+name+'_frame'] == 'object' && !BROWSER.ie) delete window['c'+name+'_frame'];
} else {
for(var i = 0,L = name.length;i < L;i++) {
if (typeof window['c'+name[i]+'_frame'] == 'object' && !BROWSER.ie) delete window['c'+name[i]+'_frame'];
}
}
},
saveViewTip : function (tipname) {
if(tipname) {
saveUserdata(tipname, '1');
Util.hide(tipname);
}
doane();
},
initTips : function () {
var tips = ['diy_backup_tip'];
for(var i = 0; i < tips.length; i++) {
if(tips[i] && !loadUserdata(tips[i])) {
Util.show(tips[i]);
}
}
},
extend : function (obj) {
for (var i in obj) {
this[i] = obj[i];
}
}
};
DIY = function() {
this.frames = [];
this.isChange = false;
this.spacecss = [];
this.style = 't1';
this.currentDiy = 'body';
this.opSet = [];
this.opPointer = 0;
this.backFlag = false;
this.styleSheet = {} ;
this.scrollHeight = 0 ;
};
DIY.prototype = {
init : function (mod) {
drag.init(mod);
this.style = document.diyform.style.value;
if (this.style == '') {
var reg = RegExp('topic\(.*)\/style\.css');
var href = $('style_css') ? $('style_css').href : '';
var arr = reg.exec(href);
this.style = arr && arr.length > 1 ? arr[1] : '';
}
this.currentLayout = typeof document.diyform.currentlayout == 'undefined' ? '' : document.diyform.currentlayout.value;
this.initStyleSheet();
if (this.styleSheet.rules) this.initDiyStyle();
},
initStyleSheet : function () {
var all = document.styleSheets;
for (var i=0;i<all.length;i++) {
var ownerNode = all[i].ownerNode || all[i].owningElement;
if (ownerNode.id == 'diy_style') {
this.styleSheet = new styleCss(i);
return true;
}
}
},
initDiyStyle : function (css) {
var allCssText = css || $('diy_style').innerHTML;
allCssText = allCssText ? allCssText.replace(/\n|\r|\t| /g,'') : '';
var random = Math.random(), rules = '';
var reg = new RegExp('(.*?) ?\{(.*?)\}','g');
while((rules = reg.exec(allCssText))) {
var selector = this.checkSelector(rules[1]);
var cssText = rules[2];
var cssarr = cssText.split(';');
var l = cssarr.length;
for (var k = 0; k < l; k++) {
var attribute = trim(cssarr[k].substr(0, cssarr[k].indexOf(':')).toLowerCase());
var value = cssarr[k].substr(cssarr[k].indexOf(':')+1).toLowerCase();
if (!attribute || !value) continue;
if (!this.spacecss[selector]) this.spacecss[selector] = [];
this.spacecss[selector][attribute] = value;
if (css) this.setStyle(selector, attribute, value, random);
}
}
},
checkSelector : function (selector) {
var s = selector.toLowerCase();
if (s.toLowerCase().indexOf('body') > -1) {
var body = BROWSER.ie ? 'BODY' : 'body';
selector = selector.replace(/body/i,body);
}
if (s.indexOf(' a') > -1) {
selector = BROWSER.ie ? selector.replace(/ [aA]/,' A') : selector.replace(/ [aA]/,' a');
}
return selector;
},
initPalette : function (id) {
var bgcolor = '',selector = '',bgimg = '',bgrepeat = '', bgposition = '', bgattachment = '', bgfontColor = '', bglinkColor = '', i = 0;
var repeat = ['repeat','no-repeat','repeat-x','repeat-y'];
var attachment = ['scroll','fixed'];
var position = ['left top','center top','right top','left center','center center','right center','left bottom','center bottom','right bottom'];
var position_ = ['0% 0%','50% 0%','100% 0%','0% 50%','50% 50%','100% 50%','0% 100%','50% 100%','100% 100%'];
selector = this.getSelector(id);
bgcolor = Util.formatColor(this.styleSheet.getRule(selector,'backgroundColor'));
bgimg = this.styleSheet.getRule(selector,'backgroundImage');
bgrepeat = this.styleSheet.getRule(selector,'backgroundRepeat');
bgposition = this.styleSheet.getRule(selector,'backgroundPosition');
bgattachment = this.styleSheet.getRule(selector,'backgroundAttachment');
bgfontColor = Util.formatColor(this.styleSheet.getRule(selector,'color'));
bglinkColor = Util.formatColor(this.styleSheet.getRule(this.getSelector(selector+' a'),'color'));
var selectedIndex = 0;
for (i=0;i<repeat.length;i++) {
if (bgrepeat == repeat[i]) selectedIndex= i;
}
$('repeat_mode').selectedIndex = selectedIndex;
for (i=0;i<attachment.length;i++) {
$('rabga'+i).checked = (bgattachment == attachment[i] ? true : false);
}
var flag = '';
for (i=0;i<position.length;i++) {
var className = bgposition == position[i] ? 'red' : '';
$('bgimgposition'+i).className = className;
flag = flag ? flag : className;
}
if (flag != 'red') {
for (i=0;i<position_.length;i++) {
className = bgposition == position_[i] ? 'red' : '';
$('bgimgposition'+i).className = className;
}
}
$('colorValue').value = bgcolor;
if ($('cbpb')) $('cbpb').style.backgroundColor = bgcolor;
$('textColorValue').value = bgfontColor;
if ($('ctpb')) $('ctpb').style.backgroundColor = bgfontColor;
$('linkColorValue').value = bglinkColor;
if ($('clpb')) $('clpb').style.backgroundColor = bglinkColor;
Util.show($('currentimgdiv'));
Util.hide($('diyimages'));
if ($('selectalbum')) $('selectalbum').disabled = 'disabled';
bgimg = bgimg != '' && bgimg != 'none' ? bgimg.replace(/url\(['|"]{0,1}/,'').replace(/['|"]{0,1}\)/,'') : 'static/image/common/nophotosmall.gif';
$('currentimg').src = bgimg;
},
changeBgImgDiv : function () {
Util.hide($('currentimgdiv'));
Util.show($('diyimages'));
if ($('selectalbum')) $('selectalbum').disabled = '';
},
getSpacecssStr : function() {
var css = '';
var selectors = ['body', '#hd','#ct', 'BODY'];
for (var i in this.spacecss) {
var name = i.split(' ')[0];
if(selectors.indexOf(name) == -1 && !drag.getObjByName(name.substr(1))) {
for(var k in this.spacecss) {
if (k.indexOf(i) > -1) {
this.spacecss[k] = [];
}
}
continue;
}
var rule = this.spacecss[i];
if (typeof rule == "function") continue;
var one = '';
rule = this.formatCssRule(rule);
for (var j in rule) {
var content = this.spacecss[i][j];
if (content && typeof content == "string" && content.length > 0) {
content = this.trimCssImportant(content);
content = content ? content + ' !important;' : ';';
one += j + ":" + content;
}
}
if (one == '') continue;
css += i + " {" + one + "}";
}
return css;
},
formatCssRule : function (rule) {
var arr = ['top', 'right', 'bottom', 'left'], i = 0;
if (typeof rule['margin-top'] != 'undefined') {
var margin = rule['margin-bottom'];
if (margin && margin == rule['margin-top'] && margin == rule['margin-right'] && margin == rule['margin-left']) {
rule['margin'] = margin;
for(i=0;i<arr.length;i++) {
delete rule['margin-'+arr[i]];
}
} else {
delete rule['margin'];
}
}
var border = '', borderb = '', borderr = '', borderl = '';
if (typeof rule['border-top-color'] != 'undefined' || typeof rule['border-top-width'] != 'undefined' || typeof rule['border-top-style'] != 'undefined') {
var format = function (css) {
css = css.join(' ').replace(/!( ?)important/g,'').replace(/ /g,' ').replace(/^ | $/g,'');
return css ? css + ' !important' : '';
};
border = format([rule['border-top-color'], rule['border-top-width'], rule['border-top-style']]);
borderr = format([rule['border-right-color'], rule['border-right-width'], rule['border-right-style']]);
borderb = format([rule['border-bottom-color'], rule['border-bottom-width'], rule['border-bottom-style']]);
borderl = format([rule['border-left-color'], rule['border-left-width'], rule['border-left-style']]);
} else if (typeof rule['border-top'] != 'undefined') {
border = rule['border-top'];borderr = rule['border-right'];borderb = rule['border-bottom'];borderl = rule['border-left'];
}
if (border) {
if (border == borderb && border == borderr && border == borderl) {
rule['border'] = border;
for(i=0;i<arr.length;i++) {
delete rule['border-'+arr[i]];
}
} else {
rule['border-top'] = border;rule['border-right'] = borderr;rule['border-bottom'] = borderb;rule['border-left'] = borderl;
delete rule['border'];
}
for(i=0;i<arr.length;i++) {
delete rule['border-'+arr[i]+'-color'];delete rule['border-'+arr[i]+'-width'];delete rule['border-'+arr[i]+'-style'];
}
}
return rule;
},
changeLayout : function (newLayout) {
if (this.currentLayout == newLayout) return false;
var data = $('layout'+newLayout).getAttribute('data');
var dataArr = data.split(' ');
var currentLayoutLength = this.currentLayout.length;
var newLayoutLength = newLayout.length;
if (newLayoutLength == currentLayoutLength){
$('frame1_left').style.width = dataArr[0]+'px';
$('frame1_center').style.width = dataArr[1]+'px';
if (typeof(dataArr[2]) != 'undefined') $('frame1_right').style.width = dataArr[2]+'px';
} else if (newLayoutLength > currentLayoutLength) {
var block = this.getRandomBlockName();
var dom = document.createElement('div');
dom.id = 'frame1_right';
dom.className = drag.moveableColumn + ' z';
dom.appendChild($(block));
$('frame1').appendChild(dom);
$('frame1_left').style.width = dataArr[0]+'px';
$('frame1_center').style.width = dataArr[1]+'px';
dom.style.width = dataArr[2]+'px';
} else if (newLayoutLength < currentLayoutLength) {
var _length = drag.data['diypage'][0]['columns']['frame1_right']['children'].length;
var tobj = $('frame1_center_temp');
for (var i = 0; i < _length; i++) {
var name = drag.data['diypage'][0]['columns']['frame1_right']['children'][i].name;
if (name.indexOf('temp') < 0) $('frame1_center').insertBefore($(name),tobj);
}
$('frame1').removeChild($('frame1_right'));
$('frame1_left').style.width = dataArr[0]+'px';
$('frame1_center').style.width = dataArr[1]+'px';
}
var className = $('layout'+this.currentLayout).className;
$('layout'+this.currentLayout).className = '';
$('layout'+newLayout).className = className;
this.currentLayout = newLayout;
drag.initPosition();
drag.setClose();
},
getRandomBlockName : function () {
var left = drag.data['diypage'][0]['columns']['frame1_left']['children'];
if (left.length > 2) {
var block = left[0];
} else {
var block = drag.data['diypage'][0]['columns']['frame1_center']['children'][0];
}
return block.name;
},
changeStyle : function (t) {
if (t == '') return false;
$('style_css').href=STATICURL+t+"/style.css";
if (!this.backFlag) {
var oldData = [this.style];
var newData = [t];
var random = Math.random();
this.addOpRecord ('this.changeStyle', newData, oldData, random);
}
var arr = t.split("/");
this.style = arr[arr.length-1];
drag.setClose();
},
setCurrentDiy : function (type) {
if (type) {
$('diy_tag_'+this.currentDiy).className = '';
this.currentDiy = type;
$('diy_tag_'+this.currentDiy).className = 'activity';
this.initPalette(this.currentDiy);
}
},
hideBg : function () {
var random = Math.random();
this.setStyle(this.currentDiy, 'background-image', '', random);
this.setStyle(this.currentDiy, 'background-color', '', random);
if (this.currentDiy == 'hd') this.setStyle(this.currentDiy, 'height', '', random);
this.initPalette(this.currentDiy);
},
toggleHeader : function () {
var random = Math.random();
if ($('header_hide_cb').checked) {
this.setStyle('#hd', 'height', '260px', random);
this.setStyle('#hd', 'background-image', 'none', random);
this.setStyle('#hd', 'border-width', '0px', random);
} else {
this.setStyle('#hd', 'height', '', random);
this.setStyle('#hd', 'background-image', '', random);
this.setStyle('#hd', 'border-width', '', random);
}
},
setBgImage : function (value) {
var path = typeof value == "string" ? value : value.src;
if (path.indexOf('.thumb') > 0) {
path = path.substring(0,path.indexOf('.thumb'));
}
if (path == '' || path == 'undefined') return false;
var random = Math.random();
this.setStyle(this.currentDiy, 'background-image', Util.url(path), random);
this.setStyle(this.currentDiy, 'background-repeat', 'repeat', random);
if (this.currentDiy == 'hd') {
var _method = this;
var img = new Image();
img.onload = function () {
if (parseInt(img.height) < 140) {
DIY.prototype.setStyle.call(_method, _method.currentDiy, 'background-repeat', 'repeat', random);
DIY.prototype.setStyle.call(_method, _method.currentDiy, 'height', '', random);
} else {
DIY.prototype.setStyle.call(_method, _method.currentDiy, 'height', img.height+"px", random);
}
};
img.src = path;
}
},
setBgRepeat : function (value) {
var repeat = ['repeat','no-repeat','repeat-x','repeat-y'];
if (typeof repeat[value] == 'undefined') {return false;}
this.setStyle(this.currentDiy, 'background-repeat', repeat[value]);
},
setBgAttachment : function (value) {
var attachment = ['scroll','fixed'];
if (typeof attachment[value] == 'undefined') {return false;}
this.setStyle(this.currentDiy, 'background-attachment', attachment[value]);
},
setBgColor : function (color) {
this.setStyle(this.currentDiy, 'background-color', color);
},
setTextColor : function (color) {
this.setStyle(this.currentDiy, 'color', color);
},
setLinkColor : function (color) {
this.setStyle(this.currentDiy + ' a', 'color', color);
},
setBgPosition : function (id) {
var td = $(id);
var i = id.substr(id.length-1);
var position = ['left top','center top','right top','left center','center center','right center','left bottom','center bottom','right bottom'];
td.className = 'red';
for (var j=0;j<9;j++) {
if (i != j) {
$('bgimgposition'+j).className = '';
}
}
this.setStyle(this.currentDiy, 'background-position', position[i]);
},
getSelector : function (currentDiv) {
var arr = currentDiv.split(' ');
currentDiv = arr[0];
var link = '';
if (arr.length > 1) {
link = (arr[arr.length-1].toLowerCase() == 'a') ? link = ' '+arr.pop() : '';
currentDiv = arr.join(' ');
}
var selector = '';
switch(currentDiv) {
case 'blocktitle' :
selector = '#ct .move-span .blocktitle';
break;
case 'body' :
case 'BODY' :
selector = BROWSER.ie ? 'BODY' : 'body';
break;
default :
selector = currentDiv.indexOf("#")>-1 ? currentDiv : "#"+currentDiv;
}
var rega = BROWSER.ie ? ' A' : ' a';
selector = (selector+link).replace(/ a/i,rega);
return selector;
},
setStyle : function (currentDiv, property, value, random, num){
property = trim(property).toLowerCase();
var propertyJs = property.property2js();
if (typeof value == 'undefined') value = '';
var selector = this.getSelector(currentDiv);
if (!this.backFlag) {
var rule = this.styleSheet.getRule(selector,propertyJs);
rule = rule.replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
var oldData = [currentDiv, property, rule];
var newData = [currentDiv, property, value];
if (typeof random == 'undefined') random = Math.random();
this.addOpRecord ('this.setStyle', newData, oldData, random);
}
value = this.trimCssImportant(value);
value = value ? value + ' !important' : '';
var pvalue = value ? property+':'+value : '';
this.styleSheet.addRule(selector,pvalue,num,property);
Util.recolored();
if (typeof this.spacecss[selector] == 'undefined') {
this.spacecss[selector] = [];
}
this.spacecss[selector][property] = value;
drag.setClose();
},
trimCssImportant : function (value) {
if (value instanceof Array) value = value.join(' ');
return value ? value.replace(/!( ?)important/g,'').replace(/ /g,' ').replace(/^ | $/g,'') : '';
},
removeCssSelector : function (selector) {
for (var i in this.spacecss) {
if (typeof this.spacecss[i] == "function") continue;
if (i.indexOf(selector) > -1) {
this.styleSheet.removeRule(i);
this.spacecss[i] = [];
}
}
},
undo : function () {
if (this.opSet.length == 0) return false;
var oldData = '';
if (this.opPointer <= 0) {return '';}
var step = this.opSet[--this.opPointer];
var random = step['random'];
var cmd = step['cmd'].split(',');
var cmdNum = cmd.length;
if (cmdNum >1) {
for (var i=0; i<cmdNum; i++) {
oldData = typeof step['oldData'][i] == 'undefined' || step['oldData'] == '' ? '' : '"' + step['oldData'][i].join('","') + '"';
this.backFlag = true;
eval(cmd[i]+'('+oldData+')');
this.backFlag = false;
}
} else {
oldData = typeof step['oldData'] == 'undefined' || step['oldData'] == '' ? '' : '"' + step['oldData'].join('","') + '"';
this.backFlag = true;
eval(cmd+'('+oldData+')');
this.backFlag = false;
}
$('button_redo').className = '';
if (this.opPointer == 0) {
$('button_undo').className = 'unusable';
drag.isChange = false;
drag.clearClose();
return '';
} else if (random == this.opSet[this.opPointer-1]['random']) {
this.undo();
return '';
} else {
return '';
}
},
redo : function () {
if (this.opSet.length == 0) return false;
var newData = '',random = '';
if (this.opPointer >= this.opSet.length) return '';
var step = this.opSet[this.opPointer++];
random = step['random'];
var cmd = step['cmd'].split(',');
var cmdNum = cmd.length;
if (cmdNum >1) {
for (var i=0; i<cmdNum; i++) {
newData = typeof step['newData'][i] == 'undefined' || step['oldData'] == '' ? '' : '"' + step['newData'][i].join('","') + '"';
this.backFlag = true;
eval(cmd[i]+'('+newData+')');
this.backFlag = false;
}
}else {
newData = typeof step['newData'] == 'undefined' || step['oldData'] == '' ? '' : '"' + step['newData'].join('","') + '"';
this.backFlag = true;
eval(cmd+'('+newData+')');
this.backFlag = false;
}
$('button_undo').className = '';
if (this.opPointer == this.opSet.length) {
$('button_redo').className = 'unusable';
return '';
} else if(random == this.opSet[this.opPointer]['random']){
this.redo();
}
},
addOpRecord : function (cmd, newData, oldData, random) {
if (this.opPointer == 0) this.opSet = [];
this.opSet[this.opPointer++] = {'cmd':cmd, 'newData':newData, 'oldData':oldData, 'random':random};
$('button_undo').className = '';
$('button_redo').className = 'unusable';
Util.show('recover_button');
},
recoverStyle : function () {
var random = Math.random();
for (var selector in this.spacecss){
var style = this.spacecss[selector];
if (typeof style == "function") {continue;}
for (var attribute in style) {
if (typeof style[attribute] == "function") {continue;}
this.setStyle(selector,attribute,'',random);
}
}
Util.hide('recover_button');
drag.setClose();
this.initPalette(this.currentDiy);
},
uploadSubmit : function (){
if (document.uploadpic.attach.value.length<3) {
alert('请选择您要上传的图片');
return false;
}
if (document.uploadpic.albumid != null) document.uploadpic.albumid.value = $('selectalbum').value;
return true;
},
save : function () {
return false;
},
cancel : function () {
var flag = false;
if (this.isChange) {
flag = confirm(this.cancelConfirm ? this.cancelConfirm : '退出将不会保存您刚才的设置。是否确认退出?');
}
if (!this.isChange || flag) {
location.href = location.href.replace(/[\?|\&]diy\=yes/g,'');
}
},
extend : function (obj) {
for (var i in obj) {
this[i] = obj[i];
}
}
};
})();