123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /**
- * 背景插件,为UEditor提供设置背景功能
- * @file
- * @since 1.2.6.1
- */
- UE.plugin.register("background", function() {
- var me = this,
- cssRuleId = "editor_background",
- isSetColored,
- reg = new RegExp("body[\\s]*\\{(.+)\\}", "i");
- function stringToObj(str) {
- var obj = {},
- styles = str.split(";");
- utils.each(styles, function(v) {
- var index = v.indexOf(":"),
- key = utils.trim(v.substr(0, index)).toLowerCase();
- key && (obj[key] = utils.trim(v.substr(index + 1) || ""));
- });
- return obj;
- }
- function setBackground(obj) {
- if (obj) {
- var styles = [];
- for (var name in obj) {
- if (obj.hasOwnProperty(name)) {
- styles.push(name + ":" + obj[name] + "; ");
- }
- }
- utils.cssRule(
- cssRuleId,
- styles.length ? "body{" + styles.join("") + "}" : "",
- me.document
- );
- } else {
- utils.cssRule(cssRuleId, "", me.document);
- }
- }
- //重写editor.hasContent方法
- var orgFn = me.hasContents;
- me.hasContents = function() {
- if (me.queryCommandValue("background")) {
- return true;
- }
- return orgFn.apply(me, arguments);
- };
- return {
- bindEvents: {
- getAllHtml: function(type, headHtml) {
- var body = this.body,
- su = domUtils.getComputedStyle(body, "background-image"),
- url = "";
- if (su.indexOf(me.options.imagePath) > 0) {
- url = su
- .substring(su.indexOf(me.options.imagePath), su.length - 1)
- .replace(/"|\(|\)/gi, "");
- } else {
- url = su != "none" ? su.replace(/url\("?|"?\)/gi, "") : "";
- }
- var html = '<style type="text/css">body{';
- var bgObj = {
- "background-color":
- domUtils.getComputedStyle(body, "background-color") || "#ffffff",
- "background-image": url ? "url(" + url + ")" : "",
- "background-repeat":
- domUtils.getComputedStyle(body, "background-repeat") || "",
- "background-position": browser.ie
- ? domUtils.getComputedStyle(body, "background-position-x") +
- " " +
- domUtils.getComputedStyle(body, "background-position-y")
- : domUtils.getComputedStyle(body, "background-position"),
- height: domUtils.getComputedStyle(body, "height")
- };
- for (var name in bgObj) {
- if (bgObj.hasOwnProperty(name)) {
- html += name + ":" + bgObj[name] + "; ";
- }
- }
- html += "}</style> ";
- headHtml.push(html);
- },
- aftersetcontent: function() {
- if (isSetColored == false) setBackground();
- }
- },
- inputRule: function(root) {
- isSetColored = false;
- utils.each(root.getNodesByTagName("p"), function(p) {
- var styles = p.getAttr("data-background");
- if (styles) {
- isSetColored = true;
- setBackground(stringToObj(styles));
- p.parentNode.removeChild(p);
- }
- });
- },
- outputRule: function(root) {
- var me = this,
- styles = (utils.cssRule(cssRuleId, me.document) || "")
- .replace(/[\n\r]+/g, "")
- .match(reg);
- if (styles) {
- root.appendChild(
- UE.uNode.createElement(
- '<p style="display:none;" data-background="' +
- utils.trim(styles[1].replace(/"/g, "").replace(/[\s]+/g, " ")) +
- '"><br/></p>'
- )
- );
- }
- },
- commands: {
- background: {
- execCommand: function(cmd, obj) {
- setBackground(obj);
- },
- queryCommandValue: function() {
- var me = this,
- styles = (utils.cssRule(cssRuleId, me.document) || "")
- .replace(/[\n\r]+/g, "")
- .match(reg);
- return styles ? stringToObj(styles[1]) : null;
- },
- notNeedUndo: true
- }
- }
- };
- });
|