diff options
Diffstat (limited to 'lib/scripts/fileuploaderextended.js')
-rw-r--r-- | lib/scripts/fileuploaderextended.js | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/lib/scripts/fileuploaderextended.js b/lib/scripts/fileuploaderextended.js index ba9158ea1..6eaa38ebc 100644 --- a/lib/scripts/fileuploaderextended.js +++ b/lib/scripts/fileuploaderextended.js @@ -77,6 +77,7 @@ qq.FileUploaderExtended = function(o){ '<div class="qq-upload-drop-area"><span>Drop files here to upload</span></div>' + '<div class="qq-upload-button">Upload a file</div>' + '<ul class="qq-upload-list"></ul>' + + '<label class="check" for="dw__ow"><input id="dw__ow" type="checkbox" value="1" name="ow"><span>Overwrite existing file</span></label>' + '<input class="button" type="submit" value="Upload" id="mediamanager__upload_button">' + '</div>', @@ -139,6 +140,26 @@ qq.extend(qq.FileUploaderExtended.prototype, { self._handler._options.onUpload(); }); + }, + + _onComplete: function(id, fileName, result){ + qq.FileUploaderBasic.prototype._onComplete.apply(this, arguments); + + // mark completed + var item = this._getItemByFileId(id); + qq.remove(this._find(item, 'cancel')); + qq.remove(this._find(item, 'spinner')); + + var nameInput = this._find(item, 'nameInput'); + var fileElement = this._find(item, 'file'); + qq.setText(fileElement, nameInput.value); + qq.remove(nameInput.parentNode); + + if (result.success){ + qq.addClass(item, this._classes.success); + } else { + qq.addClass(item, this._classes.fail); + } } }); @@ -148,11 +169,70 @@ qq.extend(qq.UploadHandlerForm.prototype, { this._uploadAll(params); }, + getName: function(id){ + var file = this._inputs[id]; + var name = document.getElementById(id); + if (name != null) { + return name.value; + } else { + if (file != null) { + // get input value and remove path to normalize + return file.value.replace(/.*(\/|\\)/, ""); + } else { + return null; + } + } + }, + _uploadAll: function(params){ + jQuery(".qq-upload-spinner-hidden").each(function (i) { + jQuery(this).addClass('qq-upload-spinner'); + }); for (key in this._inputs) { this.upload(key, params); } + }, + + _upload: function(id, params){ + var input = this._inputs[id]; + + if (!input){ + throw new Error('file with passed id was not added, or already uploaded or cancelled'); + } + + var fileName = this.getName(id); + + var iframe = this._createIframe(id); + var form = this._createForm(iframe, params); + form.appendChild(input); + + var nameInput = qq.toElement('<input name="file_name" value="' + fileName + '" type="text">'); + form.appendChild(nameInput); + + var owCheckbox = document.getElementById('dw__ow').cloneNode(true); + form.appendChild(owCheckbox); + + var self = this; + this._attachLoadEvent(iframe, function(){ + self.log('iframe loaded'); + + var response = self._getIframeContentJSON(iframe); + + self._options.onComplete(id, fileName, response); + self._dequeue(id); + + delete self._inputs[id]; + // timeout added to fix busy state in FF3.6 + setTimeout(function(){ + qq.remove(iframe); + }, 1); + }); + + form.submit(); + qq.remove(form); + + return id; } }); @@ -209,6 +289,7 @@ qq.extend(qq.UploadHandlerXhr.prototype, { // build query string params = params || {}; params['qqfile'] = name; + params['ow'] = document.getElementById('dw__ow').checked; var queryString = qq.obj2url(params, this._options.action); xhr.open("POST", queryString, true); |