filecapacity.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. Trex.install("attachbox.onFileCapacityInitialized @if sidebar.capacity.show = true",
  2. function(editor, toolbar, sidebar, canvas, config){
  3. var attachbox = editor.getAttachBox();
  4. if (config.sidebar.capacity.show === _TRUE) {
  5. Object.extend(attachbox, Trex.I.FileCapacity);
  6. attachbox.onFileCapacityInitialized(config, canvas);
  7. }
  8. }
  9. );
  10. Trex.module("attachbox.updateCapacity on Trex.Ev.__ATTACHBOX_SHOW",
  11. function(editor/*, toolbar, sidebar, canvas, config*/) {
  12. var attachbox = editor.getAttachBox();
  13. attachbox.observeJob(Trex.Ev.__ATTACHBOX_SHOW, function() {
  14. attachbox.updateCapacity();
  15. });
  16. }
  17. );
  18. TrexConfig.addSidebar('capacity',
  19. {
  20. show: _TRUE,
  21. maximum: 3145728, //3M <= 1024
  22. filemaximum: _NULL,
  23. filter: {
  24. use: '', //sound,movie
  25. sound: {
  26. title: 'sound file',
  27. maximum: 3145728,
  28. extensions: ",mp3,wav,ogg,wma,mp4,ape,wmv,asf,ra,ram,"
  29. },
  30. movie: {
  31. title: 'movie file',
  32. maximum: 3145728,
  33. extensions: ",wmv,mpg,avi,"
  34. }
  35. }
  36. }
  37. );
  38. Trex.I.FileCapacity = {
  39. onFileCapacityInitialized: function(config, canvas) {
  40. var _initializedId = (config.initializedId) ? config.initializedId : "";
  41. var _fileConfig = config.sidebar.capacity;
  42. //#FTDUEDTR-1260
  43. //아래 부분이 소스상 전혀 사용되는 부분이 없어서 일단 주석처리하였습니다.
  44. //this.elList = $must("tx_attach_list" + _initializedId, "Trex.I.FileCapacity");
  45. _fileConfig.uploaded = 0; //Initialize capacity
  46. _fileConfig.available = _fileConfig.maximum; //Remaining capacity
  47. _fileConfig.uploadedFileNum = 0; //Uploaded file number.
  48. var _setCapacity = function(name, size) {
  49. size = parseInt(size, 10);
  50. if ( isNaN(size) || _fileConfig[name] == _UNDEFINED ){
  51. return _FALSE; // invalid setting
  52. }
  53. if( _fileConfig.group && name == 'available' ){
  54. _fileConfig[name] = Math.min(size, _fileConfig.maximum, _fileConfig.group.maximum - _fileConfig.group.used); //사용가능한 용량 - 그룹용량 포함
  55. } else {
  56. _fileConfig[name] = size;
  57. }
  58. return _fileConfig[name];
  59. };
  60. this.checkAvailableCapacity = function() { //Before Popup override
  61. return (_fileConfig.uploaded < _fileConfig.available);
  62. };
  63. this.checkInsertableSize = function(attachSize) { //Before Attach override
  64. return (parseInt(_fileConfig.uploaded, 10) + parseInt(attachSize, 10) <= parseInt(_fileConfig.available, 10));
  65. };
  66. /**
  67. * Gets capacity by attachment type
  68. * @memberOf Trex.AttachBox.prototype
  69. * @alias getCapacity
  70. * @param {Object} name
  71. */
  72. this.getCapacity = function(name) {
  73. return (_fileConfig[name] || 0);
  74. };
  75. /**
  76. * Change available capacity
  77. * @memberOf Trex.AttachBox.prototype
  78. * @alias changeAvailableCapacity
  79. * @param {Number} size
  80. */
  81. this.changeAvailableCapacity = function(size){
  82. if ( _setCapacity("available", size ) ){
  83. capacityUpdateEvent();
  84. return size;
  85. }
  86. return _FALSE;
  87. };
  88. /**
  89. * Change maximum capacity
  90. * @memberOf Trex.AttachBox.prototype
  91. * @alias changeMaximumCapacity
  92. * @param {Number} size
  93. */
  94. this.changeMaximumCapacity = function(size){
  95. if ( _setCapacity("maximum", size ) ){
  96. return size;
  97. }
  98. return _FALSE;
  99. };
  100. /**
  101. * Change one file maximum capacity
  102. * @memberOf Trex.AttachBox.prototype
  103. * @alias changeFileMaximumCapacity
  104. * @param {Number} size
  105. */
  106. this.changeFileMaximumCapacity = function(size){
  107. if ( _setCapacity("filemaximum", size ) ){
  108. return size;
  109. }
  110. return _FALSE;
  111. };
  112. this.updateCapacity = function() {
  113. capacityUpdateEvent();
  114. }
  115. /**
  116. * Resets uploaded file count & size
  117. *
  118. * @memberOf Trex.AttachBox.prototype
  119. * @alias empty
  120. */
  121. var _setAttachSize = function(fileSize) {
  122. var uploaded = _fileConfig.uploaded + fileSize.toNumber();
  123. if( uploaded < 0 ){
  124. uploaded = 0;
  125. }
  126. _fileConfig.uploaded = uploaded;
  127. };
  128. var decreaseCapacity = function(fileSize) {
  129. _setAttachSize(-1 * fileSize);
  130. _fileConfig.uploadedFileNum -= 1;
  131. };
  132. var increaseCapacity = function(fileSize){
  133. _setAttachSize(fileSize);
  134. _fileConfig.uploadedFileNum += 1;
  135. };
  136. var _filters = {};
  137. if(_fileConfig.filter.use.length > 0) {
  138. _fileConfig.filter.use.split(",").each(function(filterName) {
  139. if(_fileConfig.filter[filterName]) {
  140. _filters[filterName] = Object.extend({}, _fileConfig.filter[filterName]);
  141. }
  142. });
  143. }
  144. this.getFiltersNameByExt = function(ext) {
  145. var _filterNames = [];
  146. for(var _filterName in _filters) {
  147. if(_filters[_filterName].extensions.indexOf("," + ext.toLowerCase() + ",") > -1) {
  148. _filterNames.push(_filterName);
  149. }
  150. }
  151. return _filterNames;
  152. };
  153. this.getFilterExtensions = function(filterName) {
  154. if (_filters[filterName]) {
  155. return _filters[filterName].extensions;
  156. }else {
  157. return _NULL;
  158. }
  159. };
  160. this.getFilterMaximum = function(filterName) {
  161. if (_filters[filterName]) {
  162. return _filters[filterName].maximum;
  163. }else {
  164. return _NULL;
  165. }
  166. };
  167. this.getUploadedSizeByFilter = function(filterName) {
  168. var _uploadedSize = 0;
  169. var _extensions = _filters[filterName].extensions;
  170. this.datalist.each(function(entry) {
  171. if (entry.data && entry.data.filename) {
  172. var _ext = entry.data.filename.split(".").pop().toLowerCase();
  173. if (_extensions.indexOf("," + _ext + ",") > -1) {
  174. _uploadedSize += entry.data.filesize;
  175. }
  176. }
  177. });
  178. return _uploadedSize;
  179. };
  180. //그룹용량사용
  181. if(_fileConfig.group) {
  182. //사용가능한 용량 - 그룹용량 포함
  183. _setCapacity("available", Math.min(_fileConfig.maximum, _fileConfig.group.maximum - _fileConfig.group.used) );
  184. }
  185. this.getGroupCapacity = function(name){
  186. return ((_fileConfig.group)? (_fileConfig.group[name] || 0): 0);
  187. };
  188. this.observeJob(Trex.Ev.__ENTRYBOX_ENTRY_ADDED, function(entry){
  189. if(entry.actor.isCheckSize) {
  190. increaseCapacity(entry.data.filesize || 0);
  191. capacityUpdateEvent();
  192. }
  193. });
  194. this.observeJob(Trex.Ev.__ENTRYBOX_ENTRY_REMOVED, function(entry){
  195. if(entry.actor.isCheckSize) {
  196. decreaseCapacity(entry.data.filesize || 0);
  197. capacityUpdateEvent();
  198. }
  199. });
  200. this.observeJob(Trex.Ev.__ENTRYBOX_ALL_ENTRY_REMOVED, function() {
  201. _fileConfig.uploaded = 0;
  202. _fileConfig.uploadedFileNum = 0;
  203. capacityUpdateEvent();
  204. });
  205. this.observeJob(Trex.Ev.__ENTRYBOX_ENTRY_REFRESH, function(entry) {
  206. if (!entry.actor.isCheckSize) {
  207. return;
  208. }
  209. var size = entry.data.filesize || 0;
  210. if (entry.deletedMark) {
  211. decreaseCapacity(size);
  212. } else {
  213. increaseCapacity(size);
  214. }
  215. capacityUpdateEvent();
  216. });
  217. var self = this;
  218. var capacityUpdateEvent = function(){
  219. // 필요한 정보만 넘겨 줘야할까? _fileConfig를 그냥 넘겨도 될까??
  220. var senddata = {
  221. uploaded: _fileConfig.uploaded,
  222. available: _fileConfig.available,
  223. maximum: _fileConfig.maximum,
  224. uploadedFileNum: _fileConfig.uploadedFileNum,
  225. group: _fileConfig.group
  226. };
  227. self.fireJobs(Trex.Ev.__ENTRYBOX_CAPACITY_UPDATE, senddata);
  228. };
  229. }
  230. };