/**
* upload.js
*
* handles large file uploading.
* version : 2.1
*/
'use strict';
'use strict';
//create global variable
var max_file_size = 0;
var max_file_size_display = 0;
var adv_max_file_size_display = 0;
var default_action;
var default_url;
var blobSlice;
var requestFileSystem;
var up_plupload;
var msgProgLabel = document.createElement("label");
msgProgLabel.className = "pLabel";
var msgProgress = document.createElement("progress");
var msgProgressDiv = document.createElement("div");
msgProgressDiv.className = "progress";
msgProgressDiv.appendChild(msgProgLabel);
msgProgressDiv.appendChild(msgProgress);
//This is to enable the ID3 tag reader for plupload files.
(function(ns) {
ns["mOxieFileAPIReader"] = function(file) {
return function(url, fncCallback, fncError) {
var reader = new mOxie.FileReader();
reader.onload = function(event) {
var base_pos = this.result.search(/;base64,/);
var result = this.result.slice(base_pos+8);
var bin_file = new D(window.atob(result)); //D is BinaryFile in the src
fncCallback(bin_file);
};
reader.readAsDataURL (file);
}
};
})(this);
var registerLog = function (str, className) {
jQuery('
'+str+'
').appendTo('#log');
};
function adv_plupload_defaults () {
//add setting to uploader
var adv_preinit = {
PostInit: function(up) {
var uploaddiv = jQuery('#plupload-upload-ui');
if (uploaddiv.length != 0) {
setResize( getUserSetting('upload_resize', false) );
if ( up.features.dragdrop && ! jQuery(document.body).hasClass('mobile') ) {
uploaddiv.addClass('drag-drop');
jQuery('#drag-drop-area').bind('dragover.wp-uploader', function(){ // dragenter doesn't fire right :(
uploaddiv.addClass('drag-over');
}).bind('dragleave.wp-uploader, drop.wp-uploader', function(){
uploaddiv.removeClass('drag-over');
});
} else {
uploaddiv.removeClass('drag-drop');
jQuery('#drag-drop-area').unbind('.wp-uploader');
}
if ( up.runtime == 'html4' )
jQuery('.upload-flash-bypass').hide();
}
default_action = up.settings.multipart_params['action'];
default_url = up.settings.url;
up_plupload = up;
jQuery('.drop-instructions').show();
up.settings.drop_element[0].addEventListener('dragenter', function (e) {
var dragdisplay = document.getElementsByClassName('uploader-window');
if (dragdisplay.length>0) {
dragdisplay[0].style.display = 'block';
dragdisplay[0].style.opacity = 1;
dragdisplay[0].addEventListener('dragleave', function (e) {
dragdisplay[0].style.display = 'none';
dragdisplay[0].style.opacity = 0;
}, false);
dragdisplay[0].addEventListener('drop', function (e) {
dragdisplay[0].style.display = 'none';
dragdisplay[0].style.opacity = 0;
}, false);
}
}, false);
//disable plupload image resize
up.settings.resize = new Object;
up.settings.resize.enabled = false;
if (adv_uploader) {
up.settings.chunk_size = max_file_size - 2048; //removing 2kbytes to allow for size of post data.
up.settings.filters.max_file_size = adv_max_file_size;
}
},
FilesAdded: function(up, files) {
if (adv_uploader) {
up.settings.url = ajaxurl;
up.settings.multipart_params['destinations'] = JSON.stringify(destinations);
up.settings.multipart_params['action'] = 'adv_upload_plupload';
up.settings.multipart_params['security'] = security;
var lib_only = true;
if( typeof files[0].dest === 'undefined' ) {
if( typeof wpUploaderInit === 'object' )
lib_only = false;
selectDestination (lib_only, files, function () {
up.trigger("FilesAdded", files);
});
return false;
} else if (typeof files[0].dest === 'undefined' ) {
for( var i=0; i' ).attr({
src: respObj.data.url,
class: 'pinkynail'
}).appendTo( '#media-item-' + file.id );
jQuery( '
' ).attr({
class: 'filename new'
}).html(respObj.data.name).appendTo( '#media-item-' + file.id );
} else
var id = respObj.data.id.toString();
up.trigger("FileUploaded", file, {'response':id});
} else
up.trigger("FileUploaded", file, {'response':response});
}
});
};
try {
var respObj = JSON.parse( response.response );
} catch ( e ) {
return;
}
if (respObj.success == 'file_complete') {
//get file extension
var ext = respObj.data.name.split('.').pop();
//is image create thumbnail
if(destinations[file.dest][4] && ext.match(/jpg|jpeg|png/i)) {
//update display to show message
var item = jQuery('#media-item-' + file.id);
jQuery('.percent', item).html( 'Creating thumbs' );
createThumbImage (file, respObj.data.name, uploadFileThumbs, respObj.data.file);
//is pdf create thumbnail
} else if(destinations[file.dest][4] && ext.match(/pdf/i)) {
var item = jQuery('#media-item-' + file.id);
jQuery('.percent', item).html( 'Creating thumbs' );
pdf (respObj.data.file, respObj.data.name, uploadFileThumbs);
} else
uploadFileThumbs (null, null, new Array());
return false;
}
};
},
Error: function(up, err) {
alert();
},
ChunkUploaded: function(up, file, info) {
var response = jQuery.parseJSON(info.response);
if (response && !response.success)
{
file.status = plupload.FAILED;
up.trigger('QueueChanged', file);
var text = {response: "
"+file.name+" "+response.data.message+"
"}
up.trigger('FileUploaded', file, text);
}
}
};
//add media page
if (typeof wpUploaderInit === 'object') {
wpUploaderInit.preinit = adv_preinit;
max_file_size = parseInt(wpUploaderInit.filters.max_file_size);
if (typeof adv_uploader === 'boolean' && adv_uploader)
wpUploaderInit.filters.max_file_size = adv_max_file_size;
}
//edit post/page
if (typeof _wpPluploadSettings === 'object') {
_wpPluploadSettings.defaults.preinit = adv_preinit;
max_file_size = parseInt(_wpPluploadSettings.defaults.filters.max_file_size);
if (typeof adv_uploader === 'boolean' && adv_uploader)
_wpPluploadSettings.defaults.filters.max_file_size = adv_max_file_size;
}
}
function toggle_loader (loader) {
if (loader == 'default') {
jQuery('#adv_upload').toggleClass('hidden', true);
jQuery('#default_upload').toggleClass('hidden', false);
} else {
jQuery('#default_upload').toggleClass('hidden', true);
jQuery('#adv_upload').toggleClass('hidden', false);
}
jQuery.ajax({'type' : "post",'url' : ajaxurl,'data' : {'action': "adv_file_upload_set_loader", 'loader': loader}});
}
//convert bytes to larges unit of wholenumbers
function convertBytes (num) {
var units = 'Bytes';
//convert to KBytes
if ((num % 1024) == 0) {
num = num / 1024;
units = 'KB'
}
//convert to MBytes
if (units == 'KB' && (num % 1024) == 0) {
num = num / 1024;
units = 'MB'
}
//convert to GBytes
if (units == 'MB' && (num % 1024) == 0) {
num = num / 1024;
units = 'GB'
}
return num + ' ' + units;
}
// do browser checks add listeners on document ready
jQuery(document).ready(function() {
jQuery('.media-upload-form').on('click.uploader', function(e) {
var target = jQuery(e.target);
if ( target.is('.upload-flash-bypass a') || target.is('a.uploader-html') ) { // html4 uploader
var max = jQuery('.max-upload-size').html();
max = max.replace (adv_max_file_size_display, max_file_size_display);
jQuery('.max-upload-size').html(max);
jQuery('#adv_uploader_checkbox_p').hide();
} else if ( target.is('.upload-html-bypass a') ) { // multi-file uploader
jQuery('#adv_uploader_checkbox_p').show();
if (adv_uploader) {
var max = jQuery('.max-upload-size').html();
max = max.replace (max_file_size_display, adv_max_file_size_display);
jQuery('.max-upload-size').html(max);
}
}
});
//create checkbox for changing which uploader is used
if (adv_replace_default) {
max_file_size_display = convertBytes (max_file_size);
adv_max_file_size_display = convertBytes (adv_max_file_size);
var checked = '';
var max = max_file_size_display;
if (adv_uploader) {
checked = 'checked';
max = adv_max_file_size_display;
}
var check_box = '
'
+ 'Use advanced uploader
';
var upload_js = document.getElementById('tmpl-uploader-inline');
if (upload_js !== null) {
var pattern = new RegExp(max_file_size_display+'|'+max_file_size_display.replace(/ /,''),'i');
var maxPos = upload_js.innerHTML.search(pattern);
var pPos = upload_js.innerHTML.indexOf('', maxPos);
upload_js.innerHTML = upload_js.innerHTML.substring(0, maxPos)
+ max + upload_js.innerHTML.substring(maxPos+max_file_size_display.length,pPos+4)
+ check_box + upload_js.innerHTML.substring(pPos+4);
}
var upload = jQuery('.max-upload-size').html();
if (typeof upload === 'string') {
var pattern = new RegExp(max_file_size_display+'|'+max_file_size_display.replace(/ /,''),'i');
var maxPos = upload.search(pattern);
jQuery('.max-upload-size').html(upload.substring(0, maxPos)
+ max + upload.substring(maxPos+max_file_size_display.length))
.after(check_box);
}
jQuery(document).on('click','#adv_uploader_checkbox_p',show_hide_uploader);
jQuery(document).on('click','.media-menu-item',function (e) {
if (e.target.textContent == 'Upload Files')
if ((!adv_uploader && jQuery('#adv_uploader_checkbox').attr('checked') == 'checked')
|| (adv_uploader && jQuery('#adv_uploader_checkbox').attr('checked') == undefined))
jQuery('#adv_uploader_checkbox_p').click();
});
}
});
function show_hide_uploader (e) {
if (e.target.id.indexOf('adv_uploader_checkbox') == -1)
return;
if (e.target.type == 'checkbox')
var adv_checkbox = e.target;
else {
var adv_checkbox = document.getElementById('adv_uploader_checkbox');
if (adv_checkbox.checked) adv_checkbox.checked = false;
else adv_checkbox.checked = true;
}
if (adv_checkbox.checked) {
adv_uploader = true;
up_plupload.settings.filters.max_file_size = adv_max_file_size;
up_plupload.settings.chunk_size = max_file_size - 2048; //removing 2kbytes to allow for size of post data.
var max = jQuery('.max-upload-size').html();
max = max.replace (max_file_size_display, adv_max_file_size_display);
jQuery('.max-upload-size').html(max);
} else {
adv_uploader = false;
up_plupload.settings.filters.max_file_size = max_file_size;
up_plupload.settings.chunk_size = 0;
var max = jQuery('.max-upload-size').html();
max = max.replace (adv_max_file_size_display, max_file_size_display);
jQuery('.max-upload-size').html(max);
}
jQuery.ajax({'type' : "post",'url' : ajaxurl,'data' : {'action': "adv_file_upload_set_loader", 'loader': adv_uploader }});
}
var createThumbImage = function (file, name, callback, src) {
var tempImg = new Image();
tempImg.src = src;
tempImg.onload = function() {
var tempW = tempImg.width;
var tempH = tempImg.height;
if (tempH > sizes['thumbnail']['height'] || tempW > sizes['thumbnail']['width']) {
var imageMeta = new Object();
var dataURL = new Object();
var keys = new Array();
var imageH = tempH;
var imageW = tempW;
var nameslist = '';
for (var key in sizes) {
var tempH = imageH;
var tempW = imageW;
//get thumbnail size
var MAX_WIDTH = sizes[key]['width'];
var MAX_HEIGHT = sizes[key]['height'];
if (tempH > MAX_HEIGHT || tempW > MAX_WIDTH) {
if (tempW > imageH) {
if (tempW > MAX_WIDTH) {
tempH *= MAX_WIDTH / tempW;
tempW = MAX_WIDTH;
}
} else {
if (tempH > MAX_HEIGHT) {
tempW *= MAX_HEIGHT / tempH;
tempH = MAX_HEIGHT;
}
}
//round down image dimesions
tempW = Math.round(tempW);
tempH = Math.round(tempH);
//set thumbnail filename
var filename = name.replace(/\.(jpg|jpeg|png)$/i, "-"+tempW+"x"+tempH+".jpg");
if (nameslist.search(filename) == -1) {
nameslist += filename + ';';
var canvas = document.createElement('canvas');
canvas.width = tempW;
canvas.height = tempH;
var ctx = canvas.getContext("2d");
ctx.drawImage(this, 0, 0, tempW, tempH);
keys.push(key);
dataURL[key] = canvas.toDataURL("image/jpeg",0.9);
}
imageMeta[key] = new Object();
imageMeta[key].file = filename;
imageMeta[key].width = tempW;
imageMeta[key].height = tempH;
}
}
callback (dataURL, imageMeta, keys);
} else
callback (null, null, new Array());
};
};
var pdf = function (file, name, callback) {
//
// Disable workers to avoid yet another cross-origin issue (workers need the URL of
// the script to be loaded, and currently do not allow cross-origin scripts)
//
PDFJS.disableWorker = true;
var pdfDoc = null;
//
// Get page info from document, resize canvas accordingly, and render page
//
function renderPage(num) {
// Using promise to fetch the page
pdfDoc.getPage(num).then(function(page) {
var keys = new Array();
for (var key in sizes)
keys.push(key);
createPDFthumb (page, '', keys, new Array(), new Object(), new Object());
});
}
//
// create thumbnail images
//
function createPDFthumb (page, nameslist, imageSizes, keys, imageMeta, dataURL) {
var key = imageSizes.pop();
var wScale = sizes[key]['width'] / page.getViewport(1.0).width;
var hScale = sizes[key]['height'] / page.getViewport(1.0).height;
var scale = wScale>hScale?hScale:wScale;
var viewport = page.getViewport(scale);
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
//set thumbnail filename
var filename = name+"-"+canvas.width+"x"+canvas.height+".png";
imageMeta[key] = new Object();
imageMeta[key].file = filename;
imageMeta[key].width = canvas.width;
imageMeta[key].height = canvas.height;
if (nameslist.search(filename) == -1) {
nameslist += filename + ';';
// Render PDF page into canvas context
var renderContext = {
canvasContext: ctx,
viewport: viewport
};
page.render(renderContext).then(function (){
keys.push(key);
dataURL[key] = canvas.toDataURL("image/png");
if (imageSizes.length > 0)
createPDFthumb (page, nameslist, imageSizes, keys, imageMeta, dataURL);
else {
callback (dataURL, imageMeta, keys);
}
});
} else {
if (imageSizes.length > 0)
createPDFthumb (page, nameslist, imageSizes, keys, imageMeta, dataURL);
else {
callback (dataURL, imageMeta, keys);
}
}
}
var parameters = {};
// Read the local file into a Uint8Array.
var fileReader = new FileReader();
fileReader.onload = function webViewerChangeFileReaderOnload(evt) {
var buffer = evt.target.result;
parameters.data = new Uint8Array(buffer);
PDFJS.getDocument(parameters).then(function getPdfForm(_pdfDoc) {
pdfDoc = _pdfDoc;
renderPage(1);
});
};
//fileReader.readAsArrayBuffer(file);
// Fetch the PDF document from the URL using promices
PDFJS.getDocument(file).then(function getPdfForm(_pdfDoc) {
pdfDoc = _pdfDoc;
renderPage(1);
});
};
function handleDragOver(evt) {
evt.stopPropagation();
evt.preventDefault();
evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
}
function handleDragEnter(evt) {
evt.currentTarget.classList.add('drag-over');
}
function handleDragLeave(evt) {
evt.currentTarget.classList.remove('drag-over');
}
function selectDestination (lib_only, files, callback) {
if (files.length == 0) {
return;
}
var lib_only_dest = 0;
if(lib_only)
for (var i=0; i'
}
options += ''
}
//category options
var catOpt = '';
for (var i=0; i' + categories[i][1] + '';
}
//content for popup
var content = '';
if(lib_only && destinations.length > lib_only_dest)
content += 'Can only upload to Library from this page.';
if (files.length > 1)
content += '
Select destination for all files';
else
content += '
';
}
}
var dlg = jQuery("")
.html(content);
var id3_tags = function (i) {
var file = files[i].getSource();
file.index = i;
if( file.name.split('.').pop() == 'mp3' ) {
ID3.loadTags(file.name, function() {
var tags = ID3.getAllTags(file.name);
files[file.index].album = tags.album;
if( file.index").attr({'id':'adv_err_cat','class':'clear alignright media-item error'})
.html('You must enter an existing category')
.insertAfter('#ac_cat');
return false;
}
for (var i=0; i < files.length; i++)
files[i].album = jQuery( "#adv_cat" ).val();
} else if( destinations[destall]
&& destinations[destall][2] == 'Wordpress Gallery'
&& destinations[destall][3] == 'new' ) {
if( jQuery( "#wg_ input" ).val() == '' ) {
jQuery( "
").attr({'id':'adv_err_gal','class':'clear alignright media-item error'})
.html('You must enter a name for the new gallery')
.insertAfter('#wg_ input');
return false;
}
jQuery.post(ajaxurl,
{
'action':'adv_file_upload_new_post',
'security':security,
'title':JSON.stringify(new Array(jQuery( "#wg_ input" ).val()))
}, function( response ) {
for (var i=0; i < files.length; i++)
files[i].album = response[0].id;
callback();
dlg.dialog('close');
}, "json");
return false;
}
callback();
dlg.dialog('close');
} else if (dests.length) {
var missingDest = false;
var missingInfo = false;
var newGalleries = new Object();
for (var i=0; i < dests.length; i++) {
var dest = dests[i].value;
if (dest.length == 0) {
jQuery( "