123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998 |
- ///import core
- ///commands 全屏
- ///commandsName FullScreen
- ///commandsTitle 全屏
- (function() {
- var utils = baidu.editor.utils,
- uiUtils = baidu.editor.ui.uiUtils,
- UIBase = baidu.editor.ui.UIBase,
- domUtils = baidu.editor.dom.domUtils;
- var nodeStack = [];
- function EditorUI(options) {
- this.initOptions(options);
- this.initEditorUI();
- }
- EditorUI.prototype = {
- uiName: "editor",
- initEditorUI: function() {
- this.editor.ui = this;
- this._dialogs = {};
- this.initUIBase();
- this._initToolbars();
- var editor = this.editor,
- me = this;
- editor.addListener("ready", function() {
- //提供getDialog方法
- editor.getDialog = function(name) {
- return editor.ui._dialogs[name + "Dialog"];
- };
- domUtils.on(editor.window, "scroll", function(evt) {
- baidu.editor.ui.Popup.postHide(evt);
- });
- //提供编辑器实时宽高(全屏时宽高不变化)
- editor.ui._actualFrameWidth = editor.options.initialFrameWidth;
- UE.browser.ie &&
- UE.browser.version === 6 &&
- editor.container.ownerDocument.execCommand(
- "BackgroundImageCache",
- false,
- true
- );
- //display bottom-bar label based on config
- if (editor.options.elementPathEnabled) {
- editor.ui.getDom("elementpath").innerHTML =
- '<div class="edui-editor-breadcrumb">' +
- editor.getLang("elementPathTip") +
- ":</div>";
- }
- if (editor.options.wordCount) {
- function countFn() {
- setCount(editor, me);
- domUtils.un(editor.document, "click", arguments.callee);
- }
- domUtils.on(editor.document, "click", countFn);
- editor.ui.getDom("wordcount").innerHTML = editor.getLang(
- "wordCountTip"
- );
- }
- editor.ui._scale();
- if (editor.options.scaleEnabled) {
- if (editor.autoHeightEnabled) {
- editor.disableAutoHeight();
- }
- me.enableScale();
- } else {
- me.disableScale();
- }
- if (
- !editor.options.elementPathEnabled &&
- !editor.options.wordCount &&
- !editor.options.scaleEnabled
- ) {
- editor.ui.getDom("elementpath").style.display = "none";
- editor.ui.getDom("wordcount").style.display = "none";
- editor.ui.getDom("scale").style.display = "none";
- }
- if (!editor.selection.isFocus()) return;
- editor.fireEvent("selectionchange", false, true);
- });
- editor.addListener("mousedown", function(t, evt) {
- var el = evt.target || evt.srcElement;
- baidu.editor.ui.Popup.postHide(evt, el);
- baidu.editor.ui.ShortCutMenu.postHide(evt);
- });
- editor.addListener("delcells", function() {
- if (UE.ui["edittip"]) {
- new UE.ui["edittip"](editor);
- }
- editor.getDialog("edittip").open();
- });
- var pastePop,
- isPaste = false,
- timer;
- editor.addListener("afterpaste", function() {
- if (editor.queryCommandState("pasteplain")) return;
- if (baidu.editor.ui.PastePicker) {
- pastePop = new baidu.editor.ui.Popup({
- content: new baidu.editor.ui.PastePicker({ editor: editor }),
- editor: editor,
- className: "edui-wordpastepop"
- });
- pastePop.render();
- }
- isPaste = true;
- });
- editor.addListener("afterinserthtml", function() {
- clearTimeout(timer);
- timer = setTimeout(function() {
- if (pastePop && (isPaste || editor.ui._isTransfer)) {
- if (pastePop.isHidden()) {
- var span = domUtils.createElement(editor.document, "span", {
- style: "line-height:0px;",
- innerHTML: "\ufeff"
- }),
- range = editor.selection.getRange();
- range.insertNode(span);
- var tmp = getDomNode(span, "firstChild", "previousSibling");
- tmp &&
- pastePop.showAnchor(tmp.nodeType == 3 ? tmp.parentNode : tmp);
- domUtils.remove(span);
- } else {
- pastePop.show();
- }
- delete editor.ui._isTransfer;
- isPaste = false;
- }
- }, 200);
- });
- editor.addListener("contextmenu", function(t, evt) {
- baidu.editor.ui.Popup.postHide(evt);
- });
- editor.addListener("keydown", function(t, evt) {
- if (pastePop) pastePop.dispose(evt);
- var keyCode = evt.keyCode || evt.which;
- if (evt.altKey && keyCode == 90) {
- UE.ui.buttons["fullscreen"].onclick();
- }
- });
- editor.addListener("wordcount", function(type) {
- setCount(this, me);
- });
- function setCount(editor, ui) {
- editor.setOpt({
- wordCount: true,
- maximumWords: 10000,
- wordCountMsg:
- editor.options.wordCountMsg || editor.getLang("wordCountMsg"),
- wordOverFlowMsg:
- editor.options.wordOverFlowMsg || editor.getLang("wordOverFlowMsg")
- });
- var opt = editor.options,
- max = opt.maximumWords,
- msg = opt.wordCountMsg,
- errMsg = opt.wordOverFlowMsg,
- countDom = ui.getDom("wordcount");
- if (!opt.wordCount) {
- return;
- }
- var count = editor.getContentLength(true);
- if (count > max) {
- countDom.innerHTML = errMsg;
- editor.fireEvent("wordcountoverflow");
- } else {
- countDom.innerHTML = msg
- .replace("{#leave}", max - count)
- .replace("{#count}", count);
- }
- }
- editor.addListener("selectionchange", function() {
- if (editor.options.elementPathEnabled) {
- me[
- (editor.queryCommandState("elementpath") == -1 ? "dis" : "en") +
- "ableElementPath"
- ]();
- }
- if (editor.options.scaleEnabled) {
- me[
- (editor.queryCommandState("scale") == -1 ? "dis" : "en") +
- "ableScale"
- ]();
- }
- });
- var popup = new baidu.editor.ui.Popup({
- editor: editor,
- content: "",
- className: "edui-bubble",
- _onEditButtonClick: function() {
- this.hide();
- editor.ui._dialogs.linkDialog.open();
- },
- _onImgEditButtonClick: function(name) {
- this.hide();
- editor.ui._dialogs[name] && editor.ui._dialogs[name].open();
- },
- _onImgSetFloat: function(value) {
- this.hide();
- editor.execCommand("imagefloat", value);
- },
- _setIframeAlign: function(value) {
- var frame = popup.anchorEl;
- var newFrame = frame.cloneNode(true);
- switch (value) {
- case -2:
- newFrame.setAttribute("align", "");
- break;
- case -1:
- newFrame.setAttribute("align", "left");
- break;
- case 1:
- newFrame.setAttribute("align", "right");
- break;
- }
- frame.parentNode.insertBefore(newFrame, frame);
- domUtils.remove(frame);
- popup.anchorEl = newFrame;
- popup.showAnchor(popup.anchorEl);
- },
- _updateIframe: function() {
- var frame = (editor._iframe = popup.anchorEl);
- if (domUtils.hasClass(frame, "ueditor_baidumap")) {
- editor.selection.getRange().selectNode(frame).select();
- editor.ui._dialogs.mapDialog.open();
- popup.hide();
- } else {
- editor.ui._dialogs.insertframeDialog.open();
- popup.hide();
- }
- },
- _onRemoveButtonClick: function(cmdName) {
- editor.execCommand(cmdName);
- this.hide();
- },
- queryAutoHide: function(el) {
- if (el && el.ownerDocument == editor.document) {
- if (
- el.tagName.toLowerCase() == "img" ||
- domUtils.findParentByTagName(el, "a", true)
- ) {
- return el !== popup.anchorEl;
- }
- }
- return baidu.editor.ui.Popup.prototype.queryAutoHide.call(this, el);
- }
- });
- popup.render();
- if (editor.options.imagePopup) {
- editor.addListener("mouseover", function(t, evt) {
- evt = evt || window.event;
- var el = evt.target || evt.srcElement;
- if (
- editor.ui._dialogs.insertframeDialog &&
- /iframe/gi.test(el.tagName)
- ) {
- var html = popup.formatHtml(
- "<nobr>" +
- editor.getLang("property") +
- ': <span onclick=$$._setIframeAlign(-2) class="edui-clickable">' +
- editor.getLang("default") +
- '</span> <span onclick=$$._setIframeAlign(-1) class="edui-clickable">' +
- editor.getLang("justifyleft") +
- '</span> <span onclick=$$._setIframeAlign(1) class="edui-clickable">' +
- editor.getLang("justifyright") +
- "</span> " +
- ' <span onclick="$$._updateIframe( this);" class="edui-clickable">' +
- editor.getLang("modify") +
- "</span></nobr>"
- );
- if (html) {
- popup.getDom("content").innerHTML = html;
- popup.anchorEl = el;
- popup.showAnchor(popup.anchorEl);
- } else {
- popup.hide();
- }
- }
- });
- editor.addListener("selectionchange", function(t, causeByUi) {
- if (!causeByUi) return;
- var html = "",
- str = "",
- img = editor.selection.getRange().getClosedNode(),
- dialogs = editor.ui._dialogs;
- if (img && img.tagName == "IMG") {
- var dialogName = "insertimageDialog";
- if (
- img.className.indexOf("edui-faked-video") != -1 ||
- img.className.indexOf("edui-upload-video") != -1
- ) {
- dialogName = "insertvideoDialog";
- }
- if (img.className.indexOf("edui-faked-webapp") != -1) {
- dialogName = "webappDialog";
- }
- if (img.src.indexOf("http://api.map.baidu.com") != -1) {
- dialogName = "mapDialog";
- }
- if (img.className.indexOf("edui-faked-music") != -1) {
- dialogName = "musicDialog";
- }
- if (
- img.src.indexOf("http://maps.google.com/maps/api/staticmap") != -1
- ) {
- dialogName = "gmapDialog";
- }
- if (img.getAttribute("anchorname")) {
- dialogName = "anchorDialog";
- html = popup.formatHtml(
- "<nobr>" +
- editor.getLang("property") +
- ': <span onclick=$$._onImgEditButtonClick("anchorDialog") class="edui-clickable">' +
- editor.getLang("modify") +
- "</span> " +
- "<span onclick=$$._onRemoveButtonClick('anchor') class=\"edui-clickable\">" +
- editor.getLang("delete") +
- "</span></nobr>"
- );
- }
- if (img.getAttribute("word_img")) {
- //todo 放到dialog去做查询
- editor.word_img = [img.getAttribute("word_img")];
- dialogName = "wordimageDialog";
- }
- if (
- domUtils.hasClass(img, "loadingclass") ||
- domUtils.hasClass(img, "loaderrorclass")
- ) {
- dialogName = "";
- }
- if (!dialogs[dialogName]) {
- return;
- }
- str =
- "<nobr>" +
- editor.getLang("property") +
- ": " +
- '<span onclick=$$._onImgSetFloat("none") class="edui-clickable">' +
- editor.getLang("default") +
- "</span> " +
- '<span onclick=$$._onImgSetFloat("left") class="edui-clickable">' +
- editor.getLang("justifyleft") +
- "</span> " +
- '<span onclick=$$._onImgSetFloat("right") class="edui-clickable">' +
- editor.getLang("justifyright") +
- "</span> " +
- '<span onclick=$$._onImgSetFloat("center") class="edui-clickable">' +
- editor.getLang("justifycenter") +
- "</span> " +
- "<span onclick=\"$$._onImgEditButtonClick('" +
- dialogName +
- '\');" class="edui-clickable">' +
- editor.getLang("modify") +
- "</span></nobr>";
- !html && (html = popup.formatHtml(str));
- }
- if (editor.ui._dialogs.linkDialog) {
- var link = editor.queryCommandValue("link");
- var url;
- if (
- link &&
- (url = link.getAttribute("_href") || link.getAttribute("href", 2))
- ) {
- var txt = url;
- if (url.length > 30) {
- txt = url.substring(0, 20) + "...";
- }
- if (html) {
- html += '<div style="height:5px;"></div>';
- }
- html += popup.formatHtml(
- "<nobr>" +
- editor.getLang("anthorMsg") +
- ': <a target="_blank" href="' +
- url +
- '" title="' +
- url +
- '" >' +
- txt +
- "</a>" +
- ' <span class="edui-clickable" onclick="$$._onEditButtonClick();">' +
- editor.getLang("modify") +
- "</span>" +
- ' <span class="edui-clickable" onclick="$$._onRemoveButtonClick(\'unlink\');"> ' +
- editor.getLang("clear") +
- "</span></nobr>"
- );
- popup.showAnchor(link);
- }
- }
- if (html) {
- popup.getDom("content").innerHTML = html;
- popup.anchorEl = img || link;
- popup.showAnchor(popup.anchorEl);
- } else {
- popup.hide();
- }
- });
- }
- },
- _initToolbars: function() {
- var editor = this.editor;
- var toolbars = this.toolbars || [];
- var toolbarUis = [];
- var extraUIs = [];
- for (var i = 0; i < toolbars.length; i++) {
- var toolbar = toolbars[i];
- var toolbarUi = new baidu.editor.ui.Toolbar({
- theme: editor.options.theme
- });
- for (var j = 0; j < toolbar.length; j++) {
- var toolbarItem = toolbar[j];
- var toolbarItemUi = null;
- if (typeof toolbarItem == "string") {
- toolbarItem = toolbarItem.toLowerCase();
- if (toolbarItem == "|") {
- toolbarItem = "Separator";
- }
- if (toolbarItem == "||") {
- toolbarItem = "Breakline";
- }
- var ui = baidu.editor.ui[toolbarItem];
- if (ui) {
- if (utils.isFunction(ui)) {
- toolbarItemUi = new baidu.editor.ui[toolbarItem](editor);
- } else {
- if (ui.id && ui.id != editor.key) {
- continue;
- }
- var itemUI = ui.execFn.call(editor, editor, toolbarItem);
- if (itemUI) {
- if (ui.index === undefined) {
- toolbarUi.add(itemUI);
- continue;
- } else {
- extraUIs.push({
- index: ui.index,
- itemUI: itemUI
- });
- }
- }
- }
- }
- //fullscreen这里单独处理一下,放到首行去
- if (toolbarItem == "fullscreen") {
- if (toolbarUis && toolbarUis[0]) {
- toolbarUis[0].items.splice(0, 0, toolbarItemUi);
- } else {
- toolbarItemUi && toolbarUi.items.splice(0, 0, toolbarItemUi);
- }
- continue;
- }
- } else {
- toolbarItemUi = toolbarItem;
- }
- if (toolbarItemUi && toolbarItemUi.id) {
- toolbarUi.add(toolbarItemUi);
- }
- }
- toolbarUis[i] = toolbarUi;
- }
- //接受外部定制的UI
- utils.each(extraUIs, function(obj) {
- toolbarUi.add(obj.itemUI, obj.index);
- });
- this.toolbars = toolbarUis;
- },
- getHtmlTpl: function() {
- return (
- '<div id="##" class="%%">' +
- '<div id="##_toolbarbox" class="%%-toolbarbox">' +
- (this.toolbars.length
- ? '<div id="##_toolbarboxouter" class="%%-toolbarboxouter"><div class="%%-toolbarboxinner">' +
- this.renderToolbarBoxHtml() +
- "</div></div>"
- : "") +
- '<div id="##_toolbarmsg" class="%%-toolbarmsg" style="display:none;">' +
- '<div id = "##_upload_dialog" class="%%-toolbarmsg-upload" onclick="$$.showWordImageDialog();">' +
- this.editor.getLang("clickToUpload") +
- "</div>" +
- '<div class="%%-toolbarmsg-close" onclick="$$.hideToolbarMsg();">x</div>' +
- '<div id="##_toolbarmsg_label" class="%%-toolbarmsg-label"></div>' +
- '<div style="height:0;overflow:hidden;clear:both;"></div>' +
- "</div>" +
- '<div id="##_message_holder" class="%%-messageholder"></div>' +
- "</div>" +
- '<div id="##_iframeholder" class="%%-iframeholder">' +
- "</div>" +
- //modify wdcount by matao
- '<div id="##_bottombar" class="%%-bottomContainer"><table><tr>' +
- '<td id="##_elementpath" class="%%-bottombar"></td>' +
- '<td id="##_wordcount" class="%%-wordcount"></td>' +
- '<td id="##_scale" class="%%-scale"><div class="%%-icon"></div></td>' +
- "</tr></table></div>" +
- '<div id="##_scalelayer"></div>' +
- "</div>"
- );
- },
- showWordImageDialog: function() {
- this._dialogs["wordimageDialog"].open();
- },
- renderToolbarBoxHtml: function() {
- var buff = [];
- for (var i = 0; i < this.toolbars.length; i++) {
- buff.push(this.toolbars[i].renderHtml());
- }
- return buff.join("");
- },
- setFullScreen: function(fullscreen) {
- var editor = this.editor,
- container = editor.container.parentNode.parentNode;
- if (this._fullscreen != fullscreen) {
- this._fullscreen = fullscreen;
- this.editor.fireEvent("beforefullscreenchange", fullscreen);
- if (baidu.editor.browser.gecko) {
- var bk = editor.selection.getRange().createBookmark();
- }
- if (fullscreen) {
- while (container.tagName != "BODY") {
- var position = baidu.editor.dom.domUtils.getComputedStyle(
- container,
- "position"
- );
- nodeStack.push(position);
- container.style.position = "static";
- container = container.parentNode;
- }
- this._bakHtmlOverflow = document.documentElement.style.overflow;
- this._bakBodyOverflow = document.body.style.overflow;
- this._bakAutoHeight = this.editor.autoHeightEnabled;
- this._bakScrollTop = Math.max(
- document.documentElement.scrollTop,
- document.body.scrollTop
- );
- this._bakEditorContaninerWidth = editor.iframe.parentNode.offsetWidth;
- if (this._bakAutoHeight) {
- //当全屏时不能执行自动长高
- editor.autoHeightEnabled = false;
- this.editor.disableAutoHeight();
- }
- document.documentElement.style.overflow = "hidden";
- //修复,滚动条不收起的问题
- window.scrollTo(0, window.scrollY);
- this._bakCssText = this.getDom().style.cssText;
- this._bakCssText1 = this.getDom("iframeholder").style.cssText;
- editor.iframe.parentNode.style.width = "";
- this._updateFullScreen();
- } else {
- while (container.tagName != "BODY") {
- container.style.position = nodeStack.shift();
- container = container.parentNode;
- }
- this.getDom().style.cssText = this._bakCssText;
- this.getDom("iframeholder").style.cssText = this._bakCssText1;
- if (this._bakAutoHeight) {
- editor.autoHeightEnabled = true;
- this.editor.enableAutoHeight();
- }
- document.documentElement.style.overflow = this._bakHtmlOverflow;
- document.body.style.overflow = this._bakBodyOverflow;
- editor.iframe.parentNode.style.width =
- this._bakEditorContaninerWidth + "px";
- window.scrollTo(0, this._bakScrollTop);
- }
- if (browser.gecko && editor.body.contentEditable === "true") {
- var input = document.createElement("input");
- document.body.appendChild(input);
- editor.body.contentEditable = false;
- setTimeout(function() {
- input.focus();
- setTimeout(function() {
- editor.body.contentEditable = true;
- editor.fireEvent("fullscreenchanged", fullscreen);
- editor.selection.getRange().moveToBookmark(bk).select(true);
- baidu.editor.dom.domUtils.remove(input);
- fullscreen && window.scroll(0, 0);
- }, 0);
- }, 0);
- }
- if (editor.body.contentEditable === "true") {
- this.editor.fireEvent("fullscreenchanged", fullscreen);
- this.triggerLayout();
- }
- }
- },
- _updateFullScreen: function() {
- if (this._fullscreen) {
- var vpRect = uiUtils.getViewportRect();
- this.getDom().style.cssText =
- "border:0;position:absolute;left:0;top:" +
- (this.editor.options.topOffset || 0) +
- "px;width:" +
- vpRect.width +
- "px;height:" +
- vpRect.height +
- "px;z-index:" +
- (this.getDom().style.zIndex * 1 + 100);
- uiUtils.setViewportOffset(this.getDom(), {
- left: 0,
- top: this.editor.options.topOffset || 0
- });
- this.editor.setHeight(
- vpRect.height -
- this.getDom("toolbarbox").offsetHeight -
- this.getDom("bottombar").offsetHeight -
- (this.editor.options.topOffset || 0),
- true
- );
- //不手动调一下,会导致全屏失效
- if (browser.gecko) {
- try {
- window.onresize();
- } catch (e) {}
- }
- }
- },
- _updateElementPath: function() {
- var bottom = this.getDom("elementpath"),
- list;
- if (
- this.elementPathEnabled &&
- (list = this.editor.queryCommandValue("elementpath"))
- ) {
- var buff = [];
- for (var i = 0, ci; (ci = list[i]); i++) {
- buff[i] = this.formatHtml(
- '<span unselectable="on" onclick="$$.editor.execCommand("elementpath", "' +
- i +
- '");">' +
- ci +
- "</span>"
- );
- }
- bottom.innerHTML =
- '<div class="edui-editor-breadcrumb" onmousedown="return false;">' +
- this.editor.getLang("elementPathTip") +
- ": " +
- buff.join(" > ") +
- "</div>";
- } else {
- bottom.style.display = "none";
- }
- },
- disableElementPath: function() {
- var bottom = this.getDom("elementpath");
- bottom.innerHTML = "";
- bottom.style.display = "none";
- this.elementPathEnabled = false;
- },
- enableElementPath: function() {
- var bottom = this.getDom("elementpath");
- bottom.style.display = "";
- this.elementPathEnabled = true;
- this._updateElementPath();
- },
- _scale: function() {
- var doc = document,
- editor = this.editor,
- editorHolder = editor.container,
- editorDocument = editor.document,
- toolbarBox = this.getDom("toolbarbox"),
- bottombar = this.getDom("bottombar"),
- scale = this.getDom("scale"),
- scalelayer = this.getDom("scalelayer");
- var isMouseMove = false,
- position = null,
- minEditorHeight = 0,
- minEditorWidth = editor.options.minFrameWidth,
- pageX = 0,
- pageY = 0,
- scaleWidth = 0,
- scaleHeight = 0;
- function down() {
- position = domUtils.getXY(editorHolder);
- if (!minEditorHeight) {
- minEditorHeight =
- editor.options.minFrameHeight +
- toolbarBox.offsetHeight +
- bottombar.offsetHeight;
- }
- scalelayer.style.cssText =
- "position:absolute;left:0;display:;top:0;background-color:#41ABFF;opacity:0.4;filter: Alpha(opacity=40);width:" +
- editorHolder.offsetWidth +
- "px;height:" +
- editorHolder.offsetHeight +
- "px;z-index:" +
- (editor.options.zIndex + 1);
- domUtils.on(doc, "mousemove", move);
- domUtils.on(editorDocument, "mouseup", up);
- domUtils.on(doc, "mouseup", up);
- }
- var me = this;
- //by xuheng 全屏时关掉缩放
- this.editor.addListener("fullscreenchanged", function(e, fullScreen) {
- if (fullScreen) {
- me.disableScale();
- } else {
- if (me.editor.options.scaleEnabled) {
- me.enableScale();
- var tmpNode = me.editor.document.createElement("span");
- me.editor.body.appendChild(tmpNode);
- me.editor.body.style.height =
- Math.max(
- domUtils.getXY(tmpNode).y,
- me.editor.iframe.offsetHeight - 20
- ) + "px";
- domUtils.remove(tmpNode);
- }
- }
- });
- function move(event) {
- clearSelection();
- var e = event || window.event;
- pageX = e.pageX || doc.documentElement.scrollLeft + e.clientX;
- pageY = e.pageY || doc.documentElement.scrollTop + e.clientY;
- scaleWidth = pageX - position.x;
- scaleHeight = pageY - position.y;
- if (scaleWidth >= minEditorWidth) {
- isMouseMove = true;
- scalelayer.style.width = scaleWidth + "px";
- }
- if (scaleHeight >= minEditorHeight) {
- isMouseMove = true;
- scalelayer.style.height = scaleHeight + "px";
- }
- }
- function up() {
- if (isMouseMove) {
- isMouseMove = false;
- editor.ui._actualFrameWidth = scalelayer.offsetWidth - 2;
- editorHolder.style.width = editor.ui._actualFrameWidth + "px";
- editor.setHeight(
- scalelayer.offsetHeight -
- bottombar.offsetHeight -
- toolbarBox.offsetHeight -
- 2,
- true
- );
- }
- if (scalelayer) {
- scalelayer.style.display = "none";
- }
- clearSelection();
- domUtils.un(doc, "mousemove", move);
- domUtils.un(editorDocument, "mouseup", up);
- domUtils.un(doc, "mouseup", up);
- }
- function clearSelection() {
- if (browser.ie) doc.selection.clear();
- else window.getSelection().removeAllRanges();
- }
- this.enableScale = function() {
- //trace:2868
- if (editor.queryCommandState("source") == 1) return;
- scale.style.display = "";
- this.scaleEnabled = true;
- domUtils.on(scale, "mousedown", down);
- };
- this.disableScale = function() {
- scale.style.display = "none";
- this.scaleEnabled = false;
- domUtils.un(scale, "mousedown", down);
- };
- },
- isFullScreen: function() {
- return this._fullscreen;
- },
- postRender: function() {
- UIBase.prototype.postRender.call(this);
- for (var i = 0; i < this.toolbars.length; i++) {
- this.toolbars[i].postRender();
- }
- var me = this;
- var timerId,
- domUtils = baidu.editor.dom.domUtils,
- updateFullScreenTime = function() {
- clearTimeout(timerId);
- timerId = setTimeout(function() {
- me._updateFullScreen();
- });
- };
- domUtils.on(window, "resize", updateFullScreenTime);
- me.addListener("destroy", function() {
- domUtils.un(window, "resize", updateFullScreenTime);
- clearTimeout(timerId);
- });
- },
- showToolbarMsg: function(msg, flag) {
- this.getDom("toolbarmsg_label").innerHTML = msg;
- this.getDom("toolbarmsg").style.display = "";
- //
- if (!flag) {
- var w = this.getDom("upload_dialog");
- w.style.display = "none";
- }
- },
- hideToolbarMsg: function() {
- this.getDom("toolbarmsg").style.display = "none";
- },
- mapUrl: function(url) {
- return url
- ? url.replace("~/", this.editor.options.UEDITOR_HOME_URL || "")
- : "";
- },
- triggerLayout: function() {
- var dom = this.getDom();
- if (dom.style.zoom == "1") {
- dom.style.zoom = "100%";
- } else {
- dom.style.zoom = "1";
- }
- }
- };
- utils.inherits(EditorUI, baidu.editor.ui.UIBase);
- var instances = {};
- UE.ui.Editor = function(options) {
- var editor = new UE.Editor(options);
- editor.options.editor = editor;
- utils.loadFile(document, {
- href:
- editor.options.themePath + editor.options.theme + "/_css/ueditor.css",
- tag: "link",
- type: "text/css",
- rel: "stylesheet"
- });
- var oldRender = editor.render;
- editor.render = function(holder) {
- if (holder.constructor === String) {
- editor.key = holder;
- instances[holder] = editor;
- }
- utils.domReady(function() {
- editor.langIsReady
- ? renderUI()
- : editor.addListener("langReady", renderUI);
- function renderUI() {
- editor.setOpt({
- labelMap: editor.options.labelMap || editor.getLang("labelMap")
- });
- new EditorUI(editor.options);
- if (holder) {
- if (holder.constructor === String) {
- holder = document.getElementById(holder);
- }
- holder &&
- holder.getAttribute("name") &&
- (editor.options.textarea = holder.getAttribute("name"));
- if (holder && /script|textarea/gi.test(holder.tagName)) {
- var newDiv = document.createElement("div");
- holder.parentNode.insertBefore(newDiv, holder);
- var cont = holder.value || holder.innerHTML;
- editor.options.initialContent = /^[\t\r\n ]*$/.test(cont)
- ? editor.options.initialContent
- : cont
- .replace(/>[\n\r\t]+([ ]{4})+/g, ">")
- .replace(/[\n\r\t]+([ ]{4})+</g, "<")
- .replace(/>[\n\r\t]+</g, "><");
- holder.className && (newDiv.className = holder.className);
- holder.style.cssText &&
- (newDiv.style.cssText = holder.style.cssText);
- if (/textarea/i.test(holder.tagName)) {
- editor.textarea = holder;
- editor.textarea.style.display = "none";
- } else {
- holder.parentNode.removeChild(holder);
- }
- if (holder.id) {
- newDiv.id = holder.id;
- domUtils.removeAttributes(holder, "id");
- }
- holder = newDiv;
- holder.innerHTML = "";
- }
- }
- domUtils.addClass(holder, "edui-" + editor.options.theme);
- editor.ui.render(holder);
- var opt = editor.options;
- //给实例添加一个编辑器的容器引用
- editor.container = editor.ui.getDom();
- var parents = domUtils.findParents(holder, true);
- var displays = [];
- for (var i = 0, ci; (ci = parents[i]); i++) {
- displays[i] = ci.style.display;
- ci.style.display = "block";
- }
- if (opt.initialFrameWidth) {
- opt.minFrameWidth = opt.initialFrameWidth;
- } else {
- opt.minFrameWidth = opt.initialFrameWidth = holder.offsetWidth;
- var styleWidth = holder.style.width;
- if (/%$/.test(styleWidth)) {
- opt.initialFrameWidth = styleWidth;
- }
- }
- if (opt.initialFrameHeight) {
- opt.minFrameHeight = opt.initialFrameHeight;
- } else {
- opt.initialFrameHeight = opt.minFrameHeight = holder.offsetHeight;
- }
- for (var i = 0, ci; (ci = parents[i]); i++) {
- ci.style.display = displays[i];
- }
- //编辑器最外容器设置了高度,会导致,编辑器不占位
- //todo 先去掉,没有找到原因
- if (holder.style.height) {
- holder.style.height = "";
- }
- editor.container.style.width =
- opt.initialFrameWidth +
- (/%$/.test(opt.initialFrameWidth) ? "" : "px");
- editor.container.style.zIndex = opt.zIndex;
- oldRender.call(editor, editor.ui.getDom("iframeholder"));
- editor.fireEvent("afteruiready");
- }
- });
- };
- return editor;
- };
- /**
- * @file
- * @name UE
- * @short UE
- * @desc UEditor的顶部命名空间
- */
- /**
- * @name getEditor
- * @since 1.2.4+
- * @grammar UE.getEditor(id,[opt]) => Editor实例
- * @desc 提供一个全局的方法得到编辑器实例
- *
- * * ''id'' 放置编辑器的容器id, 如果容器下的编辑器已经存在,就直接返回
- * * ''opt'' 编辑器的可选参数
- * @example
- * UE.getEditor('containerId',{onready:function(){//创建一个编辑器实例
- * this.setContent('hello')
- * }});
- * UE.getEditor('containerId'); //返回刚创建的实例
- *
- */
- UE.getEditor = function(id, opt) {
- var editor = instances[id];
- if (!editor) {
- editor = instances[id] = new UE.ui.Editor(opt);
- editor.render(id);
- }
- return editor;
- };
- UE.delEditor = function(id) {
- var editor;
- if ((editor = instances[id])) {
- editor.key && editor.destroy();
- delete instances[id];
- }
- };
- UE.registerUI = function(uiName, fn, index, editorId) {
- utils.each(uiName.split(/\s+/), function(name) {
- baidu.editor.ui[name] = {
- id: editorId,
- execFn: fn,
- index: index
- };
- });
- };
- })();
|