attachbox.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. TrexConfig.addSidebar('attachbox', {
  2. show: _FALSE,
  3. destroy: _FALSE
  4. });
  5. /**
  6. * Trex.AttachBox
  7. * Trex.Attachment instance들이 저장되는 class
  8. * @class
  9. * @extends Trex.EntryBox
  10. */
  11. Trex.AttachBox = Trex.Class.create({
  12. /** @ignore */
  13. $extend: Trex.EntryBox,
  14. isChecked: _FALSE,
  15. initialize: function() {
  16. },
  17. checkAvailableCapacity: function() { //Before Popup
  18. return _TRUE;
  19. },
  20. getAvailableCapacity: function() { //Within Flash
  21. return _TRUE;
  22. },
  23. checkInsertableSize: function() { //Before Attach
  24. return _TRUE;
  25. }
  26. });
  27. Trex.install("editor.getAttachBox & sidebar.getAttachments",
  28. function(editor, toolbar, sidebar, canvas, config){
  29. var _attachBox = new Trex.AttachBox(config, editor);
  30. sidebar.entryboxRegistry['attachbox'] = _attachBox;
  31. editor.getAttachBox = function() {
  32. return _attachBox;
  33. };
  34. sidebar.getAttachments = _attachBox.getEntries.bind(_attachBox);
  35. }
  36. );
  37. Trex.register("filter > attachers",
  38. function(editor) {
  39. var _attachBox = editor.getAttachBox();
  40. var _docparser = editor.getDocParser();
  41. _docparser.registerFilter(
  42. 'filter/attachments', {
  43. 'text@load': function(contents){
  44. var entries = _attachBox.datalist;
  45. entries.each(function(entry) {
  46. if (entry.loadDataByContent) {
  47. entry.loadDataByContent('text@load', contents);
  48. }
  49. contents = entry.getChangedContent(contents, entry.regLoad, "");
  50. });
  51. return contents;
  52. },
  53. 'source@load': function(contents){
  54. var entries = _attachBox.datalist;
  55. entries.each(function(entry) {
  56. if (entry.loadDataByContent) {
  57. entry.loadDataByContent('source@load', contents);
  58. }
  59. contents = entry.getChangedContent(contents, entry.regLoad, entry.dispText);
  60. });
  61. return contents;
  62. },
  63. 'html@load': function(contents){
  64. var entries = _attachBox.datalist;
  65. entries.each(function(entry) {
  66. if (entry.loadDataByContent) {
  67. entry.loadDataByContent('html@load', contents);
  68. }
  69. contents = entry.getChangedContent(contents, entry.regLoad, entry.dispHtml);
  70. });
  71. return contents;
  72. },
  73. 'text4save': function(contents){
  74. var entries = _attachBox.datalist;
  75. entries.each(function(entry) {
  76. if (entry.loadDataByContent) {
  77. entry.loadDataByContent('text4save', contents);
  78. }
  79. contents = entry.getChangedContent(contents, entry.regText, "");
  80. });
  81. return contents;
  82. },
  83. 'source4save': function(contents){
  84. var entries = _attachBox.datalist;
  85. entries.each(function(entry) {
  86. if (entry.loadDataByContent) {
  87. entry.loadDataByContent('source4save', contents);
  88. }
  89. contents = entry.getChangedContent(contents, entry.regText, entry.saveHtml, ["id", "class"]);
  90. });
  91. return contents;
  92. },
  93. 'html4save': function(contents){
  94. var entries = _attachBox.datalist;
  95. entries.each(function(entry) {
  96. if (entry.loadDataByContent) {
  97. entry.loadDataByContent('html4save', contents);
  98. }
  99. contents = entry.getChangedContent(contents, entry.regHtml, entry.saveHtml, ["id", "class"]);
  100. });
  101. return contents;
  102. },
  103. 'text2source': function(contents){
  104. return contents;
  105. },
  106. 'text2html': function(contents){
  107. return contents;
  108. },
  109. 'source2text': function(contents){
  110. var entries = _attachBox.datalist;
  111. entries.each(function(entry) {
  112. if (entry.loadDataByContent) {
  113. entry.loadDataByContent('source2text', contents);
  114. }
  115. contents = entry.getChangedContent(contents, entry.regText, "");
  116. });
  117. return contents;
  118. },
  119. 'source2html': function(contents){
  120. var entries = _attachBox.datalist;
  121. entries.each(function(entry) {
  122. if (entry.loadDataByContent) {
  123. entry.loadDataByContent('source2html', contents);
  124. }
  125. contents = entry.getChangedContent(contents, entry.regText, entry.dispHtml);
  126. });
  127. return contents;
  128. },
  129. 'html2text': function(contents){
  130. var entries = _attachBox.datalist;
  131. entries.each(function(entry) {
  132. if (entry.loadDataByContent) {
  133. entry.loadDataByContent('html2text', contents);
  134. }
  135. contents = entry.getChangedContent(contents, entry.regHtml, "");
  136. });
  137. return contents;
  138. },
  139. 'html2source': function(contents){
  140. var entries = _attachBox.datalist;
  141. entries.each(function(entry) {
  142. if (entry.loadDataByContent) {
  143. entry.loadDataByContent('html2source', contents);
  144. }
  145. contents = entry.getChangedContent(contents, entry.regHtml, entry.dispText, ["id", "class"]);
  146. });
  147. return contents;
  148. }
  149. }
  150. );
  151. }
  152. );
  153. Trex.module("push history @when entrybox has changes",
  154. function(editor, toolbar, sidebar, canvas) {
  155. var _attachBox = editor.getAttachBox();
  156. _attachBox.observeJob(Trex.Ev.__ENTRYBOX_ENTRY_REMOVED, function(entry) {
  157. canvas.history.saveHistory(
  158. { deleted: _FALSE },
  159. { deleted: _TRUE },
  160. function(data) {
  161. entry.deletedMark = data.deleted;
  162. _attachBox.fireJobs(Trex.Ev.__ENTRYBOX_ENTRY_REFRESH, entry);
  163. }
  164. );
  165. });
  166. /*
  167. * IE에서는 canvas.execute 가 setTimeout 을 통하여 실행이 되기 때문에
  168. * 이하 실행되어야 하는 로직과 순서가 뒤바뀌는 문제가 있다.
  169. * saveHistory, injectHistory 와 같이 쌍으로 실행이 되며,
  170. * 순서 보장이 중요한 작업의 경우에 이를 맞춰주기 위해 뒤에 실행되어야 하는 로직도
  171. * setTimeout 을 이용한다.
  172. */
  173. var runOrRunLaterIfIE = function(fn) {
  174. if ($tx.msie) {
  175. setTimeout(function() {
  176. fn();
  177. }, 0);
  178. } else {
  179. fn();
  180. }
  181. };
  182. _attachBox.observeJob(Trex.Ev.__ENTRYBOX_ENTRY_ADDED, function(entry) {
  183. runOrRunLaterIfIE(function() {
  184. canvas.history.injectHistory(
  185. { deleted: _TRUE },
  186. { deleted: _FALSE },
  187. function(data) {
  188. entry.deletedMark = data.deleted;
  189. _attachBox.fireJobs(Trex.Ev.__ENTRYBOX_ENTRY_REFRESH, entry);
  190. }
  191. );
  192. });
  193. });
  194. }
  195. );