| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443 |
- /**
- * @fileoverview
- * DaumEitor의 Entrypoint역할을 하는 source로 Trex.Editor, Editor 를 포함
- */
- /**
- * 실제 Editor Implementation, 하지만 Editor 생성 시에는 Class Editor를 사용한다
- *
- * {@link Editor}
- * @class
- * @param {Object} config
- */
- Trex.Editor = Trex.Class.create( /** @lends Trex.Editor.prototype */{
- /** @ignore */
- $mixins: [Trex.I.JobObservable, Trex.I.KeyObservable],
- toolbar: _NULL,
- sidebar: _NULL,
- canvas: _NULL,
- config: _NULL,
- initialConfig: _NULL,
- initialize: function(config) {
- this.initialConfig = config;
- var _editor = this, _config = this.config = TrexConfig.setup(config);
- var _canvas = this.canvas = new Trex.Canvas(_editor, _config);
- var _toolbar = this.toolbar = new Trex.Toolbar(_editor, _config);
- var _sidebar = this.sidebar = new Trex.Sidebar(_editor, _config);
- Trex.invokeInstallation(_editor, _toolbar, _sidebar, _canvas, _config);
-
- /* common key event */
- var _evConfig = _config.events;
- var _keyDownHandler = function(ev) {
- if (_evConfig.useHotKey) {
- _editor.fireKeys(ev);
- }
- };
- $tx.observe(_DOC, "keydown", _keyDownHandler.bindAsEventListener(this), _FALSE);
- _canvas.observeJob(Trex.Ev.__IFRAME_LOAD_COMPLETE, function() {
- //for hanmail iframe load log.
- var iframeLoadCompleteTime = new Date().getTime();
- var secTime = Math.round((iframeLoadCompleteTime - Editor.initStartTime) / 100) / 10;
- _editor.fireJobs(Trex.Ev.__IFRAME_LOADING_TIME, secTime);//TODO unresolved
-
- var _initializedId = _editor.getInitializedId();
- var _elLoading = $tx("tx_loading" + _initializedId);
- if (!_elLoading) {
- return;
- }
- if (_canvas.mode != Trex.Canvas.__WYSIWYG_MODE) {
- _canvas.fireJobs(Trex.Ev.__CANVAS_MODE_INITIALIZE, Trex.Canvas.__WYSIWYG_MODE, _canvas.mode);
- }
- $tx.hide(_elLoading);
- });
- Trex.invokeRegisters(_editor, _toolbar, _sidebar, _canvas, _config);
- Trex.invokeModules(_editor, _toolbar, _sidebar, _canvas, _config);
- },
- /**
- * Get toolbar instance
- * @see Trex.Toolbar
- */
- getToolbar: function() {
- return this.toolbar;
- },
- /**
- * Get sidebar instance
- * @see Trex.Sidebar
- */
- getSidebar: function() {
- return this.sidebar;
- },
- /**
- * Get canvas instance
- * @see Trex.Canvas
- */
- getCanvas: function() {
- return this.canvas;
- },
- getUsedWebfont: function() {
- return this.canvas.getUsedWebfont();
- },
- /**
- * Get config instance
- */
- getConfig: function() {
- return this.config;
- },
- getInitialConfig: function () {
- return this.initialConfig;
- },
- getParam: function(name) {
- var _params = {}, _config = this.config;
- _config.params.each(function(name) {
- if (_config[name]) {
- _params[name] = _config[name];
- }
- });
- return _params[name];
- },
- getWrapper: function() {
- if (!this.initialConfig.wrapper) {
- throw new Error('`wrapper` config variable should be provided');
- }
- return $must(this.initialConfig.wrapper);
- },
- getInitializedId: function() {
- return this.initialConfig.initializedId || "";
- },
- saveEditor: function() {
- this.setDisableUnloadHandler();
- this.getSaver().submit();
- },
- loadEditor: function(data) {
- this.getSaver().load(data);
- },
- /**
- * Editor에서 작성된 저장하기 위해 parsing된 글의 내용을 가져온다.
- * @see Trex.Canvas#getContent
- */
- getContent: function() {
- return this.getSaver().getContent();
- },
- /**
- * Editor에 첨부된 첨부데이터 리스트를 가져온다.
- * * @see Trex.Sidebar#getAttachments
- */
- getAttachments: function(type, all) {
- return this.getSaver().getAttachments(type, all);
- },
- /**
- * Editor에 삽입된 Embed데이터 리스트를 가져온다.
- * * @see Trex.Sidebar#getEmbeddedData
- */
- getEmbeddedData: function(type) {
- return this.getSaver().getEmbeddedData(type);
- },
- /**
- * Editor에 첨부된 정보첨부 리스트를 가져온다.
- * * @see Trex.Sidebar#getResults
- */
- getResults: function(type) {
- return this.getSaver().getResults(type);
- },
- /**
- * autosaver의 현재 사용중인 key를 가져온다.
- * * @see Trex.Autosaver#getCurSeq
- */
- getAutosaveSeq: function(){
- return (this.getAutoSaver && this.getAutoSaver()) ? this.getAutoSaver().getCurSeq() : "0";
- }
- });
- // Binds helper functions for Editor
- (function() {
- /**
- * Editor
- *
- * @example
- * new Editor({
- * txService: 'sampleService',
- * txHost: 'sample.daum.net',
- * txPath: 'sampleService',
- * initializedId: 'stringValue',
- * form: 'tx_editor_form'+"$!initializedId"
- * });
- *
- * @extends Trex.Editor
- * @class
- * @param {Object} config
- */
- _WIN.Editor = Trex.Class.create({
- /** @ignore */
- $const: {
- __ACTIVE: _FALSE,
- __PANEL_LOADED: _FALSE,
- __EDITOR_LOADED: _FALSE,
- __MULTI_LIST: [],
- __SELECTED_INDEX: 0
- },
- _initEditor: function (_editor, config) {
- Editor.__EDITOR_LOADED = _FALSE;
- Editor.__PANEL_LOADED = _FALSE;
- _editor = new Trex.Editor(config);
- var _initializedId = _editor.getInitializedId();
- if (_initializedId != _NULL) {
- var idx = _initializedId == "" ? 0 : _initializedId;
- Editor.__MULTI_LIST[idx] = _editor;
- Editor.__SELECTED_INDEX = idx;
- }
- Object.extend(Editor, _editor);
- Editor.__EDITOR_LOADED = _TRUE;
- Editor.__ACTIVE = _TRUE;
- },
- initialize: function(config) {
- //for hanmail iframe load log.
- if (Trex.hmailLogging) {
- Trex.hmailLogging(config);
- }
- Editor.initStartTime = new Date().getTime();
-
- var _editor = null;
- if (_WIN['DEBUG']) {
- this._initEditor(_editor, config);
- } else {
- try {
- this._initEditor(_editor, config);
- } catch (e) {
- if (_editor) {
- _editor.fireJobs(Trex.Ev.__RUNTIME_EXCEPTION, e);
- } else {
- throw 'failed to initialize editor. caused by ' + e;
- }
- throw e;
- }
- }
- }
- });
- /**
- * 글을 수정할 때 저장된 글을 불러온다.
- * @param {Object} data - 에디트에 로드할 내용/첨부파일 값
- * @example
- * Editor.modify({
- * content:'<p>content example</p>' or $tx('tx_content')
- * attachments: [
- * {attacher: 'image',
- * data: {
- * thumburl: "http://cfile163.uf.daum.net/P150x100/0126A20248BFAFF72D2229",
- * imageurl: "http://cfile163.uf.daum.net/image/0126A20248BFAFF72D2229",
- * originalurl: "http://cfile163.uf.daum.net/original/0126A20248BFAFF72D2229",
- * exifurl: "http://cfile163.uf.daum.net/info/0126A20248BFAFF72D2229",
- * attachurl: "http://cfile163.uf.daum.net/attach/0126A20248BFAFF72D2229",
- * filename: "Tree.jpg",
- * filesize: "155833"
- * }
- * }]
- * });
- */
- Editor.modify = function(data) {
- if (Editor.__PANEL_LOADED && Editor.__EDITOR_LOADED) {
- if (this.loadEditor) {
- this.loadEditor(data);
- }
- } else {
- setTimeout(this.modify.bind(this, data), 10);
- }
- };
- /**
- * Editor 생성 후 자동저장된 Content를 불러올 경우 사용한다.
- * @param {Object} data
- * @example
- * Editor.restore(
- * {content: 'string',
- * attachments: [{Object}]});
- */
- Editor.restore = function(data) {
- if (Editor.__PANEL_LOADED && Editor.__EDITOR_LOADED) {
- if(this.getAutoSaver && this.getAutoSaver()) {
- this.getAutoSaver().load(data);
- }
- } else {
- setTimeout(this.restore.bind(this, data), 10);
- }
- };
- /**
- * 글 저장시 사용한다.
- * @example
- * <a onclick="Editor.save();return _FALSE;" href="#">save</a>
- */
- Editor.save = function() {
- if (Editor.__PANEL_LOADED && Editor.__EDITOR_LOADED) {
- if (this.saveEditor) {
- this.saveEditor();
- }
- } else {
- setTimeout(this.saveEditor.bind(this), 10);
- }
- return _FALSE;
- };
- /**
- * Canvas의 최근 focus가 있던 영역에 focus를 준다.
- * 예를들어, 이미지를 첨부하는 팝업창에서 작업을 완료 후 팝업창을 닫고 에디터에 최근의 focus를 준다.
- */
- Editor.focus = function() {
- if (Editor.__PANEL_LOADED && Editor.__EDITOR_LOADED) {
- var _canvas = this.getCanvas();
- if (_canvas) {
- _canvas.focus();
- }
- } else {
- setTimeout(this.focus.bind(this), 10);
- }
- return _FALSE;
- };
- /**
- * Canvas의 맨 위에 focus를 준다.
- * @see Canvas#focusOnTop
- */
- Editor.focusOnTop = function() {
- if (Editor.__PANEL_LOADED && Editor.__EDITOR_LOADED) {
- var _canvas = this.getCanvas();
- if (_canvas) {
- _canvas.focusOnTop();
- }
- } else {
- setTimeout(this.focusOnTop.bind(this), 10);
- }
- return _FALSE;
- };
- /**
- * Canvas의 맨 아래에 focus를 준다.
- * @see Canvas#focusOnBottom
- */
- Editor.focusOnBottom = function() {
- if (Editor.__PANEL_LOADED && Editor.__EDITOR_LOADED) {
- var _canvas = this.getCanvas();
- if (_canvas) {
- _canvas.focusOnBottom();
- }
- } else {
- setTimeout(this.focusOnBottom.bind(this), 10);
- }
- return _FALSE;
- };
- /**
- * Editor가 있는 page를 나갈 경우 beforeunload eventlistener를 실행 시키지 도록 설정한다.
- * 예를들면, Editor에서 글을 작성 중에 새로고침했을 경우 경고창을 안뜨게 한다.
- */
- Editor.permitUnload = function() {
- if (Editor.__PANEL_LOADED && Editor.__EDITOR_LOADED) {
- this.setDisableUnloadHandler();
- } else {
- setTimeout(this.permitUnload.bind(this), 500);
- }
- };
- /**
- * Editor와 Iframe이 정상적으로 생성 된후 argument로 지정된 function을 실행 시킨다.
- * @param {Function} fn
- * @example
- * Editor.onPanelLoadComplete(function(){
- * Editor.focus();
- * });
- */
- Editor.onPanelLoadComplete = function(fn) {
- if (Editor.__PANEL_LOADED == _TRUE && Editor.__EDITOR_LOADED == _TRUE) {
- if (fn) {
- fn();
- }
- } else {
- setTimeout(Editor.onPanelLoadComplete.bind(Editor, fn), 500);
- }
- };
- /**
- * 동일한 Page에 Editor가 여러개 생성됬을 경우, 다른 Editor를 지정한다.
- * @param {Object} toIndex
- */
- Editor.switchEditor = function (toIndex) {
- Editor.__SELECTED_INDEX = toIndex;
- Object.extend(Editor, Editor.__MULTI_LIST[toIndex]);
- };
- /* 에디터가 여러개 있을 때 async로 불러오는 모듈에서 호출하는 에디터를 찾기 위함. */
- Editor.editorForAsyncLoad = Editor;
- /* 에디터가 여러개 있을 때 모든 에디터에 적용하기 위함 */
- Editor.forEachEditor = function (fn) {
- var indexName, list= Editor.__MULTI_LIST;
- for (indexName in list) {
- if (list.hasOwnProperty(indexName)) {
- fn(list[indexName]);
- }
- }
- };
- /**
- * focus on form
- * @param {String} name - focus를 줄 form의 name 속성 값
- * @example
- * Editor.focusOnForm("tx_article_title");
- */
- Editor.focusOnForm = function(name) {
- if (Editor.__PANEL_LOADED && Editor.__EDITOR_LOADED) {
- _WIN.focus();
- var _form = Editor.getForm();
- if (_form.getElementByName(name)) {
- _form.getElementByName(name).focus();
- }
- } else {
- setTimeout(Editor.focusOnForm.bind(Editor, name), 500);
- }
- return _FALSE;
- };
- /**
- * 파일함에서 export된 데이터를 에디터에 삽입한다. attachment만 삽입된다.
- * @param {Object} data - 에디트에 로드할 내용/첨부파일 값
- * @example
- * Editor.fromHdrive(
- [{attacher: 'image',
- * data: {
- * thumburl: "http://cfile163.uf.daum.net/P150x100/0126A20248BFAFF72D2229",
- * imageurl: "http://cfile163.uf.daum.net/image/0126A20248BFAFF72D2229",
- * originalurl: "http://cfile163.uf.daum.net/original/0126A20248BFAFF72D2229",
- * exifurl: "http://cfile163.uf.daum.net/info/0126A20248BFAFF72D2229",
- * attachurl: "http://cfile163.uf.daum.net/attach/0126A20248BFAFF72D2229",
- * filename: "Tree.jpg",
- * filesize: "155833"
- * }
- * }]
- */
- Editor.fromHdrive = function(data) {
- var attachments = [];
- for (var i = 0; i < data.length; i++) {
- attachments.push(data[i]);
- }
- var modifyData = {
- content: "",
- attachments: attachments
- };
- if (Editor.__PANEL_LOADED && Editor.__EDITOR_LOADED) {
- if (this.loadEditor) {
- this.loadEditor(modifyData);
- var _entries = Editor.getAttachBox().datalist;
- for (var j = 0; j < _entries.length; j++) {
- _entries[j].execAppend();
- }
- }
- } else {
- setTimeout(this.fromHdrive.bind(this, data), 10);
- }
- };
- Editor.refreshSize = function () {
- this.canvas.fireJobs(Trex.Ev.__CANVAS_WRAP_WIDTH_CHANGE);
- //TODO.azki height..???
- };
- /**
- * <b>deprecated</b> - use Editor.switchEditor, 동일한 Page에 Editor가 여러개 생성됬을 경우, 다른 Editor를 지정한다.
- * @function
- * @deprecated since ver 1.2, use Editor.switchEditor
- */
- Editor.prototype.switchEditor = Editor.switchEditor;
- /**
- * <b>deprecated</b> - use Editor.focusOnForm, focus on form
- * @function
- * @deprecated since ver 1.2, Use Editor.focusOnForm
- */
- Editor.prototype.focusOnForm = Editor.focusOnForm;
- })();
|