/** * @filewoverview * attacher.js - 첨부 관련 source로 이 소스에서 존재하는 Attacher들을 직접 생성한다. * Editor가 생성될때 initialize된다. */ TrexMessage.addMsg({ '@attacher.can.modify.alert': "기존에 등록된 #{title}을(를) 수정할 수 있는 화면으로 이동합니다.", '@attacher.can.modify.confirm': "#{title}은(는) 하나만 등록이 가능합니다.\n다시 올리시면 기존의 #{title}이(가) 삭제됩니다. 계속하시겠습니까?", '@attacher.insert.alert': "에디터 상태에서만 삽입할 수 있습니다.", '@attacher.capacity.alert': "용량을 초과하였습니다.", '@attacher.size.alert': "용량을 초과하여 더이상 등록할 수 없습니다." }); Trex.install("sidebar.getAttacher & sidebar.getUploadAdaptor", function(editor, toolbar, sidebar) { var _attachers = sidebar.attachers = {}; /** * memberOf Trex.Sidebar.prototype * @param {Object} name */ sidebar.getAttacher = function(name) { if(_attachers[name] != _NULL) { return _attachers[name]; } else if(arguments.length == 0){ return _attachers; }else{ return _NULL; } }; } ); Trex.register("new attachers", function(editor, toolbar, sidebar, canvas, config) { var _attachBox = editor.getAttachBox(); var _attachers = sidebar.attachers; for(var i in Trex.Attacher) { var _name = Trex.Attacher[i]['__Identity']; if(_name){ _attachers[_name] = new Trex.Attacher[i](editor, _attachBox, config); } } if (_attachers["file"]) { sidebar.getUploadAdaptor = function(){ return _attachers["file"].getAdaptor(); }; } } ); /** * Class Trex.Attacher * * @abstract * @class * @extends Trex.Actor * @param {Object} editor * @param {Object} entryBox * @param {Object} config */ Trex.Attacher = Trex.Class.draft(/** @lends Trex.Attacher.prototype */{ /** @ignore */ $extend: Trex.Actor, canModified: _FALSE, canResized: _FALSE, initialize: function(editor, entryBox, config) { this.editor = editor; this.canvas = editor.getCanvas(); this.entryBox = entryBox; var _config = this.config = TrexConfig.getAttacher(this.constructor.__Identity, config); if(config.pvpage && !!_config.usepvpage) { this.pvUrl = TrexConfig.getUrl(config.pvpage, { "pvname": this.name }); } this.boxonly = ((_config.boxonly != _NULL)? _config.boxonly: _FALSE); this.isMultiple = ((_config.multiple != _NULL)? _config.multiple: _FALSE); this.isCheckSize = ((_config.checksize != _NULL)? _config.checksize: _FALSE); this.wysiwygonly = ((_config.wysiwygonly != _NULL)? _config.wysiwygonly: _TRUE); this.pastescope = _config.pastescope; if (this.oninitialized) { this.oninitialized(config); } this.attachHandler = this.attachHandler.bind(this); }, /** * Attacher를 실행, 첨부를 하기 위한 popup window를 띄워주거나 필요한 action을 수행한다. * @param {String} param - 팝업을 띄울때 추가할 파라미터 문자열 * @function */ execute: function(param) { if(this.wysiwygonly && !this.canvas.isWYSIWYG()) { alert(TXMSG("@attacher.insert.alert")); return; } if(this.isCheckSize && !this.entryBox.checkAvailableCapacity()) { alert(TXMSG("@attacher.capacity.alert")); return; } if(!this.checkInsertable()) { if(this.canModified) { var _jstObj = new Template( TXMSG("@attacher.can.modify.alert") ); alert( _jstObj.evaluate( {title : this.title})); } else { var _jstObj = new Template( TXMSG("@attacher.can.modify.confirm") ); if(!confirm(_jstObj.evaluate({ title : this.title }))) { return; } } } if(this.clickHandler) { this.clickHandler(); } else { try { var _url = this.config.popPageUrl; if(param) { _url = _url + ((_url.indexOf("?") > -1) ? "&" : "?") + param; } var isDocumentDomainDeclaredExplicitly = (document.location.hostname != document.domain); if (isDocumentDomainDeclaredExplicitly) { _url = _url + ((_url.indexOf("?") > -1) ? "&" : "?") + "xssDomain=" + document.domain; } _url = (this.pvUrl? this.pvUrl + ((this.pvUrl.indexOf("?") > -1) ? "&" : "?") + "u="+escape(_url): _url); var win = _WIN.open(_url, "at" + this.name, this.config.features); win.focus(); } catch (e) {} } }, /** * Argument의 data를 이용해서 editor에 첨부하며, Attacher type에 때라 data의 format은 다르다. * @function * @param {Object} data * @param {Object} attachmentType - optional */ attachHandler: function(data, attachmentType) { if(this.checkInsertable()) { if(this.isCheckSize && !this.entryBox.checkInsertableSize(data.filesize)) { alert(TXMSG("@attacher.size.alert")); return; } this.execAttach(data, attachmentType); } else { this.execReattach(data, attachmentType); } }, createEntry: function(data, type) { return this.createAttachment(data, type); }, createAttachment: function(data, type) { var _attachmentType = this.constructor.__Identity; if(type){ _attachmentType = type; } return new Trex.Attachment[_attachmentType.capitalize()](this, data); }, checkInsertable: function() { if (this.isMultiple) { return _TRUE; } var list = this.getDatalist().findAll(function(entry) { return entry.deletedMark != _TRUE; }); return list.length === 0; } });