var uploadsModel; (function($){ AnsPress.models.Upload = Backbone.Model.extend({ defaults: { id: '', oldId: '', fileName: '', type: '', fileSize: '', uploaded: true, failed: false, url: '', nonce: '' } }); AnsPress.collections.Uploads = Backbone.Collection.extend({ model: AnsPress.models.Upload }); AnsPress.views.Upload = Backbone.View.extend({ idAttribute: 'id', template: $('#ap-upload-template').html(), id: function(){ return this.model.get('id'); }, tagName: 'div', className: 'ap-upload-item', initialize: function(options){ this.model = options.model; this.model.on('change:failed', this.uploadFailed, this); this.model.on('change:id', this.idChanged, this); this.model.on('change', this.render, this); this.listenTo( AnsPress, 'apUploadProgress', this.progress) this.listenTo( this.model, 'remove', this.removeEl) }, events:{ 'click .insert-to-post': 'insertImage', 'click .apicon-trashcan': 'removedUpload', }, render: function(){ var t = $(this.template + ''); if(this.model.get('uploaded')) this.$el.addClass('done'); if(this.model.get('isImage')) this.$el.addClass('is-image'); t.filter('.ap-upload-name').text(this.model.get('fileName') + ' (' + this.model.get('fileSize') + ')'); this.$el.html(t); return this; }, uploadFailed: function(){ this.$el.removeClass('done').addClass('failed'); }, idChanged: function(){ this.$el.attr('id', this.model.get('id')); this.$el.find('input').val(this.model.get('id')); }, removedUpload: function(e){ e.preventDefault(); var self = this; AnsPress.ajax({ data: { ap_ajax_action: 'delete_attachment', attachment_id: self.model.get('id'), __nonce: self.model.get('nonce'), }, success: function(data){ if(data.success){ $('#'+self.model.get('id')).remove(); setTimeout(function(){ AnsPress.uploader.removeFile(self.model.get('id')); }, 400); if(typeof tinyMCE !== 'undefined'){ tinyMCE.activeEditor.dom.remove(tinymce.activeEditor.dom.select('img[src="'+self.model.get('url')+'"]')); tinyMCE.activeEditor.execCommand('mceInsertContent',false,''); } } } }); }, insertImage: function(e){ e.preventDefault(); if(this.model.get('isImage')){ addImageToEditor(this.model.get('url'), this.model.get('id')); } }, progress: function(data){ if(this.model.get('id') === data.id) this.$el.find('.ap-progress').css('width', data.per+'%') }, removeEl: function(){ console.log('remove'); this.$el.remove(); } }); AnsPress.views.Uploads = Backbone.View.extend({ el: '#ap-upload', initialize: function(options){ this.model = options.model; this.model.on('add', this.adddedUplaod, this); this.listenTo(AnsPress, 'uploadsRemoved', this.removeAll) }, renderItem: function(upload){ var view = new AnsPress.views.Upload({ model: upload }); this.$el.append(view.render().$el); }, render: function(){ var self = this; if(this.model){ this.model.each(function(upload){ self.renderItem(upload); }); } return this; }, adddedUplaod: function(upload){ this.renderItem(upload); }, removeAll: function(){ var self = this; if(this.model){ this.model.each(function(upload, i){ self.model.remove(upload); }); } } }); var addImageToEditor = function(url, id){ var html = ''; if(typeof tinyMCE !== 'undefined') tinyMCE.activeEditor.execCommand('mceInsertContent', false, html); else jQuery('.wp-editor-area').val(jQuery('.wp-editor-area').val() + html); }; if($('#ap-uploads-data').length> 0){ uploadsModel = new AnsPress.collections.Uploads(JSON.parse($('#ap-uploads-data').html())); var uploadsView = new AnsPress.views.Uploads({ model: uploadsModel }); uploadsView.render(); wpUploaderInit.browse_button = 'pickfiles'; wpUploaderInit.container = 'ap-upload'; wpUploaderInit.init = { FilesAdded: function(up, files) { var self = this, warningShown = false; var template = $('#ap-upload-template').html(); plupload.each(files, function(file) { if (up.files.length > up.settings.maxfiles) { if(!warningShown) alert(aplang.attached_max); up.removeFile(file); warningShown = true; return; } uploadsModel.add({ id: file.id, oldId: file.id, fileName: file.name, type: file.type, fileSize: plupload.formatSize(file.size), url: '', nonce: '', uploaded: false }); AnsPress.uploader.start(); }); }, UploadProgress: function(up, file) { AnsPress.trigger('apUploadProgress', {id: file.id, per: file.percent}); }, FileUploaded: function(up, file, info) { var prevId = file.id; var data = AnsPress.ajaxResponse(info.response); if(data.success){ uploadsModel.get(prevId).set({'id': data.attachment_id, 'nonce': data.delete_nonce, done: data.success, isImage: data.is_image, url: data.attachment_url, uploaded: true }); if(data.is_image){ addImageToEditor(data.attachment_url, data.attachment_id); } } if(!data.success){ AnsPress.trigger('snackbar', data); uploadsModel.get(file.id).set({'failed': true}); up.removeFile(file); } }, Error: function(up, args) { if(args.code === -600){ AnsPress.trigger('snackbar', { success: false, snackbar : { message: aplang.file_size_error }}); } }, FilesRemoved: function(){ AnsPress.trigger('uploadsRemoved'); } }; AnsPress.uploader = new plupload.Uploader(wpUploaderInit); AnsPress.uploader.init(); $('.ap-field-description').on('drag dragstart dragenter dragover', function(e) { $(this).addClass('dragging'); }); $('.ap-field-description').on('dragend dragleave drop', function(e) { $(this).removeClass('dragging'); }) } })(jQuery);