📄 chameleon_js.php
字号:
setPropValue: function(prop, value, selector) { if (!selector) var selector = CSS.Selector.get(); if (!CSS.__localCSS[selector]) { CSS.__localCSS[selector] = {}; } var matches = prop.match(/^border\-([^\-]+)$/); if (value) { var func = CSS.__requiresFunction(prop); if (func && value != 'none') { CSS.__localCSS[selector][prop] = func + '(' + value + ')'; } else if (matches) { CSS.__localCSS[selector]['border-left-' + matches[1]] = value; CSS.__localCSS[selector]['border-right-' + matches[1]] = value; CSS.__localCSS[selector]['border-top-' + matches[1]] = value; CSS.__localCSS[selector]['border-bottom-' + matches[1]] = value; } else { CSS.__localCSS[selector][prop] = value; } } else { if (matches) { CSS.unsetProp('border-left-' + matches[1], selector); CSS.unsetProp('border-right-' + matches[1], selector); CSS.unsetProp('border-top-' + matches[1], selector); CSS.unsetProp('border-bottom-' + matches[1], selector); } else { CSS.unsetProp(prop, selector); } } CSS.__localSaveRequired = true; CSS.__remoteSaveRequired = true; CSS.preview(selector); }, getPropValue: function(prop, selector) { if (!selector) var selector = CSS.Selector.get(); if (!CSS.__localCSS[selector] || !CSS.__localCSS[selector][prop]) { return ''; } return CSS.__cleanFunctions(CSS.__localCSS[selector][prop]); }, unsetProp: function(prop, selector) { if (!selector) var selector = CSS.Selector.get(); if (!CSS.__localCSS[selector] || !CSS.__localCSS[selector][prop]) return; CSS.__localCSS[selector][prop] = null; delete CSS.__localCSS[selector][prop]; if (!CSS.__hasProps(selector)) { CSS.__localCSS[selector] = null; delete CSS.__localCSS[selector]; } }, __hasProps: function(selector) { for (var prop in CSS.__localCSS[selector]) { if (prop) { return true; } } return false; }, __cleanFunctions: function(val) { var toClean = ['url']; for (var i = 0; i < toClean.length; ++i) { var start = val.indexOf(toClean[i] + '('); var end = val.indexOf(')', start); if (start == -1 || end == -1) { continue; } val = val.slice(start + toClean[i].length + 1, end); } return val; }, __requiresFunction: function(prop) { var fnProps = {}; fnProps['background-image'] = 'url'; if (fnProps[prop]) { return fnProps[prop]; } return false; }, fixPath: function(val) { if (val == 'none') return val; var tmp = val.split('('); if (tmp.length > 1) { tmp[1] = Config.THEME_ROOT + '/' + tmp[1]; return tmp.join('('); } return Config.THEME_ROOT + '/' + val; }, preview: function(sel) { var styleId = 'chameleon-preview-styles'; var h = document.getElementsByTagName('head')[0]; var s = document.getElementById(styleId); if (!s) { var s = Util.createElement('style', styleId); s.setAttribute('type', 'text/css'); h.appendChild(s); } if (navigator.userAgent.toLowerCase().indexOf('msie') != -1 && !window.opera && document.styleSheets && document.styleSheets.length > 0) { var lastStyle = document.styleSheets[document.styleSheets.length - 1]; var ieCrashProtector = /[^a-z0-9 #_:\.\-\*]/i; // some characters appearing in a selector can cause addRule to crash IE in spectacular style - if the selector contains any character outside this list don't try to add to the preview var ieWarning = false; if (sel) { var matchedSelectors = []; if (typeof sel == 'string') { sel = [sel]; } var n = lastStyle.rules.length; while (n--) { var ns = sel.length; if (ns == 0) { break; } while (ns--) { if (sel[ns].match(ieCrashProtector)) { ieWarning = true; sel.splice(ns, 1); break; } if (lastStyle.rules[n].selectorText.toLowerCase() == sel[ns].toLowerCase()) { matchedSelectors.push(sel[ns]); sel.splice(ns, 1); lastStyle.removeRule(n); break; } } } matchedSelectors = matchedSelectors.concat(sel); var sl = matchedSelectors.length; while (sl--) { lastStyle.addRule(matchedSelectors[sl], CSS.__propsToString(CSS.__localCSS[matchedSelectors[sl]], true)); } } else { var n = lastStyle.rules.length; while (n--) { lastStyle.removeRule(n); } for (var sel in CSS.__localCSS) { if (sel.match(ieCrashProtector)) { ieWarning = true; continue; } var dec = CSS.__propsToString(CSS.__localCSS[sel], true); lastStyle.addRule(sel, dec); } } if (ieWarning) { UI.statusMsg('The edited CSS contains content that can not be previewed by Internet Explorer', 'chameleon-notice'); } } else { Util.clearElement(s); s.appendChild(document.createTextNode(CSS.toString(CSS.__localCSS, true))); // I think innerHTML would be faster here, but it doesn't work in KHTML browsers (Safari etc) } }, __merge: function() { var merged = {}; for (var i = 0; i < arguments.length; ++i) { for (var sel in arguments[i]) { var newSelector = false; if (!merged[sel]) { merged[sel] = {}; newSelector = true; } for (var prop in arguments[i][sel]) { merged[sel][prop] = arguments[i][sel][prop]; } if (i > 0 && !newSelector) { for (var prop in merged[sel]) { if (!arguments[i][sel][prop]) { merged[sel][prop] = null; delete merged[sel][prop]; } } } } if (i > 0) { for (var sel in merged) { if (!arguments[i][sel]) { merged[sel] = null; delete merged[sel]; } } } } return merged; }, __clone: function(src) { var cloned = {}; for (var sel in src) { if (!cloned[sel]) { cloned[sel] = {}; } for (var prop in src[sel]) { cloned[sel][prop] = src[sel][prop]; } } return cloned; }, toString: function(css, fixpath) { if (!css) var css = CSS.__localCSS; var dec = ''; for (var sel in css) { dec += sel + ' ' + CSS.__propsToString(css[sel], fixpath, sel); } return dec; }, __propsToString: function(css, fixpath) { CSS.__Shorthand.border = {}; var hasBorder = false; var col = false; var importantBorders = []; var dec = '{\n'; for (var prop in css) { var includeProp = true; if (prop.indexOf('border') != -1 && prop.indexOf('spacing') == -1 && prop.indexOf('collapse') == -1) { if (css[prop].indexOf('!important') == -1) { CSS.__Shorthand.recordBorder(prop, css[prop]); } else { importantBorders.push({prop: prop, css: css[prop]}); } includeProp = false; hasBorder = true; } if (prop == 'color') { col = css[prop]; } if (includeProp) { if (fixpath && (CSS.__requiresFunction(prop) == 'url') && css[prop] != 'none') { dec += ' ' + prop + ': ' + CSS.fixPath(css[prop]) + ';\n'; } else { dec += ' ' + prop + ': ' + css[prop] + ';\n'; } } } if (hasBorder) { dec += CSS.__Shorthand.getBorderString(col); } var n; if (n = importantBorders.length) { while (n--) { dec += ' ' + importantBorders[n].prop + ': ' + importantBorders[n].css + ';\n'; } } dec += '}\n'; return dec; }, toObject: function(css) { var cssObj = {}; var end; while (end = css.indexOf('}'), end != -1) { var cssRule = css.substr(0, end); var parts = cssRule.split('{'); var selector = parts.shift() if (selector.indexOf(',') != -1) { var selectorArr = selector.split(','); } else { var selectorArr = [selector]; } var rules = parts.pop().trim(); rules = rules.split(';'); for (var i = 0; i < rules.length; ++i) { if (rules[i].indexOf(':') == -1) { break; } var rule = rules[i].split(':'); var prop = rule.shift().trim(); var val = rule.pop().trim(); for (var j = 0; j < selectorArr.length; ++j) { var noFontPropReset = {}; selector = selectorArr[j].trim(); if (!cssObj[selector]) { cssObj[selector] = {}; } if (prop != 'font' && (prop.indexOf('font') != -1 || prop == 'line-height')) { noFontPropReset[prop] = true; } if (prop == 'background') { CSS.__Shorthand.setBackground(cssObj, selector, val); } else if (prop == 'font') { CSS.__Shorthand.setFont(cssObj, selector, val, noFontPropReset); } else if ((prop == 'border' || prop.match(/^border\-([^-]+)$/)) && prop.indexOf('spacing') == -1 && prop.indexOf('collapse') == -1) { CSS.__Shorthand.setBorder(cssObj, selector, val, prop); } else { cssObj[selector][prop] = val;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -