From 25b979d9ef58d768b7160890ee2740afbb7bbf55 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Mar 2020 17:51:25 +0100 Subject: [PATCH 001/137] start new version 5.1.16 --- CHANGELOG | 4 ++++ SeedDMS_Core/Core/inc.ClassDMS.php | 2 +- inc/inc.Version.php | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 68c3d0831..f41bfe6c3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +-------------------------------------------------------------------------------- + Changes in version 5.1.16 +-------------------------------------------------------------------------------- + -------------------------------------------------------------------------------- Changes in version 5.1.15 -------------------------------------------------------------------------------- diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index bbaa830bb..070d9f098 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -383,7 +383,7 @@ class SeedDMS_Core_DMS { $this->callbacks = array(); $this->version = '@package_version@'; if($this->version[0] == '@') - $this->version = '5.1.15'; + $this->version = '5.1.16'; } /* }}} */ /** diff --git a/inc/inc.Version.php b/inc/inc.Version.php index d4e7d8127..f04d14174 100644 --- a/inc/inc.Version.php +++ b/inc/inc.Version.php @@ -20,7 +20,7 @@ class SeedDMS_Version { /* {{{ */ - const _number = "5.1.15"; + const _number = "5.1.16"; const _string = "SeedDMS"; function __construct() { From 92b291d4d2fc7fb50455ddb8141385c164c490e4 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Mar 2020 18:16:40 +0100 Subject: [PATCH 002/137] start new version 5.1.16 --- SeedDMS_Core/package.xml | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index a8c060e33..dda3454c6 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -12,11 +12,11 @@ uwe@steinmann.cx yes - 2020-03-02 + 2020-04-02 - 5.1.15 - 5.1.15 + 5.1.16 + 5.1.16 stable @@ -1728,5 +1728,21 @@ add method SeedDMS_Core_DatabaseAccess::setLogFp() - speed up SeedDMS_Core_Folder::getSubFolders() SeedDMS_Core_Folder::getDocuments() by minimizing the number of sql queries. + + 2020-03-02 + + + 5.1.15 + 5.1.15 + + + stable + stable + + GPL License + +- no changes, just keep same version as seeddms application + + From 41b9ca549ed07da7302dfd12ed622bcd60745484 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Mar 2020 18:27:24 +0100 Subject: [PATCH 003/137] fix bug #458 --- op/op.ImportFS.php | 1 + 1 file changed, 1 insertion(+) diff --git a/op/op.ImportFS.php b/op/op.ImportFS.php index e19389c66..73afdeed4 100644 --- a/op/op.ImportFS.php +++ b/op/op.ImportFS.php @@ -61,6 +61,7 @@ function getAttributeData($attrdef, $coldata, $objdata) { /* {{{ */ function getCategoryData($colname, $coldata, $objdata) { /* {{{ */ global $catids; $kk = explode(',', $coldata); + $objdata['category'][] = array(); foreach($kk as $k) { if(isset($catids[$k])) $objdata['category'][] = $catids[$k]; From 5e1947ad16a717eb09ecbb4671e995581f9758f3 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Mar 2020 18:29:20 +0100 Subject: [PATCH 004/137] add entry for 5.1.16 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index f41bfe6c3..cd62b667f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ -------------------------------------------------------------------------------- Changes in version 5.1.16 -------------------------------------------------------------------------------- +- initialize categories to empty array. Closes #458 -------------------------------------------------------------------------------- Changes in version 5.1.15 From 8a789800e1a7bd51aa00b3a4860639000b0e0d71 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Mar 2020 18:34:39 +0100 Subject: [PATCH 005/137] fix some php warnings --- out/out.ApprovalSummary.php | 1 + out/out.ReviewSummary.php | 1 + 2 files changed, 2 insertions(+) diff --git a/out/out.ApprovalSummary.php b/out/out.ApprovalSummary.php index 6132b73e8..ecc8374a8 100644 --- a/out/out.ApprovalSummary.php +++ b/out/out.ApprovalSummary.php @@ -37,6 +37,7 @@ if ($user->isGuest()) { } if($view) { + $view->setParam('showtree', showtree()); $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('previewWidthList', $settings->_previewWidthList); $view->setParam('timeout', $settings->_cmdTimeout); diff --git a/out/out.ReviewSummary.php b/out/out.ReviewSummary.php index 6132b73e8..ecc8374a8 100644 --- a/out/out.ReviewSummary.php +++ b/out/out.ReviewSummary.php @@ -37,6 +37,7 @@ if ($user->isGuest()) { } if($view) { + $view->setParam('showtree', showtree()); $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('previewWidthList', $settings->_previewWidthList); $view->setParam('timeout', $settings->_cmdTimeout); From 083820e42df48c22f53ec393955dac48913b9fee Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Mar 2020 20:37:51 +0100 Subject: [PATCH 006/137] set min-width and padding of div.popupbox --- styles/bootstrap/application.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/styles/bootstrap/application.css b/styles/bootstrap/application.css index d24cab1bd..432bf5ef5 100644 --- a/styles/bootstrap/application.css +++ b/styles/bootstrap/application.css @@ -209,10 +209,10 @@ div.popupbox { text-align: left; text-shadow: none; border: 1px solid #ccc; - padding: 15px; + padding: 25px 15px 15px 15px; display: none; position: absolute; - width: 250px; + min-width: 250px; } div.popupbox span.closepopupbox { From 8546b4823091f8734ec116391734bd06472690bb Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Mar 2020 20:38:20 +0100 Subject: [PATCH 007/137] stop propagation when opening and closing a popup box --- styles/bootstrap/application.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/styles/bootstrap/application.js b/styles/bootstrap/application.js index da9d4e291..6aaba78e9 100644 --- a/styles/bootstrap/application.js +++ b/styles/bootstrap/application.js @@ -1139,6 +1139,7 @@ $(document).ready(function() { /* {{{ */ $("body").on("click", "span.openpopupbox", function(e) { $(""+$(e.target).data("href")).toggle(); + e.stopPropagation(); }); $("body").on("click", "span.openpopupbox i", function(e) { $(e.target).parent().click(); @@ -1148,6 +1149,7 @@ $(document).ready(function() { /* {{{ */ }); $("body").on("click", "span.closepopupbox", function(e) { $(this).parent().hide(); + e.stopPropagation(); }); }); /* }}} */ From 987c9a1fcb22692e6c487dcd22d10506a782e296 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Mar 2020 20:47:25 +0100 Subject: [PATCH 008/137] set min-width of popup box to 230px --- styles/bootstrap/application.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/styles/bootstrap/application.css b/styles/bootstrap/application.css index 432bf5ef5..8ae479df4 100644 --- a/styles/bootstrap/application.css +++ b/styles/bootstrap/application.css @@ -212,7 +212,7 @@ div.popupbox { padding: 25px 15px 15px 15px; display: none; position: absolute; - min-width: 250px; + min-width: 230px; } div.popupbox span.closepopupbox { From 6aa57ad2b1e0c47aaf7e4629f8321ad5448925fd Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Mar 2020 22:24:32 +0100 Subject: [PATCH 009/137] set onepage mode in view --- out/out.Calendar.php | 2 +- out/out.Categories.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/out/out.Calendar.php b/out/out.Calendar.php index e8f1ad8e0..1bb27108b 100644 --- a/out/out.Calendar.php +++ b/out/out.Calendar.php @@ -66,7 +66,7 @@ if(isset($_GET['eventtype']) && $_GET['eventtype']) { if($view) { $view->setParam('accessobject', $accessop); - $view->setParam('onepage', false); // do most navigation by reloading areas of pages with ajax + $view->setParam('onepage', $settings->_onePageMode); // do most navigation by reloading areas of pages with ajax $view->setParam('calendar', $calendar); $view->setParam('start', $start); $view->setParam('end', $end); diff --git a/out/out.Categories.php b/out/out.Categories.php index 6009753b4..35092df49 100644 --- a/out/out.Categories.php +++ b/out/out.Categories.php @@ -50,6 +50,7 @@ if($view) { $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('previewWidthList', $settings->_previewWidthList); $view->setParam('timeout', $settings->_cmdTimeout); + $view->setParam('onepage', $settings->_onePageMode); // do most navigation by reloading areas of pages with ajax $view->setParam('xsendfile', $settings->_enableXsendfile); $view($_GET); } From 54a14286f378bdc9c739b6bb4fb7727216ac377b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Mar 2020 22:25:10 +0100 Subject: [PATCH 010/137] set cursor of documentListRow in onepage mode, show id on mouse over --- views/bootstrap/class.Bootstrap.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index f1dcb76b4..f20243e9d 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -2371,9 +2371,9 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $content .= "getMimeIcon($latestContent->getFileType())."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"; $content .= ""; - $content .= ""; + $content .= ""; if($onepage) - $content .= "".htmlspecialchars($document->getName()) . ""; + $content .= "".htmlspecialchars($document->getName()) . ""; else $content .= "" . htmlspecialchars($document->getName()) . ""; if(isset($extracontent['below_title'])) @@ -2977,4 +2977,3 @@ $("body").on("click", "span.openpopupbox", function(e) { From 91f61aad877ac5b7bf3eaed38c24493835e21bb3 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Mar 2020 22:26:05 +0100 Subject: [PATCH 011/137] support for onepage mode --- views/bootstrap/class.Calendar.php | 1 + views/bootstrap/class.Categories.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/views/bootstrap/class.Calendar.php b/views/bootstrap/class.Calendar.php index 381a904f7..9410c3f02 100644 --- a/views/bootstrap/class.Calendar.php +++ b/views/bootstrap/class.Calendar.php @@ -374,6 +374,7 @@ $(document).ready(function() { }); */ printClickDocumentJs(); } /* }}} */ function show() { /* {{{ */ diff --git a/views/bootstrap/class.Categories.php b/views/bootstrap/class.Categories.php index ceb8b2ed3..c563fa74f 100644 --- a/views/bootstrap/class.Categories.php +++ b/views/bootstrap/class.Categories.php @@ -48,6 +48,7 @@ $(document).ready( function() { printDeleteFolderButtonJs(); $this->printDeleteDocumentButtonJs(); + $this->printClickDocumentJs(); } /* }}} */ function info() { /* {{{ */ @@ -178,4 +179,3 @@ $(document).ready( function() { $this->htmlEndPage(); } /* }}} */ } -?> From 0acc08178fbae3e03f19933af7f76875ed284d44 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Mar 2020 22:26:28 +0100 Subject: [PATCH 012/137] support for onepage mode --- out/out.AttributeMgr.php | 2 +- views/bootstrap/class.AttributeMgr.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/out/out.AttributeMgr.php b/out/out.AttributeMgr.php index 445a69d60..1a613d247 100644 --- a/out/out.AttributeMgr.php +++ b/out/out.AttributeMgr.php @@ -48,7 +48,7 @@ if(isset($_GET['attrdefid']) && $_GET['attrdefid']) { if($view) { $view->setParam('accessobject', $accessop); - $view->setParam('onepage', false); // do most navigation by reloading areas of pages with ajax + $view->setParam('onepage', $settings->_onePageMode); // do most navigation by reloading areas of pages with ajax $view->setParam('attrdefs', $attrdefs); $view->setParam('selattrdef', $selattrdef); $view->setParam('showtree', showtree()); diff --git a/views/bootstrap/class.AttributeMgr.php b/views/bootstrap/class.AttributeMgr.php index 2a9f6d05a..4bc4de3e2 100644 --- a/views/bootstrap/class.AttributeMgr.php +++ b/views/bootstrap/class.AttributeMgr.php @@ -55,6 +55,7 @@ $(document).ready( function() { $this->printDeleteFolderButtonJs(); $this->printDeleteDocumentButtonJs(); $this->printDeleteAttributeValueButtonJs(); + $this->printClickDocumentJs(); } /* }}} */ function info() { /* {{{ */ @@ -376,4 +377,3 @@ $(document).ready( function() { $this->htmlEndPage(); } /* }}} */ } -?> From 92216112a47806aeb758ceff012f05ba4265202e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Mar 2020 22:30:42 +0100 Subject: [PATCH 013/137] set title and cursor of folder row in onepage mode --- views/bootstrap/class.Bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index f20243e9d..f02c47688 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -2493,7 +2493,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $content .= $this->folderListRowStart($subFolder); $content .= "getID()."&showtree=".$showtree."\">getMimeIcon(".folder")."\" width=\"24\" height=\"24\" border=0>\n"; if($onepage) - $content .= "" . "".htmlspecialchars($subFolder->getName()).""; + $content .= "" . "getId()."\">".htmlspecialchars($subFolder->getName()).""; else $content .= "getID()."&showtree=".$showtree."\">" . htmlspecialchars($subFolder->getName()) . ""; $content .= "
".getMLText('owner').": ".htmlspecialchars($owner->getFullName()).", ".getMLText('creation_date').": ".date('Y-m-d', $subFolder->getDate()).""; From d5ce0f8fe9d334d4f90e7e2d3debb1a9482282d2 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Mar 2020 09:11:15 +0100 Subject: [PATCH 014/137] hook folderListItem has new parameter --- views/bootstrap/class.ViewFolder.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.ViewFolder.php b/views/bootstrap/class.ViewFolder.php index 669d73ba9..61492e27c 100644 --- a/views/bootstrap/class.ViewFolder.php +++ b/views/bootstrap/class.ViewFolder.php @@ -359,7 +359,7 @@ $('body').on('click', '.order-btn', function(ev) { foreach($subFolders as $subFolder) { if(!$maxItemsPerPage || $i < $maxItemsPerPage) { - $txt = $this->callHook('folderListItem', $subFolder, 'viewfolder'); + $txt = $this->callHook('folderListItem', $subFolder, false, 'viewfolder'); if(is_string($txt)) echo $txt; else { @@ -467,7 +467,7 @@ $('body').on('click', '.order-btn', function(ev) { $j = 0; // counts only returned entries foreach($subFolders as $subFolder) { if($i >= $offset && $j < $limit) { - $txt = $this->callHook('folderListItem', $subFolder, 'viewfolder'); + $txt = $this->callHook('folderListItem', $subFolder, false, 'viewfolder'); if(is_string($txt)) $content .= $txt; else { From 3e98a18babfbfca34d77ff44de5c0e0a51d213bb Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Mar 2020 09:11:45 +0100 Subject: [PATCH 015/137] add new optional parameter skipcont to folderListRow() --- views/bootstrap/class.Bootstrap.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index f02c47688..3152517b5 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -2475,7 +2475,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) return "\n"; } /* }}} */ - function folderListRow($subFolder, $extracontent=array()) { /* {{{ */ + function folderListRow($subFolder, $skipcont=false, $extracontent=array()) { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; // $folder = $this->params['folder']; @@ -2490,7 +2490,8 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) if (strlen($comment) > 150) $comment = substr($comment, 0, 147) . "..."; $content = ''; - $content .= $this->folderListRowStart($subFolder); + if(!$skipcont) + $content .= $this->folderListRowStart($subFolder); $content .= "getID()."&showtree=".$showtree."\">getMimeIcon(".folder")."\" width=\"24\" height=\"24\" border=0>\n"; if($onepage) $content .= "" . "getId()."\">".htmlspecialchars($subFolder->getName()).""; @@ -2551,7 +2552,8 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) } $content .= ""; $content .= ""; - $content .= $this->folderListRowEnd($subFolder); + if(!$skipcont) + $content .= $this->folderListRowEnd($subFolder); return $content; } /* }}} */ From 09f5943eb008fb9ea221e930f2ee18086104b248 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Mar 2020 09:12:25 +0100 Subject: [PATCH 016/137] pass new parameter $skipcont to folderListRow() --- views/bootstrap/class.Search.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.Search.php b/views/bootstrap/class.Search.php index 0df46af47..0b64409b7 100644 --- a/views/bootstrap/class.Search.php +++ b/views/bootstrap/class.Search.php @@ -558,7 +558,7 @@ class SeedDMS_View_Search extends SeedDMS_Bootstrap_Style { $extracontent = array(); if($attrstr) $extracontent['bottom_title'] = '
'.$this->printPopupBox(''.getMLText('attributes').'', $attrstr, true); - print $this->folderListRow($folder, $extracontent); + print $this->folderListRow($folder, false, $extracontent); } } print "\n"; From 49bebebdae0132c36d5b481e8fa9211486c22b67 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Mar 2020 09:12:45 +0100 Subject: [PATCH 017/137] overhaul ManageNotify, support onepage mode, use standard output for documents and folders --- out/out.ManageNotify.php | 1 + views/bootstrap/class.ManageNotify.php | 62 ++++++++++---------------- 2 files changed, 24 insertions(+), 39 deletions(-) diff --git a/out/out.ManageNotify.php b/out/out.ManageNotify.php index bd204b655..a641d338c 100644 --- a/out/out.ManageNotify.php +++ b/out/out.ManageNotify.php @@ -38,6 +38,7 @@ if($view) { $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('previewWidthList', $settings->_previewWidthList); $view->setParam('timeout', $settings->_cmdTimeout); + $view->setParam('onepage', $settings->_onePageMode); // do most navigation by reloading areas of pages with ajax $view->setParam('xsendfile', $settings->_enableXsendfile); $view($_GET); exit; diff --git a/views/bootstrap/class.ManageNotify.php b/views/bootstrap/class.ManageNotify.php index a93f0a7ea..2416a1706 100644 --- a/views/bootstrap/class.ManageNotify.php +++ b/views/bootstrap/class.ManageNotify.php @@ -64,7 +64,7 @@ class SeedDMS_View_ManageNotify extends SeedDMS_Bootstrap_Style { } else { - print ""; + print "
"; print "\n"; print "\n"; print "\n"; @@ -74,15 +74,18 @@ class SeedDMS_View_ManageNotify extends SeedDMS_Bootstrap_Style { foreach($notifications as $notification) { $fld = $this->dms->getFolder($notification->getTarget()); if (is_object($fld)) { - $owner = $fld->getOwner(); - print ""; - print ""; - print "\n"; - print ""; + echo $this->folderListRowStart($fld); + $txt = $this->callHook('folderListItem', $fld, true, 'viewfolder'); + if(is_string($txt)) + echo $txt; + else { + echo $this->folderListRow($fld, true); + } print ""; + print ""; + echo $this->folderListRowEnd($fld); } } print "
".getMLText("name")."
getID()."\">" . htmlspecialchars($fld->getName()) . "".htmlspecialchars($owner->getFullName()).""; if ($deleteaction) print " ".getMLText("delete").""; else print "".getMLText("edit").""; - print "
"; @@ -97,42 +100,30 @@ class SeedDMS_View_ManageNotify extends SeedDMS_Bootstrap_Style { else { $previewer = new SeedDMS_Preview_Previewer($this->cachedir, $this->previewwidth, $this->timeout, $this->xsendfile); - print ""; + print "
"; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; + print "\n"; print "\n\n"; foreach ($notifications as $notification) { $doc = $this->dms->getDocument($notification->getTarget()); if (is_object($doc)) { - $owner = $doc->getOwner(); - $latest = $doc->getLatestContent(); - $status = $latest->getStatus(); - $previewer->createPreview($latest); - print "\n"; - print ""; - - print "\n"; - - print ""; print "\n"; + print "\n"; + echo $this->documentListRowEnd($doc); } } print "
".getMLText("name")."".getMLText("status")."".getMLText("action")."
"; - if($previewer->hasPreview($latest)) { - print "previewwidth."\" src=\"../op/op.Preview.php?documentid=".$doc->getID()."&version=".$latest->getVersion()."&width=".$this->previewwidth."\" title=\"".htmlspecialchars($latest->getMimeType())."\">"; - } else { - print "previewwidth."\" src=\"".$this->getMimeIcon($latest->getFileType())."\" title=\"".htmlspecialchars($latest->getMimeType())."\">"; + $doc->verifyLastestContentExpriry(); + echo $this->documentListRowStart($doc); + $txt = $this->callHook('documentListItem', $doc, $previewer, true, 'managenotify'); + if(is_string($txt)) + echo $txt; + else { + echo $this->documentListRow($doc, $previewer, true); } - print "getID()."\">" . htmlspecialchars($doc->getName()) . ""; - print "
".getMLText('owner').": ".htmlspecialchars($owner->getFullName()).", ".getMLText('creation_date').": ".date('Y-m-d', $doc->getDate()).", ".getMLText('version')." ".$latest->getVersion()." - ".date('Y-m-d', $latest->getDate()).""; - $comment = $latest->getComment(); - if($comment) { - print "
".htmlspecialchars($comment).""; - } - print "
".getOverallStatusText($status["status"]).""; if ($deleteaction) print " ".getMLText("delete").""; else print "".getMLText("edit").""; - print "
"; @@ -144,6 +135,8 @@ class SeedDMS_View_ManageNotify extends SeedDMS_Bootstrap_Style { $this->printFolderChooserJs("form1"); $this->printDocumentChooserJs("form2"); + $this->printClickDocumentJs(); + $this->printClickFolderJs(); } /* }}} */ function show() { /* {{{ */ @@ -211,28 +204,20 @@ class SeedDMS_View_ManageNotify extends SeedDMS_Bootstrap_Style { echo "
"; echo "
"; $this->contentHeading(getMLText("user")); - $this->contentContainerStart(); $ret=$this->getNotificationList(false,true); $this->printFolderNotificationList($ret); - $this->contentContainerEnd(); $this->contentHeading(getMLText("group")); - $this->contentContainerStart(); $ret=$this->getNotificationList(true,true); $this->printFolderNotificationList($ret,false); - $this->contentContainerEnd(); echo "
"; echo "
"; $this->contentHeading(getMLText("user")); - $this->contentContainerStart(); $ret=$this->getNotificationList(false,false); $this->printDocumentNotificationList($ret); - $this->contentContainerEnd(); $this->contentHeading(getMLText("group")); - $this->contentContainerStart(); $ret=$this->getNotificationList(true,false); $this->printDocumentNotificationList($ret,false); - $this->contentContainerEnd(); echo "
"; echo "
"; @@ -240,4 +225,3 @@ class SeedDMS_View_ManageNotify extends SeedDMS_Bootstrap_Style { $this->htmlEndPage(); } /* }}} */ } -?> From db3f38060465a448f99659694ba7cd9a4166a770 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Mar 2020 09:13:30 +0100 Subject: [PATCH 018/137] add changes for 5.1.16 --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index cd62b667f..227aad6c9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,8 @@ Changes in version 5.1.16 -------------------------------------------------------------------------------- - initialize categories to empty array. Closes #458 +- add new parameter $skipcont to hook folderListitem() +- use standard output format for documents and folders on ManageNotify page -------------------------------------------------------------------------------- Changes in version 5.1.15 From c021e4b4cb3aacbcc4496eb5170a192d2ac18501 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Mar 2020 22:26:53 +0100 Subject: [PATCH 019/137] make printPopupBox() public --- views/bootstrap/class.Bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 3152517b5..b343d35cc 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -2935,7 +2935,7 @@ $(document).ready(function() { $this->printTimelineHtml($height); } /* }}} */ - protected function printPopupBox($title, $content, $ret=false) { /* {{{ */ + public function printPopupBox($title, $content, $ret=false) { /* {{{ */ $id = md5(uniqid()); /* $this->addFooterJS(' From ee8081b3c1c59e3dfbeaf3e676c5f8d4eb6b39a5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Mar 2020 22:27:11 +0100 Subject: [PATCH 020/137] set z-index of popupbox --- styles/bootstrap/application.css | 1 + 1 file changed, 1 insertion(+) diff --git a/styles/bootstrap/application.css b/styles/bootstrap/application.css index 8ae479df4..63b7e5651 100644 --- a/styles/bootstrap/application.css +++ b/styles/bootstrap/application.css @@ -213,6 +213,7 @@ div.popupbox { display: none; position: absolute; min-width: 230px; + z-index: 10; } div.popupbox span.closepopupbox { From 061ab4509b9bf74a917c038b5076940205d595ce Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 10 Mar 2020 17:10:02 +0100 Subject: [PATCH 021/137] update to jquery 0.12.4 --- styles/bootstrap/jquery/jquery.min.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/styles/bootstrap/jquery/jquery.min.js b/styles/bootstrap/jquery/jquery.min.js index f65cf1dc4..e83647587 100644 --- a/styles/bootstrap/jquery/jquery.min.js +++ b/styles/bootstrap/jquery/jquery.min.js @@ -1,2 +1,5 @@ -/*! jQuery v1.8.2 jquery.com | jquery.org/license */ -(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write(""),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,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(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.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):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b
a",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="
t
",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="
",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;be.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="
",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="

",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b0)for(e=d;e=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*\s*$/g,bz={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X
","
"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1>");try{for(;d1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]===""&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("
").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); \ No newline at end of file +/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; +}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="
a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n(" + contentHeading(getMLText("preview")); ?> - + hasConverter($latestContent->getMimeType())) { $this->contentHeading(getMLText("preview_pdf")); ?> - + \n"; print "\n"; print ""; @@ -1104,7 +1093,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { } } if($subworkflows) { - echo "getVersion()."\" />"; + echo "getDocument()->getId()."\" />getVersion()."\" />"; echo "getVersion()."\" />"; + echo "getDocument()->getId()."\" />getVersion()."\" />"; echo ""; echo ""; } else { @@ -1151,7 +1140,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { foreach($transitions as $transition) { if($latestContent->triggerWorkflowTransitionIsAllowed($user, $transition)) { echo "Triggering transition is allowed
"; - echo "getVersion()."\" />getID()."\" />"; + echo "getDocument()->getId()."\" />getVersion()."\" />getID()."\" />"; echo ""; echo ""; @@ -1205,14 +1194,14 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { print "getName(), ENT_QUOTES)."\">"; + return "getName(), ENT_QUOTES)."\">"; } /* }}} */ function documentListRowEnd($document) { /* {{{ */ diff --git a/views/bootstrap/class.ViewFolder.php b/views/bootstrap/class.ViewFolder.php index 61492e27c..2585bd4cf 100644 --- a/views/bootstrap/class.ViewFolder.php +++ b/views/bootstrap/class.ViewFolder.php @@ -183,7 +183,14 @@ $('body').on('click', '#goto-parent', function(ev) { }); /* catch click on a folder row in the list folders and documents */ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) { - attr_id = $(ev.currentTarget).parent().attr('id').split('-')[3]; + /* retrieve the id of the target folder either from data-target-id or + * from the id. Prefer data-target-id because the id is also used for identifying + * the table row when deleting the folder + * This was added for the internal_link extensіon + */ + attr_id = $(ev.currentTarget).parent().data('target-id'); + if(typeof attr_id == 'undefined') + attr_id = $(ev.currentTarget).parent().attr('id').split('-')[3]; folderSelected(attr_id, ''); $([document.documentElement, document.body]).animate({ scrollTop: 200 From 4021d62cb3e898e5388c22b800656cf94c8b74c2 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 14 Apr 2020 17:06:38 +0200 Subject: [PATCH 057/137] better error handling in addDocumentFile() --- SeedDMS_Core/Core/inc.ClassDocument.php | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index e825843b3..ca597e216 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -2214,14 +2214,21 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $dir = $this->getDir(); + $db->startTransaction(); $queryStr = "INSERT INTO `tblDocumentFiles` (`comment`, `date`, `dir`, `document`, `fileType`, `mimeType`, `orgFileName`, `userID`, `name`, `version`, `public`) VALUES ". "(".$db->qstr($comment).", ".$db->getCurrentTimestamp().", ".$db->qstr($dir).", ".$this->_id.", ".$db->qstr($fileType).", ".$db->qstr($mimeType).", ".$db->qstr($orgFileName).",".$user->getID().",".$db->qstr($name).", ".((int) $version).", ".($public ? 1 : 0).")"; - if (!$db->getResult($queryStr)) return false; + if (!$db->getResult($queryStr)) { + $db->rollbackTransaction(); + return false; + } $id = $db->getInsertID('tblDocumentFiles'); $file = $this->getDocumentFile($id); - if (is_bool($file) && !$file) return false; + if (is_bool($file) && !$file) { + $db->rollbackTransaction(); + return false; + } // copy file if (!SeedDMS_Core_File::makeDir($this->_dms->contentDir . $dir)) return false; @@ -2229,8 +2236,12 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $err = SeedDMS_Core_File::renameFile($tmpFile, $this->_dms->contentDir . $file->getPath()); else $err = SeedDMS_Core_File::copyFile($tmpFile, $this->_dms->contentDir . $file->getPath()); - if (!$err) return false; + if (!$err) { + $db->rollbackTransaction(); + return false; + } + $db->commitTransaction(); return $file; } /* }}} */ From 0273199ce0c65f80b1594cf59da3ac25ad0e7dce Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 14 Apr 2020 17:07:53 +0200 Subject: [PATCH 058/137] fix link to custom css on page --- views/bootstrap/class.Bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index b5e0e7e7b..64e1d031f 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -103,7 +103,7 @@ class SeedDMS_Bootstrap_Style extends SeedDMS_View_Common { if($this->extraheader['css']) echo $this->extraheader['css']; if(method_exists($this, 'css')) - echo ''."\n"; + echo ''."\n"; echo ''."\n"; if($this->extraheader['js']) From d1b3b008151c869de9030b6e00a6e0ed94960e5a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 14 Apr 2020 18:02:19 +0200 Subject: [PATCH 059/137] add notes for 5.1.16 --- SeedDMS_Core/package.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index f3fbef741..80adc0489 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -12,7 +12,7 @@ uwe@steinmann.cx yes - 2020-04-02 + 2020-04-14 5.1.16 @@ -27,6 +27,7 @@ - fix call of hooks in SeedDMS_Core - add variable lasterror in SeedDMS_Core_DMS which can be set by hooks to pass an error msg to the calling application +- better error checking in SeedDMS_Core_Document::addDocumentFile() From 440f327bade2f3a75b2e138ab5ae83fb0c8d8f27 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 14 Apr 2020 20:00:53 +0200 Subject: [PATCH 060/137] minor layout improvements --- views/bootstrap/class.Bootstrap.php | 2 +- views/bootstrap/class.ViewDocument.php | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 64e1d031f..91b1c8c60 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -943,7 +943,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; function formSubmit($value, $name='') { /* {{{ */ echo "
\n"; - echo "\n"; + echo "\n"; echo "
\n"; } /* }}} */ diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index 34f5c9b3e..67477b0e8 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -1278,8 +1278,6 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
contentContainerStart(); - if (count($files) > 0) { print "
"; - /* - print ""; - */ $previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidthdetail, $timeout, $xsendfile); $previewer->setConverters($previewconverters); $previewer->createPreview($latestContent); if ($file_exists) { if ($viewonlinefiletypes && (in_array(strtolower($latestContent->getFileType()), $viewonlinefiletypes) || in_array(strtolower($latestContent->getMimeType()), $viewonlinefiletypes))) { - print "getVersion()."\">"; + print "getDocument()->getId()."&version=". $latestContent->getVersion()."\">"; } else { - print "getVersion()."\">"; + print "getDocument()->getId()."&version=".$latestContent->getVersion()."\">"; } } if($previewer->hasPreview($latestContent)) { - print("getID()."&version=".$latestContent->getVersion()."&width=".$previewwidthdetail."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"); + print("getDocument()->getID()."&version=".$latestContent->getVersion()."&width=".$previewwidthdetail."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"); } else { print "getMimeIcon($latestContent->getFileType())."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"; } @@ -647,35 +636,35 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { print ""; print ""; if($latestContent->triggerWorkflowTransitionIsAllowed($user, $transition)) { $action = $transition->getAction(); - print "
getVersion()."\" />getID()."\" />getName()), array(), $action->getName())."\" />
"; + print "
getDocument()->getId()."\" />getVersion()."\" />getID()."\" />getName()), array(), $action->getName())."\" />
"; $allowedtransitions[] = $transition; } echo "
"; if($file_exists) { if ($viewonlinefiletypes && (in_array(strtolower($version->getFileType()), $viewonlinefiletypes) || in_array(strtolower($version->getMimeType()), $viewonlinefiletypes))) { - print "getVersion()."\">"; + print "getDocument()->getId()."&version=".$version->getVersion()."\">"; } else { - print "getVersion()."\">"; + print "getDocument()->getId()."&version=".$version->getVersion()."\">"; } } $previewer->createPreview($version); if($previewer->hasPreview($version)) { - print("getID()."&version=".$version->getVersion()."&width=".$previewwidthdetail."\" title=\"".htmlspecialchars($version->getMimeType())."\">"); + print("getDocument()->getId()."&version=".$version->getVersion()."&width=".$previewwidthdetail."\" title=\"".htmlspecialchars($version->getMimeType())."\">"); } else { print "getMimeIcon($version->getFileType())."\" title=\"".htmlspecialchars($version->getMimeType())."\">"; } @@ -1248,9 +1237,9 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { print ""; print ""; print "
"; @@ -1350,10 +1348,12 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { print "\n
\n"; } - else printMLText("no_attached_files"); + else $this->infoMsg(getMLText("no_attached_files")); + + $this->contentContainerStart(); if ($document->getAccessMode($user) >= M_READWRITE){ - print "\n"; + print "".getMLText("add")."\n"; } $this->contentContainerEnd(); ?> @@ -1394,7 +1394,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { } print "\n\n"; } - else printMLText("no_linked_files"); + else $this->infoMsg(getMLText("no_linked_files")); if (!$user->isGuest()){ $this->contentContainerStart(); From 2d5a4d5bd44b18724cbafa11cfa866b31dd34c5d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 16 Apr 2020 15:54:37 +0200 Subject: [PATCH 061/137] list only user in session which are not hidden --- views/bootstrap/class.Session.php | 36 +++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/views/bootstrap/class.Session.php b/views/bootstrap/class.Session.php index d844eefd3..ed477034c 100644 --- a/views/bootstrap/class.Session.php +++ b/views/bootstrap/class.Session.php @@ -52,20 +52,34 @@ class SeedDMS_View_Session extends SeedDMS_Bootstrap_Style { if ($user->isGuest() || count($sessions) == 0) { return ''; } - $content = ''; - $content .= " \n"; - echo $content; } /* }}} */ } From 3929d650e50c5a03c3a929dfb94ad7cdd853eb48 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 16 Apr 2020 15:55:27 +0200 Subject: [PATCH 062/137] changes for 5.1.16 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 06ff3b6e3..85a45a6aa 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -7,6 +7,7 @@ - allow multiple dependencies on seeddms of extension - add table with chart data below chart - do now show tasks in menu if workflow is turned off completely +- do not show hidden users in session list -------------------------------------------------------------------------------- Changes in version 5.1.15 From 394de72a7a74b0b1b8b6488ea939680826815c15 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 16 Apr 2020 17:25:34 +0200 Subject: [PATCH 063/137] add change log for 5.1.16 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 85a45a6aa..c9efde42d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -8,6 +8,7 @@ - add table with chart data below chart - do now show tasks in menu if workflow is turned off completely - do not show hidden users in session list +- add norwegian translation -------------------------------------------------------------------------------- Changes in version 5.1.15 From b117d18eac921d189cedf2d510a31c8ecaa21f48 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 17 Apr 2020 14:06:04 +0200 Subject: [PATCH 064/137] various minor updates --- languages/ar_EG/lang.inc | 2 +- languages/bg_BG/lang.inc | 2 +- languages/ca_ES/lang.inc | 2 +- languages/cs_CZ/lang.inc | 2 +- languages/de_DE/lang.inc | 2 +- languages/el_GR/lang.inc | 2 +- languages/en_GB/lang.inc | 2 +- languages/es_ES/lang.inc | 6 +-- languages/fr_FR/lang.inc | 110 +++++++++++++++++++-------------------- languages/hr_HR/lang.inc | 8 +-- languages/hu_HU/lang.inc | 2 +- languages/it_IT/lang.inc | 2 +- languages/ko_KR/lang.inc | 2 +- languages/lo_LA/lang.inc | 2 +- languages/nb_NO/lang.inc | 2 +- languages/nl_NL/lang.inc | 2 +- languages/pl_PL/lang.inc | 6 +-- languages/pt_BR/lang.inc | 6 +-- languages/ro_RO/lang.inc | 2 +- languages/ru_RU/lang.inc | 2 +- languages/sk_SK/lang.inc | 2 +- languages/sv_SE/lang.inc | 2 +- languages/tr_TR/lang.inc | 2 +- languages/uk_UA/lang.inc | 2 +- languages/zh_CN/lang.inc | 2 +- languages/zh_TW/lang.inc | 2 +- 26 files changed, 89 insertions(+), 89 deletions(-) diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index 47b2da50e..6588a6515 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -427,7 +427,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => 'تنزيل روابط', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'إصلاح كل المستندات والمجلدات.', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index 1067d9a64..f81037b52 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -380,7 +380,7 @@ $text = array( 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => '', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Поправи всички папки и документи', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index 5725b1e66..cec069df4 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -385,7 +385,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => '', 'do_no_transfer_to_user' => '', 'do_object_repair' => '', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index f87111f16..145d22635 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -451,7 +451,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => 'Odkazy ke stažení', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Opravit všechny složky a dokumenty.', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index 3d2f8129f..7f3ed9781 100644 --- a/languages/de_DE/lang.inc +++ b/languages/de_DE/lang.inc @@ -451,7 +451,7 @@ URL: [url]', 'download_header_review_comment' => 'Prüfkommentar', 'download_header_review_date' => 'Prüfdatum', 'download_header_review_state' => 'Prüfstatus', -'download_header_status' => 'Status', +'download_header_state' => 'Status', 'download_links' => 'Download Links', 'do_no_transfer_to_user' => 'Prozesse nicht auf anderen Benutzer übertragen', 'do_object_repair' => 'Repariere alle Ordner und Dokumente.', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index 920be7066..e5592b97e 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/lang.inc @@ -380,7 +380,7 @@ $text = array( 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => '', 'do_no_transfer_to_user' => '', 'do_object_repair' => '', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index 2c3449812..471120132 100644 --- a/languages/en_GB/lang.inc +++ b/languages/en_GB/lang.inc @@ -451,7 +451,7 @@ URL: [url]', 'download_header_review_comment' => 'Review comment', 'download_header_review_date' => 'Review date', 'download_header_review_state' => 'Review state', -'download_header_status' => 'State', +'download_header_state' => 'State', 'download_links' => 'Download links', 'do_no_transfer_to_user' => 'Do not transfer processes to user', 'do_object_repair' => 'Repair all folders and documents.', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index 5ffad0349..5afdae8c7 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: acabello (20), Admin (1149), angel (123), francisco (2), jaimem (14) +// Translators: acabello (20), Admin (1150), angel (123), francisco (2), jaimem (14) $text = array( '2_factor_auth' => '', @@ -434,7 +434,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => '', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Reparar todas las carpetas y documentos.', @@ -793,7 +793,7 @@ URL: [url]', 'my_documents' => 'Mis documentos', 'my_transmittals' => 'Mi transmision', 'name' => 'Nombre', -'nb_NO' => '', +'nb_NO' => 'Noruego', 'needs_correction' => '', 'needs_workflow_action' => 'Este documento requiere su atención. Por favor chequee la pestaña de flujo de trabajo.', 'network_drive' => '', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index 10270fee0..1a3986c95 100644 --- a/languages/fr_FR/lang.inc +++ b/languages/fr_FR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1102), jeromerobert (50), lonnnew (9), Oudiceval (868) +// Translators: Admin (1102), jeromerobert (50), lonnnew (9), Oudiceval (922) $text = array( '2_factor_auth' => 'Authentification forte', @@ -41,7 +41,7 @@ Document : [name] Dossier parent : [folder_path] Utilisateur : [username] URL : [url]', -'access_permission_changed_email_subject' => '[sitename]: [name] - Permission modifiée', +'access_permission_changed_email_subject' => '[sitename] : [name] - Permission modifiée', 'according_settings' => 'Paramètres en fonction', 'action' => 'Action', 'actions' => 'Actions', @@ -57,7 +57,7 @@ URL : [url]', 'add_attrdefgroup' => 'Ajouter un nouveau groupe d’attributs', 'add_document' => 'Ajouter un document', 'add_document_link' => 'Ajouter un lien', -'add_document_notify' => 'Affecter une notification', +'add_document_notify' => 'Affecter les notifications', 'add_doc_reviewer_approver_warning' => 'N.B. Les documents sont automatiquement marqués comme publiés s’il n’y a pas d’examinateur ou d’approbateur désigné.', 'add_doc_workflow_warning' => 'N.B. Les documents sont automatiquement marqués comme publiés si aucun workflow est désigné.', 'add_event' => 'Ajouter un événement', @@ -118,7 +118,7 @@ Version: [version] Dossier parent: [folder_path] Utilisateur: [username] URL: [url]', -'approval_request_email_subject' => '[sitename]: [name] - Demande d\'approbation', +'approval_request_email_subject' => '[sitename] : [name] - Demande d\'approbation', 'approval_status' => 'Statut d\'approbation', 'approval_submit_email' => 'Approbation d\'un document', 'approval_submit_email_body' => 'Approbation d\'un document @@ -129,7 +129,7 @@ Statut : [status] Commentaire : [comment] Utilisateur : [username] URL : [url]', -'approval_submit_email_subject' => '[sitename]: [name] - Approbation soumise', +'approval_submit_email_subject' => '[sitename] : [name] - Approbation soumise', 'approval_summary' => 'Récapitulatif approbation', 'approval_update_failed' => 'Erreur de la mise à jour du statut d\'approbation. Echec de la mise à jour.', 'approvers' => 'Approbateurs', @@ -140,9 +140,9 @@ URL : [url]', 'archive_creation' => 'Créer une archive', 'archive_creation_warning' => 'Avec cette fonction, vous pouvez créer une archive contenant les fichiers de tous les dossiers DMS. Après la création, l\'archive sera sauvegardée dans le dossier de données de votre serveur.
AVERTISSEMENT: Une archive créée ainsi sera inutilisable en tant que sauvegarde du serveur.', 'ar_EG' => 'Arabe – Égypte', -'assign_approvers' => 'Affectation d’approbateurs', +'assign_approvers' => 'Affecter les approbateurs', 'assign_recipients' => 'Affecter les destinataires', -'assign_reviewers' => 'Affectation d’examinateurs', +'assign_reviewers' => 'Affecter les examinateurs', 'assign_user_property_to' => 'Transférer les propriétés de l\'utilisateur à', 'assumed_released' => 'Supposé publié', 'attrdefgroup_management' => 'Gestion des groupes d’attributs', @@ -183,7 +183,7 @@ New value: [attribute_new_value] Répertoire parent: [folder_path] Utilisateur: [username] URL: [url]', -'attribute_changed_email_subject' => '[sitename]: [name] - Attribut changé', +'attribute_changed_email_subject' => '[sitename] : [name] - Attribut modifié', 'attribute_count' => 'Nombre d\'utilisations', 'attribute_value' => 'Valeur de l\'attribut', 'attribute_value_not_in_valueset' => 'Valeur en dehors de l’ensemble', @@ -314,7 +314,7 @@ URL: [url]', 'cs_CZ' => 'Tchèque', 'current_password' => 'Mot de passe actuel', 'current_quota' => 'Le quota global actuel est de [quota]', -'current_state' => 'Etat actuel', +'current_state' => 'État actuel', 'current_version' => 'Version actuelle', 'daily' => 'Journalier', 'databasesearch' => 'Recherche dans la base de données', @@ -377,7 +377,7 @@ Commentaire: [new_comment] Dossier parent: [folder_path] Utilisateur: [username] URL: [url]', -'document_comment_changed_email_subject' => '[sitename]: [name] - Commentaire modifié', +'document_comment_changed_email_subject' => '[sitename] : [name] - Commentaire modifié', 'document_count' => 'Nombre de documents', 'document_deleted' => 'Document supprimé', 'document_deleted_email' => 'Document supprimé', @@ -400,7 +400,7 @@ Ancien dossier: [old_folder_path] Nouveau dossier: [new_folder_path] Utilisateur: [username] URL: [url]', -'document_moved_email_subject' => '[sitename]: [name] - Document déplacé', +'document_moved_email_subject' => '[sitename] : [name] - Document déplacé', 'document_not_checkedout' => 'Le document n’a pas été vérifié.', 'document_renamed_email' => 'Document renommé', 'document_renamed_email_body' => 'Document renommé @@ -409,7 +409,7 @@ Dossier parent: [folder_path] Ancien nom: [old_name] Utilisateur: [username] URL: [url]', -'document_renamed_email_subject' => '[sitename]: [name] - Document renommé', +'document_renamed_email_subject' => '[sitename] : [name] - Document renommé', 'document_status_changed_email' => 'Statut du document modifié', 'document_status_changed_email_body' => 'Statut du document modifié Document: [name] @@ -417,7 +417,7 @@ Statut: [status] Dossier parent: [folder_path] Utilisateur: [username] URL: [url]', -'document_status_changed_email_subject' => '[sitename]: [name] - Statut du document modifié', +'document_status_changed_email_subject' => '[sitename] : [name] - Statut du document modifié', 'document_title' => 'Document \'[documentname]\'', 'document_transfered_email_body' => 'Transfert d’un document à un autre utilisateur Document : [name] @@ -434,26 +434,26 @@ Commentaire: [comment] Commentaire de version: [version_comment] Utilisateur: [username] URL: [url]', -'document_updated_email_subject' => '[sitename]: [name] - Document mis à jour', +'document_updated_email_subject' => '[sitename] : [name] - Document mis à jour', 'does_not_expire' => 'N\'expire jamais', 'does_not_inherit_access_msg' => 'Accès hérité', 'download' => 'Téléchargement', 'download_extension' => 'Télécharger l’extension en tant que fichier zip', -'download_header_approval_comment' => '', -'download_header_approval_date' => '', -'download_header_approval_state' => '', -'download_header_approver' => '', -'download_header_document_name' => '', -'download_header_document_no' => '', -'download_header_filename' => '', -'download_header_internal_version' => '', -'download_header_reviewer' => '', -'download_header_review_comment' => '', -'download_header_review_date' => '', -'download_header_review_state' => '', -'download_header_status' => '', +'download_header_approval_comment' => 'Commentaire d’approbation', +'download_header_approval_date' => 'Date d’approbation', +'download_header_approval_state' => 'Statut d’approbation', +'download_header_approver' => 'Approbateur', +'download_header_document_name' => 'Nom du document', +'download_header_document_no' => 'N° du document', +'download_header_filename' => 'Nom du fichier', +'download_header_internal_version' => 'Version interne', +'download_header_reviewer' => 'Examinateur', +'download_header_review_comment' => 'Commentaire de vérification', +'download_header_review_date' => 'Date de vérification', +'download_header_review_state' => 'Statut de vérification', +'download_header_state' => 'Statut', 'download_links' => 'Liens de téléchargement', -'do_no_transfer_to_user' => '', +'do_no_transfer_to_user' => 'Ne pas transférer les processus à l’utilisateur', 'do_object_repair' => 'Réparer tous les dossiers et documents.', 'do_object_setchecksum' => 'Définir checksum', 'do_object_setfilesize' => 'Définir la taille du fichier', @@ -509,7 +509,7 @@ URL: [url]', 'empty_list' => 'Aucune entrée', 'empty_notify_list' => 'Aucune entrée', 'en_GB' => 'Anglais (RU)', -'equal_transition_states' => 'Etat de début et fin identique', +'equal_transition_states' => 'États de début et de fin identiques', 'error' => 'Erreur', 'error_add_aro' => '', 'error_add_permission' => 'Erreur lors de l’ajout de permission', @@ -554,7 +554,7 @@ Document : [name] Dossier parent : [folder_path] Utilisateur : [username] URL : [url]', -'expiry_changed_email_subject' => '[sitename]: [name] - Date d\'expiration modifiée', +'expiry_changed_email_subject' => '[sitename] : [name] - Date d’expiration modifiée', 'export' => 'Exporter', 'extension_archive' => 'Extension', 'extension_changelog' => 'Journal des modifications', @@ -595,7 +595,7 @@ Commentaire: [new_comment] Dossier parent: [folder_path] Utilisateur: [username] URL: [url]', -'folder_comment_changed_email_subject' => '[sitename]: [name] - Commentaire changé', +'folder_comment_changed_email_subject' => '[sitename] : [name] - Commentaire modifié', 'folder_contents' => 'Dossiers', 'folder_deleted_email' => 'Dossier supprimé', 'folder_deleted_email_body' => 'Dossier supprimé @@ -603,7 +603,7 @@ Dossier: [name] Dossier parent: [folder_path] Utilisateur: [username] URL: [url]', -'folder_deleted_email_subject' => '[sitename]: [name] - Dossier supprimé', +'folder_deleted_email_subject' => '[sitename] : [name] - Dossier supprimé', 'folder_infos' => 'Informations sur le dossier', 'folder_moved_email' => 'Dossier déplacé', 'folder_moved_email_body' => 'Dossier déplacé @@ -612,7 +612,7 @@ Ancien dossier: [old_folder_path] Nouveau dossier: [new_folder_path] Utilisateur: [username] URL: [url]', -'folder_moved_email_subject' => '[sitename]: [name] - Dossier déplacé', +'folder_moved_email_subject' => '[sitename] : [name] - Dossier déplacé', 'folder_renamed_email' => 'Dossier renommé', 'folder_renamed_email_body' => 'Dossier renommé Dossier: [name] @@ -620,7 +620,7 @@ Dossier parent: [folder_path] Ancien nom: [old_name] Utilisateur: [username] URL: [url]', -'folder_renamed_email_subject' => '[sitename]: [name] - Dossier renommé', +'folder_renamed_email_subject' => '[sitename] : [name] - Dossier renommé', 'folder_title' => 'Dossier \'[foldername]\'', 'foot_note' => '', 'force_update' => 'Mettre à jour', @@ -655,7 +655,7 @@ URL: [url]', 'hash' => 'Hash', 'help' => 'Aide', 'home_folder' => 'Dossier personnel', -'hook_name' => '', +'hook_name' => 'Nom de l’appel', 'hourly' => 'Une fois par heure', 'hours' => 'heures', 'hr_HR' => 'Croate', @@ -760,7 +760,7 @@ URL: [url]', 'link_to_version' => 'Version', 'list_access_rights' => 'Liste des droits d’accès…', 'list_contains_no_access_docs' => 'La liste contient des documents auxquels vous n’avez pas accès et qui ne sont donc pas affichés.', -'list_hooks' => 'Liste livre', +'list_hooks' => 'Liste des appels internes', 'list_tasks' => 'Liste des tâches', 'local_file' => 'Fichier local', 'locked_by' => 'Verrouillé par', @@ -784,7 +784,7 @@ URL: [url]', 'manager_of_group' => 'Vous êtes le gestionnaire de ce groupe', 'mandatory_approvergroups' => 'Obligatoire : groupes de valideurs', 'mandatory_approvergroup_no_access' => 'Groupe requis d\'approbateurs \'[group]\' ne dispose pas des droits suffisants', -'mandatory_approvers' => 'Affectation d’approbateurs', +'mandatory_approvers' => 'Affecter les approbateurs', 'mandatory_approver_no_access' => 'L\'approbateur désigné \'[user]\' ne dispose pas des droits d\'accès suffisants.', 'mandatory_reviewergroups' => 'Groupe obligatoire d’examinateurs', 'mandatory_reviewergroup_no_access' => 'Groupe d\'examinateurs \'[group]\' ne dispose pas des droits suffisants', @@ -835,7 +835,7 @@ Commentaire : [comment] Commentaire de version : [version_comment] Utilisateur : [username] URL: [url]', -'new_document_email_subject' => '[sitename]: [folder_name] - Nouveau document', +'new_document_email_subject' => '[sitename] : [folder_name] - Nouveau document', 'new_file_email' => 'Nouvel attachement', 'new_file_email_body' => 'Nouvel attachement Name: [name] @@ -843,7 +843,7 @@ Document: [document] Commentaire: [comment] Utilisateur: [username] URL: [url]', -'new_file_email_subject' => '[sitename]: [document] - Nouvel attachement', +'new_file_email_subject' => '[sitename] : [document] - Nouveau fichier attaché', 'new_folder' => 'Nouveau dossier', 'new_password' => 'Nouveau mot de passe', 'new_subfolder_email' => 'Nouveau dossier', @@ -853,7 +853,7 @@ Dossier parent : [folder_path] Commentaire : [comment] Utilisateur : [username] URL : [url]', -'new_subfolder_email_subject' => '[sitename]: [name] - Nouveau dossier', +'new_subfolder_email_subject' => '[sitename] : [name] - Nouveau dossier', 'new_user_image' => 'Nouvelle image', 'next_revision_abbr' => 'Prochaine rév.', 'next_state' => 'Nouvel état', @@ -866,14 +866,14 @@ Nom : [name] Dossier parent : [folder_path] Utilisateur : [username] URL : [url]', -'notify_added_email_subject' => '[sitename]: [name] - Ajouté à la liste des notifications', +'notify_added_email_subject' => '[sitename] : [name] - Ajouté à la liste des notifications', 'notify_deleted_email' => 'Vous avez été supprimé de la liste des notifications.', 'notify_deleted_email_body' => 'Supprimé de la liste des notifications Nom: [name] Dossier parent: [folder_path] Utilisateur: [username] URL: [url]', -'notify_deleted_email_subject' => '[sitename]: [name] - Supprimé de la liste des notifications', +'notify_deleted_email_subject' => '[sitename] : [name] - Supprimé de la liste des notifications', 'november' => 'Novembre', 'now' => 'Maintenant', 'no_action' => 'Aucune action n\'est nécessaire', @@ -926,7 +926,7 @@ Ancien propriétaire: [old_owner] Nouveau propriétaire: [new_owner] Utilisateur: [username] URL: [url]', -'ownership_changed_email_subject' => '[sitename]: [name] - Propriétaire modifié', +'ownership_changed_email_subject' => '[sitename] : [name] - Propriétaire modifié', 'password' => 'Mot de passe', 'password_already_used' => 'Mot de passe déjà utilisé', 'password_expiration' => 'Expiration du mot de passe', @@ -941,7 +941,7 @@ Pour ce faire, cliquez sur le lien suivant: [url_prefix]out/out.ChangePassword.php?hash=[hash] En cas de problème persistant, veuillez contacter votre administrateur.', -'password_forgotten_email_subject' => '[sitename]: Mot de passe oublié', +'password_forgotten_email_subject' => '[sitename] : Mot de passe oublié', 'password_forgotten_send_hash' => 'La procédure à suivre a bien été envoyée à l\'adresse indiquée', 'password_forgotten_text' => 'Remplissez le formulaire ci-dessous et suivez les instructions dans le courrier électronique qui vous sera envoyé.', 'password_forgotten_title' => 'Mot de passe envoyé', @@ -974,7 +974,7 @@ En cas de problème persistant, veuillez contacter votre administrateur.', 'pt_BR' => 'Portuguais (BR)', 'quota' => 'Quota', 'quota_exceeded' => 'Votre quota de disque est dépassé de [bytes].', -'quota_is_disabled' => 'Le support des quotas est actuellement désactivé dans les réglages. Affecter un quota utilisateur n’aura pas d’effet jusqu’à ce qu’il soit de nouveau activé.', +'quota_is_disabled' => 'La prise en charge des quotas est actuellement désactivée dans les réglages. Affecter un quota utilisateur n’aura pas d’effet jusqu’à ce qu’il soit de nouveau activé.', 'quota_warning' => 'Votre quota d’espace disque est dépassé de [bytes]. Veuillez supprimer des documents ou d\'anciennes versions.', 'receipts_accepted' => '[no_receipts] réceptions déjà confirmées', 'receipts_accepted_latest' => '(dont [no_receipts] dans la dernière version)', @@ -1020,7 +1020,7 @@ URL : [url]', Document: [document] Utilisateur: [username] URL: [url]', -'removed_file_email_subject' => '[sitename]: [document] - Attachement supprimé', +'removed_file_email_subject' => '[sitename] : [document] - Fichier attaché supprimé', 'removed_recipient' => 'a été supprimé de la liste des destinataires.', 'removed_reviewer' => 'a été retiré de la liste des examinateurs.', 'removed_revisor' => 'a été supprimé de la liste des réviseurs.', @@ -1136,10 +1136,10 @@ URL : [url]', 'revisors' => 'Réviseurs', 'revisor_already_assigned' => 'L’utilisateur est déjà attribué en tant que réviseur.', 'revisor_already_removed' => 'Le réviseur a déjà été retiré du processus de révision ou a déjà révisé le document.', -'rewind_workflow' => 'Remonter le workflow', +'rewind_workflow' => 'Reculer le workflow', 'rewind_workflow_email_body' => 'Le workflow a été reculé', -'rewind_workflow_email_subject' => '[sitename]: [name] - Le workflow a été réinitialisé', -'rewind_workflow_warning' => 'Si vous remonter à l\'état initial du workflow, le log de workflow de ce document sera supprimé et impossible à récupérer.', +'rewind_workflow_email_subject' => '[sitename] : [name] - Le workflow a été reculé', +'rewind_workflow_warning' => 'Si vous retournez à l’état initial du workflow, l’historique de workflow de ce document sera supprimé et ne pourra pas être restauré.', 'rm_attrdef' => 'Supprimer la définition d’attribut', 'rm_attrdefgroup' => 'Supprimer ce groupe d’attributs', 'rm_attr_value' => 'Supprimer la valeur', @@ -1179,7 +1179,7 @@ Sous-workflow : [subworkflow] Dossier parent : [folder_path] Utilisateur : [username] URL : [url]', -'run_subworkflow_email_subject' => '[sitename]: [name] - Sous-workflow initialisé', +'run_subworkflow_email_subject' => '[sitename] : [name] - Sous-workflow initialisé', 'ru_RU' => 'Russe', 'saturday' => 'Samedi', 'saturday_abbr' => 'Sam.', @@ -1831,7 +1831,7 @@ URL : [url]', 'tr_TR' => 'Turc', 'tuesday' => 'Mardi', 'tuesday_abbr' => 'Mar.', -'type_of_hook' => '', +'type_of_hook' => 'Type', 'type_to_filter' => 'Filtrer dans la liste', 'type_to_search' => 'Effectuer une recherche', 'uk_UA' => 'Ukrénien', @@ -1897,7 +1897,7 @@ Version: [version] Dossier parent: [folder_path] Utilisateur: [username] URL: [url]', -'version_deleted_email_subject' => '[sitename]: [name] - Version supprimée', +'version_deleted_email_subject' => '[sitename] : [name] - Version supprimée', 'version_info' => 'Informations de version', 'view' => 'Aperçu', 'view_online' => 'Aperçu en ligne', @@ -1911,10 +1911,10 @@ URL: [url]', 'workflow_actions_management' => 'Gestion des actions de workflow', 'workflow_action_in_use' => 'Cette action est actuellement utilisée par des workflows.', 'workflow_action_name' => 'Nom', -'workflow_editor' => 'Editeur de Workflow', +'workflow_editor' => 'Éditeur de Workflow', 'workflow_group_summary' => 'Récapitulatif groupe workflow', 'workflow_has_cycle' => 'Le workflow a une boucle', -'workflow_initstate' => 'Etat initial', +'workflow_initstate' => 'État initial', 'workflow_in_use' => 'Ce workflow est actuellement utilisé par des documents.', 'workflow_layoutdata_saved' => 'Données de mise en page enregistrées', 'workflow_management' => 'Gestion des workflows', @@ -1926,7 +1926,7 @@ URL: [url]', 'workflow_save_layout' => 'Enregistrer la mise en page', 'workflow_state' => 'État de workflow', 'workflow_states_management' => 'Gestion des états de workflow', -'workflow_state_docstatus' => 'Etat du document', +'workflow_state_docstatus' => 'État du document', 'workflow_state_in_use' => 'Cet état est actuellement utilisé par des workflows.', 'workflow_state_name' => 'Nom', 'workflow_summary' => 'Récapitulatif workflow', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index 94690bcd0..f8bd0d6a7 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1236), marbanas (16) +// Translators: Admin (1238), marbanas (16) $text = array( '2_factor_auth' => '', @@ -439,7 +439,7 @@ Internet poveznica: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => '', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Popravi sve mape i dokumente.', @@ -1174,7 +1174,7 @@ Internet poveznica: [url]', 'seconds' => 'sekunde', 'selection' => 'Odabir', 'select_attrdefgrp_show' => '', -'select_attribute_value' => '', +'select_attribute_value' => 'Izbari vrednost atributa', 'select_category' => 'Kliknite za odabir kategorije', 'select_group' => 'Izaberi grupu', 'select_groups' => 'Kliknite za odabir grupa', @@ -1453,7 +1453,7 @@ Internet poveznica: [url]', 'settings_Notification' => 'Postavke bilježenja', 'settings_notwritable' => 'Konfiguracija se ne može pohraniti jer datoteka konfiguracije nema mogućnost upisivanja.', 'settings_no_content_dir' => 'Mapa sadržaja', -'settings_onePageMode' => '', +'settings_onePageMode' => 'Mod jedne strane', 'settings_onePageMode_desc' => '', 'settings_overrideMimeType' => 'Premosti tip datoteke', 'settings_overrideMimeType_desc' => 'Premošćivanje tipa datoteke određenog od strane pretraživača ako je datoteka učitana. Novi tip datoteke se određuje od strane DMS sustava.', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index 3069755be..94bfbba56 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -434,7 +434,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => '', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Valamennyi mappa és dokumentum helyreállítása.', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index 0bbd9dd3c..0da771343 100644 --- a/languages/it_IT/lang.inc +++ b/languages/it_IT/lang.inc @@ -444,7 +444,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => 'Collegamenti di scaricamento', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Ripara tutte le cartelle e i documenti.', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index b38ace664..b8561220e 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -440,7 +440,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => '', 'do_no_transfer_to_user' => '', 'do_object_repair' => '모든 폴더와 문서를 복구', diff --git a/languages/lo_LA/lang.inc b/languages/lo_LA/lang.inc index 110499df6..463ca348f 100644 --- a/languages/lo_LA/lang.inc +++ b/languages/lo_LA/lang.inc @@ -437,7 +437,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => 'ດາວໂຫລດລິ້ງ', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'ສ້ອມແຊມໂຟລເດີ ແລະເອກະສານທັງໝົດ', diff --git a/languages/nb_NO/lang.inc b/languages/nb_NO/lang.inc index a3f6fd1e2..719b1b807 100644 --- a/languages/nb_NO/lang.inc +++ b/languages/nb_NO/lang.inc @@ -451,7 +451,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => 'Nedlastings link', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Reparere alle mapper og dokumenter.', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index 19813d935..907e4b415 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -432,7 +432,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => 'Download-links', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Repareer alle mappen en documenten.', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index ffe6745e3..d30978e51 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (866), netixw (84), romi (93), uGn (112) +// Translators: Admin (867), netixw (84), romi (93), uGn (112) $text = array( '2_factor_auth' => '', @@ -427,7 +427,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => '', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Napraw wszystkie katalogi i pliki.', @@ -786,7 +786,7 @@ URL: [url]', 'my_documents' => 'Moje dokumenty', 'my_transmittals' => 'Moi recenzenci', 'name' => 'Nazwa', -'nb_NO' => '', +'nb_NO' => 'Norweski', 'needs_correction' => '', 'needs_workflow_action' => 'Dokument wymaga uwagi. Proszę sprawdzić kartę workflow.', 'network_drive' => '', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index 684ae8ea2..8c4f16315 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1736), flaviove (627), lfcristofoli (352) +// Translators: Admin (1737), flaviove (627), lfcristofoli (352) $text = array( '2_factor_auth' => 'Autenticação de dois fatores', @@ -451,7 +451,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => 'Links para download', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Reparar todas as pastas e documentos.', @@ -817,7 +817,7 @@ URL: [url]', 'my_documents' => 'Meus Documentos', 'my_transmittals' => 'Minhas Transmissões', 'name' => 'Nome', -'nb_NO' => '', +'nb_NO' => 'Norueguês', 'needs_correction' => 'Precisa de correção', 'needs_workflow_action' => 'Este documento requer sua atenção. Por favor, verifique a guia de fluxo de trabalho.', 'network_drive' => 'Unidade de rede', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index 154436e38..4c9a6fec8 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -439,7 +439,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => '', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Repară toate folderele și documentele.', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index bfd407f93..b056e2c6f 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/lang.inc @@ -439,7 +439,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => '', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Исправить все каталоги и документы', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index 688317ffc..cbae592be 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -451,7 +451,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => 'Odkazy na stiahnutie', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Opraviť všetky zložky a dokumenty.', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index 51845b3f6..3a450221c 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -445,7 +445,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => 'Nedladdningslänkar', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Reparera alla kataloger och dokument.', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index 0b94bbeeb..ec81d5931 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -433,7 +433,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => '', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Tüm klasörleri ve dokümanları onar.', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index a2e6c61cc..cd61a57fe 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -439,7 +439,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => '', 'do_no_transfer_to_user' => '', 'do_object_repair' => 'Виправити всі каталоги і документи', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index b69132580..41b20f74d 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/lang.inc @@ -433,7 +433,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => '下载链接', 'do_no_transfer_to_user' => '', 'do_object_repair' => '', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index 20507f490..e7d70b117 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/lang.inc @@ -384,7 +384,7 @@ URL: [url]', 'download_header_review_comment' => '', 'download_header_review_date' => '', 'download_header_review_state' => '', -'download_header_status' => '', +'download_header_state' => '', 'download_links' => '', 'do_no_transfer_to_user' => '', 'do_object_repair' => '', From c51bb143ada8a97d02724991a54dcd1b1a4c5cdf Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 20 Apr 2020 08:25:00 +0200 Subject: [PATCH 065/137] remove closing php tag --- out/out.AddDocument.php | 2 -- out/out.AddEvent.php | 2 -- out/out.AddFile.php | 2 -- out/out.AddSubFolder.php | 2 -- out/out.ApprovalSummary.php | 2 -- out/out.ApproveDocument.php | 2 -- out/out.AttributeMgr.php | 2 -- out/out.BackupTools.php | 2 -- out/out.Calendar.php | 2 -- out/out.CategoryChooser.php | 2 -- out/out.Charts.php | 2 -- out/out.ClearCache.php | 2 -- out/out.Clipboard.php | 2 -- out/out.CreateIndex.php | 2 -- out/out.DefaultKeywords.php | 2 -- out/out.DocumentAccess.php | 2 -- out/out.DocumentChooser.php | 2 -- out/out.DocumentNotify.php | 2 -- out/out.DocumentVersionDetail.php | 2 -- out/out.DropFolderChooser.php | 2 -- out/out.EditAttributes.php | 2 -- out/out.EditComment.php | 2 -- out/out.EditDocument.php | 2 -- out/out.EditDocumentFile.php | 2 -- out/out.EditEvent.php | 2 -- out/out.EditFolder.php | 2 -- out/out.EditOnline.php | 1 - out/out.EditUserData.php | 2 -- out/out.ExpiredDocuments.php | 2 -- out/out.ExtensionMgr.php | 2 -- out/out.FolderAccess.php | 2 -- out/out.FolderChooser.php | 2 -- out/out.FolderNotify.php | 2 -- out/out.ForcePasswordChange.php | 2 -- out/out.GroupView.php | 2 -- out/out.Help.php | 2 -- out/out.ImportFS.php | 2 -- out/out.IndexInfo.php | 2 -- out/out.Indexer.php | 2 -- out/out.KeywordChooser.php | 2 -- out/out.LogManagement.php | 3 --- out/out.Login.php | 2 -- out/out.ManageNotify.php | 2 -- out/out.MoveDocument.php | 2 -- out/out.MoveFolder.php | 2 -- out/out.MyAccount.php | 2 -- out/out.MyDocuments.php | 2 -- out/out.ObjectCheck.php | 2 -- out/out.OverrideContentStatus.php | 2 -- out/out.PasswordForgotten.php | 2 -- out/out.PasswordSend.php | 2 -- out/out.RemoveArchive.php | 2 -- out/out.RemoveDocument.php | 2 -- out/out.RemoveDocumentFile.php | 2 -- out/out.RemoveDump.php | 2 -- out/out.RemoveEvent.php | 2 -- out/out.RemoveFolder.php | 2 -- out/out.RemoveFolderFiles.php | 2 -- out/out.RemoveGroup.php | 2 -- out/out.RemoveLog.php | 2 -- out/out.RemoveUser.php | 2 -- out/out.RemoveUserFromProcesses.php | 2 -- out/out.RemoveVersion.php | 2 -- out/out.RemoveWorkflow.php | 2 -- out/out.RemoveWorkflowFromDocument.php | 2 -- out/out.ReturnFromSubWorkflow.php | 3 --- out/out.ReviewDocument.php | 2 -- out/out.ReviewSummary.php | 2 -- out/out.RewindWorkflow.php | 2 -- out/out.RunSubWorkflow.php | 3 --- out/out.Search.php | 1 - out/out.SearchForm.php | 2 -- out/out.SendLoginData.php | 2 -- out/out.Session.php | 2 -- out/out.SetExpires.php | 2 -- out/out.SetReviewersApprovers.php | 2 -- out/out.SetWorkflow.php | 2 -- out/out.Settings.php | 2 -- out/out.Setup2Factor.php | 1 - out/out.Statistic.php | 2 -- out/out.SubstituteUser.php | 2 -- out/out.Tasks.php | 2 -- out/out.Timeline.php | 2 -- out/out.TransferDocument.php | 3 --- out/out.TransferObjects.php | 2 -- out/out.TriggerWorkflow.php | 2 -- out/out.UpdateDocument.php | 2 -- out/out.UpdateDocument2.php | 2 -- out/out.UserDefaultKeywords.php | 2 -- out/out.UserImage.php | 3 --- out/out.UsrView.php | 2 -- out/out.ViewDocument.php | 2 -- out/out.ViewEvent.php | 3 --- out/out.ViewFolder.php | 2 -- out/out.WorkflowActionsMgr.php | 2 -- out/out.WorkflowGraph.php | 2 -- out/out.WorkflowMgr.php | 2 -- out/out.WorkflowStatesMgr.php | 2 -- out/out.WorkflowSummary.php | 2 -- 99 files changed, 201 deletions(-) diff --git a/out/out.AddDocument.php b/out/out.AddDocument.php index 0cc16f138..3b7f25407 100644 --- a/out/out.AddDocument.php +++ b/out/out.AddDocument.php @@ -73,5 +73,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.AddEvent.php b/out/out.AddEvent.php index e97f2cf98..07bf8b70c 100644 --- a/out/out.AddEvent.php +++ b/out/out.AddEvent.php @@ -39,5 +39,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.AddFile.php b/out/out.AddFile.php index 79ac15d08..09b8673f8 100644 --- a/out/out.AddFile.php +++ b/out/out.AddFile.php @@ -59,5 +59,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.AddSubFolder.php b/out/out.AddSubFolder.php index 42216d13d..e949f345c 100644 --- a/out/out.AddSubFolder.php +++ b/out/out.AddSubFolder.php @@ -53,5 +53,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.ApprovalSummary.php b/out/out.ApprovalSummary.php index ecc8374a8..6c625d9eb 100644 --- a/out/out.ApprovalSummary.php +++ b/out/out.ApprovalSummary.php @@ -46,5 +46,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.ApproveDocument.php b/out/out.ApproveDocument.php index ac284ee42..aa4670b6e 100644 --- a/out/out.ApproveDocument.php +++ b/out/out.ApproveDocument.php @@ -84,5 +84,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.AttributeMgr.php b/out/out.AttributeMgr.php index 1a613d247..e4a4cfcd6 100644 --- a/out/out.AttributeMgr.php +++ b/out/out.AttributeMgr.php @@ -60,5 +60,3 @@ if($view) { $view->setParam('xsendfile', $settings->_enableXsendfile); $view($_GET); } - -?> diff --git a/out/out.BackupTools.php b/out/out.BackupTools.php index 38ea9a04c..1ffd6b342 100644 --- a/out/out.BackupTools.php +++ b/out/out.BackupTools.php @@ -45,5 +45,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.Calendar.php b/out/out.Calendar.php index 1bb27108b..9c0ddda64 100644 --- a/out/out.Calendar.php +++ b/out/out.Calendar.php @@ -84,5 +84,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.CategoryChooser.php b/out/out.CategoryChooser.php index 2ab2570b8..b1fed4a5b 100644 --- a/out/out.CategoryChooser.php +++ b/out/out.CategoryChooser.php @@ -41,5 +41,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.Charts.php b/out/out.Charts.php index cb1e73cba..cd505da87 100644 --- a/out/out.Charts.php +++ b/out/out.Charts.php @@ -58,5 +58,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.ClearCache.php b/out/out.ClearCache.php index cd9a8775d..bffd8203f 100644 --- a/out/out.ClearCache.php +++ b/out/out.ClearCache.php @@ -41,5 +41,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.Clipboard.php b/out/out.Clipboard.php index 3d05a787b..91dbb4238 100644 --- a/out/out.Clipboard.php +++ b/out/out.Clipboard.php @@ -48,5 +48,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.CreateIndex.php b/out/out.CreateIndex.php index 3968d8d2b..ce6614e61 100644 --- a/out/out.CreateIndex.php +++ b/out/out.CreateIndex.php @@ -46,5 +46,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.DefaultKeywords.php b/out/out.DefaultKeywords.php index 85294f68a..38f4d9b3a 100644 --- a/out/out.DefaultKeywords.php +++ b/out/out.DefaultKeywords.php @@ -48,5 +48,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.DocumentAccess.php b/out/out.DocumentAccess.php index 779e14e76..008edfc32 100644 --- a/out/out.DocumentAccess.php +++ b/out/out.DocumentAccess.php @@ -63,5 +63,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.DocumentChooser.php b/out/out.DocumentChooser.php index ba9174ed5..e2d0c6f9e 100644 --- a/out/out.DocumentChooser.php +++ b/out/out.DocumentChooser.php @@ -59,5 +59,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.DocumentNotify.php b/out/out.DocumentNotify.php index 0cdd88793..4cf0987e2 100644 --- a/out/out.DocumentNotify.php +++ b/out/out.DocumentNotify.php @@ -57,5 +57,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.DocumentVersionDetail.php b/out/out.DocumentVersionDetail.php index 2a7bcc5b3..e2ef756b5 100644 --- a/out/out.DocumentVersionDetail.php +++ b/out/out.DocumentVersionDetail.php @@ -86,5 +86,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.DropFolderChooser.php b/out/out.DropFolderChooser.php index c40f5f096..55efd5165 100644 --- a/out/out.DropFolderChooser.php +++ b/out/out.DropFolderChooser.php @@ -66,5 +66,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.EditAttributes.php b/out/out.EditAttributes.php index 27af0bcd2..80c80bf0d 100644 --- a/out/out.EditAttributes.php +++ b/out/out.EditAttributes.php @@ -67,5 +67,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.EditComment.php b/out/out.EditComment.php index fbb700748..953c9042f 100644 --- a/out/out.EditComment.php +++ b/out/out.EditComment.php @@ -70,5 +70,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.EditDocument.php b/out/out.EditDocument.php index f7ffa2318..bc242bc5a 100644 --- a/out/out.EditDocument.php +++ b/out/out.EditDocument.php @@ -65,5 +65,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.EditDocumentFile.php b/out/out.EditDocumentFile.php index 8c7078f1a..dd0927070 100644 --- a/out/out.EditDocumentFile.php +++ b/out/out.EditDocumentFile.php @@ -68,5 +68,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.EditEvent.php b/out/out.EditEvent.php index 6f72bcaba..f5e382ba5 100644 --- a/out/out.EditEvent.php +++ b/out/out.EditEvent.php @@ -54,5 +54,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.EditFolder.php b/out/out.EditFolder.php index 5f0480a94..ff359c534 100644 --- a/out/out.EditFolder.php +++ b/out/out.EditFolder.php @@ -57,5 +57,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.EditOnline.php b/out/out.EditOnline.php index 00af1f66a..184dae150 100644 --- a/out/out.EditOnline.php +++ b/out/out.EditOnline.php @@ -99,4 +99,3 @@ if($view) { $view($_GET); exit; } - diff --git a/out/out.EditUserData.php b/out/out.EditUserData.php index 5e110fbaa..6f2507f8d 100644 --- a/out/out.EditUserData.php +++ b/out/out.EditUserData.php @@ -50,5 +50,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.ExpiredDocuments.php b/out/out.ExpiredDocuments.php index f6becc6a3..cbc7d8dcb 100644 --- a/out/out.ExpiredDocuments.php +++ b/out/out.ExpiredDocuments.php @@ -49,5 +49,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.ExtensionMgr.php b/out/out.ExtensionMgr.php index 2e7e0e896..1f9ebda80 100644 --- a/out/out.ExtensionMgr.php +++ b/out/out.ExtensionMgr.php @@ -57,5 +57,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.FolderAccess.php b/out/out.FolderAccess.php index 08cf72877..f0f1b6abd 100644 --- a/out/out.FolderAccess.php +++ b/out/out.FolderAccess.php @@ -57,5 +57,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.FolderChooser.php b/out/out.FolderChooser.php index ffea48194..47f0946cf 100644 --- a/out/out.FolderChooser.php +++ b/out/out.FolderChooser.php @@ -59,5 +59,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.FolderNotify.php b/out/out.FolderNotify.php index e457802f9..6835be081 100644 --- a/out/out.FolderNotify.php +++ b/out/out.FolderNotify.php @@ -56,5 +56,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.ForcePasswordChange.php b/out/out.ForcePasswordChange.php index 0c78e3d4b..36189235c 100644 --- a/out/out.ForcePasswordChange.php +++ b/out/out.ForcePasswordChange.php @@ -47,5 +47,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.GroupView.php b/out/out.GroupView.php index f2fa399c4..4fb8e4133 100644 --- a/out/out.GroupView.php +++ b/out/out.GroupView.php @@ -54,5 +54,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.Help.php b/out/out.Help.php index dc8f2db78..3a6c70816 100644 --- a/out/out.Help.php +++ b/out/out.Help.php @@ -41,5 +41,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.ImportFS.php b/out/out.ImportFS.php index 28ee7c482..95095794b 100644 --- a/out/out.ImportFS.php +++ b/out/out.ImportFS.php @@ -39,5 +39,3 @@ if($view) { $view($_GET); exit; } - - diff --git a/out/out.IndexInfo.php b/out/out.IndexInfo.php index f6fa9f60e..c0f026b05 100644 --- a/out/out.IndexInfo.php +++ b/out/out.IndexInfo.php @@ -52,5 +52,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.Indexer.php b/out/out.Indexer.php index 24c8f5467..d4521bc81 100644 --- a/out/out.Indexer.php +++ b/out/out.Indexer.php @@ -86,5 +86,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.KeywordChooser.php b/out/out.KeywordChooser.php index 1c1ec862a..b1402036b 100644 --- a/out/out.KeywordChooser.php +++ b/out/out.KeywordChooser.php @@ -49,5 +49,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.LogManagement.php b/out/out.LogManagement.php index b02839b41..366c655b4 100644 --- a/out/out.LogManagement.php +++ b/out/out.LogManagement.php @@ -47,6 +47,3 @@ if($view) { $view($_GET); exit; } - - -?> diff --git a/out/out.Login.php b/out/out.Login.php index 950750a7f..079c74c3d 100644 --- a/out/out.Login.php +++ b/out/out.Login.php @@ -59,5 +59,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.ManageNotify.php b/out/out.ManageNotify.php index a641d338c..4ffc38452 100644 --- a/out/out.ManageNotify.php +++ b/out/out.ManageNotify.php @@ -43,5 +43,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.MoveDocument.php b/out/out.MoveDocument.php index 674036c89..4efea96ee 100644 --- a/out/out.MoveDocument.php +++ b/out/out.MoveDocument.php @@ -76,5 +76,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.MoveFolder.php b/out/out.MoveFolder.php index e5b101f49..4cb369ca6 100644 --- a/out/out.MoveFolder.php +++ b/out/out.MoveFolder.php @@ -73,5 +73,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.MyAccount.php b/out/out.MyAccount.php index ee6bd0ab9..33e713bbe 100644 --- a/out/out.MyAccount.php +++ b/out/out.MyAccount.php @@ -44,5 +44,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.MyDocuments.php b/out/out.MyDocuments.php index 26c564ae1..aa183d67a 100644 --- a/out/out.MyDocuments.php +++ b/out/out.MyDocuments.php @@ -60,5 +60,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.ObjectCheck.php b/out/out.ObjectCheck.php index 5406f06fc..d03953b96 100644 --- a/out/out.ObjectCheck.php +++ b/out/out.ObjectCheck.php @@ -97,5 +97,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.OverrideContentStatus.php b/out/out.OverrideContentStatus.php index c7ef9d0d5..1248a8e04 100644 --- a/out/out.OverrideContentStatus.php +++ b/out/out.OverrideContentStatus.php @@ -72,5 +72,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.PasswordForgotten.php b/out/out.PasswordForgotten.php index fddc18050..abfd35349 100644 --- a/out/out.PasswordForgotten.php +++ b/out/out.PasswordForgotten.php @@ -39,5 +39,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.PasswordSend.php b/out/out.PasswordSend.php index fddc18050..abfd35349 100644 --- a/out/out.PasswordSend.php +++ b/out/out.PasswordSend.php @@ -39,5 +39,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RemoveArchive.php b/out/out.RemoveArchive.php index 44f7a6b11..910bdf14c 100644 --- a/out/out.RemoveArchive.php +++ b/out/out.RemoveArchive.php @@ -44,5 +44,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RemoveDocument.php b/out/out.RemoveDocument.php index cd8363a28..170d272aa 100644 --- a/out/out.RemoveDocument.php +++ b/out/out.RemoveDocument.php @@ -64,5 +64,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RemoveDocumentFile.php b/out/out.RemoveDocumentFile.php index 8c7078f1a..dd0927070 100644 --- a/out/out.RemoveDocumentFile.php +++ b/out/out.RemoveDocumentFile.php @@ -68,5 +68,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RemoveDump.php b/out/out.RemoveDump.php index cb26d6749..b77a807dc 100644 --- a/out/out.RemoveDump.php +++ b/out/out.RemoveDump.php @@ -44,5 +44,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RemoveEvent.php b/out/out.RemoveEvent.php index 9f695b96d..4e6b02bd8 100644 --- a/out/out.RemoveEvent.php +++ b/out/out.RemoveEvent.php @@ -48,5 +48,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RemoveFolder.php b/out/out.RemoveFolder.php index 800e72195..fbaf16f51 100644 --- a/out/out.RemoveFolder.php +++ b/out/out.RemoveFolder.php @@ -55,5 +55,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RemoveFolderFiles.php b/out/out.RemoveFolderFiles.php index 699dd449e..725f44034 100644 --- a/out/out.RemoveFolderFiles.php +++ b/out/out.RemoveFolderFiles.php @@ -48,5 +48,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RemoveGroup.php b/out/out.RemoveGroup.php index 3116e9edf..3739786d4 100644 --- a/out/out.RemoveGroup.php +++ b/out/out.RemoveGroup.php @@ -48,5 +48,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RemoveLog.php b/out/out.RemoveLog.php index 618009819..2b2728146 100644 --- a/out/out.RemoveLog.php +++ b/out/out.RemoveLog.php @@ -59,5 +59,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RemoveUser.php b/out/out.RemoveUser.php index ff062ae8d..664734210 100644 --- a/out/out.RemoveUser.php +++ b/out/out.RemoveUser.php @@ -59,5 +59,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RemoveUserFromProcesses.php b/out/out.RemoveUserFromProcesses.php index c7e2afcb7..e94be29c5 100644 --- a/out/out.RemoveUserFromProcesses.php +++ b/out/out.RemoveUserFromProcesses.php @@ -51,5 +51,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RemoveVersion.php b/out/out.RemoveVersion.php index 9c982338e..e8b58ba24 100644 --- a/out/out.RemoveVersion.php +++ b/out/out.RemoveVersion.php @@ -78,5 +78,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RemoveWorkflow.php b/out/out.RemoveWorkflow.php index b94e6c444..b33c0b046 100644 --- a/out/out.RemoveWorkflow.php +++ b/out/out.RemoveWorkflow.php @@ -50,5 +50,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RemoveWorkflowFromDocument.php b/out/out.RemoveWorkflowFromDocument.php index 40784dd90..883924713 100644 --- a/out/out.RemoveWorkflowFromDocument.php +++ b/out/out.RemoveWorkflowFromDocument.php @@ -73,5 +73,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.ReturnFromSubWorkflow.php b/out/out.ReturnFromSubWorkflow.php index 5ddf54709..6203594fb 100644 --- a/out/out.ReturnFromSubWorkflow.php +++ b/out/out.ReturnFromSubWorkflow.php @@ -75,6 +75,3 @@ if($view) { $view($_GET); exit; } - -?> - diff --git a/out/out.ReviewDocument.php b/out/out.ReviewDocument.php index 21445dfea..e1ef11747 100644 --- a/out/out.ReviewDocument.php +++ b/out/out.ReviewDocument.php @@ -85,5 +85,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.ReviewSummary.php b/out/out.ReviewSummary.php index ecc8374a8..6c625d9eb 100644 --- a/out/out.ReviewSummary.php +++ b/out/out.ReviewSummary.php @@ -46,5 +46,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RewindWorkflow.php b/out/out.RewindWorkflow.php index 9d7351aeb..b419dfa10 100644 --- a/out/out.RewindWorkflow.php +++ b/out/out.RewindWorkflow.php @@ -73,5 +73,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.RunSubWorkflow.php b/out/out.RunSubWorkflow.php index 528cd21a4..3980b2e0f 100644 --- a/out/out.RunSubWorkflow.php +++ b/out/out.RunSubWorkflow.php @@ -80,6 +80,3 @@ if($view) { $view($_GET); exit; } - -?> - diff --git a/out/out.Search.php b/out/out.Search.php index 5dc5b6b4c..c37f7531b 100644 --- a/out/out.Search.php +++ b/out/out.Search.php @@ -476,4 +476,3 @@ if($settings->_showSingleSearchHit && count($entries) == 1) { exit; } } -?> diff --git a/out/out.SearchForm.php b/out/out.SearchForm.php index b70c6c617..fd18d9dca 100644 --- a/out/out.SearchForm.php +++ b/out/out.SearchForm.php @@ -57,5 +57,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.SendLoginData.php b/out/out.SendLoginData.php index bd8216498..c6a026da9 100644 --- a/out/out.SendLoginData.php +++ b/out/out.SendLoginData.php @@ -47,5 +47,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.Session.php b/out/out.Session.php index 37b123ff5..5dca7b496 100644 --- a/out/out.Session.php +++ b/out/out.Session.php @@ -37,5 +37,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.SetExpires.php b/out/out.SetExpires.php index 3edafd9e7..10ba93fab 100644 --- a/out/out.SetExpires.php +++ b/out/out.SetExpires.php @@ -58,5 +58,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.SetReviewersApprovers.php b/out/out.SetReviewersApprovers.php index 379c47086..5e27ec33d 100644 --- a/out/out.SetReviewersApprovers.php +++ b/out/out.SetReviewersApprovers.php @@ -70,5 +70,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.SetWorkflow.php b/out/out.SetWorkflow.php index 5ac1aacd8..72a31862b 100644 --- a/out/out.SetWorkflow.php +++ b/out/out.SetWorkflow.php @@ -69,5 +69,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.Settings.php b/out/out.Settings.php index 27833735d..bd9e6087b 100644 --- a/out/out.Settings.php +++ b/out/out.Settings.php @@ -49,5 +49,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.Setup2Factor.php b/out/out.Setup2Factor.php index f7f0672d9..ac41c473d 100644 --- a/out/out.Setup2Factor.php +++ b/out/out.Setup2Factor.php @@ -35,4 +35,3 @@ if($view) { $view($_GET); exit; } - diff --git a/out/out.Statistic.php b/out/out.Statistic.php index ec6f0ecdd..d676b7aae 100644 --- a/out/out.Statistic.php +++ b/out/out.Statistic.php @@ -40,5 +40,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.SubstituteUser.php b/out/out.SubstituteUser.php index c4bce86bb..6ff6b5572 100644 --- a/out/out.SubstituteUser.php +++ b/out/out.SubstituteUser.php @@ -43,5 +43,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.Tasks.php b/out/out.Tasks.php index 90bf3b384..c5bc8b278 100644 --- a/out/out.Tasks.php +++ b/out/out.Tasks.php @@ -40,5 +40,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.Timeline.php b/out/out.Timeline.php index d6f58969e..2b07ab5b1 100644 --- a/out/out.Timeline.php +++ b/out/out.Timeline.php @@ -72,5 +72,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.TransferDocument.php b/out/out.TransferDocument.php index dbafb6411..c10915ee0 100644 --- a/out/out.TransferDocument.php +++ b/out/out.TransferDocument.php @@ -63,6 +63,3 @@ if($view) { $view($_GET); exit; } - -?> - diff --git a/out/out.TransferObjects.php b/out/out.TransferObjects.php index b2a0095c8..369fb7736 100644 --- a/out/out.TransferObjects.php +++ b/out/out.TransferObjects.php @@ -54,5 +54,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.TriggerWorkflow.php b/out/out.TriggerWorkflow.php index bcbc988fc..e4a2e81ed 100644 --- a/out/out.TriggerWorkflow.php +++ b/out/out.TriggerWorkflow.php @@ -78,5 +78,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.UpdateDocument.php b/out/out.UpdateDocument.php index 083103d65..333c5f980 100644 --- a/out/out.UpdateDocument.php +++ b/out/out.UpdateDocument.php @@ -81,5 +81,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.UpdateDocument2.php b/out/out.UpdateDocument2.php index c3f760fa8..97a978981 100644 --- a/out/out.UpdateDocument2.php +++ b/out/out.UpdateDocument2.php @@ -62,5 +62,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.UserDefaultKeywords.php b/out/out.UserDefaultKeywords.php index ce75d1273..25682bed0 100644 --- a/out/out.UserDefaultKeywords.php +++ b/out/out.UserDefaultKeywords.php @@ -42,5 +42,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.UserImage.php b/out/out.UserImage.php index a71891312..6287c3eae 100644 --- a/out/out.UserImage.php +++ b/out/out.UserImage.php @@ -43,6 +43,3 @@ if($resArr = $myUser->getImage()) { header("Content-Type: " . $resArr["mimeType"]); print base64_decode($resArr["image"]); } -exit; - -?> diff --git a/out/out.UsrView.php b/out/out.UsrView.php index 01fb0d9b8..25dbbb8c0 100644 --- a/out/out.UsrView.php +++ b/out/out.UsrView.php @@ -50,5 +50,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.ViewDocument.php b/out/out.ViewDocument.php index 37b64fe04..36ffbce1e 100644 --- a/out/out.ViewDocument.php +++ b/out/out.ViewDocument.php @@ -86,5 +86,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.ViewEvent.php b/out/out.ViewEvent.php index 4abac08c9..ebc8ab2d3 100644 --- a/out/out.ViewEvent.php +++ b/out/out.ViewEvent.php @@ -44,6 +44,3 @@ if($view) { $view($_GET); exit; } - - -?> diff --git a/out/out.ViewFolder.php b/out/out.ViewFolder.php index 3ddf922ef..b30329feb 100644 --- a/out/out.ViewFolder.php +++ b/out/out.ViewFolder.php @@ -100,5 +100,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.WorkflowActionsMgr.php b/out/out.WorkflowActionsMgr.php index 85d133967..7aec36973 100644 --- a/out/out.WorkflowActionsMgr.php +++ b/out/out.WorkflowActionsMgr.php @@ -52,5 +52,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.WorkflowGraph.php b/out/out.WorkflowGraph.php index 290494e3c..184c281ba 100644 --- a/out/out.WorkflowGraph.php +++ b/out/out.WorkflowGraph.php @@ -62,5 +62,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.WorkflowMgr.php b/out/out.WorkflowMgr.php index 061ad0a87..2f9987915 100644 --- a/out/out.WorkflowMgr.php +++ b/out/out.WorkflowMgr.php @@ -58,5 +58,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.WorkflowStatesMgr.php b/out/out.WorkflowStatesMgr.php index 1a1bd40dc..e2d55e34e 100644 --- a/out/out.WorkflowStatesMgr.php +++ b/out/out.WorkflowStatesMgr.php @@ -46,5 +46,3 @@ if($view) { $view($_GET); exit; } - -?> diff --git a/out/out.WorkflowSummary.php b/out/out.WorkflowSummary.php index 07fb7accc..f31a0a3e1 100644 --- a/out/out.WorkflowSummary.php +++ b/out/out.WorkflowSummary.php @@ -45,5 +45,3 @@ if($view) { $view($_GET); exit; } - -?> From dcfefa58015eb7826c963dec0295f7270d72ce6c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 20 Apr 2020 10:18:51 +0200 Subject: [PATCH 066/137] =?UTF-8?q?remove=20clo=D1=95ing=20php=20tag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/inc.Authentication.php | 1 - inc/inc.ClassAccessOperation.php | 1 - inc/inc.ClassCalendar.php | 1 - inc/inc.ClassControllerCommon.php | 1 - inc/inc.ClassEmailNotify.php | 1 - inc/inc.ClassEmailUtils.php | 1 - inc/inc.ClassExtBase.php | 2 -- inc/inc.ClassNotify.php | 1 - inc/inc.ClassPasswordStrength.php | 1 - inc/inc.ClassSession.php | 1 - inc/inc.ClassSettings.php | 1 - inc/inc.ClassUI.php | 2 -- inc/inc.ClassUI_Default.php | 1 - inc/inc.ClassViewCommon.php | 1 - inc/inc.DBInit.php | 2 -- inc/inc.Language.php | 1 - inc/inc.LogInit.php | 2 -- inc/inc.Settings.php | 2 -- inc/inc.Utils.php | 1 - 19 files changed, 24 deletions(-) diff --git a/inc/inc.Authentication.php b/inc/inc.Authentication.php index de9e93a5c..89d3ab7c1 100644 --- a/inc/inc.Authentication.php +++ b/inc/inc.Authentication.php @@ -147,4 +147,3 @@ if($settings->_cookieLifetime) { /* Turn off http only cookies if jumploader is enabled */ setcookie("mydms_session", $dms_session, $lifetime, $settings->_httpRoot, null, null, !$settings->_enableLargeFileUpload); } -?> diff --git a/inc/inc.ClassAccessOperation.php b/inc/inc.ClassAccessOperation.php index af9dff37b..cbf170a34 100644 --- a/inc/inc.ClassAccessOperation.php +++ b/inc/inc.ClassAccessOperation.php @@ -301,4 +301,3 @@ class SeedDMS_AccessOperation { return false; } /* }}} */ } -?> diff --git a/inc/inc.ClassCalendar.php b/inc/inc.ClassCalendar.php index e50aafc7f..f7e87aab4 100644 --- a/inc/inc.ClassCalendar.php +++ b/inc/inc.ClassCalendar.php @@ -90,4 +90,3 @@ class SeedDMS_Calendar { return $ret; } /* }}} */ } -?> diff --git a/inc/inc.ClassControllerCommon.php b/inc/inc.ClassControllerCommon.php index 4c3749f54..dab542824 100644 --- a/inc/inc.ClassControllerCommon.php +++ b/inc/inc.ClassControllerCommon.php @@ -248,5 +248,4 @@ class SeedDMS_Controller_Common { } return false; } /* }}} */ - } diff --git a/inc/inc.ClassEmailNotify.php b/inc/inc.ClassEmailNotify.php index b6651b460..5980b6159 100644 --- a/inc/inc.ClassEmailNotify.php +++ b/inc/inc.ClassEmailNotify.php @@ -215,4 +215,3 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { return true; } /* }}} */ } -?> diff --git a/inc/inc.ClassEmailUtils.php b/inc/inc.ClassEmailUtils.php index e1882290b..28d32cc9c 100644 --- a/inc/inc.ClassEmailUtils.php +++ b/inc/inc.ClassEmailUtils.php @@ -47,4 +47,3 @@ class SeedDMS_EmailUtils { } /* }}} */ } -?> diff --git a/inc/inc.ClassExtBase.php b/inc/inc.ClassExtBase.php index fa7135803..d9cd0602c 100644 --- a/inc/inc.ClassExtBase.php +++ b/inc/inc.ClassExtBase.php @@ -30,5 +30,3 @@ */ class SeedDMS_ExtBase { } - -?> diff --git a/inc/inc.ClassNotify.php b/inc/inc.ClassNotify.php index a0c1fa861..6655daa39 100644 --- a/inc/inc.ClassNotify.php +++ b/inc/inc.ClassNotify.php @@ -29,4 +29,3 @@ abstract class SeedDMS_Notify { abstract function toGroup($sender, $groupRecipient, $subject, $message, $params=array()); abstract function toList($sender, $recipients, $subject, $message, $params=array()); } -?> diff --git a/inc/inc.ClassPasswordStrength.php b/inc/inc.ClassPasswordStrength.php index b71e7b4c5..ef45d6da8 100644 --- a/inc/inc.ClassPasswordStrength.php +++ b/inc/inc.ClassPasswordStrength.php @@ -274,4 +274,3 @@ class Password_Strength { return $score_info; } } -?> diff --git a/inc/inc.ClassSession.php b/inc/inc.ClassSession.php index 1bc98a1b3..8dcc92283 100644 --- a/inc/inc.ClassSession.php +++ b/inc/inc.ClassSession.php @@ -510,4 +510,3 @@ class SeedDMS_SessionMgr { } /* }}} */ } -?> diff --git a/inc/inc.ClassSettings.php b/inc/inc.ClassSettings.php index 897e42689..7965fc619 100644 --- a/inc/inc.ClassSettings.php +++ b/inc/inc.ClassSettings.php @@ -1575,4 +1575,3 @@ class Settings { /* {{{ */ } /* }}} */ -?> diff --git a/inc/inc.ClassUI.php b/inc/inc.ClassUI.php index 8f8ee5047..00422e869 100644 --- a/inc/inc.ClassUI.php +++ b/inc/inc.ClassUI.php @@ -181,5 +181,3 @@ class UI extends UI_Default { exit; } } - -?> diff --git a/inc/inc.ClassUI_Default.php b/inc/inc.ClassUI_Default.php index 581655425..4bbab1a4b 100644 --- a/inc/inc.ClassUI_Default.php +++ b/inc/inc.ClassUI_Default.php @@ -1113,4 +1113,3 @@ mayscript> diff --git a/inc/inc.ClassViewCommon.php b/inc/inc.ClassViewCommon.php index 8ec9f69bf..9979e1383 100644 --- a/inc/inc.ClassViewCommon.php +++ b/inc/inc.ClassViewCommon.php @@ -209,4 +209,3 @@ class SeedDMS_View_Common { echo "};\n"; } /* }}} */ } -?> diff --git a/inc/inc.DBInit.php b/inc/inc.DBInit.php index 1519dd4e0..1b8d31ab4 100644 --- a/inc/inc.DBInit.php +++ b/inc/inc.DBInit.php @@ -64,5 +64,3 @@ if(isset($GLOBALS['SEEDDMS_HOOKS']['initDMS'])) { } } } - -?> diff --git a/inc/inc.Language.php b/inc/inc.Language.php index 5c5624c8c..ef9950862 100644 --- a/inc/inc.Language.php +++ b/inc/inc.Language.php @@ -306,4 +306,3 @@ function getAttributeValidationError($error, $attrname='', $attrvalue='', $regex } } /* }}} */ -?> diff --git a/inc/inc.LogInit.php b/inc/inc.LogInit.php index 6bf238773..d75101f9e 100644 --- a/inc/inc.LogInit.php +++ b/inc/inc.LogInit.php @@ -34,5 +34,3 @@ if ($settings->_logFileEnable) { } else { $logger = null; } - -?> diff --git a/inc/inc.Settings.php b/inc/inc.Settings.php index 9e4479424..75f124709 100644 --- a/inc/inc.Settings.php +++ b/inc/inc.Settings.php @@ -80,5 +80,3 @@ if($settings->_enableFullSearch) { * relative to it. */ ini_set('include_path', $settings->_rootDir. PATH_SEPARATOR .ini_get('include_path')); - -?> diff --git a/inc/inc.Utils.php b/inc/inc.Utils.php index 3173c93e4..547370723 100644 --- a/inc/inc.Utils.php +++ b/inc/inc.Utils.php @@ -663,4 +663,3 @@ class SeedDMS_CSRF { //$kkk = $CSRF->create_api_key(); //echo $kkk; //echo $CSRF->check_api_key($kkk) ? 'valid' : 'invalid'; -?> From 560827ffddbd2b1136f1e91516e557e9a7004b2a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 21 Apr 2020 11:55:22 +0200 Subject: [PATCH 067/137] pass configuration to init() of extension --- inc/inc.Extension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/inc.Extension.php b/inc/inc.Extension.php index e53c88485..3fff1f770 100644 --- a/inc/inc.Extension.php +++ b/inc/inc.Extension.php @@ -45,7 +45,7 @@ foreach($extMgr->getExtensionConfiguration() as $extname=>$extconf) { include($classfile); $obj = new $extconf['class']['name']; if(method_exists($obj, 'init')) - $obj->init(); + $obj->init(isset($settings->_extensions[$extname]) ? $settings->_extensions[$extname] : null); } } if(isset($extconf['language']['file'])) { From 2ca619045d85add7abe949366650fcfab5ff6f64 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 21 Apr 2020 11:56:20 +0200 Subject: [PATCH 068/137] place comment of version below version data (remove extra column) --- views/bootstrap/class.ViewDocument.php | 44 ++++++++++++++++---------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index 67477b0e8..b00a2f7d0 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -567,14 +567,14 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { $this->contentContainerStart(); print ""; print "\n\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; + print "\n"; +// print "\n"; +// print "\n"; + print "\n"; + print "\n"; print "\n"; print "\n"; - print "\n"; print "\n"; - print ""; +// print ""; print "
".getMLText("file")."".getMLText("comment")."".getMLText("status")."".htmlspecialchars($latestContent->getOriginalFileName())."".getMLText("file")."".getMLText("comment")."".getMLText("status")."
"; + print ""; $previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidthdetail, $timeout, $xsendfile); $previewer->setConverters($previewconverters); $previewer->createPreview($latestContent); @@ -596,7 +596,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { print "
    \n"; - print "
  • ".$latestContent->getOriginalFileName() ."
  • \n"; +// print "
  • ".$latestContent->getOriginalFileName() ."
  • \n"; print "
  • ".getMLText('version').": ".$latestContent->getVersion()."
  • \n"; if ($file_exists) @@ -608,6 +608,13 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { print "
  • ".getLongReadableDate($latestContent->getDate())."
  • "; print "
\n"; + $txt = $this->callHook('showVersionComment', $latestContent); + if($txt) { + echo $txt; + } else { + if($latestContent->getComment()) + print "

".htmlspecialchars($latestContent->getComment())."

"; + } print "
    \n"; $attributes = $latestContent->getAttributes(); if($attributes) { @@ -623,7 +630,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { } print "
".htmlspecialchars($latestContent->getComment())."".htmlspecialchars($latestContent->getComment()).""; print getOverallStatusText($status["status"]); @@ -1174,11 +1181,9 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { print ""; print "\n\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; + print "\n"; + print "\n"; + print "\n"; print "\n\n\n"; for ($i = count($versions)-2; $i >= 0; $i--) { @@ -1191,7 +1196,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { $file_exists=file_exists($dms->contentDir . $version->getPath()); print "\n"; - print "\n"; print "\n"; - print ""; +// print ""; print ""; print "
".getMLText("file")."".getMLText("comment")."".getMLText("status")."".getMLText("status")."
"; + print ""; if($file_exists) { if ($viewonlinefiletypes && (in_array(strtolower($version->getFileType()), $viewonlinefiletypes) || in_array(strtolower($version->getMimeType()), $viewonlinefiletypes))) { print "getDocument()->getId()."&version=".$version->getVersion()."\">"; @@ -1210,7 +1215,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { } print "
    \n"; - print "
  • ".$version->getOriginalFileName()."
  • \n"; + print "
  • ".htmlspecialchars($version->getOriginalFileName())."
  • \n"; print "
  • ".getMLText('version').": ".$version->getVersion()."
  • \n"; if ($file_exists) print "
  • ". SeedDMS_Core_File::format_filesize($version->getFileSize()) .", ".htmlspecialchars($version->getMimeType())."
  • "; else print "
  • ".getMLText("document_deleted")."
  • "; @@ -1218,6 +1223,13 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { print "
  • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($updatingUser->getFullName())."
  • "; print "
  • ".getLongReadableDate($version->getDate())."
  • "; print "
\n"; + $txt = $this->callHook('showVersionComment', $version); + if($txt) { + echo $txt; + } else { + if($version->getComment()) + print "

".htmlspecialchars($version->getComment())."

"; + } print "
    \n"; $attributes = $version->getAttributes(); if($attributes) { @@ -1232,7 +1244,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { } } print "
".htmlspecialchars($version->getComment())."".htmlspecialchars($version->getComment())."".getOverallStatusText($vstat["status"]).""; print "
    "; From ea3ffc57bee1a7ef00213f81bf5e07544c1ea9e3 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 21 Apr 2020 11:57:44 +0200 Subject: [PATCH 069/137] set style for dt and dd in div.popupbox --- styles/bootstrap/application.css | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/styles/bootstrap/application.css b/styles/bootstrap/application.css index b954dd931..b8f27dc17 100644 --- a/styles/bootstrap/application.css +++ b/styles/bootstrap/application.css @@ -222,6 +222,16 @@ div.popupbox { z-index: 10; } +div.popupbox dt { + font-weight: normal; + font-size: 80%; +} + +div.popupbox dd { + margin-left: 0px; + margin-bottom: 5px; +} + div.popupbox span.closepopupbox { position: absolute; right: 5px; From f03e291983f9ebe3ab88af10602ffbd77a21fef6 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 21 Apr 2020 11:58:20 +0200 Subject: [PATCH 070/137] more entries for 5.1.16 --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index c9efde42d..95b181fba 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -9,6 +9,8 @@ - do now show tasks in menu if workflow is turned off completely - do not show hidden users in session list - add norwegian translation +- pass configuration to init() of extension (backport from 6.0.x) +- place comment of version below version data (remove extra column, backport from 6.0.x) -------------------------------------------------------------------------------- Changes in version 5.1.15 From 23cc3c08cd623b46ea7ed2e6589f8bd4741f89ba Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 21 Apr 2020 15:23:37 +0200 Subject: [PATCH 071/137] add hock for global navigation bar --- views/bootstrap/class.Bootstrap.php | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 91b1c8c60..16d374fe6 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -380,13 +380,18 @@ background-image: linear-gradient(to bottom, #882222, #111111);; } echo "
      \n"; - // echo "
    • params['rootfolderid']."\">".getMLText("content")."
    • \n"; - // echo "
    • params['rootfolderid']."\">".getMLText("search")."
    • \n"; - if ($this->params['enablecalendar']) echo "
    • params['calendardefaultview']."\">".getMLText("calendar")."
    • \n"; - if ($this->params['user']->isAdmin()) echo "
    • ".getMLText("admin_tools")."
    • \n"; + $menuitems = array(); + if ($this->params['enablecalendar']) $menuitems['calendar'] = array('link'=>'../out/out.Calendar.php?mode='.$this->params['calendardefaultview'], 'label'=>"calendar"); + if ($this->params['user']->isAdmin()) $menuitems['admintools'] = array('link'=>'../out/out.AdminTools.php', 'label'=>"admin_tools"); if($this->params['enablehelp']) { - $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); - echo "
    • ".getMLText("help")."
    • \n"; + $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); + $menuitems['help'] = array('link'=>'../out/out.Help.php?context='.$tmp[1], 'label'=>"help"); + } + /* Check if hook exists because otherwise callHook() will override $menuitems */ + if($this->hasHook('globalNavigationBar')) + $menuitems = $this->callHook('globalNavigationBar', $menuitems); + foreach($menuitems as $menuitem) { + echo "
    • ".getMLText($menuitem['label'])."
    • "; } echo "
    \n"; echo "
    "; From 49ba7df19bd34343ffcf8330ef70d2480084c092 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 21 Apr 2020 15:24:08 +0200 Subject: [PATCH 072/137] add hook startRow() before each row --- views/bootstrap/class.AdminTools.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/views/bootstrap/class.AdminTools.php b/views/bootstrap/class.AdminTools.php index 4edf2f54b..d94a5e086 100644 --- a/views/bootstrap/class.AdminTools.php +++ b/views/bootstrap/class.AdminTools.php @@ -63,11 +63,13 @@ class SeedDMS_View_AdminTools extends SeedDMS_Bootstrap_Style {
    callHook('beforeRows'); ?> + callHook('startOfRow', 1); ?> callHook('endOfRow', 1); ?> + callHook('startOfRow', 2); ?> callHook('endOfRow', 2); ?>
    + callHook('startOfRow', 3); ?> @@ -85,6 +88,7 @@ class SeedDMS_View_AdminTools extends SeedDMS_Bootstrap_Style { if($this->params['workflowmode'] == 'advanced') { ?> + callHook('startOfRow', 4); ?> @@ -95,6 +99,7 @@ class SeedDMS_View_AdminTools extends SeedDMS_Bootstrap_Style { if($enablefullsearch) { ?> + callHook('startOfRow', 5); ?> @@ -104,6 +109,7 @@ class SeedDMS_View_AdminTools extends SeedDMS_Bootstrap_Style { } ?> + callHook('startOfRow', 6); ?> @@ -111,6 +117,7 @@ class SeedDMS_View_AdminTools extends SeedDMS_Bootstrap_Style { callHook('endOfRow', 6); ?> + callHook('startOfRow', 7); ?> From 9056e91bc3858c9bbdd67108312b1b394b2ebec4 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 21 Apr 2020 15:38:18 +0200 Subject: [PATCH 073/137] fix calling hook 'globalNavigationBar' --- views/bootstrap/class.Bootstrap.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 16d374fe6..a508ff308 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -388,8 +388,11 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $menuitems['help'] = array('link'=>'../out/out.Help.php?context='.$tmp[1], 'label'=>"help"); } /* Check if hook exists because otherwise callHook() will override $menuitems */ - if($this->hasHook('globalNavigationBar')) - $menuitems = $this->callHook('globalNavigationBar', $menuitems); + foreach($hookObjs as $hookObj) { + if (method_exists($hookObj, 'globalNavigationBar')) { + $menuitems = $hookObj->globalNavigationBar($this, $menuitems); + } + } foreach($menuitems as $menuitem) { echo "
  • ".getMLText($menuitem['label'])."
  • "; } From e5a56f5ebae5b5e7b7b7e7121cddce52fa82ae6a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 21 Apr 2020 15:51:40 +0200 Subject: [PATCH 074/137] allow menu children in globalNavigationBar --- views/bootstrap/class.Bootstrap.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index a508ff308..0b1e12c81 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -394,7 +394,17 @@ background-image: linear-gradient(to bottom, #882222, #111111);; } } foreach($menuitems as $menuitem) { - echo "
  • ".getMLText($menuitem['label'])."
  • "; + if(!empty($menuitem['children'])) { + echo "
  • \n"; + echo " ".getMLText($menuitem['label'])." \n"; + echo " \n"; + } else { + echo "
  • ".getMLText($menuitem['label'])."
  • "; + } } echo "
\n"; echo " "; From ea46cce2dffc18c9108955a142f3eef2215d7184 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 21 Apr 2020 17:23:14 +0200 Subject: [PATCH 075/137] fix creation of sub folders (Closes: #469) --- CHANGELOG | 1 + restapi/index.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 95b181fba..fdf85cb18 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -11,6 +11,7 @@ - add norwegian translation - pass configuration to init() of extension (backport from 6.0.x) - place comment of version below version data (remove extra column, backport from 6.0.x) +- fix creating folders via restapi (Closes: #469) -------------------------------------------------------------------------------- Changes in version 5.1.15 diff --git a/restapi/index.php b/restapi/index.php index 51d57a90c..805f7cdbc 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -412,7 +412,7 @@ function createFolder($request, $response, $args) { /* {{{ */ } /* Check if name already exists in the folder */ if(!$settings->_enableDuplicateSubFolderNames) { - if($folder->hasSubFolderByName($params['name'])) { + if($parent->hasSubFolderByName($params['name'])) { return $response->withJson(array('success'=>false, 'message'=>getMLText("subfolder_duplicate_name"), 'data'=>''), 400); } } From e93f8b626670d0c9733905ab91eb85370f59194f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 21 Apr 2020 17:23:45 +0200 Subject: [PATCH 076/137] make showNavigationBar protected so it can be used in extensions --- views/bootstrap/class.Bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 0b1e12c81..569e5d2c8 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -501,7 +501,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; return; } /* }}} */ - private function showNavigationBar($menuitems) { /* {{{ */ + protected function showNavigationBar($menuitems) { /* {{{ */ foreach($menuitems as $menuitem) { if(!empty($menuitem['children'])) { echo "
  • \n"; From b2e2a5540e99cfe221b95c1ea123a9e2a7d818bd Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 21 Apr 2020 21:12:07 +0200 Subject: [PATCH 077/137] major update of portugese --- languages/en_GB/lang.inc | 4 +- languages/pt_BR/lang.inc | 212 +++++++++++++++++++-------------------- 2 files changed, 108 insertions(+), 108 deletions(-) diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index 471120132..f3101f11a 100644 --- a/languages/en_GB/lang.inc +++ b/languages/en_GB/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1864), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1865), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -110,7 +110,7 @@ URL: [url]', 'approval_deletion_email_subject' => '[sitename]: [name] - Approval request deleted', 'approval_file' => 'File', 'approval_group' => 'Approval Group', -'approval_log' => 'Approval Log', +'approval_log' => 'Approval log', 'approval_request_email' => 'Approval request', 'approval_request_email_body' => 'Approval request Document: [name] diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index 8c4f16315..80a93945e 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1737), flaviove (627), lfcristofoli (352) +// Translators: Admin (1840), flaviove (627), lfcristofoli (352) $text = array( '2_factor_auth' => 'Autenticação de dois fatores', @@ -29,14 +29,14 @@ $text = array( 'access_control' => 'Controle de acesso', 'access_control_is_off' => 'O controle de acesso avançado está desativado.', 'access_denied' => 'Acesso Negado.', -'access_inheritance' => 'access Inheritance', +'access_inheritance' => 'herança de acesso', 'access_mode' => 'Modo de acesso', 'access_mode_all' => 'Todos', 'access_mode_none' => 'Sem acesso', -'access_mode_read' => 'leitura', +'access_mode_read' => 'Leitura', 'access_mode_readwrite' => 'Leitura-Escrita', 'access_permission_changed_email' => 'Permisão modificada', -'access_permission_changed_email_body' => 'Permisão modificada +'access_permission_changed_email_body' => 'Permissão modificada Documento: [name] Pasta mãe: [folder_path] Usuário: [username] @@ -90,14 +90,14 @@ URL: [url]', 'and' => 'e', 'apply' => 'Aplicar', 'approvals_accepted' => '[no_approvals] aprovações já aceitas', -'approvals_accepted_latest' => '', +'approvals_accepted_latest' => 'aprovações aceitas mais recentes', 'approvals_and_reviews_accepted' => '[no_approvals] aprovações e [no_reviews] comentários já aceitos', 'approvals_and_reviews_not_touched' => '[no_approvals] aprovações e [no_reviews] comentários não tocados', 'approvals_and_reviews_rejected' => '[no_approvals] aprovações e [no_reviews] avaliações já rejeitadas', 'approvals_not_touched' => '[no_approvals] aprovações não sendo tocadas', -'approvals_not_touched_latest' => '', +'approvals_not_touched_latest' => 'aprovações não tocadas mais recentemente', 'approvals_rejected' => '[no_approvals] aprovações já rejeitadas', -'approvals_rejected_latest' => '', +'approvals_rejected_latest' => 'aprovações rejeitadas mais recente', 'approvals_without_group' => 'Aprovações sem grupo', 'approvals_without_user' => 'Aprovações sem usuário', 'approval_deletion_email' => 'Solicitação de Aprovação eliminada', @@ -120,7 +120,7 @@ Usuário: [username] URL: [url]', 'approval_request_email_subject' => '[sitename]: [name] - Solicitação de aprovação', 'approval_status' => 'Estado da aprovação', -'approval_submit_email' => '', +'approval_submit_email' => 'aprovação enviar email', 'approval_submit_email_body' => 'Aprovação do documento Documento: [name] Versão: [version] @@ -212,7 +212,7 @@ URL: [url]', 'between' => 'entre', 'bg_BG' => 'Bulgaro', 'browse' => 'Procurar', -'calendar' => 'Calendario', +'calendar' => 'Calendário', 'calendar_week' => 'Calendário semanal', 'cancel' => 'Cancelar', 'cannot_assign_invalid_state' => 'Não é possível atribuir novos revisores a um documento que não está pendente de revisão ou aprovação pendente.', @@ -232,7 +232,7 @@ URL: [url]', 'category_in_use' => 'Esta categoria é usada atualmente por documentos.', 'category_noname' => 'Nenhum nome de categoria foi fornecido.', 'ca_ES' => 'Catalão', -'changelog_loading' => 'Favor aguardar até que o registro de modificações seja carregado …', +'changelog_loading' => 'Aguarde, até o log de alterações ser carregado…', 'change_assignments' => 'Definir revisor / aprovador', 'change_password' => 'Modificar senha', 'change_password_message' => 'Sua senha foi modificada.', @@ -276,7 +276,7 @@ URL: [url]', 'close' => 'Fechar', 'command' => 'Comando', 'comment' => 'Comentário', -'comment_changed_email' => '', +'comment_changed_email' => 'comentário alterado email', 'comment_for_current_version' => 'Comentário para versão atual', 'configure_extension' => 'Configurar extensão', 'confirm_clear_cache' => 'Você realmente gostaria de limpar o cache? Isso removerá todas as imagens de pré-visualização.', @@ -299,7 +299,7 @@ URL: [url]', 'confirm_rm_user' => 'Você realmente deseja remover o usuário "[username]"?
    Tenha cuidado: esta ação não pode ser desfeita.', 'confirm_rm_user_from_processes' => 'Você realmente deseja remover o usuário "[username]" de todos os processos?
    Tenha cuidado: essa ação pode levar à liberação de documentos se o usuário for o único ou o último aprovador.', 'confirm_rm_version' => 'Deseja realmente remover versão [version] do documento "[documentname]"?
    Por favor, tenha cuidado porque esta ação não poderá ser desfeita.', -'confirm_transfer_link_document' => '', +'confirm_transfer_link_document' => 'confirmar documento do link de transferência', 'confirm_transfer_objects' => 'Você realmente quer transferir os documentos, pastas etc. do usuário "[username]"?
    Tenha cuidado: Esta ação não pode ser desfeita.', 'confirm_update_transmittalitem' => 'Confirme a atualização', 'content' => 'Conteúdo', @@ -307,7 +307,7 @@ URL: [url]', 'converter_new_cmd' => 'Comando', 'converter_new_mimetype' => 'Novo mimetype', 'copied_to_checkout_as' => 'Arquivo copiado para o espaço de retirada como \'[nome do arquivo]\' em [date]', -'create_download_link' => '', +'create_download_link' => 'Criar link de download', 'create_fulltext_index' => 'Criar índice de texto completo', 'create_fulltext_index_warning' => 'Você está para recriar o índice de texto completo. Isso pode levar uma quantidade considerável de tempo e reduzir o desempenho geral do sistema. Se você realmente deseja recriar o índice, por favor confirme a operação.', 'creation_date' => 'Criado', @@ -329,7 +329,7 @@ URL: [url]', 'details' => 'Detalhes', 'details_version' => 'Detalhes para a versão: [version]', 'de_DE' => 'Alemão', -'disclaimer' => 'Esta é uma área restrita, o acesso é permitido apenas ao pessoal autorizado. Qualquer violação será tratado de acordo com as normas internas e leis vigentes.', +'disclaimer' => '
    Esta é uma área restrita, o acesso é permitido apenas ao pessoal autorizado. Qualquer violação será tratado de acordo com as normas internas e leis vigentes.
    ', 'discspace' => 'Espaço em Disco', 'docs_in_reception_no_access' => 'Documentos com recepção sem acesso pelo destinatário', 'docs_in_revision_no_access' => 'Documentos em revisão sem acesso por revisor', @@ -466,7 +466,7 @@ URL: [url]', 'dropfolderdir_missing' => 'Sua pasta suspensa pessoal não existe no servidor! Por favor, peça ao seu administrador para criá-lo.', 'dropfolder_file' => 'Arquivo de pasta suspensa', 'dropfolder_folder' => 'Pasta da pasta-alvo', -'dropfolder_metadata' => '', +'dropfolder_metadata' => 'soltar metadados da pasta', 'dropupload' => 'Envio rápido', 'drop_files_here' => 'Solte os arquivos aqui!', 'dump_creation' => 'Criação de despejo de banco de dados', @@ -499,8 +499,8 @@ URL: [url]', 'edit_user_details' => 'Editar Perfil', 'edit_version' => 'Editar versão', 'el_GR' => 'Grego', -'email' => 'Email', -'email_error_title' => 'Nenhum email informado', +'email' => 'E-mail', +'email_error_title' => 'Nenhum e-mail informado', 'email_footer' => 'Você sempre pode alterar suas configurações de e-mail usando as funções \'Minha conta\'', 'email_header' => 'Este é um gerenciador automático do servidor DMS.', 'email_not_given' => 'Por favor insira um endereço de e-mail válido.', @@ -591,7 +591,7 @@ URL: [url]', 'folder_comment_changed_email_body' => 'Comentário mudou Pasta: [name] Antigo comentário: [old_comment] -Comentário: [New_Comment] +Comentário: [new_comment] Pasta mãe: [folder_path] Usuário: [username] URL: [url]', @@ -672,7 +672,7 @@ URL: [url]', 'include_documents' => 'Include documents', 'include_subdirectories' => 'Include subdirectories', 'indexing_tasks_in_queue' => 'Tarefas de indexação em fila', -'index_converters' => '', +'index_converters' => 'conversores de índice', 'index_done' => 'Finalizado', 'index_error' => 'Erro', 'index_folder' => 'Pasta Raiz', @@ -718,7 +718,7 @@ URL: [url]', 'january' => 'Janeiro', 'js_form_error' => 'O formulário ainda contém # erro.', 'js_form_errors' => 'O formulário ainda contém # erros.', -'js_invalid_email' => 'O endereço de email é inválido', +'js_invalid_email' => 'O endereço de e-mail é inválido', 'js_no_approval_group' => 'Por favor, selecione um grupo de aprovação', 'js_no_approval_status' => 'Por favor, selecione o estado de aprovação', 'js_no_comment' => 'não há comentário', @@ -756,7 +756,7 @@ URL: [url]', 'linked_to_document' => 'Vinculado ao documento', 'linked_to_this_version' => 'Vinculado a esta versão', 'link_alt_updatedocument' => 'Se você gostaria de fazer envio de arquivos maiores que o tamanho permitido, por favor use a página alternativa de envio.', -'link_document' => '', +'link_document' => 'documento de ligação', 'link_to_version' => 'Anexar à versão', 'list_access_rights' => 'Listar todos os direitos de acesso...', 'list_contains_no_access_docs' => 'A lista contém mais documentos aos quais você não tem acesso e não são exibidos.', @@ -767,7 +767,7 @@ URL: [url]', 'lock_document' => 'Travar', 'lock_message' => 'Este documento foi travado por [username]. Somente usuários autorizados podem remover a trava deste documento (veja no final da página).', 'lock_status' => 'Estado', -'logfile_loading' => '', +'logfile_loading' => 'Por favor, aguarde, até o arquivo de log ser carregado…', 'login' => 'Login', 'login_disabled_text' => 'Sua conta está desativada, provavelmente por causa de muitos logins falhos.', 'login_disabled_title' => 'Conta desativada', @@ -878,8 +878,8 @@ URL: [url]', 'no_action' => 'Nenhuma ação é requerida', 'no_approval_needed' => 'Nenhuma aprovação pendente.', 'no_attached_files' => 'Não há arquivos anexados', -'no_backup_dir' => 'Diretório de backup não foi configurado.', -'no_current_version' => 'Você está executando uma versão antiga do SeedDMS. A última versão disponível é [latestversion].', +'no_backup_dir' => 'Nenhum diretório de backup', +'no_current_version' => 'Você está executando uma versão atualizda do Sistema GED. A última versão disponível é [latestversion].', 'no_default_keywords' => 'não há palavras-chave disponíveis', 'no_docs_checked_out' => 'Nenhum documento retirado', 'no_docs_expired' => '', @@ -903,7 +903,7 @@ URL: [url]', 'no_revision_planed' => 'Nenhuma revisão do documento agendada.', 'no_update_cause_locked' => 'Por isso você não pode atualizar este documento. Por favor contacte usuário que poáui a trava.', 'no_user_image' => 'não foi encontrado imagem de perfil', -'no_version_check' => 'Verificação de uma nova versão do SeedDMS falhou! Isso pode ser causado por allow_url_fopen configurado para 0 na sua configuração do PHP.', +'no_version_check' => 'Verificação de uma nova versão do Sistema GED falhou! Isso pode ser causado por allow_url_fopen configurado para 0 na sua configuração do PHP.', 'no_version_modification' => 'Nenhuma modificação de versão', 'no_workflow_available' => 'Nenhum fluxo de trabalho disponível', 'objectcheck' => 'Verificação da Pasta/Documento', @@ -929,7 +929,7 @@ URL: [url]', 'password' => 'Senha', 'password_already_used' => 'Senha já usada', 'password_expiration' => 'Expiração de senha', -'password_expiration_text' => 'Sua senha expirou. Por favor, escolha uma nova antes que você possa proáeguir com SeedDMS.', +'password_expiration_text' => 'Sua senha expirou. Por favor, escolha uma nova antes que você possa proáeguir com Sistema GED.', 'password_expired' => 'Senha expirou', 'password_expires_in_days' => 'Senha expira em %s dias.', 'password_forgotten' => 'Esqueceu sua senha', @@ -978,27 +978,27 @@ Se você ainda tiver problemas para fazer o login, por favor, contate o administ 'quota_is_disabled' => 'Suporte a cota está desativado nas configurações. A definição de cota do usuário não terá efeito até que seja habilitada novamente.', 'quota_warning' => 'Seu uso máximo do disco foi ultrapassado em [bytes]. Por favor, remova documentos ou versões anteriores.', 'receipts_accepted' => '[no_receipts] recibos já aceitos', -'receipts_accepted_latest' => '', +'receipts_accepted_latest' => 'recibos aceites mais recentes', 'receipts_not_touched' => '[no_receipts] recibos não tocados', -'receipts_not_touched_latest' => '', +'receipts_not_touched_latest' => 'recibos não tocados mais recente', 'receipts_rejected' => '[no_receipts] recibos já rejeitados', -'receipts_rejected_latest' => '', +'receipts_rejected_latest' => 'Recibos rejeitados mais recente', 'receipts_without_group' => 'Recibos sem grupo', 'receipts_without_user' => 'Recibos sem usuário', 'receipt_deletion_email_body' => 'O usuário foi removido da lista de destinatários Documento: [name] -Versão: [versão] +Versão: [version] Pasta mãe: [folder_path] -Destinatário: [destinatário] -Usuário: [nome de usuário] +Destinatário: [recipient] +Usuário: [username] URL: [url]', 'receipt_deletion_email_subject' => '[sitename]: [name] - Destinatário removido', 'receipt_log' => 'Log de entrada', 'receipt_request_email_body' => 'Pedido de entrada Documento: [name] -Versão: [versão] +Versão: [version] Pasta mãe: [folder_path] -Usuário: [nome de usuário] +Usuário: [username] URL: [url]', 'receipt_request_email_subject' => '[sitename]: [name] - Pedido de entrada', 'receipt_status' => 'Estado', @@ -1038,12 +1038,12 @@ URL: [url]', 'repaired' => 'reparado', 'repairing_objects' => 'Reparando documentos e pastas', 'request_workflow_action_email_body' => 'O fluxo de trabalho atingiu um estado que requer sua ação. -Documento: [name]] -Versão: [versão] -Fluxo de trabalho: [fluxo de trabalho] +Documento: [name] +Versão: [version] +Fluxo de trabalho: [workflow] Estado atual: [current_state] Pasta mãe: [folder_path] -Usuário: [nome de usuário] +Usuário: [username] URL: [url]', 'request_workflow_action_email_subject' => '[sitename]: [name] - Ação de fluxo de trabalho requerida', 'reset_checkout' => 'Concluir retirada', @@ -1064,19 +1064,19 @@ URL: [url]', 'reviewer_already_assigned' => 'já está atribuído como avaliador', 'reviewer_already_removed' => 'já foi removido do processo de revisão ou já enviou um comentário', 'reviews_accepted' => '[no_reviews] avaliações já aceitas', -'reviews_accepted_latest' => '', +'reviews_accepted_latest' => 'Comentários aceitos...', 'reviews_not_touched' => '[no_reviews] avaliações não tocadas', -'reviews_not_touched_latest' => '', +'reviews_not_touched_latest' => 'comentários não tocados mais recente', 'reviews_rejected' => '[no_reviews] avaliações já rejeitadas', -'reviews_rejected_latest' => '', +'reviews_rejected_latest' => 'comentários rejeitados mais recente', 'reviews_without_group' => 'Avaliações sem grupo', 'reviews_without_user' => 'Avaliações sem usuário', 'review_deletion_email' => 'Pedido de revisão eliminado', 'review_deletion_email_body' => 'Solicitação de revisão excluída Documento: [name] -Versão: [versão] +Versão: [version] Pasta mãe: [folder_path] -Usuário: [nome de usuário] +Usuário: [username] URL: [url]', 'review_deletion_email_subject' => '[sitename]: [name] - Solicitação de revisão excluída', 'review_file' => 'Arquivo', @@ -1085,7 +1085,7 @@ URL: [url]', 'review_request_email' => 'Pedido de revisão', 'review_request_email_body' => 'Pedido de revisão Documento: [name] -Versão: [versão] +Versão: [version] Pasta mãe: [folder_path] Usuário: [username] URL: [url]', @@ -1105,13 +1105,13 @@ URL: [url]', 'revise_document' => 'Revisar documento', 'revise_document_on' => 'Próxima revisão da versão do documento em [date]', 'revisions_accepted' => '[no_revisions] revisões já aceitas', -'revisions_accepted_latest' => '', +'revisions_accepted_latest' => 'revisões aceitas mais recentes', 'revisions_not_touched' => '[no_revisions] revisões não sendo tocadas', -'revisions_not_touched_latest' => '', +'revisions_not_touched_latest' => 'revisões não tocadas mais recentes', 'revisions_pending' => '[no_revisions] revisões devidas no futuro', -'revisions_pending_latest' => '', +'revisions_pending_latest' => 'revisões pendentes mais recentes', 'revisions_rejected' => '[no_revisions] revisões já rejeitadas', -'revisions_rejected_latest' => '', +'revisions_rejected_latest' => 'revisões rejeitadas mais recente', 'revisions_without_group' => 'Revisões sem grupo', 'revisions_without_user' => 'Revisões sem usuário', 'revision_date' => 'Data da revisão', @@ -1124,8 +1124,8 @@ Usuário: [username] URL: [url]', 'revision_request_email_subject' => '[sitename]: [name] - solicitação de revisão', 'revision_status' => 'Estado', -'revision_submit_email_body' => '', -'revision_submit_email_subject' => '', +'revision_submit_email_body' => 'revisão enviar corpo do e-mail', +'revision_submit_email_subject' => 'Revisão enviar assunto de e-mail', 'revision_summary' => 'Resumo das revisões', 'revisors' => 'Revisores', 'revisor_already_assigned' => 'O usuário já está designado como revisor.', @@ -1155,7 +1155,7 @@ URL: [url]', 'rm_transmittal' => 'Por favor, confirme a exclusão da transmissão.', 'rm_transmittalitem' => 'Confirme a remoção', 'rm_user' => 'Remove este usuário', -'rm_user_from_processes' => '', +'rm_user_from_processes' => 'Remover usuário de processos', 'rm_version' => 'Remove versão', 'rm_workflow' => 'Retire do fluxo de trabalho', 'rm_workflow_action' => 'Remover Ação de Fluxo de Trabalho', @@ -1172,7 +1172,7 @@ URL: [url]', 'ro_RO' => 'Romeno', 'run_subworkflow' => 'Executar sub-fluxo de trabalho', 'run_subworkflow_email_body' => 'Sub-fluxo de trabalho foi iniciado -Documento: [nome] +Documento: [name] Versão: [version] Fluxo de Trabalho: [workflow] Sub-fluxo de trabalho: [subworkflow] @@ -1248,7 +1248,7 @@ Nome: [username] 'seq_end' => 'No final', 'seq_keep' => 'Manter posição', 'seq_start' => 'Primeira posição', -'sessions' => 'Usuários online', +'sessions' => 'Online', 'setDateFromFile' => 'Assumir a data do arquivo importado', 'setDateFromFolder' => 'Assumir a data da pasta importada', 'settings' => 'Configurações', @@ -1289,8 +1289,8 @@ Nome: [username] 'settings_convertToPdf_desc' => 'Se um documento não puder ser mostrado pelo navegador, uma versão em PDF será mostrada.', 'settings_cookieLifetime' => 'Tempo de Vida dos Cookies', 'settings_cookieLifetime_desc' => 'O tempo de vida de um cookie em segundos. Se definido como 0, o cookie será removido quando o navegador é fechado.', -'settings_coreDir' => 'Diretório Núcleo do SeedDMS', -'settings_coreDir_desc' => 'Caminho para SeedDMS_Core (opcional). Deixe em branco se você tiver instalado SeedDMS_Core em um lugar onde ele pode ser encontrado por PHP, por exemplo, Extra PHP Include-Path', +'settings_coreDir' => 'Diretório Núcleo do Sistema GED', +'settings_coreDir_desc' => 'Caminho para Sistema GED_Core (opcional). Deixe em branco se você tiver instalado Sistema GED_Core em um lugar onde ele pode ser encontrado por PHP, por exemplo, Extra PHP Include-Path', 'settings_createCheckOutDir' => 'Criar um diretório de retirada', 'settings_createCheckOutDir_desc' => 'Criar um diretório de retirada se não existir', 'settings_createdatabase' => 'Criar tabelas de banco de dados', @@ -1318,7 +1318,7 @@ Nome: [username] 'settings_defaultSearchMethod_desc' => 'Método de pesquisa padrão, quando uma pesquisa é iniciada pelo formulário de pesquisa no menu principal.', 'settings_defaultSearchMethod_valdatabase' => 'Banco de Dados', 'settings_defaultSearchMethod_valfulltext' => 'texto completo', -'settings_delete_install_folder' => 'Para utilizar SeedDMS, você deve excluir o arquivo ENABLE_INSTALL_TOOL do diretório de configuração', +'settings_delete_install_folder' => 'Para utilizar Sistema GED, você deve excluir o arquivo ENABLE_INSTALL_TOOL do diretório de configuração', 'settings_disableSelfEdit' => 'Desativar Auto Editar', 'settings_disableSelfEdit_desc' => 'Se selecionado o usuário não poderá editar seu próprio perfil', 'settings_disable_install' => 'Elimine o arquivo ENABLE_INSTALL_TOOL se possível', @@ -1330,8 +1330,8 @@ Nome: [username] 'settings_editOnlineFileTypes_desc' => 'Arquivos com as seguintes extensões podem ser editados online (use somente letras minúsculas)', 'settings_enable2FactorAuthentication' => 'Ativar autenticação de dois fatores', 'settings_enable2FactorAuthentication_desc' => 'Ativar/desativar a autenticação de 2 fatores. Os usuários precisarão do Google Authenticator em seu celular.', -'settings_enableAcknowledgeWorkflow' => '', -'settings_enableAcknowledgeWorkflow_desc' => '', +'settings_enableAcknowledgeWorkflow' => 'Configurações ativam Confirmar fluxo de trabalho', +'settings_enableAcknowledgeWorkflow_desc' => 'Configurações ativadas Reconhecer fluxo de trabalho decrescente', 'settings_enableAdminReceipt' => 'Permitir a recepção de documentos para administradores', 'settings_enableAdminReceipt_desc' => 'Ativar se você quiser que os administradores sejam listados como destinatários de documentos.', 'settings_enableAdminRevApp' => 'Permitir revisão/aprovação para administradores', @@ -1350,8 +1350,8 @@ Nome: [username] 'settings_enableDropUpload_desc' => 'Habilitar / Desabilitar a área na página \'Vista de Pastas\' para upload de arquivos por Arrastar e Soltar.', 'settings_enableDuplicateDocNames' => 'Permitir nomes duplicados de documento', 'settings_enableDuplicateDocNames_desc' => 'Permite ter nomes de documentos duplicados em uma pasta.', -'settings_enableDuplicateSubFolderNames' => 'Permitir subpastas com nomes duplicados', -'settings_enableDuplicateSubFolderNames_desc' => 'Permitir ocorrência de subpastas com nomes duplicados em uma pasta.', +'settings_enableDuplicateSubFolderNames' => 'Permitir nomes de subpastas duplicados', +'settings_enableDuplicateSubFolderNames_desc' => 'Permite ter nomes de subpastas duplicados em uma pasta.', 'settings_enableEmail' => 'Ativar E-mail', 'settings_enableEmail_desc' => 'Ativar/desativar a notificação de e-mail automático', 'settings_enableFilterReceipt' => 'Filtrar dono, revisor, ... da lista de recepção', @@ -1393,9 +1393,9 @@ Nome: [username] 'settings_enableRecursiveCount' => 'Ativar contagem de documentos/pasta recursiva', 'settings_enableRecursiveCount_desc' => 'Se estiver ativado, o número de documentos e pastas na exibição de pasta será determinada pela contagem de todos os objetos de forma recursiva proceáando as pastas e contando eáes documentos e pastas que o usuário tem permissão de acesso.', 'settings_enableRevisionOneVoteReject' => 'Rejeitar por um revisor', -'settings_enableRevisionOneVoteReject_desc' => 'Se habilitado, o status do documento vai ser configurado como \'precisa de correção\' até que o primeiro revisor rejeite o documento. se desabilitado, o status do documento não vai ser alterado até que todos os revisores terminem suas revisões.', -'settings_enableRevisionOnVoteReject' => '', -'settings_enableRevisionOnVoteReject_desc' => '', +'settings_enableRevisionOneVoteReject_desc' => 'Configurações ativam Revisão um voto rejeitar desc', +'settings_enableRevisionOnVoteReject' => 'Configurações ativam Revisão na rejeição de votação', +'settings_enableRevisionOnVoteReject_desc' => 'configurações ativam Revisão na votação rejeitar desc', 'settings_enableRevisionWorkflow' => 'Habilitar revisão de documentos', 'settings_enableRevisionWorkflow_desc' => 'Habilitar para poder executar o fluxo de trabalho para revisar um documento após um determinado período de tempo.', 'settings_enableSelfReceipt' => 'Permitir a recepção de documentos para usuário conectado', @@ -1444,7 +1444,7 @@ Nome: [username] 'settings_guestID' => 'ID convidado', 'settings_guestID_desc' => 'ID do usuário-convidado usada quando conectado como convidado (na maioria das vezes não há necessidade de mudar)', 'settings_httpRoot' => 'Raiz Http', -'settings_httpRoot_desc' => 'O caminho relativo na URL, após a parte do domínio. Não inclua o prefixo http:// ou o nome do host. por exemplo Se a URL completa é http://www.example.com/seeddms/, definir \'/seeddms/\'. Se a URL é http://www.example.com/, definir \'/\'', +'settings_httpRoot_desc' => 'O caminho relativo na URL, após a parte do domínio. Não inclua o prefixo http:// ou o nome do host. por exemplo Se a URL completa é http://www.example.com/Sistema GED/, definir \'/Sistema GED/\'. Se a URL é http://www.example.com/, definir \'/\'', 'settings_incItemsPerPage' => 'Número de entradas carregadas no final da página', 'settings_incItemsPerPage_desc' => 'Se o número de pastas e documentos for limitado, isso definirá o número de objetos carregados adicionalmente ao rolar para baixo até a parte inferior da página da pasta de visualização. Configurar para 0, carregará o mesmo número de objetos que foi carregado inicialmente.', 'settings_initialDocumentStatus' => 'Estado do documento inicial', @@ -1452,12 +1452,12 @@ Nome: [username] 'settings_initialDocumentStatus_draft' => 'Rascunho', 'settings_initialDocumentStatus_released' => 'liberada', 'settings_installADOdb' => 'Instalar ADOdb', -'settings_install_disabled' => 'O arquivo ENABLE_INSTALL_TOOL foi excluído. Agora você pode entrar em SeedDMS e fazer outras configurações.', +'settings_install_disabled' => 'O arquivo ENABLE_INSTALL_TOOL foi excluído. Agora você pode entrar em Sistema GED e fazer outras configurações.', 'settings_install_pear_package_log' => 'Instalar o Pacote pear \'Log\'', 'settings_install_pear_package_webdav' => 'Instale o pacote Pear \'HTTP_WebDAV_Server\', se você pretende usar a interface WebDAV', 'settings_install_success' => 'A instalação foi concluída com êxito.', -'settings_install_welcome_text' => '

    Antes de começar a instalar SeedDMS certifique-se de ter criado um arquivo \' ENABLE_INSTALL_TOOL \' em seu diretório de configuração , caso contrário, a instalação não vai funcionar. No Unix -System isto pode ser feito facilmente com \'touch conf/ENABLE_INSTALL_TOOL\' . Depois de ter terminado a instalação exclua o arquivo.

    SeedDMS tem exigências muito mínimas. Você vai precisar do apoio de um banco de dados mysql ou sqlite e um servidor web php habilitado . O pacote de pear Log tem que tanbém ser instalado. Para a pesquisa de texto completo Lucene , você também vai precisar do Zend Framework instalado no disco onde ele pode ser encontrado pelo php . Para o servidor WebDAV , você também vai precisar do HTTP_WebDAV_Server . O caminho para ele pode ser mais tarde definido durante a instalação .

    Se você quiser criar o banco de dados antes de iniciar a instalação , crie manualmente com sua ferramenta favorita , opcionalmente, crie um usuário de banco de dados com acesso ao banco de dados e importe um dos arquivos do banco de dados do diretório de configuração. O script de instalação pode também fazer Isso por você, mas ele vai precisar de acesso ao banco de dados com direitos suficientes para criar bancos de dados.

    ', -'settings_install_welcome_title' => 'Bem-vindo à instalação do SeedDMS', +'settings_install_welcome_text' => '

    Antes de começar a instalar Sistema GED certifique-se de ter criado um arquivo \' ENABLE_INSTALL_TOOL \' em seu diretório de configuração , caso contrário, a instalação não vai funcionar. No Unix -System isto pode ser feito facilmente com \'touch conf/ENABLE_INSTALL_TOOL\' . Depois de ter terminado a instalação exclua o arquivo.

    Sistema GED tem exigências muito mínimas. Você vai precisar do apoio de um banco de dados mysql ou sqlite e um servidor web php habilitado . O pacote de pear Log tem que tanbém ser instalado. Para a pesquisa de texto completo Lucene , você também vai precisar do Zend Framework instalado no disco onde ele pode ser encontrado pelo php . Para o servidor WebDAV , você também vai precisar do HTTP_WebDAV_Server . O caminho para ele pode ser mais tarde definido durante a instalação .

    Se você quiser criar o banco de dados antes de iniciar a instalação , crie manualmente com sua ferramenta favorita , opcionalmente, crie um usuário de banco de dados com acesso ao banco de dados e importe um dos arquivos do banco de dados do diretório de configuração. O script de instalação pode também fazer Isso por você, mas ele vai precisar de acesso ao banco de dados com direitos suficientes para criar bancos de dados.

    ', +'settings_install_welcome_title' => 'Bem-vindo à instalação do Sistema GED', 'settings_install_zendframework' => 'Instalar Zend Framework, se você pretende usar o motor de pesquisa de texto completo', 'settings_language' => 'Idioma padrão', 'settings_language_desc' => 'Idioma Padrão (nome de uma subpasta na pasta "languages")', @@ -1469,8 +1469,8 @@ Nome: [username] 'settings_logFileRotation_desc' => 'A rotação de arquivo de log', 'settings_loginFailure' => 'Falha de login', 'settings_loginFailure_desc' => 'Desativar conta após n falhas de login.', -'settings_luceneClassDir' => 'Diretório Lucene SeedDMS', -'settings_luceneClassDir_desc' => 'Caminho para SeedDMS_Lucene (opcional). Deixe em branco se você tiver instalado SeedDMS_Lucene em um lugar onde ele pode ser encontrado por PHP, por exemplo, PHP extras incluem-Path', +'settings_luceneClassDir' => 'Diretório Lucene Sistema GED', +'settings_luceneClassDir_desc' => 'Caminho para Sistema GED_Lucene (opcional). Deixe em branco se você tiver instalado Sistema GED_Lucene em um lugar onde ele pode ser encontrado por PHP, por exemplo, PHP extras incluem-Path', 'settings_luceneDir' => 'Diretório para o índice de texto completo', 'settings_luceneDir_desc' => 'Caminho para o índice Lucene', 'settings_maxDirID' => 'ID máxima de diretório', @@ -1486,16 +1486,16 @@ Nome: [username] 'settings_maxUploadSize' => 'Tamanho máximo para arquivos enviados.', 'settings_maxUploadSize_desc' => 'Esse é o tamanho máximo dos arquivos enviados. Ele terá efeito para versões de documentos e anexos.', 'settings_more_settings' => 'Configurar outras configurações. Login padrão: admin/admin', -'settings_noDocumentFormFields' => 'Ocultar estes campos', -'settings_noDocumentFormFields_desc' => 'Estes campo não serão mostrados quando adicionar ou editar um documento.Valores pré-existentes serão mantidos.', +'settings_noDocumentFormFields' => 'configurações sem campos de formulário de documento', +'settings_noDocumentFormFields_desc' => 'configurações sem campos de formulário de documento desc', 'settings_notfound' => 'Não encontrado', 'settings_Notification' => 'Configurações de notificação', 'settings_notwritable' => 'A configuração não pode ser salva porque o arquivo de configuração não é gravável.', 'settings_no_content_dir' => 'Diretório de conteúdo', -'settings_onePageMode' => 'Modo de página única', -'settings_onePageMode_desc' => 'O modo de página única vai habilitar um código javascript que vai atualizar a lista de pastas/documentos, navegação, etc. quando clicar em uma pasta ou alterar algum parâmetro de ordenação.', +'settings_onePageMode' => 'Modo de uma página', +'settings_onePageMode_desc' => 'O modo de uma página ativará o código javascript na página do ViewFolder, que atualiza a lista de pastas / documentos, navegação, etc. ao clicar em uma pasta ou alterar o parâmetro de classificação.', 'settings_overrideMimeType' => 'Substituir MimeType', -'settings_overrideMimeType_desc' => 'Substitua o MimeType entregue pelo navegador, se um arquivo for carregado. O novo MimeType é determinado pelo próprio SeedDMS.', +'settings_overrideMimeType_desc' => 'Substitua o MimeType entregue pelo navegador, se um arquivo for carregado. O novo MimeType é determinado pelo próprio Sistema GED.', 'settings_partitionSize' => 'Tamanho de arquivo parcial', 'settings_partitionSize_desc' => 'Tamanho dos arquivos parciais em bytes, enviados por jumploader. Não defina um valor maior do que o tamanho máximo de carregamento definido pelo servidor.', 'settings_passwordExpiration' => 'Expiração de senha', @@ -1527,12 +1527,12 @@ Nome: [username] 'settings_previewWidthMenuList_desc' => 'Largura das imagens de visualização mostradas como itens no menu da pasta suspensa.', 'settings_printDisclaimer' => 'Imprimir Responsabilidade', 'settings_printDisclaimer_desc' => 'Se ativado, a mensagem de aviso de responsabilidade será mostrada na parte inferior de todas as páginas.', -'settings_proxyUPassword' => '', -'settings_proxyUPassword_desc' => '', -'settings_proxyUrl' => '', -'settings_proxyUrl_desc' => '', -'settings_proxyUser' => '', -'settings_proxyUser_desc' => '', +'settings_proxyUPassword' => 'Senha para o Proxy', +'settings_proxyUPassword_desc' => 'Caso haja insira aqui a senha Proxy', +'settings_proxyUrl' => 'Endereço do Proxy', +'settings_proxyUrl_desc' => 'Insira um endereço do Proxy caso haja algum', +'settings_proxyUser' => 'Senha do Proxy', +'settings_proxyUser_desc' => 'Insira Senha usuário do Proxy', 'settings_quota' => 'Quota do Usuário', 'settings_quota_desc' => 'O número máximo de bytes que um utilizador pode usar no disco. Defina para 0 para o espaço em disco ilimitado. Este valor pode ser substituído para cada usuário em seu perfil.', 'settings_removeFromDropFolder' => 'Remover arquivo da pasta suspensa após o upload bem-sucedido', @@ -1542,7 +1542,7 @@ Nome: [username] 'settings_restricted' => 'acesso restrito', 'settings_restricted_desc' => 'Só permitir que os usuários façam login se eles têm uma entrada no banco de dados local (independentemente de autenticação bem-sucedida com LDAP)', 'settings_rootDir' => 'Diretório raiz', -'settings_rootDir_desc' => 'Caminho para onde está localizado o SeedDMS', +'settings_rootDir_desc' => 'Caminho para onde está localizado o Sistema GED', 'settings_rootFolderID' => 'ID da Pasta Raiz', 'settings_rootFolderID_desc' => 'ID da pasta-raiz (na maioria das vezes não precisa ser mudado)', 'settings_SaveError' => 'Erro no arquivo de configuração salvo', @@ -1557,7 +1557,7 @@ Nome: [username] 'settings_siteDefaultPage' => 'Página Padrão do Site', 'settings_siteDefaultPage_desc' => 'Página padrão no login. Se os padrões estiverem vazios para out/out.ViewFolder.php', 'settings_siteName' => 'Nome do Site', -'settings_siteName_desc' => 'Nome do Site usado nos títulos das páginas. Padrão: SeedDMS', +'settings_siteName_desc' => 'Nome do Site usado nos títulos das páginas. Padrão: Sistema GED', 'settings_SMTP' => 'Configurações do servidor SMTP', 'settings_smtpPassword' => 'Senha do servidor SMTP', 'settings_smtpPassword_desc' => 'Senha do servidor SMTP', @@ -1565,8 +1565,8 @@ Nome: [username] 'settings_smtpPort_desc' => 'Porta do Servidor SMTP, padrão 25', 'settings_smtpSendFrom' => 'Enviar a partir de', 'settings_smtpSendFrom_desc' => 'Enviar a partir de', -'settings_smtpSendTestMail' => 'Enviar email de teste', -'settings_smtpSendTestMail_desc' => 'Envia um email de teste, para verificar a configuração atual do email.', +'settings_smtpSendTestMail' => 'Enviar e-mail de teste', +'settings_smtpSendTestMail_desc' => 'Envia um e-mail de teste, para verificar a configuração atual do e-mail.', 'settings_smtpServer' => 'Hostname do servidor SMTP', 'settings_smtpServer_desc' => 'Hostname do servidor SMTP', 'settings_smtpUser' => 'Usuário do servidor SMTP', @@ -1627,16 +1627,16 @@ Nome: [username] 'set_workflow' => 'Definir fluxo de trabalho', 'show_extension_changelog' => 'Mostrar Changelog', 'show_extension_version_list' => 'Exibir Lista de Versões', -'signed_in_as' => 'Logado como', -'sign_in' => 'Entrar', +'signed_in_as' => 'Logado', +'sign_in' => 'Entre com seu usuário e senha', 'sign_out' => 'Sair', 'sign_out_user' => 'Sair usuário', 'site_brand' => '', 'sk_SK' => 'Eslovaco', -'sort_by_date' => 'Ordenar por Data', -'sort_by_name' => 'Ordenar por Nome', -'sort_by_sequence' => '', -'space_used_on_data_folder' => 'Space used on data folder', +'sort_by_date' => 'classificar por data', +'sort_by_name' => 'classificar por nome', +'sort_by_sequence' => 'classificar por sequencia', +'space_used_on_data_folder' => 'Espaço usado na pasta de dados', 'splash_added_to_clipboard' => 'Adicionado a área de transferência', 'splash_add_access' => 'Direito de acesso adicionado', 'splash_add_attribute' => 'Novo atributo adicionado', @@ -1675,7 +1675,7 @@ Nome: [username] 'splash_inherit_access' => 'O direito de acesso será herdado', 'splash_invalid_folder_id' => 'ID de pasta inválida', 'splash_invalid_searchterm' => 'Termo de pesquisa inválido', -'splash_link_document' => '', +'splash_link_document' => 'documento de link inicial', 'splash_moved_clipboard' => 'Área de transferência movida para a pasta corrente', 'splash_move_document' => 'Documento movido', 'splash_move_folder' => 'Pasta movida', @@ -1698,7 +1698,7 @@ Nome: [username] 'splash_rm_workflow_state' => 'Estado do fluxo de trabalho removido', 'splash_saved_file' => 'Versão salva', 'splash_save_user_data' => 'Dados do usuário salvos', -'splash_send_download_link' => 'Link de download enviado por email.', +'splash_send_download_link' => 'Link de download enviado por e-mail.', 'splash_send_login_data' => 'Dados de login enviados', 'splash_setowner' => 'Definir novo dono', 'splash_settings_saved' => 'Configurações salvas', @@ -1706,7 +1706,7 @@ Nome: [username] 'splash_substituted_user' => 'Usuário substituido', 'splash_switched_back_user' => 'Comutada de volta ao usuário original', 'splash_toogle_group_manager' => 'Gerente Grupo alternado', -'splash_transfer_content' => '', +'splash_transfer_content' => 'conteúdo de transferência inicial', 'splash_transfer_document' => 'Documento transferido', 'splash_transfer_objects' => 'Objetos transferidos', 'splash_trigger_workflow' => 'Acionada transição do fluxo de trabalho', @@ -1729,12 +1729,12 @@ Nome: [username] 'status_reviewer_removed' => 'Revisor removido do processo', 'status_revised' => 'revisado', 'status_revision_rejected' => 'Rejeitado', -'status_revision_sleeping' => 'pendente', +'status_revision_sleeping' => 'Pendente', 'status_revisor_removed' => 'Revisor removido da lista', 'status_unknown' => 'Desconhecido', 'storage_size' => 'Tamanho de armazenamento', -'subfolder_duplicate_name' => '', -'submit_2_fact_auth' => 'Salvar segredo', +'subfolder_duplicate_name' => 'nome duplicado da subpasta', +'submit_2_fact_auth' => 'Salvar senha', 'submit_approval' => 'Enviar aprovação', 'submit_login' => 'Entrar', 'submit_password' => 'Definir uma nova senha', @@ -1771,8 +1771,8 @@ Nome: [username] 'task_name' => 'Nome', 'task_next_run' => 'Próxima execução', 'temp_jscode' => 'Código javascript temporário', -'testmail_body' => 'Este e-mail é apenas para testar a configuração de email de SeedDMS', -'testmail_subject' => 'Teste de Email', +'testmail_body' => 'Este e-mail é apenas para testar a configuração de e-mail de Sistema GED', +'testmail_subject' => 'Teste de E-mail', 'theme' => 'Tema', 'thursday' => 'Quinta-feira', 'thursday_abbr' => 'Qi', @@ -1795,12 +1795,12 @@ Nome: [username] 'timeline_skip_status_change_3' => 'dentro do fluxo de trabalho', 'timeline_skip_status_change_4' => 'em revisão', 'timeline_skip_status_change_5' => 'rascunho', -'timeline_status_change' => 'Versão [versão]: [estado]', +'timeline_status_change' => 'Versão [version]: [status]', 'to' => 'Para', 'toggle_manager' => 'Alternar gerente', 'toggle_qrcode' => 'Mostrar / ocultar o código QR', 'to_before_from' => 'A data de término não pode ser anterior a data de início', -'transfer_content' => '', +'transfer_content' => 'Transferir conteúdo', 'transfer_document' => 'Transferir documento', 'transfer_no_read_access' => 'O usuário não possui acesso de leitura na pasta', 'transfer_no_write_access' => 'O usuário não possui acesso de escrita na pasta', @@ -1831,7 +1831,7 @@ URL: [url]', 'tr_TR' => 'Turco', 'tuesday' => 'Terça-feira', 'tuesday_abbr' => 'Te', -'type_of_hook' => '', +'type_of_hook' => 'tipo de gancho', 'type_to_filter' => '', 'type_to_search' => 'Tipo de pesquisa', 'uk_UA' => 'Ucraniano', @@ -1889,7 +1889,7 @@ URL: [url]', 'versioning_file_creation_warning' => 'Com esta operação, você pode criar um arquivo contendo as informações de versão de uma pasta DMS inteira. Após a criação, todos os arquivos serão salvos dentro da pasta do documento.', 'versioning_info' => 'Informação de versionamento', 'versiontolow' => 'Versão para baixo', -'version_comment' => 'Comentários da versão', +'version_comment' => 'Comentário da versão', 'version_deleted_email' => 'Versão eliminado', 'version_deleted_email_body' => 'Versão apagada Documento: [name] @@ -1900,7 +1900,7 @@ URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name] - Versão eliminada', 'version_info' => 'Informações da versão', 'view' => 'Visualizar', -'view_online' => 'Ver on-line', +'view_online' => 'Ver online', 'warning' => 'Aviso', 'wednesday' => 'Quarta-feira', 'wednesday_abbr' => 'Qa', @@ -1923,16 +1923,16 @@ URL: [url]', 'workflow_no_doc_released_state' => 'O documento não será liberado em um estado de fluxo de trabalho!', 'workflow_no_initial_state' => 'Nenhuma das transições começa com o estado inicial do fluxo de trabalho!', 'workflow_no_states' => 'Você deve primeiro definir estados de fluxo de trabalho, antes de adicionar um fluxo de trabalho.', -'workflow_save_layout' => '', +'workflow_save_layout' => 'layout de salvamento do fluxo de trabalho', 'workflow_state' => 'estado do fluxo de trabalho', 'workflow_states_management' => 'Gestão de fluxo de trabalho estados', 'workflow_state_docstatus' => 'Estado do documento', 'workflow_state_in_use' => 'Este estado está sendo usado por fluxos de trabalho.', 'workflow_state_name' => 'Nome', 'workflow_summary' => 'Sumário de fluxo de trabalho', -'workflow_transition_without_user_group' => '', +'workflow_transition_without_user_group' => 'transição do fluxo de trabalho sem grupo de usuários', 'workflow_user_summary' => 'Sumário de usuário', -'wrong_filetype' => '', +'wrong_filetype' => 'Tipo de arquivo errado', 'x_more_objects' => 'mais itens', 'year_view' => 'Visualização Anual', 'yes' => 'Sim', From 1544fa0a76592bf3db848d533a3292bef5b0b8e7 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 23 Apr 2020 21:46:46 +0200 Subject: [PATCH 078/137] =?UTF-8?q?various=20minor=20update=D1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- languages/ar_EG/lang.inc | 6 ++++++ languages/bg_BG/lang.inc | 6 ++++++ languages/ca_ES/lang.inc | 6 ++++++ languages/cs_CZ/lang.inc | 6 ++++++ languages/de_DE/lang.inc | 8 ++++++- languages/el_GR/lang.inc | 46 +++++++++++++++++++++++----------------- languages/en_GB/lang.inc | 8 ++++++- languages/es_ES/lang.inc | 10 +++++++-- languages/fr_FR/lang.inc | 6 ++++++ languages/hr_HR/lang.inc | 6 ++++++ languages/hu_HU/lang.inc | 6 ++++++ languages/it_IT/lang.inc | 10 +++++++-- languages/ko_KR/lang.inc | 6 ++++++ languages/lo_LA/lang.inc | 6 ++++++ languages/nb_NO/lang.inc | 10 +++++++-- languages/nl_NL/lang.inc | 20 +++++++++++------ languages/pl_PL/lang.inc | 6 ++++++ languages/pt_BR/lang.inc | 10 +++++++-- languages/ro_RO/lang.inc | 6 ++++++ languages/ru_RU/lang.inc | 10 +++++++-- languages/sk_SK/lang.inc | 6 ++++++ languages/sv_SE/lang.inc | 6 ++++++ languages/tr_TR/lang.inc | 6 ++++++ languages/uk_UA/lang.inc | 6 ++++++ languages/zh_CN/lang.inc | 6 ++++++ languages/zh_TW/lang.inc | 6 ++++++ 26 files changed, 195 insertions(+), 39 deletions(-) diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index 6588a6515..4a11c9490 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -1668,6 +1668,8 @@ URL: [url]', 'submit_review' => 'بدأ المراجعة', 'submit_revision' => 'تقديم مراجعة', 'submit_userinfo' => 'ادخال بيانات', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => 'تغذية الجدول الزمني', 'substitute_to_user' => 'بديلا للمستخدم', 'substitute_user' => 'استبدال المستخدم', @@ -1827,6 +1829,10 @@ URL: [url]', 'view' => 'اعرض', 'view_online' => 'شاهد اونلاين', 'warning' => 'تحذير', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'الاربعاء', 'wednesday_abbr' => 'ر', 'weeks' => 'اسابيع', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index f81037b52..98796f7c5 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -1531,6 +1531,8 @@ $text = array( 'submit_review' => 'Рецензирай', 'submit_revision' => '', 'submit_userinfo' => 'Изпрати информация за потребител', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => '', 'substitute_user' => 'Заместващ потребител', @@ -1676,6 +1678,10 @@ $text = array( 'view' => 'Преглед', 'view_online' => 'Преглед онлайн', 'warning' => 'Внимание', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'сряда', 'wednesday_abbr' => '', 'weeks' => 'седмици', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index cec069df4..35511e8e4 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -1536,6 +1536,8 @@ URL: [url]', 'submit_review' => 'Enviar revisiót', 'submit_revision' => '', 'submit_userinfo' => '', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => '', 'substitute_user' => 'Canviar usuari', @@ -1681,6 +1683,10 @@ URL: [url]', 'view' => '', 'view_online' => 'Veure online', 'warning' => 'Advertència', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Dimecres', 'wednesday_abbr' => '', 'weeks' => '', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index 145d22635..f6c90e5fb 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -1740,6 +1740,8 @@ Jméno: [username] 'submit_review' => 'Poslat k recenzi', 'submit_revision' => 'Přidat revizi', 'submit_userinfo' => 'Odeslat info', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => 'Odebírat zprávy z timeline', 'substitute_to_user' => 'Přepnout na \'[username]\'', 'substitute_user' => 'Zaměnit uživatele', @@ -1899,6 +1901,10 @@ URL: [url]', 'view' => 'Posouzení', 'view_online' => 'Zobrazit online', 'warning' => 'Upozornění', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Středa', 'wednesday_abbr' => 'St', 'weeks' => 'týdny', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index 7f3ed9781..e823dbd9a 100644 --- a/languages/de_DE/lang.inc +++ b/languages/de_DE/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (2764), dgrutsch (22) +// Translators: Admin (2765), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -1751,6 +1751,8 @@ Name: [username] 'submit_review' => 'Prüfung hinzufügen', 'submit_revision' => 'Wiederholungsprüfung hinzufügen', 'submit_userinfo' => 'Daten setzen', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => 'Verauf als RSS-Feed abonnieren', 'substitute_to_user' => 'Wechsel zu \'[username]\'', 'substitute_user' => 'Benutzer wechseln', @@ -1910,6 +1912,10 @@ URL: [url]', 'view' => 'Ansicht', 'view_online' => 'Online betrachten', 'warning' => 'Warnung', +'webauthn_auth' => 'WebAuthn Authentifizierung', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Mitwoch', 'wednesday_abbr' => 'Mi', 'weeks' => 'Wochen', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index e5592b97e..cc5eec81a 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (292) +// Translators: Admin (311) $text = array( '2_factor_auth' => '', @@ -53,7 +53,7 @@ $text = array( 'add_attrdefgroup' => '', 'add_document' => 'Νέο έγγραφο', 'add_document_link' => 'Προσθήκη σύνδεσης', -'add_document_notify' => '', +'add_document_notify' => 'Ανάθεση επισήμανσης', 'add_doc_reviewer_approver_warning' => '', 'add_doc_workflow_warning' => '', 'add_event' => '', @@ -248,7 +248,7 @@ $text = array( 'command' => '', 'comment' => 'Σχόλιο', 'comment_changed_email' => '', -'comment_for_current_version' => '', +'comment_for_current_version' => 'τρέχουσα έκδοση', 'configure_extension' => '', 'confirm_clear_cache' => '', 'confirm_create_fulltext_index' => '', @@ -366,7 +366,7 @@ $text = array( 'document_updated_email_subject' => '', 'does_not_expire' => '', 'does_not_inherit_access_msg' => '', -'download' => '', +'download' => 'Λήψη', 'download_extension' => '', 'download_header_approval_comment' => '', 'download_header_approval_date' => '', @@ -470,11 +470,11 @@ $text = array( 'expire_by_date' => '', 'expire_in_1d' => '', 'expire_in_1h' => '', -'expire_in_1m' => '', -'expire_in_1w' => '', -'expire_in_1y' => '', +'expire_in_1m' => 'Λήγει σε 1 μήνα', +'expire_in_1w' => 'Λήγει σε 1 εβδομάδα', +'expire_in_1y' => 'Λήγει σε 1 έτος', 'expire_in_2h' => '', -'expire_in_2y' => '', +'expire_in_2y' => 'Λήγει σε 2 έτη', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Η ημερομηνία λήξης έχει αλλάξει', @@ -580,7 +580,7 @@ $text = array( 'individuals' => 'Άτομα', 'individuals_in_groups' => '', 'info_recipients_tab_not_released' => '', -'inherited' => '', +'inherited' => 'Κληρονομημένο', 'inherits_access_copy_msg' => '', 'inherits_access_empty_msg' => '', 'inherits_access_msg' => '', @@ -656,7 +656,7 @@ $text = array( 'link_alt_updatedocument' => '', 'link_document' => '', 'link_to_version' => '', -'list_access_rights' => '', +'list_access_rights' => 'Εμφάνισε όλα τα δικαιώματα πρόσβασης', 'list_contains_no_access_docs' => '', 'list_hooks' => '', 'list_tasks' => '', @@ -763,7 +763,7 @@ URL: [url]', 'now' => 'τώρα', 'no_action' => '', 'no_approval_needed' => '', -'no_attached_files' => '', +'no_attached_files' => 'Δεν υπάρχουν επισυναπτόμενα αρχεία', 'no_backup_dir' => '', 'no_current_version' => '', 'no_default_keywords' => '', @@ -781,7 +781,7 @@ URL: [url]', 'no_fulltextindex' => '', 'no_groups' => '', 'no_group_members' => '', -'no_linked_files' => '', +'no_linked_files' => 'δεν υπάρχουν συνδεδεμένα αρχεία', 'no_previous_versions' => '', 'no_receipt_needed' => '', 'no_review_needed' => '', @@ -834,7 +834,7 @@ URL: [url]', 'pl_PL' => 'Πολωνικά', 'possible_substitutes' => '', 'preset_expires' => '', -'preview' => '', +'preview' => 'προεπισκόπηση', 'preview_converters' => '', 'preview_images' => '', 'preview_markdown' => '', @@ -1022,12 +1022,12 @@ URL: [url]', 'select_grp_ind_recipients' => '', 'select_grp_ind_reviewers' => '', 'select_grp_ind_revisors' => '', -'select_grp_notification' => '', +'select_grp_notification' => 'Κάντε κλικ για να επιλέξετε ομαδική επισήμανση', 'select_grp_recipients' => '', 'select_grp_reviewers' => '', 'select_grp_revisors' => '', 'select_ind_approvers' => '', -'select_ind_notification' => '', +'select_ind_notification' => 'Κάντε κλικ για να επιλέξετε ατομική επισήμανση', 'select_ind_recipients' => '', 'select_ind_reviewers' => '', 'select_ind_revisors' => '', @@ -1542,6 +1542,8 @@ URL: [url]', 'submit_review' => '', 'submit_revision' => '', 'submit_userinfo' => '', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => '', 'substitute_user' => 'Αντικατάσταση Χρήστη', @@ -1616,14 +1618,14 @@ URL: [url]', 'transmittal_comment' => '', 'transmittal_name' => '', 'transmittal_size' => '', -'tree_loading' => '', +'tree_loading' => 'Παρακαλώ περιμένετε όσο φορτώνεται το δέντρο των εγγράφων', 'trigger_workflow' => '', 'tr_TR' => 'Τούρκικα', 'tuesday' => 'Τρίτη', 'tuesday_abbr' => '', 'type_of_hook' => '', 'type_to_filter' => '', -'type_to_search' => '', +'type_to_search' => 'Πληκτρολόγησε για αναζήτηση', 'uk_UA' => 'Ουκρανικά', 'under_folder' => '', 'unknown_attrdef' => '', @@ -1643,7 +1645,7 @@ URL: [url]', 'unlock_document' => '', 'update' => 'Ενημέρωση', 'update_approvers' => '', -'update_document' => '', +'update_document' => 'Ενημέρωση εγγράφου', 'update_fulltext_index' => '', 'update_info' => '', 'update_locked_msg' => '', @@ -1651,7 +1653,7 @@ URL: [url]', 'update_reviewers' => '', 'update_revisors' => '', 'update_transmittalitem' => '', -'uploaded_by' => '', +'uploaded_by' => 'ανέβηκε από', 'uploading_failed' => '', 'uploading_maxsize' => '', 'uploading_zerosize' => '', @@ -1685,8 +1687,12 @@ URL: [url]', 'version_deleted_email_subject' => '', 'version_info' => 'Πληροφορίες έκδοσης', 'view' => '', -'view_online' => '', +'view_online' => 'προβολή online', 'warning' => 'Προειδοποίηση', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Τετάρτη', 'wednesday_abbr' => 'Τε', 'weeks' => 'εβδομάδες', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index f3101f11a..5afcc7c00 100644 --- a/languages/en_GB/lang.inc +++ b/languages/en_GB/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1865), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1871), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -1745,6 +1745,8 @@ Name: [username] 'submit_review' => 'Submit review', 'submit_revision' => 'Add Revision', 'submit_userinfo' => 'Submit info', +'submit_webauthn_login' => 'Login', +'submit_webauthn_register' => 'Register', 'subsribe_timelinefeed' => 'Subscribe to time line feed', 'substitute_to_user' => 'Switch to \'[username]\'', 'substitute_user' => 'Substitute User', @@ -1904,6 +1906,10 @@ URL: [url]', 'view' => 'View', 'view_online' => 'View online', 'warning' => 'Warning', +'webauthn_auth' => 'WebAuthn Authentification', +'webauthn_crossplatform_info' => 'Use cross-platform \'Yes\' when you have a removable device, like a Yubico key, which you would want to use to login on different computers; say \'No\' when your device is attached to the computer. The choice affects which device(s) are offered by the browser and/or computer security system.', +'webauthn_info' => 'WebAuthn is a password less authentification usind public key cryptography. A private-public keypair (known as a credential) is created for a website. The private key is stored securely on the user’s device; a public key and randomly generated credential ID is sent to the server for storage. The server can then use that public key to prove the user’s identity. The private key is usually stored on a hardware token. The token must be registered before it can be used for authentication.', +'webauth_crossplatform' => 'Crossplatform', 'wednesday' => 'Wednesday', 'wednesday_abbr' => 'We', 'weeks' => 'weeks', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index 5afdae8c7..5f357848e 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: acabello (20), Admin (1150), angel (123), francisco (2), jaimem (14) +// Translators: acabello (20), Admin (1151), angel (123), francisco (2), jaimem (14) $text = array( '2_factor_auth' => '', @@ -793,7 +793,7 @@ URL: [url]', 'my_documents' => 'Mis documentos', 'my_transmittals' => 'Mi transmision', 'name' => 'Nombre', -'nb_NO' => 'Noruego', +'nb_NO' => 'Noruego (Bokmål)', 'needs_correction' => '', 'needs_workflow_action' => 'Este documento requiere su atención. Por favor chequee la pestaña de flujo de trabajo.', 'network_drive' => '', @@ -1683,6 +1683,8 @@ URL: [url]', 'submit_review' => 'Enviar revisión', 'submit_revision' => '', 'submit_userinfo' => 'Enviar información', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => 'Cambiar a \'[username]\'', 'substitute_user' => 'Cambiar de usuario', @@ -1842,6 +1844,10 @@ URL: [url]', 'view' => 'Vista', 'view_online' => 'Ver online', 'warning' => 'Advertencia', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Miércoles', 'wednesday_abbr' => 'X', 'weeks' => 'semanas', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index 1a3986c95..c02f80626 100644 --- a/languages/fr_FR/lang.inc +++ b/languages/fr_FR/lang.inc @@ -1743,6 +1743,8 @@ Nom : [username] 'submit_review' => 'Soumettre la vérification', 'submit_revision' => 'Soumettre la révision', 'submit_userinfo' => 'Soumettre info', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => 'S’abonner au flux RSS', 'substitute_to_user' => 'Basculer sur \'[username]\'', 'substitute_user' => 'Utilisateur de substitution', @@ -1902,6 +1904,10 @@ URL: [url]', 'view' => 'Aperçu', 'view_online' => 'Aperçu en ligne', 'warning' => 'Avertissement', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Mercredi', 'wednesday_abbr' => 'Mer.', 'weeks' => 'semaines', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index f8bd0d6a7..38c802f41 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -1704,6 +1704,8 @@ Internet poveznica: [url]', 'submit_review' => 'Pošaljite ovjeru', 'submit_revision' => '', 'submit_userinfo' => 'Pošaljite info', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => 'Prebaci na \'[username]\'', 'substitute_user' => 'Zamjenski korisnik', @@ -1863,6 +1865,10 @@ Internet poveznica: [url]', 'view' => 'Pregled', 'view_online' => 'Online pregled', 'warning' => 'Upozorenje', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Srijeda', 'wednesday_abbr' => 'Sr', 'weeks' => 'tjedni', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index 94bfbba56..90326a8c9 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -1682,6 +1682,8 @@ URL: [url]', 'submit_review' => 'Felülvizsgálat küldése', 'submit_revision' => '', 'submit_userinfo' => 'Információ küldése', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => '', 'substitute_user' => 'Helyettesítő felhasználó', @@ -1841,6 +1843,10 @@ URL: [url]', 'view' => 'Nézet', 'view_online' => 'Online megtekintés', 'warning' => 'Figyelmeztetés', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Szerda', 'wednesday_abbr' => 'Sze', 'weeks' => 'hét', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index 0da771343..1aa3c42c8 100644 --- a/languages/it_IT/lang.inc +++ b/languages/it_IT/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (2019), rickr (144), s.pnt (26) +// Translators: Admin (2020), rickr (144), s.pnt (26) $text = array( '2_factor_auth' => 'Autorizzazione a due fattori', @@ -803,7 +803,7 @@ URL: [url]', 'my_documents' => 'Documenti personali', 'my_transmittals' => 'Mie trasmissioni', 'name' => 'Nome', -'nb_NO' => '', +'nb_NO' => 'Norvegese', 'needs_correction' => 'Necessita correzioni', 'needs_workflow_action' => 'Il documento richiede attenzione. Prego controllare il flusso di lavoro.', 'network_drive' => 'Network drive', @@ -1731,6 +1731,8 @@ Name: [username] 'submit_review' => 'Invio revisione', 'submit_revision' => 'Aggiungi riesame', 'submit_userinfo' => 'Invio info utente', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => 'Iscriviti al feed della linea temporale', 'substitute_to_user' => 'Cambia in \'[username]\'', 'substitute_user' => 'Impersona utente', @@ -1890,6 +1892,10 @@ URL: [url]', 'view' => 'Visualizza', 'view_online' => 'Visualizza on-line', 'warning' => 'Attenzione', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Mercoledì', 'wednesday_abbr' => 'Mer', 'weeks' => 'settimane', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index b8561220e..fb78321d2 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -1698,6 +1698,8 @@ URL : [url]', 'submit_review' => '리뷰 제출', 'submit_revision' => '리비전 더하기', 'submit_userinfo' => '정보 제출', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => '\'[username]\'로 전환', 'substitute_user' => '대체 사용자', @@ -1857,6 +1859,10 @@ URL : [url]', 'view' => '보기', 'view_online' => '온라인으로 보기', 'warning' => '경고', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => '수요일', 'wednesday_abbr' => '수', 'weeks' => '주', diff --git a/languages/lo_LA/lang.inc b/languages/lo_LA/lang.inc index 463ca348f..ae55181e3 100644 --- a/languages/lo_LA/lang.inc +++ b/languages/lo_LA/lang.inc @@ -1724,6 +1724,8 @@ URL: [url]', 'submit_review' => 'ສົ່ງຄວາມຄິດເຫັນ', 'submit_revision' => 'ເພີ່ມຄຳອະທິບາຍ', 'submit_userinfo' => 'ສົ່ງຂໍ້ມູນ', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => 'ຮັບສະໝັກຂໍ້ມູນຜິດເວລາ', 'substitute_to_user' => 'ປ່ຽນເປັນ "[username] "', 'substitute_user' => 'ຜູ້ໄຊ້ງານແທນ', @@ -1883,6 +1885,10 @@ URL: [url]', 'view' => 'ດູ', 'view_online' => 'ດູອອນລາຍ', 'warning' => 'ການເຕືອນ', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'ວັນພຸດ', 'wednesday_abbr' => 'ພວກເຮົາ', 'weeks' => 'ອາທິດທີຜ່ານມາ', diff --git a/languages/nb_NO/lang.inc b/languages/nb_NO/lang.inc index 719b1b807..07dbf3ab5 100644 --- a/languages/nb_NO/lang.inc +++ b/languages/nb_NO/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1728) +// Translators: Admin (1729) $text = array( '2_factor_auth' => '2-trinns autentisering', @@ -817,7 +817,7 @@ URL: [url]', 'my_documents' => 'Mine dokumenter', 'my_transmittals' => 'Mine sendinger', 'name' => 'Navn', -'nb_NO' => '', +'nb_NO' => 'Norsk (Bokmål)', 'needs_correction' => 'Trenger korrigering', 'needs_workflow_action' => 'Dette dokumentet krever oppmerksomhet. Kontroller arbeidsflytfanen.', 'network_drive' => 'Nettverksstasjon', @@ -1737,6 +1737,8 @@ Bruker: [username] 'submit_review' => 'Send inn anmeldelse', 'submit_revision' => 'Legg til revisjon', 'submit_userinfo' => 'Send info', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => 'Abonner på tidslinjeskift', 'substitute_to_user' => 'Bytt til \'[username]\'', 'substitute_user' => 'Bytt bruker', @@ -1896,6 +1898,10 @@ URL: [url]', 'view' => 'Vis', 'view_online' => 'Vis på nett', 'warning' => 'Advarsel', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Onsdag', 'wednesday_abbr' => 'On', 'weeks' => 'uker', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index 907e4b415..86f12a25b 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (772), gijsbertush (651), pepijn (45), reinoutdijkstra@hotmail.com (270) +// Translators: Admin (778), gijsbertush (651), pepijn (45), reinoutdijkstra@hotmail.com (270) $text = array( '2_factor_auth' => '2-factor-authenticatie', @@ -342,11 +342,11 @@ URL: [url]', 'documents_to_review' => 'Documenten die wachten op uw controle', 'documents_to_revise' => 'Te reviseren documenten', 'documents_to_trigger_workflow' => '', -'documents_user_draft' => '', -'documents_user_expiration' => '', -'documents_user_needs_correction' => '', -'documents_user_no_reception' => '', -'documents_user_obsolete' => '', +'documents_user_draft' => 'Concepten', +'documents_user_expiration' => 'Verlopen documenten', +'documents_user_needs_correction' => 'Documenten die verbeterd dienen te worden.', +'documents_user_no_reception' => 'Documenten zonder ontvangst', +'documents_user_obsolete' => 'Documenten buiten gebruik', 'documents_user_reception' => 'Documenten wachten op bestemming', 'documents_user_rejected' => 'documenten niet geaccepteerd door gebruiker', 'documents_user_requiring_attention' => 'Eigen documenten die (nog) aandacht behoeven', @@ -791,7 +791,7 @@ URL: [url]', 'my_documents' => 'Mijn Documenten', 'my_transmittals' => 'Mijn zendingen', 'name' => 'Naam', -'nb_NO' => '', +'nb_NO' => 'Noorweegs', 'needs_correction' => '', 'needs_workflow_action' => 'Dit document vereist uw aandacht. Bekijk deze onder het tabblad workflows.', 'network_drive' => 'Networkdrive', @@ -1721,6 +1721,8 @@ Name: [username] 'submit_review' => 'Verzend Beoordeling', 'submit_revision' => 'Herziening verzenden', 'submit_userinfo' => 'Wijzigingen opslaan', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => 'Subscribe to timeline feed', 'substitute_to_user' => 'Switch naar \'[username]\'', 'substitute_user' => 'Invaller/ vervanger Gebruiker', @@ -1880,6 +1882,10 @@ URL: [url]', 'view' => 'Bekijk', 'view_online' => 'Bekijk online', 'warning' => 'Waarschuwing', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Woensdag', 'wednesday_abbr' => 'Woe', 'weeks' => 'Weken', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index d30978e51..afb7b95a5 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -1662,6 +1662,8 @@ URL: [url]', 'submit_review' => 'Zatwierdź recenzję', 'submit_revision' => '', 'submit_userinfo' => 'Zatwierdź dane', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => '', 'substitute_user' => 'Zastępca użytkownika', @@ -1821,6 +1823,10 @@ URL: [url]', 'view' => 'Widok', 'view_online' => 'Obejrzyj online', 'warning' => 'Ostrzeżenie', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Środa', 'wednesday_abbr' => 'Śr', 'weeks' => 'tygodni', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index 80a93945e..50e149806 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1840), flaviove (627), lfcristofoli (352) +// Translators: Admin (1841), flaviove (627), lfcristofoli (352) $text = array( '2_factor_auth' => 'Autenticação de dois fatores', @@ -329,7 +329,7 @@ URL: [url]', 'details' => 'Detalhes', 'details_version' => 'Detalhes para a versão: [version]', 'de_DE' => 'Alemão', -'disclaimer' => '
    Esta é uma área restrita, o acesso é permitido apenas ao pessoal autorizado. Qualquer violação será tratado de acordo com as normas internas e leis vigentes.
    ', +'disclaimer' => 'Esta é uma área restrita, o acesso é permitido apenas ao pessoal autorizado. Qualquer violação será tratado de acordo com as normas internas e leis vigentes.', 'discspace' => 'Espaço em Disco', 'docs_in_reception_no_access' => 'Documentos com recepção sem acesso pelo destinatário', 'docs_in_revision_no_access' => 'Documentos em revisão sem acesso por revisor', @@ -1743,6 +1743,8 @@ Nome: [username] 'submit_review' => 'Enviar revisão', 'submit_revision' => 'Adicionar revisão', 'submit_userinfo' => 'Submeter informação', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => 'Inscrever-se no feed de linha do tempo', 'substitute_to_user' => 'Mudar para \'[username]\'', 'substitute_user' => 'Substituto do usuário', @@ -1902,6 +1904,10 @@ URL: [url]', 'view' => 'Visualizar', 'view_online' => 'Ver online', 'warning' => 'Aviso', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Quarta-feira', 'wednesday_abbr' => 'Qa', 'weeks' => 'semanas', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index 4c9a6fec8..be6d9d98a 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -1705,6 +1705,8 @@ URL: [url]', 'submit_review' => 'Trimite revizuire', 'submit_revision' => '', 'submit_userinfo' => 'Trimite informații', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => '', 'substitute_user' => 'Substituie Utilizator', @@ -1864,6 +1866,10 @@ URL: [url]', 'view' => 'Vizualizare', 'view_online' => 'Vizualizare online', 'warning' => 'Avertisment', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Miercuri', 'wednesday_abbr' => 'Mi', 'weeks' => 'săptămâni', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index b056e2c6f..67a762ac4 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1677) +// Translators: Admin (1678) $text = array( '2_factor_auth' => 'Двухфакторная аутентификация', @@ -798,7 +798,7 @@ URL: [url]', 'my_documents' => 'Мои документы', 'my_transmittals' => 'Мои пересылки', 'name' => 'Имя', -'nb_NO' => '', +'nb_NO' => 'Норвежский', 'needs_correction' => '', 'needs_workflow_action' => 'Этот документ требует вашего внимания. См. вкладку «Процесс».', 'network_drive' => 'Сетевой диск', @@ -1712,6 +1712,8 @@ URL: [url]', 'submit_review' => 'Рецензировать', 'submit_revision' => '', 'submit_userinfo' => 'Отправить информацию', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => 'Переключиться на \'[username]\'', 'substitute_user' => 'Переключиться', @@ -1871,6 +1873,10 @@ URL: [url]', 'view' => 'Просмотр', 'view_online' => 'Просмотреть', 'warning' => 'Внимание', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Среда', 'wednesday_abbr' => 'Ср', 'weeks' => 'недели', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index cbae592be..e1f00607b 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -1745,6 +1745,8 @@ Meno: [username] 'submit_review' => 'Poslať recenziu', 'submit_revision' => 'Add Revision', 'submit_userinfo' => 'Submit info', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => 'Subscribe to time line feed', 'substitute_to_user' => 'Prepnúť do \'[username]\'', 'substitute_user' => 'Nahradiť používateľa', @@ -1904,6 +1906,10 @@ URL: [url]', 'view' => 'Zobraziť', 'view_online' => 'Zobraziť online', 'warning' => 'Upozornenie', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Streda', 'wednesday_abbr' => 'St', 'weeks' => 'týždne', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index 3a450221c..fb92b16d4 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -1718,6 +1718,8 @@ Kommentar: [comment]', 'submit_review' => 'Skicka granskning', 'submit_revision' => 'Lägg till revidering', 'submit_userinfo' => 'Skicka info', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => 'Prenumerera på tidslinje', 'substitute_to_user' => 'Byt till \'[username]\'', 'substitute_user' => 'Byt användare', @@ -1877,6 +1879,10 @@ URL: [url]', 'view' => 'Vy', 'view_online' => 'Visa online', 'warning' => 'Varning', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Onsdag', 'wednesday_abbr' => 'On', 'weeks' => 'veckor', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index ec81d5931..3a1836370 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -1684,6 +1684,8 @@ URL: [url]', 'submit_review' => 'Kabul et', 'submit_revision' => '', 'submit_userinfo' => 'Bilgi gönder', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => '', 'substitute_user' => 'Kullanıcının Yerine Geç', @@ -1843,6 +1845,10 @@ URL: [url]', 'view' => 'Görüntüle', 'view_online' => 'Online görüntüle', 'warning' => 'Dikkat', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Çarşamba', 'wednesday_abbr' => 'Ça', 'weeks' => 'hafta', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index cd61a57fe..e14462605 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -1705,6 +1705,8 @@ URL: [url]', 'submit_review' => 'Рецензувати', 'submit_revision' => '', 'submit_userinfo' => 'Відправити інформацію', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => 'Перемикнутися на \'[username]\'', 'substitute_user' => 'Перемикнутися', @@ -1864,6 +1866,10 @@ URL: [url]', 'view' => 'Перегляд', 'view_online' => 'Переглянути', 'warning' => 'Увага', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Середа', 'wednesday_abbr' => 'Ср', 'weeks' => 'тижні', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index 41b20f74d..b04c861ed 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/lang.inc @@ -1680,6 +1680,8 @@ URL: [url]', 'submit_review' => '提交校对', 'submit_revision' => '添加修订', 'submit_userinfo' => '提交信息', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '订阅时间线更新', 'substitute_to_user' => '切换到 \'[username]\' 账户', 'substitute_user' => '代理人', @@ -1830,6 +1832,10 @@ URL: [url]', 'view' => '查看', 'view_online' => '在线浏览', 'warning' => '警告', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Wednesday', 'wednesday_abbr' => '', 'weeks' => '周', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index e7d70b117..19e361749 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/lang.inc @@ -1535,6 +1535,8 @@ URL: [url]', 'submit_review' => '提交校對', 'submit_revision' => '', 'submit_userinfo' => '', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => '', 'substitute_user' => '代理人', @@ -1680,6 +1682,10 @@ URL: [url]', 'view' => '檢視', 'view_online' => '線上流覽', 'warning' => '警告', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Wednesday', 'wednesday_abbr' => '', 'weeks' => '', From 3aec4761c921c79b7c60ee1c5aeead3ce85fa14b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 4 May 2020 14:04:30 +0200 Subject: [PATCH 079/137] start new version 5.1.17 --- inc/inc.Version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/inc.Version.php b/inc/inc.Version.php index f04d14174..d564f80df 100644 --- a/inc/inc.Version.php +++ b/inc/inc.Version.php @@ -20,7 +20,7 @@ class SeedDMS_Version { /* {{{ */ - const _number = "5.1.16"; + const _number = "5.1.17"; const _string = "SeedDMS"; function __construct() { From d6ff82ccb881256941583f273d03019e075b56a0 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 7 May 2020 06:49:38 +0200 Subject: [PATCH 080/137] form name can be passed to printFineUploaderJs() --- views/bootstrap/class.Bootstrap.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 569e5d2c8..463f1481a 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -2718,7 +2718,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) * @param integer $maxfiles maximum number of files allowed to upload * @param array $fields list of post fields */ - function printFineUploaderJs($uploadurl, $partsize=0, $maxuploadsize=0, $multiple=true, $prefix='userfile') { /* {{{ */ + function printFineUploaderJs($uploadurl, $partsize=0, $maxuploadsize=0, $multiple=true, $prefix='userfile', $formname='form1') { /* {{{ */ ?> $(document).ready(function() { uploader = new qq.FineUploader({ @@ -2757,7 +2757,7 @@ $(document).ready(function() { $('#-fine-uploader-names').val(names.join(';')); /* Run upload only if all files could be uploaded */ if(succeeded.length > 0 && failed.length == 0) - document.getElementById('form1').submit(); + document.getElementById('').submit(); }, onError: function(id, name, reason, xhr) { noty({ From cd075863e96cecc7c40c956e1d5fddb2a5bcc12f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 7 May 2020 07:06:54 +0200 Subject: [PATCH 081/137] new version 5.16.1 of fineuploader --- styles/bootstrap/fine-uploader/LICENSE | 2 + styles/bootstrap/fine-uploader/dnd.js | 43 +- styles/bootstrap/fine-uploader/dnd.js.map | 2 +- styles/bootstrap/fine-uploader/dnd.min.js | 4 +- styles/bootstrap/fine-uploader/dnd.min.js.map | 2 +- .../fine-uploader-gallery.min.css | 2 +- .../fine-uploader-gallery.min.css.map | 2 +- .../fine-uploader/fine-uploader-new.min.css | 2 +- .../fine-uploader-new.min.css.map | 2 +- .../fine-uploader/fine-uploader.core.js | 544 +++++++++++----- .../fine-uploader/fine-uploader.core.js.map | 2 +- .../fine-uploader/fine-uploader.core.min.js | 10 +- .../fine-uploader.core.min.js.map | 2 +- .../bootstrap/fine-uploader/fine-uploader.js | 593 +++++++++++++----- .../fine-uploader/fine-uploader.js.map | 2 +- .../fine-uploader/fine-uploader.min.css | 2 +- .../fine-uploader/fine-uploader.min.css.map | 2 +- .../fine-uploader/fine-uploader.min.js | 12 +- .../fine-uploader/fine-uploader.min.js.map | 2 +- .../fine-uploader/jquery.fine-uploader.js | 591 ++++++++++++----- .../fine-uploader/jquery.fine-uploader.js.map | 2 +- .../fine-uploader/jquery.fine-uploader.min.js | 12 +- .../jquery.fine-uploader.min.js.map | 2 +- 23 files changed, 1321 insertions(+), 518 deletions(-) diff --git a/styles/bootstrap/fine-uploader/LICENSE b/styles/bootstrap/fine-uploader/LICENSE index 3814391a3..070caa60c 100644 --- a/styles/bootstrap/fine-uploader/LICENSE +++ b/styles/bootstrap/fine-uploader/LICENSE @@ -1,5 +1,7 @@ The MIT License (MIT) +Copyright (c) 2010-2012, Andrew Valums +Copyright (c) 2012-2013, Andrew Valums and Raymond S. Nicholus, III Copyright (c) 2013-present, Widen Enterprises, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/styles/bootstrap/fine-uploader/dnd.js b/styles/bootstrap/fine-uploader/dnd.js index 100061705..4beb73676 100644 --- a/styles/bootstrap/fine-uploader/dnd.js +++ b/styles/bootstrap/fine-uploader/dnd.js @@ -1,4 +1,4 @@ -// Fine Uploader 5.12.0 - (c) 2013-present Widen Enterprises, Inc. MIT licensed. http://fineuploader.com +// Fine Uploader 5.16.2 - MIT licensed. http://fineuploader.com (function(global) { var qq = function(element) { "use strict"; @@ -578,7 +578,7 @@ global.qq = qq; } })(); - qq.version = "5.12.0"; + qq.version = "5.16.2"; qq.supportedFeatures = function() { "use strict"; var supportsUploading, supportsUploadingBlobs, supportsFileDrop, supportsAjaxFileUploading, supportsFolderDrop, supportsChunking, supportsResume, supportsUploadViaPaste, supportsUploadCors, supportsDeleteFileXdr, supportsDeleteFileCorsXhr, supportsDeleteFileCors, supportsFolderSelection, supportsImagePreviews, supportsUploadProgress; @@ -596,9 +596,6 @@ } return supported; } - function isChrome21OrHigher() { - return (qq.chrome() || qq.opera()) && navigator.userAgent.match(/Chrome\/[2][1-9]|Chrome\/[3-9][0-9]/) !== undefined; - } function isChrome14OrHigher() { return (qq.chrome() || qq.opera()) && navigator.userAgent.match(/Chrome\/[1][4-9]|Chrome\/[2-9][0-9]/) !== undefined; } @@ -636,7 +633,11 @@ supportsAjaxFileUploading = supportsUploading && qq.isXhrUploadSupported(); supportsUploadingBlobs = supportsAjaxFileUploading && !qq.androidStock(); supportsFileDrop = supportsAjaxFileUploading && isDragAndDropSupported(); - supportsFolderDrop = supportsFileDrop && isChrome21OrHigher(); + supportsFolderDrop = supportsFileDrop && function() { + var input = document.createElement("input"); + input.type = "file"; + return !!("webkitdirectory" in (input || document.querySelectorAll("input[type=file]")[0])); + }(); supportsChunking = supportsAjaxFileUploading && qq.isFileChunkingSupported(); supportsResume = supportsAjaxFileUploading && supportsChunking && isLocalStorageSupported(); supportsUploadViaPaste = supportsAjaxFileUploading && isChrome14OrHigher(); @@ -765,12 +766,7 @@ var parseEntryPromise = new qq.Promise(); if (entry.isFile) { entry.file(function(file) { - var name = entry.name, fullPath = entry.fullPath, indexOfNameInFullPath = fullPath.indexOf(name); - fullPath = fullPath.substr(0, indexOfNameInFullPath); - if (fullPath.charAt(0) === "/") { - fullPath = fullPath.substr(1); - } - file.qqPath = fullPath; + file.qqPath = extractDirectoryPath(entry); droppedFiles.push(file); parseEntryPromise.success(); }, function(fileError) { @@ -798,6 +794,14 @@ } return parseEntryPromise; } + function extractDirectoryPath(entry) { + var name = entry.name, fullPath = entry.fullPath, indexOfNameInFullPath = fullPath.lastIndexOf(name); + fullPath = fullPath.substr(0, indexOfNameInFullPath); + if (fullPath.charAt(0) === "/") { + fullPath = fullPath.substr(1); + } + return fullPath; + } function getFilesInDirectory(entry, reader, accumEntries, existingPromise) { var promise = existingPromise || new qq.Promise(), dirReader = reader || entry.createReader(); dirReader.readEntries(function readSuccess(entries) { @@ -885,9 +889,6 @@ return fileDrag; } function leavingDocumentOut(e) { - if (qq.firefox()) { - return !e.relatedTarget; - } if (qq.safari()) { return e.x < 0 || e.y < 0; } @@ -927,8 +928,10 @@ maybeHideDropZones(); }); disposeSupport.attach(document, "drop", function(e) { - e.preventDefault(); - maybeHideDropZones(); + if (isFileDrag(e)) { + e.preventDefault(); + maybeHideDropZones(); + } }); disposeSupport.attach(document, HIDE_ZONES_EVENT_NAME, maybeHideDropZones); } @@ -953,6 +956,8 @@ }); } }); + this._testing = {}; + this._testing.extractDirectoryPath = extractDirectoryPath; }; qq.DragAndDrop.callbacks = function() { "use strict"; @@ -1005,7 +1010,7 @@ } var effectTest, dt = e.dataTransfer, isSafari = qq.safari(); effectTest = qq.ie() && qq.supportedFeatures.fileDrop ? true : dt.effectAllowed !== "none"; - return dt && effectTest && (dt.files || !isSafari && dt.types.contains && dt.types.contains("Files")); + return dt && effectTest && (dt.files && dt.files.length || !isSafari && dt.types.contains && dt.types.contains("Files") || dt.types.includes && dt.types.includes("Files")); } function isOrSetDropDisabled(isDisabled) { if (isDisabled !== undefined) { @@ -1088,6 +1093,8 @@ return element; } }); + this._testing = {}; + this._testing.isValidFileDrag = isValidFileDrag; }; })(window); //# sourceMappingURL=dnd.js.map \ No newline at end of file diff --git a/styles/bootstrap/fine-uploader/dnd.js.map b/styles/bootstrap/fine-uploader/dnd.js.map index dce774d90..853391d84 100644 --- a/styles/bootstrap/fine-uploader/dnd.js.map +++ b/styles/bootstrap/fine-uploader/dnd.js.map @@ -1 +1 @@ -{"version":3,"sources":["?","../client/js/util.js","../client/js/export.js","../client/js/version.js","../client/js/features.js","../client/js/promise.js","../client/js/dnd.js"],"names":["global","qq","element","hide","style","display","this","attach","type","fn","addEventListener","attachEvent","detach","removeEventListener","detachEvent","contains","descendant","compareDocumentPosition","insertBefore","elementB","parentNode","remove","removeChild","css","styles","Error","opacity","filter","Math","round","extend","hasClass","name","considerParent","re","RegExp","test","className","addClass","removeClass","replace","getByClass","first","candidates","result","querySelector","querySelectorAll","getElementsByTagName","each","idx","val","push","getFirstByClass","children","child","firstChild","nodeType","nextSibling","setText","text","innerText","textContent","clearText","hasAttribute","attrName","attrVal","exec","getAttribute","undefined","canvasToBlob","canvas","mime","quality","dataUriToBlob","toDataURL","dataUri","arrayBuffer","byteString","createBlob","data","BlobBuilder","window","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","blobBuilder","append","getBlob","Blob","intArray","mimeString","split","indexOf","atob","decodeURI","ArrayBuffer","length","Uint8Array","character","charCodeAt","log","message","level","console","isObject","variable","Object","prototype","toString","call","isFunction","isArray","value","buffer","constructor","isItemList","maybeItemList","isNodeList","maybeNodeList","item","namedItem","isString","maybeString","trimStr","string","String","trim","format","str","args","Array","slice","arguments","newStr","nextIdxToReplace","strBefore","substring","strAfter","isFile","maybeFile","File","isFileList","maybeFileList","FileList","isFileOrInput","maybeFileOrInput","isInput","maybeInput","notFile","evaluateType","normalizedType","toLowerCase","HTMLInputElement","tagName","isBlob","maybeBlob","isXhrUploadSupported","input","document","createElement","multiple","FormData","createXhrInstance","upload","XMLHttpRequest","ActiveXObject","error","isFolderDropSupported","dataTransfer","items","webkitGetAsEntry","isFileChunkingSupported","androidStock","webkitSlice","mozSlice","sliceBlob","fileOrBlob","start","end","slicer","arrayBufferToHex","bytesAsHex","bytes","byt","byteAsHexStr","readBlobToHex","blob","startOffset","initialBlob","fileReader","FileReader","promise","Promise","onload","success","onerror","failure","readAsArrayBuffer","second","extendNested","prop","override","target","sourceFn","super_","source","srcPropName","srcPropVal","arr","elt","from","len","hasOwnProperty","getUniqueId","c","r","random","v","ie","navigator","userAgent","ie7","ie8","ie10","ie11","edge","safari","vendor","chrome","opera","firefox","windows","platform","android","ios6","ios","ios7","ios8","ios800","iosChrome","iosSafari","iosSafariWebView","preventDefault","e","returnValue","toElement","div","html","innerHTML","iterableItem","callback","keyOrIndex","retVal","Storage","key","getItem","charAt","bind","oldFunc","context","newArgs","concat","apply","obj2url","obj","temp","prefixDone","uristrings","prefix","add","nextObj","i","nextTemp","encodeURIComponent","join","obj2FormData","formData","arrayKeyName","obj2Inputs","form","setAttribute","appendChild","parseJson","json","JSON","parse","eval","getExtension","filename","extIdx","lastIndexOf","substr","getFilename","blobOrFileInput","fileName","DisposeSupport","disposers","dispose","disposer","shift","addDisposer","disposeFunction","define","amd","module","exports","version","supportedFeatures","supportsUploading","supportsUploadingBlobs","supportsFileDrop","supportsAjaxFileUploading","supportsFolderDrop","supportsChunking","supportsResume","supportsUploadViaPaste","supportsUploadCors","supportsDeleteFileXdr","supportsDeleteFileCorsXhr","supportsDeleteFileCors","supportsFolderSelection","supportsImagePreviews","supportsUploadProgress","testSupportsFileInputElement","supported","tempInput","disabled","ex","isChrome21OrHigher","match","isChrome14OrHigher","isCrossOriginXhrSupported","xhr","withCredentials","isXdrSupported","XDomainRequest","isCrossOriginAjaxSupported","isFolderSelectionSupported","webkitdirectory","isLocalStorageSupported","localStorage","setItem","isDragAndDropSupported","span","postMessage","ajaxUploading","blobUploading","canDetermineSize","chunking","deleteFileCors","deleteFileCorsXdr","deleteFileCorsXhr","dialogElement","HTMLDialogElement","fileDrop","folderDrop","folderSelection","imagePreviews","imageValidation","itemSizeValidation","pause","progressBar","resume","scaling","tiffPreviews","unlimitedScaledImageSize","uploading","uploadCors","uploadCustomHeaders","uploadNonMultipart","uploadViaPaste","isGenericPromise","maybePromise","then","successArgs","failureArgs","successCallbacks","failureCallbacks","doneCallbacks","state","onSuccess","onFailure","done","DragAndDrop","o","options","HIDE_ZONES_EVENT_NAME","HIDE_BEFORE_ENTER_ATTR","uploadDropZones","droppedFiles","disposeSupport","dropZoneElements","allowMultipleItems","classes","dropActive","callbacks","uploadDroppedFiles","files","uploadDropZone","filesAsArray","dropLog","dropDisabled","processingDroppedFilesComplete","getElement","traverseFileTree","entry","parseEntryPromise","file","fullPath","indexOfNameInFullPath","qqPath","fileError","code","isDirectory","getFilesInDirectory","allEntriesRead","entries","entriesLeft","readFailure","reader","accumEntries","existingPromise","dirReader","createReader","readEntries","readSuccess","newEntries","setTimeout","handleDataTransfer","pendingFolderPromises","handleDataTransferPromise","processingDroppedFiles","dropError","getAsFile","pop","setupDropzone","dropArea","dropZone","UploadDropZone","onEnter","stopPropagation","onLeaveNotDescendants","onDrop","isFileDrag","dragEvent","fileDrag","types","leavingDocumentOut","relatedTarget","x","y","setupDragDrop","dropZones","maybeHideDropZones","HTMLElement","setupExtraDropzone","removeDropzone","dzs","splice","targetEl","errorSpecifics","preventDrop","dropOutsideDisabled","onLeave","dragoverShouldBeCanceled","disableDropOutside","dropEffect","isValidFileDrag","effectTest","dt","isSafari","effectAllowed","isOrSetDropDisabled","isDisabled","triggerHidezonesEvent","hideZonesEvent","triggerUsingOldApi","createEvent","initEvent","CustomEvent","err","dispatchEvent","attachEvents","effect","elementFromPoint","clientX","clientY"],"mappings":"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","file":"dnd.js","sourcesContent":[null,"/*globals window, navigator, document, FormData, File, HTMLInputElement, XMLHttpRequest, Blob, Storage, ActiveXObject */\n/* jshint -W079 */\nvar qq = function(element) {\n \"use strict\";\n\n return {\n hide: function() {\n element.style.display = \"none\";\n return this;\n },\n\n /** Returns the function which detaches attached event */\n attach: function(type, fn) {\n if (element.addEventListener) {\n element.addEventListener(type, fn, false);\n } else if (element.attachEvent) {\n element.attachEvent(\"on\" + type, fn);\n }\n return function() {\n qq(element).detach(type, fn);\n };\n },\n\n detach: function(type, fn) {\n if (element.removeEventListener) {\n element.removeEventListener(type, fn, false);\n } else if (element.attachEvent) {\n element.detachEvent(\"on\" + type, fn);\n }\n return this;\n },\n\n contains: function(descendant) {\n // The [W3C spec](http://www.w3.org/TR/domcore/#dom-node-contains)\n // says a `null` (or ostensibly `undefined`) parameter\n // passed into `Node.contains` should result in a false return value.\n // IE7 throws an exception if the parameter is `undefined` though.\n if (!descendant) {\n return false;\n }\n\n // compareposition returns false in this case\n if (element === descendant) {\n return true;\n }\n\n if (element.contains) {\n return element.contains(descendant);\n } else {\n /*jslint bitwise: true*/\n return !!(descendant.compareDocumentPosition(element) & 8);\n }\n },\n\n /**\n * Insert this element before elementB.\n */\n insertBefore: function(elementB) {\n elementB.parentNode.insertBefore(element, elementB);\n return this;\n },\n\n remove: function() {\n element.parentNode.removeChild(element);\n return this;\n },\n\n /**\n * Sets styles for an element.\n * Fixes opacity in IE6-8.\n */\n css: function(styles) {\n /*jshint eqnull: true*/\n if (element.style == null) {\n throw new qq.Error(\"Can't apply style to node as it is not on the HTMLElement prototype chain!\");\n }\n\n /*jshint -W116*/\n if (styles.opacity != null) {\n if (typeof element.style.opacity !== \"string\" && typeof (element.filters) !== \"undefined\") {\n styles.filter = \"alpha(opacity=\" + Math.round(100 * styles.opacity) + \")\";\n }\n }\n qq.extend(element.style, styles);\n\n return this;\n },\n\n hasClass: function(name, considerParent) {\n var re = new RegExp(\"(^| )\" + name + \"( |$)\");\n return re.test(element.className) || !!(considerParent && re.test(element.parentNode.className));\n },\n\n addClass: function(name) {\n if (!qq(element).hasClass(name)) {\n element.className += \" \" + name;\n }\n return this;\n },\n\n removeClass: function(name) {\n var re = new RegExp(\"(^| )\" + name + \"( |$)\");\n element.className = element.className.replace(re, \" \").replace(/^\\s+|\\s+$/g, \"\");\n return this;\n },\n\n getByClass: function(className, first) {\n var candidates,\n result = [];\n\n if (first && element.querySelector) {\n return element.querySelector(\".\" + className);\n }\n else if (element.querySelectorAll) {\n return element.querySelectorAll(\".\" + className);\n }\n\n candidates = element.getElementsByTagName(\"*\");\n\n qq.each(candidates, function(idx, val) {\n if (qq(val).hasClass(className)) {\n result.push(val);\n }\n });\n return first ? result[0] : result;\n },\n\n getFirstByClass: function(className) {\n return qq(element).getByClass(className, true);\n },\n\n children: function() {\n var children = [],\n child = element.firstChild;\n\n while (child) {\n if (child.nodeType === 1) {\n children.push(child);\n }\n child = child.nextSibling;\n }\n\n return children;\n },\n\n setText: function(text) {\n element.innerText = text;\n element.textContent = text;\n return this;\n },\n\n clearText: function() {\n return qq(element).setText(\"\");\n },\n\n // Returns true if the attribute exists on the element\n // AND the value of the attribute is NOT \"false\" (case-insensitive)\n hasAttribute: function(attrName) {\n var attrVal;\n\n if (element.hasAttribute) {\n\n if (!element.hasAttribute(attrName)) {\n return false;\n }\n\n /*jshint -W116*/\n return (/^false$/i).exec(element.getAttribute(attrName)) == null;\n }\n else {\n attrVal = element[attrName];\n\n if (attrVal === undefined) {\n return false;\n }\n\n /*jshint -W116*/\n return (/^false$/i).exec(attrVal) == null;\n }\n }\n };\n};\n\n(function() {\n \"use strict\";\n\n qq.canvasToBlob = function(canvas, mime, quality) {\n return qq.dataUriToBlob(canvas.toDataURL(mime, quality));\n };\n\n qq.dataUriToBlob = function(dataUri) {\n var arrayBuffer, byteString,\n createBlob = function(data, mime) {\n var BlobBuilder = window.BlobBuilder ||\n window.WebKitBlobBuilder ||\n window.MozBlobBuilder ||\n window.MSBlobBuilder,\n blobBuilder = BlobBuilder && new BlobBuilder();\n\n if (blobBuilder) {\n blobBuilder.append(data);\n return blobBuilder.getBlob(mime);\n }\n else {\n return new Blob([data], {type: mime});\n }\n },\n intArray, mimeString;\n\n // convert base64 to raw binary data held in a string\n if (dataUri.split(\",\")[0].indexOf(\"base64\") >= 0) {\n byteString = atob(dataUri.split(\",\")[1]);\n }\n else {\n byteString = decodeURI(dataUri.split(\",\")[1]);\n }\n\n // extract the MIME\n mimeString = dataUri.split(\",\")[0]\n .split(\":\")[1]\n .split(\";\")[0];\n\n // write the bytes of the binary string to an ArrayBuffer\n arrayBuffer = new ArrayBuffer(byteString.length);\n intArray = new Uint8Array(arrayBuffer);\n qq.each(byteString, function(idx, character) {\n intArray[idx] = character.charCodeAt(0);\n });\n\n return createBlob(arrayBuffer, mimeString);\n };\n\n qq.log = function(message, level) {\n if (window.console) {\n if (!level || level === \"info\") {\n window.console.log(message);\n }\n else\n {\n if (window.console[level]) {\n window.console[level](message);\n }\n else {\n window.console.log(\"<\" + level + \"> \" + message);\n }\n }\n }\n };\n\n qq.isObject = function(variable) {\n return variable && !variable.nodeType && Object.prototype.toString.call(variable) === \"[object Object]\";\n };\n\n qq.isFunction = function(variable) {\n return typeof (variable) === \"function\";\n };\n\n /**\n * Check the type of a value. Is it an \"array\"?\n *\n * @param value value to test.\n * @returns true if the value is an array or associated with an `ArrayBuffer`\n */\n qq.isArray = function(value) {\n return Object.prototype.toString.call(value) === \"[object Array]\" ||\n (value && window.ArrayBuffer && value.buffer && value.buffer.constructor === ArrayBuffer);\n };\n\n // Looks for an object on a `DataTransfer` object that is associated with drop events when utilizing the Filesystem API.\n qq.isItemList = function(maybeItemList) {\n return Object.prototype.toString.call(maybeItemList) === \"[object DataTransferItemList]\";\n };\n\n // Looks for an object on a `NodeList` or an `HTMLCollection`|`HTMLFormElement`|`HTMLSelectElement`\n // object that is associated with collections of Nodes.\n qq.isNodeList = function(maybeNodeList) {\n return Object.prototype.toString.call(maybeNodeList) === \"[object NodeList]\" ||\n // If `HTMLCollection` is the actual type of the object, we must determine this\n // by checking for expected properties/methods on the object\n (maybeNodeList.item && maybeNodeList.namedItem);\n };\n\n qq.isString = function(maybeString) {\n return Object.prototype.toString.call(maybeString) === \"[object String]\";\n };\n\n qq.trimStr = function(string) {\n if (String.prototype.trim) {\n return string.trim();\n }\n\n return string.replace(/^\\s+|\\s+$/g, \"\");\n };\n\n /**\n * @param str String to format.\n * @returns {string} A string, swapping argument values with the associated occurrence of {} in the passed string.\n */\n qq.format = function(str) {\n\n var args = Array.prototype.slice.call(arguments, 1),\n newStr = str,\n nextIdxToReplace = newStr.indexOf(\"{}\");\n\n qq.each(args, function(idx, val) {\n var strBefore = newStr.substring(0, nextIdxToReplace),\n strAfter = newStr.substring(nextIdxToReplace + 2);\n\n newStr = strBefore + val + strAfter;\n nextIdxToReplace = newStr.indexOf(\"{}\", nextIdxToReplace + val.length);\n\n // End the loop if we have run out of tokens (when the arguments exceed the # of tokens)\n if (nextIdxToReplace < 0) {\n return false;\n }\n });\n\n return newStr;\n };\n\n qq.isFile = function(maybeFile) {\n return window.File && Object.prototype.toString.call(maybeFile) === \"[object File]\";\n };\n\n qq.isFileList = function(maybeFileList) {\n return window.FileList && Object.prototype.toString.call(maybeFileList) === \"[object FileList]\";\n };\n\n qq.isFileOrInput = function(maybeFileOrInput) {\n return qq.isFile(maybeFileOrInput) || qq.isInput(maybeFileOrInput);\n };\n\n qq.isInput = function(maybeInput, notFile) {\n var evaluateType = function(type) {\n var normalizedType = type.toLowerCase();\n\n if (notFile) {\n return normalizedType !== \"file\";\n }\n\n return normalizedType === \"file\";\n };\n\n if (window.HTMLInputElement) {\n if (Object.prototype.toString.call(maybeInput) === \"[object HTMLInputElement]\") {\n if (maybeInput.type && evaluateType(maybeInput.type)) {\n return true;\n }\n }\n }\n if (maybeInput.tagName) {\n if (maybeInput.tagName.toLowerCase() === \"input\") {\n if (maybeInput.type && evaluateType(maybeInput.type)) {\n return true;\n }\n }\n }\n\n return false;\n };\n\n qq.isBlob = function(maybeBlob) {\n if (window.Blob && Object.prototype.toString.call(maybeBlob) === \"[object Blob]\") {\n return true;\n }\n };\n\n qq.isXhrUploadSupported = function() {\n var input = document.createElement(\"input\");\n input.type = \"file\";\n\n return (\n input.multiple !== undefined &&\n typeof File !== \"undefined\" &&\n typeof FormData !== \"undefined\" &&\n typeof (qq.createXhrInstance()).upload !== \"undefined\");\n };\n\n // Fall back to ActiveX is native XHR is disabled (possible in any version of IE).\n qq.createXhrInstance = function() {\n if (window.XMLHttpRequest) {\n return new XMLHttpRequest();\n }\n\n try {\n return new ActiveXObject(\"MSXML2.XMLHTTP.3.0\");\n }\n catch (error) {\n qq.log(\"Neither XHR or ActiveX are supported!\", \"error\");\n return null;\n }\n };\n\n qq.isFolderDropSupported = function(dataTransfer) {\n return dataTransfer.items &&\n dataTransfer.items.length > 0 &&\n dataTransfer.items[0].webkitGetAsEntry;\n };\n\n qq.isFileChunkingSupported = function() {\n return !qq.androidStock() && //Android's stock browser cannot upload Blobs correctly\n qq.isXhrUploadSupported() &&\n (File.prototype.slice !== undefined || File.prototype.webkitSlice !== undefined || File.prototype.mozSlice !== undefined);\n };\n\n qq.sliceBlob = function(fileOrBlob, start, end) {\n var slicer = fileOrBlob.slice || fileOrBlob.mozSlice || fileOrBlob.webkitSlice;\n\n return slicer.call(fileOrBlob, start, end);\n };\n\n qq.arrayBufferToHex = function(buffer) {\n var bytesAsHex = \"\",\n bytes = new Uint8Array(buffer);\n\n qq.each(bytes, function(idx, byt) {\n var byteAsHexStr = byt.toString(16);\n\n if (byteAsHexStr.length < 2) {\n byteAsHexStr = \"0\" + byteAsHexStr;\n }\n\n bytesAsHex += byteAsHexStr;\n });\n\n return bytesAsHex;\n };\n\n qq.readBlobToHex = function(blob, startOffset, length) {\n var initialBlob = qq.sliceBlob(blob, startOffset, startOffset + length),\n fileReader = new FileReader(),\n promise = new qq.Promise();\n\n fileReader.onload = function() {\n promise.success(qq.arrayBufferToHex(fileReader.result));\n };\n\n fileReader.onerror = promise.failure;\n\n fileReader.readAsArrayBuffer(initialBlob);\n\n return promise;\n };\n\n qq.extend = function(first, second, extendNested) {\n qq.each(second, function(prop, val) {\n if (extendNested && qq.isObject(val)) {\n if (first[prop] === undefined) {\n first[prop] = {};\n }\n qq.extend(first[prop], val, true);\n }\n else {\n first[prop] = val;\n }\n });\n\n return first;\n };\n\n /**\n * Allow properties in one object to override properties in another,\n * keeping track of the original values from the target object.\n *\n * Note that the pre-overriden properties to be overriden by the source will be passed into the `sourceFn` when it is invoked.\n *\n * @param target Update properties in this object from some source\n * @param sourceFn A function that, when invoked, will return properties that will replace properties with the same name in the target.\n * @returns {object} The target object\n */\n qq.override = function(target, sourceFn) {\n var super_ = {},\n source = sourceFn(super_);\n\n qq.each(source, function(srcPropName, srcPropVal) {\n if (target[srcPropName] !== undefined) {\n super_[srcPropName] = target[srcPropName];\n }\n\n target[srcPropName] = srcPropVal;\n });\n\n return target;\n };\n\n /**\n * Searches for a given element (elt) in the array, returns -1 if it is not present.\n */\n qq.indexOf = function(arr, elt, from) {\n if (arr.indexOf) {\n return arr.indexOf(elt, from);\n }\n\n from = from || 0;\n var len = arr.length;\n\n if (from < 0) {\n from += len;\n }\n\n for (; from < len; from += 1) {\n if (arr.hasOwnProperty(from) && arr[from] === elt) {\n return from;\n }\n }\n return -1;\n };\n\n //this is a version 4 UUID\n qq.getUniqueId = function() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n /*jslint eqeq: true, bitwise: true*/\n var r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n\n //\n // Browsers and platforms detection\n qq.ie = function() {\n return navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.userAgent.indexOf(\"Trident\") !== -1;\n };\n\n qq.ie7 = function() {\n return navigator.userAgent.indexOf(\"MSIE 7\") !== -1;\n };\n\n qq.ie8 = function() {\n return navigator.userAgent.indexOf(\"MSIE 8\") !== -1;\n };\n\n qq.ie10 = function() {\n return navigator.userAgent.indexOf(\"MSIE 10\") !== -1;\n };\n\n qq.ie11 = function() {\n return qq.ie() && navigator.userAgent.indexOf(\"rv:11\") !== -1;\n };\n\n qq.edge = function() {\n return navigator.userAgent.indexOf(\"Edge\") >= 0;\n };\n\n qq.safari = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Apple\") !== -1;\n };\n\n qq.chrome = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Google\") !== -1;\n };\n\n qq.opera = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Opera\") !== -1;\n };\n\n qq.firefox = function() {\n return (!qq.edge() && !qq.ie11() && navigator.userAgent.indexOf(\"Mozilla\") !== -1 && navigator.vendor !== undefined && navigator.vendor === \"\");\n };\n\n qq.windows = function() {\n return navigator.platform === \"Win32\";\n };\n\n qq.android = function() {\n return navigator.userAgent.toLowerCase().indexOf(\"android\") !== -1;\n };\n\n // We need to identify the Android stock browser via the UA string to work around various bugs in this browser,\n // such as the one that prevents a `Blob` from being uploaded.\n qq.androidStock = function() {\n return qq.android() && navigator.userAgent.toLowerCase().indexOf(\"chrome\") < 0;\n };\n\n qq.ios6 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 6_\") !== -1;\n };\n\n qq.ios7 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 7_\") !== -1;\n };\n\n qq.ios8 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 8_\") !== -1;\n };\n\n // iOS 8.0.0\n qq.ios800 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 8_0 \") !== -1;\n };\n\n qq.ios = function() {\n /*jshint -W014 */\n return navigator.userAgent.indexOf(\"iPad\") !== -1\n || navigator.userAgent.indexOf(\"iPod\") !== -1\n || navigator.userAgent.indexOf(\"iPhone\") !== -1;\n };\n\n qq.iosChrome = function() {\n return qq.ios() && navigator.userAgent.indexOf(\"CriOS\") !== -1;\n };\n\n qq.iosSafari = function() {\n return qq.ios() && !qq.iosChrome() && navigator.userAgent.indexOf(\"Safari\") !== -1;\n };\n\n qq.iosSafariWebView = function() {\n return qq.ios() && !qq.iosChrome() && !qq.iosSafari();\n };\n\n //\n // Events\n\n qq.preventDefault = function(e) {\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n };\n\n /**\n * Creates and returns element from html string\n * Uses innerHTML to create an element\n */\n qq.toElement = (function() {\n var div = document.createElement(\"div\");\n return function(html) {\n div.innerHTML = html;\n var element = div.firstChild;\n div.removeChild(element);\n return element;\n };\n }());\n\n //key and value are passed to callback for each entry in the iterable item\n qq.each = function(iterableItem, callback) {\n var keyOrIndex, retVal;\n\n if (iterableItem) {\n // Iterate through [`Storage`](http://www.w3.org/TR/webstorage/#the-storage-interface) items\n if (window.Storage && iterableItem.constructor === window.Storage) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(iterableItem.key(keyOrIndex), iterableItem.getItem(iterableItem.key(keyOrIndex)));\n if (retVal === false) {\n break;\n }\n }\n }\n // `DataTransferItemList` & `NodeList` objects are array-like and should be treated as arrays\n // when iterating over items inside the object.\n else if (qq.isArray(iterableItem) || qq.isItemList(iterableItem) || qq.isNodeList(iterableItem)) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n if (retVal === false) {\n break;\n }\n }\n }\n else if (qq.isString(iterableItem)) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(keyOrIndex, iterableItem.charAt(keyOrIndex));\n if (retVal === false) {\n break;\n }\n }\n }\n else {\n for (keyOrIndex in iterableItem) {\n if (Object.prototype.hasOwnProperty.call(iterableItem, keyOrIndex)) {\n retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n if (retVal === false) {\n break;\n }\n }\n }\n }\n }\n };\n\n //include any args that should be passed to the new function after the context arg\n qq.bind = function(oldFunc, context) {\n if (qq.isFunction(oldFunc)) {\n var args = Array.prototype.slice.call(arguments, 2);\n\n return function() {\n var newArgs = qq.extend([], args);\n if (arguments.length) {\n newArgs = newArgs.concat(Array.prototype.slice.call(arguments));\n }\n return oldFunc.apply(context, newArgs);\n };\n }\n\n throw new Error(\"first parameter must be a function!\");\n };\n\n /**\n * obj2url() takes a json-object as argument and generates\n * a querystring. pretty much like jQuery.param()\n *\n * how to use:\n *\n * `qq.obj2url({a:'b',c:'d'},'http://any.url/upload?otherParam=value');`\n *\n * will result in:\n *\n * `http://any.url/upload?otherParam=value&a=b&c=d`\n *\n * @param Object JSON-Object\n * @param String current querystring-part\n * @return String encoded querystring\n */\n qq.obj2url = function(obj, temp, prefixDone) {\n /*jshint laxbreak: true*/\n var uristrings = [],\n prefix = \"&\",\n add = function(nextObj, i) {\n var nextTemp = temp\n ? (/\\[\\]$/.test(temp)) // prevent double-encoding\n ? temp\n : temp + \"[\" + i + \"]\"\n : i;\n if ((nextTemp !== \"undefined\") && (i !== \"undefined\")) {\n uristrings.push(\n (typeof nextObj === \"object\")\n ? qq.obj2url(nextObj, nextTemp, true)\n : (Object.prototype.toString.call(nextObj) === \"[object Function]\")\n ? encodeURIComponent(nextTemp) + \"=\" + encodeURIComponent(nextObj())\n : encodeURIComponent(nextTemp) + \"=\" + encodeURIComponent(nextObj)\n );\n }\n };\n\n if (!prefixDone && temp) {\n prefix = (/\\?/.test(temp)) ? (/\\?$/.test(temp)) ? \"\" : \"&\" : \"?\";\n uristrings.push(temp);\n uristrings.push(qq.obj2url(obj));\n } else if ((Object.prototype.toString.call(obj) === \"[object Array]\") && (typeof obj !== \"undefined\")) {\n qq.each(obj, function(idx, val) {\n add(val, idx);\n });\n } else if ((typeof obj !== \"undefined\") && (obj !== null) && (typeof obj === \"object\")) {\n qq.each(obj, function(prop, val) {\n add(val, prop);\n });\n } else {\n uristrings.push(encodeURIComponent(temp) + \"=\" + encodeURIComponent(obj));\n }\n\n if (temp) {\n return uristrings.join(prefix);\n } else {\n return uristrings.join(prefix)\n .replace(/^&/, \"\")\n .replace(/%20/g, \"+\");\n }\n };\n\n qq.obj2FormData = function(obj, formData, arrayKeyName) {\n if (!formData) {\n formData = new FormData();\n }\n\n qq.each(obj, function(key, val) {\n key = arrayKeyName ? arrayKeyName + \"[\" + key + \"]\" : key;\n\n if (qq.isObject(val)) {\n qq.obj2FormData(val, formData, key);\n }\n else if (qq.isFunction(val)) {\n formData.append(key, val());\n }\n else {\n formData.append(key, val);\n }\n });\n\n return formData;\n };\n\n qq.obj2Inputs = function(obj, form) {\n var input;\n\n if (!form) {\n form = document.createElement(\"form\");\n }\n\n qq.obj2FormData(obj, {\n append: function(key, val) {\n input = document.createElement(\"input\");\n input.setAttribute(\"name\", key);\n input.setAttribute(\"value\", val);\n form.appendChild(input);\n }\n });\n\n return form;\n };\n\n /**\n * Not recommended for use outside of Fine Uploader since this falls back to an unchecked eval if JSON.parse is not\n * implemented. For a more secure JSON.parse polyfill, use Douglas Crockford's json2.js.\n */\n qq.parseJson = function(json) {\n /*jshint evil: true*/\n if (window.JSON && qq.isFunction(JSON.parse)) {\n return JSON.parse(json);\n } else {\n return eval(\"(\" + json + \")\");\n }\n };\n\n /**\n * Retrieve the extension of a file, if it exists.\n *\n * @param filename\n * @returns {string || undefined}\n */\n qq.getExtension = function(filename) {\n var extIdx = filename.lastIndexOf(\".\") + 1;\n\n if (extIdx > 0) {\n return filename.substr(extIdx, filename.length - extIdx);\n }\n };\n\n qq.getFilename = function(blobOrFileInput) {\n /*jslint regexp: true*/\n\n if (qq.isInput(blobOrFileInput)) {\n // get input value and remove path to normalize\n return blobOrFileInput.value.replace(/.*(\\/|\\\\)/, \"\");\n }\n else if (qq.isFile(blobOrFileInput)) {\n if (blobOrFileInput.fileName !== null && blobOrFileInput.fileName !== undefined) {\n return blobOrFileInput.fileName;\n }\n }\n\n return blobOrFileInput.name;\n };\n\n /**\n * A generic module which supports object disposing in dispose() method.\n * */\n qq.DisposeSupport = function() {\n var disposers = [];\n\n return {\n /** Run all registered disposers */\n dispose: function() {\n var disposer;\n do {\n disposer = disposers.shift();\n if (disposer) {\n disposer();\n }\n }\n while (disposer);\n },\n\n /** Attach event handler and register de-attacher as a disposer */\n attach: function() {\n var args = arguments;\n /*jslint undef:true*/\n this.addDisposer(qq(args[0]).attach.apply(this, Array.prototype.slice.call(arguments, 1)));\n },\n\n /** Add disposer to the collection */\n addDisposer: function(disposeFunction) {\n disposers.push(disposeFunction);\n }\n };\n };\n}());\n","/* globals define, module, global, qq */\n(function() {\n \"use strict\";\n if (typeof define === \"function\" && define.amd) {\n define(function() {\n return qq;\n });\n }\n else if (typeof module !== \"undefined\" && module.exports) {\n module.exports = qq;\n }\n else {\n global.qq = qq;\n }\n}());\n","/*global qq */\nqq.version = \"5.12.0\";\n","/* globals qq */\nqq.supportedFeatures = (function() {\n \"use strict\";\n\n var supportsUploading,\n supportsUploadingBlobs,\n supportsFileDrop,\n supportsAjaxFileUploading,\n supportsFolderDrop,\n supportsChunking,\n supportsResume,\n supportsUploadViaPaste,\n supportsUploadCors,\n supportsDeleteFileXdr,\n supportsDeleteFileCorsXhr,\n supportsDeleteFileCors,\n supportsFolderSelection,\n supportsImagePreviews,\n supportsUploadProgress;\n\n function testSupportsFileInputElement() {\n var supported = true,\n tempInput;\n\n try {\n tempInput = document.createElement(\"input\");\n tempInput.type = \"file\";\n qq(tempInput).hide();\n\n if (tempInput.disabled) {\n supported = false;\n }\n }\n catch (ex) {\n supported = false;\n }\n\n return supported;\n }\n\n //only way to test for Filesystem API support since webkit does not expose the DataTransfer interface\n function isChrome21OrHigher() {\n return (qq.chrome() || qq.opera()) &&\n navigator.userAgent.match(/Chrome\\/[2][1-9]|Chrome\\/[3-9][0-9]/) !== undefined;\n }\n\n //only way to test for complete Clipboard API support at this time\n function isChrome14OrHigher() {\n return (qq.chrome() || qq.opera()) &&\n navigator.userAgent.match(/Chrome\\/[1][4-9]|Chrome\\/[2-9][0-9]/) !== undefined;\n }\n\n //Ensure we can send cross-origin `XMLHttpRequest`s\n function isCrossOriginXhrSupported() {\n if (window.XMLHttpRequest) {\n var xhr = qq.createXhrInstance();\n\n //Commonly accepted test for XHR CORS support.\n return xhr.withCredentials !== undefined;\n }\n\n return false;\n }\n\n //Test for (terrible) cross-origin ajax transport fallback for IE9 and IE8\n function isXdrSupported() {\n return window.XDomainRequest !== undefined;\n }\n\n // CORS Ajax requests are supported if it is either possible to send credentialed `XMLHttpRequest`s,\n // or if `XDomainRequest` is an available alternative.\n function isCrossOriginAjaxSupported() {\n if (isCrossOriginXhrSupported()) {\n return true;\n }\n\n return isXdrSupported();\n }\n\n function isFolderSelectionSupported() {\n // We know that folder selection is only supported in Chrome via this proprietary attribute for now\n return document.createElement(\"input\").webkitdirectory !== undefined;\n }\n\n function isLocalStorageSupported() {\n try {\n return !!window.localStorage &&\n // unpatched versions of IE10/11 have buggy impls of localStorage where setItem is a string\n qq.isFunction(window.localStorage.setItem);\n }\n catch (error) {\n // probably caught a security exception, so no localStorage for you\n return false;\n }\n }\n\n function isDragAndDropSupported() {\n var span = document.createElement(\"span\");\n\n return (\"draggable\" in span || (\"ondragstart\" in span && \"ondrop\" in span)) &&\n !qq.android() && !qq.ios();\n }\n\n supportsUploading = testSupportsFileInputElement();\n\n supportsAjaxFileUploading = supportsUploading && qq.isXhrUploadSupported();\n\n supportsUploadingBlobs = supportsAjaxFileUploading && !qq.androidStock();\n\n supportsFileDrop = supportsAjaxFileUploading && isDragAndDropSupported();\n\n supportsFolderDrop = supportsFileDrop && isChrome21OrHigher();\n\n supportsChunking = supportsAjaxFileUploading && qq.isFileChunkingSupported();\n\n supportsResume = supportsAjaxFileUploading && supportsChunking && isLocalStorageSupported();\n\n supportsUploadViaPaste = supportsAjaxFileUploading && isChrome14OrHigher();\n\n supportsUploadCors = supportsUploading && (window.postMessage !== undefined || supportsAjaxFileUploading);\n\n supportsDeleteFileCorsXhr = isCrossOriginXhrSupported();\n\n supportsDeleteFileXdr = isXdrSupported();\n\n supportsDeleteFileCors = isCrossOriginAjaxSupported();\n\n supportsFolderSelection = isFolderSelectionSupported();\n\n supportsImagePreviews = supportsAjaxFileUploading && window.FileReader !== undefined;\n\n supportsUploadProgress = (function() {\n if (supportsAjaxFileUploading) {\n return !qq.androidStock() && !qq.iosChrome();\n }\n return false;\n }());\n\n return {\n ajaxUploading: supportsAjaxFileUploading,\n blobUploading: supportsUploadingBlobs,\n canDetermineSize: supportsAjaxFileUploading,\n chunking: supportsChunking,\n deleteFileCors: supportsDeleteFileCors,\n deleteFileCorsXdr: supportsDeleteFileXdr, //NOTE: will also return true in IE10, where XDR is also supported\n deleteFileCorsXhr: supportsDeleteFileCorsXhr,\n dialogElement: !!window.HTMLDialogElement,\n fileDrop: supportsFileDrop,\n folderDrop: supportsFolderDrop,\n folderSelection: supportsFolderSelection,\n imagePreviews: supportsImagePreviews,\n imageValidation: supportsImagePreviews,\n itemSizeValidation: supportsAjaxFileUploading,\n pause: supportsChunking,\n progressBar: supportsUploadProgress,\n resume: supportsResume,\n scaling: supportsImagePreviews && supportsUploadingBlobs,\n tiffPreviews: qq.safari(), // Not the best solution, but simple and probably accurate enough (for now)\n unlimitedScaledImageSize: !qq.ios(), // false simply indicates that there is some known limit\n uploading: supportsUploading,\n uploadCors: supportsUploadCors,\n uploadCustomHeaders: supportsAjaxFileUploading,\n uploadNonMultipart: supportsAjaxFileUploading,\n uploadViaPaste: supportsUploadViaPaste\n };\n\n}());\n","/*globals qq*/\n\n// Is the passed object a promise instance?\nqq.isGenericPromise = function(maybePromise) {\n \"use strict\";\n return !!(maybePromise && maybePromise.then && qq.isFunction(maybePromise.then));\n};\n\nqq.Promise = function() {\n \"use strict\";\n\n var successArgs, failureArgs,\n successCallbacks = [],\n failureCallbacks = [],\n doneCallbacks = [],\n state = 0;\n\n qq.extend(this, {\n then: function(onSuccess, onFailure) {\n if (state === 0) {\n if (onSuccess) {\n successCallbacks.push(onSuccess);\n }\n if (onFailure) {\n failureCallbacks.push(onFailure);\n }\n }\n else if (state === -1) {\n onFailure && onFailure.apply(null, failureArgs);\n }\n else if (onSuccess) {\n onSuccess.apply(null, successArgs);\n }\n\n return this;\n },\n\n done: function(callback) {\n if (state === 0) {\n doneCallbacks.push(callback);\n }\n else {\n callback.apply(null, failureArgs === undefined ? successArgs : failureArgs);\n }\n\n return this;\n },\n\n success: function() {\n state = 1;\n successArgs = arguments;\n\n if (successCallbacks.length) {\n qq.each(successCallbacks, function(idx, callback) {\n callback.apply(null, successArgs);\n });\n }\n\n if (doneCallbacks.length) {\n qq.each(doneCallbacks, function(idx, callback) {\n callback.apply(null, successArgs);\n });\n }\n\n return this;\n },\n\n failure: function() {\n state = -1;\n failureArgs = arguments;\n\n if (failureCallbacks.length) {\n qq.each(failureCallbacks, function(idx, callback) {\n callback.apply(null, failureArgs);\n });\n }\n\n if (doneCallbacks.length) {\n qq.each(doneCallbacks, function(idx, callback) {\n callback.apply(null, failureArgs);\n });\n }\n\n return this;\n }\n });\n};\n","/*globals qq, document, CustomEvent*/\nqq.DragAndDrop = function(o) {\n \"use strict\";\n\n var options,\n HIDE_ZONES_EVENT_NAME = \"qq-hidezones\",\n HIDE_BEFORE_ENTER_ATTR = \"qq-hide-dropzone\",\n uploadDropZones = [],\n droppedFiles = [],\n disposeSupport = new qq.DisposeSupport();\n\n options = {\n dropZoneElements: [],\n allowMultipleItems: true,\n classes: {\n dropActive: null\n },\n callbacks: new qq.DragAndDrop.callbacks()\n };\n\n qq.extend(options, o, true);\n\n function uploadDroppedFiles(files, uploadDropZone) {\n // We need to convert the `FileList` to an actual `Array` to avoid iteration issues\n var filesAsArray = Array.prototype.slice.call(files);\n\n options.callbacks.dropLog(\"Grabbed \" + files.length + \" dropped files.\");\n uploadDropZone.dropDisabled(false);\n options.callbacks.processingDroppedFilesComplete(filesAsArray, uploadDropZone.getElement());\n }\n\n function traverseFileTree(entry) {\n var parseEntryPromise = new qq.Promise();\n\n if (entry.isFile) {\n entry.file(function(file) {\n var name = entry.name,\n fullPath = entry.fullPath,\n indexOfNameInFullPath = fullPath.indexOf(name);\n\n // remove file name from full path string\n fullPath = fullPath.substr(0, indexOfNameInFullPath);\n\n // remove leading slash in full path string\n if (fullPath.charAt(0) === \"/\") {\n fullPath = fullPath.substr(1);\n }\n\n file.qqPath = fullPath;\n droppedFiles.push(file);\n parseEntryPromise.success();\n },\n function(fileError) {\n options.callbacks.dropLog(\"Problem parsing '\" + entry.fullPath + \"'. FileError code \" + fileError.code + \".\", \"error\");\n parseEntryPromise.failure();\n });\n }\n else if (entry.isDirectory) {\n getFilesInDirectory(entry).then(\n function allEntriesRead(entries) {\n var entriesLeft = entries.length;\n\n qq.each(entries, function(idx, entry) {\n traverseFileTree(entry).done(function() {\n entriesLeft -= 1;\n\n if (entriesLeft === 0) {\n parseEntryPromise.success();\n }\n });\n });\n\n if (!entries.length) {\n parseEntryPromise.success();\n }\n },\n\n function readFailure(fileError) {\n options.callbacks.dropLog(\"Problem parsing '\" + entry.fullPath + \"'. FileError code \" + fileError.code + \".\", \"error\");\n parseEntryPromise.failure();\n }\n );\n }\n\n return parseEntryPromise;\n }\n\n // Promissory. Guaranteed to read all files in the root of the passed directory.\n function getFilesInDirectory(entry, reader, accumEntries, existingPromise) {\n var promise = existingPromise || new qq.Promise(),\n dirReader = reader || entry.createReader();\n\n dirReader.readEntries(\n function readSuccess(entries) {\n var newEntries = accumEntries ? accumEntries.concat(entries) : entries;\n\n if (entries.length) {\n setTimeout(function() { // prevent stack overflow, however unlikely\n getFilesInDirectory(entry, dirReader, newEntries, promise);\n }, 0);\n }\n else {\n promise.success(newEntries);\n }\n },\n\n promise.failure\n );\n\n return promise;\n }\n\n function handleDataTransfer(dataTransfer, uploadDropZone) {\n var pendingFolderPromises = [],\n handleDataTransferPromise = new qq.Promise();\n\n options.callbacks.processingDroppedFiles();\n uploadDropZone.dropDisabled(true);\n\n if (dataTransfer.files.length > 1 && !options.allowMultipleItems) {\n options.callbacks.processingDroppedFilesComplete([]);\n options.callbacks.dropError(\"tooManyFilesError\", \"\");\n uploadDropZone.dropDisabled(false);\n handleDataTransferPromise.failure();\n }\n else {\n droppedFiles = [];\n\n if (qq.isFolderDropSupported(dataTransfer)) {\n qq.each(dataTransfer.items, function(idx, item) {\n var entry = item.webkitGetAsEntry();\n\n if (entry) {\n //due to a bug in Chrome's File System API impl - #149735\n if (entry.isFile) {\n droppedFiles.push(item.getAsFile());\n }\n\n else {\n pendingFolderPromises.push(traverseFileTree(entry).done(function() {\n pendingFolderPromises.pop();\n if (pendingFolderPromises.length === 0) {\n handleDataTransferPromise.success();\n }\n }));\n }\n }\n });\n }\n else {\n droppedFiles = dataTransfer.files;\n }\n\n if (pendingFolderPromises.length === 0) {\n handleDataTransferPromise.success();\n }\n }\n\n return handleDataTransferPromise;\n }\n\n function setupDropzone(dropArea) {\n var dropZone = new qq.UploadDropZone({\n HIDE_ZONES_EVENT_NAME: HIDE_ZONES_EVENT_NAME,\n element: dropArea,\n onEnter: function(e) {\n qq(dropArea).addClass(options.classes.dropActive);\n e.stopPropagation();\n },\n onLeaveNotDescendants: function(e) {\n qq(dropArea).removeClass(options.classes.dropActive);\n },\n onDrop: function(e) {\n handleDataTransfer(e.dataTransfer, dropZone).then(\n function() {\n uploadDroppedFiles(droppedFiles, dropZone);\n },\n function() {\n options.callbacks.dropLog(\"Drop event DataTransfer parsing failed. No files will be uploaded.\", \"error\");\n }\n );\n }\n });\n\n disposeSupport.addDisposer(function() {\n dropZone.dispose();\n });\n\n qq(dropArea).hasAttribute(HIDE_BEFORE_ENTER_ATTR) && qq(dropArea).hide();\n\n uploadDropZones.push(dropZone);\n\n return dropZone;\n }\n\n function isFileDrag(dragEvent) {\n var fileDrag;\n\n qq.each(dragEvent.dataTransfer.types, function(key, val) {\n if (val === \"Files\") {\n fileDrag = true;\n return false;\n }\n });\n\n return fileDrag;\n }\n\n // Attempt to determine when the file has left the document. It is not always possible to detect this\n // in all cases, but it is generally possible in all browsers, with a few exceptions.\n //\n // Exceptions:\n // * IE10+ & Safari: We can't detect a file leaving the document if the Explorer window housing the file\n // overlays the browser window.\n // * IE10+: If the file is dragged out of the window too quickly, IE does not set the expected values of the\n // event's X & Y properties.\n function leavingDocumentOut(e) {\n if (qq.firefox()) {\n return !e.relatedTarget;\n }\n\n if (qq.safari()) {\n return e.x < 0 || e.y < 0;\n }\n\n return e.x === 0 && e.y === 0;\n }\n\n function setupDragDrop() {\n var dropZones = options.dropZoneElements,\n\n maybeHideDropZones = function() {\n setTimeout(function() {\n qq.each(dropZones, function(idx, dropZone) {\n qq(dropZone).hasAttribute(HIDE_BEFORE_ENTER_ATTR) && qq(dropZone).hide();\n qq(dropZone).removeClass(options.classes.dropActive);\n });\n }, 10);\n };\n\n qq.each(dropZones, function(idx, dropZone) {\n var uploadDropZone = setupDropzone(dropZone);\n\n // IE <= 9 does not support the File API used for drag+drop uploads\n if (dropZones.length && qq.supportedFeatures.fileDrop) {\n disposeSupport.attach(document, \"dragenter\", function(e) {\n if (!uploadDropZone.dropDisabled() && isFileDrag(e)) {\n qq.each(dropZones, function(idx, dropZone) {\n // We can't apply styles to non-HTMLElements, since they lack the `style` property.\n // Also, if the drop zone isn't initially hidden, let's not mess with `style.display`.\n if (dropZone instanceof HTMLElement &&\n qq(dropZone).hasAttribute(HIDE_BEFORE_ENTER_ATTR)) {\n\n qq(dropZone).css({display: \"block\"});\n }\n });\n }\n });\n }\n });\n\n disposeSupport.attach(document, \"dragleave\", function(e) {\n if (leavingDocumentOut(e)) {\n maybeHideDropZones();\n }\n });\n\n // Just in case we were not able to detect when a dragged file has left the document,\n // hide all relevant drop zones the next time the mouse enters the document.\n // Note that mouse events such as this one are not fired during drag operations.\n disposeSupport.attach(qq(document).children()[0], \"mouseenter\", function(e) {\n maybeHideDropZones();\n });\n\n disposeSupport.attach(document, \"drop\", function(e) {\n e.preventDefault();\n maybeHideDropZones();\n });\n\n disposeSupport.attach(document, HIDE_ZONES_EVENT_NAME, maybeHideDropZones);\n }\n\n setupDragDrop();\n\n qq.extend(this, {\n setupExtraDropzone: function(element) {\n options.dropZoneElements.push(element);\n setupDropzone(element);\n },\n\n removeDropzone: function(element) {\n var i,\n dzs = options.dropZoneElements;\n\n for (i in dzs) {\n if (dzs[i] === element) {\n return dzs.splice(i, 1);\n }\n }\n },\n\n dispose: function() {\n disposeSupport.dispose();\n qq.each(uploadDropZones, function(idx, dropZone) {\n dropZone.dispose();\n });\n }\n });\n};\n\nqq.DragAndDrop.callbacks = function() {\n \"use strict\";\n\n return {\n processingDroppedFiles: function() {},\n processingDroppedFilesComplete: function(files, targetEl) {},\n dropError: function(code, errorSpecifics) {\n qq.log(\"Drag & drop error code '\" + code + \" with these specifics: '\" + errorSpecifics + \"'\", \"error\");\n },\n dropLog: function(message, level) {\n qq.log(message, level);\n }\n };\n};\n\nqq.UploadDropZone = function(o) {\n \"use strict\";\n\n var disposeSupport = new qq.DisposeSupport(),\n options, element, preventDrop, dropOutsideDisabled;\n\n options = {\n element: null,\n onEnter: function(e) {},\n onLeave: function(e) {},\n // is not fired when leaving element by hovering descendants\n onLeaveNotDescendants: function(e) {},\n onDrop: function(e) {}\n };\n\n qq.extend(options, o);\n element = options.element;\n\n function dragoverShouldBeCanceled() {\n return qq.safari() || (qq.firefox() && qq.windows());\n }\n\n function disableDropOutside(e) {\n // run only once for all instances\n if (!dropOutsideDisabled) {\n\n // for these cases we need to catch onDrop to reset dropArea\n if (dragoverShouldBeCanceled) {\n disposeSupport.attach(document, \"dragover\", function(e) {\n e.preventDefault();\n });\n } else {\n disposeSupport.attach(document, \"dragover\", function(e) {\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = \"none\";\n e.preventDefault();\n }\n });\n }\n\n dropOutsideDisabled = true;\n }\n }\n\n function isValidFileDrag(e) {\n // e.dataTransfer currently causing IE errors\n // IE9 does NOT support file API, so drag-and-drop is not possible\n if (!qq.supportedFeatures.fileDrop) {\n return false;\n }\n\n var effectTest, dt = e.dataTransfer,\n // do not check dt.types.contains in webkit, because it crashes safari 4\n isSafari = qq.safari();\n\n // dt.effectAllowed is none in Safari 5\n // dt.types.contains check is for firefox\n\n // dt.effectAllowed crashes IE 11 & 10 when files have been dragged from\n // the filesystem\n effectTest = qq.ie() && qq.supportedFeatures.fileDrop ? true : dt.effectAllowed !== \"none\";\n return dt && effectTest && (dt.files || (!isSafari && dt.types.contains && dt.types.contains(\"Files\")));\n }\n\n function isOrSetDropDisabled(isDisabled) {\n if (isDisabled !== undefined) {\n preventDrop = isDisabled;\n }\n return preventDrop;\n }\n\n function triggerHidezonesEvent() {\n var hideZonesEvent;\n\n function triggerUsingOldApi() {\n hideZonesEvent = document.createEvent(\"Event\");\n hideZonesEvent.initEvent(options.HIDE_ZONES_EVENT_NAME, true, true);\n }\n\n if (window.CustomEvent) {\n try {\n hideZonesEvent = new CustomEvent(options.HIDE_ZONES_EVENT_NAME);\n }\n catch (err) {\n triggerUsingOldApi();\n }\n }\n else {\n triggerUsingOldApi();\n }\n\n document.dispatchEvent(hideZonesEvent);\n }\n\n function attachEvents() {\n disposeSupport.attach(element, \"dragover\", function(e) {\n if (!isValidFileDrag(e)) {\n return;\n }\n\n // dt.effectAllowed crashes IE 11 & 10 when files have been dragged from\n // the filesystem\n var effect = qq.ie() && qq.supportedFeatures.fileDrop ? null : e.dataTransfer.effectAllowed;\n if (effect === \"move\" || effect === \"linkMove\") {\n e.dataTransfer.dropEffect = \"move\"; // for FF (only move allowed)\n } else {\n e.dataTransfer.dropEffect = \"copy\"; // for Chrome\n }\n\n e.stopPropagation();\n e.preventDefault();\n });\n\n disposeSupport.attach(element, \"dragenter\", function(e) {\n if (!isOrSetDropDisabled()) {\n if (!isValidFileDrag(e)) {\n return;\n }\n options.onEnter(e);\n }\n });\n\n disposeSupport.attach(element, \"dragleave\", function(e) {\n if (!isValidFileDrag(e)) {\n return;\n }\n\n options.onLeave(e);\n\n var relatedTarget = document.elementFromPoint(e.clientX, e.clientY);\n // do not fire when moving a mouse over a descendant\n if (qq(this).contains(relatedTarget)) {\n return;\n }\n\n options.onLeaveNotDescendants(e);\n });\n\n disposeSupport.attach(element, \"drop\", function(e) {\n if (!isOrSetDropDisabled()) {\n if (!isValidFileDrag(e)) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n options.onDrop(e);\n\n triggerHidezonesEvent();\n }\n });\n }\n\n disableDropOutside();\n attachEvents();\n\n qq.extend(this, {\n dropDisabled: function(isDisabled) {\n return isOrSetDropDisabled(isDisabled);\n },\n\n dispose: function() {\n disposeSupport.dispose();\n },\n\n getElement: function() {\n return element;\n }\n });\n};\n"]} \ No newline at end of file +{"version":3,"sources":["?","../client/js/util.js","../client/js/export.js","../client/js/version.js","../client/js/features.js","../client/js/promise.js","../client/js/dnd.js"],"names":["global","qq","element","hide","style","display","this","attach","type","fn","addEventListener","attachEvent","detach","removeEventListener","detachEvent","contains","descendant","compareDocumentPosition","insertBefore","elementB","parentNode","remove","removeChild","css","styles","Error","opacity","filter","Math","round","extend","hasClass","name","considerParent","re","RegExp","test","className","addClass","removeClass","replace","getByClass","first","candidates","result","querySelector","querySelectorAll","getElementsByTagName","each","idx","val","push","getFirstByClass","children","child","firstChild","nodeType","nextSibling","setText","text","innerText","textContent","clearText","hasAttribute","attrName","attrVal","exec","getAttribute","undefined","canvasToBlob","canvas","mime","quality","dataUriToBlob","toDataURL","dataUri","arrayBuffer","byteString","createBlob","data","BlobBuilder","window","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","blobBuilder","append","getBlob","Blob","intArray","mimeString","split","indexOf","atob","decodeURI","ArrayBuffer","length","Uint8Array","character","charCodeAt","log","message","level","console","isObject","variable","Object","prototype","toString","call","isFunction","isArray","value","buffer","constructor","isItemList","maybeItemList","isNodeList","maybeNodeList","item","namedItem","isString","maybeString","trimStr","string","String","trim","format","str","args","Array","slice","arguments","newStr","nextIdxToReplace","strBefore","substring","strAfter","isFile","maybeFile","File","isFileList","maybeFileList","FileList","isFileOrInput","maybeFileOrInput","isInput","maybeInput","notFile","evaluateType","normalizedType","toLowerCase","HTMLInputElement","tagName","isBlob","maybeBlob","isXhrUploadSupported","input","document","createElement","multiple","FormData","createXhrInstance","upload","XMLHttpRequest","ActiveXObject","error","isFolderDropSupported","dataTransfer","items","webkitGetAsEntry","isFileChunkingSupported","androidStock","webkitSlice","mozSlice","sliceBlob","fileOrBlob","start","end","slicer","arrayBufferToHex","bytesAsHex","bytes","byt","byteAsHexStr","readBlobToHex","blob","startOffset","initialBlob","fileReader","FileReader","promise","Promise","onload","success","onerror","failure","readAsArrayBuffer","second","extendNested","prop","override","target","sourceFn","super_","source","srcPropName","srcPropVal","arr","elt","from","len","hasOwnProperty","getUniqueId","c","r","random","v","ie","navigator","userAgent","ie7","ie8","ie10","ie11","edge","safari","vendor","chrome","opera","firefox","windows","platform","android","ios6","ios","ios7","ios8","ios800","iosChrome","iosSafari","iosSafariWebView","preventDefault","e","returnValue","toElement","div","html","innerHTML","iterableItem","callback","keyOrIndex","retVal","Storage","key","getItem","charAt","bind","oldFunc","context","newArgs","concat","apply","obj2url","obj","temp","prefixDone","uristrings","prefix","add","nextObj","i","nextTemp","encodeURIComponent","join","obj2FormData","formData","arrayKeyName","obj2Inputs","form","setAttribute","appendChild","parseJson","json","JSON","parse","eval","getExtension","filename","extIdx","lastIndexOf","substr","getFilename","blobOrFileInput","fileName","DisposeSupport","disposers","dispose","disposer","shift","addDisposer","disposeFunction","define","amd","module","exports","version","supportedFeatures","supportsUploading","supportsUploadingBlobs","supportsFileDrop","supportsAjaxFileUploading","supportsFolderDrop","supportsChunking","supportsResume","supportsUploadViaPaste","supportsUploadCors","supportsDeleteFileXdr","supportsDeleteFileCorsXhr","supportsDeleteFileCors","supportsFolderSelection","supportsImagePreviews","supportsUploadProgress","testSupportsFileInputElement","supported","tempInput","disabled","ex","isChrome14OrHigher","match","isCrossOriginXhrSupported","xhr","withCredentials","isXdrSupported","XDomainRequest","isCrossOriginAjaxSupported","isFolderSelectionSupported","webkitdirectory","isLocalStorageSupported","localStorage","setItem","isDragAndDropSupported","span","postMessage","ajaxUploading","blobUploading","canDetermineSize","chunking","deleteFileCors","deleteFileCorsXdr","deleteFileCorsXhr","dialogElement","HTMLDialogElement","fileDrop","folderDrop","folderSelection","imagePreviews","imageValidation","itemSizeValidation","pause","progressBar","resume","scaling","tiffPreviews","unlimitedScaledImageSize","uploading","uploadCors","uploadCustomHeaders","uploadNonMultipart","uploadViaPaste","isGenericPromise","maybePromise","then","successArgs","failureArgs","successCallbacks","failureCallbacks","doneCallbacks","state","onSuccess","onFailure","done","DragAndDrop","o","options","HIDE_ZONES_EVENT_NAME","HIDE_BEFORE_ENTER_ATTR","uploadDropZones","droppedFiles","disposeSupport","dropZoneElements","allowMultipleItems","classes","dropActive","callbacks","uploadDroppedFiles","files","uploadDropZone","filesAsArray","dropLog","dropDisabled","processingDroppedFilesComplete","getElement","traverseFileTree","entry","parseEntryPromise","file","qqPath","extractDirectoryPath","fileError","fullPath","code","isDirectory","getFilesInDirectory","allEntriesRead","entries","entriesLeft","readFailure","indexOfNameInFullPath","reader","accumEntries","existingPromise","dirReader","createReader","readEntries","readSuccess","newEntries","setTimeout","handleDataTransfer","pendingFolderPromises","handleDataTransferPromise","processingDroppedFiles","dropError","getAsFile","pop","setupDropzone","dropArea","dropZone","UploadDropZone","onEnter","stopPropagation","onLeaveNotDescendants","onDrop","isFileDrag","dragEvent","fileDrag","types","leavingDocumentOut","x","y","setupDragDrop","dropZones","maybeHideDropZones","HTMLElement","setupExtraDropzone","removeDropzone","dzs","splice","_testing","targetEl","errorSpecifics","preventDrop","dropOutsideDisabled","onLeave","dragoverShouldBeCanceled","disableDropOutside","dropEffect","isValidFileDrag","effectTest","dt","isSafari","effectAllowed","includes","isOrSetDropDisabled","isDisabled","triggerHidezonesEvent","hideZonesEvent","triggerUsingOldApi","createEvent","initEvent","CustomEvent","err","dispatchEvent","attachEvents","effect","relatedTarget","elementFromPoint","clientX","clientY"],"mappings":"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","file":"dnd.js","sourcesContent":[null,"/*globals window, navigator, document, FormData, File, HTMLInputElement, XMLHttpRequest, Blob, Storage, ActiveXObject */\n/* jshint -W079 */\nvar qq = function(element) {\n \"use strict\";\n\n return {\n hide: function() {\n element.style.display = \"none\";\n return this;\n },\n\n /** Returns the function which detaches attached event */\n attach: function(type, fn) {\n if (element.addEventListener) {\n element.addEventListener(type, fn, false);\n } else if (element.attachEvent) {\n element.attachEvent(\"on\" + type, fn);\n }\n return function() {\n qq(element).detach(type, fn);\n };\n },\n\n detach: function(type, fn) {\n if (element.removeEventListener) {\n element.removeEventListener(type, fn, false);\n } else if (element.attachEvent) {\n element.detachEvent(\"on\" + type, fn);\n }\n return this;\n },\n\n contains: function(descendant) {\n // The [W3C spec](http://www.w3.org/TR/domcore/#dom-node-contains)\n // says a `null` (or ostensibly `undefined`) parameter\n // passed into `Node.contains` should result in a false return value.\n // IE7 throws an exception if the parameter is `undefined` though.\n if (!descendant) {\n return false;\n }\n\n // compareposition returns false in this case\n if (element === descendant) {\n return true;\n }\n\n if (element.contains) {\n return element.contains(descendant);\n } else {\n /*jslint bitwise: true*/\n return !!(descendant.compareDocumentPosition(element) & 8);\n }\n },\n\n /**\n * Insert this element before elementB.\n */\n insertBefore: function(elementB) {\n elementB.parentNode.insertBefore(element, elementB);\n return this;\n },\n\n remove: function() {\n element.parentNode.removeChild(element);\n return this;\n },\n\n /**\n * Sets styles for an element.\n * Fixes opacity in IE6-8.\n */\n css: function(styles) {\n /*jshint eqnull: true*/\n if (element.style == null) {\n throw new qq.Error(\"Can't apply style to node as it is not on the HTMLElement prototype chain!\");\n }\n\n /*jshint -W116*/\n if (styles.opacity != null) {\n if (typeof element.style.opacity !== \"string\" && typeof (element.filters) !== \"undefined\") {\n styles.filter = \"alpha(opacity=\" + Math.round(100 * styles.opacity) + \")\";\n }\n }\n qq.extend(element.style, styles);\n\n return this;\n },\n\n hasClass: function(name, considerParent) {\n var re = new RegExp(\"(^| )\" + name + \"( |$)\");\n return re.test(element.className) || !!(considerParent && re.test(element.parentNode.className));\n },\n\n addClass: function(name) {\n if (!qq(element).hasClass(name)) {\n element.className += \" \" + name;\n }\n return this;\n },\n\n removeClass: function(name) {\n var re = new RegExp(\"(^| )\" + name + \"( |$)\");\n element.className = element.className.replace(re, \" \").replace(/^\\s+|\\s+$/g, \"\");\n return this;\n },\n\n getByClass: function(className, first) {\n var candidates,\n result = [];\n\n if (first && element.querySelector) {\n return element.querySelector(\".\" + className);\n }\n else if (element.querySelectorAll) {\n return element.querySelectorAll(\".\" + className);\n }\n\n candidates = element.getElementsByTagName(\"*\");\n\n qq.each(candidates, function(idx, val) {\n if (qq(val).hasClass(className)) {\n result.push(val);\n }\n });\n return first ? result[0] : result;\n },\n\n getFirstByClass: function(className) {\n return qq(element).getByClass(className, true);\n },\n\n children: function() {\n var children = [],\n child = element.firstChild;\n\n while (child) {\n if (child.nodeType === 1) {\n children.push(child);\n }\n child = child.nextSibling;\n }\n\n return children;\n },\n\n setText: function(text) {\n element.innerText = text;\n element.textContent = text;\n return this;\n },\n\n clearText: function() {\n return qq(element).setText(\"\");\n },\n\n // Returns true if the attribute exists on the element\n // AND the value of the attribute is NOT \"false\" (case-insensitive)\n hasAttribute: function(attrName) {\n var attrVal;\n\n if (element.hasAttribute) {\n\n if (!element.hasAttribute(attrName)) {\n return false;\n }\n\n /*jshint -W116*/\n return (/^false$/i).exec(element.getAttribute(attrName)) == null;\n }\n else {\n attrVal = element[attrName];\n\n if (attrVal === undefined) {\n return false;\n }\n\n /*jshint -W116*/\n return (/^false$/i).exec(attrVal) == null;\n }\n }\n };\n};\n\n(function() {\n \"use strict\";\n\n qq.canvasToBlob = function(canvas, mime, quality) {\n return qq.dataUriToBlob(canvas.toDataURL(mime, quality));\n };\n\n qq.dataUriToBlob = function(dataUri) {\n var arrayBuffer, byteString,\n createBlob = function(data, mime) {\n var BlobBuilder = window.BlobBuilder ||\n window.WebKitBlobBuilder ||\n window.MozBlobBuilder ||\n window.MSBlobBuilder,\n blobBuilder = BlobBuilder && new BlobBuilder();\n\n if (blobBuilder) {\n blobBuilder.append(data);\n return blobBuilder.getBlob(mime);\n }\n else {\n return new Blob([data], {type: mime});\n }\n },\n intArray, mimeString;\n\n // convert base64 to raw binary data held in a string\n if (dataUri.split(\",\")[0].indexOf(\"base64\") >= 0) {\n byteString = atob(dataUri.split(\",\")[1]);\n }\n else {\n byteString = decodeURI(dataUri.split(\",\")[1]);\n }\n\n // extract the MIME\n mimeString = dataUri.split(\",\")[0]\n .split(\":\")[1]\n .split(\";\")[0];\n\n // write the bytes of the binary string to an ArrayBuffer\n arrayBuffer = new ArrayBuffer(byteString.length);\n intArray = new Uint8Array(arrayBuffer);\n qq.each(byteString, function(idx, character) {\n intArray[idx] = character.charCodeAt(0);\n });\n\n return createBlob(arrayBuffer, mimeString);\n };\n\n qq.log = function(message, level) {\n if (window.console) {\n if (!level || level === \"info\") {\n window.console.log(message);\n }\n else\n {\n if (window.console[level]) {\n window.console[level](message);\n }\n else {\n window.console.log(\"<\" + level + \"> \" + message);\n }\n }\n }\n };\n\n qq.isObject = function(variable) {\n return variable && !variable.nodeType && Object.prototype.toString.call(variable) === \"[object Object]\";\n };\n\n qq.isFunction = function(variable) {\n return typeof (variable) === \"function\";\n };\n\n /**\n * Check the type of a value. Is it an \"array\"?\n *\n * @param value value to test.\n * @returns true if the value is an array or associated with an `ArrayBuffer`\n */\n qq.isArray = function(value) {\n return Object.prototype.toString.call(value) === \"[object Array]\" ||\n (value && window.ArrayBuffer && value.buffer && value.buffer.constructor === ArrayBuffer);\n };\n\n // Looks for an object on a `DataTransfer` object that is associated with drop events when utilizing the Filesystem API.\n qq.isItemList = function(maybeItemList) {\n return Object.prototype.toString.call(maybeItemList) === \"[object DataTransferItemList]\";\n };\n\n // Looks for an object on a `NodeList` or an `HTMLCollection`|`HTMLFormElement`|`HTMLSelectElement`\n // object that is associated with collections of Nodes.\n qq.isNodeList = function(maybeNodeList) {\n return Object.prototype.toString.call(maybeNodeList) === \"[object NodeList]\" ||\n // If `HTMLCollection` is the actual type of the object, we must determine this\n // by checking for expected properties/methods on the object\n (maybeNodeList.item && maybeNodeList.namedItem);\n };\n\n qq.isString = function(maybeString) {\n return Object.prototype.toString.call(maybeString) === \"[object String]\";\n };\n\n qq.trimStr = function(string) {\n if (String.prototype.trim) {\n return string.trim();\n }\n\n return string.replace(/^\\s+|\\s+$/g, \"\");\n };\n\n /**\n * @param str String to format.\n * @returns {string} A string, swapping argument values with the associated occurrence of {} in the passed string.\n */\n qq.format = function(str) {\n\n var args = Array.prototype.slice.call(arguments, 1),\n newStr = str,\n nextIdxToReplace = newStr.indexOf(\"{}\");\n\n qq.each(args, function(idx, val) {\n var strBefore = newStr.substring(0, nextIdxToReplace),\n strAfter = newStr.substring(nextIdxToReplace + 2);\n\n newStr = strBefore + val + strAfter;\n nextIdxToReplace = newStr.indexOf(\"{}\", nextIdxToReplace + val.length);\n\n // End the loop if we have run out of tokens (when the arguments exceed the # of tokens)\n if (nextIdxToReplace < 0) {\n return false;\n }\n });\n\n return newStr;\n };\n\n qq.isFile = function(maybeFile) {\n return window.File && Object.prototype.toString.call(maybeFile) === \"[object File]\";\n };\n\n qq.isFileList = function(maybeFileList) {\n return window.FileList && Object.prototype.toString.call(maybeFileList) === \"[object FileList]\";\n };\n\n qq.isFileOrInput = function(maybeFileOrInput) {\n return qq.isFile(maybeFileOrInput) || qq.isInput(maybeFileOrInput);\n };\n\n qq.isInput = function(maybeInput, notFile) {\n var evaluateType = function(type) {\n var normalizedType = type.toLowerCase();\n\n if (notFile) {\n return normalizedType !== \"file\";\n }\n\n return normalizedType === \"file\";\n };\n\n if (window.HTMLInputElement) {\n if (Object.prototype.toString.call(maybeInput) === \"[object HTMLInputElement]\") {\n if (maybeInput.type && evaluateType(maybeInput.type)) {\n return true;\n }\n }\n }\n if (maybeInput.tagName) {\n if (maybeInput.tagName.toLowerCase() === \"input\") {\n if (maybeInput.type && evaluateType(maybeInput.type)) {\n return true;\n }\n }\n }\n\n return false;\n };\n\n qq.isBlob = function(maybeBlob) {\n if (window.Blob && Object.prototype.toString.call(maybeBlob) === \"[object Blob]\") {\n return true;\n }\n };\n\n qq.isXhrUploadSupported = function() {\n var input = document.createElement(\"input\");\n input.type = \"file\";\n\n return (\n input.multiple !== undefined &&\n typeof File !== \"undefined\" &&\n typeof FormData !== \"undefined\" &&\n typeof (qq.createXhrInstance()).upload !== \"undefined\");\n };\n\n // Fall back to ActiveX is native XHR is disabled (possible in any version of IE).\n qq.createXhrInstance = function() {\n if (window.XMLHttpRequest) {\n return new XMLHttpRequest();\n }\n\n try {\n return new ActiveXObject(\"MSXML2.XMLHTTP.3.0\");\n }\n catch (error) {\n qq.log(\"Neither XHR or ActiveX are supported!\", \"error\");\n return null;\n }\n };\n\n qq.isFolderDropSupported = function(dataTransfer) {\n return dataTransfer.items &&\n dataTransfer.items.length > 0 &&\n dataTransfer.items[0].webkitGetAsEntry;\n };\n\n qq.isFileChunkingSupported = function() {\n return !qq.androidStock() && //Android's stock browser cannot upload Blobs correctly\n qq.isXhrUploadSupported() &&\n (File.prototype.slice !== undefined || File.prototype.webkitSlice !== undefined || File.prototype.mozSlice !== undefined);\n };\n\n qq.sliceBlob = function(fileOrBlob, start, end) {\n var slicer = fileOrBlob.slice || fileOrBlob.mozSlice || fileOrBlob.webkitSlice;\n\n return slicer.call(fileOrBlob, start, end);\n };\n\n qq.arrayBufferToHex = function(buffer) {\n var bytesAsHex = \"\",\n bytes = new Uint8Array(buffer);\n\n qq.each(bytes, function(idx, byt) {\n var byteAsHexStr = byt.toString(16);\n\n if (byteAsHexStr.length < 2) {\n byteAsHexStr = \"0\" + byteAsHexStr;\n }\n\n bytesAsHex += byteAsHexStr;\n });\n\n return bytesAsHex;\n };\n\n qq.readBlobToHex = function(blob, startOffset, length) {\n var initialBlob = qq.sliceBlob(blob, startOffset, startOffset + length),\n fileReader = new FileReader(),\n promise = new qq.Promise();\n\n fileReader.onload = function() {\n promise.success(qq.arrayBufferToHex(fileReader.result));\n };\n\n fileReader.onerror = promise.failure;\n\n fileReader.readAsArrayBuffer(initialBlob);\n\n return promise;\n };\n\n qq.extend = function(first, second, extendNested) {\n qq.each(second, function(prop, val) {\n if (extendNested && qq.isObject(val)) {\n if (first[prop] === undefined) {\n first[prop] = {};\n }\n qq.extend(first[prop], val, true);\n }\n else {\n first[prop] = val;\n }\n });\n\n return first;\n };\n\n /**\n * Allow properties in one object to override properties in another,\n * keeping track of the original values from the target object.\n *\n * Note that the pre-overriden properties to be overriden by the source will be passed into the `sourceFn` when it is invoked.\n *\n * @param target Update properties in this object from some source\n * @param sourceFn A function that, when invoked, will return properties that will replace properties with the same name in the target.\n * @returns {object} The target object\n */\n qq.override = function(target, sourceFn) {\n var super_ = {},\n source = sourceFn(super_);\n\n qq.each(source, function(srcPropName, srcPropVal) {\n if (target[srcPropName] !== undefined) {\n super_[srcPropName] = target[srcPropName];\n }\n\n target[srcPropName] = srcPropVal;\n });\n\n return target;\n };\n\n /**\n * Searches for a given element (elt) in the array, returns -1 if it is not present.\n */\n qq.indexOf = function(arr, elt, from) {\n if (arr.indexOf) {\n return arr.indexOf(elt, from);\n }\n\n from = from || 0;\n var len = arr.length;\n\n if (from < 0) {\n from += len;\n }\n\n for (; from < len; from += 1) {\n if (arr.hasOwnProperty(from) && arr[from] === elt) {\n return from;\n }\n }\n return -1;\n };\n\n //this is a version 4 UUID\n qq.getUniqueId = function() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n /*jslint eqeq: true, bitwise: true*/\n var r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n\n //\n // Browsers and platforms detection\n qq.ie = function() {\n return navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.userAgent.indexOf(\"Trident\") !== -1;\n };\n\n qq.ie7 = function() {\n return navigator.userAgent.indexOf(\"MSIE 7\") !== -1;\n };\n\n qq.ie8 = function() {\n return navigator.userAgent.indexOf(\"MSIE 8\") !== -1;\n };\n\n qq.ie10 = function() {\n return navigator.userAgent.indexOf(\"MSIE 10\") !== -1;\n };\n\n qq.ie11 = function() {\n return qq.ie() && navigator.userAgent.indexOf(\"rv:11\") !== -1;\n };\n\n qq.edge = function() {\n return navigator.userAgent.indexOf(\"Edge\") >= 0;\n };\n\n qq.safari = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Apple\") !== -1;\n };\n\n qq.chrome = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Google\") !== -1;\n };\n\n qq.opera = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Opera\") !== -1;\n };\n\n qq.firefox = function() {\n return (!qq.edge() && !qq.ie11() && navigator.userAgent.indexOf(\"Mozilla\") !== -1 && navigator.vendor !== undefined && navigator.vendor === \"\");\n };\n\n qq.windows = function() {\n return navigator.platform === \"Win32\";\n };\n\n qq.android = function() {\n return navigator.userAgent.toLowerCase().indexOf(\"android\") !== -1;\n };\n\n // We need to identify the Android stock browser via the UA string to work around various bugs in this browser,\n // such as the one that prevents a `Blob` from being uploaded.\n qq.androidStock = function() {\n return qq.android() && navigator.userAgent.toLowerCase().indexOf(\"chrome\") < 0;\n };\n\n qq.ios6 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 6_\") !== -1;\n };\n\n qq.ios7 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 7_\") !== -1;\n };\n\n qq.ios8 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 8_\") !== -1;\n };\n\n // iOS 8.0.0\n qq.ios800 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 8_0 \") !== -1;\n };\n\n qq.ios = function() {\n /*jshint -W014 */\n return navigator.userAgent.indexOf(\"iPad\") !== -1\n || navigator.userAgent.indexOf(\"iPod\") !== -1\n || navigator.userAgent.indexOf(\"iPhone\") !== -1;\n };\n\n qq.iosChrome = function() {\n return qq.ios() && navigator.userAgent.indexOf(\"CriOS\") !== -1;\n };\n\n qq.iosSafari = function() {\n return qq.ios() && !qq.iosChrome() && navigator.userAgent.indexOf(\"Safari\") !== -1;\n };\n\n qq.iosSafariWebView = function() {\n return qq.ios() && !qq.iosChrome() && !qq.iosSafari();\n };\n\n //\n // Events\n\n qq.preventDefault = function(e) {\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n };\n\n /**\n * Creates and returns element from html string\n * Uses innerHTML to create an element\n */\n qq.toElement = (function() {\n var div = document.createElement(\"div\");\n return function(html) {\n div.innerHTML = html;\n var element = div.firstChild;\n div.removeChild(element);\n return element;\n };\n }());\n\n //key and value are passed to callback for each entry in the iterable item\n qq.each = function(iterableItem, callback) {\n var keyOrIndex, retVal;\n\n if (iterableItem) {\n // Iterate through [`Storage`](http://www.w3.org/TR/webstorage/#the-storage-interface) items\n if (window.Storage && iterableItem.constructor === window.Storage) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(iterableItem.key(keyOrIndex), iterableItem.getItem(iterableItem.key(keyOrIndex)));\n if (retVal === false) {\n break;\n }\n }\n }\n // `DataTransferItemList` & `NodeList` objects are array-like and should be treated as arrays\n // when iterating over items inside the object.\n else if (qq.isArray(iterableItem) || qq.isItemList(iterableItem) || qq.isNodeList(iterableItem)) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n if (retVal === false) {\n break;\n }\n }\n }\n else if (qq.isString(iterableItem)) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(keyOrIndex, iterableItem.charAt(keyOrIndex));\n if (retVal === false) {\n break;\n }\n }\n }\n else {\n for (keyOrIndex in iterableItem) {\n if (Object.prototype.hasOwnProperty.call(iterableItem, keyOrIndex)) {\n retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n if (retVal === false) {\n break;\n }\n }\n }\n }\n }\n };\n\n //include any args that should be passed to the new function after the context arg\n qq.bind = function(oldFunc, context) {\n if (qq.isFunction(oldFunc)) {\n var args = Array.prototype.slice.call(arguments, 2);\n\n return function() {\n var newArgs = qq.extend([], args);\n if (arguments.length) {\n newArgs = newArgs.concat(Array.prototype.slice.call(arguments));\n }\n return oldFunc.apply(context, newArgs);\n };\n }\n\n throw new Error(\"first parameter must be a function!\");\n };\n\n /**\n * obj2url() takes a json-object as argument and generates\n * a querystring. pretty much like jQuery.param()\n *\n * how to use:\n *\n * `qq.obj2url({a:'b',c:'d'},'http://any.url/upload?otherParam=value');`\n *\n * will result in:\n *\n * `http://any.url/upload?otherParam=value&a=b&c=d`\n *\n * @param Object JSON-Object\n * @param String current querystring-part\n * @return String encoded querystring\n */\n qq.obj2url = function(obj, temp, prefixDone) {\n /*jshint laxbreak: true*/\n var uristrings = [],\n prefix = \"&\",\n add = function(nextObj, i) {\n var nextTemp = temp\n ? (/\\[\\]$/.test(temp)) // prevent double-encoding\n ? temp\n : temp + \"[\" + i + \"]\"\n : i;\n if ((nextTemp !== \"undefined\") && (i !== \"undefined\")) {\n uristrings.push(\n (typeof nextObj === \"object\")\n ? qq.obj2url(nextObj, nextTemp, true)\n : (Object.prototype.toString.call(nextObj) === \"[object Function]\")\n ? encodeURIComponent(nextTemp) + \"=\" + encodeURIComponent(nextObj())\n : encodeURIComponent(nextTemp) + \"=\" + encodeURIComponent(nextObj)\n );\n }\n };\n\n if (!prefixDone && temp) {\n prefix = (/\\?/.test(temp)) ? (/\\?$/.test(temp)) ? \"\" : \"&\" : \"?\";\n uristrings.push(temp);\n uristrings.push(qq.obj2url(obj));\n } else if ((Object.prototype.toString.call(obj) === \"[object Array]\") && (typeof obj !== \"undefined\")) {\n qq.each(obj, function(idx, val) {\n add(val, idx);\n });\n } else if ((typeof obj !== \"undefined\") && (obj !== null) && (typeof obj === \"object\")) {\n qq.each(obj, function(prop, val) {\n add(val, prop);\n });\n } else {\n uristrings.push(encodeURIComponent(temp) + \"=\" + encodeURIComponent(obj));\n }\n\n if (temp) {\n return uristrings.join(prefix);\n } else {\n return uristrings.join(prefix)\n .replace(/^&/, \"\")\n .replace(/%20/g, \"+\");\n }\n };\n\n qq.obj2FormData = function(obj, formData, arrayKeyName) {\n if (!formData) {\n formData = new FormData();\n }\n\n qq.each(obj, function(key, val) {\n key = arrayKeyName ? arrayKeyName + \"[\" + key + \"]\" : key;\n\n if (qq.isObject(val)) {\n qq.obj2FormData(val, formData, key);\n }\n else if (qq.isFunction(val)) {\n formData.append(key, val());\n }\n else {\n formData.append(key, val);\n }\n });\n\n return formData;\n };\n\n qq.obj2Inputs = function(obj, form) {\n var input;\n\n if (!form) {\n form = document.createElement(\"form\");\n }\n\n qq.obj2FormData(obj, {\n append: function(key, val) {\n input = document.createElement(\"input\");\n input.setAttribute(\"name\", key);\n input.setAttribute(\"value\", val);\n form.appendChild(input);\n }\n });\n\n return form;\n };\n\n /**\n * Not recommended for use outside of Fine Uploader since this falls back to an unchecked eval if JSON.parse is not\n * implemented. For a more secure JSON.parse polyfill, use Douglas Crockford's json2.js.\n */\n qq.parseJson = function(json) {\n /*jshint evil: true*/\n if (window.JSON && qq.isFunction(JSON.parse)) {\n return JSON.parse(json);\n } else {\n return eval(\"(\" + json + \")\");\n }\n };\n\n /**\n * Retrieve the extension of a file, if it exists.\n *\n * @param filename\n * @returns {string || undefined}\n */\n qq.getExtension = function(filename) {\n var extIdx = filename.lastIndexOf(\".\") + 1;\n\n if (extIdx > 0) {\n return filename.substr(extIdx, filename.length - extIdx);\n }\n };\n\n qq.getFilename = function(blobOrFileInput) {\n /*jslint regexp: true*/\n\n if (qq.isInput(blobOrFileInput)) {\n // get input value and remove path to normalize\n return blobOrFileInput.value.replace(/.*(\\/|\\\\)/, \"\");\n }\n else if (qq.isFile(blobOrFileInput)) {\n if (blobOrFileInput.fileName !== null && blobOrFileInput.fileName !== undefined) {\n return blobOrFileInput.fileName;\n }\n }\n\n return blobOrFileInput.name;\n };\n\n /**\n * A generic module which supports object disposing in dispose() method.\n * */\n qq.DisposeSupport = function() {\n var disposers = [];\n\n return {\n /** Run all registered disposers */\n dispose: function() {\n var disposer;\n do {\n disposer = disposers.shift();\n if (disposer) {\n disposer();\n }\n }\n while (disposer);\n },\n\n /** Attach event handler and register de-attacher as a disposer */\n attach: function() {\n var args = arguments;\n /*jslint undef:true*/\n this.addDisposer(qq(args[0]).attach.apply(this, Array.prototype.slice.call(arguments, 1)));\n },\n\n /** Add disposer to the collection */\n addDisposer: function(disposeFunction) {\n disposers.push(disposeFunction);\n }\n };\n };\n}());\n","/* globals define, module, global, qq */\n(function() {\n \"use strict\";\n if (typeof define === \"function\" && define.amd) {\n define(function() {\n return qq;\n });\n }\n else if (typeof module !== \"undefined\" && module.exports) {\n module.exports = qq;\n }\n else {\n global.qq = qq;\n }\n}());\n","/*global qq */\nqq.version = \"5.16.2\";\n","/* globals qq */\nqq.supportedFeatures = (function() {\n \"use strict\";\n\n var supportsUploading,\n supportsUploadingBlobs,\n supportsFileDrop,\n supportsAjaxFileUploading,\n supportsFolderDrop,\n supportsChunking,\n supportsResume,\n supportsUploadViaPaste,\n supportsUploadCors,\n supportsDeleteFileXdr,\n supportsDeleteFileCorsXhr,\n supportsDeleteFileCors,\n supportsFolderSelection,\n supportsImagePreviews,\n supportsUploadProgress;\n\n function testSupportsFileInputElement() {\n var supported = true,\n tempInput;\n\n try {\n tempInput = document.createElement(\"input\");\n tempInput.type = \"file\";\n qq(tempInput).hide();\n\n if (tempInput.disabled) {\n supported = false;\n }\n }\n catch (ex) {\n supported = false;\n }\n\n return supported;\n }\n\n //only way to test for complete Clipboard API support at this time\n function isChrome14OrHigher() {\n return (qq.chrome() || qq.opera()) &&\n navigator.userAgent.match(/Chrome\\/[1][4-9]|Chrome\\/[2-9][0-9]/) !== undefined;\n }\n\n //Ensure we can send cross-origin `XMLHttpRequest`s\n function isCrossOriginXhrSupported() {\n if (window.XMLHttpRequest) {\n var xhr = qq.createXhrInstance();\n\n //Commonly accepted test for XHR CORS support.\n return xhr.withCredentials !== undefined;\n }\n\n return false;\n }\n\n //Test for (terrible) cross-origin ajax transport fallback for IE9 and IE8\n function isXdrSupported() {\n return window.XDomainRequest !== undefined;\n }\n\n // CORS Ajax requests are supported if it is either possible to send credentialed `XMLHttpRequest`s,\n // or if `XDomainRequest` is an available alternative.\n function isCrossOriginAjaxSupported() {\n if (isCrossOriginXhrSupported()) {\n return true;\n }\n\n return isXdrSupported();\n }\n\n function isFolderSelectionSupported() {\n // We know that folder selection is only supported in Chrome via this proprietary attribute for now\n return document.createElement(\"input\").webkitdirectory !== undefined;\n }\n\n function isLocalStorageSupported() {\n try {\n return !!window.localStorage &&\n // unpatched versions of IE10/11 have buggy impls of localStorage where setItem is a string\n qq.isFunction(window.localStorage.setItem);\n }\n catch (error) {\n // probably caught a security exception, so no localStorage for you\n return false;\n }\n }\n\n function isDragAndDropSupported() {\n var span = document.createElement(\"span\");\n\n return (\"draggable\" in span || (\"ondragstart\" in span && \"ondrop\" in span)) &&\n !qq.android() && !qq.ios();\n }\n\n supportsUploading = testSupportsFileInputElement();\n\n supportsAjaxFileUploading = supportsUploading && qq.isXhrUploadSupported();\n\n supportsUploadingBlobs = supportsAjaxFileUploading && !qq.androidStock();\n\n supportsFileDrop = supportsAjaxFileUploading && isDragAndDropSupported();\n\n // adapted from https://stackoverflow.com/a/23278460/486979\n supportsFolderDrop = supportsFileDrop && (function() {\n var input = document.createElement(\"input\");\n\n input.type = \"file\";\n return !!(\"webkitdirectory\" in (input || document.querySelectorAll(\"input[type=file]\")[0]));\n }());\n\n supportsChunking = supportsAjaxFileUploading && qq.isFileChunkingSupported();\n\n supportsResume = supportsAjaxFileUploading && supportsChunking && isLocalStorageSupported();\n\n supportsUploadViaPaste = supportsAjaxFileUploading && isChrome14OrHigher();\n\n supportsUploadCors = supportsUploading && (window.postMessage !== undefined || supportsAjaxFileUploading);\n\n supportsDeleteFileCorsXhr = isCrossOriginXhrSupported();\n\n supportsDeleteFileXdr = isXdrSupported();\n\n supportsDeleteFileCors = isCrossOriginAjaxSupported();\n\n supportsFolderSelection = isFolderSelectionSupported();\n\n supportsImagePreviews = supportsAjaxFileUploading && window.FileReader !== undefined;\n\n supportsUploadProgress = (function() {\n if (supportsAjaxFileUploading) {\n return !qq.androidStock() && !qq.iosChrome();\n }\n return false;\n }());\n\n return {\n ajaxUploading: supportsAjaxFileUploading,\n blobUploading: supportsUploadingBlobs,\n canDetermineSize: supportsAjaxFileUploading,\n chunking: supportsChunking,\n deleteFileCors: supportsDeleteFileCors,\n deleteFileCorsXdr: supportsDeleteFileXdr, //NOTE: will also return true in IE10, where XDR is also supported\n deleteFileCorsXhr: supportsDeleteFileCorsXhr,\n dialogElement: !!window.HTMLDialogElement,\n fileDrop: supportsFileDrop,\n folderDrop: supportsFolderDrop,\n folderSelection: supportsFolderSelection,\n imagePreviews: supportsImagePreviews,\n imageValidation: supportsImagePreviews,\n itemSizeValidation: supportsAjaxFileUploading,\n pause: supportsChunking,\n progressBar: supportsUploadProgress,\n resume: supportsResume,\n scaling: supportsImagePreviews && supportsUploadingBlobs,\n tiffPreviews: qq.safari(), // Not the best solution, but simple and probably accurate enough (for now)\n unlimitedScaledImageSize: !qq.ios(), // false simply indicates that there is some known limit\n uploading: supportsUploading,\n uploadCors: supportsUploadCors,\n uploadCustomHeaders: supportsAjaxFileUploading,\n uploadNonMultipart: supportsAjaxFileUploading,\n uploadViaPaste: supportsUploadViaPaste\n };\n\n}());\n","/*globals qq*/\n\n// Is the passed object a promise instance?\nqq.isGenericPromise = function(maybePromise) {\n \"use strict\";\n return !!(maybePromise && maybePromise.then && qq.isFunction(maybePromise.then));\n};\n\nqq.Promise = function() {\n \"use strict\";\n\n var successArgs, failureArgs,\n successCallbacks = [],\n failureCallbacks = [],\n doneCallbacks = [],\n state = 0;\n\n qq.extend(this, {\n then: function(onSuccess, onFailure) {\n if (state === 0) {\n if (onSuccess) {\n successCallbacks.push(onSuccess);\n }\n if (onFailure) {\n failureCallbacks.push(onFailure);\n }\n }\n else if (state === -1) {\n onFailure && onFailure.apply(null, failureArgs);\n }\n else if (onSuccess) {\n onSuccess.apply(null, successArgs);\n }\n\n return this;\n },\n\n done: function(callback) {\n if (state === 0) {\n doneCallbacks.push(callback);\n }\n else {\n callback.apply(null, failureArgs === undefined ? successArgs : failureArgs);\n }\n\n return this;\n },\n\n success: function() {\n state = 1;\n successArgs = arguments;\n\n if (successCallbacks.length) {\n qq.each(successCallbacks, function(idx, callback) {\n callback.apply(null, successArgs);\n });\n }\n\n if (doneCallbacks.length) {\n qq.each(doneCallbacks, function(idx, callback) {\n callback.apply(null, successArgs);\n });\n }\n\n return this;\n },\n\n failure: function() {\n state = -1;\n failureArgs = arguments;\n\n if (failureCallbacks.length) {\n qq.each(failureCallbacks, function(idx, callback) {\n callback.apply(null, failureArgs);\n });\n }\n\n if (doneCallbacks.length) {\n qq.each(doneCallbacks, function(idx, callback) {\n callback.apply(null, failureArgs);\n });\n }\n\n return this;\n }\n });\n};\n","/*globals qq, document, CustomEvent*/\nqq.DragAndDrop = function(o) {\n \"use strict\";\n\n var options,\n HIDE_ZONES_EVENT_NAME = \"qq-hidezones\",\n HIDE_BEFORE_ENTER_ATTR = \"qq-hide-dropzone\",\n uploadDropZones = [],\n droppedFiles = [],\n disposeSupport = new qq.DisposeSupport();\n\n options = {\n dropZoneElements: [],\n allowMultipleItems: true,\n classes: {\n dropActive: null\n },\n callbacks: new qq.DragAndDrop.callbacks()\n };\n\n qq.extend(options, o, true);\n\n function uploadDroppedFiles(files, uploadDropZone) {\n // We need to convert the `FileList` to an actual `Array` to avoid iteration issues\n var filesAsArray = Array.prototype.slice.call(files);\n\n options.callbacks.dropLog(\"Grabbed \" + files.length + \" dropped files.\");\n uploadDropZone.dropDisabled(false);\n options.callbacks.processingDroppedFilesComplete(filesAsArray, uploadDropZone.getElement());\n }\n\n function traverseFileTree(entry) {\n var parseEntryPromise = new qq.Promise();\n\n if (entry.isFile) {\n entry.file(function(file) {\n file.qqPath = extractDirectoryPath(entry);\n droppedFiles.push(file);\n parseEntryPromise.success();\n },\n function(fileError) {\n options.callbacks.dropLog(\"Problem parsing '\" + entry.fullPath + \"'. FileError code \" + fileError.code + \".\", \"error\");\n parseEntryPromise.failure();\n });\n }\n else if (entry.isDirectory) {\n getFilesInDirectory(entry).then(\n function allEntriesRead(entries) {\n var entriesLeft = entries.length;\n\n qq.each(entries, function(idx, entry) {\n traverseFileTree(entry).done(function() {\n entriesLeft -= 1;\n\n if (entriesLeft === 0) {\n parseEntryPromise.success();\n }\n });\n });\n\n if (!entries.length) {\n parseEntryPromise.success();\n }\n },\n\n function readFailure(fileError) {\n options.callbacks.dropLog(\"Problem parsing '\" + entry.fullPath + \"'. FileError code \" + fileError.code + \".\", \"error\");\n parseEntryPromise.failure();\n }\n );\n }\n\n return parseEntryPromise;\n }\n\n function extractDirectoryPath(entry) {\n var name = entry.name,\n fullPath = entry.fullPath,\n indexOfNameInFullPath = fullPath.lastIndexOf(name);\n\n // remove file name from full path string\n fullPath = fullPath.substr(0, indexOfNameInFullPath);\n\n // remove leading slash in full path string\n if (fullPath.charAt(0) === \"/\") {\n fullPath = fullPath.substr(1);\n }\n\n return fullPath;\n }\n\n // Promissory. Guaranteed to read all files in the root of the passed directory.\n function getFilesInDirectory(entry, reader, accumEntries, existingPromise) {\n var promise = existingPromise || new qq.Promise(),\n dirReader = reader || entry.createReader();\n\n dirReader.readEntries(\n function readSuccess(entries) {\n var newEntries = accumEntries ? accumEntries.concat(entries) : entries;\n\n if (entries.length) {\n setTimeout(function() { // prevent stack overflow, however unlikely\n getFilesInDirectory(entry, dirReader, newEntries, promise);\n }, 0);\n }\n else {\n promise.success(newEntries);\n }\n },\n\n promise.failure\n );\n\n return promise;\n }\n\n function handleDataTransfer(dataTransfer, uploadDropZone) {\n var pendingFolderPromises = [],\n handleDataTransferPromise = new qq.Promise();\n\n options.callbacks.processingDroppedFiles();\n uploadDropZone.dropDisabled(true);\n\n if (dataTransfer.files.length > 1 && !options.allowMultipleItems) {\n options.callbacks.processingDroppedFilesComplete([]);\n options.callbacks.dropError(\"tooManyFilesError\", \"\");\n uploadDropZone.dropDisabled(false);\n handleDataTransferPromise.failure();\n }\n else {\n droppedFiles = [];\n\n if (qq.isFolderDropSupported(dataTransfer)) {\n qq.each(dataTransfer.items, function(idx, item) {\n var entry = item.webkitGetAsEntry();\n\n if (entry) {\n //due to a bug in Chrome's File System API impl - #149735\n if (entry.isFile) {\n droppedFiles.push(item.getAsFile());\n }\n\n else {\n pendingFolderPromises.push(traverseFileTree(entry).done(function() {\n pendingFolderPromises.pop();\n if (pendingFolderPromises.length === 0) {\n handleDataTransferPromise.success();\n }\n }));\n }\n }\n });\n }\n else {\n droppedFiles = dataTransfer.files;\n }\n\n if (pendingFolderPromises.length === 0) {\n handleDataTransferPromise.success();\n }\n }\n\n return handleDataTransferPromise;\n }\n\n function setupDropzone(dropArea) {\n var dropZone = new qq.UploadDropZone({\n HIDE_ZONES_EVENT_NAME: HIDE_ZONES_EVENT_NAME,\n element: dropArea,\n onEnter: function(e) {\n qq(dropArea).addClass(options.classes.dropActive);\n e.stopPropagation();\n },\n onLeaveNotDescendants: function(e) {\n qq(dropArea).removeClass(options.classes.dropActive);\n },\n onDrop: function(e) {\n handleDataTransfer(e.dataTransfer, dropZone).then(\n function() {\n uploadDroppedFiles(droppedFiles, dropZone);\n },\n function() {\n options.callbacks.dropLog(\"Drop event DataTransfer parsing failed. No files will be uploaded.\", \"error\");\n }\n );\n }\n });\n\n disposeSupport.addDisposer(function() {\n dropZone.dispose();\n });\n\n qq(dropArea).hasAttribute(HIDE_BEFORE_ENTER_ATTR) && qq(dropArea).hide();\n\n uploadDropZones.push(dropZone);\n\n return dropZone;\n }\n\n function isFileDrag(dragEvent) {\n var fileDrag;\n\n qq.each(dragEvent.dataTransfer.types, function(key, val) {\n if (val === \"Files\") {\n fileDrag = true;\n return false;\n }\n });\n\n return fileDrag;\n }\n\n // Attempt to determine when the file has left the document. It is not always possible to detect this\n // in all cases, but it is generally possible in all browsers, with a few exceptions.\n //\n // Exceptions:\n // * IE10+ & Safari: We can't detect a file leaving the document if the Explorer window housing the file\n // overlays the browser window.\n // * IE10+: If the file is dragged out of the window too quickly, IE does not set the expected values of the\n // event's X & Y properties.\n function leavingDocumentOut(e) {\n if (qq.safari()) {\n return e.x < 0 || e.y < 0;\n }\n\n return e.x === 0 && e.y === 0;\n }\n\n function setupDragDrop() {\n var dropZones = options.dropZoneElements,\n\n maybeHideDropZones = function() {\n setTimeout(function() {\n qq.each(dropZones, function(idx, dropZone) {\n qq(dropZone).hasAttribute(HIDE_BEFORE_ENTER_ATTR) && qq(dropZone).hide();\n qq(dropZone).removeClass(options.classes.dropActive);\n });\n }, 10);\n };\n\n qq.each(dropZones, function(idx, dropZone) {\n var uploadDropZone = setupDropzone(dropZone);\n\n // IE <= 9 does not support the File API used for drag+drop uploads\n if (dropZones.length && qq.supportedFeatures.fileDrop) {\n disposeSupport.attach(document, \"dragenter\", function(e) {\n if (!uploadDropZone.dropDisabled() && isFileDrag(e)) {\n qq.each(dropZones, function(idx, dropZone) {\n // We can't apply styles to non-HTMLElements, since they lack the `style` property.\n // Also, if the drop zone isn't initially hidden, let's not mess with `style.display`.\n if (dropZone instanceof HTMLElement &&\n qq(dropZone).hasAttribute(HIDE_BEFORE_ENTER_ATTR)) {\n\n qq(dropZone).css({display: \"block\"});\n }\n });\n }\n });\n }\n });\n\n disposeSupport.attach(document, \"dragleave\", function(e) {\n if (leavingDocumentOut(e)) {\n maybeHideDropZones();\n }\n });\n\n // Just in case we were not able to detect when a dragged file has left the document,\n // hide all relevant drop zones the next time the mouse enters the document.\n // Note that mouse events such as this one are not fired during drag operations.\n disposeSupport.attach(qq(document).children()[0], \"mouseenter\", function(e) {\n maybeHideDropZones();\n });\n\n disposeSupport.attach(document, \"drop\", function(e) {\n if (isFileDrag(e)) {\n e.preventDefault();\n maybeHideDropZones();\n }\n });\n\n disposeSupport.attach(document, HIDE_ZONES_EVENT_NAME, maybeHideDropZones);\n }\n\n setupDragDrop();\n\n qq.extend(this, {\n setupExtraDropzone: function(element) {\n options.dropZoneElements.push(element);\n setupDropzone(element);\n },\n\n removeDropzone: function(element) {\n var i,\n dzs = options.dropZoneElements;\n\n for (i in dzs) {\n if (dzs[i] === element) {\n return dzs.splice(i, 1);\n }\n }\n },\n\n dispose: function() {\n disposeSupport.dispose();\n qq.each(uploadDropZones, function(idx, dropZone) {\n dropZone.dispose();\n });\n }\n });\n\n this._testing = {};\n this._testing.extractDirectoryPath = extractDirectoryPath;\n};\n\nqq.DragAndDrop.callbacks = function() {\n \"use strict\";\n\n return {\n processingDroppedFiles: function() {},\n processingDroppedFilesComplete: function(files, targetEl) {},\n dropError: function(code, errorSpecifics) {\n qq.log(\"Drag & drop error code '\" + code + \" with these specifics: '\" + errorSpecifics + \"'\", \"error\");\n },\n dropLog: function(message, level) {\n qq.log(message, level);\n }\n };\n};\n\nqq.UploadDropZone = function(o) {\n \"use strict\";\n\n var disposeSupport = new qq.DisposeSupport(),\n options, element, preventDrop, dropOutsideDisabled;\n\n options = {\n element: null,\n onEnter: function(e) {},\n onLeave: function(e) {},\n // is not fired when leaving element by hovering descendants\n onLeaveNotDescendants: function(e) {},\n onDrop: function(e) {}\n };\n\n qq.extend(options, o);\n element = options.element;\n\n function dragoverShouldBeCanceled() {\n return qq.safari() || (qq.firefox() && qq.windows());\n }\n\n function disableDropOutside(e) {\n // run only once for all instances\n if (!dropOutsideDisabled) {\n\n // for these cases we need to catch onDrop to reset dropArea\n if (dragoverShouldBeCanceled) {\n disposeSupport.attach(document, \"dragover\", function(e) {\n e.preventDefault();\n });\n } else {\n disposeSupport.attach(document, \"dragover\", function(e) {\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = \"none\";\n e.preventDefault();\n }\n });\n }\n\n dropOutsideDisabled = true;\n }\n }\n\n function isValidFileDrag(e) {\n // e.dataTransfer currently causing IE errors\n // IE9 does NOT support file API, so drag-and-drop is not possible\n if (!qq.supportedFeatures.fileDrop) {\n return false;\n }\n\n var effectTest, dt = e.dataTransfer,\n // do not check dt.types.contains in webkit, because it crashes safari 4\n isSafari = qq.safari();\n\n // dt.effectAllowed is none in Safari 5\n\n // dt.effectAllowed crashes IE 11 & 10 when files have been dragged from\n // the filesystem\n effectTest = qq.ie() && qq.supportedFeatures.fileDrop ? true : dt.effectAllowed !== \"none\";\n return dt && effectTest &&\n (\n (dt.files && dt.files.length) || // Valid for drop events with files\n (!isSafari && dt.types.contains && dt.types.contains(\"Files\")) || // Valid in Chrome/Firefox\n (dt.types.includes && dt.types.includes(\"Files\")) // Valid in IE\n );\n }\n\n function isOrSetDropDisabled(isDisabled) {\n if (isDisabled !== undefined) {\n preventDrop = isDisabled;\n }\n return preventDrop;\n }\n\n function triggerHidezonesEvent() {\n var hideZonesEvent;\n\n function triggerUsingOldApi() {\n hideZonesEvent = document.createEvent(\"Event\");\n hideZonesEvent.initEvent(options.HIDE_ZONES_EVENT_NAME, true, true);\n }\n\n if (window.CustomEvent) {\n try {\n hideZonesEvent = new CustomEvent(options.HIDE_ZONES_EVENT_NAME);\n }\n catch (err) {\n triggerUsingOldApi();\n }\n }\n else {\n triggerUsingOldApi();\n }\n\n document.dispatchEvent(hideZonesEvent);\n }\n\n function attachEvents() {\n disposeSupport.attach(element, \"dragover\", function(e) {\n if (!isValidFileDrag(e)) {\n return;\n }\n\n // dt.effectAllowed crashes IE 11 & 10 when files have been dragged from\n // the filesystem\n var effect = qq.ie() && qq.supportedFeatures.fileDrop ? null : e.dataTransfer.effectAllowed;\n if (effect === \"move\" || effect === \"linkMove\") {\n e.dataTransfer.dropEffect = \"move\"; // for FF (only move allowed)\n } else {\n e.dataTransfer.dropEffect = \"copy\"; // for Chrome\n }\n\n e.stopPropagation();\n e.preventDefault();\n });\n\n disposeSupport.attach(element, \"dragenter\", function(e) {\n if (!isOrSetDropDisabled()) {\n if (!isValidFileDrag(e)) {\n return;\n }\n options.onEnter(e);\n }\n });\n\n disposeSupport.attach(element, \"dragleave\", function(e) {\n if (!isValidFileDrag(e)) {\n return;\n }\n\n options.onLeave(e);\n\n var relatedTarget = document.elementFromPoint(e.clientX, e.clientY);\n // do not fire when moving a mouse over a descendant\n if (qq(this).contains(relatedTarget)) {\n return;\n }\n\n options.onLeaveNotDescendants(e);\n });\n\n disposeSupport.attach(element, \"drop\", function(e) {\n if (!isOrSetDropDisabled()) {\n if (!isValidFileDrag(e)) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n options.onDrop(e);\n\n triggerHidezonesEvent();\n }\n });\n }\n\n disableDropOutside();\n attachEvents();\n\n qq.extend(this, {\n dropDisabled: function(isDisabled) {\n return isOrSetDropDisabled(isDisabled);\n },\n\n dispose: function() {\n disposeSupport.dispose();\n },\n\n getElement: function() {\n return element;\n }\n });\n\n this._testing = {};\n this._testing.isValidFileDrag = isValidFileDrag;\n};\n"]} \ No newline at end of file diff --git a/styles/bootstrap/fine-uploader/dnd.min.js b/styles/bootstrap/fine-uploader/dnd.min.js index 1841817de..bad4e2de0 100644 --- a/styles/bootstrap/fine-uploader/dnd.min.js +++ b/styles/bootstrap/fine-uploader/dnd.min.js @@ -1,3 +1,3 @@ -// Fine Uploader 5.12.0 - (c) 2013-present Widen Enterprises, Inc. MIT licensed. http://fineuploader.com -!function(global){var qq=function(e){"use strict";return{hide:function(){return e.style.display="none",this},attach:function(n,t){return e.addEventListener?e.addEventListener(n,t,!1):e.attachEvent&&e.attachEvent("on"+n,t),function(){qq(e).detach(n,t)}},detach:function(n,t){return e.removeEventListener?e.removeEventListener(n,t,!1):e.attachEvent&&e.detachEvent("on"+n,t),this},contains:function(n){return!!n&&(e===n||(e.contains?e.contains(n):!!(8&n.compareDocumentPosition(e))))},insertBefore:function(n){return n.parentNode.insertBefore(e,n),this},remove:function(){return e.parentNode.removeChild(e),this},css:function(n){if(null==e.style)throw new qq.Error("Can't apply style to node as it is not on the HTMLElement prototype chain!");return null!=n.opacity&&"string"!=typeof e.style.opacity&&"undefined"!=typeof e.filters&&(n.filter="alpha(opacity="+Math.round(100*n.opacity)+")"),qq.extend(e.style,n),this},hasClass:function(n,t){var r=new RegExp("(^| )"+n+"( |$)");return r.test(e.className)||!(!t||!r.test(e.parentNode.className))},addClass:function(n){return qq(e).hasClass(n)||(e.className+=" "+n),this},removeClass:function(n){var t=new RegExp("(^| )"+n+"( |$)");return e.className=e.className.replace(t," ").replace(/^\s+|\s+$/g,""),this},getByClass:function(n,t){var r,o=[];return t&&e.querySelector?e.querySelector("."+n):e.querySelectorAll?e.querySelectorAll("."+n):(r=e.getElementsByTagName("*"),qq.each(r,function(e,t){qq(t).hasClass(n)&&o.push(t)}),t?o[0]:o)},getFirstByClass:function(n){return qq(e).getByClass(n,!0)},children:function(){for(var n=[],t=e.firstChild;t;)1===t.nodeType&&n.push(t),t=t.nextSibling;return n},setText:function(n){return e.innerText=n,e.textContent=n,this},clearText:function(){return qq(e).setText("")},hasAttribute:function(n){var t;return e.hasAttribute?!!e.hasAttribute(n)&&null==/^false$/i.exec(e.getAttribute(n)):(t=e[n],void 0!==t&&null==/^false$/i.exec(t))}}};!function(){"use strict";qq.canvasToBlob=function(e,n,t){return qq.dataUriToBlob(e.toDataURL(n,t))},qq.dataUriToBlob=function(e){var n,t,r,o,i=function(e,n){var t=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,r=t&&new t;return r?(r.append(e),r.getBlob(n)):new Blob([e],{type:n})};return t=e.split(",")[0].indexOf("base64")>=0?atob(e.split(",")[1]):decodeURI(e.split(",")[1]),o=e.split(",")[0].split(":")[1].split(";")[0],n=new ArrayBuffer(t.length),r=new Uint8Array(n),qq.each(t,function(e,n){r[e]=n.charCodeAt(0)}),i(n,o)},qq.log=function(e,n){window.console&&(n&&"info"!==n?window.console[n]?window.console[n](e):window.console.log("<"+n+"> "+e):window.console.log(e))},qq.isObject=function(e){return e&&!e.nodeType&&"[object Object]"===Object.prototype.toString.call(e)},qq.isFunction=function(e){return"function"==typeof e},qq.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)||e&&window.ArrayBuffer&&e.buffer&&e.buffer.constructor===ArrayBuffer},qq.isItemList=function(e){return"[object DataTransferItemList]"===Object.prototype.toString.call(e)},qq.isNodeList=function(e){return"[object NodeList]"===Object.prototype.toString.call(e)||e.item&&e.namedItem},qq.isString=function(e){return"[object String]"===Object.prototype.toString.call(e)},qq.trimStr=function(e){return String.prototype.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},qq.format=function(e){var n=Array.prototype.slice.call(arguments,1),t=e,r=t.indexOf("{}");return qq.each(n,function(e,n){var o=t.substring(0,r),i=t.substring(r+2);if(t=o+n+i,r=t.indexOf("{}",r+n.length),r<0)return!1}),t},qq.isFile=function(e){return window.File&&"[object File]"===Object.prototype.toString.call(e)},qq.isFileList=function(e){return window.FileList&&"[object FileList]"===Object.prototype.toString.call(e)},qq.isFileOrInput=function(e){return qq.isFile(e)||qq.isInput(e)},qq.isInput=function(e,n){var t=function(e){var t=e.toLowerCase();return n?"file"!==t:"file"===t};return!!(window.HTMLInputElement&&"[object HTMLInputElement]"===Object.prototype.toString.call(e)&&e.type&&t(e.type))||!!(e.tagName&&"input"===e.tagName.toLowerCase()&&e.type&&t(e.type))},qq.isBlob=function(e){if(window.Blob&&"[object Blob]"===Object.prototype.toString.call(e))return!0},qq.isXhrUploadSupported=function(){var e=document.createElement("input");return e.type="file",void 0!==e.multiple&&"undefined"!=typeof File&&"undefined"!=typeof FormData&&"undefined"!=typeof qq.createXhrInstance().upload},qq.createXhrInstance=function(){if(window.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("MSXML2.XMLHTTP.3.0")}catch(e){return qq.log("Neither XHR or ActiveX are supported!","error"),null}},qq.isFolderDropSupported=function(e){return e.items&&e.items.length>0&&e.items[0].webkitGetAsEntry},qq.isFileChunkingSupported=function(){return!qq.androidStock()&&qq.isXhrUploadSupported()&&(void 0!==File.prototype.slice||void 0!==File.prototype.webkitSlice||void 0!==File.prototype.mozSlice)},qq.sliceBlob=function(e,n,t){var r=e.slice||e.mozSlice||e.webkitSlice;return r.call(e,n,t)},qq.arrayBufferToHex=function(e){var n="",t=new Uint8Array(e);return qq.each(t,function(e,t){var r=t.toString(16);r.length<2&&(r="0"+r),n+=r}),n},qq.readBlobToHex=function(e,n,t){var r=qq.sliceBlob(e,n,n+t),o=new FileReader,i=new qq.Promise;return o.onload=function(){i.success(qq.arrayBufferToHex(o.result))},o.onerror=i.failure,o.readAsArrayBuffer(r),i},qq.extend=function(e,n,t){return qq.each(n,function(n,r){t&&qq.isObject(r)?(void 0===e[n]&&(e[n]={}),qq.extend(e[n],r,!0)):e[n]=r}),e},qq.override=function(e,n){var t={},r=n(t);return qq.each(r,function(n,r){void 0!==e[n]&&(t[n]=e[n]),e[n]=r}),e},qq.indexOf=function(e,n,t){if(e.indexOf)return e.indexOf(n,t);t=t||0;var r=e.length;for(t<0&&(t+=r);t=0},qq.safari=function(){return void 0!==navigator.vendor&&navigator.vendor.indexOf("Apple")!==-1},qq.chrome=function(){return void 0!==navigator.vendor&&navigator.vendor.indexOf("Google")!==-1},qq.opera=function(){return void 0!==navigator.vendor&&navigator.vendor.indexOf("Opera")!==-1},qq.firefox=function(){return!qq.edge()&&!qq.ie11()&&navigator.userAgent.indexOf("Mozilla")!==-1&&void 0!==navigator.vendor&&""===navigator.vendor},qq.windows=function(){return"Win32"===navigator.platform},qq.android=function(){return navigator.userAgent.toLowerCase().indexOf("android")!==-1},qq.androidStock=function(){return qq.android()&&navigator.userAgent.toLowerCase().indexOf("chrome")<0},qq.ios6=function(){return qq.ios()&&navigator.userAgent.indexOf(" OS 6_")!==-1},qq.ios7=function(){return qq.ios()&&navigator.userAgent.indexOf(" OS 7_")!==-1},qq.ios8=function(){return qq.ios()&&navigator.userAgent.indexOf(" OS 8_")!==-1},qq.ios800=function(){return qq.ios()&&navigator.userAgent.indexOf(" OS 8_0 ")!==-1},qq.ios=function(){return navigator.userAgent.indexOf("iPad")!==-1||navigator.userAgent.indexOf("iPod")!==-1||navigator.userAgent.indexOf("iPhone")!==-1},qq.iosChrome=function(){return qq.ios()&&navigator.userAgent.indexOf("CriOS")!==-1},qq.iosSafari=function(){return qq.ios()&&!qq.iosChrome()&&navigator.userAgent.indexOf("Safari")!==-1},qq.iosSafariWebView=function(){return qq.ios()&&!qq.iosChrome()&&!qq.iosSafari()},qq.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},qq.toElement=function(){var e=document.createElement("div");return function(n){e.innerHTML=n;var t=e.firstChild;return e.removeChild(t),t}}(),qq.each=function(e,n){var t,r;if(e)if(window.Storage&&e.constructor===window.Storage)for(t=0;t0)return e.substr(n,e.length-n)},qq.getFilename=function(e){return qq.isInput(e)?e.value.replace(/.*(\/|\\)/,""):qq.isFile(e)&&null!==e.fileName&&void 0!==e.fileName?e.fileName:e.name},qq.DisposeSupport=function(){var e=[];return{dispose:function(){var n;do n=e.shift(),n&&n();while(n)},attach:function(){var e=arguments;this.addDisposer(qq(e[0]).attach.apply(this,Array.prototype.slice.call(arguments,1)))},addDisposer:function(n){e.push(n)}}}}(),function(){"use strict";"function"==typeof define&&define.amd?define(function(){return qq}):"undefined"!=typeof module&&module.exports?module.exports=qq:global.qq=qq}(),qq.version="5.12.0",qq.supportedFeatures=function(){"use strict";function e(){var e,n=!0;try{e=document.createElement("input"),e.type="file",qq(e).hide(),e.disabled&&(n=!1)}catch(e){n=!1}return n}function n(){return(qq.chrome()||qq.opera())&&void 0!==navigator.userAgent.match(/Chrome\/[2][1-9]|Chrome\/[3-9][0-9]/)}function t(){return(qq.chrome()||qq.opera())&&void 0!==navigator.userAgent.match(/Chrome\/[1][4-9]|Chrome\/[2-9][0-9]/)}function r(){if(window.XMLHttpRequest){var e=qq.createXhrInstance();return void 0!==e.withCredentials}return!1}function o(){return void 0!==window.XDomainRequest}function i(){return!!r()||o()}function a(){return void 0!==document.createElement("input").webkitdirectory}function u(){try{return!!window.localStorage&&qq.isFunction(window.localStorage.setItem)}catch(e){return!1}}function c(){var e=document.createElement("span");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&!qq.android()&&!qq.ios()}var s,l,q,f,d,p,g,v,h,m,y,b,w,x,E;return s=e(),f=s&&qq.isXhrUploadSupported(),l=f&&!qq.androidStock(),q=f&&c(),d=q&&n(),p=f&&qq.isFileChunkingSupported(),g=f&&p&&u(),v=f&&t(),h=s&&(void 0!==window.postMessage||f),y=r(),m=o(),b=i(),w=a(),x=f&&void 0!==window.FileReader,E=function(){return!!f&&(!qq.androidStock()&&!qq.iosChrome())}(),{ajaxUploading:f,blobUploading:l,canDetermineSize:f,chunking:p,deleteFileCors:b,deleteFileCorsXdr:m,deleteFileCorsXhr:y,dialogElement:!!window.HTMLDialogElement,fileDrop:q,folderDrop:d,folderSelection:w,imagePreviews:x,imageValidation:x,itemSizeValidation:f,pause:p,progressBar:E,resume:g,scaling:x&&l,tiffPreviews:qq.safari(),unlimitedScaledImageSize:!qq.ios(),uploading:s,uploadCors:h,uploadCustomHeaders:f,uploadNonMultipart:f,uploadViaPaste:v}}(),qq.isGenericPromise=function(e){"use strict";return!!(e&&e.then&&qq.isFunction(e.then))},qq.Promise=function(){"use strict";var e,n,t=[],r=[],o=[],i=0;qq.extend(this,{then:function(o,a){return 0===i?(o&&t.push(o),a&&r.push(a)):i===-1?a&&a.apply(null,n):o&&o.apply(null,e),this},done:function(t){return 0===i?o.push(t):t.apply(null,void 0===n?e:n),this},success:function(){return i=1,e=arguments,t.length&&qq.each(t,function(n,t){t.apply(null,e)}),o.length&&qq.each(o,function(n,t){t.apply(null,e)}),this},failure:function(){return i=-1,n=arguments,r.length&&qq.each(r,function(e,t){t.apply(null,n)}),o.length&&qq.each(o,function(e,t){t.apply(null,n)}),this}})},qq.DragAndDrop=function(e){"use strict";function n(e,n){var t=Array.prototype.slice.call(e);s.callbacks.dropLog("Grabbed "+e.length+" dropped files."),n.dropDisabled(!1),s.callbacks.processingDroppedFilesComplete(t,n.getElement())}function t(e){var n=new qq.Promise;return e.isFile?e.file(function(t){var r=e.name,o=e.fullPath,i=o.indexOf(r);o=o.substr(0,i),"/"===o.charAt(0)&&(o=o.substr(1)),t.qqPath=o,d.push(t),n.success()},function(t){s.callbacks.dropLog("Problem parsing '"+e.fullPath+"'. FileError code "+t.code+".","error"),n.failure()}):e.isDirectory&&r(e).then(function(e){var r=e.length;qq.each(e,function(e,o){t(o).done(function(){r-=1,0===r&&n.success()})}),e.length||n.success()},function(t){s.callbacks.dropLog("Problem parsing '"+e.fullPath+"'. FileError code "+t.code+".","error"),n.failure()}),n}function r(e,n,t,o){var i=o||new qq.Promise,a=n||e.createReader();return a.readEntries(function(n){var o=t?t.concat(n):n;n.length?setTimeout(function(){r(e,a,o,i)},0):i.success(o)},i.failure),i}function o(e,n){var r=[],o=new qq.Promise;return s.callbacks.processingDroppedFiles(),n.dropDisabled(!0),e.files.length>1&&!s.allowMultipleItems?(s.callbacks.processingDroppedFilesComplete([]),s.callbacks.dropError("tooManyFilesError",""),n.dropDisabled(!1),o.failure()):(d=[],qq.isFolderDropSupported(e)?qq.each(e.items,function(e,n){var i=n.webkitGetAsEntry();i&&(i.isFile?d.push(n.getAsFile()):r.push(t(i).done(function(){r.pop(),0===r.length&&o.success()})))}):d=e.files,0===r.length&&o.success()),o}function i(e){var t=new qq.UploadDropZone({HIDE_ZONES_EVENT_NAME:l,element:e,onEnter:function(n){qq(e).addClass(s.classes.dropActive),n.stopPropagation()},onLeaveNotDescendants:function(n){qq(e).removeClass(s.classes.dropActive)},onDrop:function(e){o(e.dataTransfer,t).then(function(){n(d,t)},function(){s.callbacks.dropLog("Drop event DataTransfer parsing failed. No files will be uploaded.","error")})}});return p.addDisposer(function(){t.dispose()}),qq(e).hasAttribute(q)&&qq(e).hide(),f.push(t),t}function a(e){var n;return qq.each(e.dataTransfer.types,function(e,t){if("Files"===t)return n=!0,!1}),n}function u(e){return qq.firefox()?!e.relatedTarget:qq.safari()?e.x<0||e.y<0:0===e.x&&0===e.y}function c(){var e=s.dropZoneElements,n=function(){setTimeout(function(){qq.each(e,function(e,n){qq(n).hasAttribute(q)&&qq(n).hide(),qq(n).removeClass(s.classes.dropActive)})},10)};qq.each(e,function(n,t){var r=i(t);e.length&&qq.supportedFeatures.fileDrop&&p.attach(document,"dragenter",function(n){!r.dropDisabled()&&a(n)&&qq.each(e,function(e,n){n instanceof HTMLElement&&qq(n).hasAttribute(q)&&qq(n).css({display:"block"})})})}),p.attach(document,"dragleave",function(e){u(e)&&n()}),p.attach(qq(document).children()[0],"mouseenter",function(e){n()}),p.attach(document,"drop",function(e){e.preventDefault(),n()}),p.attach(document,l,n)}var s,l="qq-hidezones",q="qq-hide-dropzone",f=[],d=[],p=new qq.DisposeSupport;s={dropZoneElements:[],allowMultipleItems:!0,classes:{dropActive:null},callbacks:new qq.DragAndDrop.callbacks},qq.extend(s,e,!0),c(),qq.extend(this,{setupExtraDropzone:function(e){s.dropZoneElements.push(e),i(e)},removeDropzone:function(e){var n,t=s.dropZoneElements;for(n in t)if(t[n]===e)return t.splice(n,1)},dispose:function(){p.dispose(),qq.each(f,function(e,n){n.dispose()})}})},qq.DragAndDrop.callbacks=function(){"use strict";return{processingDroppedFiles:function(){},processingDroppedFilesComplete:function(e,n){},dropError:function(e,n){qq.log("Drag & drop error code '"+e+" with these specifics: '"+n+"'","error")},dropLog:function(e,n){qq.log(e,n)}}},qq.UploadDropZone=function(e){"use strict";function n(){return qq.safari()||qq.firefox()&&qq.windows()}function t(e){l||(n?q.attach(document,"dragover",function(e){e.preventDefault()}):q.attach(document,"dragover",function(e){e.dataTransfer&&(e.dataTransfer.dropEffect="none",e.preventDefault())}),l=!0)}function r(e){if(!qq.supportedFeatures.fileDrop)return!1;var n,t=e.dataTransfer,r=qq.safari();return n=!(!qq.ie()||!qq.supportedFeatures.fileDrop)||"none"!==t.effectAllowed,t&&n&&(t.files||!r&&t.types.contains&&t.types.contains("Files"))}function o(e){return void 0!==e&&(s=e),s}function i(){function e(){n=document.createEvent("Event"),n.initEvent(u.HIDE_ZONES_EVENT_NAME,!0,!0)}var n;if(window.CustomEvent)try{n=new CustomEvent(u.HIDE_ZONES_EVENT_NAME)}catch(n){e()}else e();document.dispatchEvent(n)}function a(){q.attach(c,"dragover",function(e){if(r(e)){var n=qq.ie()&&qq.supportedFeatures.fileDrop?null:e.dataTransfer.effectAllowed;"move"===n||"linkMove"===n?e.dataTransfer.dropEffect="move":e.dataTransfer.dropEffect="copy",e.stopPropagation(),e.preventDefault()}}),q.attach(c,"dragenter",function(e){if(!o()){if(!r(e))return;u.onEnter(e)}}),q.attach(c,"dragleave",function(e){if(r(e)){u.onLeave(e);var n=document.elementFromPoint(e.clientX,e.clientY);qq(this).contains(n)||u.onLeaveNotDescendants(e)}}),q.attach(c,"drop",function(e){if(!o()){if(!r(e))return;e.preventDefault(),e.stopPropagation(),u.onDrop(e),i()}})}var u,c,s,l,q=new qq.DisposeSupport;u={element:null,onEnter:function(e){},onLeave:function(e){},onLeaveNotDescendants:function(e){},onDrop:function(e){}},qq.extend(u,e),c=u.element,t(),a(),qq.extend(this,{dropDisabled:function(e){return o(e)},dispose:function(){q.dispose()},getElement:function(){return c}})}}(window); +// Fine Uploader 5.16.2 - MIT licensed. http://fineuploader.com +!function(global){var qq=function(e){"use strict";return{hide:function(){return e.style.display="none",this},attach:function(t,n){return e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on"+t,n),function(){qq(e).detach(t,n)}},detach:function(t,n){return e.removeEventListener?e.removeEventListener(t,n,!1):e.attachEvent&&e.detachEvent("on"+t,n),this},contains:function(t){return!!t&&(e===t||(e.contains?e.contains(t):!!(8&t.compareDocumentPosition(e))))},insertBefore:function(t){return t.parentNode.insertBefore(e,t),this},remove:function(){return e.parentNode.removeChild(e),this},css:function(t){if(null==e.style)throw new qq.Error("Can't apply style to node as it is not on the HTMLElement prototype chain!");return null!=t.opacity&&"string"!=typeof e.style.opacity&&void 0!==e.filters&&(t.filter="alpha(opacity="+Math.round(100*t.opacity)+")"),qq.extend(e.style,t),this},hasClass:function(t,n){var r=new RegExp("(^| )"+t+"( |$)");return r.test(e.className)||!(!n||!r.test(e.parentNode.className))},addClass:function(t){return qq(e).hasClass(t)||(e.className+=" "+t),this},removeClass:function(t){var n=new RegExp("(^| )"+t+"( |$)");return e.className=e.className.replace(n," ").replace(/^\s+|\s+$/g,""),this},getByClass:function(t,n){var r,o=[];return n&&e.querySelector?e.querySelector("."+t):e.querySelectorAll?e.querySelectorAll("."+t):(r=e.getElementsByTagName("*"),qq.each(r,function(e,n){qq(n).hasClass(t)&&o.push(n)}),n?o[0]:o)},getFirstByClass:function(t){return qq(e).getByClass(t,!0)},children:function(){for(var t=[],n=e.firstChild;n;)1===n.nodeType&&t.push(n),n=n.nextSibling;return t},setText:function(t){return e.innerText=t,e.textContent=t,this},clearText:function(){return qq(e).setText("")},hasAttribute:function(t){var n;return e.hasAttribute?!!e.hasAttribute(t)&&null==/^false$/i.exec(e.getAttribute(t)):(n=e[t],void 0!==n&&null==/^false$/i.exec(n))}}};!function(){"use strict";qq.canvasToBlob=function(e,t,n){return qq.dataUriToBlob(e.toDataURL(t,n))},qq.dataUriToBlob=function(e){var t,n,r,o,i=function(e,t){var n=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,r=n&&new n;return r?(r.append(e),r.getBlob(t)):new Blob([e],{type:t})};return n=e.split(",")[0].indexOf("base64")>=0?atob(e.split(",")[1]):decodeURI(e.split(",")[1]),o=e.split(",")[0].split(":")[1].split(";")[0],t=new ArrayBuffer(n.length),r=new Uint8Array(t),qq.each(n,function(e,t){r[e]=t.charCodeAt(0)}),i(t,o)},qq.log=function(e,t){window.console&&(t&&"info"!==t?window.console[t]?window.console[t](e):window.console.log("<"+t+"> "+e):window.console.log(e))},qq.isObject=function(e){return e&&!e.nodeType&&"[object Object]"===Object.prototype.toString.call(e)},qq.isFunction=function(e){return"function"==typeof e},qq.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)||e&&window.ArrayBuffer&&e.buffer&&e.buffer.constructor===ArrayBuffer},qq.isItemList=function(e){return"[object DataTransferItemList]"===Object.prototype.toString.call(e)},qq.isNodeList=function(e){return"[object NodeList]"===Object.prototype.toString.call(e)||e.item&&e.namedItem},qq.isString=function(e){return"[object String]"===Object.prototype.toString.call(e)},qq.trimStr=function(e){return String.prototype.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},qq.format=function(e){var t=Array.prototype.slice.call(arguments,1),n=e,r=n.indexOf("{}");return qq.each(t,function(e,t){if(n=n.substring(0,r)+t+n.substring(r+2),r=n.indexOf("{}",r+t.length),r<0)return!1}),n},qq.isFile=function(e){return window.File&&"[object File]"===Object.prototype.toString.call(e)},qq.isFileList=function(e){return window.FileList&&"[object FileList]"===Object.prototype.toString.call(e)},qq.isFileOrInput=function(e){return qq.isFile(e)||qq.isInput(e)},qq.isInput=function(e,t){var n=function(e){var n=e.toLowerCase();return t?"file"!==n:"file"===n};return!!(window.HTMLInputElement&&"[object HTMLInputElement]"===Object.prototype.toString.call(e)&&e.type&&n(e.type))||!!(e.tagName&&"input"===e.tagName.toLowerCase()&&e.type&&n(e.type))},qq.isBlob=function(e){if(window.Blob&&"[object Blob]"===Object.prototype.toString.call(e))return!0},qq.isXhrUploadSupported=function(){var e=document.createElement("input");return e.type="file",void 0!==e.multiple&&"undefined"!=typeof File&&"undefined"!=typeof FormData&&void 0!==qq.createXhrInstance().upload},qq.createXhrInstance=function(){if(window.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("MSXML2.XMLHTTP.3.0")}catch(e){return qq.log("Neither XHR or ActiveX are supported!","error"),null}},qq.isFolderDropSupported=function(e){return e.items&&e.items.length>0&&e.items[0].webkitGetAsEntry},qq.isFileChunkingSupported=function(){return!qq.androidStock()&&qq.isXhrUploadSupported()&&(void 0!==File.prototype.slice||void 0!==File.prototype.webkitSlice||void 0!==File.prototype.mozSlice)},qq.sliceBlob=function(e,t,n){return(e.slice||e.mozSlice||e.webkitSlice).call(e,t,n)},qq.arrayBufferToHex=function(e){var t="",n=new Uint8Array(e);return qq.each(n,function(e,n){var r=n.toString(16);r.length<2&&(r="0"+r),t+=r}),t},qq.readBlobToHex=function(e,t,n){var r=qq.sliceBlob(e,t,t+n),o=new FileReader,i=new qq.Promise;return o.onload=function(){i.success(qq.arrayBufferToHex(o.result))},o.onerror=i.failure,o.readAsArrayBuffer(r),i},qq.extend=function(e,t,n){return qq.each(t,function(t,r){n&&qq.isObject(r)?(void 0===e[t]&&(e[t]={}),qq.extend(e[t],r,!0)):e[t]=r}),e},qq.override=function(e,t){var n={},r=t(n);return qq.each(r,function(t,r){void 0!==e[t]&&(n[t]=e[t]),e[t]=r}),e},qq.indexOf=function(e,t,n){if(e.indexOf)return e.indexOf(t,n);n=n||0;var r=e.length;for(n<0&&(n+=r);n=0},qq.safari=function(){return void 0!==navigator.vendor&&navigator.vendor.indexOf("Apple")!==-1},qq.chrome=function(){return void 0!==navigator.vendor&&navigator.vendor.indexOf("Google")!==-1},qq.opera=function(){return void 0!==navigator.vendor&&navigator.vendor.indexOf("Opera")!==-1},qq.firefox=function(){return!qq.edge()&&!qq.ie11()&&navigator.userAgent.indexOf("Mozilla")!==-1&&void 0!==navigator.vendor&&""===navigator.vendor},qq.windows=function(){return"Win32"===navigator.platform},qq.android=function(){return navigator.userAgent.toLowerCase().indexOf("android")!==-1},qq.androidStock=function(){return qq.android()&&navigator.userAgent.toLowerCase().indexOf("chrome")<0},qq.ios6=function(){return qq.ios()&&navigator.userAgent.indexOf(" OS 6_")!==-1},qq.ios7=function(){return qq.ios()&&navigator.userAgent.indexOf(" OS 7_")!==-1},qq.ios8=function(){return qq.ios()&&navigator.userAgent.indexOf(" OS 8_")!==-1},qq.ios800=function(){return qq.ios()&&navigator.userAgent.indexOf(" OS 8_0 ")!==-1},qq.ios=function(){return navigator.userAgent.indexOf("iPad")!==-1||navigator.userAgent.indexOf("iPod")!==-1||navigator.userAgent.indexOf("iPhone")!==-1},qq.iosChrome=function(){return qq.ios()&&navigator.userAgent.indexOf("CriOS")!==-1},qq.iosSafari=function(){return qq.ios()&&!qq.iosChrome()&&navigator.userAgent.indexOf("Safari")!==-1},qq.iosSafariWebView=function(){return qq.ios()&&!qq.iosChrome()&&!qq.iosSafari()},qq.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},qq.toElement=function(){var e=document.createElement("div");return function(t){e.innerHTML=t;var n=e.firstChild;return e.removeChild(n),n}}(),qq.each=function(e,t){var n,r;if(e)if(window.Storage&&e.constructor===window.Storage)for(n=0;n0)return e.substr(t,e.length-t)},qq.getFilename=function(e){return qq.isInput(e)?e.value.replace(/.*(\/|\\)/,""):qq.isFile(e)&&null!==e.fileName&&void 0!==e.fileName?e.fileName:e.name},qq.DisposeSupport=function(){var e=[];return{dispose:function(){var t;do t=e.shift(),t&&t();while(t)},attach:function(){var e=arguments;this.addDisposer(qq(e[0]).attach.apply(this,Array.prototype.slice.call(arguments,1)))},addDisposer:function(t){e.push(t)}}}}(),function(){"use strict";"function"==typeof define&&define.amd?define(function(){return qq}):"undefined"!=typeof module&&module.exports?module.exports=qq:global.qq=qq}(),qq.version="5.16.2",qq.supportedFeatures=function(){"use strict";function e(){var e,t=!0;try{e=document.createElement("input"),e.type="file",qq(e).hide(),e.disabled&&(t=!1)}catch(e){t=!1}return t}function t(){return(qq.chrome()||qq.opera())&&void 0!==navigator.userAgent.match(/Chrome\/[1][4-9]|Chrome\/[2-9][0-9]/)}function n(){if(window.XMLHttpRequest){return void 0!==qq.createXhrInstance().withCredentials}return!1}function r(){return void 0!==window.XDomainRequest}function o(){return!!n()||r()}function i(){return void 0!==document.createElement("input").webkitdirectory}function a(){try{return!!window.localStorage&&qq.isFunction(window.localStorage.setItem)}catch(e){return!1}}function u(){var e=document.createElement("span");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&!qq.android()&&!qq.ios()}var c,s,l,q,f,d,p,g,h,v,m,y,b,w,x;return c=e(),q=c&&qq.isXhrUploadSupported(),s=q&&!qq.androidStock(),l=q&&u(),f=l&&function(){var e=document.createElement("input");return e.type="file",!!("webkitdirectory"in(e||document.querySelectorAll("input[type=file]")[0]))}(),d=q&&qq.isFileChunkingSupported(),p=q&&d&&a(),g=q&&t(),h=c&&(void 0!==window.postMessage||q),m=n(),v=r(),y=o(),b=i(),w=q&&void 0!==window.FileReader,x=function(){return!!q&&(!qq.androidStock()&&!qq.iosChrome())}(),{ajaxUploading:q,blobUploading:s,canDetermineSize:q,chunking:d,deleteFileCors:y,deleteFileCorsXdr:v,deleteFileCorsXhr:m,dialogElement:!!window.HTMLDialogElement,fileDrop:l,folderDrop:f,folderSelection:b,imagePreviews:w,imageValidation:w,itemSizeValidation:q,pause:d,progressBar:x,resume:p,scaling:w&&s,tiffPreviews:qq.safari(),unlimitedScaledImageSize:!qq.ios(),uploading:c,uploadCors:h,uploadCustomHeaders:q,uploadNonMultipart:q,uploadViaPaste:g}}(),qq.isGenericPromise=function(e){"use strict";return!!(e&&e.then&&qq.isFunction(e.then))},qq.Promise=function(){"use strict";var e,t,n=[],r=[],o=[],i=0;qq.extend(this,{then:function(o,a){return 0===i?(o&&n.push(o),a&&r.push(a)):i===-1?a&&a.apply(null,t):o&&o.apply(null,e),this},done:function(n){return 0===i?o.push(n):n.apply(null,void 0===t?e:t),this},success:function(){return i=1,e=arguments,n.length&&qq.each(n,function(t,n){n.apply(null,e)}),o.length&&qq.each(o,function(t,n){n.apply(null,e)}),this},failure:function(){return i=-1,t=arguments,r.length&&qq.each(r,function(e,n){n.apply(null,t)}),o.length&&qq.each(o,function(e,n){n.apply(null,t)}),this}})},qq.DragAndDrop=function(e){"use strict";function t(e,t){var n=Array.prototype.slice.call(e);l.callbacks.dropLog("Grabbed "+e.length+" dropped files."),t.dropDisabled(!1),l.callbacks.processingDroppedFilesComplete(n,t.getElement())}function n(e){var t=new qq.Promise;return e.isFile?e.file(function(n){n.qqPath=r(e),f.push(n),t.success()},function(n){l.callbacks.dropLog("Problem parsing '"+e.fullPath+"'. FileError code "+n.code+".","error"),t.failure()}):e.isDirectory&&o(e).then(function(e){var r=e.length;qq.each(e,function(e,o){n(o).done(function(){r-=1,0===r&&t.success()})}),e.length||t.success()},function(n){l.callbacks.dropLog("Problem parsing '"+e.fullPath+"'. FileError code "+n.code+".","error"),t.failure()}),t}function r(e){var t=e.name,n=e.fullPath,r=n.lastIndexOf(t);return n=n.substr(0,r),"/"===n.charAt(0)&&(n=n.substr(1)),n}function o(e,t,n,r){var i=r||new qq.Promise,a=t||e.createReader();return a.readEntries(function(t){var r=n?n.concat(t):t;t.length?setTimeout(function(){o(e,a,r,i)},0):i.success(r)},i.failure),i}function i(e,t){var r=[],o=new qq.Promise;return l.callbacks.processingDroppedFiles(),t.dropDisabled(!0),e.files.length>1&&!l.allowMultipleItems?(l.callbacks.processingDroppedFilesComplete([]),l.callbacks.dropError("tooManyFilesError",""),t.dropDisabled(!1),o.failure()):(f=[],qq.isFolderDropSupported(e)?qq.each(e.items,function(e,t){var i=t.webkitGetAsEntry();i&&(i.isFile?f.push(t.getAsFile()):r.push(n(i).done(function(){r.pop(),0===r.length&&o.success()})))}):f=e.files,0===r.length&&o.success()),o}function a(e){var n=new qq.UploadDropZone({HIDE_ZONES_EVENT_NAME:"qq-hidezones",element:e,onEnter:function(t){qq(e).addClass(l.classes.dropActive),t.stopPropagation()},onLeaveNotDescendants:function(t){qq(e).removeClass(l.classes.dropActive)},onDrop:function(e){i(e.dataTransfer,n).then(function(){t(f,n)},function(){l.callbacks.dropLog("Drop event DataTransfer parsing failed. No files will be uploaded.","error")})}});return d.addDisposer(function(){n.dispose()}),qq(e).hasAttribute("qq-hide-dropzone")&&qq(e).hide(),q.push(n),n}function u(e){var t;return qq.each(e.dataTransfer.types,function(e,n){if("Files"===n)return t=!0,!1}),t}function c(e){return qq.safari()?e.x<0||e.y<0:0===e.x&&0===e.y}function s(){var e=l.dropZoneElements,t=function(){setTimeout(function(){qq.each(e,function(e,t){qq(t).hasAttribute("qq-hide-dropzone")&&qq(t).hide(),qq(t).removeClass(l.classes.dropActive)})},10)};qq.each(e,function(t,n){var r=a(n);e.length&&qq.supportedFeatures.fileDrop&&d.attach(document,"dragenter",function(t){!r.dropDisabled()&&u(t)&&qq.each(e,function(e,t){t instanceof HTMLElement&&qq(t).hasAttribute("qq-hide-dropzone")&&qq(t).css({display:"block"})})})}),d.attach(document,"dragleave",function(e){c(e)&&t()}),d.attach(qq(document).children()[0],"mouseenter",function(e){t()}),d.attach(document,"drop",function(e){u(e)&&(e.preventDefault(),t())}),d.attach(document,"qq-hidezones",t)}var l,q=[],f=[],d=new qq.DisposeSupport;l={dropZoneElements:[],allowMultipleItems:!0,classes:{dropActive:null},callbacks:new qq.DragAndDrop.callbacks},qq.extend(l,e,!0),s(),qq.extend(this,{setupExtraDropzone:function(e){l.dropZoneElements.push(e),a(e)},removeDropzone:function(e){var t,n=l.dropZoneElements;for(t in n)if(n[t]===e)return n.splice(t,1)},dispose:function(){d.dispose(),qq.each(q,function(e,t){t.dispose()})}}),this._testing={},this._testing.extractDirectoryPath=r},qq.DragAndDrop.callbacks=function(){"use strict";return{processingDroppedFiles:function(){},processingDroppedFilesComplete:function(e,t){},dropError:function(e,t){qq.log("Drag & drop error code '"+e+" with these specifics: '"+t+"'","error")},dropLog:function(e,t){qq.log(e,t)}}},qq.UploadDropZone=function(e){"use strict";function t(){return qq.safari()||qq.firefox()&&qq.windows()}function n(e){l||(t?q.attach(document,"dragover",function(e){e.preventDefault()}):q.attach(document,"dragover",function(e){e.dataTransfer&&(e.dataTransfer.dropEffect="none",e.preventDefault())}),l=!0)}function r(e){if(!qq.supportedFeatures.fileDrop)return!1;var t,n=e.dataTransfer,r=qq.safari();return t=!(!qq.ie()||!qq.supportedFeatures.fileDrop)||"none"!==n.effectAllowed,n&&t&&(n.files&&n.files.length||!r&&n.types.contains&&n.types.contains("Files")||n.types.includes&&n.types.includes("Files"))}function o(e){return void 0!==e&&(s=e),s}function i(){function e(){t=document.createEvent("Event"),t.initEvent(u.HIDE_ZONES_EVENT_NAME,!0,!0)}var t;if(window.CustomEvent)try{t=new CustomEvent(u.HIDE_ZONES_EVENT_NAME)}catch(t){e()}else e();document.dispatchEvent(t)}function a(){q.attach(c,"dragover",function(e){if(r(e)){var t=qq.ie()&&qq.supportedFeatures.fileDrop?null:e.dataTransfer.effectAllowed;e.dataTransfer.dropEffect="move"===t||"linkMove"===t?"move":"copy",e.stopPropagation(),e.preventDefault()}}),q.attach(c,"dragenter",function(e){if(!o()){if(!r(e))return;u.onEnter(e)}}),q.attach(c,"dragleave",function(e){if(r(e)){u.onLeave(e);var t=document.elementFromPoint(e.clientX,e.clientY);qq(this).contains(t)||u.onLeaveNotDescendants(e)}}),q.attach(c,"drop",function(e){if(!o()){if(!r(e))return;e.preventDefault(),e.stopPropagation(),u.onDrop(e),i()}})}var u,c,s,l,q=new qq.DisposeSupport;u={element:null,onEnter:function(e){},onLeave:function(e){},onLeaveNotDescendants:function(e){},onDrop:function(e){}},qq.extend(u,e),c=u.element,n(),a(),qq.extend(this,{dropDisabled:function(e){return o(e)},dispose:function(){q.dispose()},getElement:function(){return c}}),this._testing={},this._testing.isValidFileDrag=r}}(window); //# sourceMappingURL=dnd.min.js.map \ No newline at end of file diff --git a/styles/bootstrap/fine-uploader/dnd.min.js.map b/styles/bootstrap/fine-uploader/dnd.min.js.map index 09622593c..3927f6621 100644 --- a/styles/bootstrap/fine-uploader/dnd.min.js.map +++ b/styles/bootstrap/fine-uploader/dnd.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["?","../client/js/util.js","../client/js/export.js","../client/js/version.js","../client/js/features.js","../client/js/promise.js","../client/js/dnd.js"],"names":["global","qq","element","hide","style","display","this","attach","type","fn","addEventListener","attachEvent","detach","removeEventListener","detachEvent","contains","descendant","compareDocumentPosition","insertBefore","elementB","parentNode","remove","removeChild","css","styles","Error","opacity","filter","Math","round","extend","hasClass","name","considerParent","re","RegExp","test","className","addClass","removeClass","replace","getByClass","first","candidates","result","querySelector","querySelectorAll","getElementsByTagName","each","idx","val","push","getFirstByClass","children","child","firstChild","nodeType","nextSibling","setText","text","innerText","textContent","clearText","hasAttribute","attrName","attrVal","exec","getAttribute","undefined","canvasToBlob","canvas","mime","quality","dataUriToBlob","toDataURL","dataUri","arrayBuffer","byteString","intArray","mimeString","createBlob","data","BlobBuilder","window","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","blobBuilder","append","getBlob","Blob","split","indexOf","atob","decodeURI","ArrayBuffer","length","Uint8Array","character","charCodeAt","log","message","level","console","isObject","variable","Object","prototype","toString","call","isFunction","isArray","value","buffer","constructor","isItemList","maybeItemList","isNodeList","maybeNodeList","item","namedItem","isString","maybeString","trimStr","string","String","trim","format","str","args","Array","slice","arguments","newStr","nextIdxToReplace","strBefore","substring","strAfter","isFile","maybeFile","File","isFileList","maybeFileList","FileList","isFileOrInput","maybeFileOrInput","isInput","maybeInput","notFile","evaluateType","normalizedType","toLowerCase","HTMLInputElement","tagName","isBlob","maybeBlob","isXhrUploadSupported","input","document","createElement","multiple","FormData","createXhrInstance","upload","XMLHttpRequest","ActiveXObject","error","isFolderDropSupported","dataTransfer","items","webkitGetAsEntry","isFileChunkingSupported","androidStock","webkitSlice","mozSlice","sliceBlob","fileOrBlob","start","end","slicer","arrayBufferToHex","bytesAsHex","bytes","byt","byteAsHexStr","readBlobToHex","blob","startOffset","initialBlob","fileReader","FileReader","promise","Promise","onload","success","onerror","failure","readAsArrayBuffer","second","extendNested","prop","override","target","sourceFn","super_","source","srcPropName","srcPropVal","arr","elt","from","len","hasOwnProperty","getUniqueId","c","r","random","v","ie","navigator","userAgent","ie7","ie8","ie10","ie11","edge","safari","vendor","chrome","opera","firefox","windows","platform","android","ios6","ios","ios7","ios8","ios800","iosChrome","iosSafari","iosSafariWebView","preventDefault","e","returnValue","toElement","div","html","innerHTML","iterableItem","callback","keyOrIndex","retVal","Storage","key","getItem","charAt","bind","oldFunc","context","newArgs","concat","apply","obj2url","obj","temp","prefixDone","uristrings","prefix","add","nextObj","i","nextTemp","encodeURIComponent","join","obj2FormData","formData","arrayKeyName","obj2Inputs","form","setAttribute","appendChild","parseJson","json","JSON","parse","eval","getExtension","filename","extIdx","lastIndexOf","substr","getFilename","blobOrFileInput","fileName","DisposeSupport","disposers","dispose","disposer","shift","addDisposer","disposeFunction","define","amd","module","exports","version","supportedFeatures","testSupportsFileInputElement","tempInput","supported","disabled","ex","isChrome21OrHigher","match","isChrome14OrHigher","isCrossOriginXhrSupported","xhr","withCredentials","isXdrSupported","XDomainRequest","isCrossOriginAjaxSupported","isFolderSelectionSupported","webkitdirectory","isLocalStorageSupported","localStorage","setItem","isDragAndDropSupported","span","supportsUploading","supportsUploadingBlobs","supportsFileDrop","supportsAjaxFileUploading","supportsFolderDrop","supportsChunking","supportsResume","supportsUploadViaPaste","supportsUploadCors","supportsDeleteFileXdr","supportsDeleteFileCorsXhr","supportsDeleteFileCors","supportsFolderSelection","supportsImagePreviews","supportsUploadProgress","postMessage","ajaxUploading","blobUploading","canDetermineSize","chunking","deleteFileCors","deleteFileCorsXdr","deleteFileCorsXhr","dialogElement","HTMLDialogElement","fileDrop","folderDrop","folderSelection","imagePreviews","imageValidation","itemSizeValidation","pause","progressBar","resume","scaling","tiffPreviews","unlimitedScaledImageSize","uploading","uploadCors","uploadCustomHeaders","uploadNonMultipart","uploadViaPaste","isGenericPromise","maybePromise","then","successArgs","failureArgs","successCallbacks","failureCallbacks","doneCallbacks","state","onSuccess","onFailure","done","DragAndDrop","o","uploadDroppedFiles","files","uploadDropZone","filesAsArray","options","callbacks","dropLog","dropDisabled","processingDroppedFilesComplete","getElement","traverseFileTree","entry","parseEntryPromise","file","fullPath","indexOfNameInFullPath","qqPath","droppedFiles","fileError","code","isDirectory","getFilesInDirectory","entries","entriesLeft","reader","accumEntries","existingPromise","dirReader","createReader","readEntries","newEntries","setTimeout","handleDataTransfer","pendingFolderPromises","handleDataTransferPromise","processingDroppedFiles","allowMultipleItems","dropError","getAsFile","pop","setupDropzone","dropArea","dropZone","UploadDropZone","HIDE_ZONES_EVENT_NAME","onEnter","classes","dropActive","stopPropagation","onLeaveNotDescendants","onDrop","disposeSupport","HIDE_BEFORE_ENTER_ATTR","uploadDropZones","isFileDrag","dragEvent","fileDrag","types","leavingDocumentOut","relatedTarget","x","y","setupDragDrop","dropZones","dropZoneElements","maybeHideDropZones","HTMLElement","setupExtraDropzone","removeDropzone","dzs","splice","targetEl","errorSpecifics","dragoverShouldBeCanceled","disableDropOutside","dropOutsideDisabled","dropEffect","isValidFileDrag","effectTest","dt","isSafari","effectAllowed","isOrSetDropDisabled","isDisabled","preventDrop","triggerHidezonesEvent","triggerUsingOldApi","hideZonesEvent","createEvent","initEvent","CustomEvent","err","dispatchEvent","attachEvents","effect","onLeave","elementFromPoint","clientX","clientY"],"mappings":"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","file":"dnd.min.js","sourcesContent":[null,"/*globals window, navigator, document, FormData, File, HTMLInputElement, XMLHttpRequest, Blob, Storage, ActiveXObject */\n/* jshint -W079 */\nvar qq = function(element) {\n \"use strict\";\n\n return {\n hide: function() {\n element.style.display = \"none\";\n return this;\n },\n\n /** Returns the function which detaches attached event */\n attach: function(type, fn) {\n if (element.addEventListener) {\n element.addEventListener(type, fn, false);\n } else if (element.attachEvent) {\n element.attachEvent(\"on\" + type, fn);\n }\n return function() {\n qq(element).detach(type, fn);\n };\n },\n\n detach: function(type, fn) {\n if (element.removeEventListener) {\n element.removeEventListener(type, fn, false);\n } else if (element.attachEvent) {\n element.detachEvent(\"on\" + type, fn);\n }\n return this;\n },\n\n contains: function(descendant) {\n // The [W3C spec](http://www.w3.org/TR/domcore/#dom-node-contains)\n // says a `null` (or ostensibly `undefined`) parameter\n // passed into `Node.contains` should result in a false return value.\n // IE7 throws an exception if the parameter is `undefined` though.\n if (!descendant) {\n return false;\n }\n\n // compareposition returns false in this case\n if (element === descendant) {\n return true;\n }\n\n if (element.contains) {\n return element.contains(descendant);\n } else {\n /*jslint bitwise: true*/\n return !!(descendant.compareDocumentPosition(element) & 8);\n }\n },\n\n /**\n * Insert this element before elementB.\n */\n insertBefore: function(elementB) {\n elementB.parentNode.insertBefore(element, elementB);\n return this;\n },\n\n remove: function() {\n element.parentNode.removeChild(element);\n return this;\n },\n\n /**\n * Sets styles for an element.\n * Fixes opacity in IE6-8.\n */\n css: function(styles) {\n /*jshint eqnull: true*/\n if (element.style == null) {\n throw new qq.Error(\"Can't apply style to node as it is not on the HTMLElement prototype chain!\");\n }\n\n /*jshint -W116*/\n if (styles.opacity != null) {\n if (typeof element.style.opacity !== \"string\" && typeof (element.filters) !== \"undefined\") {\n styles.filter = \"alpha(opacity=\" + Math.round(100 * styles.opacity) + \")\";\n }\n }\n qq.extend(element.style, styles);\n\n return this;\n },\n\n hasClass: function(name, considerParent) {\n var re = new RegExp(\"(^| )\" + name + \"( |$)\");\n return re.test(element.className) || !!(considerParent && re.test(element.parentNode.className));\n },\n\n addClass: function(name) {\n if (!qq(element).hasClass(name)) {\n element.className += \" \" + name;\n }\n return this;\n },\n\n removeClass: function(name) {\n var re = new RegExp(\"(^| )\" + name + \"( |$)\");\n element.className = element.className.replace(re, \" \").replace(/^\\s+|\\s+$/g, \"\");\n return this;\n },\n\n getByClass: function(className, first) {\n var candidates,\n result = [];\n\n if (first && element.querySelector) {\n return element.querySelector(\".\" + className);\n }\n else if (element.querySelectorAll) {\n return element.querySelectorAll(\".\" + className);\n }\n\n candidates = element.getElementsByTagName(\"*\");\n\n qq.each(candidates, function(idx, val) {\n if (qq(val).hasClass(className)) {\n result.push(val);\n }\n });\n return first ? result[0] : result;\n },\n\n getFirstByClass: function(className) {\n return qq(element).getByClass(className, true);\n },\n\n children: function() {\n var children = [],\n child = element.firstChild;\n\n while (child) {\n if (child.nodeType === 1) {\n children.push(child);\n }\n child = child.nextSibling;\n }\n\n return children;\n },\n\n setText: function(text) {\n element.innerText = text;\n element.textContent = text;\n return this;\n },\n\n clearText: function() {\n return qq(element).setText(\"\");\n },\n\n // Returns true if the attribute exists on the element\n // AND the value of the attribute is NOT \"false\" (case-insensitive)\n hasAttribute: function(attrName) {\n var attrVal;\n\n if (element.hasAttribute) {\n\n if (!element.hasAttribute(attrName)) {\n return false;\n }\n\n /*jshint -W116*/\n return (/^false$/i).exec(element.getAttribute(attrName)) == null;\n }\n else {\n attrVal = element[attrName];\n\n if (attrVal === undefined) {\n return false;\n }\n\n /*jshint -W116*/\n return (/^false$/i).exec(attrVal) == null;\n }\n }\n };\n};\n\n(function() {\n \"use strict\";\n\n qq.canvasToBlob = function(canvas, mime, quality) {\n return qq.dataUriToBlob(canvas.toDataURL(mime, quality));\n };\n\n qq.dataUriToBlob = function(dataUri) {\n var arrayBuffer, byteString,\n createBlob = function(data, mime) {\n var BlobBuilder = window.BlobBuilder ||\n window.WebKitBlobBuilder ||\n window.MozBlobBuilder ||\n window.MSBlobBuilder,\n blobBuilder = BlobBuilder && new BlobBuilder();\n\n if (blobBuilder) {\n blobBuilder.append(data);\n return blobBuilder.getBlob(mime);\n }\n else {\n return new Blob([data], {type: mime});\n }\n },\n intArray, mimeString;\n\n // convert base64 to raw binary data held in a string\n if (dataUri.split(\",\")[0].indexOf(\"base64\") >= 0) {\n byteString = atob(dataUri.split(\",\")[1]);\n }\n else {\n byteString = decodeURI(dataUri.split(\",\")[1]);\n }\n\n // extract the MIME\n mimeString = dataUri.split(\",\")[0]\n .split(\":\")[1]\n .split(\";\")[0];\n\n // write the bytes of the binary string to an ArrayBuffer\n arrayBuffer = new ArrayBuffer(byteString.length);\n intArray = new Uint8Array(arrayBuffer);\n qq.each(byteString, function(idx, character) {\n intArray[idx] = character.charCodeAt(0);\n });\n\n return createBlob(arrayBuffer, mimeString);\n };\n\n qq.log = function(message, level) {\n if (window.console) {\n if (!level || level === \"info\") {\n window.console.log(message);\n }\n else\n {\n if (window.console[level]) {\n window.console[level](message);\n }\n else {\n window.console.log(\"<\" + level + \"> \" + message);\n }\n }\n }\n };\n\n qq.isObject = function(variable) {\n return variable && !variable.nodeType && Object.prototype.toString.call(variable) === \"[object Object]\";\n };\n\n qq.isFunction = function(variable) {\n return typeof (variable) === \"function\";\n };\n\n /**\n * Check the type of a value. Is it an \"array\"?\n *\n * @param value value to test.\n * @returns true if the value is an array or associated with an `ArrayBuffer`\n */\n qq.isArray = function(value) {\n return Object.prototype.toString.call(value) === \"[object Array]\" ||\n (value && window.ArrayBuffer && value.buffer && value.buffer.constructor === ArrayBuffer);\n };\n\n // Looks for an object on a `DataTransfer` object that is associated with drop events when utilizing the Filesystem API.\n qq.isItemList = function(maybeItemList) {\n return Object.prototype.toString.call(maybeItemList) === \"[object DataTransferItemList]\";\n };\n\n // Looks for an object on a `NodeList` or an `HTMLCollection`|`HTMLFormElement`|`HTMLSelectElement`\n // object that is associated with collections of Nodes.\n qq.isNodeList = function(maybeNodeList) {\n return Object.prototype.toString.call(maybeNodeList) === \"[object NodeList]\" ||\n // If `HTMLCollection` is the actual type of the object, we must determine this\n // by checking for expected properties/methods on the object\n (maybeNodeList.item && maybeNodeList.namedItem);\n };\n\n qq.isString = function(maybeString) {\n return Object.prototype.toString.call(maybeString) === \"[object String]\";\n };\n\n qq.trimStr = function(string) {\n if (String.prototype.trim) {\n return string.trim();\n }\n\n return string.replace(/^\\s+|\\s+$/g, \"\");\n };\n\n /**\n * @param str String to format.\n * @returns {string} A string, swapping argument values with the associated occurrence of {} in the passed string.\n */\n qq.format = function(str) {\n\n var args = Array.prototype.slice.call(arguments, 1),\n newStr = str,\n nextIdxToReplace = newStr.indexOf(\"{}\");\n\n qq.each(args, function(idx, val) {\n var strBefore = newStr.substring(0, nextIdxToReplace),\n strAfter = newStr.substring(nextIdxToReplace + 2);\n\n newStr = strBefore + val + strAfter;\n nextIdxToReplace = newStr.indexOf(\"{}\", nextIdxToReplace + val.length);\n\n // End the loop if we have run out of tokens (when the arguments exceed the # of tokens)\n if (nextIdxToReplace < 0) {\n return false;\n }\n });\n\n return newStr;\n };\n\n qq.isFile = function(maybeFile) {\n return window.File && Object.prototype.toString.call(maybeFile) === \"[object File]\";\n };\n\n qq.isFileList = function(maybeFileList) {\n return window.FileList && Object.prototype.toString.call(maybeFileList) === \"[object FileList]\";\n };\n\n qq.isFileOrInput = function(maybeFileOrInput) {\n return qq.isFile(maybeFileOrInput) || qq.isInput(maybeFileOrInput);\n };\n\n qq.isInput = function(maybeInput, notFile) {\n var evaluateType = function(type) {\n var normalizedType = type.toLowerCase();\n\n if (notFile) {\n return normalizedType !== \"file\";\n }\n\n return normalizedType === \"file\";\n };\n\n if (window.HTMLInputElement) {\n if (Object.prototype.toString.call(maybeInput) === \"[object HTMLInputElement]\") {\n if (maybeInput.type && evaluateType(maybeInput.type)) {\n return true;\n }\n }\n }\n if (maybeInput.tagName) {\n if (maybeInput.tagName.toLowerCase() === \"input\") {\n if (maybeInput.type && evaluateType(maybeInput.type)) {\n return true;\n }\n }\n }\n\n return false;\n };\n\n qq.isBlob = function(maybeBlob) {\n if (window.Blob && Object.prototype.toString.call(maybeBlob) === \"[object Blob]\") {\n return true;\n }\n };\n\n qq.isXhrUploadSupported = function() {\n var input = document.createElement(\"input\");\n input.type = \"file\";\n\n return (\n input.multiple !== undefined &&\n typeof File !== \"undefined\" &&\n typeof FormData !== \"undefined\" &&\n typeof (qq.createXhrInstance()).upload !== \"undefined\");\n };\n\n // Fall back to ActiveX is native XHR is disabled (possible in any version of IE).\n qq.createXhrInstance = function() {\n if (window.XMLHttpRequest) {\n return new XMLHttpRequest();\n }\n\n try {\n return new ActiveXObject(\"MSXML2.XMLHTTP.3.0\");\n }\n catch (error) {\n qq.log(\"Neither XHR or ActiveX are supported!\", \"error\");\n return null;\n }\n };\n\n qq.isFolderDropSupported = function(dataTransfer) {\n return dataTransfer.items &&\n dataTransfer.items.length > 0 &&\n dataTransfer.items[0].webkitGetAsEntry;\n };\n\n qq.isFileChunkingSupported = function() {\n return !qq.androidStock() && //Android's stock browser cannot upload Blobs correctly\n qq.isXhrUploadSupported() &&\n (File.prototype.slice !== undefined || File.prototype.webkitSlice !== undefined || File.prototype.mozSlice !== undefined);\n };\n\n qq.sliceBlob = function(fileOrBlob, start, end) {\n var slicer = fileOrBlob.slice || fileOrBlob.mozSlice || fileOrBlob.webkitSlice;\n\n return slicer.call(fileOrBlob, start, end);\n };\n\n qq.arrayBufferToHex = function(buffer) {\n var bytesAsHex = \"\",\n bytes = new Uint8Array(buffer);\n\n qq.each(bytes, function(idx, byt) {\n var byteAsHexStr = byt.toString(16);\n\n if (byteAsHexStr.length < 2) {\n byteAsHexStr = \"0\" + byteAsHexStr;\n }\n\n bytesAsHex += byteAsHexStr;\n });\n\n return bytesAsHex;\n };\n\n qq.readBlobToHex = function(blob, startOffset, length) {\n var initialBlob = qq.sliceBlob(blob, startOffset, startOffset + length),\n fileReader = new FileReader(),\n promise = new qq.Promise();\n\n fileReader.onload = function() {\n promise.success(qq.arrayBufferToHex(fileReader.result));\n };\n\n fileReader.onerror = promise.failure;\n\n fileReader.readAsArrayBuffer(initialBlob);\n\n return promise;\n };\n\n qq.extend = function(first, second, extendNested) {\n qq.each(second, function(prop, val) {\n if (extendNested && qq.isObject(val)) {\n if (first[prop] === undefined) {\n first[prop] = {};\n }\n qq.extend(first[prop], val, true);\n }\n else {\n first[prop] = val;\n }\n });\n\n return first;\n };\n\n /**\n * Allow properties in one object to override properties in another,\n * keeping track of the original values from the target object.\n *\n * Note that the pre-overriden properties to be overriden by the source will be passed into the `sourceFn` when it is invoked.\n *\n * @param target Update properties in this object from some source\n * @param sourceFn A function that, when invoked, will return properties that will replace properties with the same name in the target.\n * @returns {object} The target object\n */\n qq.override = function(target, sourceFn) {\n var super_ = {},\n source = sourceFn(super_);\n\n qq.each(source, function(srcPropName, srcPropVal) {\n if (target[srcPropName] !== undefined) {\n super_[srcPropName] = target[srcPropName];\n }\n\n target[srcPropName] = srcPropVal;\n });\n\n return target;\n };\n\n /**\n * Searches for a given element (elt) in the array, returns -1 if it is not present.\n */\n qq.indexOf = function(arr, elt, from) {\n if (arr.indexOf) {\n return arr.indexOf(elt, from);\n }\n\n from = from || 0;\n var len = arr.length;\n\n if (from < 0) {\n from += len;\n }\n\n for (; from < len; from += 1) {\n if (arr.hasOwnProperty(from) && arr[from] === elt) {\n return from;\n }\n }\n return -1;\n };\n\n //this is a version 4 UUID\n qq.getUniqueId = function() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n /*jslint eqeq: true, bitwise: true*/\n var r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n\n //\n // Browsers and platforms detection\n qq.ie = function() {\n return navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.userAgent.indexOf(\"Trident\") !== -1;\n };\n\n qq.ie7 = function() {\n return navigator.userAgent.indexOf(\"MSIE 7\") !== -1;\n };\n\n qq.ie8 = function() {\n return navigator.userAgent.indexOf(\"MSIE 8\") !== -1;\n };\n\n qq.ie10 = function() {\n return navigator.userAgent.indexOf(\"MSIE 10\") !== -1;\n };\n\n qq.ie11 = function() {\n return qq.ie() && navigator.userAgent.indexOf(\"rv:11\") !== -1;\n };\n\n qq.edge = function() {\n return navigator.userAgent.indexOf(\"Edge\") >= 0;\n };\n\n qq.safari = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Apple\") !== -1;\n };\n\n qq.chrome = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Google\") !== -1;\n };\n\n qq.opera = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Opera\") !== -1;\n };\n\n qq.firefox = function() {\n return (!qq.edge() && !qq.ie11() && navigator.userAgent.indexOf(\"Mozilla\") !== -1 && navigator.vendor !== undefined && navigator.vendor === \"\");\n };\n\n qq.windows = function() {\n return navigator.platform === \"Win32\";\n };\n\n qq.android = function() {\n return navigator.userAgent.toLowerCase().indexOf(\"android\") !== -1;\n };\n\n // We need to identify the Android stock browser via the UA string to work around various bugs in this browser,\n // such as the one that prevents a `Blob` from being uploaded.\n qq.androidStock = function() {\n return qq.android() && navigator.userAgent.toLowerCase().indexOf(\"chrome\") < 0;\n };\n\n qq.ios6 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 6_\") !== -1;\n };\n\n qq.ios7 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 7_\") !== -1;\n };\n\n qq.ios8 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 8_\") !== -1;\n };\n\n // iOS 8.0.0\n qq.ios800 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 8_0 \") !== -1;\n };\n\n qq.ios = function() {\n /*jshint -W014 */\n return navigator.userAgent.indexOf(\"iPad\") !== -1\n || navigator.userAgent.indexOf(\"iPod\") !== -1\n || navigator.userAgent.indexOf(\"iPhone\") !== -1;\n };\n\n qq.iosChrome = function() {\n return qq.ios() && navigator.userAgent.indexOf(\"CriOS\") !== -1;\n };\n\n qq.iosSafari = function() {\n return qq.ios() && !qq.iosChrome() && navigator.userAgent.indexOf(\"Safari\") !== -1;\n };\n\n qq.iosSafariWebView = function() {\n return qq.ios() && !qq.iosChrome() && !qq.iosSafari();\n };\n\n //\n // Events\n\n qq.preventDefault = function(e) {\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n };\n\n /**\n * Creates and returns element from html string\n * Uses innerHTML to create an element\n */\n qq.toElement = (function() {\n var div = document.createElement(\"div\");\n return function(html) {\n div.innerHTML = html;\n var element = div.firstChild;\n div.removeChild(element);\n return element;\n };\n }());\n\n //key and value are passed to callback for each entry in the iterable item\n qq.each = function(iterableItem, callback) {\n var keyOrIndex, retVal;\n\n if (iterableItem) {\n // Iterate through [`Storage`](http://www.w3.org/TR/webstorage/#the-storage-interface) items\n if (window.Storage && iterableItem.constructor === window.Storage) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(iterableItem.key(keyOrIndex), iterableItem.getItem(iterableItem.key(keyOrIndex)));\n if (retVal === false) {\n break;\n }\n }\n }\n // `DataTransferItemList` & `NodeList` objects are array-like and should be treated as arrays\n // when iterating over items inside the object.\n else if (qq.isArray(iterableItem) || qq.isItemList(iterableItem) || qq.isNodeList(iterableItem)) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n if (retVal === false) {\n break;\n }\n }\n }\n else if (qq.isString(iterableItem)) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(keyOrIndex, iterableItem.charAt(keyOrIndex));\n if (retVal === false) {\n break;\n }\n }\n }\n else {\n for (keyOrIndex in iterableItem) {\n if (Object.prototype.hasOwnProperty.call(iterableItem, keyOrIndex)) {\n retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n if (retVal === false) {\n break;\n }\n }\n }\n }\n }\n };\n\n //include any args that should be passed to the new function after the context arg\n qq.bind = function(oldFunc, context) {\n if (qq.isFunction(oldFunc)) {\n var args = Array.prototype.slice.call(arguments, 2);\n\n return function() {\n var newArgs = qq.extend([], args);\n if (arguments.length) {\n newArgs = newArgs.concat(Array.prototype.slice.call(arguments));\n }\n return oldFunc.apply(context, newArgs);\n };\n }\n\n throw new Error(\"first parameter must be a function!\");\n };\n\n /**\n * obj2url() takes a json-object as argument and generates\n * a querystring. pretty much like jQuery.param()\n *\n * how to use:\n *\n * `qq.obj2url({a:'b',c:'d'},'http://any.url/upload?otherParam=value');`\n *\n * will result in:\n *\n * `http://any.url/upload?otherParam=value&a=b&c=d`\n *\n * @param Object JSON-Object\n * @param String current querystring-part\n * @return String encoded querystring\n */\n qq.obj2url = function(obj, temp, prefixDone) {\n /*jshint laxbreak: true*/\n var uristrings = [],\n prefix = \"&\",\n add = function(nextObj, i) {\n var nextTemp = temp\n ? (/\\[\\]$/.test(temp)) // prevent double-encoding\n ? temp\n : temp + \"[\" + i + \"]\"\n : i;\n if ((nextTemp !== \"undefined\") && (i !== \"undefined\")) {\n uristrings.push(\n (typeof nextObj === \"object\")\n ? qq.obj2url(nextObj, nextTemp, true)\n : (Object.prototype.toString.call(nextObj) === \"[object Function]\")\n ? encodeURIComponent(nextTemp) + \"=\" + encodeURIComponent(nextObj())\n : encodeURIComponent(nextTemp) + \"=\" + encodeURIComponent(nextObj)\n );\n }\n };\n\n if (!prefixDone && temp) {\n prefix = (/\\?/.test(temp)) ? (/\\?$/.test(temp)) ? \"\" : \"&\" : \"?\";\n uristrings.push(temp);\n uristrings.push(qq.obj2url(obj));\n } else if ((Object.prototype.toString.call(obj) === \"[object Array]\") && (typeof obj !== \"undefined\")) {\n qq.each(obj, function(idx, val) {\n add(val, idx);\n });\n } else if ((typeof obj !== \"undefined\") && (obj !== null) && (typeof obj === \"object\")) {\n qq.each(obj, function(prop, val) {\n add(val, prop);\n });\n } else {\n uristrings.push(encodeURIComponent(temp) + \"=\" + encodeURIComponent(obj));\n }\n\n if (temp) {\n return uristrings.join(prefix);\n } else {\n return uristrings.join(prefix)\n .replace(/^&/, \"\")\n .replace(/%20/g, \"+\");\n }\n };\n\n qq.obj2FormData = function(obj, formData, arrayKeyName) {\n if (!formData) {\n formData = new FormData();\n }\n\n qq.each(obj, function(key, val) {\n key = arrayKeyName ? arrayKeyName + \"[\" + key + \"]\" : key;\n\n if (qq.isObject(val)) {\n qq.obj2FormData(val, formData, key);\n }\n else if (qq.isFunction(val)) {\n formData.append(key, val());\n }\n else {\n formData.append(key, val);\n }\n });\n\n return formData;\n };\n\n qq.obj2Inputs = function(obj, form) {\n var input;\n\n if (!form) {\n form = document.createElement(\"form\");\n }\n\n qq.obj2FormData(obj, {\n append: function(key, val) {\n input = document.createElement(\"input\");\n input.setAttribute(\"name\", key);\n input.setAttribute(\"value\", val);\n form.appendChild(input);\n }\n });\n\n return form;\n };\n\n /**\n * Not recommended for use outside of Fine Uploader since this falls back to an unchecked eval if JSON.parse is not\n * implemented. For a more secure JSON.parse polyfill, use Douglas Crockford's json2.js.\n */\n qq.parseJson = function(json) {\n /*jshint evil: true*/\n if (window.JSON && qq.isFunction(JSON.parse)) {\n return JSON.parse(json);\n } else {\n return eval(\"(\" + json + \")\");\n }\n };\n\n /**\n * Retrieve the extension of a file, if it exists.\n *\n * @param filename\n * @returns {string || undefined}\n */\n qq.getExtension = function(filename) {\n var extIdx = filename.lastIndexOf(\".\") + 1;\n\n if (extIdx > 0) {\n return filename.substr(extIdx, filename.length - extIdx);\n }\n };\n\n qq.getFilename = function(blobOrFileInput) {\n /*jslint regexp: true*/\n\n if (qq.isInput(blobOrFileInput)) {\n // get input value and remove path to normalize\n return blobOrFileInput.value.replace(/.*(\\/|\\\\)/, \"\");\n }\n else if (qq.isFile(blobOrFileInput)) {\n if (blobOrFileInput.fileName !== null && blobOrFileInput.fileName !== undefined) {\n return blobOrFileInput.fileName;\n }\n }\n\n return blobOrFileInput.name;\n };\n\n /**\n * A generic module which supports object disposing in dispose() method.\n * */\n qq.DisposeSupport = function() {\n var disposers = [];\n\n return {\n /** Run all registered disposers */\n dispose: function() {\n var disposer;\n do {\n disposer = disposers.shift();\n if (disposer) {\n disposer();\n }\n }\n while (disposer);\n },\n\n /** Attach event handler and register de-attacher as a disposer */\n attach: function() {\n var args = arguments;\n /*jslint undef:true*/\n this.addDisposer(qq(args[0]).attach.apply(this, Array.prototype.slice.call(arguments, 1)));\n },\n\n /** Add disposer to the collection */\n addDisposer: function(disposeFunction) {\n disposers.push(disposeFunction);\n }\n };\n };\n}());\n","/* globals define, module, global, qq */\n(function() {\n \"use strict\";\n if (typeof define === \"function\" && define.amd) {\n define(function() {\n return qq;\n });\n }\n else if (typeof module !== \"undefined\" && module.exports) {\n module.exports = qq;\n }\n else {\n global.qq = qq;\n }\n}());\n","/*global qq */\nqq.version = \"5.12.0\";\n","/* globals qq */\nqq.supportedFeatures = (function() {\n \"use strict\";\n\n var supportsUploading,\n supportsUploadingBlobs,\n supportsFileDrop,\n supportsAjaxFileUploading,\n supportsFolderDrop,\n supportsChunking,\n supportsResume,\n supportsUploadViaPaste,\n supportsUploadCors,\n supportsDeleteFileXdr,\n supportsDeleteFileCorsXhr,\n supportsDeleteFileCors,\n supportsFolderSelection,\n supportsImagePreviews,\n supportsUploadProgress;\n\n function testSupportsFileInputElement() {\n var supported = true,\n tempInput;\n\n try {\n tempInput = document.createElement(\"input\");\n tempInput.type = \"file\";\n qq(tempInput).hide();\n\n if (tempInput.disabled) {\n supported = false;\n }\n }\n catch (ex) {\n supported = false;\n }\n\n return supported;\n }\n\n //only way to test for Filesystem API support since webkit does not expose the DataTransfer interface\n function isChrome21OrHigher() {\n return (qq.chrome() || qq.opera()) &&\n navigator.userAgent.match(/Chrome\\/[2][1-9]|Chrome\\/[3-9][0-9]/) !== undefined;\n }\n\n //only way to test for complete Clipboard API support at this time\n function isChrome14OrHigher() {\n return (qq.chrome() || qq.opera()) &&\n navigator.userAgent.match(/Chrome\\/[1][4-9]|Chrome\\/[2-9][0-9]/) !== undefined;\n }\n\n //Ensure we can send cross-origin `XMLHttpRequest`s\n function isCrossOriginXhrSupported() {\n if (window.XMLHttpRequest) {\n var xhr = qq.createXhrInstance();\n\n //Commonly accepted test for XHR CORS support.\n return xhr.withCredentials !== undefined;\n }\n\n return false;\n }\n\n //Test for (terrible) cross-origin ajax transport fallback for IE9 and IE8\n function isXdrSupported() {\n return window.XDomainRequest !== undefined;\n }\n\n // CORS Ajax requests are supported if it is either possible to send credentialed `XMLHttpRequest`s,\n // or if `XDomainRequest` is an available alternative.\n function isCrossOriginAjaxSupported() {\n if (isCrossOriginXhrSupported()) {\n return true;\n }\n\n return isXdrSupported();\n }\n\n function isFolderSelectionSupported() {\n // We know that folder selection is only supported in Chrome via this proprietary attribute for now\n return document.createElement(\"input\").webkitdirectory !== undefined;\n }\n\n function isLocalStorageSupported() {\n try {\n return !!window.localStorage &&\n // unpatched versions of IE10/11 have buggy impls of localStorage where setItem is a string\n qq.isFunction(window.localStorage.setItem);\n }\n catch (error) {\n // probably caught a security exception, so no localStorage for you\n return false;\n }\n }\n\n function isDragAndDropSupported() {\n var span = document.createElement(\"span\");\n\n return (\"draggable\" in span || (\"ondragstart\" in span && \"ondrop\" in span)) &&\n !qq.android() && !qq.ios();\n }\n\n supportsUploading = testSupportsFileInputElement();\n\n supportsAjaxFileUploading = supportsUploading && qq.isXhrUploadSupported();\n\n supportsUploadingBlobs = supportsAjaxFileUploading && !qq.androidStock();\n\n supportsFileDrop = supportsAjaxFileUploading && isDragAndDropSupported();\n\n supportsFolderDrop = supportsFileDrop && isChrome21OrHigher();\n\n supportsChunking = supportsAjaxFileUploading && qq.isFileChunkingSupported();\n\n supportsResume = supportsAjaxFileUploading && supportsChunking && isLocalStorageSupported();\n\n supportsUploadViaPaste = supportsAjaxFileUploading && isChrome14OrHigher();\n\n supportsUploadCors = supportsUploading && (window.postMessage !== undefined || supportsAjaxFileUploading);\n\n supportsDeleteFileCorsXhr = isCrossOriginXhrSupported();\n\n supportsDeleteFileXdr = isXdrSupported();\n\n supportsDeleteFileCors = isCrossOriginAjaxSupported();\n\n supportsFolderSelection = isFolderSelectionSupported();\n\n supportsImagePreviews = supportsAjaxFileUploading && window.FileReader !== undefined;\n\n supportsUploadProgress = (function() {\n if (supportsAjaxFileUploading) {\n return !qq.androidStock() && !qq.iosChrome();\n }\n return false;\n }());\n\n return {\n ajaxUploading: supportsAjaxFileUploading,\n blobUploading: supportsUploadingBlobs,\n canDetermineSize: supportsAjaxFileUploading,\n chunking: supportsChunking,\n deleteFileCors: supportsDeleteFileCors,\n deleteFileCorsXdr: supportsDeleteFileXdr, //NOTE: will also return true in IE10, where XDR is also supported\n deleteFileCorsXhr: supportsDeleteFileCorsXhr,\n dialogElement: !!window.HTMLDialogElement,\n fileDrop: supportsFileDrop,\n folderDrop: supportsFolderDrop,\n folderSelection: supportsFolderSelection,\n imagePreviews: supportsImagePreviews,\n imageValidation: supportsImagePreviews,\n itemSizeValidation: supportsAjaxFileUploading,\n pause: supportsChunking,\n progressBar: supportsUploadProgress,\n resume: supportsResume,\n scaling: supportsImagePreviews && supportsUploadingBlobs,\n tiffPreviews: qq.safari(), // Not the best solution, but simple and probably accurate enough (for now)\n unlimitedScaledImageSize: !qq.ios(), // false simply indicates that there is some known limit\n uploading: supportsUploading,\n uploadCors: supportsUploadCors,\n uploadCustomHeaders: supportsAjaxFileUploading,\n uploadNonMultipart: supportsAjaxFileUploading,\n uploadViaPaste: supportsUploadViaPaste\n };\n\n}());\n","/*globals qq*/\n\n// Is the passed object a promise instance?\nqq.isGenericPromise = function(maybePromise) {\n \"use strict\";\n return !!(maybePromise && maybePromise.then && qq.isFunction(maybePromise.then));\n};\n\nqq.Promise = function() {\n \"use strict\";\n\n var successArgs, failureArgs,\n successCallbacks = [],\n failureCallbacks = [],\n doneCallbacks = [],\n state = 0;\n\n qq.extend(this, {\n then: function(onSuccess, onFailure) {\n if (state === 0) {\n if (onSuccess) {\n successCallbacks.push(onSuccess);\n }\n if (onFailure) {\n failureCallbacks.push(onFailure);\n }\n }\n else if (state === -1) {\n onFailure && onFailure.apply(null, failureArgs);\n }\n else if (onSuccess) {\n onSuccess.apply(null, successArgs);\n }\n\n return this;\n },\n\n done: function(callback) {\n if (state === 0) {\n doneCallbacks.push(callback);\n }\n else {\n callback.apply(null, failureArgs === undefined ? successArgs : failureArgs);\n }\n\n return this;\n },\n\n success: function() {\n state = 1;\n successArgs = arguments;\n\n if (successCallbacks.length) {\n qq.each(successCallbacks, function(idx, callback) {\n callback.apply(null, successArgs);\n });\n }\n\n if (doneCallbacks.length) {\n qq.each(doneCallbacks, function(idx, callback) {\n callback.apply(null, successArgs);\n });\n }\n\n return this;\n },\n\n failure: function() {\n state = -1;\n failureArgs = arguments;\n\n if (failureCallbacks.length) {\n qq.each(failureCallbacks, function(idx, callback) {\n callback.apply(null, failureArgs);\n });\n }\n\n if (doneCallbacks.length) {\n qq.each(doneCallbacks, function(idx, callback) {\n callback.apply(null, failureArgs);\n });\n }\n\n return this;\n }\n });\n};\n","/*globals qq, document, CustomEvent*/\nqq.DragAndDrop = function(o) {\n \"use strict\";\n\n var options,\n HIDE_ZONES_EVENT_NAME = \"qq-hidezones\",\n HIDE_BEFORE_ENTER_ATTR = \"qq-hide-dropzone\",\n uploadDropZones = [],\n droppedFiles = [],\n disposeSupport = new qq.DisposeSupport();\n\n options = {\n dropZoneElements: [],\n allowMultipleItems: true,\n classes: {\n dropActive: null\n },\n callbacks: new qq.DragAndDrop.callbacks()\n };\n\n qq.extend(options, o, true);\n\n function uploadDroppedFiles(files, uploadDropZone) {\n // We need to convert the `FileList` to an actual `Array` to avoid iteration issues\n var filesAsArray = Array.prototype.slice.call(files);\n\n options.callbacks.dropLog(\"Grabbed \" + files.length + \" dropped files.\");\n uploadDropZone.dropDisabled(false);\n options.callbacks.processingDroppedFilesComplete(filesAsArray, uploadDropZone.getElement());\n }\n\n function traverseFileTree(entry) {\n var parseEntryPromise = new qq.Promise();\n\n if (entry.isFile) {\n entry.file(function(file) {\n var name = entry.name,\n fullPath = entry.fullPath,\n indexOfNameInFullPath = fullPath.indexOf(name);\n\n // remove file name from full path string\n fullPath = fullPath.substr(0, indexOfNameInFullPath);\n\n // remove leading slash in full path string\n if (fullPath.charAt(0) === \"/\") {\n fullPath = fullPath.substr(1);\n }\n\n file.qqPath = fullPath;\n droppedFiles.push(file);\n parseEntryPromise.success();\n },\n function(fileError) {\n options.callbacks.dropLog(\"Problem parsing '\" + entry.fullPath + \"'. FileError code \" + fileError.code + \".\", \"error\");\n parseEntryPromise.failure();\n });\n }\n else if (entry.isDirectory) {\n getFilesInDirectory(entry).then(\n function allEntriesRead(entries) {\n var entriesLeft = entries.length;\n\n qq.each(entries, function(idx, entry) {\n traverseFileTree(entry).done(function() {\n entriesLeft -= 1;\n\n if (entriesLeft === 0) {\n parseEntryPromise.success();\n }\n });\n });\n\n if (!entries.length) {\n parseEntryPromise.success();\n }\n },\n\n function readFailure(fileError) {\n options.callbacks.dropLog(\"Problem parsing '\" + entry.fullPath + \"'. FileError code \" + fileError.code + \".\", \"error\");\n parseEntryPromise.failure();\n }\n );\n }\n\n return parseEntryPromise;\n }\n\n // Promissory. Guaranteed to read all files in the root of the passed directory.\n function getFilesInDirectory(entry, reader, accumEntries, existingPromise) {\n var promise = existingPromise || new qq.Promise(),\n dirReader = reader || entry.createReader();\n\n dirReader.readEntries(\n function readSuccess(entries) {\n var newEntries = accumEntries ? accumEntries.concat(entries) : entries;\n\n if (entries.length) {\n setTimeout(function() { // prevent stack overflow, however unlikely\n getFilesInDirectory(entry, dirReader, newEntries, promise);\n }, 0);\n }\n else {\n promise.success(newEntries);\n }\n },\n\n promise.failure\n );\n\n return promise;\n }\n\n function handleDataTransfer(dataTransfer, uploadDropZone) {\n var pendingFolderPromises = [],\n handleDataTransferPromise = new qq.Promise();\n\n options.callbacks.processingDroppedFiles();\n uploadDropZone.dropDisabled(true);\n\n if (dataTransfer.files.length > 1 && !options.allowMultipleItems) {\n options.callbacks.processingDroppedFilesComplete([]);\n options.callbacks.dropError(\"tooManyFilesError\", \"\");\n uploadDropZone.dropDisabled(false);\n handleDataTransferPromise.failure();\n }\n else {\n droppedFiles = [];\n\n if (qq.isFolderDropSupported(dataTransfer)) {\n qq.each(dataTransfer.items, function(idx, item) {\n var entry = item.webkitGetAsEntry();\n\n if (entry) {\n //due to a bug in Chrome's File System API impl - #149735\n if (entry.isFile) {\n droppedFiles.push(item.getAsFile());\n }\n\n else {\n pendingFolderPromises.push(traverseFileTree(entry).done(function() {\n pendingFolderPromises.pop();\n if (pendingFolderPromises.length === 0) {\n handleDataTransferPromise.success();\n }\n }));\n }\n }\n });\n }\n else {\n droppedFiles = dataTransfer.files;\n }\n\n if (pendingFolderPromises.length === 0) {\n handleDataTransferPromise.success();\n }\n }\n\n return handleDataTransferPromise;\n }\n\n function setupDropzone(dropArea) {\n var dropZone = new qq.UploadDropZone({\n HIDE_ZONES_EVENT_NAME: HIDE_ZONES_EVENT_NAME,\n element: dropArea,\n onEnter: function(e) {\n qq(dropArea).addClass(options.classes.dropActive);\n e.stopPropagation();\n },\n onLeaveNotDescendants: function(e) {\n qq(dropArea).removeClass(options.classes.dropActive);\n },\n onDrop: function(e) {\n handleDataTransfer(e.dataTransfer, dropZone).then(\n function() {\n uploadDroppedFiles(droppedFiles, dropZone);\n },\n function() {\n options.callbacks.dropLog(\"Drop event DataTransfer parsing failed. No files will be uploaded.\", \"error\");\n }\n );\n }\n });\n\n disposeSupport.addDisposer(function() {\n dropZone.dispose();\n });\n\n qq(dropArea).hasAttribute(HIDE_BEFORE_ENTER_ATTR) && qq(dropArea).hide();\n\n uploadDropZones.push(dropZone);\n\n return dropZone;\n }\n\n function isFileDrag(dragEvent) {\n var fileDrag;\n\n qq.each(dragEvent.dataTransfer.types, function(key, val) {\n if (val === \"Files\") {\n fileDrag = true;\n return false;\n }\n });\n\n return fileDrag;\n }\n\n // Attempt to determine when the file has left the document. It is not always possible to detect this\n // in all cases, but it is generally possible in all browsers, with a few exceptions.\n //\n // Exceptions:\n // * IE10+ & Safari: We can't detect a file leaving the document if the Explorer window housing the file\n // overlays the browser window.\n // * IE10+: If the file is dragged out of the window too quickly, IE does not set the expected values of the\n // event's X & Y properties.\n function leavingDocumentOut(e) {\n if (qq.firefox()) {\n return !e.relatedTarget;\n }\n\n if (qq.safari()) {\n return e.x < 0 || e.y < 0;\n }\n\n return e.x === 0 && e.y === 0;\n }\n\n function setupDragDrop() {\n var dropZones = options.dropZoneElements,\n\n maybeHideDropZones = function() {\n setTimeout(function() {\n qq.each(dropZones, function(idx, dropZone) {\n qq(dropZone).hasAttribute(HIDE_BEFORE_ENTER_ATTR) && qq(dropZone).hide();\n qq(dropZone).removeClass(options.classes.dropActive);\n });\n }, 10);\n };\n\n qq.each(dropZones, function(idx, dropZone) {\n var uploadDropZone = setupDropzone(dropZone);\n\n // IE <= 9 does not support the File API used for drag+drop uploads\n if (dropZones.length && qq.supportedFeatures.fileDrop) {\n disposeSupport.attach(document, \"dragenter\", function(e) {\n if (!uploadDropZone.dropDisabled() && isFileDrag(e)) {\n qq.each(dropZones, function(idx, dropZone) {\n // We can't apply styles to non-HTMLElements, since they lack the `style` property.\n // Also, if the drop zone isn't initially hidden, let's not mess with `style.display`.\n if (dropZone instanceof HTMLElement &&\n qq(dropZone).hasAttribute(HIDE_BEFORE_ENTER_ATTR)) {\n\n qq(dropZone).css({display: \"block\"});\n }\n });\n }\n });\n }\n });\n\n disposeSupport.attach(document, \"dragleave\", function(e) {\n if (leavingDocumentOut(e)) {\n maybeHideDropZones();\n }\n });\n\n // Just in case we were not able to detect when a dragged file has left the document,\n // hide all relevant drop zones the next time the mouse enters the document.\n // Note that mouse events such as this one are not fired during drag operations.\n disposeSupport.attach(qq(document).children()[0], \"mouseenter\", function(e) {\n maybeHideDropZones();\n });\n\n disposeSupport.attach(document, \"drop\", function(e) {\n e.preventDefault();\n maybeHideDropZones();\n });\n\n disposeSupport.attach(document, HIDE_ZONES_EVENT_NAME, maybeHideDropZones);\n }\n\n setupDragDrop();\n\n qq.extend(this, {\n setupExtraDropzone: function(element) {\n options.dropZoneElements.push(element);\n setupDropzone(element);\n },\n\n removeDropzone: function(element) {\n var i,\n dzs = options.dropZoneElements;\n\n for (i in dzs) {\n if (dzs[i] === element) {\n return dzs.splice(i, 1);\n }\n }\n },\n\n dispose: function() {\n disposeSupport.dispose();\n qq.each(uploadDropZones, function(idx, dropZone) {\n dropZone.dispose();\n });\n }\n });\n};\n\nqq.DragAndDrop.callbacks = function() {\n \"use strict\";\n\n return {\n processingDroppedFiles: function() {},\n processingDroppedFilesComplete: function(files, targetEl) {},\n dropError: function(code, errorSpecifics) {\n qq.log(\"Drag & drop error code '\" + code + \" with these specifics: '\" + errorSpecifics + \"'\", \"error\");\n },\n dropLog: function(message, level) {\n qq.log(message, level);\n }\n };\n};\n\nqq.UploadDropZone = function(o) {\n \"use strict\";\n\n var disposeSupport = new qq.DisposeSupport(),\n options, element, preventDrop, dropOutsideDisabled;\n\n options = {\n element: null,\n onEnter: function(e) {},\n onLeave: function(e) {},\n // is not fired when leaving element by hovering descendants\n onLeaveNotDescendants: function(e) {},\n onDrop: function(e) {}\n };\n\n qq.extend(options, o);\n element = options.element;\n\n function dragoverShouldBeCanceled() {\n return qq.safari() || (qq.firefox() && qq.windows());\n }\n\n function disableDropOutside(e) {\n // run only once for all instances\n if (!dropOutsideDisabled) {\n\n // for these cases we need to catch onDrop to reset dropArea\n if (dragoverShouldBeCanceled) {\n disposeSupport.attach(document, \"dragover\", function(e) {\n e.preventDefault();\n });\n } else {\n disposeSupport.attach(document, \"dragover\", function(e) {\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = \"none\";\n e.preventDefault();\n }\n });\n }\n\n dropOutsideDisabled = true;\n }\n }\n\n function isValidFileDrag(e) {\n // e.dataTransfer currently causing IE errors\n // IE9 does NOT support file API, so drag-and-drop is not possible\n if (!qq.supportedFeatures.fileDrop) {\n return false;\n }\n\n var effectTest, dt = e.dataTransfer,\n // do not check dt.types.contains in webkit, because it crashes safari 4\n isSafari = qq.safari();\n\n // dt.effectAllowed is none in Safari 5\n // dt.types.contains check is for firefox\n\n // dt.effectAllowed crashes IE 11 & 10 when files have been dragged from\n // the filesystem\n effectTest = qq.ie() && qq.supportedFeatures.fileDrop ? true : dt.effectAllowed !== \"none\";\n return dt && effectTest && (dt.files || (!isSafari && dt.types.contains && dt.types.contains(\"Files\")));\n }\n\n function isOrSetDropDisabled(isDisabled) {\n if (isDisabled !== undefined) {\n preventDrop = isDisabled;\n }\n return preventDrop;\n }\n\n function triggerHidezonesEvent() {\n var hideZonesEvent;\n\n function triggerUsingOldApi() {\n hideZonesEvent = document.createEvent(\"Event\");\n hideZonesEvent.initEvent(options.HIDE_ZONES_EVENT_NAME, true, true);\n }\n\n if (window.CustomEvent) {\n try {\n hideZonesEvent = new CustomEvent(options.HIDE_ZONES_EVENT_NAME);\n }\n catch (err) {\n triggerUsingOldApi();\n }\n }\n else {\n triggerUsingOldApi();\n }\n\n document.dispatchEvent(hideZonesEvent);\n }\n\n function attachEvents() {\n disposeSupport.attach(element, \"dragover\", function(e) {\n if (!isValidFileDrag(e)) {\n return;\n }\n\n // dt.effectAllowed crashes IE 11 & 10 when files have been dragged from\n // the filesystem\n var effect = qq.ie() && qq.supportedFeatures.fileDrop ? null : e.dataTransfer.effectAllowed;\n if (effect === \"move\" || effect === \"linkMove\") {\n e.dataTransfer.dropEffect = \"move\"; // for FF (only move allowed)\n } else {\n e.dataTransfer.dropEffect = \"copy\"; // for Chrome\n }\n\n e.stopPropagation();\n e.preventDefault();\n });\n\n disposeSupport.attach(element, \"dragenter\", function(e) {\n if (!isOrSetDropDisabled()) {\n if (!isValidFileDrag(e)) {\n return;\n }\n options.onEnter(e);\n }\n });\n\n disposeSupport.attach(element, \"dragleave\", function(e) {\n if (!isValidFileDrag(e)) {\n return;\n }\n\n options.onLeave(e);\n\n var relatedTarget = document.elementFromPoint(e.clientX, e.clientY);\n // do not fire when moving a mouse over a descendant\n if (qq(this).contains(relatedTarget)) {\n return;\n }\n\n options.onLeaveNotDescendants(e);\n });\n\n disposeSupport.attach(element, \"drop\", function(e) {\n if (!isOrSetDropDisabled()) {\n if (!isValidFileDrag(e)) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n options.onDrop(e);\n\n triggerHidezonesEvent();\n }\n });\n }\n\n disableDropOutside();\n attachEvents();\n\n qq.extend(this, {\n dropDisabled: function(isDisabled) {\n return isOrSetDropDisabled(isDisabled);\n },\n\n dispose: function() {\n disposeSupport.dispose();\n },\n\n getElement: function() {\n return element;\n }\n });\n};\n"]} \ No newline at end of file +{"version":3,"sources":["?","../client/js/util.js","../client/js/export.js","../client/js/version.js","../client/js/features.js","../client/js/promise.js","../client/js/dnd.js"],"names":["global","qq","element","hide","style","display","this","attach","type","fn","addEventListener","attachEvent","detach","removeEventListener","detachEvent","contains","descendant","compareDocumentPosition","insertBefore","elementB","parentNode","remove","removeChild","css","styles","Error","opacity","filter","Math","round","extend","hasClass","name","considerParent","re","RegExp","test","className","addClass","removeClass","replace","getByClass","first","candidates","result","querySelector","querySelectorAll","getElementsByTagName","each","idx","val","push","getFirstByClass","children","child","firstChild","nodeType","nextSibling","setText","text","innerText","textContent","clearText","hasAttribute","attrName","attrVal","exec","getAttribute","undefined","canvasToBlob","canvas","mime","quality","dataUriToBlob","toDataURL","dataUri","arrayBuffer","byteString","intArray","mimeString","createBlob","data","BlobBuilder","window","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","blobBuilder","append","getBlob","Blob","split","indexOf","atob","decodeURI","ArrayBuffer","length","Uint8Array","character","charCodeAt","log","message","level","console","isObject","variable","Object","prototype","toString","call","isFunction","isArray","value","buffer","constructor","isItemList","maybeItemList","isNodeList","maybeNodeList","item","namedItem","isString","maybeString","trimStr","string","String","trim","format","str","args","Array","slice","arguments","newStr","nextIdxToReplace","substring","isFile","maybeFile","File","isFileList","maybeFileList","FileList","isFileOrInput","maybeFileOrInput","isInput","maybeInput","notFile","evaluateType","normalizedType","toLowerCase","HTMLInputElement","tagName","isBlob","maybeBlob","isXhrUploadSupported","input","document","createElement","multiple","FormData","createXhrInstance","upload","XMLHttpRequest","ActiveXObject","error","isFolderDropSupported","dataTransfer","items","webkitGetAsEntry","isFileChunkingSupported","androidStock","webkitSlice","mozSlice","sliceBlob","fileOrBlob","start","end","arrayBufferToHex","bytesAsHex","bytes","byt","byteAsHexStr","readBlobToHex","blob","startOffset","initialBlob","fileReader","FileReader","promise","Promise","onload","success","onerror","failure","readAsArrayBuffer","second","extendNested","prop","override","target","sourceFn","super_","source","srcPropName","srcPropVal","arr","elt","from","len","hasOwnProperty","getUniqueId","c","r","random","ie","navigator","userAgent","ie7","ie8","ie10","ie11","edge","safari","vendor","chrome","opera","firefox","windows","platform","android","ios6","ios","ios7","ios8","ios800","iosChrome","iosSafari","iosSafariWebView","preventDefault","e","returnValue","toElement","div","html","innerHTML","iterableItem","callback","keyOrIndex","retVal","Storage","key","getItem","charAt","bind","oldFunc","context","newArgs","concat","apply","obj2url","obj","temp","prefixDone","uristrings","prefix","add","nextObj","i","nextTemp","encodeURIComponent","join","obj2FormData","formData","arrayKeyName","obj2Inputs","form","setAttribute","appendChild","parseJson","json","JSON","parse","eval","getExtension","filename","extIdx","lastIndexOf","substr","getFilename","blobOrFileInput","fileName","DisposeSupport","disposers","dispose","disposer","shift","addDisposer","disposeFunction","define","amd","module","exports","version","supportedFeatures","testSupportsFileInputElement","tempInput","supported","disabled","ex","isChrome14OrHigher","match","isCrossOriginXhrSupported","withCredentials","isXdrSupported","XDomainRequest","isCrossOriginAjaxSupported","isFolderSelectionSupported","webkitdirectory","isLocalStorageSupported","localStorage","setItem","isDragAndDropSupported","span","supportsUploading","supportsUploadingBlobs","supportsFileDrop","supportsAjaxFileUploading","supportsFolderDrop","supportsChunking","supportsResume","supportsUploadViaPaste","supportsUploadCors","supportsDeleteFileXdr","supportsDeleteFileCorsXhr","supportsDeleteFileCors","supportsFolderSelection","supportsImagePreviews","supportsUploadProgress","postMessage","ajaxUploading","blobUploading","canDetermineSize","chunking","deleteFileCors","deleteFileCorsXdr","deleteFileCorsXhr","dialogElement","HTMLDialogElement","fileDrop","folderDrop","folderSelection","imagePreviews","imageValidation","itemSizeValidation","pause","progressBar","resume","scaling","tiffPreviews","unlimitedScaledImageSize","uploading","uploadCors","uploadCustomHeaders","uploadNonMultipart","uploadViaPaste","isGenericPromise","maybePromise","then","successArgs","failureArgs","successCallbacks","failureCallbacks","doneCallbacks","state","onSuccess","onFailure","done","DragAndDrop","o","uploadDroppedFiles","files","uploadDropZone","filesAsArray","options","callbacks","dropLog","dropDisabled","processingDroppedFilesComplete","getElement","traverseFileTree","entry","parseEntryPromise","file","qqPath","extractDirectoryPath","droppedFiles","fileError","fullPath","code","isDirectory","getFilesInDirectory","entries","entriesLeft","indexOfNameInFullPath","reader","accumEntries","existingPromise","dirReader","createReader","readEntries","newEntries","setTimeout","handleDataTransfer","pendingFolderPromises","handleDataTransferPromise","processingDroppedFiles","allowMultipleItems","dropError","getAsFile","pop","setupDropzone","dropArea","dropZone","UploadDropZone","HIDE_ZONES_EVENT_NAME","onEnter","classes","dropActive","stopPropagation","onLeaveNotDescendants","onDrop","disposeSupport","uploadDropZones","isFileDrag","dragEvent","fileDrag","types","leavingDocumentOut","x","y","setupDragDrop","dropZones","dropZoneElements","maybeHideDropZones","HTMLElement","setupExtraDropzone","removeDropzone","dzs","splice","_testing","targetEl","errorSpecifics","dragoverShouldBeCanceled","disableDropOutside","dropOutsideDisabled","dropEffect","isValidFileDrag","effectTest","dt","isSafari","effectAllowed","includes","isOrSetDropDisabled","isDisabled","preventDrop","triggerHidezonesEvent","triggerUsingOldApi","hideZonesEvent","createEvent","initEvent","CustomEvent","err","dispatchEvent","attachEvents","effect","onLeave","relatedTarget","elementFromPoint","clientX","clientY"],"mappings":"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","file":"dnd.min.js","sourcesContent":[null,"/*globals window, navigator, document, FormData, File, HTMLInputElement, XMLHttpRequest, Blob, Storage, ActiveXObject */\n/* jshint -W079 */\nvar qq = function(element) {\n \"use strict\";\n\n return {\n hide: function() {\n element.style.display = \"none\";\n return this;\n },\n\n /** Returns the function which detaches attached event */\n attach: function(type, fn) {\n if (element.addEventListener) {\n element.addEventListener(type, fn, false);\n } else if (element.attachEvent) {\n element.attachEvent(\"on\" + type, fn);\n }\n return function() {\n qq(element).detach(type, fn);\n };\n },\n\n detach: function(type, fn) {\n if (element.removeEventListener) {\n element.removeEventListener(type, fn, false);\n } else if (element.attachEvent) {\n element.detachEvent(\"on\" + type, fn);\n }\n return this;\n },\n\n contains: function(descendant) {\n // The [W3C spec](http://www.w3.org/TR/domcore/#dom-node-contains)\n // says a `null` (or ostensibly `undefined`) parameter\n // passed into `Node.contains` should result in a false return value.\n // IE7 throws an exception if the parameter is `undefined` though.\n if (!descendant) {\n return false;\n }\n\n // compareposition returns false in this case\n if (element === descendant) {\n return true;\n }\n\n if (element.contains) {\n return element.contains(descendant);\n } else {\n /*jslint bitwise: true*/\n return !!(descendant.compareDocumentPosition(element) & 8);\n }\n },\n\n /**\n * Insert this element before elementB.\n */\n insertBefore: function(elementB) {\n elementB.parentNode.insertBefore(element, elementB);\n return this;\n },\n\n remove: function() {\n element.parentNode.removeChild(element);\n return this;\n },\n\n /**\n * Sets styles for an element.\n * Fixes opacity in IE6-8.\n */\n css: function(styles) {\n /*jshint eqnull: true*/\n if (element.style == null) {\n throw new qq.Error(\"Can't apply style to node as it is not on the HTMLElement prototype chain!\");\n }\n\n /*jshint -W116*/\n if (styles.opacity != null) {\n if (typeof element.style.opacity !== \"string\" && typeof (element.filters) !== \"undefined\") {\n styles.filter = \"alpha(opacity=\" + Math.round(100 * styles.opacity) + \")\";\n }\n }\n qq.extend(element.style, styles);\n\n return this;\n },\n\n hasClass: function(name, considerParent) {\n var re = new RegExp(\"(^| )\" + name + \"( |$)\");\n return re.test(element.className) || !!(considerParent && re.test(element.parentNode.className));\n },\n\n addClass: function(name) {\n if (!qq(element).hasClass(name)) {\n element.className += \" \" + name;\n }\n return this;\n },\n\n removeClass: function(name) {\n var re = new RegExp(\"(^| )\" + name + \"( |$)\");\n element.className = element.className.replace(re, \" \").replace(/^\\s+|\\s+$/g, \"\");\n return this;\n },\n\n getByClass: function(className, first) {\n var candidates,\n result = [];\n\n if (first && element.querySelector) {\n return element.querySelector(\".\" + className);\n }\n else if (element.querySelectorAll) {\n return element.querySelectorAll(\".\" + className);\n }\n\n candidates = element.getElementsByTagName(\"*\");\n\n qq.each(candidates, function(idx, val) {\n if (qq(val).hasClass(className)) {\n result.push(val);\n }\n });\n return first ? result[0] : result;\n },\n\n getFirstByClass: function(className) {\n return qq(element).getByClass(className, true);\n },\n\n children: function() {\n var children = [],\n child = element.firstChild;\n\n while (child) {\n if (child.nodeType === 1) {\n children.push(child);\n }\n child = child.nextSibling;\n }\n\n return children;\n },\n\n setText: function(text) {\n element.innerText = text;\n element.textContent = text;\n return this;\n },\n\n clearText: function() {\n return qq(element).setText(\"\");\n },\n\n // Returns true if the attribute exists on the element\n // AND the value of the attribute is NOT \"false\" (case-insensitive)\n hasAttribute: function(attrName) {\n var attrVal;\n\n if (element.hasAttribute) {\n\n if (!element.hasAttribute(attrName)) {\n return false;\n }\n\n /*jshint -W116*/\n return (/^false$/i).exec(element.getAttribute(attrName)) == null;\n }\n else {\n attrVal = element[attrName];\n\n if (attrVal === undefined) {\n return false;\n }\n\n /*jshint -W116*/\n return (/^false$/i).exec(attrVal) == null;\n }\n }\n };\n};\n\n(function() {\n \"use strict\";\n\n qq.canvasToBlob = function(canvas, mime, quality) {\n return qq.dataUriToBlob(canvas.toDataURL(mime, quality));\n };\n\n qq.dataUriToBlob = function(dataUri) {\n var arrayBuffer, byteString,\n createBlob = function(data, mime) {\n var BlobBuilder = window.BlobBuilder ||\n window.WebKitBlobBuilder ||\n window.MozBlobBuilder ||\n window.MSBlobBuilder,\n blobBuilder = BlobBuilder && new BlobBuilder();\n\n if (blobBuilder) {\n blobBuilder.append(data);\n return blobBuilder.getBlob(mime);\n }\n else {\n return new Blob([data], {type: mime});\n }\n },\n intArray, mimeString;\n\n // convert base64 to raw binary data held in a string\n if (dataUri.split(\",\")[0].indexOf(\"base64\") >= 0) {\n byteString = atob(dataUri.split(\",\")[1]);\n }\n else {\n byteString = decodeURI(dataUri.split(\",\")[1]);\n }\n\n // extract the MIME\n mimeString = dataUri.split(\",\")[0]\n .split(\":\")[1]\n .split(\";\")[0];\n\n // write the bytes of the binary string to an ArrayBuffer\n arrayBuffer = new ArrayBuffer(byteString.length);\n intArray = new Uint8Array(arrayBuffer);\n qq.each(byteString, function(idx, character) {\n intArray[idx] = character.charCodeAt(0);\n });\n\n return createBlob(arrayBuffer, mimeString);\n };\n\n qq.log = function(message, level) {\n if (window.console) {\n if (!level || level === \"info\") {\n window.console.log(message);\n }\n else\n {\n if (window.console[level]) {\n window.console[level](message);\n }\n else {\n window.console.log(\"<\" + level + \"> \" + message);\n }\n }\n }\n };\n\n qq.isObject = function(variable) {\n return variable && !variable.nodeType && Object.prototype.toString.call(variable) === \"[object Object]\";\n };\n\n qq.isFunction = function(variable) {\n return typeof (variable) === \"function\";\n };\n\n /**\n * Check the type of a value. Is it an \"array\"?\n *\n * @param value value to test.\n * @returns true if the value is an array or associated with an `ArrayBuffer`\n */\n qq.isArray = function(value) {\n return Object.prototype.toString.call(value) === \"[object Array]\" ||\n (value && window.ArrayBuffer && value.buffer && value.buffer.constructor === ArrayBuffer);\n };\n\n // Looks for an object on a `DataTransfer` object that is associated with drop events when utilizing the Filesystem API.\n qq.isItemList = function(maybeItemList) {\n return Object.prototype.toString.call(maybeItemList) === \"[object DataTransferItemList]\";\n };\n\n // Looks for an object on a `NodeList` or an `HTMLCollection`|`HTMLFormElement`|`HTMLSelectElement`\n // object that is associated with collections of Nodes.\n qq.isNodeList = function(maybeNodeList) {\n return Object.prototype.toString.call(maybeNodeList) === \"[object NodeList]\" ||\n // If `HTMLCollection` is the actual type of the object, we must determine this\n // by checking for expected properties/methods on the object\n (maybeNodeList.item && maybeNodeList.namedItem);\n };\n\n qq.isString = function(maybeString) {\n return Object.prototype.toString.call(maybeString) === \"[object String]\";\n };\n\n qq.trimStr = function(string) {\n if (String.prototype.trim) {\n return string.trim();\n }\n\n return string.replace(/^\\s+|\\s+$/g, \"\");\n };\n\n /**\n * @param str String to format.\n * @returns {string} A string, swapping argument values with the associated occurrence of {} in the passed string.\n */\n qq.format = function(str) {\n\n var args = Array.prototype.slice.call(arguments, 1),\n newStr = str,\n nextIdxToReplace = newStr.indexOf(\"{}\");\n\n qq.each(args, function(idx, val) {\n var strBefore = newStr.substring(0, nextIdxToReplace),\n strAfter = newStr.substring(nextIdxToReplace + 2);\n\n newStr = strBefore + val + strAfter;\n nextIdxToReplace = newStr.indexOf(\"{}\", nextIdxToReplace + val.length);\n\n // End the loop if we have run out of tokens (when the arguments exceed the # of tokens)\n if (nextIdxToReplace < 0) {\n return false;\n }\n });\n\n return newStr;\n };\n\n qq.isFile = function(maybeFile) {\n return window.File && Object.prototype.toString.call(maybeFile) === \"[object File]\";\n };\n\n qq.isFileList = function(maybeFileList) {\n return window.FileList && Object.prototype.toString.call(maybeFileList) === \"[object FileList]\";\n };\n\n qq.isFileOrInput = function(maybeFileOrInput) {\n return qq.isFile(maybeFileOrInput) || qq.isInput(maybeFileOrInput);\n };\n\n qq.isInput = function(maybeInput, notFile) {\n var evaluateType = function(type) {\n var normalizedType = type.toLowerCase();\n\n if (notFile) {\n return normalizedType !== \"file\";\n }\n\n return normalizedType === \"file\";\n };\n\n if (window.HTMLInputElement) {\n if (Object.prototype.toString.call(maybeInput) === \"[object HTMLInputElement]\") {\n if (maybeInput.type && evaluateType(maybeInput.type)) {\n return true;\n }\n }\n }\n if (maybeInput.tagName) {\n if (maybeInput.tagName.toLowerCase() === \"input\") {\n if (maybeInput.type && evaluateType(maybeInput.type)) {\n return true;\n }\n }\n }\n\n return false;\n };\n\n qq.isBlob = function(maybeBlob) {\n if (window.Blob && Object.prototype.toString.call(maybeBlob) === \"[object Blob]\") {\n return true;\n }\n };\n\n qq.isXhrUploadSupported = function() {\n var input = document.createElement(\"input\");\n input.type = \"file\";\n\n return (\n input.multiple !== undefined &&\n typeof File !== \"undefined\" &&\n typeof FormData !== \"undefined\" &&\n typeof (qq.createXhrInstance()).upload !== \"undefined\");\n };\n\n // Fall back to ActiveX is native XHR is disabled (possible in any version of IE).\n qq.createXhrInstance = function() {\n if (window.XMLHttpRequest) {\n return new XMLHttpRequest();\n }\n\n try {\n return new ActiveXObject(\"MSXML2.XMLHTTP.3.0\");\n }\n catch (error) {\n qq.log(\"Neither XHR or ActiveX are supported!\", \"error\");\n return null;\n }\n };\n\n qq.isFolderDropSupported = function(dataTransfer) {\n return dataTransfer.items &&\n dataTransfer.items.length > 0 &&\n dataTransfer.items[0].webkitGetAsEntry;\n };\n\n qq.isFileChunkingSupported = function() {\n return !qq.androidStock() && //Android's stock browser cannot upload Blobs correctly\n qq.isXhrUploadSupported() &&\n (File.prototype.slice !== undefined || File.prototype.webkitSlice !== undefined || File.prototype.mozSlice !== undefined);\n };\n\n qq.sliceBlob = function(fileOrBlob, start, end) {\n var slicer = fileOrBlob.slice || fileOrBlob.mozSlice || fileOrBlob.webkitSlice;\n\n return slicer.call(fileOrBlob, start, end);\n };\n\n qq.arrayBufferToHex = function(buffer) {\n var bytesAsHex = \"\",\n bytes = new Uint8Array(buffer);\n\n qq.each(bytes, function(idx, byt) {\n var byteAsHexStr = byt.toString(16);\n\n if (byteAsHexStr.length < 2) {\n byteAsHexStr = \"0\" + byteAsHexStr;\n }\n\n bytesAsHex += byteAsHexStr;\n });\n\n return bytesAsHex;\n };\n\n qq.readBlobToHex = function(blob, startOffset, length) {\n var initialBlob = qq.sliceBlob(blob, startOffset, startOffset + length),\n fileReader = new FileReader(),\n promise = new qq.Promise();\n\n fileReader.onload = function() {\n promise.success(qq.arrayBufferToHex(fileReader.result));\n };\n\n fileReader.onerror = promise.failure;\n\n fileReader.readAsArrayBuffer(initialBlob);\n\n return promise;\n };\n\n qq.extend = function(first, second, extendNested) {\n qq.each(second, function(prop, val) {\n if (extendNested && qq.isObject(val)) {\n if (first[prop] === undefined) {\n first[prop] = {};\n }\n qq.extend(first[prop], val, true);\n }\n else {\n first[prop] = val;\n }\n });\n\n return first;\n };\n\n /**\n * Allow properties in one object to override properties in another,\n * keeping track of the original values from the target object.\n *\n * Note that the pre-overriden properties to be overriden by the source will be passed into the `sourceFn` when it is invoked.\n *\n * @param target Update properties in this object from some source\n * @param sourceFn A function that, when invoked, will return properties that will replace properties with the same name in the target.\n * @returns {object} The target object\n */\n qq.override = function(target, sourceFn) {\n var super_ = {},\n source = sourceFn(super_);\n\n qq.each(source, function(srcPropName, srcPropVal) {\n if (target[srcPropName] !== undefined) {\n super_[srcPropName] = target[srcPropName];\n }\n\n target[srcPropName] = srcPropVal;\n });\n\n return target;\n };\n\n /**\n * Searches for a given element (elt) in the array, returns -1 if it is not present.\n */\n qq.indexOf = function(arr, elt, from) {\n if (arr.indexOf) {\n return arr.indexOf(elt, from);\n }\n\n from = from || 0;\n var len = arr.length;\n\n if (from < 0) {\n from += len;\n }\n\n for (; from < len; from += 1) {\n if (arr.hasOwnProperty(from) && arr[from] === elt) {\n return from;\n }\n }\n return -1;\n };\n\n //this is a version 4 UUID\n qq.getUniqueId = function() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n /*jslint eqeq: true, bitwise: true*/\n var r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n\n //\n // Browsers and platforms detection\n qq.ie = function() {\n return navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.userAgent.indexOf(\"Trident\") !== -1;\n };\n\n qq.ie7 = function() {\n return navigator.userAgent.indexOf(\"MSIE 7\") !== -1;\n };\n\n qq.ie8 = function() {\n return navigator.userAgent.indexOf(\"MSIE 8\") !== -1;\n };\n\n qq.ie10 = function() {\n return navigator.userAgent.indexOf(\"MSIE 10\") !== -1;\n };\n\n qq.ie11 = function() {\n return qq.ie() && navigator.userAgent.indexOf(\"rv:11\") !== -1;\n };\n\n qq.edge = function() {\n return navigator.userAgent.indexOf(\"Edge\") >= 0;\n };\n\n qq.safari = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Apple\") !== -1;\n };\n\n qq.chrome = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Google\") !== -1;\n };\n\n qq.opera = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Opera\") !== -1;\n };\n\n qq.firefox = function() {\n return (!qq.edge() && !qq.ie11() && navigator.userAgent.indexOf(\"Mozilla\") !== -1 && navigator.vendor !== undefined && navigator.vendor === \"\");\n };\n\n qq.windows = function() {\n return navigator.platform === \"Win32\";\n };\n\n qq.android = function() {\n return navigator.userAgent.toLowerCase().indexOf(\"android\") !== -1;\n };\n\n // We need to identify the Android stock browser via the UA string to work around various bugs in this browser,\n // such as the one that prevents a `Blob` from being uploaded.\n qq.androidStock = function() {\n return qq.android() && navigator.userAgent.toLowerCase().indexOf(\"chrome\") < 0;\n };\n\n qq.ios6 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 6_\") !== -1;\n };\n\n qq.ios7 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 7_\") !== -1;\n };\n\n qq.ios8 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 8_\") !== -1;\n };\n\n // iOS 8.0.0\n qq.ios800 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 8_0 \") !== -1;\n };\n\n qq.ios = function() {\n /*jshint -W014 */\n return navigator.userAgent.indexOf(\"iPad\") !== -1\n || navigator.userAgent.indexOf(\"iPod\") !== -1\n || navigator.userAgent.indexOf(\"iPhone\") !== -1;\n };\n\n qq.iosChrome = function() {\n return qq.ios() && navigator.userAgent.indexOf(\"CriOS\") !== -1;\n };\n\n qq.iosSafari = function() {\n return qq.ios() && !qq.iosChrome() && navigator.userAgent.indexOf(\"Safari\") !== -1;\n };\n\n qq.iosSafariWebView = function() {\n return qq.ios() && !qq.iosChrome() && !qq.iosSafari();\n };\n\n //\n // Events\n\n qq.preventDefault = function(e) {\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n };\n\n /**\n * Creates and returns element from html string\n * Uses innerHTML to create an element\n */\n qq.toElement = (function() {\n var div = document.createElement(\"div\");\n return function(html) {\n div.innerHTML = html;\n var element = div.firstChild;\n div.removeChild(element);\n return element;\n };\n }());\n\n //key and value are passed to callback for each entry in the iterable item\n qq.each = function(iterableItem, callback) {\n var keyOrIndex, retVal;\n\n if (iterableItem) {\n // Iterate through [`Storage`](http://www.w3.org/TR/webstorage/#the-storage-interface) items\n if (window.Storage && iterableItem.constructor === window.Storage) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(iterableItem.key(keyOrIndex), iterableItem.getItem(iterableItem.key(keyOrIndex)));\n if (retVal === false) {\n break;\n }\n }\n }\n // `DataTransferItemList` & `NodeList` objects are array-like and should be treated as arrays\n // when iterating over items inside the object.\n else if (qq.isArray(iterableItem) || qq.isItemList(iterableItem) || qq.isNodeList(iterableItem)) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n if (retVal === false) {\n break;\n }\n }\n }\n else if (qq.isString(iterableItem)) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(keyOrIndex, iterableItem.charAt(keyOrIndex));\n if (retVal === false) {\n break;\n }\n }\n }\n else {\n for (keyOrIndex in iterableItem) {\n if (Object.prototype.hasOwnProperty.call(iterableItem, keyOrIndex)) {\n retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n if (retVal === false) {\n break;\n }\n }\n }\n }\n }\n };\n\n //include any args that should be passed to the new function after the context arg\n qq.bind = function(oldFunc, context) {\n if (qq.isFunction(oldFunc)) {\n var args = Array.prototype.slice.call(arguments, 2);\n\n return function() {\n var newArgs = qq.extend([], args);\n if (arguments.length) {\n newArgs = newArgs.concat(Array.prototype.slice.call(arguments));\n }\n return oldFunc.apply(context, newArgs);\n };\n }\n\n throw new Error(\"first parameter must be a function!\");\n };\n\n /**\n * obj2url() takes a json-object as argument and generates\n * a querystring. pretty much like jQuery.param()\n *\n * how to use:\n *\n * `qq.obj2url({a:'b',c:'d'},'http://any.url/upload?otherParam=value');`\n *\n * will result in:\n *\n * `http://any.url/upload?otherParam=value&a=b&c=d`\n *\n * @param Object JSON-Object\n * @param String current querystring-part\n * @return String encoded querystring\n */\n qq.obj2url = function(obj, temp, prefixDone) {\n /*jshint laxbreak: true*/\n var uristrings = [],\n prefix = \"&\",\n add = function(nextObj, i) {\n var nextTemp = temp\n ? (/\\[\\]$/.test(temp)) // prevent double-encoding\n ? temp\n : temp + \"[\" + i + \"]\"\n : i;\n if ((nextTemp !== \"undefined\") && (i !== \"undefined\")) {\n uristrings.push(\n (typeof nextObj === \"object\")\n ? qq.obj2url(nextObj, nextTemp, true)\n : (Object.prototype.toString.call(nextObj) === \"[object Function]\")\n ? encodeURIComponent(nextTemp) + \"=\" + encodeURIComponent(nextObj())\n : encodeURIComponent(nextTemp) + \"=\" + encodeURIComponent(nextObj)\n );\n }\n };\n\n if (!prefixDone && temp) {\n prefix = (/\\?/.test(temp)) ? (/\\?$/.test(temp)) ? \"\" : \"&\" : \"?\";\n uristrings.push(temp);\n uristrings.push(qq.obj2url(obj));\n } else if ((Object.prototype.toString.call(obj) === \"[object Array]\") && (typeof obj !== \"undefined\")) {\n qq.each(obj, function(idx, val) {\n add(val, idx);\n });\n } else if ((typeof obj !== \"undefined\") && (obj !== null) && (typeof obj === \"object\")) {\n qq.each(obj, function(prop, val) {\n add(val, prop);\n });\n } else {\n uristrings.push(encodeURIComponent(temp) + \"=\" + encodeURIComponent(obj));\n }\n\n if (temp) {\n return uristrings.join(prefix);\n } else {\n return uristrings.join(prefix)\n .replace(/^&/, \"\")\n .replace(/%20/g, \"+\");\n }\n };\n\n qq.obj2FormData = function(obj, formData, arrayKeyName) {\n if (!formData) {\n formData = new FormData();\n }\n\n qq.each(obj, function(key, val) {\n key = arrayKeyName ? arrayKeyName + \"[\" + key + \"]\" : key;\n\n if (qq.isObject(val)) {\n qq.obj2FormData(val, formData, key);\n }\n else if (qq.isFunction(val)) {\n formData.append(key, val());\n }\n else {\n formData.append(key, val);\n }\n });\n\n return formData;\n };\n\n qq.obj2Inputs = function(obj, form) {\n var input;\n\n if (!form) {\n form = document.createElement(\"form\");\n }\n\n qq.obj2FormData(obj, {\n append: function(key, val) {\n input = document.createElement(\"input\");\n input.setAttribute(\"name\", key);\n input.setAttribute(\"value\", val);\n form.appendChild(input);\n }\n });\n\n return form;\n };\n\n /**\n * Not recommended for use outside of Fine Uploader since this falls back to an unchecked eval if JSON.parse is not\n * implemented. For a more secure JSON.parse polyfill, use Douglas Crockford's json2.js.\n */\n qq.parseJson = function(json) {\n /*jshint evil: true*/\n if (window.JSON && qq.isFunction(JSON.parse)) {\n return JSON.parse(json);\n } else {\n return eval(\"(\" + json + \")\");\n }\n };\n\n /**\n * Retrieve the extension of a file, if it exists.\n *\n * @param filename\n * @returns {string || undefined}\n */\n qq.getExtension = function(filename) {\n var extIdx = filename.lastIndexOf(\".\") + 1;\n\n if (extIdx > 0) {\n return filename.substr(extIdx, filename.length - extIdx);\n }\n };\n\n qq.getFilename = function(blobOrFileInput) {\n /*jslint regexp: true*/\n\n if (qq.isInput(blobOrFileInput)) {\n // get input value and remove path to normalize\n return blobOrFileInput.value.replace(/.*(\\/|\\\\)/, \"\");\n }\n else if (qq.isFile(blobOrFileInput)) {\n if (blobOrFileInput.fileName !== null && blobOrFileInput.fileName !== undefined) {\n return blobOrFileInput.fileName;\n }\n }\n\n return blobOrFileInput.name;\n };\n\n /**\n * A generic module which supports object disposing in dispose() method.\n * */\n qq.DisposeSupport = function() {\n var disposers = [];\n\n return {\n /** Run all registered disposers */\n dispose: function() {\n var disposer;\n do {\n disposer = disposers.shift();\n if (disposer) {\n disposer();\n }\n }\n while (disposer);\n },\n\n /** Attach event handler and register de-attacher as a disposer */\n attach: function() {\n var args = arguments;\n /*jslint undef:true*/\n this.addDisposer(qq(args[0]).attach.apply(this, Array.prototype.slice.call(arguments, 1)));\n },\n\n /** Add disposer to the collection */\n addDisposer: function(disposeFunction) {\n disposers.push(disposeFunction);\n }\n };\n };\n}());\n","/* globals define, module, global, qq */\n(function() {\n \"use strict\";\n if (typeof define === \"function\" && define.amd) {\n define(function() {\n return qq;\n });\n }\n else if (typeof module !== \"undefined\" && module.exports) {\n module.exports = qq;\n }\n else {\n global.qq = qq;\n }\n}());\n","/*global qq */\nqq.version = \"5.16.2\";\n","/* globals qq */\nqq.supportedFeatures = (function() {\n \"use strict\";\n\n var supportsUploading,\n supportsUploadingBlobs,\n supportsFileDrop,\n supportsAjaxFileUploading,\n supportsFolderDrop,\n supportsChunking,\n supportsResume,\n supportsUploadViaPaste,\n supportsUploadCors,\n supportsDeleteFileXdr,\n supportsDeleteFileCorsXhr,\n supportsDeleteFileCors,\n supportsFolderSelection,\n supportsImagePreviews,\n supportsUploadProgress;\n\n function testSupportsFileInputElement() {\n var supported = true,\n tempInput;\n\n try {\n tempInput = document.createElement(\"input\");\n tempInput.type = \"file\";\n qq(tempInput).hide();\n\n if (tempInput.disabled) {\n supported = false;\n }\n }\n catch (ex) {\n supported = false;\n }\n\n return supported;\n }\n\n //only way to test for complete Clipboard API support at this time\n function isChrome14OrHigher() {\n return (qq.chrome() || qq.opera()) &&\n navigator.userAgent.match(/Chrome\\/[1][4-9]|Chrome\\/[2-9][0-9]/) !== undefined;\n }\n\n //Ensure we can send cross-origin `XMLHttpRequest`s\n function isCrossOriginXhrSupported() {\n if (window.XMLHttpRequest) {\n var xhr = qq.createXhrInstance();\n\n //Commonly accepted test for XHR CORS support.\n return xhr.withCredentials !== undefined;\n }\n\n return false;\n }\n\n //Test for (terrible) cross-origin ajax transport fallback for IE9 and IE8\n function isXdrSupported() {\n return window.XDomainRequest !== undefined;\n }\n\n // CORS Ajax requests are supported if it is either possible to send credentialed `XMLHttpRequest`s,\n // or if `XDomainRequest` is an available alternative.\n function isCrossOriginAjaxSupported() {\n if (isCrossOriginXhrSupported()) {\n return true;\n }\n\n return isXdrSupported();\n }\n\n function isFolderSelectionSupported() {\n // We know that folder selection is only supported in Chrome via this proprietary attribute for now\n return document.createElement(\"input\").webkitdirectory !== undefined;\n }\n\n function isLocalStorageSupported() {\n try {\n return !!window.localStorage &&\n // unpatched versions of IE10/11 have buggy impls of localStorage where setItem is a string\n qq.isFunction(window.localStorage.setItem);\n }\n catch (error) {\n // probably caught a security exception, so no localStorage for you\n return false;\n }\n }\n\n function isDragAndDropSupported() {\n var span = document.createElement(\"span\");\n\n return (\"draggable\" in span || (\"ondragstart\" in span && \"ondrop\" in span)) &&\n !qq.android() && !qq.ios();\n }\n\n supportsUploading = testSupportsFileInputElement();\n\n supportsAjaxFileUploading = supportsUploading && qq.isXhrUploadSupported();\n\n supportsUploadingBlobs = supportsAjaxFileUploading && !qq.androidStock();\n\n supportsFileDrop = supportsAjaxFileUploading && isDragAndDropSupported();\n\n // adapted from https://stackoverflow.com/a/23278460/486979\n supportsFolderDrop = supportsFileDrop && (function() {\n var input = document.createElement(\"input\");\n\n input.type = \"file\";\n return !!(\"webkitdirectory\" in (input || document.querySelectorAll(\"input[type=file]\")[0]));\n }());\n\n supportsChunking = supportsAjaxFileUploading && qq.isFileChunkingSupported();\n\n supportsResume = supportsAjaxFileUploading && supportsChunking && isLocalStorageSupported();\n\n supportsUploadViaPaste = supportsAjaxFileUploading && isChrome14OrHigher();\n\n supportsUploadCors = supportsUploading && (window.postMessage !== undefined || supportsAjaxFileUploading);\n\n supportsDeleteFileCorsXhr = isCrossOriginXhrSupported();\n\n supportsDeleteFileXdr = isXdrSupported();\n\n supportsDeleteFileCors = isCrossOriginAjaxSupported();\n\n supportsFolderSelection = isFolderSelectionSupported();\n\n supportsImagePreviews = supportsAjaxFileUploading && window.FileReader !== undefined;\n\n supportsUploadProgress = (function() {\n if (supportsAjaxFileUploading) {\n return !qq.androidStock() && !qq.iosChrome();\n }\n return false;\n }());\n\n return {\n ajaxUploading: supportsAjaxFileUploading,\n blobUploading: supportsUploadingBlobs,\n canDetermineSize: supportsAjaxFileUploading,\n chunking: supportsChunking,\n deleteFileCors: supportsDeleteFileCors,\n deleteFileCorsXdr: supportsDeleteFileXdr, //NOTE: will also return true in IE10, where XDR is also supported\n deleteFileCorsXhr: supportsDeleteFileCorsXhr,\n dialogElement: !!window.HTMLDialogElement,\n fileDrop: supportsFileDrop,\n folderDrop: supportsFolderDrop,\n folderSelection: supportsFolderSelection,\n imagePreviews: supportsImagePreviews,\n imageValidation: supportsImagePreviews,\n itemSizeValidation: supportsAjaxFileUploading,\n pause: supportsChunking,\n progressBar: supportsUploadProgress,\n resume: supportsResume,\n scaling: supportsImagePreviews && supportsUploadingBlobs,\n tiffPreviews: qq.safari(), // Not the best solution, but simple and probably accurate enough (for now)\n unlimitedScaledImageSize: !qq.ios(), // false simply indicates that there is some known limit\n uploading: supportsUploading,\n uploadCors: supportsUploadCors,\n uploadCustomHeaders: supportsAjaxFileUploading,\n uploadNonMultipart: supportsAjaxFileUploading,\n uploadViaPaste: supportsUploadViaPaste\n };\n\n}());\n","/*globals qq*/\n\n// Is the passed object a promise instance?\nqq.isGenericPromise = function(maybePromise) {\n \"use strict\";\n return !!(maybePromise && maybePromise.then && qq.isFunction(maybePromise.then));\n};\n\nqq.Promise = function() {\n \"use strict\";\n\n var successArgs, failureArgs,\n successCallbacks = [],\n failureCallbacks = [],\n doneCallbacks = [],\n state = 0;\n\n qq.extend(this, {\n then: function(onSuccess, onFailure) {\n if (state === 0) {\n if (onSuccess) {\n successCallbacks.push(onSuccess);\n }\n if (onFailure) {\n failureCallbacks.push(onFailure);\n }\n }\n else if (state === -1) {\n onFailure && onFailure.apply(null, failureArgs);\n }\n else if (onSuccess) {\n onSuccess.apply(null, successArgs);\n }\n\n return this;\n },\n\n done: function(callback) {\n if (state === 0) {\n doneCallbacks.push(callback);\n }\n else {\n callback.apply(null, failureArgs === undefined ? successArgs : failureArgs);\n }\n\n return this;\n },\n\n success: function() {\n state = 1;\n successArgs = arguments;\n\n if (successCallbacks.length) {\n qq.each(successCallbacks, function(idx, callback) {\n callback.apply(null, successArgs);\n });\n }\n\n if (doneCallbacks.length) {\n qq.each(doneCallbacks, function(idx, callback) {\n callback.apply(null, successArgs);\n });\n }\n\n return this;\n },\n\n failure: function() {\n state = -1;\n failureArgs = arguments;\n\n if (failureCallbacks.length) {\n qq.each(failureCallbacks, function(idx, callback) {\n callback.apply(null, failureArgs);\n });\n }\n\n if (doneCallbacks.length) {\n qq.each(doneCallbacks, function(idx, callback) {\n callback.apply(null, failureArgs);\n });\n }\n\n return this;\n }\n });\n};\n","/*globals qq, document, CustomEvent*/\nqq.DragAndDrop = function(o) {\n \"use strict\";\n\n var options,\n HIDE_ZONES_EVENT_NAME = \"qq-hidezones\",\n HIDE_BEFORE_ENTER_ATTR = \"qq-hide-dropzone\",\n uploadDropZones = [],\n droppedFiles = [],\n disposeSupport = new qq.DisposeSupport();\n\n options = {\n dropZoneElements: [],\n allowMultipleItems: true,\n classes: {\n dropActive: null\n },\n callbacks: new qq.DragAndDrop.callbacks()\n };\n\n qq.extend(options, o, true);\n\n function uploadDroppedFiles(files, uploadDropZone) {\n // We need to convert the `FileList` to an actual `Array` to avoid iteration issues\n var filesAsArray = Array.prototype.slice.call(files);\n\n options.callbacks.dropLog(\"Grabbed \" + files.length + \" dropped files.\");\n uploadDropZone.dropDisabled(false);\n options.callbacks.processingDroppedFilesComplete(filesAsArray, uploadDropZone.getElement());\n }\n\n function traverseFileTree(entry) {\n var parseEntryPromise = new qq.Promise();\n\n if (entry.isFile) {\n entry.file(function(file) {\n file.qqPath = extractDirectoryPath(entry);\n droppedFiles.push(file);\n parseEntryPromise.success();\n },\n function(fileError) {\n options.callbacks.dropLog(\"Problem parsing '\" + entry.fullPath + \"'. FileError code \" + fileError.code + \".\", \"error\");\n parseEntryPromise.failure();\n });\n }\n else if (entry.isDirectory) {\n getFilesInDirectory(entry).then(\n function allEntriesRead(entries) {\n var entriesLeft = entries.length;\n\n qq.each(entries, function(idx, entry) {\n traverseFileTree(entry).done(function() {\n entriesLeft -= 1;\n\n if (entriesLeft === 0) {\n parseEntryPromise.success();\n }\n });\n });\n\n if (!entries.length) {\n parseEntryPromise.success();\n }\n },\n\n function readFailure(fileError) {\n options.callbacks.dropLog(\"Problem parsing '\" + entry.fullPath + \"'. FileError code \" + fileError.code + \".\", \"error\");\n parseEntryPromise.failure();\n }\n );\n }\n\n return parseEntryPromise;\n }\n\n function extractDirectoryPath(entry) {\n var name = entry.name,\n fullPath = entry.fullPath,\n indexOfNameInFullPath = fullPath.lastIndexOf(name);\n\n // remove file name from full path string\n fullPath = fullPath.substr(0, indexOfNameInFullPath);\n\n // remove leading slash in full path string\n if (fullPath.charAt(0) === \"/\") {\n fullPath = fullPath.substr(1);\n }\n\n return fullPath;\n }\n\n // Promissory. Guaranteed to read all files in the root of the passed directory.\n function getFilesInDirectory(entry, reader, accumEntries, existingPromise) {\n var promise = existingPromise || new qq.Promise(),\n dirReader = reader || entry.createReader();\n\n dirReader.readEntries(\n function readSuccess(entries) {\n var newEntries = accumEntries ? accumEntries.concat(entries) : entries;\n\n if (entries.length) {\n setTimeout(function() { // prevent stack overflow, however unlikely\n getFilesInDirectory(entry, dirReader, newEntries, promise);\n }, 0);\n }\n else {\n promise.success(newEntries);\n }\n },\n\n promise.failure\n );\n\n return promise;\n }\n\n function handleDataTransfer(dataTransfer, uploadDropZone) {\n var pendingFolderPromises = [],\n handleDataTransferPromise = new qq.Promise();\n\n options.callbacks.processingDroppedFiles();\n uploadDropZone.dropDisabled(true);\n\n if (dataTransfer.files.length > 1 && !options.allowMultipleItems) {\n options.callbacks.processingDroppedFilesComplete([]);\n options.callbacks.dropError(\"tooManyFilesError\", \"\");\n uploadDropZone.dropDisabled(false);\n handleDataTransferPromise.failure();\n }\n else {\n droppedFiles = [];\n\n if (qq.isFolderDropSupported(dataTransfer)) {\n qq.each(dataTransfer.items, function(idx, item) {\n var entry = item.webkitGetAsEntry();\n\n if (entry) {\n //due to a bug in Chrome's File System API impl - #149735\n if (entry.isFile) {\n droppedFiles.push(item.getAsFile());\n }\n\n else {\n pendingFolderPromises.push(traverseFileTree(entry).done(function() {\n pendingFolderPromises.pop();\n if (pendingFolderPromises.length === 0) {\n handleDataTransferPromise.success();\n }\n }));\n }\n }\n });\n }\n else {\n droppedFiles = dataTransfer.files;\n }\n\n if (pendingFolderPromises.length === 0) {\n handleDataTransferPromise.success();\n }\n }\n\n return handleDataTransferPromise;\n }\n\n function setupDropzone(dropArea) {\n var dropZone = new qq.UploadDropZone({\n HIDE_ZONES_EVENT_NAME: HIDE_ZONES_EVENT_NAME,\n element: dropArea,\n onEnter: function(e) {\n qq(dropArea).addClass(options.classes.dropActive);\n e.stopPropagation();\n },\n onLeaveNotDescendants: function(e) {\n qq(dropArea).removeClass(options.classes.dropActive);\n },\n onDrop: function(e) {\n handleDataTransfer(e.dataTransfer, dropZone).then(\n function() {\n uploadDroppedFiles(droppedFiles, dropZone);\n },\n function() {\n options.callbacks.dropLog(\"Drop event DataTransfer parsing failed. No files will be uploaded.\", \"error\");\n }\n );\n }\n });\n\n disposeSupport.addDisposer(function() {\n dropZone.dispose();\n });\n\n qq(dropArea).hasAttribute(HIDE_BEFORE_ENTER_ATTR) && qq(dropArea).hide();\n\n uploadDropZones.push(dropZone);\n\n return dropZone;\n }\n\n function isFileDrag(dragEvent) {\n var fileDrag;\n\n qq.each(dragEvent.dataTransfer.types, function(key, val) {\n if (val === \"Files\") {\n fileDrag = true;\n return false;\n }\n });\n\n return fileDrag;\n }\n\n // Attempt to determine when the file has left the document. It is not always possible to detect this\n // in all cases, but it is generally possible in all browsers, with a few exceptions.\n //\n // Exceptions:\n // * IE10+ & Safari: We can't detect a file leaving the document if the Explorer window housing the file\n // overlays the browser window.\n // * IE10+: If the file is dragged out of the window too quickly, IE does not set the expected values of the\n // event's X & Y properties.\n function leavingDocumentOut(e) {\n if (qq.safari()) {\n return e.x < 0 || e.y < 0;\n }\n\n return e.x === 0 && e.y === 0;\n }\n\n function setupDragDrop() {\n var dropZones = options.dropZoneElements,\n\n maybeHideDropZones = function() {\n setTimeout(function() {\n qq.each(dropZones, function(idx, dropZone) {\n qq(dropZone).hasAttribute(HIDE_BEFORE_ENTER_ATTR) && qq(dropZone).hide();\n qq(dropZone).removeClass(options.classes.dropActive);\n });\n }, 10);\n };\n\n qq.each(dropZones, function(idx, dropZone) {\n var uploadDropZone = setupDropzone(dropZone);\n\n // IE <= 9 does not support the File API used for drag+drop uploads\n if (dropZones.length && qq.supportedFeatures.fileDrop) {\n disposeSupport.attach(document, \"dragenter\", function(e) {\n if (!uploadDropZone.dropDisabled() && isFileDrag(e)) {\n qq.each(dropZones, function(idx, dropZone) {\n // We can't apply styles to non-HTMLElements, since they lack the `style` property.\n // Also, if the drop zone isn't initially hidden, let's not mess with `style.display`.\n if (dropZone instanceof HTMLElement &&\n qq(dropZone).hasAttribute(HIDE_BEFORE_ENTER_ATTR)) {\n\n qq(dropZone).css({display: \"block\"});\n }\n });\n }\n });\n }\n });\n\n disposeSupport.attach(document, \"dragleave\", function(e) {\n if (leavingDocumentOut(e)) {\n maybeHideDropZones();\n }\n });\n\n // Just in case we were not able to detect when a dragged file has left the document,\n // hide all relevant drop zones the next time the mouse enters the document.\n // Note that mouse events such as this one are not fired during drag operations.\n disposeSupport.attach(qq(document).children()[0], \"mouseenter\", function(e) {\n maybeHideDropZones();\n });\n\n disposeSupport.attach(document, \"drop\", function(e) {\n if (isFileDrag(e)) {\n e.preventDefault();\n maybeHideDropZones();\n }\n });\n\n disposeSupport.attach(document, HIDE_ZONES_EVENT_NAME, maybeHideDropZones);\n }\n\n setupDragDrop();\n\n qq.extend(this, {\n setupExtraDropzone: function(element) {\n options.dropZoneElements.push(element);\n setupDropzone(element);\n },\n\n removeDropzone: function(element) {\n var i,\n dzs = options.dropZoneElements;\n\n for (i in dzs) {\n if (dzs[i] === element) {\n return dzs.splice(i, 1);\n }\n }\n },\n\n dispose: function() {\n disposeSupport.dispose();\n qq.each(uploadDropZones, function(idx, dropZone) {\n dropZone.dispose();\n });\n }\n });\n\n this._testing = {};\n this._testing.extractDirectoryPath = extractDirectoryPath;\n};\n\nqq.DragAndDrop.callbacks = function() {\n \"use strict\";\n\n return {\n processingDroppedFiles: function() {},\n processingDroppedFilesComplete: function(files, targetEl) {},\n dropError: function(code, errorSpecifics) {\n qq.log(\"Drag & drop error code '\" + code + \" with these specifics: '\" + errorSpecifics + \"'\", \"error\");\n },\n dropLog: function(message, level) {\n qq.log(message, level);\n }\n };\n};\n\nqq.UploadDropZone = function(o) {\n \"use strict\";\n\n var disposeSupport = new qq.DisposeSupport(),\n options, element, preventDrop, dropOutsideDisabled;\n\n options = {\n element: null,\n onEnter: function(e) {},\n onLeave: function(e) {},\n // is not fired when leaving element by hovering descendants\n onLeaveNotDescendants: function(e) {},\n onDrop: function(e) {}\n };\n\n qq.extend(options, o);\n element = options.element;\n\n function dragoverShouldBeCanceled() {\n return qq.safari() || (qq.firefox() && qq.windows());\n }\n\n function disableDropOutside(e) {\n // run only once for all instances\n if (!dropOutsideDisabled) {\n\n // for these cases we need to catch onDrop to reset dropArea\n if (dragoverShouldBeCanceled) {\n disposeSupport.attach(document, \"dragover\", function(e) {\n e.preventDefault();\n });\n } else {\n disposeSupport.attach(document, \"dragover\", function(e) {\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = \"none\";\n e.preventDefault();\n }\n });\n }\n\n dropOutsideDisabled = true;\n }\n }\n\n function isValidFileDrag(e) {\n // e.dataTransfer currently causing IE errors\n // IE9 does NOT support file API, so drag-and-drop is not possible\n if (!qq.supportedFeatures.fileDrop) {\n return false;\n }\n\n var effectTest, dt = e.dataTransfer,\n // do not check dt.types.contains in webkit, because it crashes safari 4\n isSafari = qq.safari();\n\n // dt.effectAllowed is none in Safari 5\n\n // dt.effectAllowed crashes IE 11 & 10 when files have been dragged from\n // the filesystem\n effectTest = qq.ie() && qq.supportedFeatures.fileDrop ? true : dt.effectAllowed !== \"none\";\n return dt && effectTest &&\n (\n (dt.files && dt.files.length) || // Valid for drop events with files\n (!isSafari && dt.types.contains && dt.types.contains(\"Files\")) || // Valid in Chrome/Firefox\n (dt.types.includes && dt.types.includes(\"Files\")) // Valid in IE\n );\n }\n\n function isOrSetDropDisabled(isDisabled) {\n if (isDisabled !== undefined) {\n preventDrop = isDisabled;\n }\n return preventDrop;\n }\n\n function triggerHidezonesEvent() {\n var hideZonesEvent;\n\n function triggerUsingOldApi() {\n hideZonesEvent = document.createEvent(\"Event\");\n hideZonesEvent.initEvent(options.HIDE_ZONES_EVENT_NAME, true, true);\n }\n\n if (window.CustomEvent) {\n try {\n hideZonesEvent = new CustomEvent(options.HIDE_ZONES_EVENT_NAME);\n }\n catch (err) {\n triggerUsingOldApi();\n }\n }\n else {\n triggerUsingOldApi();\n }\n\n document.dispatchEvent(hideZonesEvent);\n }\n\n function attachEvents() {\n disposeSupport.attach(element, \"dragover\", function(e) {\n if (!isValidFileDrag(e)) {\n return;\n }\n\n // dt.effectAllowed crashes IE 11 & 10 when files have been dragged from\n // the filesystem\n var effect = qq.ie() && qq.supportedFeatures.fileDrop ? null : e.dataTransfer.effectAllowed;\n if (effect === \"move\" || effect === \"linkMove\") {\n e.dataTransfer.dropEffect = \"move\"; // for FF (only move allowed)\n } else {\n e.dataTransfer.dropEffect = \"copy\"; // for Chrome\n }\n\n e.stopPropagation();\n e.preventDefault();\n });\n\n disposeSupport.attach(element, \"dragenter\", function(e) {\n if (!isOrSetDropDisabled()) {\n if (!isValidFileDrag(e)) {\n return;\n }\n options.onEnter(e);\n }\n });\n\n disposeSupport.attach(element, \"dragleave\", function(e) {\n if (!isValidFileDrag(e)) {\n return;\n }\n\n options.onLeave(e);\n\n var relatedTarget = document.elementFromPoint(e.clientX, e.clientY);\n // do not fire when moving a mouse over a descendant\n if (qq(this).contains(relatedTarget)) {\n return;\n }\n\n options.onLeaveNotDescendants(e);\n });\n\n disposeSupport.attach(element, \"drop\", function(e) {\n if (!isOrSetDropDisabled()) {\n if (!isValidFileDrag(e)) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n options.onDrop(e);\n\n triggerHidezonesEvent();\n }\n });\n }\n\n disableDropOutside();\n attachEvents();\n\n qq.extend(this, {\n dropDisabled: function(isDisabled) {\n return isOrSetDropDisabled(isDisabled);\n },\n\n dispose: function() {\n disposeSupport.dispose();\n },\n\n getElement: function() {\n return element;\n }\n });\n\n this._testing = {};\n this._testing.isValidFileDrag = isValidFileDrag;\n};\n"]} \ No newline at end of file diff --git a/styles/bootstrap/fine-uploader/fine-uploader-gallery.min.css b/styles/bootstrap/fine-uploader/fine-uploader-gallery.min.css index 4e3a3b075..ecdadfe0a 100644 --- a/styles/bootstrap/fine-uploader/fine-uploader-gallery.min.css +++ b/styles/bootstrap/fine-uploader/fine-uploader-gallery.min.css @@ -1 +1 @@ -.qq-gallery .qq-btn{float:right;border:none;padding:0;margin:0;box-shadow:none}.qq-gallery .qq-upload-button{display:inline;width:105px;padding:7px 10px;float:left;text-align:center;background:#00ABC7;color:#FFF;border-radius:2px;border:1px solid #37B7CC;box-shadow:0 1px 1px rgba(255,255,255,.37) inset,1px 0 1px rgba(255,255,255,.07) inset,0 1px 0 rgba(0,0,0,.36),0 -2px 12px rgba(0,0,0,.08) inset}.qq-gallery .qq-upload-button-hover{background:#33B6CC}.qq-gallery .qq-upload-button-focus{outline:#000 dotted 1px}.qq-gallery.qq-uploader{position:relative;min-height:200px;max-height:490px;overflow-y:hidden;width:inherit;border-radius:6px;border:1px dashed #CCC;background-color:#FAFAFA;padding:20px}.qq-gallery.qq-uploader:before{content:attr(qq-drop-area-text) " ";position:absolute;font-size:200%;left:0;width:100%;text-align:center;top:45%;opacity:.25;filter:alpha(opacity=25)}.qq-gallery .qq-upload-drop-area,.qq-upload-extra-drop-area{position:absolute;top:0;left:0;width:100%;height:100%;min-height:30px;z-index:2;background:#F9F9F9;border-radius:4px;text-align:center}.qq-gallery .qq-upload-drop-area span{display:block;position:absolute;top:50%;width:100%;margin-top:-8px;font-size:16px}.qq-gallery .qq-upload-extra-drop-area{position:relative;margin-top:50px;font-size:16px;padding-top:30px;height:20px;min-height:40px}.qq-gallery .qq-upload-drop-area-active{background:#FDFDFD;border-radius:4px}.qq-gallery .qq-upload-list{margin:0;padding:10px 0 0;list-style:none;max-height:450px;overflow-y:auto;clear:both;box-shadow:none}.qq-gallery .qq-upload-list li{display:inline-block;position:relative;max-width:120px;margin:0 25px 25px 0;padding:0;line-height:16px;font-size:13px;color:#424242;background-color:#FFF;border-radius:2px;box-shadow:0 1px 1px 0 rgba(0,0,0,.22);vertical-align:top;height:186px}.qq-gallery .qq-upload-continue,.qq-gallery .qq-upload-delete,.qq-gallery .qq-upload-failed-text,.qq-gallery .qq-upload-pause,.qq-gallery .qq-upload-retry,.qq-gallery .qq-upload-size,.qq-gallery .qq-upload-spinner{display:inline}.qq-gallery .qq-upload-continue:hover,.qq-gallery .qq-upload-delete:hover,.qq-gallery .qq-upload-pause:hover,.qq-gallery .qq-upload-retry:hover{background-color:transparent}.qq-gallery .qq-upload-cancel,.qq-gallery .qq-upload-continue,.qq-gallery .qq-upload-delete,.qq-gallery .qq-upload-pause{cursor:pointer}.qq-gallery .qq-upload-continue,.qq-gallery .qq-upload-delete,.qq-gallery .qq-upload-pause{border:none;background:0 0;color:#00A0BA;font-size:12px;padding:0}.qq-gallery .qq-upload-status-text{color:#333;font-size:12px;padding-left:3px;padding-top:2px;display:none;width:108px}.qq-gallery .qq-upload-fail .qq-upload-status-text{text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden;display:block}.qq-gallery .qq-upload-retrying .qq-upload-status-text{display:inline-block}.qq-gallery .qq-upload-retrying .qq-progress-bar-container{display:none}.qq-gallery .qq-upload-cancel{background-color:#525252;color:#F7F7F7;font-weight:700;font-family:Arial,Helvetica,sans-serif;border-radius:12px;border:none;height:22px;width:22px;padding:4px;position:absolute;right:-5px;top:-6px;margin:0;line-height:17px}.qq-gallery .qq-upload-cancel:hover{background-color:#525252}.qq-gallery .qq-upload-retry{cursor:pointer;position:absolute;top:30px;left:50%;margin-left:-31px;box-shadow:0 1px 1px rgba(255,255,255,.37) inset,1px 0 1px rgba(255,255,255,.07) inset,0 4px 4px rgba(0,0,0,.5),0 -2px 12px rgba(0,0,0,.08) inset;padding:3px 4px;border:1px solid #d2ddc7;border-radius:2px;color:inherit;background-color:#EBF6E0;z-index:1}.qq-gallery .qq-upload-retry:hover{background-color:#f7ffec}.qq-gallery .qq-file-info{padding:10px 6px 4px;margin-top:-3px;border-radius:0 0 2px 2px;text-align:left;overflow:hidden}.qq-gallery .qq-file-info .qq-file-name{position:relative}.qq-gallery .qq-upload-file{display:block;margin-right:0;margin-bottom:3px;width:auto;text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden}.qq-gallery .qq-upload-spinner{display:inline-block;background:url(loading.gif);position:absolute;left:50%;margin-left:-7px;top:53px;width:15px;height:15px;vertical-align:text-bottom}.qq-gallery .qq-drop-processing{display:block}.qq-gallery .qq-drop-processing-spinner{display:inline-block;background:url(processing.gif);width:24px;height:24px;vertical-align:text-bottom}.qq-gallery .qq-upload-failed-text{display:none;font-style:italic;font-weight:700}.qq-gallery .qq-upload-failed-icon{display:none;width:15px;height:15px;vertical-align:text-bottom}.qq-gallery .qq-upload-fail .qq-upload-failed-text,.qq-gallery .qq-upload-retrying .qq-upload-failed-text{display:inline}.qq-gallery .qq-upload-list li.qq-upload-success{background-color:#F2F7ED}.qq-gallery .qq-upload-list li.qq-upload-fail{background-color:#F5EDED;box-shadow:0 0 1px 0 red;border:0}.qq-gallery .qq-progress-bar{display:block;background:#00abc7;width:0;height:15px;border-radius:6px;margin-bottom:3px}.qq-gallery .qq-total-progress-bar{height:25px;border-radius:9px}.qq-gallery .qq-total-progress-bar-container{margin-left:9px;display:inline;float:right;width:500px}.qq-gallery .qq-upload-size{float:left;font-size:11px;color:#929292;margin-bottom:3px;margin-right:0;display:inline-block}.qq-gallery INPUT.qq-edit-filename{position:absolute;opacity:0;filter:alpha(opacity=0);z-index:-1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"}.qq-gallery .qq-upload-file.qq-editable{cursor:pointer;margin-right:20px}.qq-gallery .qq-edit-filename-icon.qq-editable{display:inline-block;cursor:pointer;position:absolute;right:0;top:0}.qq-gallery INPUT.qq-edit-filename.qq-editing{position:static;height:28px;width:90px;width:-moz-available;padding:0 8px;margin-bottom:3px;border:1px solid #ccc;border-radius:2px;font-size:13px;opacity:1;filter:alpha(opacity=100);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}.qq-gallery .qq-edit-filename-icon{display:none;background:url(edit.gif);width:15px;height:15px;vertical-align:text-bottom}.qq-gallery .qq-continue-icon,.qq-gallery .qq-delete-icon,.qq-gallery .qq-pause-icon,.qq-gallery .qq-retry-icon{width:15px;height:15px;vertical-align:sub;display:inline-block}.qq-gallery .qq-delete-icon{background:url(trash.gif)}.qq-gallery .qq-retry-icon{background:url(retry.gif);float:none}.qq-gallery .qq-continue-icon{background:url(continue.gif)}.qq-gallery .qq-pause-icon{background:url(pause.gif)}.qq-gallery .qq-hide{display:none}.qq-gallery .qq-in-progress .qq-thumbnail-wrapper{opacity:.5;filter:alpha(opacity=50)}.qq-gallery .qq-thumbnail-wrapper{overflow:hidden;position:relative;height:120px;width:120px}.qq-gallery .qq-thumbnail-selector{border-radius:2px 2px 0 0;bottom:0;top:0;margin:auto;display:block}:root *>.qq-gallery .qq-thumbnail-selector{position:relative;top:50%;transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-webkit-transform:translateY(-50%)}.qq-gallery.qq-uploader DIALOG{display:none}.qq-gallery.qq-uploader DIALOG[open]{display:block}.qq-gallery.qq-uploader DIALOG .qq-dialog-buttons{text-align:center;padding-top:10px}.qq-gallery.qq-uploader DIALOG .qq-dialog-buttons BUTTON{margin-left:5px;margin-right:5px}.qq-gallery.qq-uploader DIALOG .qq-dialog-message-selector{padding-bottom:10px}.qq-gallery .qq-uploader DIALOG::backdrop{background-color:rgba(0,0,0,.7)}/*# sourceMappingURL=fine-uploader-gallery.min.css.map */ \ No newline at end of file +.qq-gallery .qq-btn{float:right;border:none;padding:0;margin:0;box-shadow:none}.qq-gallery .qq-upload-button{display:inline;width:105px;padding:7px 10px;float:left;text-align:center;background:#00abc7;color:#fff;border-radius:2px;border:1px solid #37b7cc;box-shadow:0 1px 1px rgba(255,255,255,.37) inset,1px 0 1px rgba(255,255,255,.07) inset,0 1px 0 rgba(0,0,0,.36),0 -2px 12px rgba(0,0,0,.08) inset}.qq-gallery .qq-upload-button-hover{background:#33b6cc}.qq-gallery .qq-upload-button-focus{outline:1px dotted #000}.qq-gallery.qq-uploader{position:relative;min-height:200px;max-height:490px;overflow-y:hidden;width:inherit;border-radius:6px;border:1px dashed #ccc;background-color:#fafafa;padding:20px}.qq-gallery.qq-uploader:before{content:attr(qq-drop-area-text) " ";position:absolute;font-size:200%;left:0;width:100%;text-align:center;top:45%;opacity:.25}.qq-gallery .qq-upload-drop-area,.qq-upload-extra-drop-area{position:absolute;top:0;left:0;width:100%;height:100%;min-height:30px;z-index:2;background:#f9f9f9;border-radius:4px;text-align:center}.qq-gallery .qq-upload-drop-area span{display:block;position:absolute;top:50%;width:100%;margin-top:-8px;font-size:16px}.qq-gallery .qq-upload-extra-drop-area{position:relative;margin-top:50px;font-size:16px;padding-top:30px;height:20px;min-height:40px}.qq-gallery .qq-upload-drop-area-active{background:#fdfdfd;border-radius:4px}.qq-gallery .qq-upload-list{margin:0;padding:10px 0 0;list-style:none;max-height:450px;overflow-y:auto;clear:both;box-shadow:none}.qq-gallery .qq-upload-list li{display:inline-block;position:relative;max-width:120px;margin:0 25px 25px 0;padding:0;line-height:16px;font-size:13px;color:#424242;background-color:#fff;border-radius:2px;box-shadow:0 1px 1px 0 rgba(0,0,0,.22);vertical-align:top;height:186px}.qq-gallery .qq-upload-continue,.qq-gallery .qq-upload-delete,.qq-gallery .qq-upload-failed-text,.qq-gallery .qq-upload-pause,.qq-gallery .qq-upload-retry,.qq-gallery .qq-upload-size,.qq-gallery .qq-upload-spinner{display:inline}.qq-gallery .qq-upload-continue:hover,.qq-gallery .qq-upload-delete:hover,.qq-gallery .qq-upload-pause:hover,.qq-gallery .qq-upload-retry:hover{background-color:transparent}.qq-gallery .qq-upload-cancel,.qq-gallery .qq-upload-continue,.qq-gallery .qq-upload-delete,.qq-gallery .qq-upload-pause{cursor:pointer}.qq-gallery .qq-upload-continue,.qq-gallery .qq-upload-delete,.qq-gallery .qq-upload-pause{border:none;background:0 0;color:#00a0ba;font-size:12px;padding:0}.qq-gallery .qq-upload-status-text{color:#333;font-size:12px;padding-left:3px;padding-top:2px;width:inherit;display:none;width:108px}.qq-gallery .qq-upload-fail .qq-upload-status-text{text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden;display:block}.qq-gallery .qq-upload-retrying .qq-upload-status-text{display:inline-block}.qq-gallery .qq-upload-retrying .qq-progress-bar-container{display:none}.qq-gallery .qq-upload-cancel{background-color:#525252;color:#f7f7f7;font-weight:700;font-family:Arial,Helvetica,sans-serif;border-radius:12px;border:none;height:22px;width:22px;padding:4px;position:absolute;right:-5px;top:-6px;margin:0;line-height:17px}.qq-gallery .qq-upload-cancel:hover{background-color:#525252}.qq-gallery .qq-upload-retry{cursor:pointer;position:absolute;top:30px;left:50%;margin-left:-31px;box-shadow:0 1px 1px rgba(255,255,255,.37) inset,1px 0 1px rgba(255,255,255,.07) inset,0 4px 4px rgba(0,0,0,.5),0 -2px 12px rgba(0,0,0,.08) inset;padding:3px 4px;border:1px solid #d2ddc7;border-radius:2px;color:inherit;background-color:#ebf6e0;z-index:1}.qq-gallery .qq-upload-retry:hover{background-color:#f7ffec}.qq-gallery .qq-file-info{padding:10px 6px 4px;margin-top:-3px;border-radius:0 0 2px 2px;text-align:left;overflow:hidden}.qq-gallery .qq-file-info .qq-file-name{position:relative}.qq-gallery .qq-upload-file{display:block;margin-right:0;margin-bottom:3px;width:auto;text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden}.qq-gallery .qq-upload-spinner{display:inline-block;background:url(loading.gif);position:absolute;left:50%;margin-left:-7px;top:53px;width:15px;height:15px;vertical-align:text-bottom}.qq-gallery .qq-drop-processing{display:block}.qq-gallery .qq-drop-processing-spinner{display:inline-block;background:url(processing.gif);width:24px;height:24px;vertical-align:text-bottom}.qq-gallery .qq-upload-failed-text{display:none;font-style:italic;font-weight:700}.qq-gallery .qq-upload-failed-icon{display:none;width:15px;height:15px;vertical-align:text-bottom}.qq-gallery .qq-upload-fail .qq-upload-failed-text{display:inline}.qq-gallery .qq-upload-retrying .qq-upload-failed-text{display:inline}.qq-gallery .qq-upload-list li.qq-upload-success{background-color:#f2f7ed}.qq-gallery .qq-upload-list li.qq-upload-fail{background-color:#f5eded;box-shadow:0 0 1px 0 red;border:0}.qq-gallery .qq-progress-bar{display:block;background:#00abc7;width:0;height:15px;border-radius:6px;margin-bottom:3px}.qq-gallery .qq-total-progress-bar{height:25px;border-radius:9px}.qq-gallery .qq-total-progress-bar-container{margin-left:9px;display:inline;float:right;width:500px}.qq-gallery .qq-upload-size{float:left;font-size:11px;color:#929292;margin-bottom:3px;margin-right:0;display:inline-block}.qq-gallery INPUT.qq-edit-filename{position:absolute;opacity:0;z-index:-1}.qq-gallery .qq-upload-file.qq-editable{cursor:pointer;margin-right:20px}.qq-gallery .qq-edit-filename-icon.qq-editable{display:inline-block;cursor:pointer;position:absolute;right:0;top:0}.qq-gallery INPUT.qq-edit-filename.qq-editing{position:static;height:28px;width:90px;width:-moz-available;padding:0 8px;margin-bottom:3px;border:1px solid #ccc;border-radius:2px;font-size:13px;opacity:1}.qq-gallery .qq-edit-filename-icon{display:none;background:url(edit.gif);width:15px;height:15px;vertical-align:text-bottom}.qq-gallery .qq-delete-icon{background:url(trash.gif);width:15px;height:15px;vertical-align:sub;display:inline-block}.qq-gallery .qq-retry-icon{background:url(retry.gif);width:15px;height:15px;vertical-align:sub;display:inline-block;float:none}.qq-gallery .qq-continue-icon{background:url(continue.gif);width:15px;height:15px;vertical-align:sub;display:inline-block}.qq-gallery .qq-pause-icon{background:url(pause.gif);width:15px;height:15px;vertical-align:sub;display:inline-block}.qq-gallery .qq-hide{display:none}.qq-gallery .qq-in-progress .qq-thumbnail-wrapper{/* makes the spinner on top of the thumbnail more visible */opacity:.5}.qq-gallery .qq-thumbnail-wrapper{overflow:hidden;position:relative;height:120px;width:120px}.qq-gallery .qq-thumbnail-selector{border-radius:2px 2px 0 0;bottom:0;top:0;margin:auto;display:block}:root *>.qq-gallery .qq-thumbnail-selector{position:relative;top:50%;transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-webkit-transform:translateY(-50%)}.qq-gallery.qq-uploader DIALOG{display:none}.qq-gallery.qq-uploader DIALOG[open]{display:block}.qq-gallery.qq-uploader DIALOG{display:none}.qq-gallery.qq-uploader DIALOG[open]{display:block}.qq-gallery.qq-uploader DIALOG .qq-dialog-buttons{text-align:center;padding-top:10px}.qq-gallery.qq-uploader DIALOG .qq-dialog-buttons BUTTON{margin-left:5px;margin-right:5px}.qq-gallery.qq-uploader DIALOG .qq-dialog-message-selector{padding-bottom:10px}.qq-gallery .qq-uploader DIALOG::backdrop{background-color:rgba(0,0,0,.7)}/*# sourceMappingURL=fine-uploader-gallery.min.css.map */ \ No newline at end of file diff --git a/styles/bootstrap/fine-uploader/fine-uploader-gallery.min.css.map b/styles/bootstrap/fine-uploader/fine-uploader-gallery.min.css.map index 41f0bbeb0..762454e29 100644 --- a/styles/bootstrap/fine-uploader/fine-uploader-gallery.min.css.map +++ b/styles/bootstrap/fine-uploader/fine-uploader-gallery.min.css.map @@ -1 +1 @@ -{"version":3,"sources":["_build/fine-uploader-gallery.css"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["_build/fine-uploader-gallery.css"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/styles/bootstrap/fine-uploader/fine-uploader-new.min.css b/styles/bootstrap/fine-uploader/fine-uploader-new.min.css index 58422f2f6..40bcea0a0 100644 --- a/styles/bootstrap/fine-uploader/fine-uploader-new.min.css +++ b/styles/bootstrap/fine-uploader/fine-uploader-new.min.css @@ -1 +1 @@ -.qq-btn,.qq-upload-button{box-shadow:0 1px 1px rgba(255,255,255,.37) inset,1px 0 1px rgba(255,255,255,.07) inset,0 1px 0 rgba(0,0,0,.36),0 -2px 12px rgba(0,0,0,.08) inset}.qq-btn{padding:3px 4px;border:1px solid #CCC;border-radius:2px;color:inherit;background-color:#FFF}.qq-upload-delete{background-color:#e65c47;color:#FAFAFA;border-color:#dc523d;text-shadow:0 1px 1px rgba(0,0,0,.55)}.qq-upload-delete:hover{background-color:#f56b56}.qq-upload-cancel{background-color:#F5D7D7;border-color:#e6c8c8}.qq-upload-cancel:hover{background-color:#ffe1e1}.qq-upload-retry{background-color:#EBF6E0;border-color:#d2ddc7}.qq-upload-retry:hover{background-color:#f7ffec}.qq-upload-continue,.qq-upload-pause{background-color:#00ABC7;color:#FAFAFA;border-color:#2dadc2;text-shadow:0 1px 1px rgba(0,0,0,.55)}.qq-upload-continue:hover,.qq-upload-pause:hover{background-color:#0fbad6}.qq-upload-button{display:inline;width:105px;margin-bottom:10px;padding:7px 10px;text-align:center;float:left;background:#00ABC7;color:#FFF;border-radius:2px;border:1px solid #2dadc2}.qq-upload-button-hover{background:#33B6CC}.qq-upload-button-focus{outline:#000 dotted 1px}.qq-uploader{position:relative;min-height:200px;max-height:490px;overflow-y:hidden;width:inherit;border-radius:6px;background-color:#FDFDFD;border:1px dashed #CCC;padding:20px}.qq-uploader:before{content:attr(qq-drop-area-text) " ";position:absolute;font-size:200%;left:0;width:100%;text-align:center;top:45%;opacity:.25}.qq-upload-drop-area,.qq-upload-extra-drop-area{position:absolute;top:0;left:0;width:100%;height:100%;min-height:30px;z-index:2;background:#F9F9F9;border-radius:4px;border:1px dashed #CCC;text-align:center}.qq-upload-drop-area span{display:block;position:absolute;top:50%;width:100%;margin-top:-8px;font-size:16px}.qq-upload-extra-drop-area{position:relative;margin-top:50px;font-size:16px;padding-top:30px;height:20px;min-height:40px}.qq-upload-drop-area-active{background:#FDFDFD;border-radius:4px;border:1px dashed #CCC}.qq-upload-list{margin:0;padding:0;list-style:none;max-height:450px;overflow-y:auto;box-shadow:0 1px 0 rgba(15,15,50,.14);clear:both}.qq-upload-list li{margin:0;padding:9px;line-height:15px;font-size:16px;color:#424242;background-color:#F6F6F6;border-top:1px solid #FFF;border-bottom:1px solid #DDD}.qq-upload-list li:first-child{border-top:none}.qq-upload-list li:last-child{border-bottom:none}.qq-upload-cancel,.qq-upload-continue,.qq-upload-delete,.qq-upload-failed-text,.qq-upload-file,.qq-upload-pause,.qq-upload-retry,.qq-upload-size,.qq-upload-spinner{margin-right:12px;display:inline}.qq-upload-file{vertical-align:middle;display:inline-block;width:300px;text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden;height:18px}.qq-upload-spinner{display:inline-block;background:url(loading.gif);width:15px;height:15px;vertical-align:text-bottom}.qq-drop-processing{display:block}.qq-drop-processing-spinner{display:inline-block;background:url(processing.gif);width:24px;height:24px;vertical-align:text-bottom}.qq-upload-cancel,.qq-upload-continue,.qq-upload-delete,.qq-upload-pause,.qq-upload-retry,.qq-upload-size{font-size:12px;font-weight:400;cursor:pointer;vertical-align:middle}.qq-upload-status-text{font-size:14px;font-weight:700;display:block}.qq-upload-failed-text{display:none;font-style:italic;font-weight:700}.qq-upload-failed-icon{display:none;width:15px;height:15px;vertical-align:text-bottom}.qq-upload-fail .qq-upload-failed-text,.qq-upload-retrying .qq-upload-failed-text{display:inline}.qq-upload-list li.qq-upload-success{background-color:#EBF6E0;color:#424242;border-bottom:1px solid #D3DED1;border-top:1px solid #F7FFF5}.qq-upload-list li.qq-upload-fail{background-color:#F5D7D7;color:#424242;border-bottom:1px solid #DECACA;border-top:1px solid #FCE6E6}.qq-progress-bar{display:block;background:#00abc7;width:0;height:15px;border-radius:6px;margin-bottom:3px}.qq-total-progress-bar{height:25px;border-radius:9px}.qq-total-progress-bar-container{margin-left:9px;display:inline;float:right;width:500px}INPUT.qq-edit-filename{position:absolute;opacity:0;filter:alpha(opacity=0);z-index:-1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"}.qq-upload-file.qq-editable{cursor:pointer;margin-right:4px}.qq-edit-filename-icon.qq-editable{display:inline-block;cursor:pointer}.qq-hide,.qq-uploader DIALOG{display:none}INPUT.qq-edit-filename.qq-editing{position:static;height:28px;padding:0 8px;margin-right:10px;margin-bottom:-5px;border:1px solid #ccc;border-radius:2px;font-size:16px;opacity:1;filter:alpha(opacity=100);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}.qq-edit-filename-icon{display:none;background:url(edit.gif);width:15px;height:15px;vertical-align:text-bottom;margin-right:16px}.qq-thumbnail-selector{vertical-align:middle;margin-right:12px}.qq-uploader DIALOG[open]{display:block}.qq-uploader DIALOG .qq-dialog-buttons{text-align:center;padding-top:10px}.qq-uploader DIALOG .qq-dialog-buttons BUTTON{margin-left:5px;margin-right:5px}.qq-uploader DIALOG .qq-dialog-message-selector{padding-bottom:10px}.qq-uploader DIALOG::backdrop{background-color:rgba(0,0,0,.7)}/*# sourceMappingURL=fine-uploader-new.min.css.map */ \ No newline at end of file +.qq-btn{box-shadow:0 1px 1px rgba(255,255,255,.37) inset,1px 0 1px rgba(255,255,255,.07) inset,0 1px 0 rgba(0,0,0,.36),0 -2px 12px rgba(0,0,0,.08) inset;padding:3px 4px;border:1px solid #ccc;border-radius:2px;color:inherit;background-color:#fff}.qq-upload-continue,.qq-upload-delete,.qq-upload-pause{display:inline}.qq-upload-delete{background-color:#e65c47;color:#fafafa;border-color:#dc523d;text-shadow:0 1px 1px rgba(0,0,0,.55)}.qq-upload-delete:hover{background-color:#f56b56}.qq-upload-cancel{background-color:#f5d7d7;border-color:#e6c8c8}.qq-upload-cancel:hover{background-color:#ffe1e1}.qq-upload-retry{background-color:#ebf6e0;border-color:#d2ddc7}.qq-upload-retry:hover{background-color:#f7ffec}.qq-upload-continue,.qq-upload-pause{background-color:#00abc7;color:#fafafa;border-color:#2dadc2;text-shadow:0 1px 1px rgba(0,0,0,.55)}.qq-upload-continue:hover,.qq-upload-pause:hover{background-color:#0fbad6}.qq-upload-button{display:inline;width:105px;margin-bottom:10px;padding:7px 10px;text-align:center;float:left;background:#00abc7;color:#fff;border-radius:2px;border:1px solid #2dadc2;box-shadow:0 1px 1px rgba(255,255,255,.37) inset,1px 0 1px rgba(255,255,255,.07) inset,0 1px 0 rgba(0,0,0,.36),0 -2px 12px rgba(0,0,0,.08) inset}.qq-upload-button-hover{background:#33b6cc}.qq-upload-button-focus{outline:1px dotted #000}.qq-uploader{position:relative;min-height:200px;max-height:490px;overflow-y:hidden;width:inherit;border-radius:6px;background-color:#fdfdfd;border:1px dashed #ccc;padding:20px}.qq-uploader:before{content:attr(qq-drop-area-text) " ";position:absolute;font-size:200%;left:0;width:100%;text-align:center;top:45%;opacity:.25}.qq-upload-drop-area,.qq-upload-extra-drop-area{position:absolute;top:0;left:0;width:100%;height:100%;min-height:30px;z-index:2;background:#f9f9f9;border-radius:4px;border:1px dashed #ccc;text-align:center}.qq-upload-drop-area span{display:block;position:absolute;top:50%;width:100%;margin-top:-8px;font-size:16px}.qq-upload-extra-drop-area{position:relative;margin-top:50px;font-size:16px;padding-top:30px;height:20px;min-height:40px}.qq-upload-drop-area-active{background:#fdfdfd;border-radius:4px;border:1px dashed #ccc}.qq-upload-list{margin:0;padding:0;list-style:none;max-height:450px;overflow-y:auto;box-shadow:0 1px 0 rgba(15,15,50,.14);clear:both}.qq-upload-list li{margin:0;padding:9px;line-height:15px;font-size:16px;color:#424242;background-color:#f6f6f6;border-top:1px solid #fff;border-bottom:1px solid #ddd}.qq-upload-list li:first-child{border-top:none}.qq-upload-list li:last-child{border-bottom:none}.qq-upload-cancel,.qq-upload-continue,.qq-upload-delete,.qq-upload-failed-text,.qq-upload-file,.qq-upload-pause,.qq-upload-retry,.qq-upload-size,.qq-upload-spinner{margin-right:12px;display:inline}.qq-upload-file{vertical-align:middle;display:inline-block;width:300px;text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden;height:18px}.qq-upload-spinner{display:inline-block;background:url(loading.gif);width:15px;height:15px;vertical-align:text-bottom}.qq-drop-processing{display:block}.qq-drop-processing-spinner{display:inline-block;background:url(processing.gif);width:24px;height:24px;vertical-align:text-bottom}.qq-upload-cancel,.qq-upload-continue,.qq-upload-delete,.qq-upload-pause,.qq-upload-retry,.qq-upload-size{font-size:12px;font-weight:400;cursor:pointer;vertical-align:middle}.qq-upload-status-text{font-size:14px;font-weight:700;display:block}.qq-upload-failed-text{display:none;font-style:italic;font-weight:700}.qq-upload-failed-icon{display:none;width:15px;height:15px;vertical-align:text-bottom}.qq-upload-fail .qq-upload-failed-text{display:inline}.qq-upload-retrying .qq-upload-failed-text{display:inline}.qq-upload-list li.qq-upload-success{background-color:#ebf6e0;color:#424242;border-bottom:1px solid #d3ded1;border-top:1px solid #f7fff5}.qq-upload-list li.qq-upload-fail{background-color:#f5d7d7;color:#424242;border-bottom:1px solid #decaca;border-top:1px solid #fce6e6}.qq-progress-bar{display:block;display:block;background:#00abc7;width:0;height:15px;border-radius:6px;margin-bottom:3px}.qq-total-progress-bar{height:25px;border-radius:9px}.qq-total-progress-bar-container{margin-left:9px;display:inline;float:right;width:500px}INPUT.qq-edit-filename{position:absolute;opacity:0;z-index:-1}.qq-upload-file.qq-editable{cursor:pointer;margin-right:4px}.qq-edit-filename-icon.qq-editable{display:inline-block;cursor:pointer}INPUT.qq-edit-filename.qq-editing{position:static;height:28px;padding:0 8px;margin-right:10px;margin-bottom:-5px;border:1px solid #ccc;border-radius:2px;font-size:16px;opacity:1}.qq-edit-filename-icon{display:none;background:url(edit.gif);width:15px;height:15px;vertical-align:text-bottom;margin-right:16px}.qq-hide{display:none}.qq-thumbnail-selector{vertical-align:middle;margin-right:12px}.qq-uploader DIALOG{display:none}.qq-uploader DIALOG[open]{display:block}.qq-uploader DIALOG{display:none}.qq-uploader DIALOG[open]{display:block}.qq-uploader DIALOG .qq-dialog-buttons{text-align:center;padding-top:10px}.qq-uploader DIALOG .qq-dialog-buttons BUTTON{margin-left:5px;margin-right:5px}.qq-uploader DIALOG .qq-dialog-message-selector{padding-bottom:10px}.qq-uploader DIALOG::backdrop{background-color:rgba(0,0,0,.7)}/*# sourceMappingURL=fine-uploader-new.min.css.map */ \ No newline at end of file diff --git a/styles/bootstrap/fine-uploader/fine-uploader-new.min.css.map b/styles/bootstrap/fine-uploader/fine-uploader-new.min.css.map index 2dab29aa6..4ef57d350 100644 --- a/styles/bootstrap/fine-uploader/fine-uploader-new.min.css.map +++ b/styles/bootstrap/fine-uploader/fine-uploader-new.min.css.map @@ -1 +1 @@ -{"version":3,"sources":["_build/fine-uploader-new.css"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["_build/fine-uploader-new.css"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/styles/bootstrap/fine-uploader/fine-uploader.core.js b/styles/bootstrap/fine-uploader/fine-uploader.core.js index 3a6c70071..229a128e1 100644 --- a/styles/bootstrap/fine-uploader/fine-uploader.core.js +++ b/styles/bootstrap/fine-uploader/fine-uploader.core.js @@ -1,4 +1,4 @@ -// Fine Uploader 5.12.0 - (c) 2013-present Widen Enterprises, Inc. MIT licensed. http://fineuploader.com +// Fine Uploader 5.16.2 - MIT licensed. http://fineuploader.com (function(global) { var qq = function(element) { "use strict"; @@ -585,7 +585,7 @@ }; qq.Error.prototype = new Error(); })(); - qq.version = "5.12.0"; + qq.version = "5.16.2"; qq.supportedFeatures = function() { "use strict"; var supportsUploading, supportsUploadingBlobs, supportsFileDrop, supportsAjaxFileUploading, supportsFolderDrop, supportsChunking, supportsResume, supportsUploadViaPaste, supportsUploadCors, supportsDeleteFileXdr, supportsDeleteFileCorsXhr, supportsDeleteFileCors, supportsFolderSelection, supportsImagePreviews, supportsUploadProgress; @@ -603,9 +603,6 @@ } return supported; } - function isChrome21OrHigher() { - return (qq.chrome() || qq.opera()) && navigator.userAgent.match(/Chrome\/[2][1-9]|Chrome\/[3-9][0-9]/) !== undefined; - } function isChrome14OrHigher() { return (qq.chrome() || qq.opera()) && navigator.userAgent.match(/Chrome\/[1][4-9]|Chrome\/[2-9][0-9]/) !== undefined; } @@ -643,7 +640,11 @@ supportsAjaxFileUploading = supportsUploading && qq.isXhrUploadSupported(); supportsUploadingBlobs = supportsAjaxFileUploading && !qq.androidStock(); supportsFileDrop = supportsAjaxFileUploading && isDragAndDropSupported(); - supportsFolderDrop = supportsFileDrop && isChrome21OrHigher(); + supportsFolderDrop = supportsFileDrop && function() { + var input = document.createElement("input"); + input.type = "file"; + return !!("webkitdirectory" in (input || document.querySelectorAll("input[type=file]")[0])); + }(); supportsChunking = supportsAjaxFileUploading && qq.isFileChunkingSupported(); supportsResume = supportsAjaxFileUploading && supportsChunking && isLocalStorageSupported(); supportsUploadViaPaste = supportsAjaxFileUploading && isChrome14OrHigher(); @@ -903,7 +904,8 @@ originalName: spec.name, uuid: spec.uuid, size: spec.size == null ? -1 : spec.size, - status: status + status: status, + file: spec.file }) - 1; if (spec.batchId) { data[id].batchId = spec.batchId; @@ -925,6 +927,7 @@ byStatus[status] = []; } byStatus[status].push(id); + spec.onBeforeStatusChange && spec.onBeforeStatusChange(id); uploaderProxy.onStatusChange(id, null, status); return id; }, @@ -941,6 +944,12 @@ return qq.extend([], data, true); } }, + removeFileRef: function(id) { + var record = getDataByIds(id); + if (record) { + delete record.file; + } + }, reset: function() { data = []; byUuid = {}; @@ -993,6 +1002,7 @@ CANCELED: "canceled", PAUSED: "paused", UPLOADING: "uploading", + UPLOAD_FINALIZING: "upload finalizing", UPLOAD_RETRYING: "retrying upload", UPLOAD_SUCCESSFUL: "upload successful", UPLOAD_FAILED: "upload failed", @@ -1073,7 +1083,14 @@ } }, cancel: function(id) { - this._handler.cancel(id); + var uploadData = this._uploadData.retrieve({ + id: id + }); + if (uploadData && uploadData.status === qq.status.UPLOAD_FINALIZING) { + this.log(qq.format("Ignoring cancel for file ID {} ({}). Finalizing upload.", id, this.getName(id)), "error"); + } else { + this._handler.cancel(id); + } }, cancelAll: function() { var storedIdsCopy = [], self = this; @@ -1150,7 +1167,17 @@ return this._endpointStore.get(fileId); }, getFile: function(fileOrBlobId) { - return this._handler.getFile(fileOrBlobId) || null; + var file = this._handler.getFile(fileOrBlobId); + var uploadDataRecord; + if (!file) { + uploadDataRecord = this._uploadData.retrieve({ + id: fileOrBlobId + }); + if (uploadDataRecord) { + file = uploadDataRecord.file; + } + } + return file || null; }, getInProgress: function() { return this._uploadData.retrieve({ @@ -1199,6 +1226,9 @@ id: id }).uuid; }, + isResumable: function(id) { + return this._handler.hasResumeRecord(id); + }, log: function(str, level) { if (this._options.debug && (!level || level === "info")) { qq.log("[Fine Uploader " + qq.version + "] " + str); @@ -1225,6 +1255,10 @@ } return false; }, + removeFileRef: function(id) { + this._handler.expunge(id); + this._uploadData.removeFileRef(id); + }, reset: function() { this.log("Resetting uploader..."); this._handler.reset(); @@ -1247,6 +1281,7 @@ this._succeededSinceLastAllComplete = []; this._failedSinceLastAllComplete = []; this._totalProgress && this._totalProgress.reset(); + this._customResumeDataStore.reset(); }, retry: function(id) { return this._manualRetry(id); @@ -1262,6 +1297,9 @@ setCustomHeaders: function(headers, id) { this._customHeadersStore.set(headers, id); }, + setCustomResumeData: function(id, data) { + this._customResumeDataStore.set(data, id); + }, setDeleteFileCustomHeaders: function(headers, id) { this._deleteFileCustomHeadersStore.set(headers, id); }, @@ -1289,6 +1327,28 @@ setUuid: function(id, newUuid) { return this._uploadData.uuidChanged(id, newUuid); }, + setStatus: function(id, newStatus) { + var fileRecord = this.getUploads({ + id: id + }); + if (!fileRecord) { + throw new qq.Error(id + " is not a valid file ID."); + } + switch (newStatus) { + case qq.status.DELETED: + this._onDeleteComplete(id, null, false); + break; + + case qq.status.DELETE_FAILED: + this._onDeleteComplete(id, null, true); + break; + + default: + var errorMessage = "Method setStatus called on '" + name + "' not implemented yet for " + newStatus; + this.log(errorMessage); + throw new qq.Error(errorMessage); + } + }, uploadStoredFiles: function() { if (this._storedIds.length === 0) { this._itemError("noFilesError"); @@ -1299,20 +1359,22 @@ }; qq.basePrivateApi = { _addCannedFile: function(sessionData) { - var id = this._uploadData.addFile({ + var self = this; + return this._uploadData.addFile({ uuid: sessionData.uuid, name: sessionData.name, size: sessionData.size, - status: qq.status.UPLOAD_SUCCESSFUL + status: qq.status.UPLOAD_SUCCESSFUL, + onBeforeStatusChange: function(id) { + sessionData.deleteFileEndpoint && self.setDeleteFileEndpoint(sessionData.deleteFileEndpoint, id); + sessionData.deleteFileParams && self.setDeleteFileParams(sessionData.deleteFileParams, id); + if (sessionData.thumbnailUrl) { + self._thumbnailUrls[id] = sessionData.thumbnailUrl; + } + self._netUploaded++; + self._netUploadedOrQueued++; + } }); - sessionData.deleteFileEndpoint && this.setDeleteFileEndpoint(sessionData.deleteFileEndpoint, id); - sessionData.deleteFileParams && this.setDeleteFileParams(sessionData.deleteFileParams, id); - if (sessionData.thumbnailUrl) { - this._thumbnailUrls[id] = sessionData.thumbnailUrl; - } - this._netUploaded++; - this._netUploadedOrQueued++; - return id; }, _annotateWithButtonId: function(file, associatedInput) { if (qq.isFile(file)) { @@ -1547,17 +1609,28 @@ onUploadPrep: qq.bind(this._onUploadPrep, this), onUpload: function(id, name) { self._onUpload(id, name); - self._options.callbacks.onUpload(id, name); + var onUploadResult = self._options.callbacks.onUpload(id, name); + if (qq.isGenericPromise(onUploadResult)) { + self.log(qq.format("onUpload for {} returned a Promise - waiting for resolution.", id)); + return onUploadResult; + } + return new qq.Promise().success(); }, onUploadChunk: function(id, name, chunkData) { self._onUploadChunk(id, chunkData); - self._options.callbacks.onUploadChunk(id, name, chunkData); + var onUploadChunkResult = self._options.callbacks.onUploadChunk(id, name, chunkData); + if (qq.isGenericPromise(onUploadChunkResult)) { + self.log(qq.format("onUploadChunk for {}.{} returned a Promise - waiting for resolution.", id, chunkData.partIndex)); + return onUploadChunkResult; + } + return new qq.Promise().success(); }, onUploadChunkSuccess: function(id, chunkData, result, xhr) { + self._onUploadChunkSuccess(id, chunkData); self._options.callbacks.onUploadChunkSuccess.apply(self, arguments); }, - onResume: function(id, name, chunkData) { - return self._options.callbacks.onResume(id, name, chunkData); + onResume: function(id, name, chunkData, customResumeData) { + return self._options.callbacks.onResume(id, name, chunkData, customResumeData); }, onAutoRetry: function(id, name, responseJSON, xhr) { return self._onAutoRetry.apply(self, arguments); @@ -1582,7 +1655,16 @@ return status === qq.status.QUEUED || status === qq.status.SUBMITTED || status === qq.status.UPLOAD_RETRYING || status === qq.status.PAUSED; }, getIdsInProxyGroup: self._uploadData.getIdsInProxyGroup, - getIdsInBatch: self._uploadData.getIdsInBatch + getIdsInBatch: self._uploadData.getIdsInBatch, + isInProgress: function(id) { + return self.getUploads({ + id: id + }).status === qq.status.UPLOADING; + }, + getCustomResumeData: qq.bind(self._getCustomResumeData, self), + setStatus: function(id, status) { + self._uploadData.setStatus(id, status); + } }; qq.each(this._options.request, function(prop, val) { options[prop] = val; @@ -1659,6 +1741,9 @@ } } }, + _getCustomResumeData: function(fileId) { + return this._customResumeDataStore.get(fileId); + }, _getNotFinished: function() { return this._uploadData.retrieve({ status: [ qq.status.UPLOADING, qq.status.UPLOAD_RETRYING, qq.status.QUEUED, qq.status.SUBMITTING, qq.status.SUBMITTED, qq.status.PAUSED ] @@ -1760,7 +1845,8 @@ uuid: uuid, name: name, size: size, - batchId: batchId + batchId: batchId, + file: file }); this._handler.add(id, file); this._trackButton(id); @@ -1781,6 +1867,28 @@ blob: blob }); }, + _handleDeleteSuccess: function(id) { + if (this.getUploads({ + id: id + }).status !== qq.status.DELETED) { + var name = this.getName(id); + this._netUploadedOrQueued--; + this._netUploaded--; + this._handler.expunge(id); + this._uploadData.setStatus(id, qq.status.DELETED); + this.log("Delete request for '" + name + "' has succeeded."); + } + }, + _handleDeleteFailed: function(id, xhrOrXdr) { + var name = this.getName(id); + this._uploadData.setStatus(id, qq.status.DELETE_FAILED); + this.log("Delete request for '" + name + "' has failed.", "error"); + if (!xhrOrXdr || xhrOrXdr.withCredentials === undefined) { + this._options.callbacks.onError(id, name, "Delete request failed", xhrOrXdr); + } else { + this._options.callbacks.onError(id, name, "Delete request failed with response code " + xhrOrXdr.status, xhrOrXdr); + } + }, _initExtraButton: function(spec) { var button = this._createUploadButton({ accept: spec.validation.acceptFiles, @@ -1933,7 +2041,7 @@ _onAutoRetry: function(id, name, responseJSON, xhr, callback) { var self = this; self._preventRetries[id] = responseJSON[self._options.retry.preventRetryResponseProperty]; - if (self._shouldAutoRetry(id, name, responseJSON)) { + if (self._shouldAutoRetry(id)) { var retryWaitPeriod = self._options.retry.autoAttemptDelay * 1e3; self._maybeParseAndSendUploadError.apply(self, arguments); self._options.callbacks.onAutoRetry(id, name, self._autoRetries[id]); @@ -2006,19 +2114,9 @@ _onDeleteComplete: function(id, xhrOrXdr, isError) { var name = this.getName(id); if (isError) { - this._uploadData.setStatus(id, qq.status.DELETE_FAILED); - this.log("Delete request for '" + name + "' has failed.", "error"); - if (xhrOrXdr.withCredentials === undefined) { - this._options.callbacks.onError(id, name, "Delete request failed", xhrOrXdr); - } else { - this._options.callbacks.onError(id, name, "Delete request failed with response code " + xhrOrXdr.status, xhrOrXdr); - } + this._handleDeleteFailed(id, xhrOrXdr); } else { - this._netUploadedOrQueued--; - this._netUploaded--; - this._handler.expunge(id); - this._uploadData.setStatus(id, qq.status.DELETED); - this.log("Delete request for '" + name + "' has succeeded."); + this._handleDeleteSuccess(id); } }, _onInputChange: function(input) { @@ -2078,6 +2176,11 @@ this._uploadData.setStatus(id, qq.status.UPLOADING); }, _onUploadChunk: function(id, chunkData) {}, + _onUploadChunkSuccess: function(id, chunkData) { + if (!this._preventRetries[id] && this._options.retry.enableAuto) { + this._autoRetries[id] = 0; + } + }, _onUploadStatusChange: function(id, oldStatus, newStatus) { if (newStatus === qq.status.PAUSED) { clearTimeout(this._retryTimeouts[id]); @@ -2173,7 +2276,7 @@ this._uploadData.updateSize(id, newSize); this._totalProgress && this._totalProgress.onNewSize(id); }, - _shouldAutoRetry: function(id, name, responseJSON) { + _shouldAutoRetry: function(id) { var uploadData = this._uploadData.retrieve({ id: id }); @@ -2322,6 +2425,7 @@ maxConnections: 3, disableCancelForFormUploads: false, autoUpload: true, + warnBeforeUnload: true, request: { customHeaders: {}, endpoint: "/server/upload", @@ -2329,8 +2433,10 @@ forceMultipart: true, inputName: "qqfile", method: "POST", + omitDefaultParams: false, params: {}, paramsInBody: true, + requireSuccessJson: true, totalFileSizeName: "qqtotalfilesize", uuidName: "qquuid" }, @@ -2358,7 +2464,7 @@ onUpload: function(id, name) {}, onUploadChunk: function(id, name, chunkData) {}, onUploadChunkSuccess: function(id, chunkData, responseJSON, xhr) {}, - onResume: function(id, fileName, chunkData) {}, + onResume: function(id, fileName, chunkData, customResumeData) {}, onProgress: function(id, name, loaded, total) {}, onTotalProgress: function(loaded, total) {}, onError: function(id, name, reason, maybeXhrOrXdr) {}, @@ -2411,9 +2517,20 @@ totalFileSize: "qqtotalfilesize", totalParts: "qqtotalparts" }, - partSize: 2e6, + partSize: function(id) { + return 2e6; + }, success: { - endpoint: null + endpoint: null, + headers: function(id) { + return null; + }, + jsonPayload: false, + method: "POST", + params: function(id) { + return null; + }, + resetOnStatus: [] } }, resume: { @@ -2421,6 +2538,9 @@ recordsExpireIn: 7, paramNames: { resuming: "qqresume" + }, + customKeys: function(fileId) { + return []; } }, formatFileName: function(fileOrBlobName) { @@ -2519,7 +2639,7 @@ this.log("Paste support module not found", "error"); } } - this._preventLeaveInProgress(); + this._options.warnBeforeUnload && this._preventLeaveInProgress(); this._imageGenerator = qq.ImageGenerator && new qq.ImageGenerator(qq.bind(this.log, this)); this._refreshSessionData(); this._succeededSinceLastAllComplete = []; @@ -2537,6 +2657,7 @@ }); } this._currentItemLimit = this._options.validation.itemLimit; + this._customResumeDataStore = this._createStore(); }; qq.FineUploaderBasic.prototype = qq.basePublicApi; qq.extend(qq.FineUploaderBasic.prototype, qq.basePrivateApi); @@ -2606,7 +2727,7 @@ return xhrOrXdr; } function getXhrOrXdr(id, suppliedXhr) { - var xhrOrXdr = requestData[id].xhr; + var xhrOrXdr = requestData[id] && requestData[id].xhr; if (!xhrOrXdr) { if (suppliedXhr) { xhrOrXdr = suppliedXhr; @@ -2869,13 +2990,14 @@ onUploadChunk: function(id, fileName, chunkData) {}, onUploadChunkSuccess: function(id, chunkData, response, xhr) {}, onAutoRetry: function(id, fileName, response, xhr) {}, - onResume: function(id, fileName, chunkData) {}, + onResume: function(id, fileName, chunkData, customResumeData) {}, onUuidChanged: function(id, newUuid) {}, getName: function(id) {}, setSize: function(id, newSize) {}, isQueued: function(id) {}, getIdsInProxyGroup: function(id) {}, - getIdsInBatch: function(id) {} + getIdsInBatch: function(id) {}, + isInProgress: function(id) {} }, chunked = { done: function(id, chunkIdx, response, xhr) { var chunkData = handler._getChunkData(id, chunkIdx); @@ -2894,13 +3016,13 @@ handler._maybeDeletePersistedChunkData(id); upload.cleanup(id, normaizedResponse, xhr); }, function(response, xhr) { - var normaizedResponse = upload.normalizeResponse(response, false); - log("Problem finalizing chunks for file ID " + id + " - " + normaizedResponse.error, "error"); - if (normaizedResponse.reset) { + var normalizedResponse = upload.normalizeResponse(response, false); + log("Problem finalizing chunks for file ID " + id + " - " + normalizedResponse.error, "error"); + if (normalizedResponse.reset || xhr && options.chunking.success.resetOnStatus.indexOf(xhr.status) >= 0) { chunked.reset(id); } - if (!options.onAutoRetry(id, name, normaizedResponse, xhr)) { - upload.cleanup(id, normaizedResponse, xhr); + if (!options.onAutoRetry(id, name, normalizedResponse, xhr)) { + upload.cleanup(id, normalizedResponse, xhr); } }); }, @@ -2912,7 +3034,8 @@ if (responseToReport.reset) { chunked.reset(id); } else { - inProgressIdx = qq.indexOf(handler._getFileState(id).chunking.inProgress, chunkIdx); + var inProgressChunksArray = handler._getFileState(id).chunking.inProgress; + inProgressIdx = inProgressChunksArray ? qq.indexOf(inProgressChunksArray, chunkIdx) : -1; if (inProgressIdx >= 0) { handler._getFileState(id).chunking.inProgress.splice(inProgressIdx, 1); handler._getFileState(id).chunking.remaining.unshift(chunkIdx); @@ -2950,13 +3073,14 @@ handler._maybeDeletePersistedChunkData(id); handler.reevaluateChunking(id); handler._getFileState(id).loaded = 0; + handler._getFileState(id).attemptingResume = false; }, sendNext: function(id) { - var size = options.getSize(id), name = options.getName(id), chunkIdx = chunked.nextPart(id), chunkData = handler._getChunkData(id, chunkIdx), resuming = handler._getFileState(id).attemptingResume, inProgressChunks = handler._getFileState(id).chunking.inProgress || []; - if (handler._getFileState(id).loaded == null) { - handler._getFileState(id).loaded = 0; + var size = options.getSize(id), name = options.getName(id), chunkIdx = chunked.nextPart(id), chunkData = handler._getChunkData(id, chunkIdx), fileState = handler._getFileState(id), resuming = fileState.attemptingResume, inProgressChunks = fileState.chunking.inProgress || []; + if (fileState.loaded == null) { + fileState.loaded = 0; } - if (resuming && options.onResume(id, name, chunkData) === false) { + if (resuming && options.onResume(id, name, chunkData, fileState.customResumeData) === false) { chunked.reset(id); chunkIdx = chunked.nextPart(id); chunkData = handler._getChunkData(id, chunkIdx); @@ -2965,8 +3089,6 @@ if (chunkIdx == null && inProgressChunks.length === 0) { chunked.finalize(id); } else { - log(qq.format("Sending chunked upload request for item {}.{}, bytes {}-{} of {}.", id, chunkIdx, chunkData.start + 1, chunkData.end, size)); - options.onUploadChunk(id, name, handler._getChunkDataForCallback(chunkData)); inProgressChunks.push(chunkIdx); handler._getFileState(id).chunking.inProgress = inProgressChunks; if (concurrentChunkingPossible) { @@ -2978,30 +3100,45 @@ if (chunkData.blob.size === 0) { log(qq.format("Chunk {} for file {} will not be uploaded, zero sized chunk.", chunkIdx, id), "error"); chunked.handleFailure(chunkIdx, id, "File is no longer available", null); - } else { - handler.uploadChunk(id, chunkIdx, resuming).then(function success(response, xhr) { - log("Chunked upload request succeeded for " + id + ", chunk " + chunkIdx); - handler.clearCachedChunk(id, chunkIdx); - var inProgressChunks = handler._getFileState(id).chunking.inProgress || [], responseToReport = upload.normalizeResponse(response, true), inProgressChunkIdx = qq.indexOf(inProgressChunks, chunkIdx); - log(qq.format("Chunk {} for file {} uploaded successfully.", chunkIdx, id)); - chunked.done(id, chunkIdx, responseToReport, xhr); - if (inProgressChunkIdx >= 0) { - inProgressChunks.splice(inProgressChunkIdx, 1); - } - handler._maybePersistChunkedState(id); - if (!chunked.hasMoreParts(id) && inProgressChunks.length === 0) { - chunked.finalize(id); - } else if (chunked.hasMoreParts(id)) { - chunked.sendNext(id); - } else { - log(qq.format("File ID {} has no more chunks to send and these chunk indexes are still marked as in-progress: {}", id, JSON.stringify(inProgressChunks))); - } - }, function failure(response, xhr) { - chunked.handleFailure(chunkIdx, id, response, xhr); - }).done(function() { - handler.clearXhr(id, chunkIdx); - }); } + var onUploadChunkPromise = options.onUploadChunk(id, name, handler._getChunkDataForCallback(chunkData)); + onUploadChunkPromise.then(function(requestOverrides) { + if (!options.isInProgress(id)) { + log(qq.format("Not sending chunked upload request for item {}.{} - no longer in progress.", id, chunkIdx)); + } else { + log(qq.format("Sending chunked upload request for item {}.{}, bytes {}-{} of {}.", id, chunkIdx, chunkData.start + 1, chunkData.end, size)); + var uploadChunkData = { + chunkIdx: chunkIdx, + id: id, + overrides: requestOverrides, + resuming: resuming + }; + handler.uploadChunk(uploadChunkData).then(function success(response, xhr) { + log("Chunked upload request succeeded for " + id + ", chunk " + chunkIdx); + handler.clearCachedChunk(id, chunkIdx); + var inProgressChunks = handler._getFileState(id).chunking.inProgress || [], responseToReport = upload.normalizeResponse(response, true), inProgressChunkIdx = qq.indexOf(inProgressChunks, chunkIdx); + log(qq.format("Chunk {} for file {} uploaded successfully.", chunkIdx, id)); + chunked.done(id, chunkIdx, responseToReport, xhr); + if (inProgressChunkIdx >= 0) { + inProgressChunks.splice(inProgressChunkIdx, 1); + } + handler._maybePersistChunkedState(id); + if (!chunked.hasMoreParts(id) && inProgressChunks.length === 0) { + chunked.finalize(id); + } else if (chunked.hasMoreParts(id)) { + chunked.sendNext(id); + } else { + log(qq.format("File ID {} has no more chunks to send and these chunk indexes are still marked as in-progress: {}", id, JSON.stringify(inProgressChunks))); + } + }, function failure(response, xhr) { + chunked.handleFailure(chunkIdx, id, response, xhr); + }).done(function() { + handler.clearXhr(id, chunkIdx); + }); + } + }, function(error) { + chunked.handleFailure(chunkIdx, id, error, null); + }); } } }, connectionManager = { @@ -3077,7 +3214,12 @@ } }, simple = { send: function(id, name) { - handler._getFileState(id).loaded = 0; + var fileState = handler._getFileState(id); + if (!fileState) { + log("Ignoring send request as this upload may have been cancelled, File ID " + id, "warn"); + return; + } + fileState.loaded = 0; log("Sending simple upload request for " + id); handler.uploadFile(id).then(function(response, optXhr) { log("Simple upload request succeeded for " + id); @@ -3113,6 +3255,7 @@ initHandler: function() { var handlerType = namespace ? qq[namespace] : qq.traditional, handlerModuleSubtype = qq.supportedFeatures.ajaxUploading ? "Xhr" : "Form"; handler = new handlerType[handlerModuleSubtype + "UploadHandler"](options, { + getCustomResumeData: options.getCustomResumeData, getDataByUuid: options.getDataByUuid, getName: options.getName, getSize: options.getSize, @@ -3120,7 +3263,10 @@ log: log, onCancel: options.onCancel, onProgress: options.onProgress, - onUuidChanged: options.onUuidChanged + onUuidChanged: options.onUuidChanged, + onFinalizing: function(id) { + options.setStatus(id, qq.status.UPLOAD_FINALIZING); + } }); if (handler._removeExpiredChunkingRecords) { handler._removeExpiredChunkingRecords(); @@ -3193,12 +3339,26 @@ if (!controller.isValid(id)) { throw new qq.Error(id + " is not a valid file ID to upload!"); } - options.onUpload(id, name); - if (chunkingPossible && handler._shouldChunkThisFile(id)) { - chunked.sendNext(id); - } else { - simple.send(id, name); - } + options.onUpload(id, name).then(function(response) { + if (response && response.pause) { + options.setStatus(id, qq.status.PAUSED); + handler.pause(id); + connectionManager.free(id); + } else { + if (chunkingPossible && handler._shouldChunkThisFile(id)) { + chunked.sendNext(id); + } else { + simple.send(id, name); + } + } + }, function(error) { + error = error || {}; + log(id + " upload start aborted due to rejected onUpload Promise - details: " + error, "error"); + if (!options.onAutoRetry(id, name, error.responseJSON || {})) { + var response = upload.normalizeResponse(error.responseJSON, false); + upload.cleanup(id, response); + } + }); }, start: function(id) { var blobToUpload = upload.getProxyOrBlob(id); @@ -3277,6 +3437,13 @@ isValid: function(id) { return handler.isValid(id); }, + hasResumeRecord: function(id) { + var key = handler.isValid(id) && handler._getLocalStorageId && handler._getLocalStorageId(id); + if (key) { + return !!localStorage.getItem(key); + } + return false; + }, getResumableFilesData: function() { if (handler.getResumableFilesData) { return handler.getResumableFilesData(); @@ -3296,6 +3463,9 @@ } return false; }, + isAttemptingResume: function(id) { + return !!handler.isAttemptingResume && handler.isAttemptingResume(id); + }, isResumable: function(id) { return !!handler.isResumable && handler.isResumable(id); } @@ -3486,7 +3656,19 @@ }; qq.XhrUploadHandler = function(spec) { "use strict"; - var handler = this, namespace = spec.options.namespace, proxy = spec.proxy, chunking = spec.options.chunking, resume = spec.options.resume, chunkFiles = chunking && spec.options.chunking.enabled && qq.supportedFeatures.chunking, resumeEnabled = resume && spec.options.resume.enabled && chunkFiles && qq.supportedFeatures.resume, getName = proxy.getName, getSize = proxy.getSize, getUuid = proxy.getUuid, getEndpoint = proxy.getEndpoint, getDataByUuid = proxy.getDataByUuid, onUuidChanged = proxy.onUuidChanged, onProgress = proxy.onProgress, log = proxy.log; + var handler = this, namespace = spec.options.namespace, proxy = spec.proxy, chunking = spec.options.chunking, getChunkSize = function(id) { + var fileState = handler._getFileState(id); + if (fileState.chunkSize) { + return fileState.chunkSize; + } else { + var chunkSize = chunking.partSize; + if (qq.isFunction(chunkSize)) { + chunkSize = chunkSize(id, getSize(id)); + } + fileState.chunkSize = chunkSize; + return chunkSize; + } + }, resume = spec.options.resume, chunkFiles = chunking && spec.options.chunking.enabled && qq.supportedFeatures.chunking, resumeEnabled = resume && spec.options.resume.enabled && chunkFiles && qq.supportedFeatures.resume, getName = proxy.getName, getSize = proxy.getSize, getUuid = proxy.getUuid, getEndpoint = proxy.getEndpoint, getDataByUuid = proxy.getDataByUuid, onUuidChanged = proxy.onUuidChanged, onProgress = proxy.onProgress, log = proxy.log, getCustomResumeData = proxy.getCustomResumeData; function abort(id) { qq.each(handler._getXhrs(id), function(xhrId, xhr) { var ajaxRequester = handler._getAjaxRequester(id, xhrId); @@ -3524,7 +3706,10 @@ }); qq.extend(this, { clearCachedChunk: function(id, chunkIdx) { - delete handler._getFileState(id).temp.cachedChunks[chunkIdx]; + var fileState = handler._getFileState(id); + if (fileState) { + delete fileState.temp.cachedChunks[chunkIdx]; + } }, clearXhr: function(id, chunkIdx) { var tempState = handler._getFileState(id).temp; @@ -3561,15 +3746,21 @@ if (uploadData.key) { data.key = uploadData.key; } + if (uploadData.customResumeData) { + data.customResumeData = uploadData.customResumeData; + } resumableFilesData.push(data); }); return resumableFilesData; }, + isAttemptingResume: function(id) { + return handler._getFileState(id).attemptingResume; + }, isResumable: function(id) { return !!chunking && handler.isValid(id) && !handler._getFileState(id).notResumable; }, moveInProgressToRemaining: function(id, optInProgress, optRemaining) { - var inProgress = optInProgress || handler._getFileState(id).chunking.inProgress, remaining = optRemaining || handler._getFileState(id).chunking.remaining; + var fileState = handler._getFileState(id) || {}, chunkingState = fileState.chunking || {}, inProgress = optInProgress || chunkingState.inProgress, remaining = optRemaining || chunkingState.remaining; if (inProgress) { log(qq.format("Moving these chunks from in-progress {}, to remaining.", JSON.stringify(inProgress))); inProgress.reverse(); @@ -3628,7 +3819,7 @@ return handler._getFileState(id).temp.ajaxRequesters[chunkIdx]; }, _getChunkData: function(id, chunkIndex) { - var chunkSize = chunking.partSize, fileSize = getSize(id), fileOrBlob = handler.getFile(id), startBytes = chunkSize * chunkIndex, endBytes = startBytes + chunkSize >= fileSize ? fileSize : startBytes + chunkSize, totalChunks = handler._getTotalChunks(id), cachedChunks = this._getFileState(id).temp.cachedChunks, blob = cachedChunks[chunkIndex] || qq.sliceBlob(fileOrBlob, startBytes, endBytes); + var chunkSize = getChunkSize(id), fileSize = getSize(id), fileOrBlob = handler.getFile(id), startBytes = chunkSize * chunkIndex, endBytes = startBytes + chunkSize >= fileSize ? fileSize : startBytes + chunkSize, totalChunks = handler._getTotalChunks(id), cachedChunks = this._getFileState(id).temp.cachedChunks, blob = cachedChunks[chunkIndex] || qq.sliceBlob(fileOrBlob, startBytes, endBytes); cachedChunks[chunkIndex] = blob; return { part: chunkIndex, @@ -3648,8 +3839,11 @@ }; }, _getLocalStorageId: function(id) { - var formatVersion = "5.0", name = getName(id), size = getSize(id), chunkSize = chunking.partSize, endpoint = getEndpoint(id); - return qq.format("qq{}resume{}-{}-{}-{}-{}", namespace, formatVersion, name, size, chunkSize, endpoint); + var formatVersion = "5.0", name = getName(id), size = getSize(id), chunkSize = getChunkSize(id), endpoint = getEndpoint(id), customKeys = resume.customKeys(id), localStorageId = qq.format("qq{}resume{}-{}-{}-{}-{}", namespace, formatVersion, name, size, chunkSize, endpoint); + customKeys.forEach(function(key) { + localStorageId += "-" + key; + }); + return localStorageId; }, _getMimeType: function(id) { return handler.getFile(id).type; @@ -3659,7 +3853,7 @@ }, _getTotalChunks: function(id) { if (chunking) { - var fileSize = getSize(id), chunkSize = chunking.partSize; + var fileSize = getSize(id), chunkSize = getChunkSize(id); return Math.ceil(fileSize / chunkSize); } }, @@ -3717,6 +3911,7 @@ state.key = persistedData.key; state.chunking = persistedData.chunking; state.loaded = persistedData.loaded; + state.customResumeData = persistedData.customResumeData; state.attemptingResume = true; handler.moveInProgressToRemaining(id); } @@ -3726,6 +3921,7 @@ _maybePersistChunkedState: function(id) { var state = handler._getFileState(id), localStorageId, persistedData; if (resumeEnabled && handler.isResumable(id)) { + var customResumeData = getCustomResumeData(id); localStorageId = handler._getLocalStorageId(id); persistedData = { name: getName(id), @@ -3736,6 +3932,9 @@ loaded: state.loaded, lastUpdated: Date.now() }; + if (customResumeData) { + persistedData.customResumeData = customResumeData; + } try { localStorage.setItem(localStorageId, JSON.stringify(persistedData)); } catch (error) { @@ -3792,10 +3991,12 @@ }, _shouldChunkThisFile: function(id) { var state = handler._getFileState(id); - if (!state.chunking) { - handler.reevaluateChunking(id); + if (state) { + if (!state.chunking) { + handler.reevaluateChunking(id); + } + return state.chunking.enabled; } - return state.chunking.enabled; } }); }; @@ -5322,18 +5523,24 @@ "use strict"; var handler = this, getName = proxy.getName, getSize = proxy.getSize, getUuid = proxy.getUuid, log = proxy.log, multipart = spec.forceMultipart || spec.paramsInBody, addChunkingSpecificParams = function(id, params, chunkData) { var size = getSize(id), name = getName(id); - params[spec.chunking.paramNames.partIndex] = chunkData.part; - params[spec.chunking.paramNames.partByteOffset] = chunkData.start; - params[spec.chunking.paramNames.chunkSize] = chunkData.size; - params[spec.chunking.paramNames.totalParts] = chunkData.count; - params[spec.totalFileSizeName] = size; - if (multipart) { + if (!spec.omitDefaultParams) { + params[spec.chunking.paramNames.partIndex] = chunkData.part; + params[spec.chunking.paramNames.partByteOffset] = chunkData.start; + params[spec.chunking.paramNames.chunkSize] = chunkData.size; + params[spec.chunking.paramNames.totalParts] = chunkData.count; + params[spec.totalFileSizeName] = size; + } + if (multipart && !spec.omitDefaultParams) { params[spec.filenameParam] = name; } }, allChunksDoneRequester = new qq.traditional.AllChunksDoneAjaxRequester({ cors: spec.cors, endpoint: spec.chunking.success.endpoint, - log: log + headers: spec.chunking.success.headers, + jsonPayload: spec.chunking.success.jsonPayload, + log: log, + method: spec.chunking.success.method, + params: spec.chunking.success.params }), createReadyStateChangedHandler = function(id, xhr) { var promise = new qq.Promise(); xhr.onreadystatechange = function() { @@ -5355,7 +5562,7 @@ params[spec.chunking.paramNames.totalParts] = handler._getTotalChunks(id); return params; }, isErrorUploadResponse = function(xhr, response) { - return qq.indexOf([ 200, 201, 202, 203, 204 ], xhr.status) < 0 || !response.success || response.reset; + return qq.indexOf([ 200, 201, 202, 203, 204 ], xhr.status) < 0 || spec.requireSuccessJson && !response.success || response.reset; }, onUploadOrChunkComplete = function(id, xhr) { var response; log("xhr - server response received for " + id); @@ -5371,7 +5578,7 @@ log(qq.format("Received response status {} with body: {}", xhr.status, xhr.responseText)); response = qq.parseJson(xhr.responseText); } catch (error) { - upload && log("Error when attempting to parse xhr response text (" + error.message + ")", "error"); + upload && spec.requireSuccessJson && log("Error when attempting to parse xhr response text (" + error.message + ")", "error"); } return response; }, sendChunksCompleteRequest = function(id) { @@ -5382,17 +5589,32 @@ promise.failure(parseResponse(false, xhr), xhr); }); return promise; - }, setParamsAndGetEntityToSend = function(params, xhr, fileOrBlob, id) { - var formData = new FormData(), method = spec.method, endpoint = spec.endpointStore.get(id), name = getName(id), size = getSize(id); - params[spec.uuidName] = getUuid(id); - params[spec.filenameParam] = name; - if (multipart) { - params[spec.totalFileSizeName] = size; - } - if (!spec.paramsInBody) { - if (!multipart) { + }, setParamsAndGetEntityToSend = function(entityToSendParams) { + var fileOrBlob = entityToSendParams.fileOrBlob; + var id = entityToSendParams.id; + var xhr = entityToSendParams.xhr; + var xhrOverrides = entityToSendParams.xhrOverrides || {}; + var customParams = entityToSendParams.customParams || {}; + var defaultParams = entityToSendParams.params || {}; + var xhrOverrideParams = xhrOverrides.params || {}; + var params; + var formData = multipart ? new FormData() : null, method = xhrOverrides.method || spec.method, endpoint = xhrOverrides.endpoint || spec.endpointStore.get(id), name = getName(id), size = getSize(id); + if (spec.omitDefaultParams) { + params = qq.extend({}, customParams); + qq.extend(params, xhrOverrideParams); + } else { + params = qq.extend({}, customParams); + qq.extend(params, xhrOverrideParams); + qq.extend(params, defaultParams); + params[spec.uuidName] = getUuid(id); + params[spec.filenameParam] = name; + if (multipart) { + params[spec.totalFileSizeName] = size; + } else if (!spec.paramsInBody) { params[spec.inputName] = name; } + } + if (!spec.paramsInBody) { endpoint = qq.obj2url(params, endpoint); } xhr.open(method, endpoint, true); @@ -5407,42 +5629,74 @@ return formData; } return fileOrBlob; - }, setUploadHeaders = function(id, xhr) { - var extraHeaders = spec.customHeaders.get(id), fileOrBlob = handler.getFile(id); - xhr.setRequestHeader("Accept", "application/json"); - xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); - xhr.setRequestHeader("Cache-Control", "no-cache"); - if (!multipart) { - xhr.setRequestHeader("Content-Type", "application/octet-stream"); - xhr.setRequestHeader("X-Mime-Type", fileOrBlob.type); + }, setUploadHeaders = function(headersOptions) { + var headerOverrides = headersOptions.headerOverrides; + var id = headersOptions.id; + var xhr = headersOptions.xhr; + if (headerOverrides) { + qq.each(headerOverrides, function(headerName, headerValue) { + xhr.setRequestHeader(headerName, headerValue); + }); + } else { + var extraHeaders = spec.customHeaders.get(id), fileOrBlob = handler.getFile(id); + xhr.setRequestHeader("Accept", "application/json"); + xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + xhr.setRequestHeader("Cache-Control", "no-cache"); + if (!multipart) { + xhr.setRequestHeader("Content-Type", "application/octet-stream"); + xhr.setRequestHeader("X-Mime-Type", fileOrBlob.type); + } + qq.each(extraHeaders, function(name, val) { + xhr.setRequestHeader(name, val); + }); } - qq.each(extraHeaders, function(name, val) { - xhr.setRequestHeader(name, val); - }); }; qq.extend(this, { - uploadChunk: function(id, chunkIdx, resuming) { - var chunkData = handler._getChunkData(id, chunkIdx), xhr = handler._createXhr(id, chunkIdx), size = getSize(id), promise, toSend, params; + uploadChunk: function(uploadChunkParams) { + var id = uploadChunkParams.id; + var chunkIdx = uploadChunkParams.chunkIdx; + var overrides = uploadChunkParams.overrides || {}; + var resuming = uploadChunkParams.resuming; + var chunkData = handler._getChunkData(id, chunkIdx), xhr = handler._createXhr(id, chunkIdx), promise, toSend, customParams, params = {}; promise = createReadyStateChangedHandler(id, xhr); handler._registerProgressHandler(id, chunkIdx, chunkData.size); - params = spec.paramsStore.get(id); + customParams = spec.paramsStore.get(id); addChunkingSpecificParams(id, params, chunkData); if (resuming) { params[spec.resume.paramNames.resuming] = true; } - toSend = setParamsAndGetEntityToSend(params, xhr, chunkData.blob, id); - setUploadHeaders(id, xhr); + toSend = setParamsAndGetEntityToSend({ + fileOrBlob: chunkData.blob, + id: id, + customParams: customParams, + params: params, + xhr: xhr, + xhrOverrides: overrides + }); + setUploadHeaders({ + headerOverrides: overrides.headers, + id: id, + xhr: xhr + }); xhr.send(toSend); return promise; }, uploadFile: function(id) { - var fileOrBlob = handler.getFile(id), promise, xhr, params, toSend; + var fileOrBlob = handler.getFile(id), promise, xhr, customParams, toSend; xhr = handler._createXhr(id); handler._registerProgressHandler(id); promise = createReadyStateChangedHandler(id, xhr); - params = spec.paramsStore.get(id); - toSend = setParamsAndGetEntityToSend(params, xhr, fileOrBlob, id); - setUploadHeaders(id, xhr); + customParams = spec.paramsStore.get(id); + toSend = setParamsAndGetEntityToSend({ + fileOrBlob: fileOrBlob, + id: id, + customParams: customParams, + xhr: xhr + }); + setUploadHeaders({ + id: id, + xhr: xhr + }); xhr.send(toSend); return promise; } @@ -5458,6 +5712,7 @@ qq.override(this, function(super_) { return { finalizeChunks: function(id) { + proxy.onFinalizing(id); if (spec.chunking.success.endpoint) { return sendChunksCompleteRequest(id); } else { @@ -5469,24 +5724,29 @@ }; qq.traditional.AllChunksDoneAjaxRequester = function(o) { "use strict"; - var requester, method = "POST", options = { + var requester, options = { cors: { allowXdr: false, expected: false, sendCredentials: false }, endpoint: null, - log: function(str, level) {} + log: function(str, level) {}, + method: "POST" }, promises = {}, endpointHandler = { get: function(id) { + if (qq.isFunction(options.endpoint)) { + return options.endpoint(id); + } return options.endpoint; } }; qq.extend(options, o); requester = qq.extend(this, new qq.AjaxRequester({ acceptHeader: "application/json", - validMethods: [ method ], - method: method, + contentType: options.jsonPayload ? "application/json" : "application/x-www-form-urlencoded", + validMethods: [ options.method ], + method: options.method, endpointStore: endpointHandler, allowXRequestedWithAndCacheControl: false, cors: options.cors, @@ -5506,7 +5766,7 @@ var promise = new qq.Promise(); options.log("Submitting All Chunks Done request for " + id); promises[id] = promise; - requester.initTransport(id).withParams(params).withHeaders(headers).send(xhr); + requester.initTransport(id).withParams(options.params(id) || params).withHeaders(options.headers(id) || headers).send(xhr); return promise; } }); diff --git a/styles/bootstrap/fine-uploader/fine-uploader.core.js.map b/styles/bootstrap/fine-uploader/fine-uploader.core.js.map index 48155fa23..5777241c4 100644 --- a/styles/bootstrap/fine-uploader/fine-uploader.core.js.map +++ b/styles/bootstrap/fine-uploader/fine-uploader.core.js.map @@ -1 +1 @@ -{"version":3,"sources":["?","../client/js/util.js","../client/js/export.js","../client/js/error/error.js","../client/js/version.js","../client/js/features.js","../client/js/promise.js","../client/js/blob-proxy.js","../client/js/button.js","../client/js/upload-data.js","../client/js/uploader.basic.api.js","../client/js/uploader.basic.js","../client/js/ajax.requester.js","../client/js/upload-handler/upload.handler.js","../client/js/upload-handler/upload.handler.controller.js","../client/js/window.receive.message.js","../client/js/upload-handler/form.upload.handler.js","../client/js/upload-handler/xhr.upload.handler.js","../client/js/deletefile.ajax.requester.js","../client/js/image-support/megapix-image.js","../client/js/image-support/image.js","../client/js/image-support/exif.js","../client/js/identify.js","../client/js/image-support/validation.image.js","../client/js/session.js","../client/js/session.ajax.requester.js","../client/js/image-support/scaler.js","../client/js/third-party/ExifRestorer.js","../client/js/total-progress.js","../client/js/paste.js","../client/js/form-support.js","../client/js/traditional/traditional.form.upload.handler.js","../client/js/traditional/traditional.xhr.upload.handler.js","../client/js/traditional/all-chunks-done.ajax.requester.js"],"names":["global","qq","element","hide","style","display","this","attach","type","fn","addEventListener","attachEvent","detach","removeEventListener","detachEvent","contains","descendant","compareDocumentPosition","insertBefore","elementB","parentNode","remove","removeChild","css","styles","Error","opacity","filter","Math","round","extend","hasClass","name","considerParent","re","RegExp","test","className","addClass","removeClass","replace","getByClass","first","candidates","result","querySelector","querySelectorAll","getElementsByTagName","each","idx","val","push","getFirstByClass","children","child","firstChild","nodeType","nextSibling","setText","text","innerText","textContent","clearText","hasAttribute","attrName","attrVal","exec","getAttribute","undefined","canvasToBlob","canvas","mime","quality","dataUriToBlob","toDataURL","dataUri","arrayBuffer","byteString","createBlob","data","BlobBuilder","window","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","blobBuilder","append","getBlob","Blob","intArray","mimeString","split","indexOf","atob","decodeURI","ArrayBuffer","length","Uint8Array","character","charCodeAt","log","message","level","console","isObject","variable","Object","prototype","toString","call","isFunction","isArray","value","buffer","constructor","isItemList","maybeItemList","isNodeList","maybeNodeList","item","namedItem","isString","maybeString","trimStr","string","String","trim","format","str","args","Array","slice","arguments","newStr","nextIdxToReplace","strBefore","substring","strAfter","isFile","maybeFile","File","isFileList","maybeFileList","FileList","isFileOrInput","maybeFileOrInput","isInput","maybeInput","notFile","evaluateType","normalizedType","toLowerCase","HTMLInputElement","tagName","isBlob","maybeBlob","isXhrUploadSupported","input","document","createElement","multiple","FormData","createXhrInstance","upload","XMLHttpRequest","ActiveXObject","error","isFolderDropSupported","dataTransfer","items","webkitGetAsEntry","isFileChunkingSupported","androidStock","webkitSlice","mozSlice","sliceBlob","fileOrBlob","start","end","slicer","arrayBufferToHex","bytesAsHex","bytes","byt","byteAsHexStr","readBlobToHex","blob","startOffset","initialBlob","fileReader","FileReader","promise","Promise","onload","success","onerror","failure","readAsArrayBuffer","second","extendNested","prop","override","target","sourceFn","super_","source","srcPropName","srcPropVal","arr","elt","from","len","hasOwnProperty","getUniqueId","c","r","random","v","ie","navigator","userAgent","ie7","ie8","ie10","ie11","edge","safari","vendor","chrome","opera","firefox","windows","platform","android","ios6","ios","ios7","ios8","ios800","iosChrome","iosSafari","iosSafariWebView","preventDefault","e","returnValue","toElement","div","html","innerHTML","iterableItem","callback","keyOrIndex","retVal","Storage","key","getItem","charAt","bind","oldFunc","context","newArgs","concat","apply","obj2url","obj","temp","prefixDone","uristrings","prefix","add","nextObj","i","nextTemp","encodeURIComponent","join","obj2FormData","formData","arrayKeyName","obj2Inputs","form","setAttribute","appendChild","parseJson","json","JSON","parse","eval","getExtension","filename","extIdx","lastIndexOf","substr","getFilename","blobOrFileInput","fileName","DisposeSupport","disposers","dispose","disposer","shift","addDisposer","disposeFunction","define","amd","module","exports","version","supportedFeatures","supportsUploading","supportsUploadingBlobs","supportsFileDrop","supportsAjaxFileUploading","supportsFolderDrop","supportsChunking","supportsResume","supportsUploadViaPaste","supportsUploadCors","supportsDeleteFileXdr","supportsDeleteFileCorsXhr","supportsDeleteFileCors","supportsFolderSelection","supportsImagePreviews","supportsUploadProgress","testSupportsFileInputElement","supported","tempInput","disabled","ex","isChrome21OrHigher","match","isChrome14OrHigher","isCrossOriginXhrSupported","xhr","withCredentials","isXdrSupported","XDomainRequest","isCrossOriginAjaxSupported","isFolderSelectionSupported","webkitdirectory","isLocalStorageSupported","localStorage","setItem","isDragAndDropSupported","span","postMessage","ajaxUploading","blobUploading","canDetermineSize","chunking","deleteFileCors","deleteFileCorsXdr","deleteFileCorsXhr","dialogElement","HTMLDialogElement","fileDrop","folderDrop","folderSelection","imagePreviews","imageValidation","itemSizeValidation","pause","progressBar","resume","scaling","tiffPreviews","unlimitedScaledImageSize","uploading","uploadCors","uploadCustomHeaders","uploadNonMultipart","uploadViaPaste","isGenericPromise","maybePromise","then","successArgs","failureArgs","successCallbacks","failureCallbacks","doneCallbacks","state","onSuccess","onFailure","done","BlobProxy","referenceBlob","onCreate","create","UploadButton","o","self","disposeSupport","options","acceptFiles","focusClass","folders","hoverClass","ios8BrowserCrashWorkaround","onChange","title","buttonId","createInput","BUTTON_ID_ATTR_NAME","setMultiple","position","right","top","fontFamily","fontSize","margin","padding","cursor","height","overflow","direction","getInput","getButtonId","isMultiple","optInput","removeAttribute","setAcceptFiles","reset","UploadData","uploaderProxy","byUuid","byStatus","byProxyGroupId","byBatchId","getDataByIds","idOrIds","entries","id","getDataByUuids","uuids","uuid","getDataByStatus","status","statusResults","statuses","index","statusEnum","statusResultIndexes","dataIndex","addFile","spec","SUBMITTING","originalName","size","batchId","proxyGroupId","onStatusChange","retrieve","optionalFilter","setStatus","newStatus","oldStatus","byStatusOldStatusIndex","splice","uuidChanged","newUuid","oldUuid","updateName","newName","updateSize","newSize","setParentId","targetId","parentId","getIdsInProxyGroup","getIdsInBatch","SUBMITTED","REJECTED","QUEUED","CANCELED","PAUSED","UPLOADING","UPLOAD_RETRYING","UPLOAD_SUCCESSFUL","UPLOAD_FAILED","DELETE_FAILED","DELETING","DELETED","basePublicApi","addBlobs","blobDataOrArray","params","endpoint","addFiles","addInitialFiles","cannedFileList","cannedFile","_addCannedFile","_maybeHandleIos8SafariWorkaround","_storedIds","_currentBatchId","processBlob","_handleNewFile","_options","blobs","defaultName","verifiedFiles","processBlobData","blobData","processCanvas","processCanvasData","canvasData","normalizedQuality","processFileOrInput","fileOrInput","files","file","normalizeData","fileContainer","_prepareItemsForUpload","cancel","_handler","cancelAll","storedIdsCopy","storedFileId","clearStoredFiles","continueUpload","uploadData","_uploadData","enabled","getName","_uploadFile","deleteFile","_onSubmitDelete","doesExist","fileOrBlobId","isValid","drawThumbnail","fileId","imgOrCanvas","maxSize","fromServer","customResizeFunction","promiseToReturn","fileOrUrl","_imageGenerator","_thumbnailUrls","scale","getFile","container","generate","modifiedContainer","reason","getButton","_getButton","_buttonIdsForFileIds","getEndpoint","_endpointStore","get","getInProgress","getParentId","uploadDataEntry","getUploads","getResumableFilesData","getSize","getNetUploads","_netUploaded","getRemainingAllowedItems","allowedItems","_currentItemLimit","_netUploadedOrQueued","getUuid","debug","pauseUpload","_autoRetries","_retryTimeouts","_preventRetries","_buttons","button","_paramsStore","_pasteHandler","session","refreshOnReset","_refreshSessionData","_succeededSinceLastAllComplete","_failedSinceLastAllComplete","_totalProgress","retry","_manualRetry","scaleImage","specs","Scaler","setCustomHeaders","headers","_customHeadersStore","set","setDeleteFileCustomHeaders","_deleteFileCustomHeadersStore","setDeleteFileEndpoint","_deleteFileEndpointStore","setDeleteFileParams","_deleteFileParamsStore","setEndpoint","setForm","elementOrId","_updateFormSupportAndParams","setItemLimit","newItemLimit","setName","setParams","setUuid","uploadStoredFiles","_itemError","_uploadStoredFiles","basePrivateApi","sessionData","deleteFileEndpoint","deleteFileParams","thumbnailUrl","_annotateWithButtonId","associatedInput","qqButtonId","_getButtonId","_batchError","callbacks","onError","_createDeleteHandler","DeleteFileAjaxRequester","method","toUpperCase","maxConnections","uuidParamName","request","uuidName","customHeaders","paramsStore","endpointStore","cors","onDelete","_onDelete","onDeleteComplete","xhrOrXdr","isError","_onDeleteComplete","_createPasteHandler","PasteSupport","targetElement","paste","pasteReceived","_handleCheckedCallback","onPasteReceived","_handlePasteSuccess","identifier","_createStore","initialValue","_readOnlyValues_","store","catchall","perIdReadOnlyValues","readOnlyValues","copy","orig","getReadOnlyValues","includeReadOnlyValues","existing","values","addReadOnly","_createUploadDataTracker","_onUploadStatusChange","_maybeAllComplete","setTimeout","_createUploadButton","accept","validation","allowedExtensions","allowMultiple","workarounds","iosEmptyVideos","_isAllowedExtension","classes","buttonFocus","buttonHover","ios8BrowserCrash","inputName","_onInputChange","fileInputTitle","_disposeSupport","_createUploadHandler","additionalOptions","namespace","lastOnProgress","preventRetryParam","preventRetryResponseProperty","onProgress","loaded","total","_onProgress","onComplete","_onComplete","onCancel","cancelFinalizationEffort","_onCancel","onUploadPrep","_onUploadPrep","onUpload","_onUpload","onUploadChunk","chunkData","_onUploadChunk","onUploadChunkSuccess","onResume","onAutoRetry","responseJSON","_onAutoRetry","onUuidChanged","setSize","_setSize","getDataByUuid","isQueued","UploadHandlerController","_fileOrBlobRejected","_formatSize","sizeSymbols","max","toFixed","_generateExtraButtonSpecs","_extraButtonSpecs","extraButtons","extraButtonOptionEntry","extraButtonSpec","_initExtraButton","extraButtonsSpec","_defaultButtonId","buttonOrFileInputOrFile","inputs","fileInput","fileBlobOrInput","_getNotFinished","_getValidationBase","_getValidationDescriptor","fileWrapper","_getValidationDescriptors","fileWrappers","fileDescriptors","_handleCameraAccess","camera","acceptIosCamera","optionRoot","details","callbackRetVal","successParam","newFileWrapperList","actualFile","handler","_customNewFileHandler","_handleNewFileGeneric","addFileToHandler","_trackButton","fileList","extSuppliedName","extension","_initFormSupportAndParams","_formSupport","FormSupport","attachedToForm","getFormInputsAsObject","autoUpload","newAutoUpload","newEndpoint","_isDeletePossible","expected","allowXdr","allowed","valid","allowedExt","extRegex","code","maybeNameOrNames","messages","names","validationBase","extensionsForMessage","placeholderMatch","replacement","allowedExtension","formatFileName","sizeLimit","minSizeLimit","placeholder","_onBeforeManualRetry","notFinished","_onAllComplete","ios8SafariUploads","alert","unsupportedBrowserIos8Safari","_maybeParseAndSendUploadError","response","errorReason","defaultResponseError","_maybeProcessNextItemAfterOnValidateCallback","validItem","stopOnFirstInvalidFile","validationDescriptor","onValidate","_onValidateCallbackSuccess","_onValidateCallbackFailure","successful","failed","onAllComplete","_shouldAutoRetry","retryWaitPeriod","autoAttemptDelay","_onBeforeAutoRetry","itemLimit","onManualRetry","clearTimeout","storedItemIndex","expunge","fileIndex","onIndividualProgress","_onSubmit","_onSubmitCallbackSuccess","_onSubmitted","onSubmitted","_storeForLater","onSuccessCallback","additionalMandatedParams","adjustedOnSuccessCallback","onSubmitDelete","_deleteHandler","sendDelete","_onTotalProgress","onTotalProgress","_onValidateBatchCallbackFailure","_onValidateBatchCallbackSuccess","validationDescriptors","errorMessage","proposedNetFilesUploadedOrQueued","tooManyItemsError","nextIndex","_validateFileOrBlobData","_upload","onValidateBatch","_preventLeaveInProgress","event","onLeave","Session","_session","addFileRecord","refresh","_sessionRequestComplete","onSessionRequestComplete","onNewSize","enableAuto","maxAutoAttempts","formElementOrId","onSubmit","idToUpload","stillSubmitting","validityChecker","allowEmpty","ImageValidation","validate","image","errorCode","_wrapCallbacks","safeCallback","errorMsg","exception","callbackName","callbackFunc","FineUploaderBasic","disableCancelForFormUploads","filenameParam","forceMultipart","paramsInBody","totalFileSizeName","maxHeight","maxWidth","minHeight","minWidth","maybeXhr","maybeXhrOrXdr","attemptNumber","fileOrBlobData","typeError","sizeError","minSizeError","emptyError","noFilesError","maxHeightImageError","maxWidthImageError","minHeightImageError","minWidthImageError","retryFailTooManyItems","concurrent","mandatory","paramNames","partIndex","partByteOffset","chunkSize","totalFileSize","totalParts","partSize","recordsExpireIn","resuming","fileOrBlobName","sendCredentials","interceptSubmit","customResizer","sendOriginal","orient","defaultType","defaultQuality","failureText","includeExif","sizes","ImageGenerator","_scaler","handleNewFile","TotalProgress","entry","AjaxRequester","shouldParamsBeInQueryString","queue","requestData","acceptHeader","validMethods","contentType","mandatedParams","allowXRequestedWithAndCacheControl","successfulResponseCodes","DELETE","PATCH","POST","PUT","GET","onSend","isSimpleMethod","containsNonSimpleHeaders","containsNonSimple","header","isXdr","getCorsAjaxTransport","ontimeout","onprogress","getXhrOrXdr","suppliedXhr","dequeue","nextId","sendRequest","xdrError","isResponseSuccessful","getParams","onDemandParams","additionalParams","optXhr","payload","url","createUrl","additionalQueryParams","getXdrLoadHandler","getXdrErrorHandler","onreadystatechange","getXhrReadyStateChangeHandler","registerForUploadProgress","open","setHeaders","send","stringify","addToPath","readyState","lengthComputable","onDemandHeaders","additionalHeaders","allHeaders","setRequestHeader","responseCode","prepareToSend","initTransport","path","cacheBuster","withPath","appendToPath","withParams","withQueryParams","_additionalQueryParams_","withHeaders","withPayload","thePayload","withCacheBuster","qqtimestamp","Date","getTime","canceled","UploadHandler","proxy","fileState","fileItem","onCancelRetVal","getThirdPartyFileId","_getFileState","_setThirdPartyFileId","thirdPartyFileId","_wasCanceled","controller","chunkingPossible","concurrentChunkingPossible","preventRetryResponse","chunked","chunkIdx","_getChunkData","attemptingResume","chunkProgress","_getChunkDataForCallback","finalize","finalizeChunks","normaizedResponse","normalizeResponse","_maybeDeletePersistedChunkData","cleanup","handleFailure","clearCachedChunk","responseToReport","inProgressIdx","inProgress","remaining","unshift","ignoreFailure","keys","_getXhrs","ckid","ckXhr","abort","_cancelled","moveInProgressToRemaining","connectionManager","free","hasMoreParts","nextPart","nextIdx","_getTotalChunks","reevaluateChunking","sendNext","inProgressChunks","available","uploadChunk","inProgressChunkIdx","_maybePersistChunkedState","clearXhr","_open","_openChunks","_waiting","openChunkEntriesCount","openChunksCount","openChunkIndexes","dontAllowNext","allowNext","waitingIndex","connectionsIndex","getProxyOrBlob","getWaitingOrConnected","waitingOrConnected","chunks","parseInt","isUsingConnection","pop","openChunksEntry","simple","uploadFile","maybeNewUuid","_clearXhrs","getProxy","initHandler","handlerType","traditional","handlerModuleSubtype","_removeExpiredChunkingRecords","isDeferredEligibleForUpload","maybeDefer","generatedBlob","updateBlob","maybeSendDeferredFiles","errorResponse","idsInGroup","uploadedThisId","idInGroup","now","originalResponse","_shouldChunkThisFile","blobToUpload","cancelRetVal","isProxied","isResumable","WindowReceiveMessage","callbackWrapperDetachers","receiveMessage","onMessageCallbackWrapper","stopReceivingMessages","detacher","FormUploadHandler","formHandlerInstanceId","onloadCallbacks","detachLoadEvents","postMessageCallbackTimers","isCors","corsMessageReceiver","expungeFile","iframe","getElementById","_getIframeName","getFileIdForIframeName","iframeName","initIframeForUpload","body","registerPostMessageCallback","_parseJsonResponse","onloadCallback","_detachLoadEvent","_attachLoadEvent","responseDescriptor","contentDocument","_createIframe","_initFormForUpload","targetName","innerHtmlOrMessage","XhrUploadHandler","chunkFiles","resumeEnabled","xhrId","ajaxRequester","_getAjaxRequester","blobOrProxy","_initTempState","_maybePrepareForResume","cachedChunks","tempState","xhrs","ajaxRequesters","responseParser","lastChunkIdx","_getXhr","resumableFilesData","_iterateResumeRecords","notResumable","optInProgress","optRemaining","reverse","paused","totalChunks","parts","newBlob","chunkId","_createXhr","optChunkIdx","_registerXhr","chunkIndex","fileSize","startBytes","endBytes","part","count","startByte","endByte","_getLocalStorageId","formatVersion","_getMimeType","_getPersistableData","ceil","_markNotResumable","localStorageId","removeItem","persistedData","lastUpdated","_registerProgressHandler","progressCalculator","totalSuccessfullyLoadedForFile","loadedForRequest","totalForRequest","estActualChunkLoaded","totalLoadedForFile","chunkLoaded","optAjaxRequester","xhrsId","expirationDays","expirationDate","setDate","getDate","requester","getMandatedParams","_method","detectSubsampling","img","iw","naturalWidth","ih","naturalHeight","ctx","width","getContext","drawImage","getImageData","detectVerticalSquash","sy","ey","py","alpha","ratio","renderImageToDataURL","doSquash","renderImageToCanvas","maybeCalculateDownsampledDimensions","maxPixels","origHeight","origWidth","newHeight","sqrt","newWidth","modifiedDimensions","save","resize","renderImageToCanvasWithCustomResizer","imageHeight","imageWidth","orientation","targetHeight","targetWidth","transformCoordinate","d","tmpCanvas","vertSquashRatio","dw","dh","dy","tmpCtx","sx","dx","clearRect","restore","qqImageRendered","resizeInfo","sourceCanvas","sourceCanvasContext","targetCanvas","translate","rotate","PI","MegaPixImage","srcImage","errorCallback","Image","URL","createObjectURL","webkitURL","src","listeners","imageLoadListeners","render","imgWidth","imgHeight","opt","optionsKey","optionsValue","oldTargetSrc","onrender","isImg","el","isCanvas","isImgCorsSupported","crossOrigin","isCanvasSupported","determineMimeOfFileName","nameWithPath","pathSegments","isCrossOrigin","targetAnchor","targetProtocol","targetHostname","targetPort","href","protocol","port","hostname","location","registerImgLoadListeners","registerCanvasDrawImageListener","registerThumbnailRenderedListener","registered","draw","drawPreview","Identify","megapixErrorHandler","isPreviewable","dummyExif","exif","Exif","mpImg","Orientation","failureMsg","drawOnCanvasOrImgFromUrl","canvasOrImg","tempImg","tempImgRender","rendered","drawOnImgFromUrlWithCssScaling","drawFromUrl","fileBlobOrUrl","_testing","TAG_IDS","TAG_INFO","274","parseLittleEndian","hex","pow","seekToApp1","offset","theOffset","thePromise","segmentLength","getApp1Offset","isLittleEndian","app1Start","getDirEntryCount","littleEndian","getIfd","dirEntries","getDirEntries","ifdHex","getTagValues","TAG_VAL_OFFSET","tagsToFind","vals","idHex","tagsToFindIdx","tagValHex","tagValLength","parser","onParseFailure","app1Offset","dirEntryCount","tagValues","isIdentifiable","magicBytes","questionableBytes","identifiable","magicBytesEntries","magicBytesArrayEntry","previewable","isPreviewableSync","PREVIEWABLE_MIME_TYPES","fileMime","isRecognizedImage","image/jpeg","image/gif","image/png","image/bmp","image/tiff","hasNonZeroLimits","limits","atLeastOne","limit","getWidthHeight","sizeDetermination","getFailingLimit","dimensions","failingLimit","limitName","limitValue","limitMatcher","dimensionPropName","actualValue","validationEffort","isJsonResponseValid","handleFileItems","fileItems","someItemsIgnored","err","refreshEffort","refreshCompleteCallback","requesterOptions","SessionAjaxRequester","queryServer","responseText","includeOriginal","failedToScaleText","_getSortedSizes","getFileRecords","originalFileUuid","originalFileName","originalBlobOrBlobData","records","originalBlob","sizeRecord","outputType","_determineOutputType","requestedType","refType","_getName","_generateScaledImage","failedText","api","scaledIds","originalId","record","blobSize","scaledId","qqparentuuid","qqparentsize","param","scalingEffort","scalingOptions","scaler","referenceType","scaledVersionProperties","startOfExt","versionType","scaledName","scaledExt","nameAppendage","sort","a","b","sourceFile","imageGenerator","scaledImageDataUri","signalSuccess","_insertExifHeader","scaledImageDataUriWithExif","originalImage","reader","insertionEffort","originalImageDataUri","ExifRestorer","readAsDataURL","_dataUriToBlob","_createBlob","KEY_STR","encode64","output","chr1","chr2","chr3","enc1","enc2","enc3","enc4","isNaN","origFileBase64","resizedFileBase64","expectedBase64Header","rawImage","decode64","segments","slice2Segments","exifManipulation","exifArray","getExifArray","newImageArray","insertExif","aBuffer","seg","x","imageData","buf","separatePoint","mae","ato","array","rawImageArray","head","endPoint","base64test","perFileProgress","totalLoaded","totalSize","lastLoadedSent","lastTotalSent","callbackProxy","noRetryableFiles","retryable","none","failedId","updateTotalProgress","onNew","newLoaded","newTotal","oldLoaded","oldTotal","detachPasteHandler","isImage","registerPasteHandler","clipboardData","getAsFile","unregisterPasteHandler","startUpload","formEl","_form2Obj","determineNewEndpoint","validateForm","nativeSubmit","checkValidity","maybeUploadOnSubmit","submit","determineFormEl","notIrrelevantType","irrelevantTypes","radioOrCheckbox","ignoreValue","checked","selectValue","select","selected","elements","getIframeContentJson","doc","innerHtml","contentWindow","nodeValue","createForm","responseFromMessage","multipart","addChunkingSpecificParams","allChunksDoneRequester","AllChunksDoneAjaxRequester","createReadyStateChangedHandler","onUploadOrChunkComplete","getChunksCompleteParams","isErrorUploadResponse","parseResponse","sendChunksCompleteRequest","complete","setParamsAndGetEntityToSend","setUploadHeaders","extraHeaders","toSend","promises","endpointHandler"],"mappings":"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","file":"fine-uploader.core.js","sourcesContent":[null,"/*globals window, navigator, document, FormData, File, HTMLInputElement, XMLHttpRequest, Blob, Storage, ActiveXObject */\n/* jshint -W079 */\nvar qq = function(element) {\n \"use strict\";\n\n return {\n hide: function() {\n element.style.display = \"none\";\n return this;\n },\n\n /** Returns the function which detaches attached event */\n attach: function(type, fn) {\n if (element.addEventListener) {\n element.addEventListener(type, fn, false);\n } else if (element.attachEvent) {\n element.attachEvent(\"on\" + type, fn);\n }\n return function() {\n qq(element).detach(type, fn);\n };\n },\n\n detach: function(type, fn) {\n if (element.removeEventListener) {\n element.removeEventListener(type, fn, false);\n } else if (element.attachEvent) {\n element.detachEvent(\"on\" + type, fn);\n }\n return this;\n },\n\n contains: function(descendant) {\n // The [W3C spec](http://www.w3.org/TR/domcore/#dom-node-contains)\n // says a `null` (or ostensibly `undefined`) parameter\n // passed into `Node.contains` should result in a false return value.\n // IE7 throws an exception if the parameter is `undefined` though.\n if (!descendant) {\n return false;\n }\n\n // compareposition returns false in this case\n if (element === descendant) {\n return true;\n }\n\n if (element.contains) {\n return element.contains(descendant);\n } else {\n /*jslint bitwise: true*/\n return !!(descendant.compareDocumentPosition(element) & 8);\n }\n },\n\n /**\n * Insert this element before elementB.\n */\n insertBefore: function(elementB) {\n elementB.parentNode.insertBefore(element, elementB);\n return this;\n },\n\n remove: function() {\n element.parentNode.removeChild(element);\n return this;\n },\n\n /**\n * Sets styles for an element.\n * Fixes opacity in IE6-8.\n */\n css: function(styles) {\n /*jshint eqnull: true*/\n if (element.style == null) {\n throw new qq.Error(\"Can't apply style to node as it is not on the HTMLElement prototype chain!\");\n }\n\n /*jshint -W116*/\n if (styles.opacity != null) {\n if (typeof element.style.opacity !== \"string\" && typeof (element.filters) !== \"undefined\") {\n styles.filter = \"alpha(opacity=\" + Math.round(100 * styles.opacity) + \")\";\n }\n }\n qq.extend(element.style, styles);\n\n return this;\n },\n\n hasClass: function(name, considerParent) {\n var re = new RegExp(\"(^| )\" + name + \"( |$)\");\n return re.test(element.className) || !!(considerParent && re.test(element.parentNode.className));\n },\n\n addClass: function(name) {\n if (!qq(element).hasClass(name)) {\n element.className += \" \" + name;\n }\n return this;\n },\n\n removeClass: function(name) {\n var re = new RegExp(\"(^| )\" + name + \"( |$)\");\n element.className = element.className.replace(re, \" \").replace(/^\\s+|\\s+$/g, \"\");\n return this;\n },\n\n getByClass: function(className, first) {\n var candidates,\n result = [];\n\n if (first && element.querySelector) {\n return element.querySelector(\".\" + className);\n }\n else if (element.querySelectorAll) {\n return element.querySelectorAll(\".\" + className);\n }\n\n candidates = element.getElementsByTagName(\"*\");\n\n qq.each(candidates, function(idx, val) {\n if (qq(val).hasClass(className)) {\n result.push(val);\n }\n });\n return first ? result[0] : result;\n },\n\n getFirstByClass: function(className) {\n return qq(element).getByClass(className, true);\n },\n\n children: function() {\n var children = [],\n child = element.firstChild;\n\n while (child) {\n if (child.nodeType === 1) {\n children.push(child);\n }\n child = child.nextSibling;\n }\n\n return children;\n },\n\n setText: function(text) {\n element.innerText = text;\n element.textContent = text;\n return this;\n },\n\n clearText: function() {\n return qq(element).setText(\"\");\n },\n\n // Returns true if the attribute exists on the element\n // AND the value of the attribute is NOT \"false\" (case-insensitive)\n hasAttribute: function(attrName) {\n var attrVal;\n\n if (element.hasAttribute) {\n\n if (!element.hasAttribute(attrName)) {\n return false;\n }\n\n /*jshint -W116*/\n return (/^false$/i).exec(element.getAttribute(attrName)) == null;\n }\n else {\n attrVal = element[attrName];\n\n if (attrVal === undefined) {\n return false;\n }\n\n /*jshint -W116*/\n return (/^false$/i).exec(attrVal) == null;\n }\n }\n };\n};\n\n(function() {\n \"use strict\";\n\n qq.canvasToBlob = function(canvas, mime, quality) {\n return qq.dataUriToBlob(canvas.toDataURL(mime, quality));\n };\n\n qq.dataUriToBlob = function(dataUri) {\n var arrayBuffer, byteString,\n createBlob = function(data, mime) {\n var BlobBuilder = window.BlobBuilder ||\n window.WebKitBlobBuilder ||\n window.MozBlobBuilder ||\n window.MSBlobBuilder,\n blobBuilder = BlobBuilder && new BlobBuilder();\n\n if (blobBuilder) {\n blobBuilder.append(data);\n return blobBuilder.getBlob(mime);\n }\n else {\n return new Blob([data], {type: mime});\n }\n },\n intArray, mimeString;\n\n // convert base64 to raw binary data held in a string\n if (dataUri.split(\",\")[0].indexOf(\"base64\") >= 0) {\n byteString = atob(dataUri.split(\",\")[1]);\n }\n else {\n byteString = decodeURI(dataUri.split(\",\")[1]);\n }\n\n // extract the MIME\n mimeString = dataUri.split(\",\")[0]\n .split(\":\")[1]\n .split(\";\")[0];\n\n // write the bytes of the binary string to an ArrayBuffer\n arrayBuffer = new ArrayBuffer(byteString.length);\n intArray = new Uint8Array(arrayBuffer);\n qq.each(byteString, function(idx, character) {\n intArray[idx] = character.charCodeAt(0);\n });\n\n return createBlob(arrayBuffer, mimeString);\n };\n\n qq.log = function(message, level) {\n if (window.console) {\n if (!level || level === \"info\") {\n window.console.log(message);\n }\n else\n {\n if (window.console[level]) {\n window.console[level](message);\n }\n else {\n window.console.log(\"<\" + level + \"> \" + message);\n }\n }\n }\n };\n\n qq.isObject = function(variable) {\n return variable && !variable.nodeType && Object.prototype.toString.call(variable) === \"[object Object]\";\n };\n\n qq.isFunction = function(variable) {\n return typeof (variable) === \"function\";\n };\n\n /**\n * Check the type of a value. Is it an \"array\"?\n *\n * @param value value to test.\n * @returns true if the value is an array or associated with an `ArrayBuffer`\n */\n qq.isArray = function(value) {\n return Object.prototype.toString.call(value) === \"[object Array]\" ||\n (value && window.ArrayBuffer && value.buffer && value.buffer.constructor === ArrayBuffer);\n };\n\n // Looks for an object on a `DataTransfer` object that is associated with drop events when utilizing the Filesystem API.\n qq.isItemList = function(maybeItemList) {\n return Object.prototype.toString.call(maybeItemList) === \"[object DataTransferItemList]\";\n };\n\n // Looks for an object on a `NodeList` or an `HTMLCollection`|`HTMLFormElement`|`HTMLSelectElement`\n // object that is associated with collections of Nodes.\n qq.isNodeList = function(maybeNodeList) {\n return Object.prototype.toString.call(maybeNodeList) === \"[object NodeList]\" ||\n // If `HTMLCollection` is the actual type of the object, we must determine this\n // by checking for expected properties/methods on the object\n (maybeNodeList.item && maybeNodeList.namedItem);\n };\n\n qq.isString = function(maybeString) {\n return Object.prototype.toString.call(maybeString) === \"[object String]\";\n };\n\n qq.trimStr = function(string) {\n if (String.prototype.trim) {\n return string.trim();\n }\n\n return string.replace(/^\\s+|\\s+$/g, \"\");\n };\n\n /**\n * @param str String to format.\n * @returns {string} A string, swapping argument values with the associated occurrence of {} in the passed string.\n */\n qq.format = function(str) {\n\n var args = Array.prototype.slice.call(arguments, 1),\n newStr = str,\n nextIdxToReplace = newStr.indexOf(\"{}\");\n\n qq.each(args, function(idx, val) {\n var strBefore = newStr.substring(0, nextIdxToReplace),\n strAfter = newStr.substring(nextIdxToReplace + 2);\n\n newStr = strBefore + val + strAfter;\n nextIdxToReplace = newStr.indexOf(\"{}\", nextIdxToReplace + val.length);\n\n // End the loop if we have run out of tokens (when the arguments exceed the # of tokens)\n if (nextIdxToReplace < 0) {\n return false;\n }\n });\n\n return newStr;\n };\n\n qq.isFile = function(maybeFile) {\n return window.File && Object.prototype.toString.call(maybeFile) === \"[object File]\";\n };\n\n qq.isFileList = function(maybeFileList) {\n return window.FileList && Object.prototype.toString.call(maybeFileList) === \"[object FileList]\";\n };\n\n qq.isFileOrInput = function(maybeFileOrInput) {\n return qq.isFile(maybeFileOrInput) || qq.isInput(maybeFileOrInput);\n };\n\n qq.isInput = function(maybeInput, notFile) {\n var evaluateType = function(type) {\n var normalizedType = type.toLowerCase();\n\n if (notFile) {\n return normalizedType !== \"file\";\n }\n\n return normalizedType === \"file\";\n };\n\n if (window.HTMLInputElement) {\n if (Object.prototype.toString.call(maybeInput) === \"[object HTMLInputElement]\") {\n if (maybeInput.type && evaluateType(maybeInput.type)) {\n return true;\n }\n }\n }\n if (maybeInput.tagName) {\n if (maybeInput.tagName.toLowerCase() === \"input\") {\n if (maybeInput.type && evaluateType(maybeInput.type)) {\n return true;\n }\n }\n }\n\n return false;\n };\n\n qq.isBlob = function(maybeBlob) {\n if (window.Blob && Object.prototype.toString.call(maybeBlob) === \"[object Blob]\") {\n return true;\n }\n };\n\n qq.isXhrUploadSupported = function() {\n var input = document.createElement(\"input\");\n input.type = \"file\";\n\n return (\n input.multiple !== undefined &&\n typeof File !== \"undefined\" &&\n typeof FormData !== \"undefined\" &&\n typeof (qq.createXhrInstance()).upload !== \"undefined\");\n };\n\n // Fall back to ActiveX is native XHR is disabled (possible in any version of IE).\n qq.createXhrInstance = function() {\n if (window.XMLHttpRequest) {\n return new XMLHttpRequest();\n }\n\n try {\n return new ActiveXObject(\"MSXML2.XMLHTTP.3.0\");\n }\n catch (error) {\n qq.log(\"Neither XHR or ActiveX are supported!\", \"error\");\n return null;\n }\n };\n\n qq.isFolderDropSupported = function(dataTransfer) {\n return dataTransfer.items &&\n dataTransfer.items.length > 0 &&\n dataTransfer.items[0].webkitGetAsEntry;\n };\n\n qq.isFileChunkingSupported = function() {\n return !qq.androidStock() && //Android's stock browser cannot upload Blobs correctly\n qq.isXhrUploadSupported() &&\n (File.prototype.slice !== undefined || File.prototype.webkitSlice !== undefined || File.prototype.mozSlice !== undefined);\n };\n\n qq.sliceBlob = function(fileOrBlob, start, end) {\n var slicer = fileOrBlob.slice || fileOrBlob.mozSlice || fileOrBlob.webkitSlice;\n\n return slicer.call(fileOrBlob, start, end);\n };\n\n qq.arrayBufferToHex = function(buffer) {\n var bytesAsHex = \"\",\n bytes = new Uint8Array(buffer);\n\n qq.each(bytes, function(idx, byt) {\n var byteAsHexStr = byt.toString(16);\n\n if (byteAsHexStr.length < 2) {\n byteAsHexStr = \"0\" + byteAsHexStr;\n }\n\n bytesAsHex += byteAsHexStr;\n });\n\n return bytesAsHex;\n };\n\n qq.readBlobToHex = function(blob, startOffset, length) {\n var initialBlob = qq.sliceBlob(blob, startOffset, startOffset + length),\n fileReader = new FileReader(),\n promise = new qq.Promise();\n\n fileReader.onload = function() {\n promise.success(qq.arrayBufferToHex(fileReader.result));\n };\n\n fileReader.onerror = promise.failure;\n\n fileReader.readAsArrayBuffer(initialBlob);\n\n return promise;\n };\n\n qq.extend = function(first, second, extendNested) {\n qq.each(second, function(prop, val) {\n if (extendNested && qq.isObject(val)) {\n if (first[prop] === undefined) {\n first[prop] = {};\n }\n qq.extend(first[prop], val, true);\n }\n else {\n first[prop] = val;\n }\n });\n\n return first;\n };\n\n /**\n * Allow properties in one object to override properties in another,\n * keeping track of the original values from the target object.\n *\n * Note that the pre-overriden properties to be overriden by the source will be passed into the `sourceFn` when it is invoked.\n *\n * @param target Update properties in this object from some source\n * @param sourceFn A function that, when invoked, will return properties that will replace properties with the same name in the target.\n * @returns {object} The target object\n */\n qq.override = function(target, sourceFn) {\n var super_ = {},\n source = sourceFn(super_);\n\n qq.each(source, function(srcPropName, srcPropVal) {\n if (target[srcPropName] !== undefined) {\n super_[srcPropName] = target[srcPropName];\n }\n\n target[srcPropName] = srcPropVal;\n });\n\n return target;\n };\n\n /**\n * Searches for a given element (elt) in the array, returns -1 if it is not present.\n */\n qq.indexOf = function(arr, elt, from) {\n if (arr.indexOf) {\n return arr.indexOf(elt, from);\n }\n\n from = from || 0;\n var len = arr.length;\n\n if (from < 0) {\n from += len;\n }\n\n for (; from < len; from += 1) {\n if (arr.hasOwnProperty(from) && arr[from] === elt) {\n return from;\n }\n }\n return -1;\n };\n\n //this is a version 4 UUID\n qq.getUniqueId = function() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n /*jslint eqeq: true, bitwise: true*/\n var r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n\n //\n // Browsers and platforms detection\n qq.ie = function() {\n return navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.userAgent.indexOf(\"Trident\") !== -1;\n };\n\n qq.ie7 = function() {\n return navigator.userAgent.indexOf(\"MSIE 7\") !== -1;\n };\n\n qq.ie8 = function() {\n return navigator.userAgent.indexOf(\"MSIE 8\") !== -1;\n };\n\n qq.ie10 = function() {\n return navigator.userAgent.indexOf(\"MSIE 10\") !== -1;\n };\n\n qq.ie11 = function() {\n return qq.ie() && navigator.userAgent.indexOf(\"rv:11\") !== -1;\n };\n\n qq.edge = function() {\n return navigator.userAgent.indexOf(\"Edge\") >= 0;\n };\n\n qq.safari = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Apple\") !== -1;\n };\n\n qq.chrome = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Google\") !== -1;\n };\n\n qq.opera = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Opera\") !== -1;\n };\n\n qq.firefox = function() {\n return (!qq.edge() && !qq.ie11() && navigator.userAgent.indexOf(\"Mozilla\") !== -1 && navigator.vendor !== undefined && navigator.vendor === \"\");\n };\n\n qq.windows = function() {\n return navigator.platform === \"Win32\";\n };\n\n qq.android = function() {\n return navigator.userAgent.toLowerCase().indexOf(\"android\") !== -1;\n };\n\n // We need to identify the Android stock browser via the UA string to work around various bugs in this browser,\n // such as the one that prevents a `Blob` from being uploaded.\n qq.androidStock = function() {\n return qq.android() && navigator.userAgent.toLowerCase().indexOf(\"chrome\") < 0;\n };\n\n qq.ios6 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 6_\") !== -1;\n };\n\n qq.ios7 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 7_\") !== -1;\n };\n\n qq.ios8 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 8_\") !== -1;\n };\n\n // iOS 8.0.0\n qq.ios800 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 8_0 \") !== -1;\n };\n\n qq.ios = function() {\n /*jshint -W014 */\n return navigator.userAgent.indexOf(\"iPad\") !== -1\n || navigator.userAgent.indexOf(\"iPod\") !== -1\n || navigator.userAgent.indexOf(\"iPhone\") !== -1;\n };\n\n qq.iosChrome = function() {\n return qq.ios() && navigator.userAgent.indexOf(\"CriOS\") !== -1;\n };\n\n qq.iosSafari = function() {\n return qq.ios() && !qq.iosChrome() && navigator.userAgent.indexOf(\"Safari\") !== -1;\n };\n\n qq.iosSafariWebView = function() {\n return qq.ios() && !qq.iosChrome() && !qq.iosSafari();\n };\n\n //\n // Events\n\n qq.preventDefault = function(e) {\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n };\n\n /**\n * Creates and returns element from html string\n * Uses innerHTML to create an element\n */\n qq.toElement = (function() {\n var div = document.createElement(\"div\");\n return function(html) {\n div.innerHTML = html;\n var element = div.firstChild;\n div.removeChild(element);\n return element;\n };\n }());\n\n //key and value are passed to callback for each entry in the iterable item\n qq.each = function(iterableItem, callback) {\n var keyOrIndex, retVal;\n\n if (iterableItem) {\n // Iterate through [`Storage`](http://www.w3.org/TR/webstorage/#the-storage-interface) items\n if (window.Storage && iterableItem.constructor === window.Storage) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(iterableItem.key(keyOrIndex), iterableItem.getItem(iterableItem.key(keyOrIndex)));\n if (retVal === false) {\n break;\n }\n }\n }\n // `DataTransferItemList` & `NodeList` objects are array-like and should be treated as arrays\n // when iterating over items inside the object.\n else if (qq.isArray(iterableItem) || qq.isItemList(iterableItem) || qq.isNodeList(iterableItem)) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n if (retVal === false) {\n break;\n }\n }\n }\n else if (qq.isString(iterableItem)) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(keyOrIndex, iterableItem.charAt(keyOrIndex));\n if (retVal === false) {\n break;\n }\n }\n }\n else {\n for (keyOrIndex in iterableItem) {\n if (Object.prototype.hasOwnProperty.call(iterableItem, keyOrIndex)) {\n retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n if (retVal === false) {\n break;\n }\n }\n }\n }\n }\n };\n\n //include any args that should be passed to the new function after the context arg\n qq.bind = function(oldFunc, context) {\n if (qq.isFunction(oldFunc)) {\n var args = Array.prototype.slice.call(arguments, 2);\n\n return function() {\n var newArgs = qq.extend([], args);\n if (arguments.length) {\n newArgs = newArgs.concat(Array.prototype.slice.call(arguments));\n }\n return oldFunc.apply(context, newArgs);\n };\n }\n\n throw new Error(\"first parameter must be a function!\");\n };\n\n /**\n * obj2url() takes a json-object as argument and generates\n * a querystring. pretty much like jQuery.param()\n *\n * how to use:\n *\n * `qq.obj2url({a:'b',c:'d'},'http://any.url/upload?otherParam=value');`\n *\n * will result in:\n *\n * `http://any.url/upload?otherParam=value&a=b&c=d`\n *\n * @param Object JSON-Object\n * @param String current querystring-part\n * @return String encoded querystring\n */\n qq.obj2url = function(obj, temp, prefixDone) {\n /*jshint laxbreak: true*/\n var uristrings = [],\n prefix = \"&\",\n add = function(nextObj, i) {\n var nextTemp = temp\n ? (/\\[\\]$/.test(temp)) // prevent double-encoding\n ? temp\n : temp + \"[\" + i + \"]\"\n : i;\n if ((nextTemp !== \"undefined\") && (i !== \"undefined\")) {\n uristrings.push(\n (typeof nextObj === \"object\")\n ? qq.obj2url(nextObj, nextTemp, true)\n : (Object.prototype.toString.call(nextObj) === \"[object Function]\")\n ? encodeURIComponent(nextTemp) + \"=\" + encodeURIComponent(nextObj())\n : encodeURIComponent(nextTemp) + \"=\" + encodeURIComponent(nextObj)\n );\n }\n };\n\n if (!prefixDone && temp) {\n prefix = (/\\?/.test(temp)) ? (/\\?$/.test(temp)) ? \"\" : \"&\" : \"?\";\n uristrings.push(temp);\n uristrings.push(qq.obj2url(obj));\n } else if ((Object.prototype.toString.call(obj) === \"[object Array]\") && (typeof obj !== \"undefined\")) {\n qq.each(obj, function(idx, val) {\n add(val, idx);\n });\n } else if ((typeof obj !== \"undefined\") && (obj !== null) && (typeof obj === \"object\")) {\n qq.each(obj, function(prop, val) {\n add(val, prop);\n });\n } else {\n uristrings.push(encodeURIComponent(temp) + \"=\" + encodeURIComponent(obj));\n }\n\n if (temp) {\n return uristrings.join(prefix);\n } else {\n return uristrings.join(prefix)\n .replace(/^&/, \"\")\n .replace(/%20/g, \"+\");\n }\n };\n\n qq.obj2FormData = function(obj, formData, arrayKeyName) {\n if (!formData) {\n formData = new FormData();\n }\n\n qq.each(obj, function(key, val) {\n key = arrayKeyName ? arrayKeyName + \"[\" + key + \"]\" : key;\n\n if (qq.isObject(val)) {\n qq.obj2FormData(val, formData, key);\n }\n else if (qq.isFunction(val)) {\n formData.append(key, val());\n }\n else {\n formData.append(key, val);\n }\n });\n\n return formData;\n };\n\n qq.obj2Inputs = function(obj, form) {\n var input;\n\n if (!form) {\n form = document.createElement(\"form\");\n }\n\n qq.obj2FormData(obj, {\n append: function(key, val) {\n input = document.createElement(\"input\");\n input.setAttribute(\"name\", key);\n input.setAttribute(\"value\", val);\n form.appendChild(input);\n }\n });\n\n return form;\n };\n\n /**\n * Not recommended for use outside of Fine Uploader since this falls back to an unchecked eval if JSON.parse is not\n * implemented. For a more secure JSON.parse polyfill, use Douglas Crockford's json2.js.\n */\n qq.parseJson = function(json) {\n /*jshint evil: true*/\n if (window.JSON && qq.isFunction(JSON.parse)) {\n return JSON.parse(json);\n } else {\n return eval(\"(\" + json + \")\");\n }\n };\n\n /**\n * Retrieve the extension of a file, if it exists.\n *\n * @param filename\n * @returns {string || undefined}\n */\n qq.getExtension = function(filename) {\n var extIdx = filename.lastIndexOf(\".\") + 1;\n\n if (extIdx > 0) {\n return filename.substr(extIdx, filename.length - extIdx);\n }\n };\n\n qq.getFilename = function(blobOrFileInput) {\n /*jslint regexp: true*/\n\n if (qq.isInput(blobOrFileInput)) {\n // get input value and remove path to normalize\n return blobOrFileInput.value.replace(/.*(\\/|\\\\)/, \"\");\n }\n else if (qq.isFile(blobOrFileInput)) {\n if (blobOrFileInput.fileName !== null && blobOrFileInput.fileName !== undefined) {\n return blobOrFileInput.fileName;\n }\n }\n\n return blobOrFileInput.name;\n };\n\n /**\n * A generic module which supports object disposing in dispose() method.\n * */\n qq.DisposeSupport = function() {\n var disposers = [];\n\n return {\n /** Run all registered disposers */\n dispose: function() {\n var disposer;\n do {\n disposer = disposers.shift();\n if (disposer) {\n disposer();\n }\n }\n while (disposer);\n },\n\n /** Attach event handler and register de-attacher as a disposer */\n attach: function() {\n var args = arguments;\n /*jslint undef:true*/\n this.addDisposer(qq(args[0]).attach.apply(this, Array.prototype.slice.call(arguments, 1)));\n },\n\n /** Add disposer to the collection */\n addDisposer: function(disposeFunction) {\n disposers.push(disposeFunction);\n }\n };\n };\n}());\n","/* globals define, module, global, qq */\n(function() {\n \"use strict\";\n if (typeof define === \"function\" && define.amd) {\n define(function() {\n return qq;\n });\n }\n else if (typeof module !== \"undefined\" && module.exports) {\n module.exports = qq;\n }\n else {\n global.qq = qq;\n }\n}());\n","/* globals qq */\n/**\n * Fine Uploader top-level Error container. Inherits from `Error`.\n */\n(function() {\n \"use strict\";\n\n qq.Error = function(message) {\n this.message = \"[Fine Uploader \" + qq.version + \"] \" + message;\n };\n\n qq.Error.prototype = new Error();\n}());\n","/*global qq */\nqq.version = \"5.12.0\";\n","/* globals qq */\nqq.supportedFeatures = (function() {\n \"use strict\";\n\n var supportsUploading,\n supportsUploadingBlobs,\n supportsFileDrop,\n supportsAjaxFileUploading,\n supportsFolderDrop,\n supportsChunking,\n supportsResume,\n supportsUploadViaPaste,\n supportsUploadCors,\n supportsDeleteFileXdr,\n supportsDeleteFileCorsXhr,\n supportsDeleteFileCors,\n supportsFolderSelection,\n supportsImagePreviews,\n supportsUploadProgress;\n\n function testSupportsFileInputElement() {\n var supported = true,\n tempInput;\n\n try {\n tempInput = document.createElement(\"input\");\n tempInput.type = \"file\";\n qq(tempInput).hide();\n\n if (tempInput.disabled) {\n supported = false;\n }\n }\n catch (ex) {\n supported = false;\n }\n\n return supported;\n }\n\n //only way to test for Filesystem API support since webkit does not expose the DataTransfer interface\n function isChrome21OrHigher() {\n return (qq.chrome() || qq.opera()) &&\n navigator.userAgent.match(/Chrome\\/[2][1-9]|Chrome\\/[3-9][0-9]/) !== undefined;\n }\n\n //only way to test for complete Clipboard API support at this time\n function isChrome14OrHigher() {\n return (qq.chrome() || qq.opera()) &&\n navigator.userAgent.match(/Chrome\\/[1][4-9]|Chrome\\/[2-9][0-9]/) !== undefined;\n }\n\n //Ensure we can send cross-origin `XMLHttpRequest`s\n function isCrossOriginXhrSupported() {\n if (window.XMLHttpRequest) {\n var xhr = qq.createXhrInstance();\n\n //Commonly accepted test for XHR CORS support.\n return xhr.withCredentials !== undefined;\n }\n\n return false;\n }\n\n //Test for (terrible) cross-origin ajax transport fallback for IE9 and IE8\n function isXdrSupported() {\n return window.XDomainRequest !== undefined;\n }\n\n // CORS Ajax requests are supported if it is either possible to send credentialed `XMLHttpRequest`s,\n // or if `XDomainRequest` is an available alternative.\n function isCrossOriginAjaxSupported() {\n if (isCrossOriginXhrSupported()) {\n return true;\n }\n\n return isXdrSupported();\n }\n\n function isFolderSelectionSupported() {\n // We know that folder selection is only supported in Chrome via this proprietary attribute for now\n return document.createElement(\"input\").webkitdirectory !== undefined;\n }\n\n function isLocalStorageSupported() {\n try {\n return !!window.localStorage &&\n // unpatched versions of IE10/11 have buggy impls of localStorage where setItem is a string\n qq.isFunction(window.localStorage.setItem);\n }\n catch (error) {\n // probably caught a security exception, so no localStorage for you\n return false;\n }\n }\n\n function isDragAndDropSupported() {\n var span = document.createElement(\"span\");\n\n return (\"draggable\" in span || (\"ondragstart\" in span && \"ondrop\" in span)) &&\n !qq.android() && !qq.ios();\n }\n\n supportsUploading = testSupportsFileInputElement();\n\n supportsAjaxFileUploading = supportsUploading && qq.isXhrUploadSupported();\n\n supportsUploadingBlobs = supportsAjaxFileUploading && !qq.androidStock();\n\n supportsFileDrop = supportsAjaxFileUploading && isDragAndDropSupported();\n\n supportsFolderDrop = supportsFileDrop && isChrome21OrHigher();\n\n supportsChunking = supportsAjaxFileUploading && qq.isFileChunkingSupported();\n\n supportsResume = supportsAjaxFileUploading && supportsChunking && isLocalStorageSupported();\n\n supportsUploadViaPaste = supportsAjaxFileUploading && isChrome14OrHigher();\n\n supportsUploadCors = supportsUploading && (window.postMessage !== undefined || supportsAjaxFileUploading);\n\n supportsDeleteFileCorsXhr = isCrossOriginXhrSupported();\n\n supportsDeleteFileXdr = isXdrSupported();\n\n supportsDeleteFileCors = isCrossOriginAjaxSupported();\n\n supportsFolderSelection = isFolderSelectionSupported();\n\n supportsImagePreviews = supportsAjaxFileUploading && window.FileReader !== undefined;\n\n supportsUploadProgress = (function() {\n if (supportsAjaxFileUploading) {\n return !qq.androidStock() && !qq.iosChrome();\n }\n return false;\n }());\n\n return {\n ajaxUploading: supportsAjaxFileUploading,\n blobUploading: supportsUploadingBlobs,\n canDetermineSize: supportsAjaxFileUploading,\n chunking: supportsChunking,\n deleteFileCors: supportsDeleteFileCors,\n deleteFileCorsXdr: supportsDeleteFileXdr, //NOTE: will also return true in IE10, where XDR is also supported\n deleteFileCorsXhr: supportsDeleteFileCorsXhr,\n dialogElement: !!window.HTMLDialogElement,\n fileDrop: supportsFileDrop,\n folderDrop: supportsFolderDrop,\n folderSelection: supportsFolderSelection,\n imagePreviews: supportsImagePreviews,\n imageValidation: supportsImagePreviews,\n itemSizeValidation: supportsAjaxFileUploading,\n pause: supportsChunking,\n progressBar: supportsUploadProgress,\n resume: supportsResume,\n scaling: supportsImagePreviews && supportsUploadingBlobs,\n tiffPreviews: qq.safari(), // Not the best solution, but simple and probably accurate enough (for now)\n unlimitedScaledImageSize: !qq.ios(), // false simply indicates that there is some known limit\n uploading: supportsUploading,\n uploadCors: supportsUploadCors,\n uploadCustomHeaders: supportsAjaxFileUploading,\n uploadNonMultipart: supportsAjaxFileUploading,\n uploadViaPaste: supportsUploadViaPaste\n };\n\n}());\n","/*globals qq*/\n\n// Is the passed object a promise instance?\nqq.isGenericPromise = function(maybePromise) {\n \"use strict\";\n return !!(maybePromise && maybePromise.then && qq.isFunction(maybePromise.then));\n};\n\nqq.Promise = function() {\n \"use strict\";\n\n var successArgs, failureArgs,\n successCallbacks = [],\n failureCallbacks = [],\n doneCallbacks = [],\n state = 0;\n\n qq.extend(this, {\n then: function(onSuccess, onFailure) {\n if (state === 0) {\n if (onSuccess) {\n successCallbacks.push(onSuccess);\n }\n if (onFailure) {\n failureCallbacks.push(onFailure);\n }\n }\n else if (state === -1) {\n onFailure && onFailure.apply(null, failureArgs);\n }\n else if (onSuccess) {\n onSuccess.apply(null, successArgs);\n }\n\n return this;\n },\n\n done: function(callback) {\n if (state === 0) {\n doneCallbacks.push(callback);\n }\n else {\n callback.apply(null, failureArgs === undefined ? successArgs : failureArgs);\n }\n\n return this;\n },\n\n success: function() {\n state = 1;\n successArgs = arguments;\n\n if (successCallbacks.length) {\n qq.each(successCallbacks, function(idx, callback) {\n callback.apply(null, successArgs);\n });\n }\n\n if (doneCallbacks.length) {\n qq.each(doneCallbacks, function(idx, callback) {\n callback.apply(null, successArgs);\n });\n }\n\n return this;\n },\n\n failure: function() {\n state = -1;\n failureArgs = arguments;\n\n if (failureCallbacks.length) {\n qq.each(failureCallbacks, function(idx, callback) {\n callback.apply(null, failureArgs);\n });\n }\n\n if (doneCallbacks.length) {\n qq.each(doneCallbacks, function(idx, callback) {\n callback.apply(null, failureArgs);\n });\n }\n\n return this;\n }\n });\n};\n","/* globals qq */\n/**\n * Placeholder for a Blob that will be generated on-demand.\n *\n * @param referenceBlob Parent of the generated blob\n * @param onCreate Function to invoke when the blob must be created. Must be promissory.\n * @constructor\n */\nqq.BlobProxy = function(referenceBlob, onCreate) {\n \"use strict\";\n\n qq.extend(this, {\n referenceBlob: referenceBlob,\n\n create: function() {\n return onCreate(referenceBlob);\n }\n });\n};\n","/*globals qq*/\n\n/**\n * This module represents an upload or \"Select File(s)\" button. It's job is to embed an opaque ``\n * element as a child of a provided \"container\" element. This \"container\" element (`options.element`) is used to provide\n * a custom style for the `` element. The ability to change the style of the container element is also\n * provided here by adding CSS classes to the container on hover/focus.\n *\n * TODO Eliminate the mouseover and mouseout event handlers since the :hover CSS pseudo-class should now be\n * available on all supported browsers.\n *\n * @param o Options to override the default values\n */\nqq.UploadButton = function(o) {\n \"use strict\";\n\n var self = this,\n\n disposeSupport = new qq.DisposeSupport(),\n\n options = {\n // Corresponds to the `accept` attribute on the associated ``\n acceptFiles: null,\n\n // \"Container\" element\n element: null,\n\n focusClass: \"qq-upload-button-focus\",\n\n // A true value allows folders to be selected, if supported by the UA\n folders: false,\n\n // **This option will be removed** in the future as the :hover CSS pseudo-class is available on all supported browsers\n hoverClass: \"qq-upload-button-hover\",\n\n ios8BrowserCrashWorkaround: false,\n\n // If true adds `multiple` attribute to ``\n multiple: false,\n\n // `name` attribute of ``\n name: \"qqfile\",\n\n // Called when the browser invokes the onchange handler on the ``\n onChange: function(input) {},\n\n title: null\n },\n input, buttonId;\n\n // Overrides any of the default option values with any option values passed in during construction.\n qq.extend(options, o);\n\n buttonId = qq.getUniqueId();\n\n // Embed an opaque `` element as a child of `options.element`.\n function createInput() {\n var input = document.createElement(\"input\");\n\n input.setAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME, buttonId);\n input.setAttribute(\"title\", options.title);\n\n self.setMultiple(options.multiple, input);\n\n if (options.folders && qq.supportedFeatures.folderSelection) {\n // selecting directories is only possible in Chrome now, via a vendor-specific prefixed attribute\n input.setAttribute(\"webkitdirectory\", \"\");\n }\n\n if (options.acceptFiles) {\n input.setAttribute(\"accept\", options.acceptFiles);\n }\n\n input.setAttribute(\"type\", \"file\");\n input.setAttribute(\"name\", options.name);\n\n qq(input).css({\n position: \"absolute\",\n // in Opera only 'browse' button\n // is clickable and it is located at\n // the right side of the input\n right: 0,\n top: 0,\n fontFamily: \"Arial\",\n // It's especially important to make this an arbitrarily large value\n // to ensure the rendered input button in IE takes up the entire\n // space of the container element. Otherwise, the left side of the\n // button will require a double-click to invoke the file chooser.\n // In other browsers, this might cause other issues, so a large font-size\n // is only used in IE. There is a bug in IE8 where the opacity style is ignored\n // in some cases when the font-size is large. So, this workaround is not applied\n // to IE8.\n fontSize: qq.ie() && !qq.ie8() ? \"3500px\" : \"118px\",\n margin: 0,\n padding: 0,\n cursor: \"pointer\",\n opacity: 0\n });\n\n // Setting the file input's height to 100% in IE7 causes\n // most of the visible button to be unclickable.\n !qq.ie7() && qq(input).css({height: \"100%\"});\n\n options.element.appendChild(input);\n\n disposeSupport.attach(input, \"change\", function() {\n options.onChange(input);\n });\n\n // **These event handlers will be removed** in the future as the :hover CSS pseudo-class is available on all supported browsers\n disposeSupport.attach(input, \"mouseover\", function() {\n qq(options.element).addClass(options.hoverClass);\n });\n disposeSupport.attach(input, \"mouseout\", function() {\n qq(options.element).removeClass(options.hoverClass);\n });\n\n disposeSupport.attach(input, \"focus\", function() {\n qq(options.element).addClass(options.focusClass);\n });\n disposeSupport.attach(input, \"blur\", function() {\n qq(options.element).removeClass(options.focusClass);\n });\n\n return input;\n }\n\n // Make button suitable container for input\n qq(options.element).css({\n position: \"relative\",\n overflow: \"hidden\",\n // Make sure browse button is in the right side in Internet Explorer\n direction: \"ltr\"\n });\n\n // Exposed API\n qq.extend(this, {\n getInput: function() {\n return input;\n },\n\n getButtonId: function() {\n return buttonId;\n },\n\n setMultiple: function(isMultiple, optInput) {\n var input = optInput || this.getInput();\n\n // Temporary workaround for bug in in iOS8 UIWebView that causes the browser to crash\n // before the file chooser appears if the file input doesn't contain a multiple attribute.\n // See #1283.\n if (options.ios8BrowserCrashWorkaround && qq.ios8() && (qq.iosChrome() || qq.iosSafariWebView())) {\n input.setAttribute(\"multiple\", \"\");\n }\n\n else {\n if (isMultiple) {\n input.setAttribute(\"multiple\", \"\");\n }\n else {\n input.removeAttribute(\"multiple\");\n }\n }\n },\n\n setAcceptFiles: function(acceptFiles) {\n if (acceptFiles !== options.acceptFiles) {\n input.setAttribute(\"accept\", acceptFiles);\n }\n },\n\n reset: function() {\n if (input.parentNode) {\n qq(input).remove();\n }\n\n qq(options.element).removeClass(options.focusClass);\n input = null;\n input = createInput();\n }\n });\n\n input = createInput();\n};\n\nqq.UploadButton.BUTTON_ID_ATTR_NAME = \"qq-button-id\";\n","/*globals qq */\nqq.UploadData = function(uploaderProxy) {\n \"use strict\";\n\n var data = [],\n byUuid = {},\n byStatus = {},\n byProxyGroupId = {},\n byBatchId = {};\n\n function getDataByIds(idOrIds) {\n if (qq.isArray(idOrIds)) {\n var entries = [];\n\n qq.each(idOrIds, function(idx, id) {\n entries.push(data[id]);\n });\n\n return entries;\n }\n\n return data[idOrIds];\n }\n\n function getDataByUuids(uuids) {\n if (qq.isArray(uuids)) {\n var entries = [];\n\n qq.each(uuids, function(idx, uuid) {\n entries.push(data[byUuid[uuid]]);\n });\n\n return entries;\n }\n\n return data[byUuid[uuids]];\n }\n\n function getDataByStatus(status) {\n var statusResults = [],\n statuses = [].concat(status);\n\n qq.each(statuses, function(index, statusEnum) {\n var statusResultIndexes = byStatus[statusEnum];\n\n if (statusResultIndexes !== undefined) {\n qq.each(statusResultIndexes, function(i, dataIndex) {\n statusResults.push(data[dataIndex]);\n });\n }\n });\n\n return statusResults;\n }\n\n qq.extend(this, {\n /**\n * Adds a new file to the data cache for tracking purposes.\n *\n * @param spec Data that describes this file. Possible properties are:\n *\n * - uuid: Initial UUID for this file.\n * - name: Initial name of this file.\n * - size: Size of this file, omit if this cannot be determined\n * - status: Initial `qq.status` for this file. Omit for `qq.status.SUBMITTING`.\n * - batchId: ID of the batch this file belongs to\n * - proxyGroupId: ID of the proxy group associated with this file\n *\n * @returns {number} Internal ID for this file.\n */\n addFile: function(spec) {\n var status = spec.status || qq.status.SUBMITTING,\n id = data.push({\n name: spec.name,\n originalName: spec.name,\n uuid: spec.uuid,\n size: spec.size == null ? -1 : spec.size,\n status: status\n }) - 1;\n\n if (spec.batchId) {\n data[id].batchId = spec.batchId;\n\n if (byBatchId[spec.batchId] === undefined) {\n byBatchId[spec.batchId] = [];\n }\n byBatchId[spec.batchId].push(id);\n }\n\n if (spec.proxyGroupId) {\n data[id].proxyGroupId = spec.proxyGroupId;\n\n if (byProxyGroupId[spec.proxyGroupId] === undefined) {\n byProxyGroupId[spec.proxyGroupId] = [];\n }\n byProxyGroupId[spec.proxyGroupId].push(id);\n }\n\n data[id].id = id;\n byUuid[spec.uuid] = id;\n\n if (byStatus[status] === undefined) {\n byStatus[status] = [];\n }\n byStatus[status].push(id);\n\n uploaderProxy.onStatusChange(id, null, status);\n\n return id;\n },\n\n retrieve: function(optionalFilter) {\n if (qq.isObject(optionalFilter) && data.length) {\n if (optionalFilter.id !== undefined) {\n return getDataByIds(optionalFilter.id);\n }\n\n else if (optionalFilter.uuid !== undefined) {\n return getDataByUuids(optionalFilter.uuid);\n }\n\n else if (optionalFilter.status) {\n return getDataByStatus(optionalFilter.status);\n }\n }\n else {\n return qq.extend([], data, true);\n }\n },\n\n reset: function() {\n data = [];\n byUuid = {};\n byStatus = {};\n byBatchId = {};\n },\n\n setStatus: function(id, newStatus) {\n var oldStatus = data[id].status,\n byStatusOldStatusIndex = qq.indexOf(byStatus[oldStatus], id);\n\n byStatus[oldStatus].splice(byStatusOldStatusIndex, 1);\n\n data[id].status = newStatus;\n\n if (byStatus[newStatus] === undefined) {\n byStatus[newStatus] = [];\n }\n byStatus[newStatus].push(id);\n\n uploaderProxy.onStatusChange(id, oldStatus, newStatus);\n },\n\n uuidChanged: function(id, newUuid) {\n var oldUuid = data[id].uuid;\n\n data[id].uuid = newUuid;\n byUuid[newUuid] = id;\n delete byUuid[oldUuid];\n },\n\n updateName: function(id, newName) {\n data[id].name = newName;\n },\n\n updateSize: function(id, newSize) {\n data[id].size = newSize;\n },\n\n // Only applicable if this file has a parent that we may want to reference later.\n setParentId: function(targetId, parentId) {\n data[targetId].parentId = parentId;\n },\n\n getIdsInProxyGroup: function(id) {\n var proxyGroupId = data[id].proxyGroupId;\n\n if (proxyGroupId) {\n return byProxyGroupId[proxyGroupId];\n }\n return [];\n },\n\n getIdsInBatch: function(id) {\n var batchId = data[id].batchId;\n\n return byBatchId[batchId];\n }\n });\n};\n\nqq.status = {\n SUBMITTING: \"submitting\",\n SUBMITTED: \"submitted\",\n REJECTED: \"rejected\",\n QUEUED: \"queued\",\n CANCELED: \"canceled\",\n PAUSED: \"paused\",\n UPLOADING: \"uploading\",\n UPLOAD_RETRYING: \"retrying upload\",\n UPLOAD_SUCCESSFUL: \"upload successful\",\n UPLOAD_FAILED: \"upload failed\",\n DELETE_FAILED: \"delete failed\",\n DELETING: \"deleting\",\n DELETED: \"deleted\"\n};\n","/*globals qq*/\n/**\n * Defines the public API for FineUploaderBasic mode.\n */\n(function() {\n \"use strict\";\n\n qq.basePublicApi = {\n // DEPRECATED - TODO REMOVE IN NEXT MAJOR RELEASE (replaced by addFiles)\n addBlobs: function(blobDataOrArray, params, endpoint) {\n this.addFiles(blobDataOrArray, params, endpoint);\n },\n\n addInitialFiles: function(cannedFileList) {\n var self = this;\n\n qq.each(cannedFileList, function(index, cannedFile) {\n self._addCannedFile(cannedFile);\n });\n },\n\n addFiles: function(data, params, endpoint) {\n this._maybeHandleIos8SafariWorkaround();\n\n var batchId = this._storedIds.length === 0 ? qq.getUniqueId() : this._currentBatchId,\n\n processBlob = qq.bind(function(blob) {\n this._handleNewFile({\n blob: blob,\n name: this._options.blobs.defaultName\n }, batchId, verifiedFiles);\n }, this),\n\n processBlobData = qq.bind(function(blobData) {\n this._handleNewFile(blobData, batchId, verifiedFiles);\n }, this),\n\n processCanvas = qq.bind(function(canvas) {\n var blob = qq.canvasToBlob(canvas);\n\n this._handleNewFile({\n blob: blob,\n name: this._options.blobs.defaultName + \".png\"\n }, batchId, verifiedFiles);\n }, this),\n\n processCanvasData = qq.bind(function(canvasData) {\n var normalizedQuality = canvasData.quality && canvasData.quality / 100,\n blob = qq.canvasToBlob(canvasData.canvas, canvasData.type, normalizedQuality);\n\n this._handleNewFile({\n blob: blob,\n name: canvasData.name\n }, batchId, verifiedFiles);\n }, this),\n\n processFileOrInput = qq.bind(function(fileOrInput) {\n if (qq.isInput(fileOrInput) && qq.supportedFeatures.ajaxUploading) {\n var files = Array.prototype.slice.call(fileOrInput.files),\n self = this;\n\n qq.each(files, function(idx, file) {\n self._handleNewFile(file, batchId, verifiedFiles);\n });\n }\n else {\n this._handleNewFile(fileOrInput, batchId, verifiedFiles);\n }\n }, this),\n\n normalizeData = function() {\n if (qq.isFileList(data)) {\n data = Array.prototype.slice.call(data);\n }\n data = [].concat(data);\n },\n\n self = this,\n verifiedFiles = [];\n\n this._currentBatchId = batchId;\n\n if (data) {\n normalizeData();\n\n qq.each(data, function(idx, fileContainer) {\n if (qq.isFileOrInput(fileContainer)) {\n processFileOrInput(fileContainer);\n }\n else if (qq.isBlob(fileContainer)) {\n processBlob(fileContainer);\n }\n else if (qq.isObject(fileContainer)) {\n if (fileContainer.blob && fileContainer.name) {\n processBlobData(fileContainer);\n }\n else if (fileContainer.canvas && fileContainer.name) {\n processCanvasData(fileContainer);\n }\n }\n else if (fileContainer.tagName && fileContainer.tagName.toLowerCase() === \"canvas\") {\n processCanvas(fileContainer);\n }\n else {\n self.log(fileContainer + \" is not a valid file container! Ignoring!\", \"warn\");\n }\n });\n\n this.log(\"Received \" + verifiedFiles.length + \" files.\");\n this._prepareItemsForUpload(verifiedFiles, params, endpoint);\n }\n },\n\n cancel: function(id) {\n this._handler.cancel(id);\n },\n\n cancelAll: function() {\n var storedIdsCopy = [],\n self = this;\n\n qq.extend(storedIdsCopy, this._storedIds);\n qq.each(storedIdsCopy, function(idx, storedFileId) {\n self.cancel(storedFileId);\n });\n\n this._handler.cancelAll();\n },\n\n clearStoredFiles: function() {\n this._storedIds = [];\n },\n\n continueUpload: function(id) {\n var uploadData = this._uploadData.retrieve({id: id});\n\n if (!qq.supportedFeatures.pause || !this._options.chunking.enabled) {\n return false;\n }\n\n if (uploadData.status === qq.status.PAUSED) {\n this.log(qq.format(\"Paused file ID {} ({}) will be continued. Not paused.\", id, this.getName(id)));\n this._uploadFile(id);\n return true;\n }\n else {\n this.log(qq.format(\"Ignoring continue for file ID {} ({}). Not paused.\", id, this.getName(id)), \"error\");\n }\n\n return false;\n },\n\n deleteFile: function(id) {\n return this._onSubmitDelete(id);\n },\n\n // TODO document?\n doesExist: function(fileOrBlobId) {\n return this._handler.isValid(fileOrBlobId);\n },\n\n // Generate a variable size thumbnail on an img or canvas,\n // returning a promise that is fulfilled when the attempt completes.\n // Thumbnail can either be based off of a URL for an image returned\n // by the server in the upload response, or the associated `Blob`.\n drawThumbnail: function(fileId, imgOrCanvas, maxSize, fromServer, customResizeFunction) {\n var promiseToReturn = new qq.Promise(),\n fileOrUrl, options;\n\n if (this._imageGenerator) {\n fileOrUrl = this._thumbnailUrls[fileId];\n options = {\n customResizeFunction: customResizeFunction,\n maxSize: maxSize > 0 ? maxSize : null,\n scale: maxSize > 0\n };\n\n // If client-side preview generation is possible\n // and we are not specifically looking for the image URl returned by the server...\n if (!fromServer && qq.supportedFeatures.imagePreviews) {\n fileOrUrl = this.getFile(fileId);\n }\n\n /* jshint eqeqeq:false,eqnull:true */\n if (fileOrUrl == null) {\n promiseToReturn.failure({container: imgOrCanvas, error: \"File or URL not found.\"});\n }\n else {\n this._imageGenerator.generate(fileOrUrl, imgOrCanvas, options).then(\n function success(modifiedContainer) {\n promiseToReturn.success(modifiedContainer);\n },\n\n function failure(container, reason) {\n promiseToReturn.failure({container: container, error: reason || \"Problem generating thumbnail\"});\n }\n );\n }\n }\n else {\n promiseToReturn.failure({container: imgOrCanvas, error: \"Missing image generator module\"});\n }\n\n return promiseToReturn;\n },\n\n getButton: function(fileId) {\n return this._getButton(this._buttonIdsForFileIds[fileId]);\n },\n\n getEndpoint: function(fileId) {\n return this._endpointStore.get(fileId);\n },\n\n getFile: function(fileOrBlobId) {\n return this._handler.getFile(fileOrBlobId) || null;\n },\n\n getInProgress: function() {\n return this._uploadData.retrieve({\n status: [\n qq.status.UPLOADING,\n qq.status.UPLOAD_RETRYING,\n qq.status.QUEUED\n ]\n }).length;\n },\n\n getName: function(id) {\n return this._uploadData.retrieve({id: id}).name;\n },\n\n // Parent ID for a specific file, or null if this is the parent, or if it has no parent.\n getParentId: function(id) {\n var uploadDataEntry = this.getUploads({id: id}),\n parentId = null;\n\n if (uploadDataEntry) {\n if (uploadDataEntry.parentId !== undefined) {\n parentId = uploadDataEntry.parentId;\n }\n }\n\n return parentId;\n },\n\n getResumableFilesData: function() {\n return this._handler.getResumableFilesData();\n },\n\n getSize: function(id) {\n return this._uploadData.retrieve({id: id}).size;\n },\n\n getNetUploads: function() {\n return this._netUploaded;\n },\n\n getRemainingAllowedItems: function() {\n var allowedItems = this._currentItemLimit;\n\n if (allowedItems > 0) {\n return allowedItems - this._netUploadedOrQueued;\n }\n\n return null;\n },\n\n getUploads: function(optionalFilter) {\n return this._uploadData.retrieve(optionalFilter);\n },\n\n getUuid: function(id) {\n return this._uploadData.retrieve({id: id}).uuid;\n },\n\n log: function(str, level) {\n if (this._options.debug && (!level || level === \"info\")) {\n qq.log(\"[Fine Uploader \" + qq.version + \"] \" + str);\n }\n else if (level && level !== \"info\") {\n qq.log(\"[Fine Uploader \" + qq.version + \"] \" + str, level);\n\n }\n },\n\n pauseUpload: function(id) {\n var uploadData = this._uploadData.retrieve({id: id});\n\n if (!qq.supportedFeatures.pause || !this._options.chunking.enabled) {\n return false;\n }\n\n // Pause only really makes sense if the file is uploading or retrying\n if (qq.indexOf([qq.status.UPLOADING, qq.status.UPLOAD_RETRYING], uploadData.status) >= 0) {\n if (this._handler.pause(id)) {\n this._uploadData.setStatus(id, qq.status.PAUSED);\n return true;\n }\n else {\n this.log(qq.format(\"Unable to pause file ID {} ({}).\", id, this.getName(id)), \"error\");\n }\n }\n else {\n this.log(qq.format(\"Ignoring pause for file ID {} ({}). Not in progress.\", id, this.getName(id)), \"error\");\n }\n\n return false;\n },\n\n reset: function() {\n this.log(\"Resetting uploader...\");\n\n this._handler.reset();\n this._storedIds = [];\n this._autoRetries = [];\n this._retryTimeouts = [];\n this._preventRetries = [];\n this._thumbnailUrls = [];\n\n qq.each(this._buttons, function(idx, button) {\n button.reset();\n });\n\n this._paramsStore.reset();\n this._endpointStore.reset();\n this._netUploadedOrQueued = 0;\n this._netUploaded = 0;\n this._uploadData.reset();\n this._buttonIdsForFileIds = [];\n\n this._pasteHandler && this._pasteHandler.reset();\n this._options.session.refreshOnReset && this._refreshSessionData();\n\n this._succeededSinceLastAllComplete = [];\n this._failedSinceLastAllComplete = [];\n\n this._totalProgress && this._totalProgress.reset();\n },\n\n retry: function(id) {\n return this._manualRetry(id);\n },\n\n scaleImage: function(id, specs) {\n var self = this;\n\n return qq.Scaler.prototype.scaleImage(id, specs, {\n log: qq.bind(self.log, self),\n getFile: qq.bind(self.getFile, self),\n uploadData: self._uploadData\n });\n },\n\n setCustomHeaders: function(headers, id) {\n this._customHeadersStore.set(headers, id);\n },\n\n setDeleteFileCustomHeaders: function(headers, id) {\n this._deleteFileCustomHeadersStore.set(headers, id);\n },\n\n setDeleteFileEndpoint: function(endpoint, id) {\n this._deleteFileEndpointStore.set(endpoint, id);\n },\n\n setDeleteFileParams: function(params, id) {\n this._deleteFileParamsStore.set(params, id);\n },\n\n // Re-sets the default endpoint, an endpoint for a specific file, or an endpoint for a specific button\n setEndpoint: function(endpoint, id) {\n this._endpointStore.set(endpoint, id);\n },\n\n setForm: function(elementOrId) {\n this._updateFormSupportAndParams(elementOrId);\n },\n\n setItemLimit: function(newItemLimit) {\n this._currentItemLimit = newItemLimit;\n },\n\n setName: function(id, newName) {\n this._uploadData.updateName(id, newName);\n },\n\n setParams: function(params, id) {\n this._paramsStore.set(params, id);\n },\n\n setUuid: function(id, newUuid) {\n return this._uploadData.uuidChanged(id, newUuid);\n },\n\n uploadStoredFiles: function() {\n if (this._storedIds.length === 0) {\n this._itemError(\"noFilesError\");\n }\n else {\n this._uploadStoredFiles();\n }\n }\n };\n\n /**\n * Defines the private (internal) API for FineUploaderBasic mode.\n */\n qq.basePrivateApi = {\n // Updates internal state with a file record (not backed by a live file). Returns the assigned ID.\n _addCannedFile: function(sessionData) {\n var id = this._uploadData.addFile({\n uuid: sessionData.uuid,\n name: sessionData.name,\n size: sessionData.size,\n status: qq.status.UPLOAD_SUCCESSFUL\n });\n\n sessionData.deleteFileEndpoint && this.setDeleteFileEndpoint(sessionData.deleteFileEndpoint, id);\n sessionData.deleteFileParams && this.setDeleteFileParams(sessionData.deleteFileParams, id);\n\n if (sessionData.thumbnailUrl) {\n this._thumbnailUrls[id] = sessionData.thumbnailUrl;\n }\n\n this._netUploaded++;\n this._netUploadedOrQueued++;\n\n return id;\n },\n\n _annotateWithButtonId: function(file, associatedInput) {\n if (qq.isFile(file)) {\n file.qqButtonId = this._getButtonId(associatedInput);\n }\n },\n\n _batchError: function(message) {\n this._options.callbacks.onError(null, null, message, undefined);\n },\n\n _createDeleteHandler: function() {\n var self = this;\n\n return new qq.DeleteFileAjaxRequester({\n method: this._options.deleteFile.method.toUpperCase(),\n maxConnections: this._options.maxConnections,\n uuidParamName: this._options.request.uuidName,\n customHeaders: this._deleteFileCustomHeadersStore,\n paramsStore: this._deleteFileParamsStore,\n endpointStore: this._deleteFileEndpointStore,\n cors: this._options.cors,\n log: qq.bind(self.log, self),\n onDelete: function(id) {\n self._onDelete(id);\n self._options.callbacks.onDelete(id);\n },\n onDeleteComplete: function(id, xhrOrXdr, isError) {\n self._onDeleteComplete(id, xhrOrXdr, isError);\n self._options.callbacks.onDeleteComplete(id, xhrOrXdr, isError);\n }\n\n });\n },\n\n _createPasteHandler: function() {\n var self = this;\n\n return new qq.PasteSupport({\n targetElement: this._options.paste.targetElement,\n callbacks: {\n log: qq.bind(self.log, self),\n pasteReceived: function(blob) {\n self._handleCheckedCallback({\n name: \"onPasteReceived\",\n callback: qq.bind(self._options.callbacks.onPasteReceived, self, blob),\n onSuccess: qq.bind(self._handlePasteSuccess, self, blob),\n identifier: \"pasted image\"\n });\n }\n }\n });\n },\n\n _createStore: function(initialValue, _readOnlyValues_) {\n var store = {},\n catchall = initialValue,\n perIdReadOnlyValues = {},\n readOnlyValues = _readOnlyValues_,\n copy = function(orig) {\n if (qq.isObject(orig)) {\n return qq.extend({}, orig);\n }\n return orig;\n },\n getReadOnlyValues = function() {\n if (qq.isFunction(readOnlyValues)) {\n return readOnlyValues();\n }\n return readOnlyValues;\n },\n includeReadOnlyValues = function(id, existing) {\n if (readOnlyValues && qq.isObject(existing)) {\n qq.extend(existing, getReadOnlyValues());\n }\n\n if (perIdReadOnlyValues[id]) {\n qq.extend(existing, perIdReadOnlyValues[id]);\n }\n };\n\n return {\n set: function(val, id) {\n /*jshint eqeqeq: true, eqnull: true*/\n if (id == null) {\n store = {};\n catchall = copy(val);\n }\n else {\n store[id] = copy(val);\n }\n },\n\n get: function(id) {\n var values;\n\n /*jshint eqeqeq: true, eqnull: true*/\n if (id != null && store[id]) {\n values = store[id];\n }\n else {\n values = copy(catchall);\n }\n\n includeReadOnlyValues(id, values);\n\n return copy(values);\n },\n\n addReadOnly: function(id, values) {\n // Only applicable to Object stores\n if (qq.isObject(store)) {\n // If null ID, apply readonly values to all files\n if (id === null) {\n if (qq.isFunction(values)) {\n readOnlyValues = values;\n }\n else {\n readOnlyValues = readOnlyValues || {};\n qq.extend(readOnlyValues, values);\n }\n }\n else {\n perIdReadOnlyValues[id] = perIdReadOnlyValues[id] || {};\n qq.extend(perIdReadOnlyValues[id], values);\n }\n }\n },\n\n remove: function(fileId) {\n return delete store[fileId];\n },\n\n reset: function() {\n store = {};\n perIdReadOnlyValues = {};\n catchall = initialValue;\n }\n };\n },\n\n _createUploadDataTracker: function() {\n var self = this;\n\n return new qq.UploadData({\n getName: function(id) {\n return self.getName(id);\n },\n getUuid: function(id) {\n return self.getUuid(id);\n },\n getSize: function(id) {\n return self.getSize(id);\n },\n onStatusChange: function(id, oldStatus, newStatus) {\n self._onUploadStatusChange(id, oldStatus, newStatus);\n self._options.callbacks.onStatusChange(id, oldStatus, newStatus);\n self._maybeAllComplete(id, newStatus);\n\n if (self._totalProgress) {\n setTimeout(function() {\n self._totalProgress.onStatusChange(id, oldStatus, newStatus);\n }, 0);\n }\n }\n });\n },\n\n /**\n * Generate a tracked upload button.\n *\n * @param spec Object containing a required `element` property\n * along with optional `multiple`, `accept`, and `folders`.\n * @returns {qq.UploadButton}\n * @private\n */\n _createUploadButton: function(spec) {\n var self = this,\n acceptFiles = spec.accept || this._options.validation.acceptFiles,\n allowedExtensions = spec.allowedExtensions || this._options.validation.allowedExtensions,\n button;\n\n function allowMultiple() {\n if (qq.supportedFeatures.ajaxUploading) {\n // Workaround for bug in iOS7+ (see #1039)\n if (self._options.workarounds.iosEmptyVideos &&\n qq.ios() &&\n !qq.ios6() &&\n self._isAllowedExtension(allowedExtensions, \".mov\")) {\n\n return false;\n }\n\n if (spec.multiple === undefined) {\n return self._options.multiple;\n }\n\n return spec.multiple;\n }\n\n return false;\n }\n\n button = new qq.UploadButton({\n acceptFiles: acceptFiles,\n element: spec.element,\n focusClass: this._options.classes.buttonFocus,\n folders: spec.folders,\n hoverClass: this._options.classes.buttonHover,\n ios8BrowserCrashWorkaround: this._options.workarounds.ios8BrowserCrash,\n multiple: allowMultiple(),\n name: this._options.request.inputName,\n onChange: function(input) {\n self._onInputChange(input);\n },\n title: spec.title == null ? this._options.text.fileInputTitle : spec.title\n });\n\n this._disposeSupport.addDisposer(function() {\n button.dispose();\n });\n\n self._buttons.push(button);\n\n return button;\n },\n\n _createUploadHandler: function(additionalOptions, namespace) {\n var self = this,\n lastOnProgress = {},\n options = {\n debug: this._options.debug,\n maxConnections: this._options.maxConnections,\n cors: this._options.cors,\n paramsStore: this._paramsStore,\n endpointStore: this._endpointStore,\n chunking: this._options.chunking,\n resume: this._options.resume,\n blobs: this._options.blobs,\n log: qq.bind(self.log, self),\n preventRetryParam: this._options.retry.preventRetryResponseProperty,\n onProgress: function(id, name, loaded, total) {\n if (loaded < 0 || total < 0) {\n return;\n }\n\n if (lastOnProgress[id]) {\n if (lastOnProgress[id].loaded !== loaded || lastOnProgress[id].total !== total) {\n self._onProgress(id, name, loaded, total);\n self._options.callbacks.onProgress(id, name, loaded, total);\n }\n }\n else {\n self._onProgress(id, name, loaded, total);\n self._options.callbacks.onProgress(id, name, loaded, total);\n }\n\n lastOnProgress[id] = {loaded: loaded, total: total};\n\n },\n onComplete: function(id, name, result, xhr) {\n delete lastOnProgress[id];\n\n var status = self.getUploads({id: id}).status,\n retVal;\n\n // This is to deal with some observed cases where the XHR readyStateChange handler is\n // invoked by the browser multiple times for the same XHR instance with the same state\n // readyState value. Higher level: don't invoke complete-related code if we've already\n // done this.\n if (status === qq.status.UPLOAD_SUCCESSFUL || status === qq.status.UPLOAD_FAILED) {\n return;\n }\n\n retVal = self._onComplete(id, name, result, xhr);\n\n // If the internal `_onComplete` handler returns a promise, don't invoke the `onComplete` callback\n // until the promise has been fulfilled.\n if (retVal instanceof qq.Promise) {\n retVal.done(function() {\n self._options.callbacks.onComplete(id, name, result, xhr);\n });\n }\n else {\n self._options.callbacks.onComplete(id, name, result, xhr);\n }\n },\n onCancel: function(id, name, cancelFinalizationEffort) {\n var promise = new qq.Promise();\n\n self._handleCheckedCallback({\n name: \"onCancel\",\n callback: qq.bind(self._options.callbacks.onCancel, self, id, name),\n onFailure: promise.failure,\n onSuccess: function() {\n cancelFinalizationEffort.then(function() {\n self._onCancel(id, name);\n });\n\n promise.success();\n },\n identifier: id\n });\n\n return promise;\n },\n onUploadPrep: qq.bind(this._onUploadPrep, this),\n onUpload: function(id, name) {\n self._onUpload(id, name);\n self._options.callbacks.onUpload(id, name);\n },\n onUploadChunk: function(id, name, chunkData) {\n self._onUploadChunk(id, chunkData);\n self._options.callbacks.onUploadChunk(id, name, chunkData);\n },\n onUploadChunkSuccess: function(id, chunkData, result, xhr) {\n self._options.callbacks.onUploadChunkSuccess.apply(self, arguments);\n },\n onResume: function(id, name, chunkData) {\n return self._options.callbacks.onResume(id, name, chunkData);\n },\n onAutoRetry: function(id, name, responseJSON, xhr) {\n return self._onAutoRetry.apply(self, arguments);\n },\n onUuidChanged: function(id, newUuid) {\n self.log(\"Server requested UUID change from '\" + self.getUuid(id) + \"' to '\" + newUuid + \"'\");\n self.setUuid(id, newUuid);\n },\n getName: qq.bind(self.getName, self),\n getUuid: qq.bind(self.getUuid, self),\n getSize: qq.bind(self.getSize, self),\n setSize: qq.bind(self._setSize, self),\n getDataByUuid: function(uuid) {\n return self.getUploads({uuid: uuid});\n },\n isQueued: function(id) {\n var status = self.getUploads({id: id}).status;\n return status === qq.status.QUEUED ||\n status === qq.status.SUBMITTED ||\n status === qq.status.UPLOAD_RETRYING ||\n status === qq.status.PAUSED;\n },\n getIdsInProxyGroup: self._uploadData.getIdsInProxyGroup,\n getIdsInBatch: self._uploadData.getIdsInBatch\n };\n\n qq.each(this._options.request, function(prop, val) {\n options[prop] = val;\n });\n\n options.customHeaders = this._customHeadersStore;\n\n if (additionalOptions) {\n qq.each(additionalOptions, function(key, val) {\n options[key] = val;\n });\n }\n\n return new qq.UploadHandlerController(options, namespace);\n },\n\n _fileOrBlobRejected: function(id) {\n this._netUploadedOrQueued--;\n this._uploadData.setStatus(id, qq.status.REJECTED);\n },\n\n _formatSize: function(bytes) {\n if (bytes === 0) {\n return bytes + this._options.text.sizeSymbols[0];\n }\n var i = -1;\n do {\n bytes = bytes / 1000;\n i++;\n } while (bytes > 999);\n\n return Math.max(bytes, 0.1).toFixed(1) + this._options.text.sizeSymbols[i];\n },\n\n // Creates an internal object that tracks various properties of each extra button,\n // and then actually creates the extra button.\n _generateExtraButtonSpecs: function() {\n var self = this;\n\n this._extraButtonSpecs = {};\n\n qq.each(this._options.extraButtons, function(idx, extraButtonOptionEntry) {\n var multiple = extraButtonOptionEntry.multiple,\n validation = qq.extend({}, self._options.validation, true),\n extraButtonSpec = qq.extend({}, extraButtonOptionEntry);\n\n if (multiple === undefined) {\n multiple = self._options.multiple;\n }\n\n if (extraButtonSpec.validation) {\n qq.extend(validation, extraButtonOptionEntry.validation, true);\n }\n\n qq.extend(extraButtonSpec, {\n multiple: multiple,\n validation: validation\n }, true);\n\n self._initExtraButton(extraButtonSpec);\n });\n },\n\n _getButton: function(buttonId) {\n var extraButtonsSpec = this._extraButtonSpecs[buttonId];\n\n if (extraButtonsSpec) {\n return extraButtonsSpec.element;\n }\n else if (buttonId === this._defaultButtonId) {\n return this._options.button;\n }\n },\n\n /**\n * Gets the internally used tracking ID for a button.\n *\n * @param buttonOrFileInputOrFile `File`, ``, or a button container element\n * @returns {*} The button's ID, or undefined if no ID is recoverable\n * @private\n */\n _getButtonId: function(buttonOrFileInputOrFile) {\n var inputs, fileInput,\n fileBlobOrInput = buttonOrFileInputOrFile;\n\n // We want the reference file/blob here if this is a proxy (a file that will be generated on-demand later)\n if (fileBlobOrInput instanceof qq.BlobProxy) {\n fileBlobOrInput = fileBlobOrInput.referenceBlob;\n }\n\n // If the item is a `Blob` it will never be associated with a button or drop zone.\n if (fileBlobOrInput && !qq.isBlob(fileBlobOrInput)) {\n if (qq.isFile(fileBlobOrInput)) {\n return fileBlobOrInput.qqButtonId;\n }\n else if (fileBlobOrInput.tagName.toLowerCase() === \"input\" &&\n fileBlobOrInput.type.toLowerCase() === \"file\") {\n\n return fileBlobOrInput.getAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME);\n }\n\n inputs = fileBlobOrInput.getElementsByTagName(\"input\");\n\n qq.each(inputs, function(idx, input) {\n if (input.getAttribute(\"type\") === \"file\") {\n fileInput = input;\n return false;\n }\n });\n\n if (fileInput) {\n return fileInput.getAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME);\n }\n }\n },\n\n _getNotFinished: function() {\n return this._uploadData.retrieve({\n status: [\n qq.status.UPLOADING,\n qq.status.UPLOAD_RETRYING,\n qq.status.QUEUED,\n qq.status.SUBMITTING,\n qq.status.SUBMITTED,\n qq.status.PAUSED\n ]\n }).length;\n },\n\n // Get the validation options for this button. Could be the default validation option\n // or a specific one assigned to this particular button.\n _getValidationBase: function(buttonId) {\n var extraButtonSpec = this._extraButtonSpecs[buttonId];\n\n return extraButtonSpec ? extraButtonSpec.validation : this._options.validation;\n },\n\n _getValidationDescriptor: function(fileWrapper) {\n if (fileWrapper.file instanceof qq.BlobProxy) {\n return {\n name: qq.getFilename(fileWrapper.file.referenceBlob),\n size: fileWrapper.file.referenceBlob.size\n };\n }\n\n return {\n name: this.getUploads({id: fileWrapper.id}).name,\n size: this.getUploads({id: fileWrapper.id}).size\n };\n },\n\n _getValidationDescriptors: function(fileWrappers) {\n var self = this,\n fileDescriptors = [];\n\n qq.each(fileWrappers, function(idx, fileWrapper) {\n fileDescriptors.push(self._getValidationDescriptor(fileWrapper));\n });\n\n return fileDescriptors;\n },\n\n // Allows camera access on either the default or an extra button for iOS devices.\n _handleCameraAccess: function() {\n if (this._options.camera.ios && qq.ios()) {\n var acceptIosCamera = \"image/*;capture=camera\",\n button = this._options.camera.button,\n buttonId = button ? this._getButtonId(button) : this._defaultButtonId,\n optionRoot = this._options;\n\n // If we are not targeting the default button, it is an \"extra\" button\n if (buttonId && buttonId !== this._defaultButtonId) {\n optionRoot = this._extraButtonSpecs[buttonId];\n }\n\n // Camera access won't work in iOS if the `multiple` attribute is present on the file input\n optionRoot.multiple = false;\n\n // update the options\n if (optionRoot.validation.acceptFiles === null) {\n optionRoot.validation.acceptFiles = acceptIosCamera;\n }\n else {\n optionRoot.validation.acceptFiles += \",\" + acceptIosCamera;\n }\n\n // update the already-created button\n qq.each(this._buttons, function(idx, button) {\n if (button.getButtonId() === buttonId) {\n button.setMultiple(optionRoot.multiple);\n button.setAcceptFiles(optionRoot.acceptFiles);\n\n return false;\n }\n });\n }\n },\n\n _handleCheckedCallback: function(details) {\n var self = this,\n callbackRetVal = details.callback();\n\n if (qq.isGenericPromise(callbackRetVal)) {\n this.log(details.name + \" - waiting for \" + details.name + \" promise to be fulfilled for \" + details.identifier);\n return callbackRetVal.then(\n function(successParam) {\n self.log(details.name + \" promise success for \" + details.identifier);\n details.onSuccess(successParam);\n },\n function() {\n if (details.onFailure) {\n self.log(details.name + \" promise failure for \" + details.identifier);\n details.onFailure();\n }\n else {\n self.log(details.name + \" promise failure for \" + details.identifier);\n }\n });\n }\n\n if (callbackRetVal !== false) {\n details.onSuccess(callbackRetVal);\n }\n else {\n if (details.onFailure) {\n this.log(details.name + \" - return value was 'false' for \" + details.identifier + \". Invoking failure callback.\");\n details.onFailure();\n }\n else {\n this.log(details.name + \" - return value was 'false' for \" + details.identifier + \". Will not proceed.\");\n }\n }\n\n return callbackRetVal;\n },\n\n // Updates internal state when a new file has been received, and adds it along with its ID to a passed array.\n _handleNewFile: function(file, batchId, newFileWrapperList) {\n var self = this,\n uuid = qq.getUniqueId(),\n size = -1,\n name = qq.getFilename(file),\n actualFile = file.blob || file,\n handler = this._customNewFileHandler ?\n this._customNewFileHandler :\n qq.bind(self._handleNewFileGeneric, self);\n\n if (!qq.isInput(actualFile) && actualFile.size >= 0) {\n size = actualFile.size;\n }\n\n handler(actualFile, name, uuid, size, newFileWrapperList, batchId, this._options.request.uuidName, {\n uploadData: self._uploadData,\n paramsStore: self._paramsStore,\n addFileToHandler: function(id, file) {\n self._handler.add(id, file);\n self._netUploadedOrQueued++;\n self._trackButton(id);\n }\n });\n },\n\n _handleNewFileGeneric: function(file, name, uuid, size, fileList, batchId) {\n var id = this._uploadData.addFile({uuid: uuid, name: name, size: size, batchId: batchId});\n\n this._handler.add(id, file);\n this._trackButton(id);\n\n this._netUploadedOrQueued++;\n\n fileList.push({id: id, file: file});\n },\n\n _handlePasteSuccess: function(blob, extSuppliedName) {\n var extension = blob.type.split(\"/\")[1],\n name = extSuppliedName;\n\n /*jshint eqeqeq: true, eqnull: true*/\n if (name == null) {\n name = this._options.paste.defaultName;\n }\n\n name += \".\" + extension;\n\n this.addFiles({\n name: name,\n blob: blob\n });\n },\n\n // Creates an extra button element\n _initExtraButton: function(spec) {\n var button = this._createUploadButton({\n accept: spec.validation.acceptFiles,\n allowedExtensions: spec.validation.allowedExtensions,\n element: spec.element,\n folders: spec.folders,\n multiple: spec.multiple,\n title: spec.fileInputTitle\n });\n\n this._extraButtonSpecs[button.getButtonId()] = spec;\n },\n\n _initFormSupportAndParams: function() {\n this._formSupport = qq.FormSupport && new qq.FormSupport(\n this._options.form, qq.bind(this.uploadStoredFiles, this), qq.bind(this.log, this)\n );\n\n if (this._formSupport && this._formSupport.attachedToForm) {\n this._paramsStore = this._createStore(\n this._options.request.params, this._formSupport.getFormInputsAsObject\n );\n\n this._options.autoUpload = this._formSupport.newAutoUpload;\n if (this._formSupport.newEndpoint) {\n this._options.request.endpoint = this._formSupport.newEndpoint;\n }\n }\n else {\n this._paramsStore = this._createStore(this._options.request.params);\n }\n },\n\n _isDeletePossible: function() {\n if (!qq.DeleteFileAjaxRequester || !this._options.deleteFile.enabled) {\n return false;\n }\n\n if (this._options.cors.expected) {\n if (qq.supportedFeatures.deleteFileCorsXhr) {\n return true;\n }\n\n if (qq.supportedFeatures.deleteFileCorsXdr && this._options.cors.allowXdr) {\n return true;\n }\n\n return false;\n }\n\n return true;\n },\n\n _isAllowedExtension: function(allowed, fileName) {\n var valid = false;\n\n if (!allowed.length) {\n return true;\n }\n\n qq.each(allowed, function(idx, allowedExt) {\n /**\n * If an argument is not a string, ignore it. Added when a possible issue with MooTools hijacking the\n * `allowedExtensions` array was discovered. See case #735 in the issue tracker for more details.\n */\n if (qq.isString(allowedExt)) {\n /*jshint eqeqeq: true, eqnull: true*/\n var extRegex = new RegExp(\"\\\\.\" + allowedExt + \"$\", \"i\");\n\n if (fileName.match(extRegex) != null) {\n valid = true;\n return false;\n }\n }\n });\n\n return valid;\n },\n\n /**\n * Constructs and returns a message that describes an item/file error. Also calls `onError` callback.\n *\n * @param code REQUIRED - a code that corresponds to a stock message describing this type of error\n * @param maybeNameOrNames names of the items that have failed, if applicable\n * @param item `File`, `Blob`, or ``\n * @private\n */\n _itemError: function(code, maybeNameOrNames, item) {\n var message = this._options.messages[code],\n allowedExtensions = [],\n names = [].concat(maybeNameOrNames),\n name = names[0],\n buttonId = this._getButtonId(item),\n validationBase = this._getValidationBase(buttonId),\n extensionsForMessage, placeholderMatch;\n\n function r(name, replacement) { message = message.replace(name, replacement); }\n\n qq.each(validationBase.allowedExtensions, function(idx, allowedExtension) {\n /**\n * If an argument is not a string, ignore it. Added when a possible issue with MooTools hijacking the\n * `allowedExtensions` array was discovered. See case #735 in the issue tracker for more details.\n */\n if (qq.isString(allowedExtension)) {\n allowedExtensions.push(allowedExtension);\n }\n });\n\n extensionsForMessage = allowedExtensions.join(\", \").toLowerCase();\n\n r(\"{file}\", this._options.formatFileName(name));\n r(\"{extensions}\", extensionsForMessage);\n r(\"{sizeLimit}\", this._formatSize(validationBase.sizeLimit));\n r(\"{minSizeLimit}\", this._formatSize(validationBase.minSizeLimit));\n\n placeholderMatch = message.match(/(\\{\\w+\\})/g);\n if (placeholderMatch !== null) {\n qq.each(placeholderMatch, function(idx, placeholder) {\n r(placeholder, names[idx]);\n });\n }\n\n this._options.callbacks.onError(null, name, message, undefined);\n\n return message;\n },\n\n /**\n * Conditionally orders a manual retry of a failed upload.\n *\n * @param id File ID of the failed upload\n * @param callback Optional callback to invoke if a retry is prudent.\n * In lieu of asking the upload handler to retry.\n * @returns {boolean} true if a manual retry will occur\n * @private\n */\n _manualRetry: function(id, callback) {\n if (this._onBeforeManualRetry(id)) {\n this._netUploadedOrQueued++;\n this._uploadData.setStatus(id, qq.status.UPLOAD_RETRYING);\n\n if (callback) {\n callback(id);\n }\n else {\n this._handler.retry(id);\n }\n\n return true;\n }\n },\n\n _maybeAllComplete: function(id, status) {\n var self = this,\n notFinished = this._getNotFinished();\n\n if (status === qq.status.UPLOAD_SUCCESSFUL) {\n this._succeededSinceLastAllComplete.push(id);\n }\n else if (status === qq.status.UPLOAD_FAILED) {\n this._failedSinceLastAllComplete.push(id);\n }\n\n if (notFinished === 0 &&\n (this._succeededSinceLastAllComplete.length || this._failedSinceLastAllComplete.length)) {\n // Attempt to ensure onAllComplete is not invoked before other callbacks, such as onCancel & onComplete\n setTimeout(function() {\n self._onAllComplete(self._succeededSinceLastAllComplete, self._failedSinceLastAllComplete);\n }, 0);\n }\n },\n\n _maybeHandleIos8SafariWorkaround: function() {\n var self = this;\n\n if (this._options.workarounds.ios8SafariUploads && qq.ios800() && qq.iosSafari()) {\n setTimeout(function() {\n window.alert(self._options.messages.unsupportedBrowserIos8Safari);\n }, 0);\n throw new qq.Error(this._options.messages.unsupportedBrowserIos8Safari);\n }\n },\n\n _maybeParseAndSendUploadError: function(id, name, response, xhr) {\n // Assuming no one will actually set the response code to something other than 200\n // and still set 'success' to true...\n if (!response.success) {\n if (xhr && xhr.status !== 200 && !response.error) {\n this._options.callbacks.onError(id, name, \"XHR returned response code \" + xhr.status, xhr);\n }\n else {\n var errorReason = response.error ? response.error : this._options.text.defaultResponseError;\n this._options.callbacks.onError(id, name, errorReason, xhr);\n }\n }\n },\n\n _maybeProcessNextItemAfterOnValidateCallback: function(validItem, items, index, params, endpoint) {\n var self = this;\n\n if (items.length > index) {\n if (validItem || !this._options.validation.stopOnFirstInvalidFile) {\n //use setTimeout to prevent a stack overflow with a large number of files in the batch & non-promissory callbacks\n setTimeout(function() {\n var validationDescriptor = self._getValidationDescriptor(items[index]),\n buttonId = self._getButtonId(items[index].file),\n button = self._getButton(buttonId);\n\n self._handleCheckedCallback({\n name: \"onValidate\",\n callback: qq.bind(self._options.callbacks.onValidate, self, validationDescriptor, button),\n onSuccess: qq.bind(self._onValidateCallbackSuccess, self, items, index, params, endpoint),\n onFailure: qq.bind(self._onValidateCallbackFailure, self, items, index, params, endpoint),\n identifier: \"Item '\" + validationDescriptor.name + \"', size: \" + validationDescriptor.size\n });\n }, 0);\n }\n else if (!validItem) {\n for (; index < items.length; index++) {\n self._fileOrBlobRejected(items[index].id);\n }\n }\n }\n },\n\n _onAllComplete: function(successful, failed) {\n this._totalProgress && this._totalProgress.onAllComplete(successful, failed, this._preventRetries);\n\n this._options.callbacks.onAllComplete(qq.extend([], successful), qq.extend([], failed));\n\n this._succeededSinceLastAllComplete = [];\n this._failedSinceLastAllComplete = [];\n },\n\n /**\n * Attempt to automatically retry a failed upload.\n *\n * @param id The file ID of the failed upload\n * @param name The name of the file associated with the failed upload\n * @param responseJSON Response from the server, parsed into a javascript object\n * @param xhr Ajax transport used to send the failed request\n * @param callback Optional callback to be invoked if a retry is prudent.\n * Invoked in lieu of asking the upload handler to retry.\n * @returns {boolean} true if an auto-retry will occur\n * @private\n */\n _onAutoRetry: function(id, name, responseJSON, xhr, callback) {\n var self = this;\n\n self._preventRetries[id] = responseJSON[self._options.retry.preventRetryResponseProperty];\n\n if (self._shouldAutoRetry(id, name, responseJSON)) {\n var retryWaitPeriod = self._options.retry.autoAttemptDelay * 1000;\n\n self._maybeParseAndSendUploadError.apply(self, arguments);\n self._options.callbacks.onAutoRetry(id, name, self._autoRetries[id]);\n self._onBeforeAutoRetry(id, name);\n\n self._uploadData.setStatus(id, qq.status.UPLOAD_RETRYING);\n self._retryTimeouts[id] = setTimeout(function() {\n self.log(\"Starting retry for \" + name + \"...\");\n\n if (callback) {\n callback(id);\n }\n else {\n self._handler.retry(id);\n }\n }, retryWaitPeriod);\n\n return true;\n }\n },\n\n _onBeforeAutoRetry: function(id, name) {\n this.log(\"Waiting \" + this._options.retry.autoAttemptDelay + \" seconds before retrying \" + name + \"...\");\n },\n\n //return false if we should not attempt the requested retry\n _onBeforeManualRetry: function(id) {\n var itemLimit = this._currentItemLimit,\n fileName;\n\n if (this._preventRetries[id]) {\n this.log(\"Retries are forbidden for id \" + id, \"warn\");\n return false;\n }\n else if (this._handler.isValid(id)) {\n fileName = this.getName(id);\n\n if (this._options.callbacks.onManualRetry(id, fileName) === false) {\n return false;\n }\n\n if (itemLimit > 0 && this._netUploadedOrQueued + 1 > itemLimit) {\n this._itemError(\"retryFailTooManyItems\");\n return false;\n }\n\n this.log(\"Retrying upload for '\" + fileName + \"' (id: \" + id + \")...\");\n return true;\n }\n else {\n this.log(\"'\" + id + \"' is not a valid file ID\", \"error\");\n return false;\n }\n },\n\n _onCancel: function(id, name) {\n this._netUploadedOrQueued--;\n\n clearTimeout(this._retryTimeouts[id]);\n\n var storedItemIndex = qq.indexOf(this._storedIds, id);\n if (!this._options.autoUpload && storedItemIndex >= 0) {\n this._storedIds.splice(storedItemIndex, 1);\n }\n\n this._uploadData.setStatus(id, qq.status.CANCELED);\n },\n\n _onComplete: function(id, name, result, xhr) {\n if (!result.success) {\n this._netUploadedOrQueued--;\n this._uploadData.setStatus(id, qq.status.UPLOAD_FAILED);\n\n if (result[this._options.retry.preventRetryResponseProperty] === true) {\n this._preventRetries[id] = true;\n }\n }\n else {\n if (result.thumbnailUrl) {\n this._thumbnailUrls[id] = result.thumbnailUrl;\n }\n\n this._netUploaded++;\n this._uploadData.setStatus(id, qq.status.UPLOAD_SUCCESSFUL);\n }\n\n this._maybeParseAndSendUploadError(id, name, result, xhr);\n\n return result.success ? true : false;\n },\n\n _onDelete: function(id) {\n this._uploadData.setStatus(id, qq.status.DELETING);\n },\n\n _onDeleteComplete: function(id, xhrOrXdr, isError) {\n var name = this.getName(id);\n\n if (isError) {\n this._uploadData.setStatus(id, qq.status.DELETE_FAILED);\n this.log(\"Delete request for '\" + name + \"' has failed.\", \"error\");\n\n // For error reporting, we only have access to the response status if this is not\n // an `XDomainRequest`.\n if (xhrOrXdr.withCredentials === undefined) {\n this._options.callbacks.onError(id, name, \"Delete request failed\", xhrOrXdr);\n }\n else {\n this._options.callbacks.onError(id, name, \"Delete request failed with response code \" + xhrOrXdr.status, xhrOrXdr);\n }\n }\n else {\n this._netUploadedOrQueued--;\n this._netUploaded--;\n this._handler.expunge(id);\n this._uploadData.setStatus(id, qq.status.DELETED);\n this.log(\"Delete request for '\" + name + \"' has succeeded.\");\n }\n },\n\n _onInputChange: function(input) {\n var fileIndex;\n\n if (qq.supportedFeatures.ajaxUploading) {\n for (fileIndex = 0; fileIndex < input.files.length; fileIndex++) {\n this._annotateWithButtonId(input.files[fileIndex], input);\n }\n\n this.addFiles(input.files);\n }\n // Android 2.3.x will fire `onchange` even if no file has been selected\n else if (input.value.length > 0) {\n this.addFiles(input);\n }\n\n qq.each(this._buttons, function(idx, button) {\n button.reset();\n });\n },\n\n _onProgress: function(id, name, loaded, total) {\n this._totalProgress && this._totalProgress.onIndividualProgress(id, loaded, total);\n },\n\n _onSubmit: function(id, name) {\n //nothing to do yet in core uploader\n },\n\n _onSubmitCallbackSuccess: function(id, name) {\n this._onSubmit.apply(this, arguments);\n this._uploadData.setStatus(id, qq.status.SUBMITTED);\n this._onSubmitted.apply(this, arguments);\n\n if (this._options.autoUpload) {\n this._options.callbacks.onSubmitted.apply(this, arguments);\n this._uploadFile(id);\n }\n else {\n this._storeForLater(id);\n this._options.callbacks.onSubmitted.apply(this, arguments);\n }\n },\n\n _onSubmitDelete: function(id, onSuccessCallback, additionalMandatedParams) {\n var uuid = this.getUuid(id),\n adjustedOnSuccessCallback;\n\n if (onSuccessCallback) {\n adjustedOnSuccessCallback = qq.bind(onSuccessCallback, this, id, uuid, additionalMandatedParams);\n }\n\n if (this._isDeletePossible()) {\n this._handleCheckedCallback({\n name: \"onSubmitDelete\",\n callback: qq.bind(this._options.callbacks.onSubmitDelete, this, id),\n onSuccess: adjustedOnSuccessCallback ||\n qq.bind(this._deleteHandler.sendDelete, this, id, uuid, additionalMandatedParams),\n identifier: id\n });\n return true;\n }\n else {\n this.log(\"Delete request ignored for ID \" + id + \", delete feature is disabled or request not possible \" +\n \"due to CORS on a user agent that does not support pre-flighting.\", \"warn\");\n return false;\n }\n },\n\n _onSubmitted: function(id) {\n //nothing to do in the base uploader\n },\n\n _onTotalProgress: function(loaded, total) {\n this._options.callbacks.onTotalProgress(loaded, total);\n },\n\n _onUploadPrep: function(id) {\n // nothing to do in the core uploader for now\n },\n\n _onUpload: function(id, name) {\n this._uploadData.setStatus(id, qq.status.UPLOADING);\n },\n\n _onUploadChunk: function(id, chunkData) {\n //nothing to do in the base uploader\n },\n\n _onUploadStatusChange: function(id, oldStatus, newStatus) {\n // Make sure a \"queued\" retry attempt is canceled if the upload has been paused\n if (newStatus === qq.status.PAUSED) {\n clearTimeout(this._retryTimeouts[id]);\n }\n },\n\n _onValidateBatchCallbackFailure: function(fileWrappers) {\n var self = this;\n\n qq.each(fileWrappers, function(idx, fileWrapper) {\n self._fileOrBlobRejected(fileWrapper.id);\n });\n },\n\n _onValidateBatchCallbackSuccess: function(validationDescriptors, items, params, endpoint, button) {\n var errorMessage,\n itemLimit = this._currentItemLimit,\n proposedNetFilesUploadedOrQueued = this._netUploadedOrQueued;\n\n if (itemLimit === 0 || proposedNetFilesUploadedOrQueued <= itemLimit) {\n if (items.length > 0) {\n this._handleCheckedCallback({\n name: \"onValidate\",\n callback: qq.bind(this._options.callbacks.onValidate, this, validationDescriptors[0], button),\n onSuccess: qq.bind(this._onValidateCallbackSuccess, this, items, 0, params, endpoint),\n onFailure: qq.bind(this._onValidateCallbackFailure, this, items, 0, params, endpoint),\n identifier: \"Item '\" + items[0].file.name + \"', size: \" + items[0].file.size\n });\n }\n else {\n this._itemError(\"noFilesError\");\n }\n }\n else {\n this._onValidateBatchCallbackFailure(items);\n errorMessage = this._options.messages.tooManyItemsError\n .replace(/\\{netItems\\}/g, proposedNetFilesUploadedOrQueued)\n .replace(/\\{itemLimit\\}/g, itemLimit);\n this._batchError(errorMessage);\n }\n },\n\n _onValidateCallbackFailure: function(items, index, params, endpoint) {\n var nextIndex = index + 1;\n\n this._fileOrBlobRejected(items[index].id, items[index].file.name);\n\n this._maybeProcessNextItemAfterOnValidateCallback(false, items, nextIndex, params, endpoint);\n },\n\n _onValidateCallbackSuccess: function(items, index, params, endpoint) {\n var self = this,\n nextIndex = index + 1,\n validationDescriptor = this._getValidationDescriptor(items[index]);\n\n this._validateFileOrBlobData(items[index], validationDescriptor)\n .then(\n function() {\n self._upload(items[index].id, params, endpoint);\n self._maybeProcessNextItemAfterOnValidateCallback(true, items, nextIndex, params, endpoint);\n },\n function() {\n self._maybeProcessNextItemAfterOnValidateCallback(false, items, nextIndex, params, endpoint);\n }\n );\n },\n\n _prepareItemsForUpload: function(items, params, endpoint) {\n if (items.length === 0) {\n this._itemError(\"noFilesError\");\n return;\n }\n\n var validationDescriptors = this._getValidationDescriptors(items),\n buttonId = this._getButtonId(items[0].file),\n button = this._getButton(buttonId);\n\n this._handleCheckedCallback({\n name: \"onValidateBatch\",\n callback: qq.bind(this._options.callbacks.onValidateBatch, this, validationDescriptors, button),\n onSuccess: qq.bind(this._onValidateBatchCallbackSuccess, this, validationDescriptors, items, params, endpoint, button),\n onFailure: qq.bind(this._onValidateBatchCallbackFailure, this, items),\n identifier: \"batch validation\"\n });\n },\n\n _preventLeaveInProgress: function() {\n var self = this;\n\n this._disposeSupport.attach(window, \"beforeunload\", function(e) {\n if (self.getInProgress()) {\n e = e || window.event;\n // for ie, ff\n e.returnValue = self._options.messages.onLeave;\n // for webkit\n return self._options.messages.onLeave;\n }\n });\n },\n\n // Attempts to refresh session data only if the `qq.Session` module exists\n // and a session endpoint has been specified. The `onSessionRequestComplete`\n // callback will be invoked once the refresh is complete.\n _refreshSessionData: function() {\n var self = this,\n options = this._options.session;\n\n /* jshint eqnull:true */\n if (qq.Session && this._options.session.endpoint != null) {\n if (!this._session) {\n qq.extend(options, {cors: this._options.cors});\n\n options.log = qq.bind(this.log, this);\n options.addFileRecord = qq.bind(this._addCannedFile, this);\n\n this._session = new qq.Session(options);\n }\n\n setTimeout(function() {\n self._session.refresh().then(function(response, xhrOrXdr) {\n self._sessionRequestComplete();\n self._options.callbacks.onSessionRequestComplete(response, true, xhrOrXdr);\n\n }, function(response, xhrOrXdr) {\n\n self._options.callbacks.onSessionRequestComplete(response, false, xhrOrXdr);\n });\n }, 0);\n }\n },\n\n _sessionRequestComplete: function() {},\n\n _setSize: function(id, newSize) {\n this._uploadData.updateSize(id, newSize);\n this._totalProgress && this._totalProgress.onNewSize(id);\n },\n\n _shouldAutoRetry: function(id, name, responseJSON) {\n var uploadData = this._uploadData.retrieve({id: id});\n\n /*jshint laxbreak: true */\n if (!this._preventRetries[id]\n && this._options.retry.enableAuto\n && uploadData.status !== qq.status.PAUSED) {\n\n if (this._autoRetries[id] === undefined) {\n this._autoRetries[id] = 0;\n }\n\n if (this._autoRetries[id] < this._options.retry.maxAutoAttempts) {\n this._autoRetries[id] += 1;\n return true;\n }\n }\n\n return false;\n },\n\n _storeForLater: function(id) {\n this._storedIds.push(id);\n },\n\n // Maps a file with the button that was used to select it.\n _trackButton: function(id) {\n var buttonId;\n\n if (qq.supportedFeatures.ajaxUploading) {\n buttonId = this._handler.getFile(id).qqButtonId;\n }\n else {\n buttonId = this._getButtonId(this._handler.getInput(id));\n }\n\n if (buttonId) {\n this._buttonIdsForFileIds[id] = buttonId;\n }\n },\n\n _updateFormSupportAndParams: function(formElementOrId) {\n this._options.form.element = formElementOrId;\n\n this._formSupport = qq.FormSupport && new qq.FormSupport(\n this._options.form, qq.bind(this.uploadStoredFiles, this), qq.bind(this.log, this)\n );\n\n if (this._formSupport && this._formSupport.attachedToForm) {\n this._paramsStore.addReadOnly(null, this._formSupport.getFormInputsAsObject);\n\n this._options.autoUpload = this._formSupport.newAutoUpload;\n if (this._formSupport.newEndpoint) {\n this.setEndpoint(this._formSupport.newEndpoint);\n }\n }\n },\n\n _upload: function(id, params, endpoint) {\n var name = this.getName(id);\n\n if (params) {\n this.setParams(params, id);\n }\n\n if (endpoint) {\n this.setEndpoint(endpoint, id);\n }\n\n this._handleCheckedCallback({\n name: \"onSubmit\",\n callback: qq.bind(this._options.callbacks.onSubmit, this, id, name),\n onSuccess: qq.bind(this._onSubmitCallbackSuccess, this, id, name),\n onFailure: qq.bind(this._fileOrBlobRejected, this, id, name),\n identifier: id\n });\n },\n\n _uploadFile: function(id) {\n if (!this._handler.upload(id)) {\n this._uploadData.setStatus(id, qq.status.QUEUED);\n }\n },\n\n _uploadStoredFiles: function() {\n var idToUpload, stillSubmitting,\n self = this;\n\n while (this._storedIds.length) {\n idToUpload = this._storedIds.shift();\n this._uploadFile(idToUpload);\n }\n\n // If we are still waiting for some files to clear validation, attempt to upload these again in a bit\n stillSubmitting = this.getUploads({status: qq.status.SUBMITTING}).length;\n if (stillSubmitting) {\n qq.log(\"Still waiting for \" + stillSubmitting + \" files to clear submit queue. Will re-parse stored IDs array shortly.\");\n setTimeout(function() {\n self._uploadStoredFiles();\n }, 1000);\n }\n },\n\n /**\n * Performs some internal validation checks on an item, defined in the `validation` option.\n *\n * @param fileWrapper Wrapper containing a `file` along with an `id`\n * @param validationDescriptor Normalized information about the item (`size`, `name`).\n * @returns qq.Promise with appropriate callbacks invoked depending on the validity of the file\n * @private\n */\n _validateFileOrBlobData: function(fileWrapper, validationDescriptor) {\n var self = this,\n file = (function() {\n if (fileWrapper.file instanceof qq.BlobProxy) {\n return fileWrapper.file.referenceBlob;\n }\n return fileWrapper.file;\n }()),\n name = validationDescriptor.name,\n size = validationDescriptor.size,\n buttonId = this._getButtonId(fileWrapper.file),\n validationBase = this._getValidationBase(buttonId),\n validityChecker = new qq.Promise();\n\n validityChecker.then(\n function() {},\n function() {\n self._fileOrBlobRejected(fileWrapper.id, name);\n });\n\n if (qq.isFileOrInput(file) && !this._isAllowedExtension(validationBase.allowedExtensions, name)) {\n this._itemError(\"typeError\", name, file);\n return validityChecker.failure();\n }\n\n if (!this._options.validation.allowEmpty && size === 0) {\n this._itemError(\"emptyError\", name, file);\n return validityChecker.failure();\n }\n\n if (size > 0 && validationBase.sizeLimit && size > validationBase.sizeLimit) {\n this._itemError(\"sizeError\", name, file);\n return validityChecker.failure();\n }\n\n if (size > 0 && size < validationBase.minSizeLimit) {\n this._itemError(\"minSizeError\", name, file);\n return validityChecker.failure();\n }\n\n if (qq.ImageValidation && qq.supportedFeatures.imagePreviews && qq.isFile(file)) {\n new qq.ImageValidation(file, qq.bind(self.log, self)).validate(validationBase.image).then(\n validityChecker.success,\n function(errorCode) {\n self._itemError(errorCode + \"ImageError\", name, file);\n validityChecker.failure();\n }\n );\n }\n else {\n validityChecker.success();\n }\n\n return validityChecker;\n },\n\n _wrapCallbacks: function() {\n var self, safeCallback, prop;\n\n self = this;\n\n safeCallback = function(name, callback, args) {\n var errorMsg;\n\n try {\n return callback.apply(self, args);\n }\n catch (exception) {\n errorMsg = exception.message || exception.toString();\n self.log(\"Caught exception in '\" + name + \"' callback - \" + errorMsg, \"error\");\n }\n };\n\n /* jshint forin: false, loopfunc: true */\n for (prop in this._options.callbacks) {\n (function() {\n var callbackName, callbackFunc;\n callbackName = prop;\n callbackFunc = self._options.callbacks[callbackName];\n self._options.callbacks[callbackName] = function() {\n return safeCallback(callbackName, callbackFunc, arguments);\n };\n }());\n }\n }\n };\n}());\n","/*globals qq*/\n(function() {\n \"use strict\";\n\n qq.FineUploaderBasic = function(o) {\n var self = this;\n\n // These options define FineUploaderBasic mode.\n this._options = {\n debug: false,\n button: null,\n multiple: true,\n maxConnections: 3,\n disableCancelForFormUploads: false,\n autoUpload: true,\n\n request: {\n customHeaders: {},\n endpoint: \"/server/upload\",\n filenameParam: \"qqfilename\",\n forceMultipart: true,\n inputName: \"qqfile\",\n method: \"POST\",\n params: {},\n paramsInBody: true,\n totalFileSizeName: \"qqtotalfilesize\",\n uuidName: \"qquuid\"\n },\n\n validation: {\n allowedExtensions: [],\n sizeLimit: 0,\n minSizeLimit: 0,\n itemLimit: 0,\n stopOnFirstInvalidFile: true,\n acceptFiles: null,\n image: {\n maxHeight: 0,\n maxWidth: 0,\n minHeight: 0,\n minWidth: 0\n },\n allowEmpty: false\n },\n\n callbacks: {\n onSubmit: function(id, name) {},\n onSubmitted: function(id, name) {},\n onComplete: function(id, name, responseJSON, maybeXhr) {},\n onAllComplete: function(successful, failed) {},\n onCancel: function(id, name) {},\n onUpload: function(id, name) {},\n onUploadChunk: function(id, name, chunkData) {},\n onUploadChunkSuccess: function(id, chunkData, responseJSON, xhr) {},\n onResume: function(id, fileName, chunkData) {},\n onProgress: function(id, name, loaded, total) {},\n onTotalProgress: function(loaded, total) {},\n onError: function(id, name, reason, maybeXhrOrXdr) {},\n onAutoRetry: function(id, name, attemptNumber) {},\n onManualRetry: function(id, name) {},\n onValidateBatch: function(fileOrBlobData) {},\n onValidate: function(fileOrBlobData) {},\n onSubmitDelete: function(id) {},\n onDelete: function(id) {},\n onDeleteComplete: function(id, xhrOrXdr, isError) {},\n onPasteReceived: function(blob) {},\n onStatusChange: function(id, oldStatus, newStatus) {},\n onSessionRequestComplete: function(response, success, xhrOrXdr) {}\n },\n\n messages: {\n typeError: \"{file} has an invalid extension. Valid extension(s): {extensions}.\",\n sizeError: \"{file} is too large, maximum file size is {sizeLimit}.\",\n minSizeError: \"{file} is too small, minimum file size is {minSizeLimit}.\",\n emptyError: \"{file} is empty, please select files again without it.\",\n noFilesError: \"No files to upload.\",\n tooManyItemsError: \"Too many items ({netItems}) would be uploaded. Item limit is {itemLimit}.\",\n maxHeightImageError: \"Image is too tall.\",\n maxWidthImageError: \"Image is too wide.\",\n minHeightImageError: \"Image is not tall enough.\",\n minWidthImageError: \"Image is not wide enough.\",\n retryFailTooManyItems: \"Retry failed - you have reached your file limit.\",\n onLeave: \"The files are being uploaded, if you leave now the upload will be canceled.\",\n unsupportedBrowserIos8Safari: \"Unrecoverable error - this browser does not permit file uploading of any kind due to serious bugs in iOS8 Safari. Please use iOS8 Chrome until Apple fixes these issues.\"\n },\n\n retry: {\n enableAuto: false,\n maxAutoAttempts: 3,\n autoAttemptDelay: 5,\n preventRetryResponseProperty: \"preventRetry\"\n },\n\n classes: {\n buttonHover: \"qq-upload-button-hover\",\n buttonFocus: \"qq-upload-button-focus\"\n },\n\n chunking: {\n enabled: false,\n concurrent: {\n enabled: false\n },\n mandatory: false,\n paramNames: {\n partIndex: \"qqpartindex\",\n partByteOffset: \"qqpartbyteoffset\",\n chunkSize: \"qqchunksize\",\n totalFileSize: \"qqtotalfilesize\",\n totalParts: \"qqtotalparts\"\n },\n partSize: 2000000,\n // only relevant for traditional endpoints, only required when concurrent.enabled === true\n success: {\n endpoint: null\n }\n },\n\n resume: {\n enabled: false,\n recordsExpireIn: 7, //days\n paramNames: {\n resuming: \"qqresume\"\n }\n },\n\n formatFileName: function(fileOrBlobName) {\n return fileOrBlobName;\n },\n\n text: {\n defaultResponseError: \"Upload failure reason unknown\",\n fileInputTitle: \"file input\",\n sizeSymbols: [\"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\"]\n },\n\n deleteFile: {\n enabled: false,\n method: \"DELETE\",\n endpoint: \"/server/upload\",\n customHeaders: {},\n params: {}\n },\n\n cors: {\n expected: false,\n sendCredentials: false,\n allowXdr: false\n },\n\n blobs: {\n defaultName: \"misc_data\"\n },\n\n paste: {\n targetElement: null,\n defaultName: \"pasted_image\"\n },\n\n camera: {\n ios: false,\n\n // if ios is true: button is null means target the default button, otherwise target the button specified\n button: null\n },\n\n // This refers to additional upload buttons to be handled by Fine Uploader.\n // Each element is an object, containing `element` as the only required\n // property. The `element` must be a container that will ultimately\n // contain an invisible `` created by Fine Uploader.\n // Optional properties of each object include `multiple`, `validation`,\n // and `folders`.\n extraButtons: [],\n\n // Depends on the session module. Used to query the server for an initial file list\n // during initialization and optionally after a `reset`.\n session: {\n endpoint: null,\n params: {},\n customHeaders: {},\n refreshOnReset: true\n },\n\n // Send parameters associated with an existing form along with the files\n form: {\n // Element ID, HTMLElement, or null\n element: \"qq-form\",\n\n // Overrides the base `autoUpload`, unless `element` is null.\n autoUpload: false,\n\n // true = upload files on form submission (and squelch submit event)\n interceptSubmit: true\n },\n\n // scale images client side, upload a new file for each scaled version\n scaling: {\n customResizer: null,\n\n // send the original file as well\n sendOriginal: true,\n\n // fox orientation for scaled images\n orient: true,\n\n // If null, scaled image type will match reference image type. This value will be referred to\n // for any size record that does not specific a type.\n defaultType: null,\n\n defaultQuality: 80,\n\n failureText: \"Failed to scale\",\n\n includeExif: false,\n\n // metadata about each requested scaled version\n sizes: []\n },\n\n workarounds: {\n iosEmptyVideos: true,\n ios8SafariUploads: true,\n ios8BrowserCrash: false\n }\n };\n\n // Replace any default options with user defined ones\n qq.extend(this._options, o, true);\n\n this._buttons = [];\n this._extraButtonSpecs = {};\n this._buttonIdsForFileIds = [];\n\n this._wrapCallbacks();\n this._disposeSupport = new qq.DisposeSupport();\n\n this._storedIds = [];\n this._autoRetries = [];\n this._retryTimeouts = [];\n this._preventRetries = [];\n this._thumbnailUrls = [];\n\n this._netUploadedOrQueued = 0;\n this._netUploaded = 0;\n this._uploadData = this._createUploadDataTracker();\n\n this._initFormSupportAndParams();\n\n this._customHeadersStore = this._createStore(this._options.request.customHeaders);\n this._deleteFileCustomHeadersStore = this._createStore(this._options.deleteFile.customHeaders);\n\n this._deleteFileParamsStore = this._createStore(this._options.deleteFile.params);\n\n this._endpointStore = this._createStore(this._options.request.endpoint);\n this._deleteFileEndpointStore = this._createStore(this._options.deleteFile.endpoint);\n\n this._handler = this._createUploadHandler();\n\n this._deleteHandler = qq.DeleteFileAjaxRequester && this._createDeleteHandler();\n\n if (this._options.button) {\n this._defaultButtonId = this._createUploadButton({\n element: this._options.button,\n title: this._options.text.fileInputTitle\n }).getButtonId();\n }\n\n this._generateExtraButtonSpecs();\n\n this._handleCameraAccess();\n\n if (this._options.paste.targetElement) {\n if (qq.PasteSupport) {\n this._pasteHandler = this._createPasteHandler();\n }\n else {\n this.log(\"Paste support module not found\", \"error\");\n }\n }\n\n this._preventLeaveInProgress();\n\n this._imageGenerator = qq.ImageGenerator && new qq.ImageGenerator(qq.bind(this.log, this));\n this._refreshSessionData();\n\n this._succeededSinceLastAllComplete = [];\n this._failedSinceLastAllComplete = [];\n\n this._scaler = (qq.Scaler && new qq.Scaler(this._options.scaling, qq.bind(this.log, this))) || {};\n if (this._scaler.enabled) {\n this._customNewFileHandler = qq.bind(this._scaler.handleNewFile, this._scaler);\n }\n\n if (qq.TotalProgress && qq.supportedFeatures.progressBar) {\n this._totalProgress = new qq.TotalProgress(\n qq.bind(this._onTotalProgress, this),\n\n function(id) {\n var entry = self._uploadData.retrieve({id: id});\n return (entry && entry.size) || 0;\n }\n );\n }\n\n this._currentItemLimit = this._options.validation.itemLimit;\n };\n\n // Define the private & public API methods.\n qq.FineUploaderBasic.prototype = qq.basePublicApi;\n qq.extend(qq.FineUploaderBasic.prototype, qq.basePrivateApi);\n}());\n","/*globals qq, XDomainRequest*/\n/** Generic class for sending non-upload ajax requests and handling the associated responses **/\nqq.AjaxRequester = function(o) {\n \"use strict\";\n\n var log, shouldParamsBeInQueryString,\n queue = [],\n requestData = {},\n options = {\n acceptHeader: null,\n validMethods: [\"PATCH\", \"POST\", \"PUT\"],\n method: \"POST\",\n contentType: \"application/x-www-form-urlencoded\",\n maxConnections: 3,\n customHeaders: {},\n endpointStore: {},\n paramsStore: {},\n mandatedParams: {},\n allowXRequestedWithAndCacheControl: true,\n successfulResponseCodes: {\n DELETE: [200, 202, 204],\n PATCH: [200, 201, 202, 203, 204],\n POST: [200, 201, 202, 203, 204],\n PUT: [200, 201, 202, 203, 204],\n GET: [200]\n },\n cors: {\n expected: false,\n sendCredentials: false\n },\n log: function(str, level) {},\n onSend: function(id) {},\n onComplete: function(id, xhrOrXdr, isError) {},\n onProgress: null\n };\n\n qq.extend(options, o);\n log = options.log;\n\n if (qq.indexOf(options.validMethods, options.method) < 0) {\n throw new Error(\"'\" + options.method + \"' is not a supported method for this type of request!\");\n }\n\n // [Simple methods](http://www.w3.org/TR/cors/#simple-method)\n // are defined by the W3C in the CORS spec as a list of methods that, in part,\n // make a CORS request eligible to be exempt from preflighting.\n function isSimpleMethod() {\n return qq.indexOf([\"GET\", \"POST\", \"HEAD\"], options.method) >= 0;\n }\n\n // [Simple headers](http://www.w3.org/TR/cors/#simple-header)\n // are defined by the W3C in the CORS spec as a list of headers that, in part,\n // make a CORS request eligible to be exempt from preflighting.\n function containsNonSimpleHeaders(headers) {\n var containsNonSimple = false;\n\n qq.each(containsNonSimple, function(idx, header) {\n if (qq.indexOf([\"Accept\", \"Accept-Language\", \"Content-Language\", \"Content-Type\"], header) < 0) {\n containsNonSimple = true;\n return false;\n }\n });\n\n return containsNonSimple;\n }\n\n function isXdr(xhr) {\n //The `withCredentials` test is a commonly accepted way to determine if XHR supports CORS.\n return options.cors.expected && xhr.withCredentials === undefined;\n }\n\n // Returns either a new `XMLHttpRequest` or `XDomainRequest` instance.\n function getCorsAjaxTransport() {\n var xhrOrXdr;\n\n if (window.XMLHttpRequest || window.ActiveXObject) {\n xhrOrXdr = qq.createXhrInstance();\n\n if (xhrOrXdr.withCredentials === undefined) {\n xhrOrXdr = new XDomainRequest();\n // Workaround for XDR bug in IE9 - https://social.msdn.microsoft.com/Forums/ie/en-US/30ef3add-767c-4436-b8a9-f1ca19b4812e/ie9-rtm-xdomainrequest-issued-requests-may-abort-if-all-event-handlers-not-specified?forum=iewebdevelopment\n xhrOrXdr.onload = function() {};\n xhrOrXdr.onerror = function() {};\n xhrOrXdr.ontimeout = function() {};\n xhrOrXdr.onprogress = function() {};\n }\n }\n\n return xhrOrXdr;\n }\n\n // Returns either a new XHR/XDR instance, or an existing one for the associated `File` or `Blob`.\n function getXhrOrXdr(id, suppliedXhr) {\n var xhrOrXdr = requestData[id].xhr;\n\n if (!xhrOrXdr) {\n if (suppliedXhr) {\n xhrOrXdr = suppliedXhr;\n }\n else {\n if (options.cors.expected) {\n xhrOrXdr = getCorsAjaxTransport();\n }\n else {\n xhrOrXdr = qq.createXhrInstance();\n }\n }\n\n requestData[id].xhr = xhrOrXdr;\n }\n\n return xhrOrXdr;\n }\n\n // Removes element from queue, sends next request\n function dequeue(id) {\n var i = qq.indexOf(queue, id),\n max = options.maxConnections,\n nextId;\n\n delete requestData[id];\n queue.splice(i, 1);\n\n if (queue.length >= max && i < max) {\n nextId = queue[max - 1];\n sendRequest(nextId);\n }\n }\n\n function onComplete(id, xdrError) {\n var xhr = getXhrOrXdr(id),\n method = options.method,\n isError = xdrError === true;\n\n dequeue(id);\n\n if (isError) {\n log(method + \" request for \" + id + \" has failed\", \"error\");\n }\n else if (!isXdr(xhr) && !isResponseSuccessful(xhr.status)) {\n isError = true;\n log(method + \" request for \" + id + \" has failed - response code \" + xhr.status, \"error\");\n }\n\n options.onComplete(id, xhr, isError);\n }\n\n function getParams(id) {\n var onDemandParams = requestData[id].additionalParams,\n mandatedParams = options.mandatedParams,\n params;\n\n if (options.paramsStore.get) {\n params = options.paramsStore.get(id);\n }\n\n if (onDemandParams) {\n qq.each(onDemandParams, function(name, val) {\n params = params || {};\n params[name] = val;\n });\n }\n\n if (mandatedParams) {\n qq.each(mandatedParams, function(name, val) {\n params = params || {};\n params[name] = val;\n });\n }\n\n return params;\n }\n\n function sendRequest(id, optXhr) {\n var xhr = getXhrOrXdr(id, optXhr),\n method = options.method,\n params = getParams(id),\n payload = requestData[id].payload,\n url;\n\n options.onSend(id);\n\n url = createUrl(id, params, requestData[id].additionalQueryParams);\n\n // XDR and XHR status detection APIs differ a bit.\n if (isXdr(xhr)) {\n xhr.onload = getXdrLoadHandler(id);\n xhr.onerror = getXdrErrorHandler(id);\n }\n else {\n xhr.onreadystatechange = getXhrReadyStateChangeHandler(id);\n }\n\n registerForUploadProgress(id);\n\n // The last parameter is assumed to be ignored if we are actually using `XDomainRequest`.\n xhr.open(method, url, true);\n\n // Instruct the transport to send cookies along with the CORS request,\n // unless we are using `XDomainRequest`, which is not capable of this.\n if (options.cors.expected && options.cors.sendCredentials && !isXdr(xhr)) {\n xhr.withCredentials = true;\n }\n\n setHeaders(id);\n\n log(\"Sending \" + method + \" request for \" + id);\n\n if (payload) {\n xhr.send(payload);\n }\n else if (shouldParamsBeInQueryString || !params) {\n xhr.send();\n }\n else if (params && options.contentType && options.contentType.toLowerCase().indexOf(\"application/x-www-form-urlencoded\") >= 0) {\n xhr.send(qq.obj2url(params, \"\"));\n }\n else if (params && options.contentType && options.contentType.toLowerCase().indexOf(\"application/json\") >= 0) {\n xhr.send(JSON.stringify(params));\n }\n else {\n xhr.send(params);\n }\n\n return xhr;\n }\n\n function createUrl(id, params, additionalQueryParams) {\n var endpoint = options.endpointStore.get(id),\n addToPath = requestData[id].addToPath;\n\n /*jshint -W116,-W041 */\n if (addToPath != undefined) {\n endpoint += \"/\" + addToPath;\n }\n\n if (shouldParamsBeInQueryString && params) {\n endpoint = qq.obj2url(params, endpoint);\n }\n\n if (additionalQueryParams) {\n endpoint = qq.obj2url(additionalQueryParams, endpoint);\n }\n\n return endpoint;\n }\n\n // Invoked by the UA to indicate a number of possible states that describe\n // a live `XMLHttpRequest` transport.\n function getXhrReadyStateChangeHandler(id) {\n return function() {\n if (getXhrOrXdr(id).readyState === 4) {\n onComplete(id);\n }\n };\n }\n\n function registerForUploadProgress(id) {\n var onProgress = options.onProgress;\n\n if (onProgress) {\n getXhrOrXdr(id).upload.onprogress = function(e) {\n if (e.lengthComputable) {\n onProgress(id, e.loaded, e.total);\n }\n };\n }\n }\n\n // This will be called by IE to indicate **success** for an associated\n // `XDomainRequest` transported request.\n function getXdrLoadHandler(id) {\n return function() {\n onComplete(id);\n };\n }\n\n // This will be called by IE to indicate **failure** for an associated\n // `XDomainRequest` transported request.\n function getXdrErrorHandler(id) {\n return function() {\n onComplete(id, true);\n };\n }\n\n function setHeaders(id) {\n var xhr = getXhrOrXdr(id),\n customHeaders = options.customHeaders,\n onDemandHeaders = requestData[id].additionalHeaders || {},\n method = options.method,\n allHeaders = {};\n\n // If XDomainRequest is being used, we can't set headers, so just ignore this block.\n if (!isXdr(xhr)) {\n options.acceptHeader && xhr.setRequestHeader(\"Accept\", options.acceptHeader);\n\n // Only attempt to add X-Requested-With & Cache-Control if permitted\n if (options.allowXRequestedWithAndCacheControl) {\n // Do not add X-Requested-With & Cache-Control if this is a cross-origin request\n // OR the cross-origin request contains a non-simple method or header.\n // This is done to ensure a preflight is not triggered exclusively based on the\n // addition of these 2 non-simple headers.\n if (!options.cors.expected || (!isSimpleMethod() || containsNonSimpleHeaders(customHeaders))) {\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n xhr.setRequestHeader(\"Cache-Control\", \"no-cache\");\n }\n }\n\n if (options.contentType && (method === \"POST\" || method === \"PUT\")) {\n xhr.setRequestHeader(\"Content-Type\", options.contentType);\n }\n\n qq.extend(allHeaders, qq.isFunction(customHeaders) ? customHeaders(id) : customHeaders);\n qq.extend(allHeaders, onDemandHeaders);\n\n qq.each(allHeaders, function(name, val) {\n xhr.setRequestHeader(name, val);\n });\n }\n }\n\n function isResponseSuccessful(responseCode) {\n return qq.indexOf(options.successfulResponseCodes[options.method], responseCode) >= 0;\n }\n\n function prepareToSend(id, optXhr, addToPath, additionalParams, additionalQueryParams, additionalHeaders, payload) {\n requestData[id] = {\n addToPath: addToPath,\n additionalParams: additionalParams,\n additionalQueryParams: additionalQueryParams,\n additionalHeaders: additionalHeaders,\n payload: payload\n };\n\n var len = queue.push(id);\n\n // if too many active connections, wait...\n if (len <= options.maxConnections) {\n return sendRequest(id, optXhr);\n }\n }\n\n shouldParamsBeInQueryString = options.method === \"GET\" || options.method === \"DELETE\";\n\n qq.extend(this, {\n // Start the process of sending the request. The ID refers to the file associated with the request.\n initTransport: function(id) {\n var path, params, headers, payload, cacheBuster, additionalQueryParams;\n\n return {\n // Optionally specify the end of the endpoint path for the request.\n withPath: function(appendToPath) {\n path = appendToPath;\n return this;\n },\n\n // Optionally specify additional parameters to send along with the request.\n // These will be added to the query string for GET/DELETE requests or the payload\n // for POST/PUT requests. The Content-Type of the request will be used to determine\n // how these parameters should be formatted as well.\n withParams: function(additionalParams) {\n params = additionalParams;\n return this;\n },\n\n withQueryParams: function(_additionalQueryParams_) {\n additionalQueryParams = _additionalQueryParams_;\n return this;\n },\n\n // Optionally specify additional headers to send along with the request.\n withHeaders: function(additionalHeaders) {\n headers = additionalHeaders;\n return this;\n },\n\n // Optionally specify a payload/body for the request.\n withPayload: function(thePayload) {\n payload = thePayload;\n return this;\n },\n\n // Appends a cache buster (timestamp) to the request URL as a query parameter (only if GET or DELETE)\n withCacheBuster: function() {\n cacheBuster = true;\n return this;\n },\n\n // Send the constructed request.\n send: function(optXhr) {\n if (cacheBuster && qq.indexOf([\"GET\", \"DELETE\"], options.method) >= 0) {\n params.qqtimestamp = new Date().getTime();\n }\n\n return prepareToSend(id, optXhr, path, params, additionalQueryParams, headers, payload);\n }\n };\n },\n\n canceled: function(id) {\n dequeue(id);\n }\n });\n};\n","/* globals qq */\n/**\n * Common upload handler functions.\n *\n * @constructor\n */\nqq.UploadHandler = function(spec) {\n \"use strict\";\n\n var proxy = spec.proxy,\n fileState = {},\n onCancel = proxy.onCancel,\n getName = proxy.getName;\n\n qq.extend(this, {\n add: function(id, fileItem) {\n fileState[id] = fileItem;\n fileState[id].temp = {};\n },\n\n cancel: function(id) {\n var self = this,\n cancelFinalizationEffort = new qq.Promise(),\n onCancelRetVal = onCancel(id, getName(id), cancelFinalizationEffort);\n\n onCancelRetVal.then(function() {\n if (self.isValid(id)) {\n fileState[id].canceled = true;\n self.expunge(id);\n }\n cancelFinalizationEffort.success();\n });\n },\n\n expunge: function(id) {\n delete fileState[id];\n },\n\n getThirdPartyFileId: function(id) {\n return fileState[id].key;\n },\n\n isValid: function(id) {\n return fileState[id] !== undefined;\n },\n\n reset: function() {\n fileState = {};\n },\n\n _getFileState: function(id) {\n return fileState[id];\n },\n\n _setThirdPartyFileId: function(id, thirdPartyFileId) {\n fileState[id].key = thirdPartyFileId;\n },\n\n _wasCanceled: function(id) {\n return !!fileState[id].canceled;\n }\n });\n};\n","/*globals qq*/\n/**\n * Base upload handler module. Controls more specific handlers.\n *\n * @param o Options. Passed along to the specific handler submodule as well.\n * @param namespace [optional] Namespace for the specific handler.\n */\nqq.UploadHandlerController = function(o, namespace) {\n \"use strict\";\n\n var controller = this,\n chunkingPossible = false,\n concurrentChunkingPossible = false,\n chunking, preventRetryResponse, log, handler,\n\n options = {\n paramsStore: {},\n maxConnections: 3, // maximum number of concurrent uploads\n chunking: {\n enabled: false,\n multiple: {\n enabled: false\n }\n },\n log: function(str, level) {},\n onProgress: function(id, fileName, loaded, total) {},\n onComplete: function(id, fileName, response, xhr) {},\n onCancel: function(id, fileName) {},\n onUploadPrep: function(id) {}, // Called if non-trivial operations will be performed before onUpload\n onUpload: function(id, fileName) {},\n onUploadChunk: function(id, fileName, chunkData) {},\n onUploadChunkSuccess: function(id, chunkData, response, xhr) {},\n onAutoRetry: function(id, fileName, response, xhr) {},\n onResume: function(id, fileName, chunkData) {},\n onUuidChanged: function(id, newUuid) {},\n getName: function(id) {},\n setSize: function(id, newSize) {},\n isQueued: function(id) {},\n getIdsInProxyGroup: function(id) {},\n getIdsInBatch: function(id) {}\n },\n\n chunked = {\n // Called when each chunk has uploaded successfully\n done: function(id, chunkIdx, response, xhr) {\n var chunkData = handler._getChunkData(id, chunkIdx);\n\n handler._getFileState(id).attemptingResume = false;\n\n delete handler._getFileState(id).temp.chunkProgress[chunkIdx];\n handler._getFileState(id).loaded += chunkData.size;\n\n options.onUploadChunkSuccess(id, handler._getChunkDataForCallback(chunkData), response, xhr);\n },\n\n // Called when all chunks have been successfully uploaded and we want to ask the handler to perform any\n // logic associated with closing out the file, such as combining the chunks.\n finalize: function(id) {\n var size = options.getSize(id),\n name = options.getName(id);\n\n log(\"All chunks have been uploaded for \" + id + \" - finalizing....\");\n handler.finalizeChunks(id).then(\n function(response, xhr) {\n log(\"Finalize successful for \" + id);\n\n var normaizedResponse = upload.normalizeResponse(response, true);\n\n options.onProgress(id, name, size, size);\n handler._maybeDeletePersistedChunkData(id);\n upload.cleanup(id, normaizedResponse, xhr);\n },\n function(response, xhr) {\n var normaizedResponse = upload.normalizeResponse(response, false);\n\n log(\"Problem finalizing chunks for file ID \" + id + \" - \" + normaizedResponse.error, \"error\");\n\n if (normaizedResponse.reset) {\n chunked.reset(id);\n }\n\n if (!options.onAutoRetry(id, name, normaizedResponse, xhr)) {\n upload.cleanup(id, normaizedResponse, xhr);\n }\n }\n );\n },\n\n handleFailure: function(chunkIdx, id, response, xhr) {\n var name = options.getName(id);\n\n log(\"Chunked upload request failed for \" + id + \", chunk \" + chunkIdx);\n\n handler.clearCachedChunk(id, chunkIdx);\n\n var responseToReport = upload.normalizeResponse(response, false),\n inProgressIdx;\n\n if (responseToReport.reset) {\n chunked.reset(id);\n }\n else {\n inProgressIdx = qq.indexOf(handler._getFileState(id).chunking.inProgress, chunkIdx);\n if (inProgressIdx >= 0) {\n handler._getFileState(id).chunking.inProgress.splice(inProgressIdx, 1);\n handler._getFileState(id).chunking.remaining.unshift(chunkIdx);\n }\n }\n\n // We may have aborted all other in-progress chunks for this file due to a failure.\n // If so, ignore the failures associated with those aborts.\n if (!handler._getFileState(id).temp.ignoreFailure) {\n // If this chunk has failed, we want to ignore all other failures of currently in-progress\n // chunks since they will be explicitly aborted\n if (concurrentChunkingPossible) {\n handler._getFileState(id).temp.ignoreFailure = true;\n\n log(qq.format(\"Going to attempt to abort these chunks: {}. These are currently in-progress: {}.\", JSON.stringify(Object.keys(handler._getXhrs(id))), JSON.stringify(handler._getFileState(id).chunking.inProgress)));\n qq.each(handler._getXhrs(id), function(ckid, ckXhr) {\n log(qq.format(\"Attempting to abort file {}.{}. XHR readyState {}. \", id, ckid, ckXhr.readyState));\n ckXhr.abort();\n // Flag the transport, in case we are waiting for some other async operation\n // to complete before attempting to upload the chunk\n ckXhr._cancelled = true;\n });\n\n // We must indicate that all aborted chunks are no longer in progress\n handler.moveInProgressToRemaining(id);\n\n // Free up any connections used by these chunks, but don't allow any\n // other files to take up the connections (until we have exhausted all auto-retries)\n connectionManager.free(id, true);\n }\n\n if (!options.onAutoRetry(id, name, responseToReport, xhr)) {\n // If one chunk fails, abort all of the others to avoid odd race conditions that occur\n // if a chunk succeeds immediately after one fails before we have determined if the upload\n // is a failure or not.\n upload.cleanup(id, responseToReport, xhr);\n }\n }\n },\n\n hasMoreParts: function(id) {\n return !!handler._getFileState(id).chunking.remaining.length;\n },\n\n nextPart: function(id) {\n var nextIdx = handler._getFileState(id).chunking.remaining.shift();\n\n if (nextIdx >= handler._getTotalChunks(id)) {\n nextIdx = null;\n }\n\n return nextIdx;\n },\n\n reset: function(id) {\n log(\"Server or callback has ordered chunking effort to be restarted on next attempt for item ID \" + id, \"error\");\n\n handler._maybeDeletePersistedChunkData(id);\n handler.reevaluateChunking(id);\n handler._getFileState(id).loaded = 0;\n },\n\n sendNext: function(id) {\n var size = options.getSize(id),\n name = options.getName(id),\n chunkIdx = chunked.nextPart(id),\n chunkData = handler._getChunkData(id, chunkIdx),\n resuming = handler._getFileState(id).attemptingResume,\n inProgressChunks = handler._getFileState(id).chunking.inProgress || [];\n\n if (handler._getFileState(id).loaded == null) {\n handler._getFileState(id).loaded = 0;\n }\n\n // Don't follow-through with the resume attempt if the integrator returns false from onResume\n if (resuming && options.onResume(id, name, chunkData) === false) {\n chunked.reset(id);\n chunkIdx = chunked.nextPart(id);\n chunkData = handler._getChunkData(id, chunkIdx);\n resuming = false;\n }\n\n // If all chunks have already uploaded successfully, we must be re-attempting the finalize step.\n if (chunkIdx == null && inProgressChunks.length === 0) {\n chunked.finalize(id);\n }\n\n // Send the next chunk\n else {\n log(qq.format(\"Sending chunked upload request for item {}.{}, bytes {}-{} of {}.\", id, chunkIdx, chunkData.start + 1, chunkData.end, size));\n options.onUploadChunk(id, name, handler._getChunkDataForCallback(chunkData));\n inProgressChunks.push(chunkIdx);\n handler._getFileState(id).chunking.inProgress = inProgressChunks;\n\n if (concurrentChunkingPossible) {\n connectionManager.open(id, chunkIdx);\n }\n\n if (concurrentChunkingPossible && connectionManager.available() && handler._getFileState(id).chunking.remaining.length) {\n chunked.sendNext(id);\n }\n\n if (chunkData.blob.size === 0) {\n log(qq.format(\"Chunk {} for file {} will not be uploaded, zero sized chunk.\", chunkIdx, id), \"error\");\n chunked.handleFailure(chunkIdx, id, \"File is no longer available\", null);\n }\n else {\n handler.uploadChunk(id, chunkIdx, resuming).then(\n // upload chunk success\n function success(response, xhr) {\n log(\"Chunked upload request succeeded for \" + id + \", chunk \" + chunkIdx);\n\n handler.clearCachedChunk(id, chunkIdx);\n\n var inProgressChunks = handler._getFileState(id).chunking.inProgress || [],\n responseToReport = upload.normalizeResponse(response, true),\n inProgressChunkIdx = qq.indexOf(inProgressChunks, chunkIdx);\n\n log(qq.format(\"Chunk {} for file {} uploaded successfully.\", chunkIdx, id));\n\n chunked.done(id, chunkIdx, responseToReport, xhr);\n\n if (inProgressChunkIdx >= 0) {\n inProgressChunks.splice(inProgressChunkIdx, 1);\n }\n\n handler._maybePersistChunkedState(id);\n\n if (!chunked.hasMoreParts(id) && inProgressChunks.length === 0) {\n chunked.finalize(id);\n }\n else if (chunked.hasMoreParts(id)) {\n chunked.sendNext(id);\n }\n else {\n log(qq.format(\"File ID {} has no more chunks to send and these chunk indexes are still marked as in-progress: {}\", id, JSON.stringify(inProgressChunks)));\n }\n },\n\n // upload chunk failure\n function failure(response, xhr) {\n chunked.handleFailure(chunkIdx, id, response, xhr);\n }\n )\n .done(function() {\n handler.clearXhr(id, chunkIdx);\n });\n }\n }\n }\n },\n\n connectionManager = {\n _open: [],\n _openChunks: {},\n _waiting: [],\n\n available: function() {\n var max = options.maxConnections,\n openChunkEntriesCount = 0,\n openChunksCount = 0;\n\n qq.each(connectionManager._openChunks, function(fileId, openChunkIndexes) {\n openChunkEntriesCount++;\n openChunksCount += openChunkIndexes.length;\n });\n\n return max - (connectionManager._open.length - openChunkEntriesCount + openChunksCount);\n },\n\n /**\n * Removes element from queue, starts upload of next\n */\n free: function(id, dontAllowNext) {\n var allowNext = !dontAllowNext,\n waitingIndex = qq.indexOf(connectionManager._waiting, id),\n connectionsIndex = qq.indexOf(connectionManager._open, id),\n nextId;\n\n delete connectionManager._openChunks[id];\n\n if (upload.getProxyOrBlob(id) instanceof qq.BlobProxy) {\n log(\"Generated blob upload has ended for \" + id + \", disposing generated blob.\");\n delete handler._getFileState(id).file;\n }\n\n // If this file was not consuming a connection, it was just waiting, so remove it from the waiting array\n if (waitingIndex >= 0) {\n connectionManager._waiting.splice(waitingIndex, 1);\n }\n // If this file was consuming a connection, allow the next file to be uploaded\n else if (allowNext && connectionsIndex >= 0) {\n connectionManager._open.splice(connectionsIndex, 1);\n\n nextId = connectionManager._waiting.shift();\n if (nextId >= 0) {\n connectionManager._open.push(nextId);\n upload.start(nextId);\n }\n }\n },\n\n getWaitingOrConnected: function() {\n var waitingOrConnected = [];\n\n // Chunked files may have multiple connections open per chunk (if concurrent chunking is enabled)\n // We need to grab the file ID of any file that has at least one chunk consuming a connection.\n qq.each(connectionManager._openChunks, function(fileId, chunks) {\n if (chunks && chunks.length) {\n waitingOrConnected.push(parseInt(fileId));\n }\n });\n\n // For non-chunked files, only one connection will be consumed per file.\n // This is where we aggregate those file IDs.\n qq.each(connectionManager._open, function(idx, fileId) {\n if (!connectionManager._openChunks[fileId]) {\n waitingOrConnected.push(parseInt(fileId));\n }\n });\n\n // There may be files waiting for a connection.\n waitingOrConnected = waitingOrConnected.concat(connectionManager._waiting);\n\n return waitingOrConnected;\n },\n\n isUsingConnection: function(id) {\n return qq.indexOf(connectionManager._open, id) >= 0;\n },\n\n open: function(id, chunkIdx) {\n if (chunkIdx == null) {\n connectionManager._waiting.push(id);\n }\n\n if (connectionManager.available()) {\n if (chunkIdx == null) {\n connectionManager._waiting.pop();\n connectionManager._open.push(id);\n }\n else {\n (function() {\n var openChunksEntry = connectionManager._openChunks[id] || [];\n openChunksEntry.push(chunkIdx);\n connectionManager._openChunks[id] = openChunksEntry;\n }());\n }\n\n return true;\n }\n\n return false;\n },\n\n reset: function() {\n connectionManager._waiting = [];\n connectionManager._open = [];\n }\n },\n\n simple = {\n send: function(id, name) {\n handler._getFileState(id).loaded = 0;\n\n log(\"Sending simple upload request for \" + id);\n handler.uploadFile(id).then(\n function(response, optXhr) {\n log(\"Simple upload request succeeded for \" + id);\n\n var responseToReport = upload.normalizeResponse(response, true),\n size = options.getSize(id);\n\n options.onProgress(id, name, size, size);\n upload.maybeNewUuid(id, responseToReport);\n upload.cleanup(id, responseToReport, optXhr);\n },\n\n function(response, optXhr) {\n log(\"Simple upload request failed for \" + id);\n\n var responseToReport = upload.normalizeResponse(response, false);\n\n if (!options.onAutoRetry(id, name, responseToReport, optXhr)) {\n upload.cleanup(id, responseToReport, optXhr);\n }\n }\n );\n }\n },\n\n upload = {\n cancel: function(id) {\n log(\"Cancelling \" + id);\n options.paramsStore.remove(id);\n connectionManager.free(id);\n },\n\n cleanup: function(id, response, optXhr) {\n var name = options.getName(id);\n\n options.onComplete(id, name, response, optXhr);\n\n if (handler._getFileState(id)) {\n handler._clearXhrs && handler._clearXhrs(id);\n }\n\n connectionManager.free(id);\n },\n\n // Returns a qq.BlobProxy, or an actual File/Blob if no proxy is involved, or undefined\n // if none of these are available for the ID\n getProxyOrBlob: function(id) {\n return (handler.getProxy && handler.getProxy(id)) ||\n (handler.getFile && handler.getFile(id));\n },\n\n initHandler: function() {\n var handlerType = namespace ? qq[namespace] : qq.traditional,\n handlerModuleSubtype = qq.supportedFeatures.ajaxUploading ? \"Xhr\" : \"Form\";\n\n handler = new handlerType[handlerModuleSubtype + \"UploadHandler\"](\n options,\n {\n getDataByUuid: options.getDataByUuid,\n getName: options.getName,\n getSize: options.getSize,\n getUuid: options.getUuid,\n log: log,\n onCancel: options.onCancel,\n onProgress: options.onProgress,\n onUuidChanged: options.onUuidChanged\n }\n );\n\n if (handler._removeExpiredChunkingRecords) {\n handler._removeExpiredChunkingRecords();\n }\n },\n\n isDeferredEligibleForUpload: function(id) {\n return options.isQueued(id);\n },\n\n // For Blobs that are part of a group of generated images, along with a reference image,\n // this will ensure the blobs in the group are uploaded in the order they were triggered,\n // even if some async processing must be completed on one or more Blobs first.\n maybeDefer: function(id, blob) {\n // If we don't have a file/blob yet & no file/blob exists for this item, request it,\n // and then submit the upload to the specific handler once the blob is available.\n // ASSUMPTION: This condition will only ever be true if XHR uploading is supported.\n if (blob && !handler.getFile(id) && blob instanceof qq.BlobProxy) {\n\n // Blob creation may take some time, so the caller may want to update the\n // UI to indicate that an operation is in progress, even before the actual\n // upload begins and an onUpload callback is invoked.\n options.onUploadPrep(id);\n\n log(\"Attempting to generate a blob on-demand for \" + id);\n blob.create().then(function(generatedBlob) {\n log(\"Generated an on-demand blob for \" + id);\n\n // Update record associated with this file by providing the generated Blob\n handler.updateBlob(id, generatedBlob);\n\n // Propagate the size for this generated Blob\n options.setSize(id, generatedBlob.size);\n\n // Order handler to recalculate chunking possibility, if applicable\n handler.reevaluateChunking(id);\n\n upload.maybeSendDeferredFiles(id);\n },\n\n // Blob could not be generated. Fail the upload & attempt to prevent retries. Also bubble error message.\n function(errorMessage) {\n var errorResponse = {};\n\n if (errorMessage) {\n errorResponse.error = errorMessage;\n }\n\n log(qq.format(\"Failed to generate blob for ID {}. Error message: {}.\", id, errorMessage), \"error\");\n\n options.onComplete(id, options.getName(id), qq.extend(errorResponse, preventRetryResponse), null);\n upload.maybeSendDeferredFiles(id);\n connectionManager.free(id);\n });\n }\n else {\n return upload.maybeSendDeferredFiles(id);\n }\n\n return false;\n },\n\n // Upload any grouped blobs, in the proper order, that are ready to be uploaded\n maybeSendDeferredFiles: function(id) {\n var idsInGroup = options.getIdsInProxyGroup(id),\n uploadedThisId = false;\n\n if (idsInGroup && idsInGroup.length) {\n log(\"Maybe ready to upload proxy group file \" + id);\n\n qq.each(idsInGroup, function(idx, idInGroup) {\n if (upload.isDeferredEligibleForUpload(idInGroup) && !!handler.getFile(idInGroup)) {\n uploadedThisId = idInGroup === id;\n upload.now(idInGroup);\n }\n else if (upload.isDeferredEligibleForUpload(idInGroup)) {\n return false;\n }\n });\n }\n else {\n uploadedThisId = true;\n upload.now(id);\n }\n\n return uploadedThisId;\n },\n\n maybeNewUuid: function(id, response) {\n if (response.newUuid !== undefined) {\n options.onUuidChanged(id, response.newUuid);\n }\n },\n\n // The response coming from handler implementations may be in various formats.\n // Instead of hoping a promise nested 5 levels deep will always return an object\n // as its first param, let's just normalize the response here.\n normalizeResponse: function(originalResponse, successful) {\n var response = originalResponse;\n\n // The passed \"response\" param may not be a response at all.\n // It could be a string, detailing the error, for example.\n if (!qq.isObject(originalResponse)) {\n response = {};\n\n if (qq.isString(originalResponse) && !successful) {\n response.error = originalResponse;\n }\n }\n\n response.success = successful;\n\n return response;\n },\n\n now: function(id) {\n var name = options.getName(id);\n\n if (!controller.isValid(id)) {\n throw new qq.Error(id + \" is not a valid file ID to upload!\");\n }\n\n options.onUpload(id, name);\n\n if (chunkingPossible && handler._shouldChunkThisFile(id)) {\n chunked.sendNext(id);\n }\n else {\n simple.send(id, name);\n }\n },\n\n start: function(id) {\n var blobToUpload = upload.getProxyOrBlob(id);\n\n if (blobToUpload) {\n return upload.maybeDefer(id, blobToUpload);\n }\n else {\n upload.now(id);\n return true;\n }\n }\n };\n\n qq.extend(this, {\n /**\n * Adds file or file input to the queue\n **/\n add: function(id, file) {\n handler.add.apply(this, arguments);\n },\n\n /**\n * Sends the file identified by id\n */\n upload: function(id) {\n if (connectionManager.open(id)) {\n return upload.start(id);\n }\n return false;\n },\n\n retry: function(id) {\n // On retry, if concurrent chunking has been enabled, we may have aborted all other in-progress chunks\n // for a file when encountering a failed chunk upload. We then signaled the controller to ignore\n // all failures associated with these aborts. We are now retrying, so we don't want to ignore\n // any more failures at this point.\n if (concurrentChunkingPossible) {\n handler._getFileState(id).temp.ignoreFailure = false;\n }\n\n // If we are attempting to retry a file that is already consuming a connection, this is likely an auto-retry.\n // Just go ahead and ask the handler to upload again.\n if (connectionManager.isUsingConnection(id)) {\n return upload.start(id);\n }\n\n // If we are attempting to retry a file that is not currently consuming a connection,\n // this is likely a manual retry attempt. We will need to ensure a connection is available\n // before the retry commences.\n else {\n return controller.upload(id);\n }\n },\n\n /**\n * Cancels file upload by id\n */\n cancel: function(id) {\n var cancelRetVal = handler.cancel(id);\n\n if (qq.isGenericPromise(cancelRetVal)) {\n cancelRetVal.then(function() {\n upload.cancel(id);\n });\n }\n else if (cancelRetVal !== false) {\n upload.cancel(id);\n }\n },\n\n /**\n * Cancels all queued or in-progress uploads\n */\n cancelAll: function() {\n var waitingOrConnected = connectionManager.getWaitingOrConnected(),\n i;\n\n // ensure files are cancelled in reverse order which they were added\n // to avoid a flash of time where a queued file begins to upload before it is canceled\n if (waitingOrConnected.length) {\n for (i = waitingOrConnected.length - 1; i >= 0; i--) {\n controller.cancel(waitingOrConnected[i]);\n }\n }\n\n connectionManager.reset();\n },\n\n // Returns a File, Blob, or the Blob/File for the reference/parent file if the targeted blob is a proxy.\n // Undefined if no file record is available.\n getFile: function(id) {\n if (handler.getProxy && handler.getProxy(id)) {\n return handler.getProxy(id).referenceBlob;\n }\n\n return handler.getFile && handler.getFile(id);\n },\n\n // Returns true if the Blob associated with the ID is related to a proxy s\n isProxied: function(id) {\n return !!(handler.getProxy && handler.getProxy(id));\n },\n\n getInput: function(id) {\n if (handler.getInput) {\n return handler.getInput(id);\n }\n },\n\n reset: function() {\n log(\"Resetting upload handler\");\n controller.cancelAll();\n connectionManager.reset();\n handler.reset();\n },\n\n expunge: function(id) {\n if (controller.isValid(id)) {\n return handler.expunge(id);\n }\n },\n\n /**\n * Determine if the file exists.\n */\n isValid: function(id) {\n return handler.isValid(id);\n },\n\n getResumableFilesData: function() {\n if (handler.getResumableFilesData) {\n return handler.getResumableFilesData();\n }\n return [];\n },\n\n /**\n * This may or may not be implemented, depending on the handler. For handlers where a third-party ID is\n * available (such as the \"key\" for Amazon S3), this will return that value. Otherwise, the return value\n * will be undefined.\n *\n * @param id Internal file ID\n * @returns {*} Some identifier used by a 3rd-party service involved in the upload process\n */\n getThirdPartyFileId: function(id) {\n if (controller.isValid(id)) {\n return handler.getThirdPartyFileId(id);\n }\n },\n\n /**\n * Attempts to pause the associated upload if the specific handler supports this and the file is \"valid\".\n * @param id ID of the upload/file to pause\n * @returns {boolean} true if the upload was paused\n */\n pause: function(id) {\n if (controller.isResumable(id) && handler.pause && controller.isValid(id) && handler.pause(id)) {\n connectionManager.free(id);\n handler.moveInProgressToRemaining(id);\n return true;\n }\n return false;\n },\n\n // True if the file is eligible for pause/resume.\n isResumable: function(id) {\n return !!handler.isResumable && handler.isResumable(id);\n }\n });\n\n qq.extend(options, o);\n log = options.log;\n chunkingPossible = options.chunking.enabled && qq.supportedFeatures.chunking;\n concurrentChunkingPossible = chunkingPossible && options.chunking.concurrent.enabled;\n\n preventRetryResponse = (function() {\n var response = {};\n\n response[options.preventRetryParam] = true;\n\n return response;\n }());\n\n upload.initHandler();\n};\n","/*globals qq */\n/*jshint -W117 */\nqq.WindowReceiveMessage = function(o) {\n \"use strict\";\n\n var options = {\n log: function(message, level) {}\n },\n callbackWrapperDetachers = {};\n\n qq.extend(options, o);\n\n qq.extend(this, {\n receiveMessage: function(id, callback) {\n var onMessageCallbackWrapper = function(event) {\n callback(event.data);\n };\n\n if (window.postMessage) {\n callbackWrapperDetachers[id] = qq(window).attach(\"message\", onMessageCallbackWrapper);\n }\n else {\n log(\"iframe message passing not supported in this browser!\", \"error\");\n }\n },\n\n stopReceivingMessages: function(id) {\n if (window.postMessage) {\n var detacher = callbackWrapperDetachers[id];\n if (detacher) {\n detacher();\n }\n }\n }\n });\n};\n","/* globals qq */\n/**\n * Common APIs exposed to creators of upload via form/iframe handlers. This is reused and possibly overridden\n * in some cases by specific form upload handlers.\n *\n * @constructor\n */\nqq.FormUploadHandler = function(spec) {\n \"use strict\";\n\n var options = spec.options,\n handler = this,\n proxy = spec.proxy,\n formHandlerInstanceId = qq.getUniqueId(),\n onloadCallbacks = {},\n detachLoadEvents = {},\n postMessageCallbackTimers = {},\n isCors = options.isCors,\n inputName = options.inputName,\n getUuid = proxy.getUuid,\n log = proxy.log,\n corsMessageReceiver = new qq.WindowReceiveMessage({log: log});\n\n /**\n * Remove any trace of the file from the handler.\n *\n * @param id ID of the associated file\n */\n function expungeFile(id) {\n delete detachLoadEvents[id];\n\n // If we are dealing with CORS, we might still be waiting for a response from a loaded iframe.\n // In that case, terminate the timer waiting for a message from the loaded iframe\n // and stop listening for any more messages coming from this iframe.\n if (isCors) {\n clearTimeout(postMessageCallbackTimers[id]);\n delete postMessageCallbackTimers[id];\n corsMessageReceiver.stopReceivingMessages(id);\n }\n\n var iframe = document.getElementById(handler._getIframeName(id));\n if (iframe) {\n // To cancel request set src to something else. We use src=\"javascript:false;\"\n // because it doesn't trigger ie6 prompt on https\n /* jshint scripturl:true */\n iframe.setAttribute(\"src\", \"javascript:false;\");\n\n qq(iframe).remove();\n }\n }\n\n /**\n * @param iframeName `document`-unique Name of the associated iframe\n * @returns {*} ID of the associated file\n */\n function getFileIdForIframeName(iframeName) {\n return iframeName.split(\"_\")[0];\n }\n\n /**\n * Generates an iframe to be used as a target for upload-related form submits. This also adds the iframe\n * to the current `document`. Note that the iframe is hidden from view.\n *\n * @param name Name of the iframe.\n * @returns {HTMLIFrameElement} The created iframe\n */\n function initIframeForUpload(name) {\n var iframe = qq.toElement(\"