application.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. $.QueryString = (function(a) {
  2. if (a == "") return {};
  3. var b = {};
  4. for (var i = 0; i < a.length; ++i)
  5. {
  6. var p=a[i].split('=');
  7. if (p.length != 2) continue;
  8. b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
  9. }
  10. return b;
  11. })(window.location.search.substr(1).split('&'))
  12. $(document).ready(function(){
  13. var selector = "div.gal-item div.gal-inner-holder";
  14. $(document)
  15. .on('mouseover', selector, function(e){
  16. $(this).addClass('hover');
  17. })
  18. .on('mouseout', selector, function(e){
  19. $(this).removeClass('hover');
  20. })
  21. .on('click', selector, function(e){
  22. var url = $(this).parents('div.gal-item').data('url');
  23. CKEDITOR.tools.callFunction(CKEditorFuncNum, url);
  24. window.close();
  25. });
  26. $(document).on('ajax:complete', "div.gal-item a.gal-del", function(xhr, status){
  27. $(this).parents('div.gal-item').remove();
  28. });
  29. var endlessScroll = $.endlessScroll({
  30. container: ".fileupload-list",
  31. entity: ".gal-item",
  32. scrollPadding: 100
  33. });
  34. // Don't listen events first second
  35. endlessScroll.scrollModule.unbind();
  36. window.setTimeout(function() { endlessScroll.scrollModule.bind();}, 1000);
  37. });
  38. // Collection of all instances on page
  39. qq.FileUploader.instances = new Object();
  40. /**
  41. * Class that creates upload widget with drag-and-drop and file list
  42. * @inherits qq.FileUploaderBasic
  43. */
  44. qq.FileUploaderInput = function(o){
  45. // call parent constructor
  46. qq.FileUploaderBasic.apply(this, arguments);
  47. // additional options
  48. qq.extend(this._options, {
  49. element: null,
  50. // if set, will be used instead of qq-upload-list in template
  51. listElement: null,
  52. template_id: '#fileupload_tmpl',
  53. classes: {
  54. // used to get elements from templates
  55. button: 'fileupload-button',
  56. drop: 'fileupload-drop-area',
  57. dropActive: 'fileupload-drop-area-active',
  58. list: 'fileupload-list',
  59. preview: 'fileupload-preview',
  60. file: 'fileupload-file',
  61. spinner: 'fileupload-spinner',
  62. size: 'fileupload-size',
  63. cancel: 'fileupload-cancel',
  64. // added to list item when upload completes
  65. // used in css to hide progress spinner
  66. success: 'fileupload-success',
  67. fail: 'fileupload-fail'
  68. }
  69. });
  70. // overwrite options with user supplied
  71. qq.extend(this._options, o);
  72. this._element = document.getElementById(this._options.element);
  73. this._listElement = this._options.listElement || this._find(this._element, 'list');
  74. this._classes = this._options.classes;
  75. this._button = this._createUploadButton(this._find(this._element, 'button'));
  76. //this._setupDragDrop();
  77. qq.FileUploader.instances[this._element.id] = this;
  78. };
  79. // inherit from Basic Uploader
  80. qq.extend(qq.FileUploaderInput.prototype, qq.FileUploaderBasic.prototype);
  81. qq.extend(qq.FileUploaderInput.prototype, {
  82. /**
  83. * Gets one of the elements listed in this._options.classes
  84. **/
  85. _find: function(parent, type){
  86. var element = qq.getByClass(parent, this._options.classes[type])[0];
  87. if (!element){
  88. alert(type);
  89. throw new Error('element not found ' + type);
  90. }
  91. return element;
  92. },
  93. _setupDragDrop: function(){
  94. var self = this,
  95. dropArea = this._find(this._element, 'drop');
  96. var dz = new qq.UploadDropZone({
  97. element: dropArea,
  98. onEnter: function(e){
  99. qq.addClass(dropArea, self._classes.dropActive);
  100. e.stopPropagation();
  101. },
  102. onLeave: function(e){
  103. e.stopPropagation();
  104. },
  105. onLeaveNotDescendants: function(e){
  106. qq.removeClass(dropArea, self._classes.dropActive);
  107. },
  108. onDrop: function(e){
  109. dropArea.style.display = 'none';
  110. qq.removeClass(dropArea, self._classes.dropActive);
  111. self._uploadFileList(e.dataTransfer.files);
  112. }
  113. });
  114. dropArea.style.display = 'none';
  115. qq.attach(document, 'dragenter', function(e){
  116. if (!dz._isValidFileDrag(e)) return;
  117. dropArea.style.display = 'block';
  118. });
  119. qq.attach(document, 'dragleave', function(e){
  120. if (!dz._isValidFileDrag(e)) return;
  121. var relatedTarget = document.elementFromPoint(e.clientX, e.clientY);
  122. // only fire when leaving document out
  123. if ( ! relatedTarget || relatedTarget.nodeName == "HTML"){
  124. dropArea.style.display = 'none';
  125. }
  126. });
  127. },
  128. _onSubmit: function(id, fileName){
  129. qq.FileUploaderBasic.prototype._onSubmit.apply(this, arguments);
  130. this._addToList(id, fileName);
  131. },
  132. _onProgress: function(id, fileName, loaded, total){
  133. qq.FileUploaderBasic.prototype._onProgress.apply(this, arguments);
  134. var item = this._getItemByFileId(id);
  135. var size = this._find(item, 'size');
  136. var text;
  137. if (loaded != total){
  138. text = Math.round(loaded / total * 100) + '% from ' + this._formatSize(total);
  139. } else {
  140. text = this._formatSize(total);
  141. }
  142. qq.setText(size, text);
  143. },
  144. _onComplete: function(id, fileName, result){
  145. qq.FileUploaderBasic.prototype._onComplete.apply(this, arguments);
  146. var item = this._getItemByFileId(id);
  147. var asset = result.asset ? result.asset : result;
  148. if (asset && asset.id){
  149. qq.addClass(item, this._classes.success);
  150. asset.size = this._formatSize(asset.size);
  151. asset.controller = (asset.type !== undefined && asset.type.toLowerCase() == "ckeditor::picture" ? "pictures" : "attachment_files");
  152. $(item).replaceWith($(this._options.template_id).tmpl(asset));
  153. } else {
  154. qq.addClass(item, this._classes.fail);
  155. }
  156. },
  157. _addToList: function(id, fileName){
  158. if (this._listElement) {
  159. if (this._options.multiple === false) {
  160. $(this._listElement).empty();
  161. }
  162. var asset = {
  163. id: 0,
  164. filename: this._formatFileName(fileName),
  165. size: 0,
  166. format_created_at: '',
  167. url_content: "#",
  168. controller: "assets",
  169. url_thumb: "/assets/ckeditor/filebrowser/images/preloader-3799a3e41d7787a31dac5796ebccc242951da2f2b57eb088326ab3bffe15056a.gif"
  170. };
  171. var item = $(this._options.template_id)
  172. .tmpl(asset)
  173. .attr('qqfileid', id)
  174. .prependTo( this._listElement );
  175. item.find('div.img').addClass('preloader');
  176. this._bindCancelEvent(item);
  177. }
  178. },
  179. _getItemByFileId: function(id){
  180. return $(this._listElement).find('div[qqfileid=' + id +']').get(0);
  181. },
  182. /**
  183. * delegate click event for cancel link
  184. **/
  185. _bindCancelEvent: function(element){
  186. var self = this,
  187. item = $(element);
  188. item.find('a.' + this._classes.cancel).bind('click', function(e){
  189. self._handler.cancel( item.attr('qqfileid') );
  190. item.remove();
  191. qq.preventDefault(e);
  192. return false;
  193. });
  194. }
  195. });