# HG changeset patch
# User am@osimis.io
# Date 1545839901 -3600
# Node ID 5713952f60c0b6e57d31f8bbc5d5a33d07204fb1
# Parent b89a4288d60521c924be884141d490d7ed938bef
upgraded jquery, jquery-mobile, jquery-file-upload. Everything seems to be working as before. Theme has changed !
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/explorer.html
--- a/OrthancExplorer/explorer.html Wed Dec 26 11:15:17 2018 +0100
+++ b/OrthancExplorer/explorer.html Wed Dec 26 16:58:21 2018 +0100
@@ -23,7 +23,6 @@
-
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/explorer.js
--- a/OrthancExplorer/explorer.js Wed Dec 26 11:15:17 2018 +0100
+++ b/OrthancExplorer/explorer.js Wed Dec 26 16:58:21 2018 +0100
@@ -1,10 +1,26 @@
// http://stackoverflow.com/questions/1663741/is-there-a-good-jquery-drag-and-drop-file-upload-plugin
-// Forbid the access to IE
-if ($.browser.msie)
-{
- alert("Please use Mozilla Firefox or Google Chrome. Microsoft Internet Explorer is not supported.");
+//detect browser (from https://stackoverflow.com/questions/5916900/how-can-you-detect-the-version-of-a-browser)
+navigator.browserSpecs = (function(){
+ var ua = navigator.userAgent, tem,
+ M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
+ if(/trident/i.test(M[1])){
+ tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
+ return {name:'IE',version:(tem[1] || '')};
+ }
+ if(M[1]=== 'Chrome'){
+ tem = ua.match(/\b(OPR|Edge)\/(\d+)/);
+ if(tem != null) return {name:tem[1].replace('OPR', 'Opera'),version:tem[2]};
+ }
+ M = M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
+ if((tem = ua.match(/version\/(\d+)/i))!= null)
+ M.splice(1, 1, tem[1]);
+ return {name:M[0], version:M[1]};
+})();
+
+if (navigator.browserSpecs.name == 'IE' && navigator.browserSpecs.version < 11) {
+ alert("Your version of Internet Explorer is not supported. Please use Mozilla Firefox or Google Chrome.");
}
// http://jquerymobile.com/demos/1.1.0/docs/api/globalconfig.html
@@ -78,14 +94,17 @@
}
);
- currentPage = $.mobile.pageData.active;
- currentUuid = $.mobile.pageData.uuid;
- if (!(typeof currentPage === 'undefined') &&
- !(typeof currentUuid === 'undefined') &&
- currentPage.length > 0 &&
- currentUuid.length > 0)
- {
- Refresh();
+ if (!(typeof $.mobile.pageData === 'undefined')) {
+
+ currentPage = $.mobile.pageData.active;
+ currentUuid = $.mobile.pageData.uuid;
+ if (!(typeof currentPage === 'undefined') &&
+ !(typeof currentUuid === 'undefined') &&
+ currentPage.length > 0 &&
+ currentUuid.length > 0)
+ {
+ Refresh();
+ }
}
});
@@ -342,7 +361,7 @@
}
-$('[data-role="page"]').live('pagebeforeshow', function() {
+$(document).on("pagebeforeshow", '[data-role="page"]', function() {
$.ajax({
url: '../system',
dataType: 'json',
@@ -362,7 +381,7 @@
-$('#lookup').live('pagebeforeshow', function() {
+$(document).on("pagebeforeshow", "#lookup", function() {
// NB: "GenerateDicomDate()" is defined in "query-retrieve.js"
let target = $('#lookup-study-date');
$('option', target).remove();
@@ -379,7 +398,7 @@
});
-$('#lookup-submit').live('click', function() {
+$(document).on("click", "#lookup-submit", function(e) {
$('#lookup-result').hide();
let lookup = {
@@ -430,7 +449,7 @@
});
-$('#find-patients').live('pagebeforeshow', function() {
+$(document).on("pagebeforeshow", "#find-patients", function() {
GetResource('/patients?expand&since=0&limit=' + (LIMIT_RESOURCES + 1), function(patients) {
let target = $('#all-patients');
$('li', target).remove();
@@ -518,8 +537,7 @@
}
}
-
-$('#find-studies').live('pagebeforeshow', function() {
+$(document).on("pagebeforeshow", "#find-studies", function() {
GetResource('/studies?expand&since=0&limit=' + (LIMIT_RESOURCES + 1), function(studies) {
FormatListOfStudies('#all-studies', '#alert-studies', '#count-studies', studies);
});
@@ -802,17 +820,17 @@
}
}
-$(document).live('pagebeforehide', function() {
+$(document).on('pagebeforehide', function() {
currentPage = '';
currentUuid = '';
});
-$('#patient').live('pagebeforeshow', RefreshPatient);
-$('#study').live('pagebeforeshow', RefreshStudy);
-$('#series').live('pagebeforeshow', RefreshSeries);
-$('#instance').live('pagebeforeshow', RefreshInstance);
+$(document).on("pagebeforeshow", "#patient", RefreshPatient);
+$(document).on("pagebeforeshow", "#study", RefreshStudy);
+$(document).on("pagebeforeshow", "#series", RefreshSeries);
+$(document).on("pagebeforeshow", "#instance", RefreshInstance);
$(function() {
$(window).hashchange(function(e, data) {
@@ -876,34 +894,34 @@
-$('#instance-delete').live('click', function() {
+$(document).on("click", "#instance-delete", function() {
OpenDeleteResourceDialog('../instances/' + $.mobile.pageData.uuid,
'Delete this instance?');
});
-$('#study-delete').live('click', function() {
+$(document).on("click", "#study-delete", function(e) {
OpenDeleteResourceDialog('../studies/' + $.mobile.pageData.uuid,
'Delete this study?');
});
-$('#series-delete').live('click', function() {
+$(document).on("click", "#series-delete", function(e) {
OpenDeleteResourceDialog('../series/' + $.mobile.pageData.uuid,
'Delete this series?');
});
-$('#patient-delete').live('click', function() {
+$(document).on("click", "#patient-delete", function(e) {
OpenDeleteResourceDialog('../patients/' + $.mobile.pageData.uuid,
'Delete this patient?');
});
-$('#instance-download-dicom').live('click', function(e) {
+$(document).on("click", "#instance-download-dicom", function(e) {
// http://stackoverflow.com/a/1296101
e.preventDefault(); //stop the browser from following
window.location.href = '../instances/' + $.mobile.pageData.uuid + '/file';
});
-$('#instance-download-json').live('click', function(e) {
+$(document).on("click", "#instance-download-json", function(e) {
// http://stackoverflow.com/a/1296101
e.preventDefault(); //stop the browser from following
window.location.href = '../instances/' + $.mobile.pageData.uuid + '/tags';
@@ -911,7 +929,7 @@
-$('#instance-preview').live('click', function(e) {
+$(document).on("click", "#instance-preview", function(e) {
if ($.mobile.pageData) {
let pageData = DeepCopy($.mobile.pageData);
@@ -957,7 +975,7 @@
-$('#series-preview').live('click', function(e) {
+$(document).on("click", "#series-preview", function(e) {
if ($.mobile.pageData) {
let pageData = DeepCopy($.mobile.pageData);
@@ -1069,7 +1087,7 @@
}
-$('#instance-store,#series-store,#study-store,#patient-store').live('click', function(e) {
+$(document).on("click", "#instance-store,#series-store,#study-store,#patient-store", function(e) {
ChooseDicomModality(function(modality, peer) {
let pageData = DeepCopy($.mobile.pageData);
@@ -1112,7 +1130,7 @@
});
-$('#show-tag-name').live('change', function(e) {
+$(document).on("change", "#show-tag-name", function(e) {
let checked = e.currentTarget.checked;
if (checked)
$('.tag-name').show();
@@ -1121,40 +1139,40 @@
});
-$('#patient-archive').live('click', function(e) {
+$(document).on("click", "#patient-archive", function(e) {
e.preventDefault(); //stop the browser from following
window.location.href = '../patients/' + $.mobile.pageData.uuid + '/archive';
});
-$('#study-archive').live('click', function(e) {
+$(document).on("click", "#study-archive", function(e) {
e.preventDefault(); //stop the browser from following
window.location.href = '../studies/' + $.mobile.pageData.uuid + '/archive';
});
-$('#series-archive').live('click', function(e) {
+$(document).on("click", "#series-archive", function(e) {
e.preventDefault(); //stop the browser from following
window.location.href = '../series/' + $.mobile.pageData.uuid + '/archive';
});
-$('#patient-media').live('click', function(e) {
+$(document).on("click", "#patient-media", function(e) {
e.preventDefault(); //stop the browser from following
window.location.href = '../patients/' + $.mobile.pageData.uuid + '/media';
});
-$('#study-media').live('click', function(e) {
+$(document).on("click", "#study-media", function(e) {
e.preventDefault(); //stop the browser from following
window.location.href = '../studies/' + $.mobile.pageData.uuid + '/media';
});
-$('#series-media').live('click', function(e) {
+$(document).on("click", "#series-media", function(e) {
e.preventDefault(); //stop the browser from following
window.location.href = '../series/' + $.mobile.pageData.uuid + '/media';
});
-$('#protection').live('change', function(e) {
+$(document).on("change", "#protection", function(e) {
let isProtected = e.target.value == "on";
$.ajax({
url: '../patients/' + $.mobile.pageData.uuid + '/protected',
@@ -1205,28 +1223,28 @@
});
}
-$('#instance-anonymize').live('click', function() {
+$(document).on("click", "#instance-anonymize", function(e) {
OpenAnonymizeResourceDialog('../instances/' + $.mobile.pageData.uuid,
'Anonymize this instance?');
});
-$('#study-anonymize').live('click', function() {
+$(document).on("click", "#study-anonymize", function(e) {
OpenAnonymizeResourceDialog('../studies/' + $.mobile.pageData.uuid,
'Anonymize this study?');
});
-$('#series-anonymize').live('click', function() {
+$(document).on("click", "#series-anonymize", function(e) {
OpenAnonymizeResourceDialog('../series/' + $.mobile.pageData.uuid,
'Anonymize this series?');
});
-$('#patient-anonymize').live('click', function() {
+$(document).on("click", "#patient-anonymize", function(e) {
OpenAnonymizeResourceDialog('../patients/' + $.mobile.pageData.uuid,
'Anonymize this patient?');
});
-$('#plugins').live('pagebeforeshow', function() {
+$(document).on("pagebeforeshow", "#plugins", function() {
$.ajax({
url: '../plugins',
dataType: 'json',
@@ -1304,7 +1322,7 @@
}
-$('#jobs').live('pagebeforeshow', function() {
+$(document).on("pagebeforeshow", "#jobs", function() {
$.ajax({
url: '../jobs?expand',
dataType: 'json',
@@ -1367,7 +1385,7 @@
});
-$('#job').live('pagebeforeshow', function() {
+$(document).on("pagebeforeshow", "#job", function() {
if ($.mobile.pageData) {
let pageData = DeepCopy($.mobile.pageData);
@@ -1462,18 +1480,18 @@
});
}
-$('#job-cancel').live('click', function() {
+$(document).on("click", "#job-cancel", function(e) {
TriggerJobAction('cancel');
});
-$('#job-resubmit').live('click', function() {
+$(document).on("click", "#job-resubmit", function(e) {
TriggerJobAction('resubmit');
});
-$('#job-pause').live('click', function() {
+$(document).on("click", "#job-pause", function(e) {
TriggerJobAction('pause');
});
-$('#job-resume').live('click', function() {
+$(document).on("click", "#job-resume", function(e) {
TriggerJobAction('resume');
});
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/file-upload.js
--- a/OrthancExplorer/file-upload.js Wed Dec 26 11:15:17 2018 +0100
+++ b/OrthancExplorer/file-upload.js Wed Dec 26 16:58:21 2018 +0100
@@ -47,7 +47,7 @@
-$('#upload').live('pageshow', function() {
+$(document).on("pageshow", "#upload", function() {
alert('WARNING - This page is currently affected by Orthanc issue #21: ' +
'"DICOM files might be missing after uploading with Mozilla Firefox." ' +
'Do not use this upload feature for clinical uses, or carefully ' +
@@ -56,12 +56,12 @@
$('#fileupload').fileupload('enable');
});
-$('#upload').live('pagehide', function() {
+$(document).on("pagehide", "#upload", function() {
$('#fileupload').fileupload('disable');
});
-$('#upload-button').live('click', function() {
+$(document).on("click", "#upload-button", function(e) {
let pu = pendingUploads;
pendingUploads = [];
@@ -82,12 +82,12 @@
}
});
-$('#upload-clear').live('click', function() {
+$(document).on("click", "#upload-clear", function(e) {
pendingUploads = [];
$('.pending-file').remove();
$('#upload-list').listview('refresh');
});
-/*$('#upload-abort').live('click', function() {
+/*$('#upload-abort').on('click', function() {
$('#fileupload').fileupload().abort();
});*/
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-18-black.png
Binary file OrthancExplorer/libs/images/icons-18-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-18-white.png
Binary file OrthancExplorer/libs/images/icons-18-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-36-black.png
Binary file OrthancExplorer/libs/images/icons-36-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-36-white.png
Binary file OrthancExplorer/libs/images/icons-36-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/action-black.png
Binary file OrthancExplorer/libs/images/icons-png/action-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/action-white.png
Binary file OrthancExplorer/libs/images/icons-png/action-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/alert-black.png
Binary file OrthancExplorer/libs/images/icons-png/alert-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/alert-white.png
Binary file OrthancExplorer/libs/images/icons-png/alert-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-d-black.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-d-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-d-l-black.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-d-l-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-d-l-white.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-d-l-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-d-r-black.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-d-r-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-d-r-white.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-d-r-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-d-white.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-d-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-l-black.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-l-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-l-white.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-l-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-r-black.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-r-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-r-white.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-r-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-u-black.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-u-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-u-l-black.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-u-l-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-u-l-white.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-u-l-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-u-r-black.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-u-r-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-u-r-white.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-u-r-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/arrow-u-white.png
Binary file OrthancExplorer/libs/images/icons-png/arrow-u-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/audio-black.png
Binary file OrthancExplorer/libs/images/icons-png/audio-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/audio-white.png
Binary file OrthancExplorer/libs/images/icons-png/audio-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/back-black.png
Binary file OrthancExplorer/libs/images/icons-png/back-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/back-white.png
Binary file OrthancExplorer/libs/images/icons-png/back-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/bars-black.png
Binary file OrthancExplorer/libs/images/icons-png/bars-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/bars-white.png
Binary file OrthancExplorer/libs/images/icons-png/bars-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/bullets-black.png
Binary file OrthancExplorer/libs/images/icons-png/bullets-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/bullets-white.png
Binary file OrthancExplorer/libs/images/icons-png/bullets-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/calendar-black.png
Binary file OrthancExplorer/libs/images/icons-png/calendar-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/calendar-white.png
Binary file OrthancExplorer/libs/images/icons-png/calendar-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/camera-black.png
Binary file OrthancExplorer/libs/images/icons-png/camera-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/camera-white.png
Binary file OrthancExplorer/libs/images/icons-png/camera-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/carat-d-black.png
Binary file OrthancExplorer/libs/images/icons-png/carat-d-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/carat-d-white.png
Binary file OrthancExplorer/libs/images/icons-png/carat-d-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/carat-l-black.png
Binary file OrthancExplorer/libs/images/icons-png/carat-l-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/carat-l-white.png
Binary file OrthancExplorer/libs/images/icons-png/carat-l-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/carat-r-black.png
Binary file OrthancExplorer/libs/images/icons-png/carat-r-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/carat-r-white.png
Binary file OrthancExplorer/libs/images/icons-png/carat-r-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/carat-u-black.png
Binary file OrthancExplorer/libs/images/icons-png/carat-u-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/carat-u-white.png
Binary file OrthancExplorer/libs/images/icons-png/carat-u-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/check-black.png
Binary file OrthancExplorer/libs/images/icons-png/check-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/check-white.png
Binary file OrthancExplorer/libs/images/icons-png/check-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/clock-black.png
Binary file OrthancExplorer/libs/images/icons-png/clock-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/clock-white.png
Binary file OrthancExplorer/libs/images/icons-png/clock-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/cloud-black.png
Binary file OrthancExplorer/libs/images/icons-png/cloud-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/cloud-white.png
Binary file OrthancExplorer/libs/images/icons-png/cloud-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/comment-black.png
Binary file OrthancExplorer/libs/images/icons-png/comment-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/comment-white.png
Binary file OrthancExplorer/libs/images/icons-png/comment-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/delete-black.png
Binary file OrthancExplorer/libs/images/icons-png/delete-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/delete-white.png
Binary file OrthancExplorer/libs/images/icons-png/delete-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/edit-black.png
Binary file OrthancExplorer/libs/images/icons-png/edit-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/edit-white.png
Binary file OrthancExplorer/libs/images/icons-png/edit-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/eye-black.png
Binary file OrthancExplorer/libs/images/icons-png/eye-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/eye-white.png
Binary file OrthancExplorer/libs/images/icons-png/eye-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/forbidden-black.png
Binary file OrthancExplorer/libs/images/icons-png/forbidden-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/forbidden-white.png
Binary file OrthancExplorer/libs/images/icons-png/forbidden-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/forward-black.png
Binary file OrthancExplorer/libs/images/icons-png/forward-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/forward-white.png
Binary file OrthancExplorer/libs/images/icons-png/forward-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/gear-black.png
Binary file OrthancExplorer/libs/images/icons-png/gear-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/gear-white.png
Binary file OrthancExplorer/libs/images/icons-png/gear-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/grid-black.png
Binary file OrthancExplorer/libs/images/icons-png/grid-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/grid-white.png
Binary file OrthancExplorer/libs/images/icons-png/grid-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/heart-black.png
Binary file OrthancExplorer/libs/images/icons-png/heart-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/heart-white.png
Binary file OrthancExplorer/libs/images/icons-png/heart-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/home-black.png
Binary file OrthancExplorer/libs/images/icons-png/home-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/home-white.png
Binary file OrthancExplorer/libs/images/icons-png/home-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/info-black.png
Binary file OrthancExplorer/libs/images/icons-png/info-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/info-white.png
Binary file OrthancExplorer/libs/images/icons-png/info-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/location-black.png
Binary file OrthancExplorer/libs/images/icons-png/location-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/location-white.png
Binary file OrthancExplorer/libs/images/icons-png/location-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/lock-black.png
Binary file OrthancExplorer/libs/images/icons-png/lock-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/lock-white.png
Binary file OrthancExplorer/libs/images/icons-png/lock-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/mail-black.png
Binary file OrthancExplorer/libs/images/icons-png/mail-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/mail-white.png
Binary file OrthancExplorer/libs/images/icons-png/mail-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/minus-black.png
Binary file OrthancExplorer/libs/images/icons-png/minus-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/minus-white.png
Binary file OrthancExplorer/libs/images/icons-png/minus-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/navigation-black.png
Binary file OrthancExplorer/libs/images/icons-png/navigation-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/navigation-white.png
Binary file OrthancExplorer/libs/images/icons-png/navigation-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/phone-black.png
Binary file OrthancExplorer/libs/images/icons-png/phone-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/phone-white.png
Binary file OrthancExplorer/libs/images/icons-png/phone-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/plus-black.png
Binary file OrthancExplorer/libs/images/icons-png/plus-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/plus-white.png
Binary file OrthancExplorer/libs/images/icons-png/plus-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/power-black.png
Binary file OrthancExplorer/libs/images/icons-png/power-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/power-white.png
Binary file OrthancExplorer/libs/images/icons-png/power-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/recycle-black.png
Binary file OrthancExplorer/libs/images/icons-png/recycle-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/recycle-white.png
Binary file OrthancExplorer/libs/images/icons-png/recycle-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/refresh-black.png
Binary file OrthancExplorer/libs/images/icons-png/refresh-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/refresh-white.png
Binary file OrthancExplorer/libs/images/icons-png/refresh-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/search-black.png
Binary file OrthancExplorer/libs/images/icons-png/search-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/search-white.png
Binary file OrthancExplorer/libs/images/icons-png/search-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/shop-black.png
Binary file OrthancExplorer/libs/images/icons-png/shop-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/shop-white.png
Binary file OrthancExplorer/libs/images/icons-png/shop-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/star-black.png
Binary file OrthancExplorer/libs/images/icons-png/star-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/star-white.png
Binary file OrthancExplorer/libs/images/icons-png/star-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/tag-black.png
Binary file OrthancExplorer/libs/images/icons-png/tag-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/tag-white.png
Binary file OrthancExplorer/libs/images/icons-png/tag-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/user-black.png
Binary file OrthancExplorer/libs/images/icons-png/user-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/user-white.png
Binary file OrthancExplorer/libs/images/icons-png/user-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/video-black.png
Binary file OrthancExplorer/libs/images/icons-png/video-black.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-png/video-white.png
Binary file OrthancExplorer/libs/images/icons-png/video-white.png has changed
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/action-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/action-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/action-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/action-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/alert-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/alert-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,8 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/alert-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/alert-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,8 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-d-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-d-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-d-l-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-d-l-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-d-l-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-d-l-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-d-r-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-d-r-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-d-r-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-d-r-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-d-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-d-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-l-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-l-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-l-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-l-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-r-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-r-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-r-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-r-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-u-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-u-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-u-l-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-u-l-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-u-l-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-u-l-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-u-r-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-u-r-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-u-r-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-u-r-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/arrow-u-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/arrow-u-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/audio-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/audio-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,40 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/audio-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/audio-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,40 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/back-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/back-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/back-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/back-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/bars-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/bars-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,9 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/bars-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/bars-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,9 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/bullets-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/bullets-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,10 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/bullets-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/bullets-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,11 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/calendar-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/calendar-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,39 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/calendar-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/calendar-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,39 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/camera-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/camera-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,9 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/camera-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/camera-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,10 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/carat-d-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/carat-d-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/carat-d-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/carat-d-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/carat-l-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/carat-l-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/carat-l-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/carat-l-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/carat-r-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/carat-r-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/carat-r-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/carat-r-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/carat-u-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/carat-u-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/carat-u-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/carat-u-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/check-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/check-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/check-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/check-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/clock-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/clock-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,38 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/clock-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/clock-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,38 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/cloud-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/cloud-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,9 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/cloud-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/cloud-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,9 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/comment-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/comment-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/comment-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/comment-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/delete-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/delete-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/delete-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/delete-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/edit-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/edit-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/edit-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/edit-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/eye-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/eye-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,8 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/eye-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/eye-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,8 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/forbidden-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/forbidden-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,40 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/forbidden-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/forbidden-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,40 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/forward-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/forward-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/forward-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/forward-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/gear-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/gear-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,52 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/gear-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/gear-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,52 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/grid-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/grid-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,44 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/grid-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/grid-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,44 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/heart-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/heart-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/heart-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/heart-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,8 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/home-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/home-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/home-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/home-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/info-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/info-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,38 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/info-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/info-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,38 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/location-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/location-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,8 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/location-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/location-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,8 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/lock-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/lock-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,8 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/lock-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/lock-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,9 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/mail-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/mail-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/mail-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/mail-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/minus-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/minus-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/minus-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/minus-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/navigation-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/navigation-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/navigation-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/navigation-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/phone-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/phone-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,12 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/phone-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/phone-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,12 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/plus-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/plus-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/plus-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/plus-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/power-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/power-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,12 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/power-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/power-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,12 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/recycle-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/recycle-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,8 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/recycle-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/recycle-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,9 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/refresh-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/refresh-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,40 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/refresh-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/refresh-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,40 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/search-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/search-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,9 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/search-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/search-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,9 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/shop-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/shop-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,9 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/shop-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/shop-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,9 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/star-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/star-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/star-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/star-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/tag-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/tag-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/tag-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/tag-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,37 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/user-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/user-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,41 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/user-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/user-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,41 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/video-black.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/video-black.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,7 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/images/icons-svg/video-white.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancExplorer/libs/images/icons-svg/video-white.svg Wed Dec 26 16:58:21 2018 +0100
@@ -0,0 +1,8 @@
+
+
+
+
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/jquery-file-upload/css/jquery.fileupload-ui.css
--- a/OrthancExplorer/libs/jquery-file-upload/css/jquery.fileupload-ui.css Wed Dec 26 11:15:17 2018 +0100
+++ b/OrthancExplorer/libs/jquery-file-upload/css/jquery.fileupload-ui.css Wed Dec 26 16:58:21 2018 +0100
@@ -1,6 +1,6 @@
-@charset 'UTF-8';
+@charset "UTF-8";
/*
- * jQuery File Upload UI Plugin CSS 6.3
+ * jQuery File Upload UI Plugin CSS 8.1
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2010, Sebastian Tschan
@@ -13,19 +13,16 @@
.fileinput-button {
position: relative;
overflow: hidden;
- float: left;
- margin-right: 4px;
}
.fileinput-button input {
position: absolute;
top: 0;
right: 0;
margin: 0;
- border: solid transparent;
- border-width: 0 0 100px 200px;
opacity: 0;
filter: alpha(opacity=0);
- -moz-transform: translate(-300px, 0) scale(4);
+ transform: translate(-300px, 0) scale(4);
+ font-size: 23px;
direction: ltr;
cursor: pointer;
}
@@ -33,52 +30,38 @@
.fileupload-buttonbar .toggle {
margin-bottom: 5px;
}
-.files .progress {
- width: 200px;
-}
.progress-animated .bar {
background: url(../img/progressbar.gif) !important;
filter: none;
}
.fileupload-loading {
- position: absolute;
- left: 50%;
- width: 128px;
- height: 128px;
+ float: right;
+ width: 32px;
+ height: 32px;
background: url(../img/loading.gif) center no-repeat;
+ background-size: contain;
display: none;
}
.fileupload-processing .fileupload-loading {
display: block;
}
-
-/* Fix for IE 6: */
-*html .fileinput-button {
- line-height: 22px;
- margin: 1px -3px 0 0;
+.files audio,
+.files video {
+ max-width: 300px;
}
-/* Fix for IE 7: */
-*+html .fileinput-button {
- margin: 1px 0 0 0;
-}
-
-@media (max-width: 480px) {
+@media (max-width: 767px) {
+ .fileupload-buttonbar .toggle,
+ .files .toggle,
.files .btn span {
display: none;
}
- .files .preview * {
- width: 40px;
- }
- .files .name * {
+ .files .name {
width: 80px;
- display: inline-block;
word-wrap: break-word;
}
- .files .progress {
- width: 20px;
- }
- .files .delete {
- width: 60px;
+ .files audio,
+ .files video {
+ max-width: 80px;
}
}
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/jquery-file-upload/css/style.css
--- a/OrthancExplorer/libs/jquery-file-upload/css/style.css Wed Dec 26 11:15:17 2018 +0100
+++ b/OrthancExplorer/libs/jquery-file-upload/css/style.css Wed Dec 26 16:58:21 2018 +0100
@@ -1,15 +1,19 @@
-@charset 'UTF-8';
+@charset "UTF-8";
/*
- * jQuery File Upload Plugin CSS Example 1.0
+ * jQuery File Upload Plugin CSS Example 8.0
* https://github.com/blueimp/jQuery-File-Upload
*
- * Copyright 2012, Sebastian Tschan
+ * Copyright 2013, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*/
-body{
+body {
padding-top: 60px;
}
+
+.ng-cloak {
+ display: none;
+}
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/jquery-file-upload/js/cors/jquery.postmessage-transport.js
--- a/OrthancExplorer/libs/jquery-file-upload/js/cors/jquery.postmessage-transport.js Wed Dec 26 11:15:17 2018 +0100
+++ b/OrthancExplorer/libs/jquery-file-upload/js/cors/jquery.postmessage-transport.js Wed Dec 26 16:58:21 2018 +0100
@@ -1,5 +1,5 @@
/*
- * jQuery postMessage Transport Plugin 1.1
+ * jQuery postMessage Transport Plugin 1.1.1
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2011, Sebastian Tschan
@@ -64,8 +64,9 @@
xhrUpload = options.xhr().upload;
return {
send: function (_, completeCallback) {
+ counter += 1;
var message = {
- id: 'postmessage-transport-' + (counter += 1)
+ id: 'postmessage-transport-' + counter
},
eventName = 'message.' + message.id;
iframe = $(
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/jquery-file-upload/js/cors/jquery.xdr-transport.js
--- a/OrthancExplorer/libs/jquery-file-upload/js/cors/jquery.xdr-transport.js Wed Dec 26 11:15:17 2018 +0100
+++ b/OrthancExplorer/libs/jquery-file-upload/js/cors/jquery.xdr-transport.js Wed Dec 26 16:58:21 2018 +0100
@@ -1,5 +1,5 @@
/*
- * jQuery XDomainRequest Transport Plugin 1.1.2
+ * jQuery XDomainRequest Transport Plugin 1.1.3
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2011, Sebastian Tschan
@@ -36,6 +36,7 @@
var xdr;
return {
send: function (headers, completeCallback) {
+ var addParamChar = /\?/.test(s.url) ? '&' : '?';
function callback(status, statusText, responses, responseHeaders) {
xdr.onload = xdr.onerror = xdr.ontimeout = $.noop;
xdr = null;
@@ -44,12 +45,13 @@
xdr = new XDomainRequest();
// XDomainRequest only supports GET and POST:
if (s.type === 'DELETE') {
- s.url = s.url + (/\?/.test(s.url) ? '&' : '?') +
- '_method=DELETE';
+ s.url = s.url + addParamChar + '_method=DELETE';
s.type = 'POST';
} else if (s.type === 'PUT') {
- s.url = s.url + (/\?/.test(s.url) ? '&' : '?') +
- '_method=PUT';
+ s.url = s.url + addParamChar + '_method=PUT';
+ s.type = 'POST';
+ } else if (s.type === 'PATCH') {
+ s.url = s.url + addParamChar + '_method=PATCH';
s.type = 'POST';
}
xdr.open(s.type, s.url);
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/jquery-file-upload/js/jquery.fileupload-ui.js
--- a/OrthancExplorer/libs/jquery-file-upload/js/jquery.fileupload-ui.js Wed Dec 26 11:15:17 2018 +0100
+++ b/OrthancExplorer/libs/jquery-file-upload/js/jquery.fileupload-ui.js Wed Dec 26 16:58:21 2018 +0100
@@ -1,5 +1,5 @@
/*
- * jQuery File Upload User Interface Plugin 6.9.1
+ * jQuery File Upload User Interface Plugin 8.5.0
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2010, Sebastian Tschan
@@ -10,7 +10,7 @@
*/
/*jslint nomen: true, unparam: true, regexp: true */
-/*global define, window, document, URL, webkitURL, FileReader */
+/*global define, window, URL, webkitURL, FileReader */
(function (factory) {
'use strict';
@@ -19,53 +19,36 @@
define([
'jquery',
'tmpl',
- 'load-image',
- './jquery.fileupload-fp'
+ './jquery.fileupload-image',
+ './jquery.fileupload-audio',
+ './jquery.fileupload-video',
+ './jquery.fileupload-validate'
], factory);
} else {
// Browser globals:
factory(
window.jQuery,
- window.tmpl,
- window.loadImage
+ window.tmpl
);
}
}(function ($, tmpl, loadImage) {
'use strict';
- // The UI version extends the FP (file processing) version or the basic
- // file upload widget and adds complete user interface interaction:
- var parentWidget = ($.blueimpFP || $.blueimp).fileupload;
- $.widget('blueimpUI.fileupload', parentWidget, {
+ $.blueimp.fileupload.prototype._specialOptions.push(
+ 'filesContainer',
+ 'uploadTemplateId',
+ 'downloadTemplateId'
+ );
+
+ // The UI version extends the file upload widget
+ // and adds complete user interface interaction:
+ $.widget('blueimp.fileupload', $.blueimp.fileupload, {
options: {
// By default, files added to the widget are uploaded as soon
// as the user clicks on the start buttons. To enable automatic
// uploads, set the following option to true:
autoUpload: false,
- // The following option limits the number of files that are
- // allowed to be uploaded using this widget:
- maxNumberOfFiles: undefined,
- // The maximum allowed file size:
- maxFileSize: undefined,
- // The minimum allowed file size:
- minFileSize: undefined,
- // The regular expression for allowed file types, matches
- // against either file type or file name:
- acceptFileTypes: /.+$/i,
- // The regular expression to define for which files a preview
- // image is shown, matched against the file type:
- previewSourceFileTypes: /^image\/(gif|jpeg|png)$/,
- // The maximum file size of images that are to be displayed as preview:
- previewSourceMaxFileSize: 5000000, // 5MB
- // The maximum width of the preview images:
- previewMaxWidth: 80,
- // The maximum height of the preview images:
- previewMaxHeight: 80,
- // By default, preview images are displayed as canvas elements
- // if supported by the browser. Set the following option to false
- // to always display preview images as img elements:
- previewAsCanvas: true,
// The ID of the upload template:
uploadTemplateId: 'template-upload',
// The ID of the download template:
@@ -80,28 +63,43 @@
// option of the $.ajax upload requests:
dataType: 'json',
+ // Function returning the current number of files,
+ // used by the maxNumberOfFiles validation:
+ getNumberOfFiles: function () {
+ return this.filesContainer.children().length;
+ },
+
+ // Callback to retrieve the list of files from the server response:
+ getFilesFromResponse: function (data) {
+ if (data.result && $.isArray(data.result.files)) {
+ return data.result.files;
+ }
+ return [];
+ },
+
// The add callback is invoked as soon as files are added to the fileupload
// widget (via file input selection, drag & drop or add API call).
// See the basic file upload widget for more information:
add: function (e, data) {
- var that = $(this).data('fileupload'),
+ var $this = $(this),
+ that = $this.data('blueimp-fileupload') ||
+ $this.data('fileupload'),
options = that.options,
files = data.files;
- $(this).fileupload('process', data).done(function () {
- that._adjustMaxNumberOfFiles(-files.length);
- data.isAdjusted = true;
- data.files.valid = data.isValidated = that._validate(files);
+ data.process(function () {
+ return $this.fileupload('process', data);
+ }).always(function () {
data.context = that._renderUpload(files).data('data', data);
+ that._renderPreviews(data);
options.filesContainer[
options.prependFiles ? 'prepend' : 'append'
](data.context);
- that._renderPreviews(files, data.context);
that._forceReflow(data.context);
that._transition(data.context).done(
function () {
if ((that._trigger('added', e, data) !== false) &&
(options.autoUpload || data.autoUpload) &&
- data.autoUpload !== false && data.isValidated) {
+ data.autoUpload !== false && !data.files.error) {
data.submit();
}
}
@@ -110,15 +108,8 @@
},
// Callback for the start of each file upload request:
send: function (e, data) {
- var that = $(this).data('fileupload');
- if (!data.isValidated) {
- if (!data.isAdjusted) {
- that._adjustMaxNumberOfFiles(-data.files.length);
- }
- if (!that._validate(data.files)) {
- return false;
- }
- }
+ var that = $(this).data('blueimp-fileupload') ||
+ $(this).data('fileupload');
if (data.context && data.dataType &&
data.dataType.substr(0, 6) === 'iframe') {
// Iframe Transport does not support progress events.
@@ -138,54 +129,63 @@
},
// Callback for successful uploads:
done: function (e, data) {
- var that = $(this).data('fileupload'),
- template;
+ var that = $(this).data('blueimp-fileupload') ||
+ $(this).data('fileupload'),
+ getFilesFromResponse = data.getFilesFromResponse ||
+ that.options.getFilesFromResponse,
+ files = getFilesFromResponse(data),
+ template,
+ deferred;
if (data.context) {
data.context.each(function (index) {
- var file = ($.isArray(data.result) &&
- data.result[index]) || {error: 'emptyResult'};
- if (file.error) {
- that._adjustMaxNumberOfFiles(1);
- }
+ var file = files[index] ||
+ {error: 'Empty file upload result'},
+ deferred = that._addFinishedDeferreds();
that._transition($(this)).done(
function () {
var node = $(this);
template = that._renderDownload([file])
- .css('height', node.height())
.replaceAll(node);
that._forceReflow(template);
that._transition(template).done(
function () {
data.context = $(this);
that._trigger('completed', e, data);
+ that._trigger('finished', e, data);
+ deferred.resolve();
}
);
}
);
});
} else {
- template = that._renderDownload(data.result)
+ template = that._renderDownload(files)
.appendTo(that.options.filesContainer);
that._forceReflow(template);
+ deferred = that._addFinishedDeferreds();
that._transition(template).done(
function () {
data.context = $(this);
that._trigger('completed', e, data);
+ that._trigger('finished', e, data);
+ deferred.resolve();
}
);
}
},
// Callback for failed (abort or error) uploads:
fail: function (e, data) {
- var that = $(this).data('fileupload'),
- template;
- that._adjustMaxNumberOfFiles(data.files.length);
+ var that = $(this).data('blueimp-fileupload') ||
+ $(this).data('fileupload'),
+ template,
+ deferred;
if (data.context) {
data.context.each(function (index) {
if (data.errorThrown !== 'abort') {
var file = data.files[index];
file.error = file.error || data.errorThrown ||
true;
+ deferred = that._addFinishedDeferreds();
that._transition($(this)).done(
function () {
var node = $(this);
@@ -196,39 +196,48 @@
function () {
data.context = $(this);
that._trigger('failed', e, data);
+ that._trigger('finished', e, data);
+ deferred.resolve();
}
);
}
);
} else {
+ deferred = that._addFinishedDeferreds();
that._transition($(this)).done(
function () {
$(this).remove();
that._trigger('failed', e, data);
+ that._trigger('finished', e, data);
+ deferred.resolve();
}
);
}
});
} else if (data.errorThrown !== 'abort') {
- that._adjustMaxNumberOfFiles(-data.files.length);
data.context = that._renderUpload(data.files)
.appendTo(that.options.filesContainer)
.data('data', data);
that._forceReflow(data.context);
+ deferred = that._addFinishedDeferreds();
that._transition(data.context).done(
function () {
data.context = $(this);
that._trigger('failed', e, data);
+ that._trigger('finished', e, data);
+ deferred.resolve();
}
);
} else {
that._trigger('failed', e, data);
+ that._trigger('finished', e, data);
+ that._addFinishedDeferreds().resolve();
}
},
// Callback for upload progress events:
progress: function (e, data) {
if (data.context) {
- var progress = parseInt(data.loaded / data.total * 100, 10);
+ var progress = Math.floor(data.loaded / data.total * 100);
data.context.find('.progress')
.attr('aria-valuenow', progress)
.find('.bar').css(
@@ -240,13 +249,14 @@
// Callback for global upload progress events:
progressall: function (e, data) {
var $this = $(this),
- progress = parseInt(data.loaded / data.total * 100, 10),
+ progress = Math.floor(data.loaded / data.total * 100),
globalProgressNode = $this.find('.fileupload-progress'),
extendedProgressNode = globalProgressNode
.find('.progress-extended');
if (extendedProgressNode.length) {
extendedProgressNode.html(
- $this.data('fileupload')._renderExtendedProgress(data)
+ ($this.data('blueimp-fileupload') || $this.data('fileupload'))
+ ._renderExtendedProgress(data)
);
}
globalProgressNode
@@ -259,7 +269,9 @@
},
// Callback for uploads start, equivalent to the global ajaxStart event:
start: function (e) {
- var that = $(this).data('fileupload');
+ var that = $(this).data('blueimp-fileupload') ||
+ $(this).data('fileupload');
+ that._resetFinishedDeferreds();
that._transition($(this).find('.fileupload-progress')).done(
function () {
that._trigger('started', e);
@@ -268,33 +280,65 @@
},
// Callback for uploads stop, equivalent to the global ajaxStop event:
stop: function (e) {
- var that = $(this).data('fileupload');
+ var that = $(this).data('blueimp-fileupload') ||
+ $(this).data('fileupload'),
+ deferred = that._addFinishedDeferreds();
+ $.when.apply($, that._getFinishedDeferreds())
+ .done(function () {
+ that._trigger('stopped', e);
+ });
that._transition($(this).find('.fileupload-progress')).done(
function () {
$(this).find('.progress')
.attr('aria-valuenow', '0')
.find('.bar').css('width', '0%');
$(this).find('.progress-extended').html(' ');
- that._trigger('stopped', e);
+ deferred.resolve();
}
);
},
+ processstart: function () {
+ $(this).addClass('fileupload-processing');
+ },
+ processstop: function () {
+ $(this).removeClass('fileupload-processing');
+ },
// Callback for file deletion:
destroy: function (e, data) {
- var that = $(this).data('fileupload');
+ var that = $(this).data('blueimp-fileupload') ||
+ $(this).data('fileupload'),
+ removeNode = function () {
+ that._transition(data.context).done(
+ function () {
+ $(this).remove();
+ that._trigger('destroyed', e, data);
+ }
+ );
+ };
if (data.url) {
- $.ajax(data);
- that._adjustMaxNumberOfFiles(1);
+ $.ajax(data).done(removeNode);
+ } else {
+ removeNode();
}
- that._transition(data.context).done(
- function () {
- $(this).remove();
- that._trigger('destroyed', e, data);
- }
- );
}
},
+ _resetFinishedDeferreds: function () {
+ this._finishedUploads = [];
+ },
+
+ _addFinishedDeferreds: function (deferred) {
+ if (!deferred) {
+ deferred = $.Deferred();
+ }
+ this._finishedUploads.push(deferred);
+ return deferred;
+ },
+
+ _getFinishedDeferreds: function () {
+ return this._finishedUploads;
+ },
+
// Link handler, that allows to download files
// by drag & drop of the links to the desktop:
_enableDragToDesktop: function () {
@@ -308,21 +352,10 @@
'DownloadURL',
[type, name, url].join(':')
);
- } catch (err) {}
+ } catch (ignore) {}
});
},
- _adjustMaxNumberOfFiles: function (operand) {
- if (typeof this.options.maxNumberOfFiles === 'number') {
- this.options.maxNumberOfFiles += operand;
- if (this.options.maxNumberOfFiles < 1) {
- this._disableFileInputButton();
- } else {
- this._enableFileInputButton();
- }
- }
- },
-
_formatFileSize: function (bytes) {
if (typeof bytes !== 'number') {
return '';
@@ -349,12 +382,12 @@
if (bits >= 1000) {
return (bits / 1000).toFixed(2) + ' kbit/s';
}
- return bits + ' bit/s';
+ return bits.toFixed(2) + ' bit/s';
},
_formatTime: function (seconds) {
var date = new Date(seconds * 1000),
- days = parseInt(seconds / 86400, 10);
+ days = Math.floor(seconds / 86400);
days = days ? days + 'd ' : '';
return days +
('0' + date.getUTCHours()).slice(-2) + ':' +
@@ -378,46 +411,6 @@
this._formatFileSize(data.total);
},
- _hasError: function (file) {
- if (file.error) {
- return file.error;
- }
- // The number of added files is subtracted from
- // maxNumberOfFiles before validation, so we check if
- // maxNumberOfFiles is below 0 (instead of below 1):
- if (this.options.maxNumberOfFiles < 0) {
- return 'maxNumberOfFiles';
- }
- // Files are accepted if either the file type or the file name
- // matches against the acceptFileTypes regular expression, as
- // only browsers with support for the File API report the type:
- if (!(this.options.acceptFileTypes.test(file.type) ||
- this.options.acceptFileTypes.test(file.name))) {
- return 'acceptFileTypes';
- }
- if (this.options.maxFileSize &&
- file.size > this.options.maxFileSize) {
- return 'maxFileSize';
- }
- if (typeof file.size === 'number' &&
- file.size < this.options.minFileSize) {
- return 'minFileSize';
- }
- return null;
- },
-
- _validate: function (files) {
- var that = this,
- valid = !!files.length;
- $.each(files, function (index, file) {
- file.error = that._hasError(file);
- if (file.error) {
- valid = false;
- }
- });
- return valid;
- },
-
_renderTemplate: function (func, files) {
if (!func) {
return $();
@@ -433,53 +426,10 @@
return $(this.options.templatesContainer).html(result).children();
},
- _renderPreview: function (file, node) {
- var that = this,
- options = this.options,
- dfd = $.Deferred();
- return ((loadImage && loadImage(
- file,
- function (img) {
- node.append(img);
- that._forceReflow(node);
- that._transition(node).done(function () {
- dfd.resolveWith(node);
- });
- if (!$.contains(document.body, node[0])) {
- // If the element is not part of the DOM,
- // transition events are not triggered,
- // so we have to resolve manually:
- dfd.resolveWith(node);
- }
- },
- {
- maxWidth: options.previewMaxWidth,
- maxHeight: options.previewMaxHeight,
- canvas: options.previewAsCanvas
- }
- )) || dfd.resolveWith(node)) && dfd;
- },
-
- _renderPreviews: function (files, nodes) {
- var that = this,
- options = this.options;
- nodes.find('.preview span').each(function (index, element) {
- var file = files[index];
- if (options.previewSourceFileTypes.test(file.type) &&
- ($.type(options.previewSourceMaxFileSize) !== 'number' ||
- file.size < options.previewSourceMaxFileSize)) {
- that._processingQueue = that._processingQueue.pipe(function () {
- var dfd = $.Deferred();
- that._renderPreview(file, $(element)).done(
- function () {
- dfd.resolveWith(that);
- }
- );
- return dfd.promise();
- });
- }
+ _renderPreviews: function (data) {
+ data.context.find('.preview').each(function (index, elm) {
+ $(elm).append(data.files[index].preview);
});
- return this._processingQueue;
},
_renderUpload: function (files) {
@@ -498,7 +448,7 @@
_startHandler: function (e) {
e.preventDefault();
- var button = $(this),
+ var button = $(e.currentTarget),
template = button.closest('.template-upload'),
data = template.data('data');
if (data && data.submit && !data.jqXHR && data.submit()) {
@@ -508,11 +458,11 @@
_cancelHandler: function (e) {
e.preventDefault();
- var template = $(this).closest('.template-upload'),
+ var template = $(e.currentTarget).closest('.template-upload'),
data = template.data('data') || {};
if (!data.jqXHR) {
data.errorThrown = 'abort';
- e.data.fileupload._trigger('fail', e, data);
+ this._trigger('fail', e, data);
} else {
data.jqXHR.abort();
}
@@ -520,13 +470,11 @@
_deleteHandler: function (e) {
e.preventDefault();
- var button = $(this);
- e.data.fileupload._trigger('destroy', e, {
+ var button = $(e.currentTarget);
+ this._trigger('destroy', e, $.extend({
context: button.closest('.template-download'),
- url: button.attr('data-url'),
- type: button.attr('data-type') || 'DELETE',
- dataType: e.data.fileupload.options.dataType
- });
+ type: 'DELETE'
+ }, button.data()));
},
_forceReflow: function (node) {
@@ -536,7 +484,7 @@
_transition: function (node) {
var dfd = $.Deferred();
- if ($.support.transition && node.hasClass('fade')) {
+ if ($.support.transition && node.hasClass('fade') && node.is(':visible')) {
node.bind(
$.support.transition.end,
function (e) {
@@ -557,75 +505,65 @@
_initButtonBarEventHandlers: function () {
var fileUploadButtonBar = this.element.find('.fileupload-buttonbar'),
- filesList = this.options.filesContainer,
- ns = this.options.namespace;
- fileUploadButtonBar.find('.start')
- .bind('click.' + ns, function (e) {
+ filesList = this.options.filesContainer;
+ this._on(fileUploadButtonBar.find('.start'), {
+ click: function (e) {
+ e.preventDefault();
+ filesList.find('.start').click();
+ }
+ });
+ this._on(fileUploadButtonBar.find('.cancel'), {
+ click: function (e) {
e.preventDefault();
- filesList.find('.start button').click();
- });
- fileUploadButtonBar.find('.cancel')
- .bind('click.' + ns, function (e) {
+ filesList.find('.cancel').click();
+ }
+ });
+ this._on(fileUploadButtonBar.find('.delete'), {
+ click: function (e) {
e.preventDefault();
- filesList.find('.cancel button').click();
- });
- fileUploadButtonBar.find('.delete')
- .bind('click.' + ns, function (e) {
- e.preventDefault();
- filesList.find('.delete input:checked')
- .siblings('button').click();
+ filesList.find('.toggle:checked')
+ .closest('.template-download')
+ .find('.delete').click();
fileUploadButtonBar.find('.toggle')
.prop('checked', false);
- });
- fileUploadButtonBar.find('.toggle')
- .bind('change.' + ns, function (e) {
- filesList.find('.delete input').prop(
+ }
+ });
+ this._on(fileUploadButtonBar.find('.toggle'), {
+ change: function (e) {
+ filesList.find('.toggle').prop(
'checked',
- $(this).is(':checked')
+ $(e.currentTarget).is(':checked')
);
- });
+ }
+ });
},
_destroyButtonBarEventHandlers: function () {
- this.element.find('.fileupload-buttonbar button')
- .unbind('click.' + this.options.namespace);
- this.element.find('.fileupload-buttonbar .toggle')
- .unbind('change.' + this.options.namespace);
+ this._off(
+ this.element.find('.fileupload-buttonbar')
+ .find('.start, .cancel, .delete'),
+ 'click'
+ );
+ this._off(
+ this.element.find('.fileupload-buttonbar .toggle'),
+ 'change.'
+ );
},
_initEventHandlers: function () {
- parentWidget.prototype._initEventHandlers.call(this);
- var eventData = {fileupload: this};
- this.options.filesContainer
- .delegate(
- '.start button',
- 'click.' + this.options.namespace,
- eventData,
- this._startHandler
- )
- .delegate(
- '.cancel button',
- 'click.' + this.options.namespace,
- eventData,
- this._cancelHandler
- )
- .delegate(
- '.delete button',
- 'click.' + this.options.namespace,
- eventData,
- this._deleteHandler
- );
+ this._super();
+ this._on(this.options.filesContainer, {
+ 'click .start': this._startHandler,
+ 'click .cancel': this._cancelHandler,
+ 'click .delete': this._deleteHandler
+ });
this._initButtonBarEventHandlers();
},
_destroyEventHandlers: function () {
- var options = this.options;
this._destroyButtonBarEventHandlers();
- options.filesContainer
- .undelegate('.start button', 'click.' + options.namespace)
- .undelegate('.cancel button', 'click.' + options.namespace)
- .undelegate('.delete button', 'click.' + options.namespace);
- parentWidget.prototype._destroyEventHandlers.call(this);
+ this._off(this.options.filesContainer, 'click');
+ this._super();
},
_enableFileInputButton: function () {
@@ -642,7 +580,7 @@
_initTemplates: function () {
var options = this.options;
- options.templatesContainer = document.createElement(
+ options.templatesContainer = this.document[0].createElement(
options.filesContainer.prop('nodeName')
);
if (tmpl) {
@@ -665,36 +603,37 @@
},
_initSpecialOptions: function () {
- parentWidget.prototype._initSpecialOptions.call(this);
+ this._super();
this._initFilesContainer();
this._initTemplates();
},
_create: function () {
- parentWidget.prototype._create.call(this);
- this._refreshOptionsList.push(
- 'filesContainer',
- 'uploadTemplateId',
- 'downloadTemplateId'
- );
- if (!$.blueimpFP) {
- this._processingQueue = $.Deferred().resolveWith(this).promise();
- this.process = function () {
- return this._processingQueue;
- };
+ this._super();
+ this._resetFinishedDeferreds();
+ if (!$.support.fileInput) {
+ this._disableFileInputButton();
}
},
enable: function () {
- parentWidget.prototype.enable.call(this);
- this.element.find('input, button').prop('disabled', false);
- this._enableFileInputButton();
+ var wasDisabled = false;
+ if (this.options.disabled) {
+ wasDisabled = true;
+ }
+ this._super();
+ if (wasDisabled) {
+ this.element.find('input, button').prop('disabled', false);
+ this._enableFileInputButton();
+ }
},
disable: function () {
- this.element.find('input, button').prop('disabled', true);
- this._disableFileInputButton();
- parentWidget.prototype.disable.call(this);
+ if (!this.options.disabled) {
+ this.element.find('input, button').prop('disabled', true);
+ this._disableFileInputButton();
+ }
+ this._super();
}
});
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/jquery-file-upload/js/jquery.fileupload.js
--- a/OrthancExplorer/libs/jquery-file-upload/js/jquery.fileupload.js Wed Dec 26 11:15:17 2018 +0100
+++ b/OrthancExplorer/libs/jquery-file-upload/js/jquery.fileupload.js Wed Dec 26 16:58:21 2018 +0100
@@ -1,5 +1,5 @@
/*
- * jQuery File Upload Plugin 5.12
+ * jQuery File Upload Plugin 5.32.0
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2010, Sebastian Tschan
@@ -10,7 +10,7 @@
*/
/*jslint nomen: true, unparam: true, regexp: true */
-/*global define, window, document, Blob, FormData, location */
+/*global define, window, document, location, File, Blob, FormData */
(function (factory) {
'use strict';
@@ -27,12 +27,28 @@
}(function ($) {
'use strict';
+ // Detect file input support, based on
+ // http://viljamis.com/blog/2012/file-upload-support-on-mobile/
+ $.support.fileInput = !(new RegExp(
+ // Handle devices which give false positives for the feature detection:
+ '(Android (1\\.[0156]|2\\.[01]))' +
+ '|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)' +
+ '|(w(eb)?OSBrowser)|(webOS)' +
+ '|(Kindle/(1\\.0|2\\.[05]|3\\.0))'
+ ).test(window.navigator.userAgent) ||
+ // Feature detection for all other devices:
+ $('').prop('disabled'));
+
// The FileReader API is not actually used, but works as feature detection,
// as e.g. Safari supports XHR file uploads via the FormData API,
// but not non-multipart XHR file uploads:
$.support.xhrFileUpload = !!(window.XMLHttpRequestUpload && window.FileReader);
$.support.xhrFormDataFileUpload = !!window.FormData;
+ // Detect support for Blob slicing (required for chunked uploads):
+ $.support.blobSlice = window.Blob && (Blob.prototype.slice ||
+ Blob.prototype.webkitSlice || Blob.prototype.mozSlice);
+
// The fileupload widget listens for change events on file input fields defined
// via fileInput setting and paste or drop events of the given dropZone.
// In addition to the default jQuery Widget methods, the fileupload widget
@@ -44,17 +60,16 @@
$.widget('blueimp.fileupload', {
options: {
- // The namespace used for event handler binding on the dropZone and
- // fileInput collections.
- // If not set, the name of the widget ("fileupload") is used.
- namespace: undefined,
- // The drop target collection, by the default the complete document.
- // Set to null or an empty collection to disable drag & drop support:
+ // The drop target element(s), by the default the complete document.
+ // Set to null to disable drag & drop support:
dropZone: $(document),
- // The file input field collection, that is listened for change events.
+ // The paste target element(s), by the default the complete document.
+ // Set to null to disable paste support:
+ pasteZone: $(document),
+ // The file input field(s), that are listened to for change events.
// If undefined, it is set to the file input fields inside
// of the widget element on plugin initialization.
- // Set to null or an empty collection to disable the change listener.
+ // Set to null to disable the change listener.
fileInput: undefined,
// By default, the file input field is replaced with a clone after
// each input field change event. This is required for iframe transport
@@ -113,6 +128,25 @@
progressInterval: 100,
// Interval in milliseconds to calculate progress bitrate:
bitrateInterval: 500,
+ // By default, uploads are started automatically when adding files:
+ autoUpload: true,
+
+ // Error and info messages:
+ messages: {
+ uploadedBytes: 'Uploaded bytes exceed file size'
+ },
+
+ // Translation function, gets the message key to be translated
+ // and an object with context specific data as arguments:
+ i18n: function (message, context) {
+ message = this.messages[message] || message.toString();
+ if (context) {
+ $.each(context, function (key, value) {
+ message = message.replace('{' + key + '}', value);
+ });
+ }
+ return message;
+ },
// Additional form data to be sent along with the file uploads can be set
// using this option, which accepts an array of objects with name and
@@ -126,48 +160,81 @@
// The add callback is invoked as soon as files are added to the fileupload
// widget (via file input selection, drag & drop, paste or add API call).
// If the singleFileUploads option is enabled, this callback will be
- // called once for each file in the selection for XHR file uplaods, else
+ // called once for each file in the selection for XHR file uploads, else
// once for each file selection.
+ //
// The upload starts when the submit method is invoked on the data parameter.
// The data object contains a files property holding the added files
- // and allows to override plugin options as well as define ajax settings.
+ // and allows you to override plugin options as well as define ajax settings.
+ //
// Listeners for this callback can also be bound the following way:
// .bind('fileuploadadd', func);
+ //
// data.submit() returns a Promise object and allows to attach additional
// handlers using jQuery's Deferred callbacks:
// data.submit().done(func).fail(func).always(func);
add: function (e, data) {
- data.submit();
+ if (data.autoUpload || (data.autoUpload !== false &&
+ $(this).fileupload('option', 'autoUpload'))) {
+ data.process().done(function () {
+ data.submit();
+ });
+ }
},
// Other callbacks:
+
// Callback for the submit event of each file upload:
// submit: function (e, data) {}, // .bind('fileuploadsubmit', func);
+
// Callback for the start of each file upload request:
// send: function (e, data) {}, // .bind('fileuploadsend', func);
+
// Callback for successful uploads:
// done: function (e, data) {}, // .bind('fileuploaddone', func);
+
// Callback for failed (abort or error) uploads:
// fail: function (e, data) {}, // .bind('fileuploadfail', func);
+
// Callback for completed (success, abort or error) requests:
// always: function (e, data) {}, // .bind('fileuploadalways', func);
+
// Callback for upload progress events:
// progress: function (e, data) {}, // .bind('fileuploadprogress', func);
+
// Callback for global upload progress events:
// progressall: function (e, data) {}, // .bind('fileuploadprogressall', func);
+
// Callback for uploads start, equivalent to the global ajaxStart event:
// start: function (e) {}, // .bind('fileuploadstart', func);
+
// Callback for uploads stop, equivalent to the global ajaxStop event:
// stop: function (e) {}, // .bind('fileuploadstop', func);
- // Callback for change events of the fileInput collection:
+
+ // Callback for change events of the fileInput(s):
// change: function (e, data) {}, // .bind('fileuploadchange', func);
- // Callback for paste events to the dropZone collection:
+
+ // Callback for paste events to the pasteZone(s):
// paste: function (e, data) {}, // .bind('fileuploadpaste', func);
- // Callback for drop events of the dropZone collection:
+
+ // Callback for drop events of the dropZone(s):
// drop: function (e, data) {}, // .bind('fileuploaddrop', func);
- // Callback for dragover events of the dropZone collection:
+
+ // Callback for dragover events of the dropZone(s):
// dragover: function (e) {}, // .bind('fileuploaddragover', func);
+ // Callback for the start of each chunk upload request:
+ // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func);
+
+ // Callback for successful chunk uploads:
+ // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func);
+
+ // Callback for failed (abort or error) chunk uploads:
+ // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func);
+
+ // Callback for completed (success, abort or error) chunk upload requests:
+ // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func);
+
// The plugin options are used as settings object for the ajax calls.
// The following are jQuery ajax settings required for the file uploads:
processData: false,
@@ -175,17 +242,23 @@
cache: false
},
- // A list of options that require a refresh after assigning a new value:
- _refreshOptionsList: [
- 'namespace',
+ // A list of options that require reinitializing event listeners and/or
+ // special initialization code:
+ _specialOptions: [
+ 'fileInput',
'dropZone',
- 'fileInput',
+ 'pasteZone',
'multipart',
'forceIframeTransport'
],
+ _blobSlice: $.support.blobSlice && function () {
+ var slice = this.slice || this.webkitSlice || this.mozSlice;
+ return slice.apply(this, arguments);
+ },
+
_BitrateTimer: function () {
- this.timestamp = +(new Date());
+ this.timestamp = ((Date.now) ? Date.now() : (new Date()).getTime());
this.loaded = 0;
this.bitrate = 0;
this.getBitrate = function (now, loaded, interval) {
@@ -210,10 +283,10 @@
if (typeof options.formData === 'function') {
return options.formData(options.form);
}
- if ($.isArray(options.formData)) {
+ if ($.isArray(options.formData)) {
return options.formData;
}
- if (options.formData) {
+ if ($.type(options.formData) === 'object') {
formData = [];
$.each(options.formData, function (name, value) {
formData.push({name: name, value: value});
@@ -231,10 +304,35 @@
return total;
},
+ _initProgressObject: function (obj) {
+ var progress = {
+ loaded: 0,
+ total: 0,
+ bitrate: 0
+ };
+ if (obj._progress) {
+ $.extend(obj._progress, progress);
+ } else {
+ obj._progress = progress;
+ }
+ },
+
+ _initResponseObject: function (obj) {
+ var prop;
+ if (obj._response) {
+ for (prop in obj._response) {
+ if (obj._response.hasOwnProperty(prop)) {
+ delete obj._response[prop];
+ }
+ }
+ } else {
+ obj._response = {};
+ }
+ },
+
_onProgress: function (e, data) {
if (e.lengthComputable) {
- var now = +(new Date()),
- total,
+ var now = ((Date.now) ? Date.now() : (new Date()).getTime()),
loaded;
if (data._time && data.progressInterval &&
(now - data._time < data.progressInterval) &&
@@ -242,16 +340,19 @@
return;
}
data._time = now;
- total = data.total || this._getTotal(data.files);
- loaded = parseInt(
- e.loaded / e.total * (data.chunkSize || total),
- 10
+ loaded = Math.floor(
+ e.loaded / e.total * (data.chunkSize || data._progress.total)
) + (data.uploadedBytes || 0);
- this._loaded += loaded - (data.loaded || data.uploadedBytes || 0);
- data.lengthComputable = true;
- data.loaded = loaded;
- data.total = total;
- data.bitrate = data._bitrateTimer.getBitrate(
+ // Add the difference from the previously loaded state
+ // to the global loaded counter:
+ this._progress.loaded += (loaded - data._progress.loaded);
+ this._progress.bitrate = this._bitrateTimer.getBitrate(
+ now,
+ this._progress.loaded,
+ data.bitrateInterval
+ );
+ data._progress.loaded = data.loaded = loaded;
+ data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate(
now,
loaded,
data.bitrateInterval
@@ -262,16 +363,7 @@
this._trigger('progress', e, data);
// Trigger a global progress event for all current file uploads,
// including ajax calls queued for sequential file uploads:
- this._trigger('progressall', e, {
- lengthComputable: true,
- loaded: this._loaded,
- total: this._total,
- bitrate: this._bitrateTimer.getBitrate(
- now,
- this._loaded,
- data.bitrateInterval
- )
- });
+ this._trigger('progressall', e, this._progress);
}
},
@@ -295,35 +387,30 @@
}
},
+ _isInstanceOf: function (type, obj) {
+ // Cross-frame instanceof check
+ return Object.prototype.toString.call(obj) === '[object ' + type + ']';
+ },
+
_initXHRData: function (options) {
- var formData,
+ var that = this,
+ formData,
file = options.files[0],
// Ignore non-multipart setting if not supported:
multipart = options.multipart || !$.support.xhrFileUpload,
paramName = options.paramName[0];
- if (!multipart || options.blob) {
- // For non-multipart uploads and chunked uploads,
- // file meta data is not part of the request body,
- // so we transmit this data as part of the HTTP headers.
- // For cross domain requests, these headers must be allowed
- // via Access-Control-Allow-Headers or removed using
- // the beforeSend callback:
- options.headers = $.extend(options.headers, {
- 'X-File-Name': file.name,
- 'X-File-Type': file.type,
- 'X-File-Size': file.size
- });
- if (!options.blob) {
- // Non-chunked non-multipart upload:
- options.contentType = file.type;
- options.data = file;
- } else if (!multipart) {
- // Chunked non-multipart upload:
- options.contentType = 'application/octet-stream';
- options.data = options.blob;
- }
+ options.headers = options.headers || {};
+ if (options.contentRange) {
+ options.headers['Content-Range'] = options.contentRange;
}
- if (multipart && $.support.xhrFormDataFileUpload) {
+ if (!multipart || options.blob || !this._isInstanceOf('File', file)) {
+ options.headers['Content-Disposition'] = 'attachment; filename="' +
+ encodeURI(file.name) + '"';
+ }
+ if (!multipart) {
+ options.contentType = file.type;
+ options.data = options.blob || file;
+ } else if ($.support.xhrFormDataFileUpload) {
if (options.postMessage) {
// window.postMessage does not allow sending FormData
// objects, so we just add the File/Blob objects to
@@ -344,7 +431,7 @@
});
}
} else {
- if (options.formData instanceof FormData) {
+ if (that._isInstanceOf('FormData', options.formData)) {
formData = options.formData;
} else {
formData = new FormData();
@@ -356,10 +443,10 @@
formData.append(paramName, options.blob, file.name);
} else {
$.each(options.files, function (index, file) {
- // File objects are also Blob instances.
// This check allows the tests to run with
// dummy objects:
- if (file instanceof Blob) {
+ if (that._isInstanceOf('File', file) ||
+ that._isInstanceOf('Blob', file)) {
formData.append(
options.paramName[index] || paramName,
file,
@@ -376,13 +463,13 @@
},
_initIframeSettings: function (options) {
+ var targetHost = $('').prop('href', options.url).prop('host');
// Setting the dataType to iframe enables the iframe transport:
options.dataType = 'iframe ' + (options.dataType || '');
// The iframe transport accepts a serialized array as form data:
options.formData = this._getFormData(options);
// Add redirect url to form data on cross-domain uploads:
- if (options.redirect && $('').prop('href', options.url)
- .prop('host') !== location.host) {
+ if (options.redirect && targetHost && targetHost !== location.host) {
options.formData.push({
name: options.redirectParamName || 'redirect',
value: options.redirect
@@ -404,7 +491,7 @@
options.dataType = 'postmessage ' + (options.dataType || '');
}
} else {
- this._initIframeSettings(options, 'iframe');
+ this._initIframeSettings(options);
}
},
@@ -436,6 +523,11 @@
// associated form, if available:
if (!options.form || !options.form.length) {
options.form = $(options.fileInput.prop('form'));
+ // If the given file input doesn't have an associated form,
+ // use the default widget file input's form:
+ if (!options.form.length) {
+ options.form = $(this.options.fileInput.prop('form'));
+ }
}
options.paramName = this._getParamName(options);
if (!options.url) {
@@ -444,9 +536,13 @@
// The HTTP request method must be "POST" or "PUT":
options.type = (options.type || options.form.prop('method') || '')
.toUpperCase();
- if (options.type !== 'POST' && options.type !== 'PUT') {
+ if (options.type !== 'POST' && options.type !== 'PUT' &&
+ options.type !== 'PATCH') {
options.type = 'POST';
}
+ if (!options.formAcceptCharset) {
+ options.formAcceptCharset = options.form.attr('accept-charset');
+ }
},
_getAJAXSettings: function (data) {
@@ -456,6 +552,21 @@
return options;
},
+ // jQuery 1.6 doesn't provide .state(),
+ // while jQuery 1.8+ removed .isRejected() and .isResolved():
+ _getDeferredState: function (deferred) {
+ if (deferred.state) {
+ return deferred.state();
+ }
+ if (deferred.isResolved()) {
+ return 'resolved';
+ }
+ if (deferred.isRejected()) {
+ return 'rejected';
+ }
+ return 'pending';
+ },
+
// Maps jqXHR callbacks to the equivalent
// methods of the given Promise object:
_enhancePromise: function (promise) {
@@ -480,24 +591,77 @@
return this._enhancePromise(promise);
},
+ // Adds convenience methods to the data callback argument:
+ _addConvenienceMethods: function (e, data) {
+ var that = this,
+ getPromise = function (data) {
+ return $.Deferred().resolveWith(that, [data]).promise();
+ };
+ data.process = function (resolveFunc, rejectFunc) {
+ if (resolveFunc || rejectFunc) {
+ data._processQueue = this._processQueue =
+ (this._processQueue || getPromise(this))
+ .pipe(resolveFunc, rejectFunc);
+ }
+ return this._processQueue || getPromise(this);
+ };
+ data.submit = function () {
+ if (this.state() !== 'pending') {
+ data.jqXHR = this.jqXHR =
+ (that._trigger('submit', e, this) !== false) &&
+ that._onSend(e, this);
+ }
+ return this.jqXHR || that._getXHRPromise();
+ };
+ data.abort = function () {
+ if (this.jqXHR) {
+ return this.jqXHR.abort();
+ }
+ return that._getXHRPromise();
+ };
+ data.state = function () {
+ if (this.jqXHR) {
+ return that._getDeferredState(this.jqXHR);
+ }
+ if (this._processQueue) {
+ return that._getDeferredState(this._processQueue);
+ }
+ };
+ data.progress = function () {
+ return this._progress;
+ };
+ data.response = function () {
+ return this._response;
+ };
+ },
+
+ // Parses the Range header from the server response
+ // and returns the uploaded bytes:
+ _getUploadedBytes: function (jqXHR) {
+ var range = jqXHR.getResponseHeader('Range'),
+ parts = range && range.split('-'),
+ upperBytesPos = parts && parts.length > 1 &&
+ parseInt(parts[1], 10);
+ return upperBytesPos && upperBytesPos + 1;
+ },
+
// Uploads a file in multiple, sequential requests
// by splitting the file up in multiple blob chunks.
// If the second parameter is true, only tests if the file
// should be uploaded in chunks, but does not invoke any
// upload requests:
_chunkedUpload: function (options, testOnly) {
+ options.uploadedBytes = options.uploadedBytes || 0;
var that = this,
file = options.files[0],
fs = file.size,
- ub = options.uploadedBytes = options.uploadedBytes || 0,
+ ub = options.uploadedBytes,
mcs = options.maxChunkSize || fs,
- // Use the Blob methods with the slice implementation
- // according to the W3C Blob API specification:
- slice = file.webkitSlice || file.mozSlice || file.slice,
- upload,
- n,
+ slice = this._blobSlice,
+ dfd = $.Deferred(),
+ promise = dfd.promise(),
jqXHR,
- pipe;
+ upload;
if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) ||
options.data) {
return false;
@@ -506,62 +670,84 @@
return true;
}
if (ub >= fs) {
- file.error = 'uploadedBytes';
+ file.error = options.i18n('uploadedBytes');
return this._getXHRPromise(
false,
options.context,
[null, 'error', file.error]
);
}
- // n is the number of blobs to upload,
- // calculated via filesize, uploaded bytes and max chunk size:
- n = Math.ceil((fs - ub) / mcs);
- // The chunk upload method accepting the chunk number as parameter:
- upload = function (i) {
- if (!i) {
- return that._getXHRPromise(true, options.context);
- }
- // Upload the blobs in sequential order:
- return upload(i -= 1).pipe(function () {
- // Clone the options object for each chunk upload:
- var o = $.extend({}, options);
- o.blob = slice.call(
- file,
- ub + i * mcs,
- ub + (i + 1) * mcs
- );
- // Store the current chunk size, as the blob itself
- // will be dereferenced after data processing:
- o.chunkSize = o.blob.size;
- // Process the upload data (the blob and potential form data):
- that._initXHRData(o);
- // Add progress listeners for this chunk upload:
- that._initProgressListener(o);
- jqXHR = ($.ajax(o) || that._getXHRPromise(false, o.context))
- .done(function () {
- // Create a progress event if upload is done and
- // no progress event has been invoked for this chunk:
- if (!o.loaded) {
- that._onProgress($.Event('progress', {
- lengthComputable: true,
- loaded: o.chunkSize,
- total: o.chunkSize
- }), o);
- }
- options.uploadedBytes = o.uploadedBytes +=
- o.chunkSize;
- });
- return jqXHR;
- });
+ // The chunk upload method:
+ upload = function () {
+ // Clone the options object for each chunk upload:
+ var o = $.extend({}, options),
+ currentLoaded = o._progress.loaded;
+ o.blob = slice.call(
+ file,
+ ub,
+ ub + mcs,
+ file.type
+ );
+ // Store the current chunk size, as the blob itself
+ // will be dereferenced after data processing:
+ o.chunkSize = o.blob.size;
+ // Expose the chunk bytes position range:
+ o.contentRange = 'bytes ' + ub + '-' +
+ (ub + o.chunkSize - 1) + '/' + fs;
+ // Process the upload data (the blob and potential form data):
+ that._initXHRData(o);
+ // Add progress listeners for this chunk upload:
+ that._initProgressListener(o);
+ jqXHR = ((that._trigger('chunksend', null, o) !== false && $.ajax(o)) ||
+ that._getXHRPromise(false, o.context))
+ .done(function (result, textStatus, jqXHR) {
+ ub = that._getUploadedBytes(jqXHR) ||
+ (ub + o.chunkSize);
+ // Create a progress event if no final progress event
+ // with loaded equaling total has been triggered
+ // for this chunk:
+ if (currentLoaded + o.chunkSize - o._progress.loaded) {
+ that._onProgress($.Event('progress', {
+ lengthComputable: true,
+ loaded: ub - o.uploadedBytes,
+ total: ub - o.uploadedBytes
+ }), o);
+ }
+ options.uploadedBytes = o.uploadedBytes = ub;
+ o.result = result;
+ o.textStatus = textStatus;
+ o.jqXHR = jqXHR;
+ that._trigger('chunkdone', null, o);
+ that._trigger('chunkalways', null, o);
+ if (ub < fs) {
+ // File upload not yet complete,
+ // continue with the next chunk:
+ upload();
+ } else {
+ dfd.resolveWith(
+ o.context,
+ [result, textStatus, jqXHR]
+ );
+ }
+ })
+ .fail(function (jqXHR, textStatus, errorThrown) {
+ o.jqXHR = jqXHR;
+ o.textStatus = textStatus;
+ o.errorThrown = errorThrown;
+ that._trigger('chunkfail', null, o);
+ that._trigger('chunkalways', null, o);
+ dfd.rejectWith(
+ o.context,
+ [jqXHR, textStatus, errorThrown]
+ );
+ });
};
- // Return the piped Promise object, enhanced with an abort method,
- // which is delegated to the jqXHR object of the current upload,
- // and jqXHR callbacks mapped to the equivalent Promise methods:
- pipe = upload(n);
- pipe.abort = function () {
+ this._enhancePromise(promise);
+ promise.abort = function () {
return jqXHR.abort();
};
- return this._enhancePromise(pipe);
+ upload();
+ return promise;
},
_beforeSend: function (e, data) {
@@ -572,102 +758,111 @@
this._trigger('start');
// Set timer for global bitrate progress calculation:
this._bitrateTimer = new this._BitrateTimer();
+ // Reset the global progress values:
+ this._progress.loaded = this._progress.total = 0;
+ this._progress.bitrate = 0;
}
+ // Make sure the container objects for the .response() and
+ // .progress() methods on the data object are available
+ // and reset to their initial state:
+ this._initResponseObject(data);
+ this._initProgressObject(data);
+ data._progress.loaded = data.loaded = data.uploadedBytes || 0;
+ data._progress.total = data.total = this._getTotal(data.files) || 1;
+ data._progress.bitrate = data.bitrate = 0;
this._active += 1;
// Initialize the global progress values:
- this._loaded += data.uploadedBytes || 0;
- this._total += this._getTotal(data.files);
+ this._progress.loaded += data.loaded;
+ this._progress.total += data.total;
},
_onDone: function (result, textStatus, jqXHR, options) {
- if (!this._isXHRUpload(options)) {
- // Create a progress event for each iframe load:
+ var total = options._progress.total,
+ response = options._response;
+ if (options._progress.loaded < total) {
+ // Create a progress event if no final progress event
+ // with loaded equaling total has been triggered:
this._onProgress($.Event('progress', {
lengthComputable: true,
- loaded: 1,
- total: 1
+ loaded: total,
+ total: total
}), options);
}
- options.result = result;
- options.textStatus = textStatus;
- options.jqXHR = jqXHR;
+ response.result = options.result = result;
+ response.textStatus = options.textStatus = textStatus;
+ response.jqXHR = options.jqXHR = jqXHR;
this._trigger('done', null, options);
},
_onFail: function (jqXHR, textStatus, errorThrown, options) {
- options.jqXHR = jqXHR;
- options.textStatus = textStatus;
- options.errorThrown = errorThrown;
- this._trigger('fail', null, options);
+ var response = options._response;
if (options.recalculateProgress) {
// Remove the failed (error or abort) file upload from
// the global progress calculation:
- this._loaded -= options.loaded || options.uploadedBytes || 0;
- this._total -= options.total || this._getTotal(options.files);
+ this._progress.loaded -= options._progress.loaded;
+ this._progress.total -= options._progress.total;
}
+ response.jqXHR = options.jqXHR = jqXHR;
+ response.textStatus = options.textStatus = textStatus;
+ response.errorThrown = options.errorThrown = errorThrown;
+ this._trigger('fail', null, options);
},
_onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) {
- this._active -= 1;
- options.textStatus = textStatus;
- if (jqXHRorError && jqXHRorError.always) {
- options.jqXHR = jqXHRorError;
- options.result = jqXHRorResult;
- } else {
- options.jqXHR = jqXHRorResult;
- options.errorThrown = jqXHRorError;
- }
+ // jqXHRorResult, textStatus and jqXHRorError are added to the
+ // options object via done and fail callbacks
this._trigger('always', null, options);
- if (this._active === 0) {
- // The stop callback is triggered when all uploads have
- // been completed, equivalent to the global ajaxStop event:
- this._trigger('stop');
- // Reset the global progress values:
- this._loaded = this._total = 0;
- this._bitrateTimer = null;
- }
},
_onSend: function (e, data) {
+ if (!data.submit) {
+ this._addConvenienceMethods(e, data);
+ }
var that = this,
jqXHR,
+ aborted,
slot,
pipe,
options = that._getAJAXSettings(data),
- send = function (resolve, args) {
+ send = function () {
that._sending += 1;
// Set timer for bitrate progress calculation:
options._bitrateTimer = new that._BitrateTimer();
jqXHR = jqXHR || (
- (resolve !== false &&
- that._trigger('send', e, options) !== false &&
- (that._chunkedUpload(options) || $.ajax(options))) ||
- that._getXHRPromise(false, options.context, args)
+ ((aborted || that._trigger('send', e, options) === false) &&
+ that._getXHRPromise(false, options.context, aborted)) ||
+ that._chunkedUpload(options) || $.ajax(options)
).done(function (result, textStatus, jqXHR) {
that._onDone(result, textStatus, jqXHR, options);
}).fail(function (jqXHR, textStatus, errorThrown) {
that._onFail(jqXHR, textStatus, errorThrown, options);
}).always(function (jqXHRorResult, textStatus, jqXHRorError) {
- that._sending -= 1;
that._onAlways(
jqXHRorResult,
textStatus,
jqXHRorError,
options
);
+ that._sending -= 1;
+ that._active -= 1;
if (options.limitConcurrentUploads &&
options.limitConcurrentUploads > that._sending) {
// Start the next queued upload,
// that has not been aborted:
var nextSlot = that._slots.shift();
while (nextSlot) {
- if (!nextSlot.isRejected()) {
+ if (that._getDeferredState(nextSlot) === 'pending') {
nextSlot.resolve();
break;
}
nextSlot = that._slots.shift();
}
}
+ if (that._active === 0) {
+ // The stop callback is triggered when all uploads have
+ // been completed, equivalent to the global ajaxStop event:
+ that._trigger('stop');
+ }
});
return jqXHR;
};
@@ -680,18 +875,19 @@
this._slots.push(slot);
pipe = slot.pipe(send);
} else {
- pipe = (this._sequence = this._sequence.pipe(send, send));
+ this._sequence = this._sequence.pipe(send, send);
+ pipe = this._sequence;
}
// Return the piped Promise object, enhanced with an abort method,
// which is delegated to the jqXHR object of the current upload,
// and jqXHR callbacks mapped to the equivalent Promise methods:
pipe.abort = function () {
- var args = [undefined, 'abort', 'abort'];
+ aborted = [undefined, 'abort', 'abort'];
if (!jqXHR) {
if (slot) {
- slot.rejectWith(args);
+ slot.rejectWith(options.context, aborted);
}
- return send(false, args);
+ return send();
}
return jqXHR.abort();
};
@@ -733,25 +929,15 @@
var newData = $.extend({}, data);
newData.files = fileSet ? element : [element];
newData.paramName = paramNameSet[index];
- newData.submit = function () {
- newData.jqXHR = this.jqXHR =
- (that._trigger('submit', e, this) !== false) &&
- that._onSend(e, this);
- return this.jqXHR;
- };
- return (result = that._trigger('add', e, newData));
+ that._initResponseObject(newData);
+ that._initProgressObject(newData);
+ that._addConvenienceMethods(e, newData);
+ result = that._trigger('add', e, newData);
+ return result;
});
return result;
},
- // File Normalization for Gecko 1.9.1 (Firefox 3.5) support:
- _normalizeFile: function (index, file) {
- if (file.name === undefined && file.size === undefined) {
- file.name = file.fileName;
- file.size = file.fileSize;
- }
- },
-
_replaceFileInput: function (input) {
var inputClone = input.clone(true);
$('
').append(inputClone)[0].reset();
@@ -761,7 +947,7 @@
// Avoid memory leaks with the detached file input:
$.cleanData(input.unbind('remove'));
// Replace the original file input element in the fileInput
- // collection with the clone, which has been copied including
+ // elements set with the clone, which has been copied including
// event handlers:
this.options.fileInput = this.options.fileInput.map(function (i, el) {
if (el === input[0]) {
@@ -776,113 +962,229 @@
}
},
- _getFileInputFiles: function (fileInput) {
+ _handleFileTreeEntry: function (entry, path) {
+ var that = this,
+ dfd = $.Deferred(),
+ errorHandler = function (e) {
+ if (e && !e.entry) {
+ e.entry = entry;
+ }
+ // Since $.when returns immediately if one
+ // Deferred is rejected, we use resolve instead.
+ // This allows valid files and invalid items
+ // to be returned together in one set:
+ dfd.resolve([e]);
+ },
+ dirReader;
+ path = path || '';
+ if (entry.isFile) {
+ if (entry._file) {
+ // Workaround for Chrome bug #149735
+ entry._file.relativePath = path;
+ dfd.resolve(entry._file);
+ } else {
+ entry.file(function (file) {
+ file.relativePath = path;
+ dfd.resolve(file);
+ }, errorHandler);
+ }
+ } else if (entry.isDirectory) {
+ dirReader = entry.createReader();
+ dirReader.readEntries(function (entries) {
+ that._handleFileTreeEntries(
+ entries,
+ path + entry.name + '/'
+ ).done(function (files) {
+ dfd.resolve(files);
+ }).fail(errorHandler);
+ }, errorHandler);
+ } else {
+ // Return an empy list for file system items
+ // other than files or directories:
+ dfd.resolve([]);
+ }
+ return dfd.promise();
+ },
+
+ _handleFileTreeEntries: function (entries, path) {
+ var that = this;
+ return $.when.apply(
+ $,
+ $.map(entries, function (entry) {
+ return that._handleFileTreeEntry(entry, path);
+ })
+ ).pipe(function () {
+ return Array.prototype.concat.apply(
+ [],
+ arguments
+ );
+ });
+ },
+
+ _getDroppedFiles: function (dataTransfer) {
+ dataTransfer = dataTransfer || {};
+ var items = dataTransfer.items;
+ if (items && items.length && (items[0].webkitGetAsEntry ||
+ items[0].getAsEntry)) {
+ return this._handleFileTreeEntries(
+ $.map(items, function (item) {
+ var entry;
+ if (item.webkitGetAsEntry) {
+ entry = item.webkitGetAsEntry();
+ if (entry) {
+ // Workaround for Chrome bug #149735:
+ entry._file = item.getAsFile();
+ }
+ return entry;
+ }
+ return item.getAsEntry();
+ })
+ );
+ }
+ return $.Deferred().resolve(
+ $.makeArray(dataTransfer.files)
+ ).promise();
+ },
+
+ _getSingleFileInputFiles: function (fileInput) {
fileInput = $(fileInput);
- var files = $.each($.makeArray(fileInput.prop('files')), this._normalizeFile),
+ var entries = fileInput.prop('webkitEntries') ||
+ fileInput.prop('entries'),
+ files,
value;
+ if (entries && entries.length) {
+ return this._handleFileTreeEntries(entries);
+ }
+ files = $.makeArray(fileInput.prop('files'));
if (!files.length) {
value = fileInput.prop('value');
if (!value) {
- return [];
+ return $.Deferred().resolve([]).promise();
}
// If the files property is not available, the browser does not
// support the File API and we add a pseudo File object with
// the input value as name with path information removed:
files = [{name: value.replace(/^.*\\/, '')}];
+ } else if (files[0].name === undefined && files[0].fileName) {
+ // File normalization for Safari 4 and Firefox 3:
+ $.each(files, function (index, file) {
+ file.name = file.fileName;
+ file.size = file.fileSize;
+ });
}
- return files;
+ return $.Deferred().resolve(files).promise();
+ },
+
+ _getFileInputFiles: function (fileInput) {
+ if (!(fileInput instanceof $) || fileInput.length === 1) {
+ return this._getSingleFileInputFiles(fileInput);
+ }
+ return $.when.apply(
+ $,
+ $.map(fileInput, this._getSingleFileInputFiles)
+ ).pipe(function () {
+ return Array.prototype.concat.apply(
+ [],
+ arguments
+ );
+ });
},
_onChange: function (e) {
- var that = e.data.fileupload,
+ var that = this,
data = {
fileInput: $(e.target),
form: $(e.target.form)
};
- data.files = that._getFileInputFiles(data.fileInput);
- if (that.options.replaceFileInput) {
- that._replaceFileInput(data.fileInput);
- }
- if (that._trigger('change', e, data) === false ||
- that._onAdd(e, data) === false) {
- return false;
- }
+ this._getFileInputFiles(data.fileInput).always(function (files) {
+ data.files = files;
+ if (that.options.replaceFileInput) {
+ that._replaceFileInput(data.fileInput);
+ }
+ if (that._trigger('change', e, data) !== false) {
+ that._onAdd(e, data);
+ }
+ });
},
_onPaste: function (e) {
- var that = e.data.fileupload,
- cbd = e.originalEvent.clipboardData,
- items = (cbd && cbd.items) || [],
+ var items = e.originalEvent && e.originalEvent.clipboardData &&
+ e.originalEvent.clipboardData.items,
data = {files: []};
- $.each(items, function (index, item) {
- var file = item.getAsFile && item.getAsFile();
- if (file) {
- data.files.push(file);
+ if (items && items.length) {
+ $.each(items, function (index, item) {
+ var file = item.getAsFile && item.getAsFile();
+ if (file) {
+ data.files.push(file);
+ }
+ });
+ if (this._trigger('paste', e, data) === false ||
+ this._onAdd(e, data) === false) {
+ return false;
}
- });
- if (that._trigger('paste', e, data) === false ||
- that._onAdd(e, data) === false) {
- return false;
}
},
_onDrop: function (e) {
- var that = e.data.fileupload,
- dataTransfer = e.dataTransfer = e.originalEvent.dataTransfer,
- data = {
- files: $.each(
- $.makeArray(dataTransfer && dataTransfer.files),
- that._normalizeFile
- )
- };
- if (that._trigger('drop', e, data) === false ||
- that._onAdd(e, data) === false) {
- return false;
+ e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;
+ var that = this,
+ dataTransfer = e.dataTransfer,
+ data = {};
+ if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {
+ e.preventDefault();
+ this._getDroppedFiles(dataTransfer).always(function (files) {
+ data.files = files;
+ if (that._trigger('drop', e, data) !== false) {
+ that._onAdd(e, data);
+ }
+ });
}
- e.preventDefault();
},
_onDragOver: function (e) {
- var that = e.data.fileupload,
- dataTransfer = e.dataTransfer = e.originalEvent.dataTransfer;
- if (that._trigger('dragover', e) === false) {
- return false;
+ e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;
+ var dataTransfer = e.dataTransfer;
+ if (dataTransfer) {
+ if (this._trigger('dragover', e) === false) {
+ return false;
+ }
+ if ($.inArray('Files', dataTransfer.types) !== -1) {
+ dataTransfer.dropEffect = 'copy';
+ e.preventDefault();
+ }
}
- if (dataTransfer) {
- dataTransfer.dropEffect = 'copy';
- }
- e.preventDefault();
},
_initEventHandlers: function () {
- var ns = this.options.namespace;
if (this._isXHRUpload(this.options)) {
- this.options.dropZone
- .bind('dragover.' + ns, {fileupload: this}, this._onDragOver)
- .bind('drop.' + ns, {fileupload: this}, this._onDrop)
- .bind('paste.' + ns, {fileupload: this}, this._onPaste);
+ this._on(this.options.dropZone, {
+ dragover: this._onDragOver,
+ drop: this._onDrop
+ });
+ this._on(this.options.pasteZone, {
+ paste: this._onPaste
+ });
}
- this.options.fileInput
- .bind('change.' + ns, {fileupload: this}, this._onChange);
+ if ($.support.fileInput) {
+ this._on(this.options.fileInput, {
+ change: this._onChange
+ });
+ }
},
_destroyEventHandlers: function () {
- var ns = this.options.namespace;
- this.options.dropZone
- .unbind('dragover.' + ns, this._onDragOver)
- .unbind('drop.' + ns, this._onDrop)
- .unbind('paste.' + ns, this._onPaste);
- this.options.fileInput
- .unbind('change.' + ns, this._onChange);
+ this._off(this.options.dropZone, 'dragover drop');
+ this._off(this.options.pasteZone, 'paste');
+ this._off(this.options.fileInput, 'change');
},
_setOption: function (key, value) {
- var refresh = $.inArray(key, this._refreshOptionsList) !== -1;
- if (refresh) {
+ var reinit = $.inArray(key, this._specialOptions) !== -1;
+ if (reinit) {
this._destroyEventHandlers();
}
- $.Widget.prototype._setOption.call(this, key, value);
- if (refresh) {
+ this._super(key, value);
+ if (reinit) {
this._initSpecialOptions();
this._initEventHandlers();
}
@@ -891,41 +1193,68 @@
_initSpecialOptions: function () {
var options = this.options;
if (options.fileInput === undefined) {
- options.fileInput = this.element.is('input:file') ?
- this.element : this.element.find('input:file');
+ options.fileInput = this.element.is('input[type="file"]') ?
+ this.element : this.element.find('input[type="file"]');
} else if (!(options.fileInput instanceof $)) {
options.fileInput = $(options.fileInput);
}
if (!(options.dropZone instanceof $)) {
options.dropZone = $(options.dropZone);
}
+ if (!(options.pasteZone instanceof $)) {
+ options.pasteZone = $(options.pasteZone);
+ }
+ },
+
+ _getRegExp: function (str) {
+ var parts = str.split('/'),
+ modifiers = parts.pop();
+ parts.shift();
+ return new RegExp(parts.join('/'), modifiers);
+ },
+
+ _isRegExpOption: function (key, value) {
+ return key !== 'url' && $.type(value) === 'string' &&
+ /^\/.*\/[igm]{0,3}$/.test(value);
+ },
+
+ _initDataAttributes: function () {
+ var that = this,
+ options = this.options;
+ // Initialize options set via HTML5 data-attributes:
+ $.each(
+ $(this.element[0].cloneNode(false)).data(),
+ function (key, value) {
+ if (that._isRegExpOption(key, value)) {
+ value = that._getRegExp(value);
+ }
+ options[key] = value;
+ }
+ );
},
_create: function () {
- var options = this.options;
- // Initialize options set via HTML5 data-attributes:
- $.extend(options, $(this.element[0].cloneNode(false)).data());
- options.namespace = options.namespace || this.widgetName;
+ this._initDataAttributes();
this._initSpecialOptions();
this._slots = [];
this._sequence = this._getXHRPromise(true);
- this._sending = this._active = this._loaded = this._total = 0;
+ this._sending = this._active = 0;
+ this._initProgressObject(this);
this._initEventHandlers();
},
- destroy: function () {
- this._destroyEventHandlers();
- $.Widget.prototype.destroy.call(this);
+ // This method is exposed to the widget API and allows to query
+ // the number of active uploads:
+ active: function () {
+ return this._active;
},
- enable: function () {
- $.Widget.prototype.enable.call(this);
- this._initEventHandlers();
- },
-
- disable: function () {
- this._destroyEventHandlers();
- $.Widget.prototype.disable.call(this);
+ // This method is exposed to the widget API and allows to query
+ // the widget upload progress.
+ // It returns an object with loaded, total and bitrate properties
+ // for the running uploads:
+ progress: function () {
+ return this._progress;
},
// This method is exposed to the widget API and allows adding files
@@ -933,29 +1262,61 @@
// must have a files property and can contain additional options:
// .fileupload('add', {files: filesList});
add: function (data) {
+ var that = this;
if (!data || this.options.disabled) {
return;
}
if (data.fileInput && !data.files) {
- data.files = this._getFileInputFiles(data.fileInput);
+ this._getFileInputFiles(data.fileInput).always(function (files) {
+ data.files = files;
+ that._onAdd(null, data);
+ });
} else {
- data.files = $.each($.makeArray(data.files), this._normalizeFile);
+ data.files = $.makeArray(data.files);
+ this._onAdd(null, data);
}
- this._onAdd(null, data);
},
// This method is exposed to the widget API and allows sending files
// using the fileupload API. The data parameter accepts an object which
- // must have a files property and can contain additional options:
+ // must have a files or fileInput property and can contain additional options:
// .fileupload('send', {files: filesList});
// The method returns a Promise object for the file upload call.
send: function (data) {
if (data && !this.options.disabled) {
if (data.fileInput && !data.files) {
- data.files = this._getFileInputFiles(data.fileInput);
- } else {
- data.files = $.each($.makeArray(data.files), this._normalizeFile);
+ var that = this,
+ dfd = $.Deferred(),
+ promise = dfd.promise(),
+ jqXHR,
+ aborted;
+ promise.abort = function () {
+ aborted = true;
+ if (jqXHR) {
+ return jqXHR.abort();
+ }
+ dfd.reject(null, 'abort', 'abort');
+ return promise;
+ };
+ this._getFileInputFiles(data.fileInput).always(
+ function (files) {
+ if (aborted) {
+ return;
+ }
+ data.files = files;
+ jqXHR = that._onSend(null, data).then(
+ function (result, textStatus, jqXHR) {
+ dfd.resolve(result, textStatus, jqXHR);
+ },
+ function (jqXHR, textStatus, errorThrown) {
+ dfd.reject(jqXHR, textStatus, errorThrown);
+ }
+ );
+ }
+ );
+ return this._enhancePromise(promise);
}
+ data.files = $.makeArray(data.files);
if (data.files.length) {
return this._onSend(null, data);
}
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/jquery-file-upload/js/jquery.iframe-transport.js
--- a/OrthancExplorer/libs/jquery-file-upload/js/jquery.iframe-transport.js Wed Dec 26 11:15:17 2018 +0100
+++ b/OrthancExplorer/libs/jquery-file-upload/js/jquery.iframe-transport.js Wed Dec 26 16:58:21 2018 +0100
@@ -1,5 +1,5 @@
/*
- * jQuery Iframe Transport Plugin 1.4
+ * jQuery Iframe Transport Plugin 1.7
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2011, Sebastian Tschan
@@ -36,20 +36,35 @@
// equivalent to the return data of .serializeArray(), e.g.:
// [{name: 'a', value: 1}, {name: 'b', value: 2}]
$.ajaxTransport('iframe', function (options) {
- if (options.async && (options.type === 'POST' || options.type === 'GET')) {
+ if (options.async) {
var form,
- iframe;
+ iframe,
+ addParamChar;
return {
send: function (_, completeCallback) {
form = $('');
+ form.attr('accept-charset', options.formAcceptCharset);
+ addParamChar = /\?/.test(options.url) ? '&' : '?';
+ // XDomainRequest only supports GET and POST:
+ if (options.type === 'DELETE') {
+ options.url = options.url + addParamChar + '_method=DELETE';
+ options.type = 'POST';
+ } else if (options.type === 'PUT') {
+ options.url = options.url + addParamChar + '_method=PUT';
+ options.type = 'POST';
+ } else if (options.type === 'PATCH') {
+ options.url = options.url + addParamChar + '_method=PATCH';
+ options.type = 'POST';
+ }
// javascript:false as initial iframe src
// prevents warning popups on HTTPS in IE6.
// IE versions below IE8 cannot set the name property of
// elements that have already been added to the DOM,
// so we set the name along with the iframe HTML markup:
+ counter += 1;
iframe = $(
''
+ counter + '">'
).bind('load', function () {
var fileInputClones,
paramNames = $.isArray(options.paramName) ?
@@ -82,7 +97,12 @@
// (happens on form submits to iframe targets):
$('')
.appendTo(form);
- form.remove();
+ window.setTimeout(function () {
+ // Removing the form in a setTimeout call
+ // allows Chrome's developer tools to display
+ // the response result
+ form.remove();
+ }, 0);
});
form
.prop('target', iframe.prop('name'))
@@ -150,20 +170,34 @@
});
// The iframe transport returns the iframe content document as response.
- // The following adds converters from iframe to text, json, html, and script:
+ // The following adds converters from iframe to text, json, html, xml
+ // and script.
+ // Please note that the Content-Type for JSON responses has to be text/plain
+ // or text/html, if the browser doesn't include application/json in the
+ // Accept header, else IE will show a download dialog.
+ // The Content-Type for XML responses on the other hand has to be always
+ // application/xml or text/xml, so IE properly parses the XML response.
+ // See also
+ // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation
$.ajaxSetup({
converters: {
'iframe text': function (iframe) {
- return $(iframe[0].body).text();
+ return iframe && $(iframe[0].body).text();
},
'iframe json': function (iframe) {
- return $.parseJSON($(iframe[0].body).text());
+ return iframe && $.parseJSON($(iframe[0].body).text());
},
'iframe html': function (iframe) {
- return $(iframe[0].body).html();
+ return iframe && $(iframe[0].body).html();
+ },
+ 'iframe xml': function (iframe) {
+ var xmlDoc = iframe && iframe[0];
+ return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc :
+ $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) ||
+ $(xmlDoc.body).html());
},
'iframe script': function (iframe) {
- return $.globalEval($(iframe[0].body).text());
+ return iframe && $.globalEval($(iframe[0].body).text());
}
}
});
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/jquery-file-upload/js/vendor/jquery.ui.widget.js
--- a/OrthancExplorer/libs/jquery-file-upload/js/vendor/jquery.ui.widget.js Wed Dec 26 11:15:17 2018 +0100
+++ b/OrthancExplorer/libs/jquery-file-upload/js/vendor/jquery.ui.widget.js Wed Dec 26 16:58:21 2018 +0100
@@ -1,12 +1,12 @@
/*
- * jQuery UI Widget 1.8.18+amd
+ * jQuery UI Widget 1.10.3+amd
* https://github.com/blueimp/jQuery-File-Upload
*
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2013 jQuery Foundation and other contributors
+ * Released under the MIT license.
* http://jquery.org/license
*
- * http://docs.jquery.com/UI/Widget
+ * http://api.jqueryui.com/jQuery.widget/
*/
(function (factory) {
@@ -19,40 +19,26 @@
}
}(function( $, undefined ) {
-// jQuery 1.4+
-if ( $.cleanData ) {
- var _cleanData = $.cleanData;
- $.cleanData = function( elems ) {
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- try {
- $( elem ).triggerHandler( "remove" );
- // http://bugs.jquery.com/ticket/8235
- } catch( e ) {}
- }
- _cleanData( elems );
- };
-} else {
- var _remove = $.fn.remove;
- $.fn.remove = function( selector, keepData ) {
- return this.each(function() {
- if ( !keepData ) {
- if ( !selector || $.filter( selector, [ this ] ).length ) {
- $( "*", this ).add( [ this ] ).each(function() {
- try {
- $( this ).triggerHandler( "remove" );
- // http://bugs.jquery.com/ticket/8235
- } catch( e ) {}
- });
- }
- }
- return _remove.call( $(this), selector, keepData );
- });
- };
-}
+var uuid = 0,
+ slice = Array.prototype.slice,
+ _cleanData = $.cleanData;
+$.cleanData = function( elems ) {
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ try {
+ $( elem ).triggerHandler( "remove" );
+ // http://bugs.jquery.com/ticket/8235
+ } catch( e ) {}
+ }
+ _cleanData( elems );
+};
$.widget = function( name, base, prototype ) {
- var namespace = name.split( "." )[ 0 ],
- fullName;
+ var fullName, existingConstructor, constructor, basePrototype,
+ // proxiedPrototype allows the provided prototype to remain unmodified
+ // so that it can be used as a mixin for multiple widgets (#8876)
+ proxiedPrototype = {},
+ namespace = name.split( "." )[ 0 ];
+
name = name.split( "." )[ 1 ];
fullName = namespace + "-" + name;
@@ -62,81 +48,167 @@
}
// create selector for plugin
- $.expr[ ":" ][ fullName ] = function( elem ) {
- return !!$.data( elem, name );
+ $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+ return !!$.data( elem, fullName );
};
$[ namespace ] = $[ namespace ] || {};
- $[ namespace ][ name ] = function( options, element ) {
+ existingConstructor = $[ namespace ][ name ];
+ constructor = $[ namespace ][ name ] = function( options, element ) {
+ // allow instantiation without "new" keyword
+ if ( !this._createWidget ) {
+ return new constructor( options, element );
+ }
+
// allow instantiation without initializing for simple inheritance
+ // must use "new" keyword (the code above always passes args)
if ( arguments.length ) {
this._createWidget( options, element );
}
};
+ // extend with the existing constructor to carry over any static properties
+ $.extend( constructor, existingConstructor, {
+ version: prototype.version,
+ // copy the object used to create the prototype in case we need to
+ // redefine the widget later
+ _proto: $.extend( {}, prototype ),
+ // track widgets that inherit from this widget in case this widget is
+ // redefined after a widget inherits from it
+ _childConstructors: []
+ });
- var basePrototype = new base();
+ basePrototype = new base();
// we need to make the options hash a property directly on the new instance
// otherwise we'll modify the options hash on the prototype that we're
// inheriting from
-// $.each( basePrototype, function( key, val ) {
-// if ( $.isPlainObject(val) ) {
-// basePrototype[ key ] = $.extend( {}, val );
-// }
-// });
- basePrototype.options = $.extend( true, {}, basePrototype.options );
- $[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
+ basePrototype.options = $.widget.extend( {}, basePrototype.options );
+ $.each( prototype, function( prop, value ) {
+ if ( !$.isFunction( value ) ) {
+ proxiedPrototype[ prop ] = value;
+ return;
+ }
+ proxiedPrototype[ prop ] = (function() {
+ var _super = function() {
+ return base.prototype[ prop ].apply( this, arguments );
+ },
+ _superApply = function( args ) {
+ return base.prototype[ prop ].apply( this, args );
+ };
+ return function() {
+ var __super = this._super,
+ __superApply = this._superApply,
+ returnValue;
+
+ this._super = _super;
+ this._superApply = _superApply;
+
+ returnValue = value.apply( this, arguments );
+
+ this._super = __super;
+ this._superApply = __superApply;
+
+ return returnValue;
+ };
+ })();
+ });
+ constructor.prototype = $.widget.extend( basePrototype, {
+ // TODO: remove support for widgetEventPrefix
+ // always use the name + a colon as the prefix, e.g., draggable:start
+ // don't prefix for widgets that aren't DOM-based
+ widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
+ }, proxiedPrototype, {
+ constructor: constructor,
namespace: namespace,
widgetName: name,
- widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
- widgetBaseClass: fullName
- }, prototype );
+ widgetFullName: fullName
+ });
+
+ // If this widget is being redefined then we need to find all widgets that
+ // are inheriting from it and redefine all of them so that they inherit from
+ // the new version of this widget. We're essentially trying to replace one
+ // level in the prototype chain.
+ if ( existingConstructor ) {
+ $.each( existingConstructor._childConstructors, function( i, child ) {
+ var childPrototype = child.prototype;
+
+ // redefine the child widget using the same prototype that was
+ // originally used, but inherit from the new version of the base
+ $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+ });
+ // remove the list of existing child constructors from the old constructor
+ // so the old child constructors can be garbage collected
+ delete existingConstructor._childConstructors;
+ } else {
+ base._childConstructors.push( constructor );
+ }
+
+ $.widget.bridge( name, constructor );
+};
- $.widget.bridge( name, $[ namespace ][ name ] );
+$.widget.extend = function( target ) {
+ var input = slice.call( arguments, 1 ),
+ inputIndex = 0,
+ inputLength = input.length,
+ key,
+ value;
+ for ( ; inputIndex < inputLength; inputIndex++ ) {
+ for ( key in input[ inputIndex ] ) {
+ value = input[ inputIndex ][ key ];
+ if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+ // Clone objects
+ if ( $.isPlainObject( value ) ) {
+ target[ key ] = $.isPlainObject( target[ key ] ) ?
+ $.widget.extend( {}, target[ key ], value ) :
+ // Don't extend strings, arrays, etc. with objects
+ $.widget.extend( {}, value );
+ // Copy everything else by reference
+ } else {
+ target[ key ] = value;
+ }
+ }
+ }
+ }
+ return target;
};
$.widget.bridge = function( name, object ) {
+ var fullName = object.prototype.widgetFullName || name;
$.fn[ name ] = function( options ) {
var isMethodCall = typeof options === "string",
- args = Array.prototype.slice.call( arguments, 1 ),
+ args = slice.call( arguments, 1 ),
returnValue = this;
// allow multiple hashes to be passed on init
options = !isMethodCall && args.length ?
- $.extend.apply( null, [ true, options ].concat(args) ) :
+ $.widget.extend.apply( null, [ options ].concat(args) ) :
options;
- // prevent calls to internal methods
- if ( isMethodCall && options.charAt( 0 ) === "_" ) {
- return returnValue;
- }
-
if ( isMethodCall ) {
this.each(function() {
- var instance = $.data( this, name ),
- methodValue = instance && $.isFunction( instance[options] ) ?
- instance[ options ].apply( instance, args ) :
- instance;
- // TODO: add this back in 1.9 and use $.error() (see #5972)
-// if ( !instance ) {
-// throw "cannot call methods on " + name + " prior to initialization; " +
-// "attempted to call method '" + options + "'";
-// }
-// if ( !$.isFunction( instance[options] ) ) {
-// throw "no such method '" + options + "' for " + name + " widget instance";
-// }
-// var methodValue = instance[ options ].apply( instance, args );
+ var methodValue,
+ instance = $.data( this, fullName );
+ if ( !instance ) {
+ return $.error( "cannot call methods on " + name + " prior to initialization; " +
+ "attempted to call method '" + options + "'" );
+ }
+ if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+ return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+ }
+ methodValue = instance[ options ].apply( instance, args );
if ( methodValue !== instance && methodValue !== undefined ) {
- returnValue = methodValue;
+ returnValue = methodValue && methodValue.jquery ?
+ returnValue.pushStack( methodValue.get() ) :
+ methodValue;
return false;
}
});
} else {
this.each(function() {
- var instance = $.data( this, name );
+ var instance = $.data( this, fullName );
if ( instance ) {
instance.option( options || {} )._init();
} else {
- $.data( this, name, new object( options, this ) );
+ $.data( this, fullName, new object( options, this ) );
}
});
}
@@ -145,74 +217,123 @@
};
};
-$.Widget = function( options, element ) {
- // allow instantiation without initializing for simple inheritance
- if ( arguments.length ) {
- this._createWidget( options, element );
- }
-};
+$.Widget = function( /* options, element */ ) {};
+$.Widget._childConstructors = [];
$.Widget.prototype = {
widgetName: "widget",
widgetEventPrefix: "",
+ defaultElement: "
",
options: {
- disabled: false
+ disabled: false,
+
+ // callbacks
+ create: null
},
_createWidget: function( options, element ) {
- // $.widget.bridge stores the plugin instance, but we do it anyway
- // so that it's stored even before the _create function runs
- $.data( element, this.widgetName, this );
+ element = $( element || this.defaultElement || this )[ 0 ];
this.element = $( element );
- this.options = $.extend( true, {},
+ this.uuid = uuid++;
+ this.eventNamespace = "." + this.widgetName + this.uuid;
+ this.options = $.widget.extend( {},
this.options,
this._getCreateOptions(),
options );
- var self = this;
- this.element.bind( "remove." + this.widgetName, function() {
- self.destroy();
- });
+ this.bindings = $();
+ this.hoverable = $();
+ this.focusable = $();
+
+ if ( element !== this ) {
+ $.data( element, this.widgetFullName, this );
+ this._on( true, this.element, {
+ remove: function( event ) {
+ if ( event.target === element ) {
+ this.destroy();
+ }
+ }
+ });
+ this.document = $( element.style ?
+ // element within the document
+ element.ownerDocument :
+ // element is window or document
+ element.document || element );
+ this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+ }
this._create();
- this._trigger( "create" );
+ this._trigger( "create", null, this._getCreateEventData() );
this._init();
},
- _getCreateOptions: function() {
- return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];
- },
- _create: function() {},
- _init: function() {},
+ _getCreateOptions: $.noop,
+ _getCreateEventData: $.noop,
+ _create: $.noop,
+ _init: $.noop,
destroy: function() {
+ this._destroy();
+ // we can probably remove the unbind calls in 2.0
+ // all event bindings should go through this._on()
this.element
- .unbind( "." + this.widgetName )
- .removeData( this.widgetName );
+ .unbind( this.eventNamespace )
+ // 1.9 BC for #7810
+ // TODO remove dual storage
+ .removeData( this.widgetName )
+ .removeData( this.widgetFullName )
+ // support: jquery <1.6.3
+ // http://bugs.jquery.com/ticket/9413
+ .removeData( $.camelCase( this.widgetFullName ) );
this.widget()
- .unbind( "." + this.widgetName )
+ .unbind( this.eventNamespace )
.removeAttr( "aria-disabled" )
.removeClass(
- this.widgetBaseClass + "-disabled " +
+ this.widgetFullName + "-disabled " +
"ui-state-disabled" );
+
+ // clean up events and states
+ this.bindings.unbind( this.eventNamespace );
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
},
+ _destroy: $.noop,
widget: function() {
return this.element;
},
option: function( key, value ) {
- var options = key;
+ var options = key,
+ parts,
+ curOption,
+ i;
if ( arguments.length === 0 ) {
// don't return a reference to the internal hash
- return $.extend( {}, this.options );
+ return $.widget.extend( {}, this.options );
}
- if (typeof key === "string" ) {
- if ( value === undefined ) {
- return this.options[ key ];
+ if ( typeof key === "string" ) {
+ // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+ options = {};
+ parts = key.split( "." );
+ key = parts.shift();
+ if ( parts.length ) {
+ curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+ for ( i = 0; i < parts.length - 1; i++ ) {
+ curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+ curOption = curOption[ parts[ i ] ];
+ }
+ key = parts.pop();
+ if ( value === undefined ) {
+ return curOption[ key ] === undefined ? null : curOption[ key ];
+ }
+ curOption[ key ] = value;
+ } else {
+ if ( value === undefined ) {
+ return this.options[ key ] === undefined ? null : this.options[ key ];
+ }
+ options[ key ] = value;
}
- options = {};
- options[ key ] = value;
}
this._setOptions( options );
@@ -220,10 +341,11 @@
return this;
},
_setOptions: function( options ) {
- var self = this;
- $.each( options, function( key, value ) {
- self._setOption( key, value );
- });
+ var key;
+
+ for ( key in options ) {
+ this._setOption( key, options[ key ] );
+ }
return this;
},
@@ -232,10 +354,10 @@
if ( key === "disabled" ) {
this.widget()
- [ value ? "addClass" : "removeClass"](
- this.widgetBaseClass + "-disabled" + " " +
- "ui-state-disabled" )
+ .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
.attr( "aria-disabled", value );
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
}
return this;
@@ -248,6 +370,97 @@
return this._setOption( "disabled", true );
},
+ _on: function( suppressDisabledCheck, element, handlers ) {
+ var delegateElement,
+ instance = this;
+
+ // no suppressDisabledCheck flag, shuffle arguments
+ if ( typeof suppressDisabledCheck !== "boolean" ) {
+ handlers = element;
+ element = suppressDisabledCheck;
+ suppressDisabledCheck = false;
+ }
+
+ // no element argument, shuffle and use this.element
+ if ( !handlers ) {
+ handlers = element;
+ element = this.element;
+ delegateElement = this.widget();
+ } else {
+ // accept selectors, DOM elements
+ element = delegateElement = $( element );
+ this.bindings = this.bindings.add( element );
+ }
+
+ $.each( handlers, function( event, handler ) {
+ function handlerProxy() {
+ // allow widgets to customize the disabled handling
+ // - disabled as an array instead of boolean
+ // - disabled class as method for disabling individual parts
+ if ( !suppressDisabledCheck &&
+ ( instance.options.disabled === true ||
+ $( this ).hasClass( "ui-state-disabled" ) ) ) {
+ return;
+ }
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+
+ // copy the guid so direct unbinding works
+ if ( typeof handler !== "string" ) {
+ handlerProxy.guid = handler.guid =
+ handler.guid || handlerProxy.guid || $.guid++;
+ }
+
+ var match = event.match( /^(\w+)\s*(.*)$/ ),
+ eventName = match[1] + instance.eventNamespace,
+ selector = match[2];
+ if ( selector ) {
+ delegateElement.delegate( selector, eventName, handlerProxy );
+ } else {
+ element.bind( eventName, handlerProxy );
+ }
+ });
+ },
+
+ _off: function( element, eventName ) {
+ eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
+ element.unbind( eventName ).undelegate( eventName );
+ },
+
+ _delay: function( handler, delay ) {
+ function handlerProxy() {
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+ var instance = this;
+ return setTimeout( handlerProxy, delay || 0 );
+ },
+
+ _hoverable: function( element ) {
+ this.hoverable = this.hoverable.add( element );
+ this._on( element, {
+ mouseenter: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-hover" );
+ },
+ mouseleave: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-hover" );
+ }
+ });
+ },
+
+ _focusable: function( element ) {
+ this.focusable = this.focusable.add( element );
+ this._on( element, {
+ focusin: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-focus" );
+ },
+ focusout: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-focus" );
+ }
+ });
+ },
+
_trigger: function( type, event, data ) {
var prop, orig,
callback = this.options[ type ];
@@ -272,11 +485,46 @@
}
this.element.trigger( event, data );
-
- return !( $.isFunction(callback) &&
- callback.call( this.element[0], event, data ) === false ||
+ return !( $.isFunction( callback ) &&
+ callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
event.isDefaultPrevented() );
}
};
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+ $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+ if ( typeof options === "string" ) {
+ options = { effect: options };
+ }
+ var hasOptions,
+ effectName = !options ?
+ method :
+ options === true || typeof options === "number" ?
+ defaultEffect :
+ options.effect || defaultEffect;
+ options = options || {};
+ if ( typeof options === "number" ) {
+ options = { duration: options };
+ }
+ hasOptions = !$.isEmptyObject( options );
+ options.complete = callback;
+ if ( options.delay ) {
+ element.delay( options.delay );
+ }
+ if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+ element[ method ]( options );
+ } else if ( effectName !== method && element[ effectName ] ) {
+ element[ effectName ]( options.duration, options.easing, callback );
+ } else {
+ element.queue(function( next ) {
+ $( this )[ method ]();
+ if ( callback ) {
+ callback.call( element[ 0 ] );
+ }
+ next();
+ });
+ }
+ };
+});
+
}));
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/jquery.blockui.js
--- a/OrthancExplorer/libs/jquery.blockui.js Wed Dec 26 11:15:17 2018 +0100
+++ b/OrthancExplorer/libs/jquery.blockui.js Wed Dec 26 16:58:21 2018 +0100
@@ -1,10 +1,10 @@
-/*!
+/*!
* jQuery blockUI plugin
- * Version 2.39 (23-MAY-2011)
- * @requires jQuery v1.2.3 or later
+ * Version 2.70.0-2014.11.23
+ * Requires jQuery v1.7 or later
*
* Examples at: http://malsup.com/jquery/block/
- * Copyright (c) 2007-2010 M. Alsup
+ * Copyright (c) 2007-2013 M. Alsup
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
@@ -12,488 +12,609 @@
* Thanks to Amir-Hossein Sobhi for some excellent contributions!
*/
-;(function($) {
+;(function() {
+/*jshint eqeqeq:false curly:false latedef:false */
+"use strict";
+
+ function setup($) {
+ $.fn._fadeIn = $.fn.fadeIn;
+
+ var noOp = $.noop || function() {};
-if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) {
- alert('blockUI requires jQuery v1.2.3 or later! You are using v' + $.fn.jquery);
- return;
-}
+ // this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle
+ // confusing userAgent strings on Vista)
+ var msie = /MSIE/.test(navigator.userAgent);
+ var ie6 = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);
+ var mode = document.documentMode || 0;
+ var setExpr = $.isFunction( document.createElement('div').style.setExpression );
-$.fn._fadeIn = $.fn.fadeIn;
+ // global $ methods for blocking/unblocking the entire page
+ $.blockUI = function(opts) { install(window, opts); };
+ $.unblockUI = function(opts) { remove(window, opts); };
+
+ // convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)
+ $.growlUI = function(title, message, timeout, onClose) {
+ var $m = $('');
+ if (title) $m.append('
'+title+'
');
+ if (message) $m.append('
'+message+'
');
+ if (timeout === undefined) timeout = 3000;
-var noOp = function() {};
+ // Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications
+ var callBlock = function(opts) {
+ opts = opts || {};
+
+ $.blockUI({
+ message: $m,
+ fadeIn : typeof opts.fadeIn !== 'undefined' ? opts.fadeIn : 700,
+ fadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,
+ timeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,
+ centerY: false,
+ showOverlay: false,
+ onUnblock: onClose,
+ css: $.blockUI.defaults.growlCSS
+ });
+ };
-// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle
-// retarded userAgent strings on Vista)
-var mode = document.documentMode || 0;
-var setExpr = $.browser.msie && (($.browser.version < 8 && !mode) || mode < 8);
-var ie6 = $.browser.msie && /MSIE 6.0/.test(navigator.userAgent) && !mode;
+ callBlock();
+ var nonmousedOpacity = $m.css('opacity');
+ $m.mouseover(function() {
+ callBlock({
+ fadeIn: 0,
+ timeout: 30000
+ });
-// global $ methods for blocking/unblocking the entire page
-$.blockUI = function(opts) { install(window, opts); };
-$.unblockUI = function(opts) { remove(window, opts); };
+ var displayBlock = $('.blockMsg');
+ displayBlock.stop(); // cancel fadeout if it has started
+ displayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency
+ }).mouseout(function() {
+ $('.blockMsg').fadeOut(1000);
+ });
+ // End konapun additions
+ };
-// convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)
-$.growlUI = function(title, message, timeout, onClose) {
- var $m = $('');
- if (title) $m.append('
'+title+'
');
- if (message) $m.append('
'+message+'
');
- if (timeout == undefined) timeout = 3000;
- $.blockUI({
- message: $m, fadeIn: 700, fadeOut: 1000, centerY: false,
- timeout: timeout, showOverlay: false,
- onUnblock: onClose,
- css: $.blockUI.defaults.growlCSS
- });
-};
+ // plugin method for blocking element content
+ $.fn.block = function(opts) {
+ if ( this[0] === window ) {
+ $.blockUI( opts );
+ return this;
+ }
+ var fullOpts = $.extend({}, $.blockUI.defaults, opts || {});
+ this.each(function() {
+ var $el = $(this);
+ if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))
+ return;
+ $el.unblock({ fadeOut: 0 });
+ });
+
+ return this.each(function() {
+ if ($.css(this,'position') == 'static') {
+ this.style.position = 'relative';
+ $(this).data('blockUI.static', true);
+ }
+ this.style.zoom = 1; // force 'hasLayout' in ie
+ install(this, opts);
+ });
+ };
+
+ // plugin method for unblocking element content
+ $.fn.unblock = function(opts) {
+ if ( this[0] === window ) {
+ $.unblockUI( opts );
+ return this;
+ }
+ return this.each(function() {
+ remove(this, opts);
+ });
+ };
+
+ $.blockUI.version = 2.70; // 2nd generation blocking at no extra cost!
-// plugin method for blocking element content
-$.fn.block = function(opts) {
- return this.unblock({ fadeOut: 0 }).each(function() {
- if ($.css(this,'position') == 'static')
- this.style.position = 'relative';
- if ($.browser.msie)
- this.style.zoom = 1; // force 'hasLayout'
- install(this, opts);
- });
-};
+ // override these in your code to change the default behavior and style
+ $.blockUI.defaults = {
+ // message displayed when blocking (use null for no message)
+ message: '
Please wait...
',
+
+ title: null, // title string; only used when theme == true
+ draggable: true, // only used when theme == true (requires jquery-ui.js to be loaded)
+
+ theme: false, // set to true to use with jQuery UI themes
+
+ // styles for the message when blocking; if you wish to disable
+ // these and use an external stylesheet then do this in your code:
+ // $.blockUI.defaults.css = {};
+ css: {
+ padding: 0,
+ margin: 0,
+ width: '30%',
+ top: '40%',
+ left: '35%',
+ textAlign: 'center',
+ color: '#000',
+ border: '3px solid #aaa',
+ backgroundColor:'#fff',
+ cursor: 'wait'
+ },
+
+ // minimal style set used when themes are used
+ themedCSS: {
+ width: '30%',
+ top: '40%',
+ left: '35%'
+ },
+
+ // styles for the overlay
+ overlayCSS: {
+ backgroundColor: '#000',
+ opacity: 0.6,
+ cursor: 'wait'
+ },
+
+ // style to replace wait cursor before unblocking to correct issue
+ // of lingering wait cursor
+ cursorReset: 'default',
-// plugin method for unblocking element content
-$.fn.unblock = function(opts) {
- return this.each(function() {
- remove(this, opts);
- });
-};
+ // styles applied when using $.growlUI
+ growlCSS: {
+ width: '350px',
+ top: '10px',
+ left: '',
+ right: '10px',
+ border: 'none',
+ padding: '5px',
+ opacity: 0.6,
+ cursor: 'default',
+ color: '#fff',
+ backgroundColor: '#000',
+ '-webkit-border-radius':'10px',
+ '-moz-border-radius': '10px',
+ 'border-radius': '10px'
+ },
+
+ // IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w
+ // (hat tip to Jorge H. N. de Vasconcelos)
+ /*jshint scripturl:true */
+ iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',
+
+ // force usage of iframe in non-IE browsers (handy for blocking applets)
+ forceIframe: false,
+
+ // z-index for the blocking overlay
+ baseZ: 1000,
+
+ // set these to true to have the message automatically centered
+ centerX: true, // <-- only effects element blocking (page block controlled via css above)
+ centerY: true,
-$.blockUI.version = 2.39; // 2nd generation blocking at no extra cost!
+ // allow body element to be stetched in ie6; this makes blocking look better
+ // on "short" pages. disable if you wish to prevent changes to the body height
+ allowBodyStretch: true,
+
+ // enable if you want key and mouse events to be disabled for content that is blocked
+ bindEvents: true,
+
+ // be default blockUI will supress tab navigation from leaving blocking content
+ // (if bindEvents is true)
+ constrainTabKey: true,
+
+ // fadeIn time in millis; set to 0 to disable fadeIn on block
+ fadeIn: 200,
+
+ // fadeOut time in millis; set to 0 to disable fadeOut on unblock
+ fadeOut: 400,
-// override these in your code to change the default behavior and style
-$.blockUI.defaults = {
- // message displayed when blocking (use null for no message)
- message: '
Please wait...
',
+ // time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
+ timeout: 0,
+
+ // disable if you don't want to show the overlay
+ showOverlay: true,
+
+ // if true, focus will be placed in the first available input field when
+ // page blocking
+ focusInput: true,
+
+ // elements that can receive focus
+ focusableElements: ':input:enabled:visible',
+
+ // suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
+ // no longer needed in 2012
+ // applyPlatformOpacityRules: true,
+
+ // callback method invoked when fadeIn has completed and blocking message is visible
+ onBlock: null,
- title: null, // title string; only used when theme == true
- draggable: true, // only used when theme == true (requires jquery-ui.js to be loaded)
-
- theme: false, // set to true to use with jQuery UI themes
-
- // styles for the message when blocking; if you wish to disable
- // these and use an external stylesheet then do this in your code:
- // $.blockUI.defaults.css = {};
- css: {
- padding: 0,
- margin: 0,
- width: '30%',
- top: '40%',
- left: '35%',
- textAlign: 'center',
- color: '#000',
- border: '3px solid #aaa',
- backgroundColor:'#fff',
- cursor: 'wait'
- },
-
- // minimal style set used when themes are used
- themedCSS: {
- width: '30%',
- top: '40%',
- left: '35%'
- },
+ // callback method invoked when unblocking has completed; the callback is
+ // passed the element that has been unblocked (which is the window object for page
+ // blocks) and the options that were passed to the unblock call:
+ // onUnblock(element, options)
+ onUnblock: null,
+
+ // callback method invoked when the overlay area is clicked.
+ // setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.
+ onOverlayClick: null,
+
+ // don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
+ quirksmodeOffsetHack: 4,
+
+ // class name of the message block
+ blockMsgClass: 'blockMsg',
+
+ // if it is already blocked, then ignore it (don't unblock and reblock)
+ ignoreIfBlocked: false
+ };
+
+ // private data and functions follow...
+
+ var pageBlock = null;
+ var pageBlockEls = [];
+
+ function install(el, opts) {
+ var css, themedCSS;
+ var full = (el == window);
+ var msg = (opts && opts.message !== undefined ? opts.message : undefined);
+ opts = $.extend({}, $.blockUI.defaults, opts || {});
+
+ if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))
+ return;
+
+ opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
+ css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
+ if (opts.onOverlayClick)
+ opts.overlayCSS.cursor = 'pointer';
- // styles for the overlay
- overlayCSS: {
- backgroundColor: '#000',
- opacity: 0.6,
- cursor: 'wait'
- },
+ themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});
+ msg = msg === undefined ? opts.message : msg;
+
+ // remove the current block (if there is one)
+ if (full && pageBlock)
+ remove(window, {fadeOut:0});
+
+ // if an existing element is being used as the blocking content then we capture
+ // its current place in the DOM (and current display style) so we can restore
+ // it when we unblock
+ if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
+ var node = msg.jquery ? msg[0] : msg;
+ var data = {};
+ $(el).data('blockUI.history', data);
+ data.el = node;
+ data.parent = node.parentNode;
+ data.display = node.style.display;
+ data.position = node.style.position;
+ if (data.parent)
+ data.parent.removeChild(node);
+ }
+
+ $(el).data('blockUI.onUnblock', opts.onUnblock);
+ var z = opts.baseZ;
+
+ // blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
+ // layer1 is the iframe layer which is used to supress bleed through of underlying content
+ // layer2 is the overlay layer which has opacity and a wait cursor (by default)
+ // layer3 is the message content that is displayed while blocking
+ var lyr1, lyr2, lyr3, s;
+ if (msie || opts.forceIframe)
+ lyr1 = $('');
+ else
+ lyr1 = $('');
+
+ if (opts.theme)
+ lyr2 = $('');
+ else
+ lyr2 = $('');
- // styles applied when using $.growlUI
- growlCSS: {
- width: '350px',
- top: '10px',
- left: '',
- right: '10px',
- border: 'none',
- padding: '5px',
- opacity: 0.6,
- cursor: 'default',
- color: '#fff',
- backgroundColor: '#000',
- '-webkit-border-radius': '10px',
- '-moz-border-radius': '10px',
- 'border-radius': '10px'
- },
-
- // IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w
- // (hat tip to Jorge H. N. de Vasconcelos)
- iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',
+ if (opts.theme && full) {
+ s = '
';
+ if ( opts.title ) {
+ s += '
'+(opts.title || ' ')+'
';
+ }
+ s += '';
+ s += '
';
+ }
+ else if (opts.theme) {
+ s = '
';
+ if ( opts.title ) {
+ s += '
'+(opts.title || ' ')+'
';
+ }
+ s += '';
+ s += '
';
+ }
+ else if (full) {
+ s = '';
+ }
+ else {
+ s = '';
+ }
+ lyr3 = $(s);
+
+ // if we have a message, style it
+ if (msg) {
+ if (opts.theme) {
+ lyr3.css(themedCSS);
+ lyr3.addClass('ui-widget-content');
+ }
+ else
+ lyr3.css(css);
+ }
- // force usage of iframe in non-IE browsers (handy for blocking applets)
- forceIframe: false,
+ // style the overlay
+ if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)
+ lyr2.css(opts.overlayCSS);
+ lyr2.css('position', full ? 'fixed' : 'absolute');
+
+ // make iframe layer transparent in IE
+ if (msie || opts.forceIframe)
+ lyr1.css('opacity',0.0);
+
+ //$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
+ var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);
+ $.each(layers, function() {
+ this.appendTo($par);
+ });
- // z-index for the blocking overlay
- baseZ: 1000,
+ if (opts.theme && opts.draggable && $.fn.draggable) {
+ lyr3.draggable({
+ handle: '.ui-dialog-titlebar',
+ cancel: 'li'
+ });
+ }
+
+ // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
+ var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);
+ if (ie6 || expr) {
+ // give body 100% height
+ if (full && opts.allowBodyStretch && $.support.boxModel)
+ $('html,body').css('height','100%');
+
+ // fix ie6 issue when blocked element has a border width
+ if ((ie6 || !$.support.boxModel) && !full) {
+ var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
+ var fixT = t ? '(0 - '+t+')' : 0;
+ var fixL = l ? '(0 - '+l+')' : 0;
+ }
- // set these to true to have the message automatically centered
- centerX: true, // <-- only effects element blocking (page block controlled via css above)
- centerY: true,
+ // simulate fixed position
+ $.each(layers, function(i,o) {
+ var s = o[0].style;
+ s.position = 'absolute';
+ if (i < 2) {
+ if (full)
+ s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"');
+ else
+ s.setExpression('height','this.parentNode.offsetHeight + "px"');
+ if (full)
+ s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"');
+ else
+ s.setExpression('width','this.parentNode.offsetWidth + "px"');
+ if (fixL) s.setExpression('left', fixL);
+ if (fixT) s.setExpression('top', fixT);
+ }
+ else if (opts.centerY) {
+ if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
+ s.marginTop = 0;
+ }
+ else if (!opts.centerY && full) {
+ var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;
+ var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';
+ s.setExpression('top',expression);
+ }
+ });
+ }
- // allow body element to be stetched in ie6; this makes blocking look better
- // on "short" pages. disable if you wish to prevent changes to the body height
- allowBodyStretch: true,
-
- // enable if you want key and mouse events to be disabled for content that is blocked
- bindEvents: true,
+ // show the message
+ if (msg) {
+ if (opts.theme)
+ lyr3.find('.ui-widget-content').append(msg);
+ else
+ lyr3.append(msg);
+ if (msg.jquery || msg.nodeType)
+ $(msg).show();
+ }
- // be default blockUI will supress tab navigation from leaving blocking content
- // (if bindEvents is true)
- constrainTabKey: true,
-
- // fadeIn time in millis; set to 0 to disable fadeIn on block
- fadeIn: 200,
+ if ((msie || opts.forceIframe) && opts.showOverlay)
+ lyr1.show(); // opacity is zero
+ if (opts.fadeIn) {
+ var cb = opts.onBlock ? opts.onBlock : noOp;
+ var cb1 = (opts.showOverlay && !msg) ? cb : noOp;
+ var cb2 = msg ? cb : noOp;
+ if (opts.showOverlay)
+ lyr2._fadeIn(opts.fadeIn, cb1);
+ if (msg)
+ lyr3._fadeIn(opts.fadeIn, cb2);
+ }
+ else {
+ if (opts.showOverlay)
+ lyr2.show();
+ if (msg)
+ lyr3.show();
+ if (opts.onBlock)
+ opts.onBlock.bind(lyr3)();
+ }
- // fadeOut time in millis; set to 0 to disable fadeOut on unblock
- fadeOut: 400,
+ // bind key and mouse events
+ bind(1, el, opts);
+
+ if (full) {
+ pageBlock = lyr3[0];
+ pageBlockEls = $(opts.focusableElements,pageBlock);
+ if (opts.focusInput)
+ setTimeout(focus, 20);
+ }
+ else
+ center(lyr3[0], opts.centerX, opts.centerY);
- // time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
- timeout: 0,
-
- // disable if you don't want to show the overlay
- showOverlay: true,
+ if (opts.timeout) {
+ // auto-unblock
+ var to = setTimeout(function() {
+ if (full)
+ $.unblockUI(opts);
+ else
+ $(el).unblock(opts);
+ }, opts.timeout);
+ $(el).data('blockUI.timeout', to);
+ }
+ }
- // if true, focus will be placed in the first available input field when
- // page blocking
- focusInput: true,
+ // remove the block
+ function remove(el, opts) {
+ var count;
+ var full = (el == window);
+ var $el = $(el);
+ var data = $el.data('blockUI.history');
+ var to = $el.data('blockUI.timeout');
+ if (to) {
+ clearTimeout(to);
+ $el.removeData('blockUI.timeout');
+ }
+ opts = $.extend({}, $.blockUI.defaults, opts || {});
+ bind(0, el, opts); // unbind events
- // suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
- applyPlatformOpacityRules: true,
-
- // callback method invoked when fadeIn has completed and blocking message is visible
- onBlock: null,
+ if (opts.onUnblock === null) {
+ opts.onUnblock = $el.data('blockUI.onUnblock');
+ $el.removeData('blockUI.onUnblock');
+ }
+
+ var els;
+ if (full) // crazy selector to handle odd field errors in ie6/7
+ els = $('body').children().filter('.blockUI').add('body > .blockUI');
+ else
+ els = $el.find('>.blockUI');
+
+ // fix cursor issue
+ if ( opts.cursorReset ) {
+ if ( els.length > 1 )
+ els[1].style.cursor = opts.cursorReset;
+ if ( els.length > 2 )
+ els[2].style.cursor = opts.cursorReset;
+ }
+
+ if (full)
+ pageBlock = pageBlockEls = null;
- // callback method invoked when unblocking has completed; the callback is
- // passed the element that has been unblocked (which is the window object for page
- // blocks) and the options that were passed to the unblock call:
- // onUnblock(element, options)
- onUnblock: null,
+ if (opts.fadeOut) {
+ count = els.length;
+ els.stop().fadeOut(opts.fadeOut, function() {
+ if ( --count === 0)
+ reset(els,data,opts,el);
+ });
+ }
+ else
+ reset(els, data, opts, el);
+ }
+
+ // move blocking element back into the DOM where it started
+ function reset(els,data,opts,el) {
+ var $el = $(el);
+ if ( $el.data('blockUI.isBlocked') )
+ return;
- // don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
- quirksmodeOffsetHack: 4,
+ els.each(function(i,o) {
+ // remove via DOM calls so we don't lose event handlers
+ if (this.parentNode)
+ this.parentNode.removeChild(this);
+ });
- // class name of the message block
- blockMsgClass: 'blockMsg'
-};
+ if (data && data.el) {
+ data.el.style.display = data.display;
+ data.el.style.position = data.position;
+ data.el.style.cursor = 'default'; // #59
+ if (data.parent)
+ data.parent.appendChild(data.el);
+ $el.removeData('blockUI.history');
+ }
-// private data and functions follow...
+ if ($el.data('blockUI.static')) {
+ $el.css('position', 'static'); // #22
+ }
+
+ if (typeof opts.onUnblock == 'function')
+ opts.onUnblock(el,opts);
-var pageBlock = null;
-var pageBlockEls = [];
+ // fix issue in Safari 6 where block artifacts remain until reflow
+ var body = $(document.body), w = body.width(), cssW = body[0].style.width;
+ body.width(w-1).width(w);
+ body[0].style.width = cssW;
+ }
+
+ // bind/unbind the handler
+ function bind(b, el, opts) {
+ var full = el == window, $el = $(el);
+
+ // don't bother unbinding if there is nothing to unbind
+ if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))
+ return;
+
+ $el.data('blockUI.isBlocked', b);
-function install(el, opts) {
- var full = (el == window);
- var msg = opts && opts.message !== undefined ? opts.message : undefined;
- opts = $.extend({}, $.blockUI.defaults, opts || {});
- opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
- var css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
- var themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});
- msg = msg === undefined ? opts.message : msg;
+ // don't bind events when overlay is not in use or if bindEvents is false
+ if (!full || !opts.bindEvents || (b && !opts.showOverlay))
+ return;
+
+ // bind anchors and inputs for mouse and key events
+ var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';
+ if (b)
+ $(document).bind(events, opts, handler);
+ else
+ $(document).unbind(events, handler);
+
+ // former impl...
+ // var $e = $('a,:input');
+ // b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
+ }
- // remove the current block (if there is one)
- if (full && pageBlock)
- remove(window, {fadeOut:0});
+ // event handler to suppress keyboard/mouse events when blocking
+ function handler(e) {
+ // allow tab navigation (conditionally)
+ if (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {
+ if (pageBlock && e.data.constrainTabKey) {
+ var els = pageBlockEls;
+ var fwd = !e.shiftKey && e.target === els[els.length-1];
+ var back = e.shiftKey && e.target === els[0];
+ if (fwd || back) {
+ setTimeout(function(){focus(back);},10);
+ return false;
+ }
+ }
+ }
+ var opts = e.data;
+ var target = $(e.target);
+ if (target.hasClass('blockOverlay') && opts.onOverlayClick)
+ opts.onOverlayClick(e);
+
+ // allow events within the message content
+ if (target.parents('div.' + opts.blockMsgClass).length > 0)
+ return true;
- // if an existing element is being used as the blocking content then we capture
- // its current place in the DOM (and current display style) so we can restore
- // it when we unblock
- if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
- var node = msg.jquery ? msg[0] : msg;
- var data = {};
- $(el).data('blockUI.history', data);
- data.el = node;
- data.parent = node.parentNode;
- data.display = node.style.display;
- data.position = node.style.position;
- if (data.parent)
- data.parent.removeChild(node);
+ // allow events for content that is not being blocked
+ return target.parents().children().filter('div.blockUI').length === 0;
+ }
+
+ function focus(back) {
+ if (!pageBlockEls)
+ return;
+ var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
+ if (e)
+ e.focus();
+ }
+
+ function center(el, x, y) {
+ var p = el.parentNode, s = el.style;
+ var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
+ var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
+ if (x) s.left = l > 0 ? (l+'px') : '0';
+ if (y) s.top = t > 0 ? (t+'px') : '0';
+ }
+
+ function sz(el, p) {
+ return parseInt($.css(el,p),10)||0;
+ }
+
}
- $(el).data('blockUI.onUnblock', opts.onUnblock);
- var z = opts.baseZ;
- // blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
- // layer1 is the iframe layer which is used to supress bleed through of underlying content
- // layer2 is the overlay layer which has opacity and a wait cursor (by default)
- // layer3 is the message content that is displayed while blocking
-
- var lyr1 = ($.browser.msie || opts.forceIframe)
- ? $('')
- : $('');
-
- var lyr2 = opts.theme
- ? $('')
- : $('');
-
- var lyr3, s;
- if (opts.theme && full) {
- s = '
' +
- '
'+(opts.title || ' ')+'
' +
- '' +
- '
';
- }
- else if (opts.theme) {
- s = '
' +
- '
'+(opts.title || ' ')+'
' +
- '' +
- '
';
- }
- else if (full) {
- s = '';
- }
- else {
- s = '';
- }
- lyr3 = $(s);
-
- // if we have a message, style it
- if (msg) {
- if (opts.theme) {
- lyr3.css(themedCSS);
- lyr3.addClass('ui-widget-content');
- }
- else
- lyr3.css(css);
- }
-
- // style the overlay
- if (!opts.theme && (!opts.applyPlatformOpacityRules || !($.browser.mozilla && /Linux/.test(navigator.platform))))
- lyr2.css(opts.overlayCSS);
- lyr2.css('position', full ? 'fixed' : 'absolute');
-
- // make iframe layer transparent in IE
- if ($.browser.msie || opts.forceIframe)
- lyr1.css('opacity',0.0);
-
- //$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
- var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);
- $.each(layers, function() {
- this.appendTo($par);
- });
-
- if (opts.theme && opts.draggable && $.fn.draggable) {
- lyr3.draggable({
- handle: '.ui-dialog-titlebar',
- cancel: 'li'
- });
- }
-
- // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
- var expr = setExpr && (!$.boxModel || $('object,embed', full ? null : el).length > 0);
- if (ie6 || expr) {
- // give body 100% height
- if (full && opts.allowBodyStretch && $.boxModel)
- $('html,body').css('height','100%');
-
- // fix ie6 issue when blocked element has a border width
- if ((ie6 || !$.boxModel) && !full) {
- var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
- var fixT = t ? '(0 - '+t+')' : 0;
- var fixL = l ? '(0 - '+l+')' : 0;
- }
-
- // simulate fixed position
- $.each([lyr1,lyr2,lyr3], function(i,o) {
- var s = o[0].style;
- s.position = 'absolute';
- if (i < 2) {
- full ? s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"')
- : s.setExpression('height','this.parentNode.offsetHeight + "px"');
- full ? s.setExpression('width','jQuery.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"')
- : s.setExpression('width','this.parentNode.offsetWidth + "px"');
- if (fixL) s.setExpression('left', fixL);
- if (fixT) s.setExpression('top', fixT);
- }
- else if (opts.centerY) {
- if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
- s.marginTop = 0;
- }
- else if (!opts.centerY && full) {
- var top = (opts.css && opts.css.top) ? parseInt(opts.css.top) : 0;
- var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';
- s.setExpression('top',expression);
- }
- });
- }
-
- // show the message
- if (msg) {
- if (opts.theme)
- lyr3.find('.ui-widget-content').append(msg);
- else
- lyr3.append(msg);
- if (msg.jquery || msg.nodeType)
- $(msg).show();
- }
-
- if (($.browser.msie || opts.forceIframe) && opts.showOverlay)
- lyr1.show(); // opacity is zero
- if (opts.fadeIn) {
- var cb = opts.onBlock ? opts.onBlock : noOp;
- var cb1 = (opts.showOverlay && !msg) ? cb : noOp;
- var cb2 = msg ? cb : noOp;
- if (opts.showOverlay)
- lyr2._fadeIn(opts.fadeIn, cb1);
- if (msg)
- lyr3._fadeIn(opts.fadeIn, cb2);
- }
- else {
- if (opts.showOverlay)
- lyr2.show();
- if (msg)
- lyr3.show();
- if (opts.onBlock)
- opts.onBlock();
+ /*global define:true */
+ if (typeof define === 'function' && define.amd && define.amd.jQuery) {
+ define(['jquery'], setup);
+ } else {
+ setup(jQuery);
}
- // bind key and mouse events
- bind(1, el, opts);
-
- if (full) {
- pageBlock = lyr3[0];
- pageBlockEls = $(':input:enabled:visible',pageBlock);
- if (opts.focusInput)
- setTimeout(focus, 20);
- }
- else
- center(lyr3[0], opts.centerX, opts.centerY);
-
- if (opts.timeout) {
- // auto-unblock
- var to = setTimeout(function() {
- full ? $.unblockUI(opts) : $(el).unblock(opts);
- }, opts.timeout);
- $(el).data('blockUI.timeout', to);
- }
-};
-
-// remove the block
-function remove(el, opts) {
- var full = (el == window);
- var $el = $(el);
- var data = $el.data('blockUI.history');
- var to = $el.data('blockUI.timeout');
- if (to) {
- clearTimeout(to);
- $el.removeData('blockUI.timeout');
- }
- opts = $.extend({}, $.blockUI.defaults, opts || {});
- bind(0, el, opts); // unbind events
-
- if (opts.onUnblock === null) {
- opts.onUnblock = $el.data('blockUI.onUnblock');
- $el.removeData('blockUI.onUnblock');
- }
-
- var els;
- if (full) // crazy selector to handle odd field errors in ie6/7
- els = $('body').children().filter('.blockUI').add('body > .blockUI');
- else
- els = $('.blockUI', el);
-
- if (full)
- pageBlock = pageBlockEls = null;
-
- if (opts.fadeOut) {
- els.fadeOut(opts.fadeOut);
- setTimeout(function() { reset(els,data,opts,el); }, opts.fadeOut);
- }
- else
- reset(els, data, opts, el);
-};
-
-// move blocking element back into the DOM where it started
-function reset(els,data,opts,el) {
- els.each(function(i,o) {
- // remove via DOM calls so we don't lose event handlers
- if (this.parentNode)
- this.parentNode.removeChild(this);
- });
-
- if (data && data.el) {
- data.el.style.display = data.display;
- data.el.style.position = data.position;
- if (data.parent)
- data.parent.appendChild(data.el);
- $(el).removeData('blockUI.history');
- }
-
- if (typeof opts.onUnblock == 'function')
- opts.onUnblock(el,opts);
-};
-
-// bind/unbind the handler
-function bind(b, el, opts) {
- var full = el == window, $el = $(el);
-
- // don't bother unbinding if there is nothing to unbind
- if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))
- return;
- if (!full)
- $el.data('blockUI.isBlocked', b);
-
- // don't bind events when overlay is not in use or if bindEvents is false
- if (!opts.bindEvents || (b && !opts.showOverlay))
- return;
-
- // bind anchors and inputs for mouse and key events
- var events = 'mousedown mouseup keydown keypress';
- b ? $(document).bind(events, opts, handler) : $(document).unbind(events, handler);
-
-// former impl...
-// var $e = $('a,:input');
-// b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
-};
-
-// event handler to suppress keyboard/mouse events when blocking
-function handler(e) {
- // allow tab navigation (conditionally)
- if (e.keyCode && e.keyCode == 9) {
- if (pageBlock && e.data.constrainTabKey) {
- var els = pageBlockEls;
- var fwd = !e.shiftKey && e.target === els[els.length-1];
- var back = e.shiftKey && e.target === els[0];
- if (fwd || back) {
- setTimeout(function(){focus(back)},10);
- return false;
- }
- }
- }
- var opts = e.data;
- // allow events within the message content
- if ($(e.target).parents('div.' + opts.blockMsgClass).length > 0)
- return true;
-
- // allow events for content that is not being blocked
- return $(e.target).parents().children().filter('div.blockUI').length == 0;
-};
-
-function focus(back) {
- if (!pageBlockEls)
- return;
- var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
- if (e)
- e.focus();
-};
-
-function center(el, x, y) {
- var p = el.parentNode, s = el.style;
- var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
- var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
- if (x) s.left = l > 0 ? (l+'px') : '0';
- if (y) s.top = t > 0 ? (t+'px') : '0';
-};
-
-function sz(el, p) {
- return parseInt($.css(el,p))||0;
-};
-
-})(jQuery);
+})();
diff -r b89a4288d605 -r 5713952f60c0 OrthancExplorer/libs/jquery.min.js
--- a/OrthancExplorer/libs/jquery.min.js Wed Dec 26 11:15:17 2018 +0100
+++ b/OrthancExplorer/libs/jquery.min.js Wed Dec 26 16:58:21 2018 +0100
@@ -1,4 +1,5 @@
-/*! jQuery v1.7.2 jquery.com | jquery.org/license */
-(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"":"")+""),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;e=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="