diff --git a/CHANGELOG b/CHANGELOG index 68c3d0831..2e1775b20 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,37 @@ +-------------------------------------------------------------------------------- + Changes in version 5.1.17 +-------------------------------------------------------------------------------- +- new version 5.16.2 of fine uploader +- obey max_upload_size whenever a file is uploaded +- do not list documents in task list, if a previous version is still in workflow. + Take only the lastest version into account (Closes: #405) +- fix moving documents in clipboard into folder by drag&drop +- clipboard can be pinned to fixed position +- use standard output for document rows on MyDocuments page +- new seeddms logo +- fix moving clipboard (Closes: #473) +- show access rights of folder/document if user has write access +- fix creating preview images of documents in drop folder +- fix list of expired documents in admin tools (Closes: #474) +- list of expired documents can be sorted +- show 'fast upload' always (if turned on), but issue an error msg if the + current folder is not writable + +-------------------------------------------------------------------------------- + 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 +- 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 +- 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/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index bbaa830bb..83537c1de 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -188,10 +188,22 @@ class SeedDMS_Core_DMS { */ public $callbacks; + /** + * @var string last error message. This can be set by hooks to pass an + * error message from the hook to the application which has called the + * method containing the hook. For example SeedDMS_Core_Document::remove() + * calls the hook 'onPreRemoveDocument'. The hook function can set $dms->lasterror + * which can than be read when SeedDMS_Core_Document::remove() fails. + * This variable could be set in any SeedDMS_Core class, but is currently + * only set by hooks. + * @access public + */ + public $lasterror; + /** * @var SeedDMS_Core_DMS */ - public $_dms; +// public $_dms; /** @@ -381,9 +393,10 @@ class SeedDMS_Core_DMS { $this->classnames['user'] = 'SeedDMS_Core_User'; $this->classnames['group'] = 'SeedDMS_Core_Group'; $this->callbacks = array(); + $this->lasterror = ''; $this->version = '@package_version@'; if($this->version[0] == '@') - $this->version = '5.1.15'; + $this->version = '5.1.16'; } /* }}} */ /** @@ -649,16 +662,36 @@ class SeedDMS_Core_DMS { /** * Returns all documents which already expired or will expire in the future * + * The parameter $date will be relative to the start of the day. It can + * be either a number of days (if an integer is passed) or a date string + * in the format 'YYYY-MM-DD'. + * If the parameter $date is a negative number or a date in the past, then + * all documents from the start of that date till the end of the current + * day will be returned. If $date is a positive integer or $date is a + * date in the future, the all documents from the start of the current + * day till the end of the day of the given date will be returned. + * Passing 0 or the + * current date in $date, will return all documents expiring the current + * day. * @param string $date date in format YYYY-MM-DD or an integer with the number * of days. A negative value will cover the days in the past. - * @param SeedDMS_Core_User $user + * @param SeedDMS_Core_User $user limits the documents on those owned + * by this user + * @param string $orderby n=name, e=expired + * @param string $orderdir d=desc or a=asc + * @param bool $update update status of document if set to true * @return bool|SeedDMS_Core_Document[] */ - function getDocumentsExpired($date, $user=null) { /* {{{ */ + function getDocumentsExpired($date, $user=null, $orderby='e', $orderdir='desc', $update=true) { /* {{{ */ $db = $this->getDB(); + if (!$db->createTemporaryTable("ttstatid") || !$db->createTemporaryTable("ttcontentid")) { + return false; + } + + $tsnow = mktime(0, 0, 0); /* Start of today */ if(is_int($date)) { - $ts = mktime(0, 0, 0) + $date * 86400; + $ts = $tsnow + $date * 86400; } elseif(is_string($date)) { $tmp = explode('-', $date, 3); if(count($tmp) != 3) @@ -667,11 +700,10 @@ class SeedDMS_Core_DMS { } else return false; - $tsnow = mktime(0, 0, 0); /* Start of today */ if($ts < $tsnow) { /* Check for docs expired in the past */ $startts = $ts; $endts = $tsnow+86400; /* Use end of day */ - $updatestatus = true; + $updatestatus = $update; } else { /* Check for docs which will expire in the future */ $startts = $tsnow; $endts = $ts+86400; /* Use end of day */ @@ -689,12 +721,12 @@ class SeedDMS_Core_DMS { "LEFT JOIN `ttstatid` ON `ttstatid`.`statusID` = `tblDocumentStatus`.`statusID` ". "LEFT JOIN `tblDocumentStatusLog` ON `tblDocumentStatusLog`.`statusLogID` = `ttstatid`.`maxLogID`"; $queryStr .= - " WHERE `tblDocuments`.`expires` > ".$startts." AND `tblDocuments`.`expires` < ".$endts; + " WHERE `tblDocuments`.`expires` >= ".$startts." AND `tblDocuments`.`expires` < ".$endts; if($user) $queryStr .= " AND `tblDocuments`.`owner` = '".$user->getID()."' "; $queryStr .= - " ORDER BY `expires` DESC"; + " ORDER BY ".($orderby == 'e' ? "`expires`" : "`name`")." ".($orderdir == 'd' ? "DESC" : "ASC"); $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && !$resArr) @@ -704,8 +736,9 @@ class SeedDMS_Core_DMS { $documents = array(); foreach ($resArr as $row) { $document = $this->getDocument($row["id"]); - if($updatestatus) + if($updatestatus) { $document->verifyLastestContentExpriry(); + } $documents[] = $document; } return $documents; @@ -848,8 +881,8 @@ class SeedDMS_Core_DMS { * 'AppRevOwner', 'ReceiptByMe', 'ReviseByMe', 'LockedByMe', 'MyDocs' * @param SeedDMS_Core_User $param1 user * @param bool $param2 set to true - * if 'AppRevByMe', 'ReviseByMe', 'ReceiptByMe' shall return even documents - * І have already taken care of. + * if 'ReviewByMe', 'ApproveByMe', 'AppRevByMe', 'ReviseByMe', 'ReceiptByMe' + * shall return even documents І have already taken care of. * @param string $param3 sort list by this field * @param string $param4 order direction * @return array|bool @@ -887,7 +920,7 @@ class SeedDMS_Core_DMS { * It doesn't need the where clause anymore. Hence the statement could be * extended with further left joins. */ - $selectStr = "SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser`, ". + $selectStr = "`tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser`, ". "`tblDocumentContent`.`version`, `tblDocumentStatus`.*, `tblDocumentStatusLog`.`status`, ". "`tblDocumentStatusLog`.`comment` AS `statusComment`, `tblDocumentStatusLog`.`date` as `statusDate`, ". "`tblDocumentStatusLog`.`userID`, `oTbl`.`fullName` AS `ownerName`, `sTbl`.`fullName` AS `statusName` "; @@ -962,9 +995,11 @@ class SeedDMS_Core_DMS { $orderdir = 'ASC'; $groups = array(); - $tmp = $user->getGroups(); - foreach($tmp as $group) - $groups[] = $group->getID(); + if($user) { + $tmp = $user->getGroups(); + foreach($tmp as $group) + $groups[] = $group->getID(); + } $selectStr .= ", `tblDocumentReviewLog`.`date` as `duedate` "; $queryStr .= @@ -973,10 +1008,12 @@ class SeedDMS_Core_DMS { "LEFT JOIN `tblDocumentReviewLog` ON `tblDocumentReviewLog`.`reviewLogID`=`ttreviewid`.`maxLogID` "; if(1) { - $queryStr .= "WHERE (`tblDocumentReviewers`.`type` = 0 AND `tblDocumentReviewers`.`required` = ".$user->getID()." "; - if($groups) - $queryStr .= "OR `tblDocumentReviewers`.`type` = 1 AND `tblDocumentReviewers`.`required` IN (".implode(',', $groups).") "; - $queryStr .= ") "; + if($user) { + $queryStr .= "WHERE (`tblDocumentReviewers`.`type` = 0 AND `tblDocumentReviewers`.`required` = ".$user->getID()." "; + if($groups) + $queryStr .= "OR `tblDocumentReviewers`.`type` = 1 AND `tblDocumentReviewers`.`required` IN (".implode(',', $groups).") "; + $queryStr .= ") "; + } $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_EXPIRED.") "; if(!$param2) $queryStr .= " AND `tblDocumentReviewLog`.`status` = 0 "; @@ -1037,9 +1074,11 @@ class SeedDMS_Core_DMS { $orderdir = 'ASC'; $groups = array(); - $tmp = $user->getGroups(); - foreach($tmp as $group) - $groups[] = $group->getID(); + if($user) { + $tmp = $user->getGroups(); + foreach($tmp as $group) + $groups[] = $group->getID(); + } $selectStr .= ", `tblDocumentApproveLog`.`date` as `duedate` "; $queryStr .= @@ -1048,10 +1087,12 @@ class SeedDMS_Core_DMS { "LEFT JOIN `tblDocumentApproveLog` ON `tblDocumentApproveLog`.`approveLogID`=`ttapproveid`.`maxLogID` "; if(1) { + if($user) { $queryStr .= "WHERE (`tblDocumentApprovers`.`type` = 0 AND `tblDocumentApprovers`.`required` = ".$user->getID()." "; if($groups) $queryStr .= "OR `tblDocumentApprovers`.`type` = 1 AND `tblDocumentApprovers`.`required` IN (".implode(',', $groups).")"; $queryStr .= ") "; + } $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_APP.", ".S_EXPIRED.") "; if(!$param2) $queryStr .= " AND `tblDocumentApproveLog`.`status` = 0 "; @@ -1101,9 +1142,39 @@ class SeedDMS_Core_DMS { } break; // }}} case 'WorkflowByMe': // Documents I to trigger in Worklflow {{{ - $queryStr .= "WHERE 1=1 "; - $user = $param1; + $orderby = $param3; + if($param4 == 'desc') + $orderdir = 'DESC'; + else + $orderdir = 'ASC'; + + if(1) { + $groups = array(); + if($user) { + $tmp = $user->getGroups(); + foreach($tmp as $group) + $groups[] = $group->getID(); + } + $selectStr = 'distinct '.$selectStr; + $queryStr .= + "LEFT JOIN `tblWorkflowDocumentContent` on `ttcontentid`.`document`=`tblWorkflowDocumentContent`.`document` AND `ttcontentid`.`maxVersion`=`tblWorkflowDocumentContent`.`version` ". + "LEFT JOIN `tblWorkflowTransitions` on `tblWorkflowDocumentContent`.`workflow`=`tblWorkflowTransitions`.`workflow` AND `tblWorkflowDocumentContent`.`state`=`tblWorkflowTransitions`.`state` ". + "LEFT JOIN `tblWorkflowTransitionUsers` on `tblWorkflowTransitionUsers`.`transition` = `tblWorkflowTransitions`.`id` ". + "LEFT JOIN `tblWorkflowTransitionGroups` on `tblWorkflowTransitionGroups`.`transition` = `tblWorkflowTransitions`.`id` "; + + if($user) { + $queryStr .= "WHERE (`tblWorkflowTransitionUsers`.`userid` = ".$user->getID()." "; + if($groups) + $queryStr .= "OR `tblWorkflowTransitionGroups`.`groupid` IN (".implode(',', $groups).")"; + $queryStr .= ") "; + } +// echo 'SELECT '.$selectStr." ".$queryStr; + if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; + else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; + else $queryStr .= "ORDER BY `name`"; + } else { + $queryStr .= "WHERE 1=1 "; // Get document list for the current user. $workflowStatus = $user->getWorkflowStatus(); @@ -1133,6 +1204,7 @@ class SeedDMS_Core_DMS { } else { $queryStr = ''; } + } break; // }}} case 'AppRevOwner': // Documents waiting for review/approval/revision I'm owning {{{ $queryStr .= "WHERE 1=1 "; @@ -1267,7 +1339,7 @@ class SeedDMS_Core_DMS { } if($queryStr) { - $resArr = $this->db->getResultArray($selectStr.$queryStr); + $resArr = $this->db->getResultArray('SELECT '.$selectStr.$queryStr); if (is_bool($resArr) && !$resArr) { return false; } @@ -2033,8 +2105,8 @@ class SeedDMS_Core_DMS { $user = $this->getUser($this->db->getInsertID('tblUsers')); /* Check if 'onPostAddUser' callback is set */ - if(isset($this->_dms->callbacks['onPostAddUser'])) { - foreach($this->_dms->callbacks['onPostUser'] as $callback) { + if(isset($this->callbacks['onPostAddUser'])) { + foreach($this->callbacks['onPostUser'] as $callback) { /** @noinspection PhpStatementHasEmptyBodyInspection */ if(!call_user_func($callback[0], $callback[1], $user)) { } @@ -2096,8 +2168,8 @@ class SeedDMS_Core_DMS { $group = $this->getGroup($this->db->getInsertID('tblGroups')); /* Check if 'onPostAddGroup' callback is set */ - if(isset($this->_dms->callbacks['onPostAddGroup'])) { - foreach($this->_dms->callbacks['onPostAddGroup'] as $callback) { + if(isset($this->callbacks['onPostAddGroup'])) { + foreach($this->callbacks['onPostAddGroup'] as $callback) { /** @noinspection PhpStatementHasEmptyBodyInspection */ if(!call_user_func($callback[0], $callback[1], $group)) { } @@ -2188,8 +2260,8 @@ class SeedDMS_Core_DMS { $category = $this->getKeywordCategory($this->db->getInsertID('tblKeywordCategories')); /* Check if 'onPostAddKeywordCategory' callback is set */ - if(isset($this->_dms->callbacks['onPostAddKeywordCategory'])) { - foreach($this->_dms->callbacks['onPostAddKeywordCategory'] as $callback) { + if(isset($this->callbacks['onPostAddKeywordCategory'])) { + foreach($this->callbacks['onPostAddKeywordCategory'] as $callback) { /** @noinspection PhpStatementHasEmptyBodyInspection */ if(!call_user_func($callback[0], $callback[1], $category)) { } @@ -2265,8 +2337,8 @@ class SeedDMS_Core_DMS { $category = $this->getDocumentCategory($this->db->getInsertID('tblCategory')); /* Check if 'onPostAddDocumentCategory' callback is set */ - if(isset($this->_dms->callbacks['onPostAddDocumentCategory'])) { - foreach($this->_dms->callbacks['onPostAddDocumentCategory'] as $callback) { + if(isset($this->callbacks['onPostAddDocumentCategory'])) { + foreach($this->callbacks['onPostAddDocumentCategory'] as $callback) { /** @noinspection PhpStatementHasEmptyBodyInspection */ if(!call_user_func($callback[0], $callback[1], $category)) { } diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 06fd32e4e..8d264bdb2 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -790,11 +790,16 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /** * Check if the document has expired * + * The method expects to database field 'expired' to hold the timestamp + * of the start of day at which end the document expires. The document will + * expire if that day is over. Hence, a document will *not* + * be expired during the day of expiration but at the end of that day + * * @return boolean true if document has expired otherwise false */ function hasExpired() { /* {{{ */ if (intval($this->_expires) == 0) return false; - if (time()>$this->_expires+24*60*60) return true; + if (time()>=$this->_expires+24*60*60) return true; return false; } /* }}} */ @@ -1987,6 +1992,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * @return bool|mixed */ function removeContent($version) { /* {{{ */ + $this->_dms->lasterror = ''; + /* Check if 'onPreRemoveDocument' callback is set */ if(isset($this->_dms->callbacks['onPreRemoveContent'])) { foreach($this->_dms->callbacks['onPreRemoveContent'] as $callback) { @@ -2212,14 +2219,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; @@ -2227,8 +2241,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; } /* }}} */ @@ -2272,6 +2290,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ */ function remove() { /* {{{ */ $db = $this->_dms->getDB(); + $this->_dms->lasterror = ''; /* Check if 'onPreRemoveDocument' callback is set */ if(isset($this->_dms->callbacks['onPreRemoveDocument'])) { @@ -3102,12 +3121,31 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ $ddate = $db->qstr($date); else $ddate = $db->getCurrentDatetime(); + $db->startTransaction(); $queryStr = "INSERT INTO `tblDocumentStatusLog` (`statusID`, `status`, `comment`, `date`, `userID`) ". "VALUES ('". $this->_status["statusID"] ."', '". (int) $status ."', ".$db->qstr($comment).", ".$ddate.", '". $updateUser->getID() ."')"; $res = $db->getResult($queryStr); - if (is_bool($res) && !$res) + if (is_bool($res) && !$res) { + $db->rollbackTransaction(); return false; + } + /* Check if 'onSetStatus' callback is set */ + if(isset($this->_dms->callbacks['onSetStatus'])) { + foreach($this->_dms->callbacks['onSetStatus'] as $callback) { + $ret = call_user_func($callback[0], $callback[1], $this, $this->_status["status"], $status); + if(is_bool($ret)) { + unset($this->_status); + if($ret) + $db->commitTransaction(); + else + $db->rollbackTransaction(); + return $ret; + } + } + } + + $db->commitTransaction(); unset($this->_status); return true; } /* }}} */ diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index a8c060e33..e8364dc0c 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -12,11 +12,11 @@ uwe@steinmann.cx yes - 2020-03-02 + 2020-05-22 - 5.1.15 - 5.1.15 + 5.1.17 + 5.1.17 stable @@ -24,7 +24,9 @@ GPL License -- no changes, just keep same version as seeddms application +- add new callback onSetStatus +- fix SeedDMS_Core_DMS::getExpiredDocuments(), sql statement failed because temp. tables were not created +- add parameters $orderdir, $orderby, $update to SeedDMS_Core::getExpiredDocuments() @@ -1728,5 +1730,40 @@ 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 + + + + 2020-04-14 + + + 5.1.16 + 5.1.16 + + + stable + stable + + GPL License + +- 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() + + diff --git a/SeedDMS_Preview/Preview/PdfPreviewer.php b/SeedDMS_Preview/Preview/PdfPreviewer.php index 6ce557810..202fe4e18 100644 --- a/SeedDMS_Preview/Preview/PdfPreviewer.php +++ b/SeedDMS_Preview/Preview/PdfPreviewer.php @@ -152,10 +152,11 @@ class SeedDMS_Preview_PdfPreviewer extends SeedDMS_Preview_Base { * @param string $dir directory relative to $this->previewDir * @return boolean true if preview exists, otherwise false */ - public function hasRawPreview($infile, $dir) { /* {{{ */ + public function hasRawPreview($infile, $dir, $target='') { /* {{{ */ if(!$this->previewDir) return false; - $target = $this->previewDir.$dir.md5($infile); + if(!$target) + $target = $this->previewDir.$dir.md5($infile); if($target !== false && file_exists($target.'.pdf') && filectime($target.'.pdf') >= filectime($infile)) { return true; } @@ -193,11 +194,12 @@ class SeedDMS_Preview_PdfPreviewer extends SeedDMS_Preview_Base { * @param string $dir directory relative to $this->previewDir * @return boolean/string image content if preview exists, otherwise false */ - public function getRawPreview($infile, $dir) { /* {{{ */ + public function getRawPreview($infile, $dir, $target='') { /* {{{ */ if(!$this->previewDir) return false; - $target = $this->previewDir.$dir.md5($infile); + if(!$target) + $target = $this->previewDir.$dir.md5($infile); if($target && file_exists($target.'.pdf')) { $this->sendFile($target.'.pdf'); } diff --git a/SeedDMS_Preview/package.xml b/SeedDMS_Preview/package.xml index 47a068c53..9bb36ad03 100644 --- a/SeedDMS_Preview/package.xml +++ b/SeedDMS_Preview/package.xml @@ -11,11 +11,11 @@ uwe@steinmann.cx yes - 2020-02-17 + 2020-03-21 - 1.3.0 - 1.3.0 + 1.3.1 + 1.3.1 stable @@ -23,7 +23,7 @@ GPL License -add new methode getPreviewFile() +add parameter $target to SeedDMS_Preview_pdfPreviewer::hasRawPreview() and SeedDMS_Preview_pdfPreviewer::getRawPreview() @@ -420,5 +420,21 @@ new parameter for enabling/disabling xsendfile fix creation of pdf preview if document content class is not SeedDMS_Core_DocumentContent + + 2020-02-17 + + + 1.3.0 + 1.3.0 + + + stable + stable + + GPL License + +add new methode getPreviewFile() + + diff --git a/controllers/class.PdfPreview.php b/controllers/class.PdfPreview.php new file mode 100644 index 000000000..dfe10ef71 --- /dev/null +++ b/controllers/class.PdfPreview.php @@ -0,0 +1,74 @@ + + * @copyright Copyright (C) 2010-2013 Uwe Steinmann + * @version Release: @package_version@ + */ + +/** + * Class which does the busines logic for previewing a document + * + * @category DMS + * @package SeedDMS + * @author Uwe Steinmann + * @copyright Copyright (C) 2010-2013 Uwe Steinmann + * @version Release: @package_version@ + */ +class SeedDMS_Controller_PdfPreview extends SeedDMS_Controller_Common { + + public function run() { + global $theme; + $dms = $this->params['dms']; + $type = $this->params['type']; + $settings = $this->params['settings']; + + switch($type) { + case "version": + $version = $this->params['version']; + $document = $this->params['document']; + if($version < 1) { + $content = $this->callHook('documentLatestContent', $document); + if($content === null) + $content = $document->getLatestContent(); + } else { + $content = $this->callHook('documentContent', $document, $version); + if($content === null) + $content = $document->getContentByVersion($version); + } + if (!is_object($content)) { + $this->errormsg = 'invalid_version'; + return false; + } + /* set params['content'] for compatiblity with older extensions which + * expect the content in the controller + */ + $this->params['content'] = $content; + if(null === $this->callHook('version')) { + $previewer = new SeedDMS_Preview_PdfPreviewer($settings->_cacheDir, $settings->_cmdTimeout); + $previewer->setConverters(isset($settings->_converters['pdf']) ? $settings->_converters['pdf'] : array()); + $previewer->setXsendfile($settings->_enableXsendfile); + if(!$previewer->hasPreview($content)) { + add_log_line(""); + if(!$previewer->createPreview($content)) { + add_log_line("", PEAR_LOG_ERR); + } + } + if(!$previewer->hasPreview($content)) { + header('Content-Type: application/pdf'); + readfile('../views/'.$theme.'/images/empty.pdf'); + exit; + } + header('Content-Type: application/pdf'); + $previewer->getPreview($content); + } + break; + } + return true; + } +} diff --git a/controllers/class.Preview.php b/controllers/class.Preview.php index 4ddd7b5cc..e0cc065f2 100644 --- a/controllers/class.Preview.php +++ b/controllers/class.Preview.php @@ -52,7 +52,7 @@ class SeedDMS_Controller_Preview extends SeedDMS_Controller_Common { $this->params['content'] = $content; if(null === $this->callHook('version')) { if($width) - $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $width); + $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $width, $settings->_cmdTimeout); else $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir); $previewer->setConverters($settings->_converters['preview']); diff --git a/controllers/class.RemoveDocument.php b/controllers/class.RemoveDocument.php index e522ed268..d4b1950f7 100644 --- a/controllers/class.RemoveDocument.php +++ b/controllers/class.RemoveDocument.php @@ -39,13 +39,16 @@ class SeedDMS_Controller_RemoveDocument extends SeedDMS_Controller_Common { if(false === $this->callHook('preRemoveDocument')) { if(empty($this->errormsg)) $this->errormsg = 'hook_preRemoveDocument_failed'; - return null; + return false; } $result = $this->callHook('removeDocument', $document); if($result === null) { if (!$document->remove()) { - $this->errormsg = "error_occured"; + if($dms->lasterror) + $this->errormsg = $dms->lasterror; + else + $this->errormsg = "error_occured"; return false; } } elseif($result === false) { diff --git a/controllers/class.RemoveFolder.php b/controllers/class.RemoveFolder.php index c7c4e01b0..b12c10eae 100644 --- a/controllers/class.RemoveFolder.php +++ b/controllers/class.RemoveFolder.php @@ -37,7 +37,7 @@ class SeedDMS_Controller_RemoveFolder extends SeedDMS_Controller_Common { if(false === $this->callHook('preRemoveFolder')) { if(empty($this->errormsg)) $this->errormsg = 'hook_preRemoveFolder_failed'; - return null; + return false; } $result = $this->callHook('removeFolder', $folder); diff --git a/ext/example/conf.php b/ext/example/conf.php index 05ac31fbc..1046fd6b0 100644 --- a/ext/example/conf.php +++ b/ext/example/conf.php @@ -49,7 +49,7 @@ $EXT_CONF['example'] = array( ), ), 'constraints' => array( - 'depends' => array('php' => '5.4.4-', 'seeddms' => '4.3.0-'), + 'depends' => array('php' => '5.6.40-', 'seeddms' => '5.1.0-'), ), 'icon' => 'icon.png', 'changelog' => 'changelog.md', 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..352c7cead 100644 --- a/inc/inc.ClassAccessOperation.php +++ b/inc/inc.ClassAccessOperation.php @@ -67,7 +67,7 @@ class SeedDMS_AccessOperation { $version = $this->obj->getContentByVersion($vno); else $version = $this->obj->getLatestContent(); - if (!isset($this->settings->_editOnlineFileTypes) || !is_array($this->settings->_editOnlineFileTypes) || !in_array(strtolower($version->getFileType()), $this->settings->_editOnlineFileTypes) || !in_array(strtolower($version->getMimeType()), $this->settings->_editOnlineFileTypes)) + if (!isset($this->settings->_editOnlineFileTypes) || !is_array($this->settings->_editOnlineFileTypes) || (!in_array(strtolower($version->getFileType()), $this->settings->_editOnlineFileTypes) && !in_array(strtolower($version->getMimeType()), $this->settings->_editOnlineFileTypes))) return false; if ($this->obj->getAccessMode($this->user) == M_ALL || $this->user->isAdmin()) { return true; @@ -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.ClassExtensionMgr.php b/inc/inc.ClassExtensionMgr.php index e2dcd2c3e..1776eb79f 100644 --- a/inc/inc.ClassExtensionMgr.php +++ b/inc/inc.ClassExtensionMgr.php @@ -368,14 +368,27 @@ class SeedDMS_Extension_Mgr { switch($dkey) { case 'seeddms': $version = new SeedDMS_Version; - $tmp = explode('-', $dval, 2); - if(self::cmpVersion($tmp[0], $version->version()) > 0 || ($tmp[1] && self::cmpVersion($tmp[1], $version->version()) < 0)) - $this->errmsgs[] = sprintf("Incorrect SeedDMS version (needs version %s)", $extconf['constraints']['depends']['seeddms']); + if(is_array($dval)) { + $fullfill = false; + foreach($dval as $ddval) { + $tmp = explode('-', $ddval, 2); + if(self::cmpVersion($tmp[0], $version->version()) > 0 || ($tmp[1] && self::cmpVersion($tmp[1], $version->version()) < 0)) + ; // No within version range + else + $fullfill = true; + } + if(!$fullfill) + $this->errmsgs[] = sprintf("Incorrect SeedDMS version (needs version \"%s\")", implode('" or "', $dval)); + } elseif(is_string($dval)) { + $tmp = explode('-', $dval, 2); + if(self::cmpVersion($tmp[0], $version->version()) > 0 || ($tmp[1] && self::cmpVersion($tmp[1], $version->version()) < 0)) + $this->errmsgs[] = sprintf("Incorrect SeedDMS version (needs version %s)", $extconf['constraints']['depends']['seeddms']); + } break; case 'php': $tmp = explode('-', $dval, 2); if(self::cmpVersion($tmp[0], phpversion()) > 0 || ($tmp[1] && self::cmpVersion($tmp[1], phpversion()) < 0)) - $this->errmsgs[] = sprintf("Incorrect PHP version (needs version %s)", $extconf['constraints']['depends']['php']); + $this->errmsgs[] = sprintf("Incorrect PHP version (needs version %s)", $dval); break; case 'phpext': if(is_array($dval) && $dval) { @@ -565,7 +578,7 @@ class SeedDMS_Extension_Mgr { public function updateExtensionList($version='', $force=false) { /* {{{ */ if($this->reposurl) { if(!file_exists($this->cachedir."/".self::repos_list_file) || $force) { - if($file = @file_get_contents($this->reposurl.($version ? '?seeddms_version='.$version : ''), false, $this->getStreamContext())) { + if(false !== ($file = @file_get_contents($this->reposurl.($version ? '?seeddms_version='.$version : ''), false, $this->getStreamContext()))) { if(is_array($http_response_header)) { $parts=explode(' ',$http_response_header[0]); if(count($parts)>1) //HTTP/1.0 @@ -574,6 +587,10 @@ class SeedDMS_Extension_Mgr { return false; } } + if(!$file) { + $this->errmsgs[] = 'Extension list is empty'; + return false; + } file_put_contents($this->cachedir."/".self::repos_list_file, $file); } else { return false; 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..78f796a0b 100644 --- a/inc/inc.ClassSession.php +++ b/inc/inc.ClassSession.php @@ -294,7 +294,7 @@ class SeedDMS_Session { function addToClipboard($object) { /* {{{ */ /* id is only set if load() was called before */ if($this->id) { - $dms = $object->_dms; + $dms = $object->getDMS(); if($object->isType('document')) { if(!in_array($object->getID(), $this->data['clipboard']['docs'])) array_push($this->data['clipboard']['docs'], $object->getID()); @@ -317,7 +317,7 @@ class SeedDMS_Session { function removeFromClipboard($object) { /* {{{ */ /* id is only set if load() was called before */ if($this->id) { - $dms = $object->_dms; + $dms = $object->getDMS(); if($object->isType('document')) { $key = array_search($object->getID(), $this->data['clipboard']['docs']); if($key !== false) @@ -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..9abad35cf 100644 --- a/inc/inc.ClassUI.php +++ b/inc/inc.ClassUI.php @@ -134,8 +134,8 @@ class UI extends UI_Default { $view->setParam('dropfolderdir', $settings->_dropFolderDir); $view->setParam('enablesessionlist', $settings->_enableSessionList); $view->setParam('workflowmode', $settings->_workflowMode); - $view->setParam('partitionsize', (int) $settings->_partitionSize); - $view->setParam('maxuploadsize', (int) $settings->_maxUploadSize); + $view->setParam('partitionsize', SeedDMS_Core_File::parse_filesize( $settings->_partitionSize)); + $view->setParam('maxuploadsize', SeedDMS_Core_File::parse_filesize($settings->_maxUploadSize)); $view->setParam('showmissingtranslations', $settings->_showMissingTranslations); $view->setParam('defaultsearchmethod', $settings->_defaultSearchMethod); $view->setParam('cachedir', $settings->_cacheDir); @@ -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..1d8f1245b 100644 --- a/inc/inc.ClassViewCommon.php +++ b/inc/inc.ClassViewCommon.php @@ -69,6 +69,16 @@ class SeedDMS_View_Common { return null; } + /** + * Check if the view has a parameter with the given name + * + * @param string $name name of parameter + * @return boolean true if parameter exists otherwise false + */ + function hasParam($name) { + return isset($this->params[$name]) ? true : false; + } + public function unsetParam($name) { if(isset($this->params[$name])) unset($this->params[$name]); @@ -209,4 +219,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.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'])) { 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'; -?> diff --git a/inc/inc.Version.php b/inc/inc.Version.php index d4e7d8127..d564f80df 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.17"; const _string = "SeedDMS"; function __construct() { diff --git a/index.php b/index.php index ee083d8a2..c70f392f0 100644 --- a/index.php +++ b/index.php @@ -26,13 +26,13 @@ if(true) { include("inc/inc.Init.php"); include("inc/inc.Extension.php"); include("inc/inc.DBInit.php"); - include("inc/inc.Authentication.php"); +// include("inc/inc.Authentication.php"); require "vendor/autoload.php"; $c = new \Slim\Container(); //Create Your container - $c['notFoundHandler'] = function ($c) use ($settings, $dms, $user, $theme) { - return function ($request, $response) use ($c, $settings, $dms, $user, $theme) { + $c['notFoundHandler'] = function ($c) use ($settings, $dms) { + return function ($request, $response) use ($c, $settings, $dms) { $uri = $request->getUri(); if($uri->getBasePath()) $file = $uri->getPath(); @@ -55,7 +55,7 @@ if(true) { if(isset($GLOBALS['SEEDDMS_HOOKS']['initDMS'])) { foreach($GLOBALS['SEEDDMS_HOOKS']['initDMS'] as $hookObj) { if (method_exists($hookObj, 'addRoute')) { - $hookObj->addRoute(array('dms'=>$dms, 'user'=>$user, 'app'=>$app, 'settings'=>$settings)); + $hookObj->addRoute(array('dms'=>$dms, 'app'=>$app, 'settings'=>$settings)); } } } diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index 63f56d809..b7413aa43 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/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 (2262) +// Translators: Admin (2263) $text = array( '2_factor_auth' => 'توثيق ذو عاملين', @@ -295,6 +295,7 @@ URL: [url]', 'converter_new_cmd' => 'converter_new_cmd', 'converter_new_mimetype' => 'نوع جديد من الوثائق', 'copied_to_checkout_as' => 'نسخ الى السب مثل', +'create_download_link' => '', 'create_fulltext_index' => 'انشاء فهرس للنص الكامل', 'create_fulltext_index_warning' => 'انت على وشك اعادة انشاء فهرس النص الكامل.هذا سيتطلب وقت كافي وسيؤثر بشكل عام على كفاءة النظام. اذا كنت حقا تود اعادة انشاء الفهرس، من فضلك قم بتاكيد العملية.', 'creation_date' => 'انشأ في تاريخ', @@ -414,7 +415,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'صلاحيات موروثة', 'download' => 'تنزيل', 'download_extension' => 'تنزيل طويل', +'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_state' => '', 'download_links' => 'تنزيل روابط', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'إصلاح كل المستندات والمجلدات.', 'do_object_setchecksum' => 'تحديد فحص اخطاء', 'do_object_setfilesize' => 'تحديد حجم الملف', @@ -771,6 +786,7 @@ URL: [url]', 'my_documents' => 'مستنداتي', 'my_transmittals' => 'الإحالات الخاصة بي', 'name' => 'اسم', +'nb_NO' => '', 'needs_correction' => 'يحتاج الى تصحيح', 'needs_workflow_action' => 'هذا المستند يتطلب انتباهك . من فضلك تفقد زر مسار العمل', 'network_drive' => 'قرص النترنت', @@ -1040,7 +1056,7 @@ URL: [url]', 'revision_status' => 'حالة المراجعة', 'revision_submit_email_body' => 'تم تقديم مراجعة محتوى البريد الإلكتروني', 'revision_submit_email_subject' => 'تم تقديم مراجعة موضوع البريد الإلكتروني', -'revision_summary' => '', +'revision_summary' => 'ﻢﻠﺨﺻ ﻡﺭﺎﺠﻋﺓ', 'revisors' => 'المراجعين', 'revisor_already_assigned' => 'تم تعيين المراجع', 'revisor_already_removed' => 'تم إزالة المراجع', @@ -1543,6 +1559,7 @@ URL: [url]', 'site_brand' => 'مجلس النواب اللبناني', 'sk_SK' => 'السلوفاكية', 'sort_by_date' => 'رتب حسب التاريخ', +'sort_by_expiration_date' => '', 'sort_by_name' => 'رتب حسب الإسم', 'sort_by_sequence' => 'رتب حسب التراتبية', 'space_used_on_data_folder' => 'المساحة المستخدمة لمجلد البيانات', @@ -1652,6 +1669,8 @@ URL: [url]', 'submit_review' => 'بدأ المراجعة', 'submit_revision' => 'تقديم مراجعة', 'submit_userinfo' => 'ادخال بيانات', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => 'تغذية الجدول الزمني', 'substitute_to_user' => 'بديلا للمستخدم', 'substitute_user' => 'استبدال المستخدم', @@ -1673,6 +1692,7 @@ URL: [url]', 'takeOverIndReviewer' => 'اخذ فهرسة المراجع', 'takeOverIndReviewers' => '', 'tasks' => 'مهمات', +'task_core_expireddocs_days' => '', 'task_description' => 'تفصيل المهام', 'task_disabled' => 'تم توقيف المهمة', 'task_frequency' => 'تردد المهمة', @@ -1708,6 +1728,7 @@ URL: [url]', 'to' => 'الى', 'toggle_manager' => 'رجح مدير', 'toggle_qrcode' => 'toggle toggle', +'total' => '', 'to_before_from' => 'إلى قبل من', 'transfer_content' => 'تحويل المحتوى', 'transfer_document' => 'تحويل مستند', @@ -1811,6 +1832,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 a6dd6ec83..86ea1e7d3 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -278,6 +278,7 @@ $text = array( 'converter_new_cmd' => '', 'converter_new_mimetype' => '', 'copied_to_checkout_as' => '', +'create_download_link' => '', 'create_fulltext_index' => 'Създай пълнотекстов индекс', 'create_fulltext_index_warning' => 'Вие искате да пресъздадете пълнотекстов индекс. Това ще отнеме време и ще понижи производителността. Да продолжа ли?', 'creation_date' => 'Създаден', @@ -367,7 +368,21 @@ $text = array( 'does_not_inherit_access_msg' => 'Наследване нивото на достъп', 'download' => 'Изтегли', 'download_extension' => '', +'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_state' => '', 'download_links' => '', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Поправи всички папки и документи', 'do_object_setchecksum' => 'Установи контролна сума', 'do_object_setfilesize' => 'Установи размер на файла', @@ -700,6 +715,7 @@ $text = array( 'my_documents' => 'Моите документи', 'my_transmittals' => '', 'name' => 'Име', +'nb_NO' => '', 'needs_correction' => '', 'needs_workflow_action' => '', 'network_drive' => '', @@ -1406,6 +1422,7 @@ $text = array( 'site_brand' => '', 'sk_SK' => 'Словашки', 'sort_by_date' => 'Сортирай по дата"', +'sort_by_expiration_date' => '', 'sort_by_name' => 'Сортирай по име', 'sort_by_sequence' => '', 'space_used_on_data_folder' => 'Размер на каталога с данните', @@ -1515,6 +1532,8 @@ $text = array( 'submit_review' => 'Рецензирай', 'submit_revision' => '', 'submit_userinfo' => 'Изпрати информация за потребител', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => '', 'substitute_user' => 'Заместващ потребител', @@ -1536,6 +1555,7 @@ $text = array( 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', 'tasks' => '', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1571,6 +1591,7 @@ $text = array( 'to' => 'към', 'toggle_manager' => 'Превключи мениджър', 'toggle_qrcode' => '', +'total' => '', 'to_before_from' => '', 'transfer_content' => '', 'transfer_document' => 'Прехвърли документ', @@ -1660,6 +1681,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 74a04a389..f2b1b34d5 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_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: Admin (749) +// Translators: Admin (752) $text = array( '2_factor_auth' => '', @@ -283,6 +283,7 @@ URL: [url]', 'converter_new_cmd' => '', 'converter_new_mimetype' => '', 'copied_to_checkout_as' => '', +'create_download_link' => '', 'create_fulltext_index' => 'Crea un índex full-text', 'create_fulltext_index_warning' => '', 'creation_date' => 'Creació', @@ -372,7 +373,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'heretar l\'accés', 'download' => 'Descarregar', 'download_extension' => '', +'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_state' => '', 'download_links' => '', +'do_no_transfer_to_user' => '', 'do_object_repair' => '', 'do_object_setchecksum' => '', 'do_object_setfilesize' => '', @@ -703,8 +718,9 @@ URL: [url]', 'move_folder' => 'Moure directori', 'my_account' => 'El meu compte', 'my_documents' => 'Els meus documents', -'my_transmittals' => '', +'my_transmittals' => 'Documents enviats per mi', 'name' => 'Nom', +'nb_NO' => '', 'needs_correction' => '', 'needs_workflow_action' => '', 'network_drive' => '', @@ -777,7 +793,7 @@ URL: [url]', 'october' => 'Octubre', 'old' => 'Vell', 'only_jpg_user_images' => 'Només pot utilitzar imatges .jpg com imatges d\'usuari', -'order_by_sequence_off' => '', +'order_by_sequence_off' => 'L\'ordenació per seqüència és desactivada a la configuració. Si vol que aquest paràmetre sigui efectiu, haurà d\'activar-lo.', 'original_filename' => '', 'overall_indexing_progress' => '', 'owner' => 'Propietari/a', @@ -843,7 +859,7 @@ URL: [url]', 'receipt_status' => '', 'receipt_summary' => '', 'receipt_update_failed' => '', -'recent_uploads' => '', +'recent_uploads' => 'Documents pujats recentment', 'reception' => '', 'reception_acknowleged' => '', 'reception_noaction' => '', @@ -1411,6 +1427,7 @@ URL: [url]', 'site_brand' => '', 'sk_SK' => 'Eslovac', 'sort_by_date' => '', +'sort_by_expiration_date' => '', 'sort_by_name' => '', 'sort_by_sequence' => '', 'space_used_on_data_folder' => 'Espai utilitzat a la carpeta de dades', @@ -1520,6 +1537,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', @@ -1541,6 +1560,7 @@ URL: [url]', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', 'tasks' => '', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1576,6 +1596,7 @@ URL: [url]', 'to' => 'Fins', 'toggle_manager' => 'Intercanviar manager', 'toggle_qrcode' => '', +'total' => '', 'to_before_from' => '', 'transfer_content' => '', 'transfer_document' => 'transferir document', @@ -1665,6 +1686,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 bde271cb4..8d1e815ae 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/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 (1530), kreml (579) +// Translators: Admin (1531), kreml (579) $text = array( '2_factor_auth' => 'dvoufaktorové ověření', @@ -307,6 +307,7 @@ URL: [url]', 'converter_new_cmd' => 'Příkaz', 'converter_new_mimetype' => 'Nový mimetype', 'copied_to_checkout_as' => 'Soubor zkopírován do kontrolního prostoru jako \'[filename]\' v [date]', +'create_download_link' => '', 'create_fulltext_index' => 'Vytvořit fulltext index', 'create_fulltext_index_warning' => 'Hodláte znovu vytvořit fulltext index. Může to trvat dlouho a zpomalit běh systému. Pokud víte, co děláte, potvďte operaci.', 'creation_date' => 'Vytvořeno', @@ -438,7 +439,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'Zdědit přístup', 'download' => 'Stáhnout', 'download_extension' => 'Stáhnout rozšíření jako soubor 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_state' => '', 'download_links' => 'Odkazy ke stažení', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Opravit všechny složky a dokumenty.', 'do_object_setchecksum' => 'Nastavit kontrolní součet', 'do_object_setfilesize' => 'Nastavit velikost souboru', @@ -802,6 +817,7 @@ URL: [url]', 'my_documents' => 'Moje dokumenty', 'my_transmittals' => 'Moje přenosy', 'name' => 'Název', +'nb_NO' => 'Norština Bokmal', 'needs_correction' => 'Vyžaduje opravu', 'needs_workflow_action' => 'Tento dokument vyžaduje vaši pozornost. Zkontrolujte prosím kartu workflow.', 'network_drive' => 'Síťové úložiště', @@ -1615,6 +1631,7 @@ Jméno: [username] 'site_brand' => '', 'sk_SK' => 'Slovenština', 'sort_by_date' => '', +'sort_by_expiration_date' => '', 'sort_by_name' => 'Třídit podle jména', 'sort_by_sequence' => '', 'space_used_on_data_folder' => 'Použité místo pro data složky', @@ -1724,6 +1741,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', @@ -1745,6 +1764,7 @@ Jméno: [username] 'takeOverIndReviewer' => 'Převzít jednotlivého recenzenta z poslední verze.', 'takeOverIndReviewers' => '', 'tasks' => 'Úkoly', +'task_core_expireddocs_days' => '', 'task_description' => 'Popis', 'task_disabled' => 'Vypnuto', 'task_frequency' => 'Frekvence', @@ -1780,6 +1800,7 @@ Jméno: [username] 'to' => 'Do', 'toggle_manager' => 'Přepnout správce', 'toggle_qrcode' => 'Zobrazit / skrýt QR kód', +'total' => '', 'to_before_from' => 'Datum ukončení nesmí být před datem zahájení', 'transfer_content' => '', 'transfer_document' => 'Přenést dokument', @@ -1883,6 +1904,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 dac2d9192..07a7ba8a3 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 (2749), dgrutsch (22) +// Translators: Admin (2770), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -307,6 +307,7 @@ URL: [url]', 'converter_new_cmd' => 'Kommando', 'converter_new_mimetype' => 'Neuer Mime-Type', 'copied_to_checkout_as' => 'Datei am [date] in den Checkout-Space als \'[filename]\' kopiert.', +'create_download_link' => '', 'create_fulltext_index' => 'Erzeuge Volltext-Index', 'create_fulltext_index_warning' => 'Sie möchten den Volltext-Index neu erzeugen. Dies kann beträchtlich Zeit in Anspruch nehmen und Gesamtleistung Ihres System beeinträchtigen. Bestätigen Sie bitte diese Operation.', 'creation_date' => 'Erstellt am', @@ -438,7 +439,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'Berechtigungen wieder erben', 'download' => 'Download', 'download_extension' => 'Erweiterung als zip-Datei herunterladen', +'download_header_approval_comment' => 'Freigabekommentar', +'download_header_approval_date' => 'Freigabedatum', +'download_header_approval_state' => 'Freigabestatus', +'download_header_approver' => 'Freigeber', +'download_header_document_name' => 'Dokumentenname', +'download_header_document_no' => 'Dokumenten-Nr.', +'download_header_filename' => 'Dateiname', +'download_header_internal_version' => 'Int. Version', +'download_header_reviewer' => 'Prüfer', +'download_header_review_comment' => 'Prüfkommentar', +'download_header_review_date' => 'Prüfdatum', +'download_header_review_state' => 'Prüfstatus', +'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.', 'do_object_setchecksum' => 'Setze Check-Summe', 'do_object_setfilesize' => 'Setze Dateigröße', @@ -802,6 +817,7 @@ URL: [url]', 'my_documents' => 'Meine Dokumente', 'my_transmittals' => 'Meine Dokumentenlisten', 'name' => 'Name', +'nb_NO' => 'Norwegisch', 'needs_correction' => 'Korrektur erforderlich', 'needs_workflow_action' => 'Dieses Dokument erfordert eine Aktion. Bitte schauen Sie auf den Workflow-Reiter.', 'network_drive' => 'Netzwerklaufwerk', @@ -1626,6 +1642,7 @@ Name: [username] 'site_brand' => '', 'sk_SK' => 'Slovakisch', 'sort_by_date' => 'Nach Datum sortieren', +'sort_by_expiration_date' => 'Nach Ablaufdatum sortieren', 'sort_by_name' => 'Nach Name sortieren', 'sort_by_sequence' => 'Nach Reihenfolge sortieren', 'space_used_on_data_folder' => 'Benutzter Plattenplatz', @@ -1735,6 +1752,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', @@ -1756,6 +1775,7 @@ Name: [username] 'takeOverIndReviewer' => 'Übernehme die Einzelprüfer von der letzten Version.', 'takeOverIndReviewers' => 'Einzelprüfer übernehmen', 'tasks' => 'Aufgaben', +'task_core_expireddocs_days' => 'Tage', 'task_description' => 'Beschreibung', 'task_disabled' => 'Deaktiviert', 'task_frequency' => 'Häufigkeit', @@ -1791,6 +1811,7 @@ Name: [username] 'to' => 'bis', 'toggle_manager' => 'Managerstatus wechseln', 'toggle_qrcode' => 'Zeige/verberge QR-Code', +'total' => 'Gesamt', 'to_before_from' => 'Endedatum darf nicht vor dem Startdatum liegen', 'transfer_content' => 'Inhalt übertragen', 'transfer_document' => 'Dokument übertragen', @@ -1894,6 +1915,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 20806504c..3a37f9b78 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 (322) $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' => '', @@ -278,6 +278,7 @@ $text = array( 'converter_new_cmd' => '', 'converter_new_mimetype' => '', 'copied_to_checkout_as' => '', +'create_download_link' => '', 'create_fulltext_index' => '', 'create_fulltext_index_warning' => '', 'creation_date' => 'Δημιουργήθηκε', @@ -346,7 +347,7 @@ $text = array( 'document_is_checked_out' => '', 'document_is_not_locked' => '', 'document_link_by' => '', -'document_link_public' => '', +'document_link_public' => 'Δημόσιο', 'document_moved_email' => 'Το έγγραφα μετακινήθηκε', 'document_moved_email_body' => '', 'document_moved_email_subject' => '', @@ -363,11 +364,25 @@ $text = array( 'document_updated_email' => '', 'document_updated_email_body' => '', 'document_updated_email_subject' => '', -'does_not_expire' => '', +'does_not_expire' => 'Δεν λήγει', 'does_not_inherit_access_msg' => '', -'download' => '', +'download' => 'Λήψη', 'download_extension' => '', +'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_state' => '', 'download_links' => '', +'do_no_transfer_to_user' => '', 'do_object_repair' => '', 'do_object_setchecksum' => '', 'do_object_setfilesize' => '', @@ -452,14 +467,14 @@ $text = array( 'expired_at_date' => '', 'expired_documents' => '', 'expires' => 'Λήγει', -'expire_by_date' => '', +'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' => 'Η ημερομηνία λήξης έχει αλλάξει', @@ -565,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' => '', @@ -641,11 +656,11 @@ $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' => '', -'local_file' => '', +'local_file' => 'Τοπικό αρχείο', 'locked_by' => '', 'lock_document' => 'Κλείδωμα', 'lock_message' => '', @@ -674,7 +689,7 @@ $text = array( 'mandatory_reviewers' => '', 'mandatory_reviewer_no_access' => '', 'march' => 'Μάρτιος', -'max_upload_size' => '', +'max_upload_size' => 'Μέγιστο μέγεθος μεταφόρτωσης', 'may' => 'Μάϊος', 'menu_dropfolder' => '', 'menu_upload_from_dropfolder' => '', @@ -700,6 +715,7 @@ $text = array( 'my_documents' => 'Τα έγγραφα μου', 'my_transmittals' => '', 'name' => 'Όνομα', +'nb_NO' => 'Νορβηγικά', 'needs_correction' => '', 'needs_workflow_action' => '', 'network_drive' => '', @@ -747,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' => '', @@ -765,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' => '', @@ -817,8 +833,8 @@ URL: [url]', 'personal_default_keywords' => '', 'pl_PL' => 'Πολωνικά', 'possible_substitutes' => '', -'preset_expires' => '', -'preview' => '', +'preset_expires' => 'Λήξη προκαθορισμένης τιμής', +'preview' => 'προεπισκόπηση', 'preview_converters' => '', 'preview_images' => '', 'preview_markdown' => '', @@ -998,7 +1014,7 @@ URL: [url]', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Επιλογή κατηγορίας', -'select_group' => '', +'select_group' => 'Επιλογή ομάδας', 'select_groups' => '', 'select_grp_approvers' => '', 'select_grp_ind_approvers' => '', @@ -1006,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' => '', @@ -1404,7 +1420,7 @@ URL: [url]', 'settings_workflowMode_valtraditional_only_approval' => '', 'settings_zendframework' => '', 'set_expiry' => '', -'set_owner' => '', +'set_owner' => 'Θέσε Ιδιοκτήτη', 'set_owner_error' => '', 'set_password' => '', 'set_workflow' => '', @@ -1417,6 +1433,7 @@ URL: [url]', 'site_brand' => '', 'sk_SK' => 'Σλοβάκικα', 'sort_by_date' => '', +'sort_by_expiration_date' => '', 'sort_by_name' => '', 'sort_by_sequence' => '', 'space_used_on_data_folder' => '', @@ -1526,6 +1543,8 @@ URL: [url]', 'submit_review' => '', 'submit_revision' => '', 'submit_userinfo' => '', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => '', 'substitute_user' => 'Αντικατάσταση Χρήστη', @@ -1547,6 +1566,7 @@ URL: [url]', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', 'tasks' => '', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1582,6 +1602,7 @@ URL: [url]', 'to' => 'Προς', 'toggle_manager' => '', 'toggle_qrcode' => '', +'total' => '', 'to_before_from' => '', 'transfer_content' => '', 'transfer_document' => 'Μεταφορά εγγράφου', @@ -1600,14 +1621,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' => '', @@ -1627,7 +1648,7 @@ URL: [url]', 'unlock_document' => '', 'update' => 'Ενημέρωση', 'update_approvers' => '', -'update_document' => '', +'update_document' => 'Ενημέρωση εγγράφου', 'update_fulltext_index' => '', 'update_info' => '', 'update_locked_msg' => '', @@ -1635,7 +1656,7 @@ URL: [url]', 'update_reviewers' => '', 'update_revisors' => '', 'update_transmittalitem' => '', -'uploaded_by' => '', +'uploaded_by' => 'ανέβηκε από', 'uploading_failed' => '', 'uploading_maxsize' => '', 'uploading_zerosize' => '', @@ -1654,9 +1675,9 @@ URL: [url]', 'user_login' => '', 'user_management' => 'Διαχείριση χρηστών', 'user_name' => 'Πλήρες Όνομα', -'use_comment_of_document' => '', +'use_comment_of_document' => 'Χρήση σχολίου εγγράφου', 'use_default_categories' => '', -'use_default_keywords' => '', +'use_default_keywords' => 'Χρήση προκαθορισμένων λέξεων κλειδιών', 'valid_till' => '', 'version' => 'Έκδοση', 'versioning_file_creation' => '', @@ -1669,8 +1690,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 8e5dc8f40..d4a6ffc36 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 (1848), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1876), 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] @@ -307,6 +307,7 @@ URL: [url]', 'converter_new_cmd' => 'Command', 'converter_new_mimetype' => 'New mimetype', 'copied_to_checkout_as' => 'File copied to checkout space as \'[filename]\' on [date]', +'create_download_link' => '', 'create_fulltext_index' => 'Create fulltext index', 'create_fulltext_index_warning' => 'You are about to recreate the fulltext index. This can take a considerable amount of time and reduce your overall system performance. If you really want to recreate the index, please confirm your operation.', 'creation_date' => 'Created', @@ -438,7 +439,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'Inherit access', 'download' => 'Download', 'download_extension' => 'Download extension as zip file', +'download_header_approval_comment' => 'Approval comment', +'download_header_approval_date' => 'Approval date', +'download_header_approval_state' => 'Approval status', +'download_header_approver' => 'Approver', +'download_header_document_name' => 'Document name', +'download_header_document_no' => 'Document no', +'download_header_filename' => 'File name', +'download_header_internal_version' => 'Int. version', +'download_header_reviewer' => 'Reviewer', +'download_header_review_comment' => 'Review comment', +'download_header_review_date' => 'Review date', +'download_header_review_state' => 'Review 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.', 'do_object_setchecksum' => 'Set checksum', 'do_object_setfilesize' => 'Set file size', @@ -802,6 +817,7 @@ URL: [url]', 'my_documents' => 'My Documents', 'my_transmittals' => 'My Transmittals', 'name' => 'Name', +'nb_NO' => 'Norwegian (Bokmål)', 'needs_correction' => 'Needs correction', 'needs_workflow_action' => 'This document requires your attention. Please check the workflow tab.', 'network_drive' => 'Network drive', @@ -1620,6 +1636,7 @@ Name: [username] 'site_brand' => '', 'sk_SK' => 'Slovak', 'sort_by_date' => 'Sort by date', +'sort_by_expiration_date' => 'Sort by date of expiration', 'sort_by_name' => 'Sort by name', 'sort_by_sequence' => 'Sort by sequence', 'space_used_on_data_folder' => 'Space used on data folder', @@ -1729,6 +1746,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', @@ -1750,6 +1769,7 @@ Name: [username] 'takeOverIndReviewer' => 'Take over individual reviewer from last version.', 'takeOverIndReviewers' => 'Take Over Individual Reviewers', 'tasks' => 'Tasks', +'task_core_expireddocs_days' => 'Days', 'task_description' => 'Description', 'task_disabled' => 'Disabled', 'task_frequency' => 'Frequency', @@ -1785,6 +1805,7 @@ Name: [username] 'to' => 'To', 'toggle_manager' => 'Toggle manager', 'toggle_qrcode' => 'Show/hide QR code', +'total' => 'Total', 'to_before_from' => 'End date may not be before start date', 'transfer_content' => 'Transfer content', 'transfer_document' => 'Transfer document', @@ -1888,6 +1909,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 1884d2f26..b8e3f6e75 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 (1133), angel (123), francisco (2), jaimem (14) +// Translators: acabello (20), Admin (1171), angel (123), francisco (2), jaimem (14) $text = array( '2_factor_auth' => '', @@ -68,11 +68,11 @@ URL: [url]', 'add_receipt' => '', 'add_review' => 'Enviar revisión', 'add_revision' => '', -'add_role' => '', +'add_role' => 'Agregar Usuario', 'add_subfolder' => 'Añadir subcarpeta', 'add_task' => '', 'add_to_clipboard' => 'Añadir al portapapeles', -'add_to_transmittal' => '', +'add_to_transmittal' => 'Añadir a transmisión', 'add_transmittal' => '', 'add_user' => 'Añadir nuevo usuario', 'add_user_to_group' => 'Añadir usuario a grupo', @@ -131,12 +131,12 @@ URL: [url]', 'approver_already_assigned' => '', 'approver_already_removed' => '', 'april' => 'Abril', -'archive' => '', +'archive' => 'Archivo', 'archive_creation' => 'Creación de archivo', 'archive_creation_warning' => 'Con esta operación usted puede crear un archivo que contenga los ficheros de las carpetas del DMS completo. Después de crearlo el archivo se guardará en la carpeta de datos de su servidor.
CUIDADO: un fichero creado como legible por humanos no podrá usarse como copia de seguridad del servidor.', 'ar_EG' => 'Arabe', 'assign_approvers' => 'Asignar aprobadores', -'assign_recipients' => '', +'assign_recipients' => 'Asignar Receptores', 'assign_reviewers' => 'Asignar revisores', 'assign_user_property_to' => 'Asignar propiedades de usuario a', 'assumed_released' => 'Supuestamente publicado', @@ -231,8 +231,8 @@ URL: [url]', 'change_assignments' => 'cambiar asignaciones', 'change_password' => 'cambiar contraseña', 'change_password_message' => 'Su contraseña se ha modificado.', -'change_recipients' => '', -'change_revisors' => '', +'change_recipients' => 'Definir destinatarios', +'change_revisors' => 'Definir revisores', 'change_status' => 'cambiar estado', 'charts' => 'Gráficos', 'chart_docsaccumulated_title' => 'Cantidad de documentos', @@ -254,7 +254,7 @@ URL: [url]', 'choose_attrdefgroup' => '', 'choose_category' => 'Seleccione categoría', 'choose_group' => 'Seleccione grupo', -'choose_role' => '', +'choose_role' => 'Seleccione Usuario', 'choose_target_category' => 'Seleccione categoría', 'choose_target_document' => 'Seleccione documento', 'choose_target_file' => 'Seleccione fichero destino', @@ -302,6 +302,7 @@ URL: [url]', 'converter_new_cmd' => 'Comando', 'converter_new_mimetype' => 'Nuevo mime type', 'copied_to_checkout_as' => '', +'create_download_link' => '', 'create_fulltext_index' => 'Crear índice de texto completo', 'create_fulltext_index_warning' => 'Usted va a regenerar el índice te texto completo. Esto puede tardar un tiempo considerable y consumir capacidad de su equipo. Si realmente quiere regenerar el índice, por favor confirme la operación.', 'creation_date' => 'Creación', @@ -330,7 +331,7 @@ URL: [url]', 'document' => 'Documento', 'documentcontent' => 'Contenido del documento', 'documents' => 'Documentos', -'documents_checked_out_by_you' => '', +'documents_checked_out_by_you' => 'Documentos verificados por usted', 'documents_expired' => 'Documentos Caducos', 'documents_in_process' => 'Documentos en proceso', 'documents_locked' => '', @@ -339,16 +340,16 @@ URL: [url]', 'documents_to_approve' => 'Documentos en espera de aprobación de usuarios', 'documents_to_correct' => '', 'documents_to_process' => '', -'documents_to_receipt' => '', +'documents_to_receipt' => 'Documentos en espera de confirmar su recepción', 'documents_to_review' => 'Documentos en espera de revisión de usuarios', -'documents_to_revise' => '', +'documents_to_revise' => 'Documentos en espera de su revisión', 'documents_to_trigger_workflow' => '', -'documents_user_draft' => '', -'documents_user_expiration' => '', -'documents_user_needs_correction' => '', -'documents_user_no_reception' => '', -'documents_user_obsolete' => '', -'documents_user_reception' => '', +'documents_user_draft' => 'Borradores', +'documents_user_expiration' => 'Documentos vencidos', +'documents_user_needs_correction' => 'Documentos que necesitan ser corregidos', +'documents_user_no_reception' => 'Documentos sin recepción', +'documents_user_obsolete' => 'Documentos obsoletos', +'documents_user_reception' => 'Documentos en espera de recepción', 'documents_user_rejected' => 'Documentos rechazados', 'documents_user_requiring_attention' => 'Documentos de su propiedad que requieren atención', 'documents_with_notification' => '', @@ -421,13 +422,27 @@ URL: [url]', 'does_not_inherit_access_msg' => 'heredar el acceso', 'download' => 'Descargar', 'download_extension' => 'Descargar como archivo 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_state' => '', 'download_links' => '', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Reparar todas las carpetas y documentos.', 'do_object_setchecksum' => 'Set checksum', 'do_object_setfilesize' => 'Asignar tamaño de fichero', 'do_object_setfiletype' => '', 'do_object_unlink' => 'Borrar versión del documento', -'draft' => '', +'draft' => 'Borrador', 'draft_pending_approval' => 'Borador - pendiente de aprobación', 'draft_pending_review' => 'Borrador - pendiente de revisión', 'drag_icon_here' => 'Arrastre carpeta o documento aquí!', @@ -641,7 +656,7 @@ URL: [url]', 'index_pending' => '', 'index_waiting' => 'Esperando', 'individuals' => 'Individuales', -'individuals_in_groups' => '', +'individuals_in_groups' => 'Miembros del grupo', 'info_recipients_tab_not_released' => '', 'inherited' => 'heredado', 'inherits_access_copy_msg' => 'Copiar lista de acceso heredado', @@ -671,7 +686,7 @@ URL: [url]', 'invalid_user_id' => 'ID de usuario no válido', 'invalid_version' => 'Versión de documento no válida', 'in_folder' => 'En el directorio', -'in_revision' => '', +'in_revision' => 'En revisión', 'in_workflow' => 'En flujo de trabajo', 'is_disabled' => 'Deshabilitar cuenta', 'is_hidden' => 'Ocultar de la lista de usuarios', @@ -721,7 +736,7 @@ URL: [url]', 'link_to_version' => '', 'list_access_rights' => 'Listar los derechos de acceso', 'list_contains_no_access_docs' => '', -'list_hooks' => '', +'list_hooks' => 'Mis bloques', 'list_tasks' => '', 'local_file' => 'Fichero local', 'locked_by' => 'Bloqueado por', @@ -776,9 +791,10 @@ URL: [url]', 'move_folder' => 'Mover carpeta', 'my_account' => 'Mi cuenta', 'my_documents' => 'Mis documentos', -'my_transmittals' => '', +'my_transmittals' => 'Mi transmision', 'name' => 'Nombre', -'needs_correction' => '', +'nb_NO' => 'Noruego (Bokmål)', +'needs_correction' => 'Necesita corrección', 'needs_workflow_action' => 'Este documento requiere su atención. Por favor chequee la pestaña de flujo de trabajo.', 'network_drive' => '', 'never' => 'nunca', @@ -839,7 +855,7 @@ URL: [url]', 'no_action' => 'No es necesaria ninguna acción', 'no_approval_needed' => 'No hay aprobaciones pendientes.', 'no_attached_files' => 'No hay ficheros adjuntos', -'no_backup_dir' => '', +'no_backup_dir' => 'El directorio de backup no está definido', 'no_current_version' => 'Está utilizando una versión desactualizada de este producto. La última versión disponible es [latestversion].', 'no_default_keywords' => 'No hay palabras clave disponibles', 'no_docs_checked_out' => '', @@ -952,10 +968,10 @@ Si continua teniendo problemas de acceso, por favor contacte con el administrado 'receipt_request_email_body' => '', 'receipt_request_email_subject' => '', 'receipt_status' => '', -'receipt_summary' => '', +'receipt_summary' => 'Resumen de recepción', 'receipt_update_failed' => '', 'recent_uploads' => 'Subidas recientes', -'reception' => '', +'reception' => 'Recepción', 'reception_acknowleged' => '', 'reception_noaction' => '', 'reception_rejected' => '', @@ -1036,7 +1052,7 @@ URL: [url]', 'review_submit_email_subject' => '[sitename]: [name] - Revisión enviada', 'review_summary' => 'Resumen de revisión', 'review_update_failed' => 'Error actualizando el estado de la revisión. La actualización ha fallado.', -'revise_document' => '', +'revise_document' => 'Revisar documento', 'revise_document_on' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', @@ -1049,14 +1065,14 @@ URL: [url]', 'revisions_without_group' => '', 'revisions_without_user' => '', 'revision_date' => '', -'revision_log' => '', +'revision_log' => 'Histórico de revisiones', 'revision_request_email_body' => '', 'revision_request_email_subject' => '', 'revision_status' => '', 'revision_submit_email_body' => '', 'revision_submit_email_subject' => '', -'revision_summary' => '', -'revisors' => '', +'revision_summary' => 'Resumen de revisión', +'revisors' => 'Revisores', 'revisor_already_assigned' => '', 'revisor_already_removed' => '', 'rewind_workflow' => 'Retroceso del flujo de trabajo', @@ -1117,7 +1133,7 @@ URL: [url]', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', 'scheduler_class_tasks' => '', -'scheduler_task_mgr' => '', +'scheduler_task_mgr' => 'Rrogramacion', 'search' => 'Buscar', 'search_fulltext' => 'Buscar en texto completo', 'search_in' => 'Buscar en', @@ -1144,16 +1160,16 @@ URL: [url]', 'select_grp_approvers' => 'Haga Click para seleccionar grupo de aprobadores', 'select_grp_ind_approvers' => '', 'select_grp_ind_notification' => '', -'select_grp_ind_recipients' => '', -'select_grp_ind_reviewers' => '', +'select_grp_ind_recipients' => 'Seleccione grupo', +'select_grp_ind_reviewers' => 'Dar click para seleccionar el grupo', 'select_grp_ind_revisors' => '', 'select_grp_notification' => 'Clic para seleccionar la notificación grupal', -'select_grp_recipients' => '', +'select_grp_recipients' => 'Dar click para selecionar el grupo', 'select_grp_reviewers' => 'Haga Click para seleccionar grupo de revisores', 'select_grp_revisors' => '', 'select_ind_approvers' => 'Haga Click para seleccionar aprobador individual', 'select_ind_notification' => 'Clic para seleccionar la notificación individual', -'select_ind_recipients' => '', +'select_ind_recipients' => 'Dar click para asignar los receptores', 'select_ind_reviewers' => 'Haga Click para seleccionar revisor individual', 'select_ind_revisors' => '', 'select_one' => 'Seleccionar uno', @@ -1558,6 +1574,7 @@ URL: [url]', 'site_brand' => '', 'sk_SK' => 'Slovaco', 'sort_by_date' => 'Ordenar por Fecha', +'sort_by_expiration_date' => '', 'sort_by_name' => 'Ordenar por nombre', 'sort_by_sequence' => 'Ordenar por secuencia', 'space_used_on_data_folder' => 'Espacio usado en la carpeta de datos', @@ -1644,7 +1661,7 @@ URL: [url]', 'status_not_approved' => 'Sin aprobar', 'status_not_receipted' => '', 'status_not_reviewed' => 'Sin revisar', -'status_not_revised' => '', +'status_not_revised' => 'No revisado', 'status_receipted' => '', 'status_receipt_rejected' => '', 'status_recipient_removed' => '', @@ -1667,6 +1684,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', @@ -1687,7 +1706,8 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Tomar control de la revisión de la última versión', 'takeOverIndReviewers' => '', -'tasks' => '', +'tasks' => 'Tareas', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1723,6 +1743,7 @@ URL: [url]', 'to' => 'Hasta', 'toggle_manager' => 'Intercambiar mánager', 'toggle_qrcode' => '', +'total' => '', 'to_before_from' => 'La fecha de finalización no debe ser anterior a la de inicio', 'transfer_content' => '', 'transfer_document' => 'Transferir documento', @@ -1826,6 +1847,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 ce5b6de07..7ba4a3732 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 (1101), jeromerobert (50), lonnnew (9), Oudiceval (767) +// Translators: Admin (1102), jeromerobert (50), lonnnew (9), Oudiceval (929) $text = array( '2_factor_auth' => 'Authentification forte', @@ -36,12 +36,12 @@ $text = array( 'access_mode_read' => 'Lecture', 'access_mode_readwrite' => 'Lecture-écriture', 'access_permission_changed_email' => 'Permission modifiée', -'access_permission_changed_email_body' => 'Permission modifiée -Document: [name] -Dossier parent: [folder_path] -Utilisateur: [username] -URL: [url]', -'access_permission_changed_email_subject' => '[sitename]: [name] - Permission modifiée', +'access_permission_changed_email_body' => 'Permission modifiée +Document : [name] +Dossier parent : [folder_path] +Utilisateur : [username] +URL : [url]', +'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', @@ -90,14 +90,14 @@ URL: [url]', 'and' => 'et', 'apply' => 'Appliquer', 'approvals_accepted' => '[no_approvals] approbations déjà confirmées', -'approvals_accepted_latest' => '', +'approvals_accepted_latest' => '(dont [no_approvals] dans la dernière version)', 'approvals_and_reviews_accepted' => '[no_approvals] approbations et [no_reviews] vérifications déjà confirmées', 'approvals_and_reviews_not_touched' => '[no_approvals] approbations et [no_reviews] vérifications non amorcées', 'approvals_and_reviews_rejected' => '[no_approvals] approbations et [no_reviews] vérifications déjà rejetées', 'approvals_not_touched' => '[no_approvals] approbations non amorcées', -'approvals_not_touched_latest' => '', +'approvals_not_touched_latest' => '(dont [no_approvals] dans la dernière version)', 'approvals_rejected' => '[no_approvals] approbations déjà rejetées', -'approvals_rejected_latest' => '', +'approvals_rejected_latest' => '(dont [no_approvals] dans la dernière version)', 'approvals_without_group' => 'Approbations sans groupe', 'approvals_without_user' => 'Approbations sans utilisateur', 'approval_deletion_email' => 'Demande d\'approbation supprimée', @@ -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', @@ -217,14 +217,14 @@ URL: [url]', 'cancel' => 'Annuler', 'cannot_assign_invalid_state' => 'Impossible de modifier un document obsolète ou rejeté', 'cannot_change_final_states' => 'Attention : Vous ne pouvez pas modifier l’état d\'un document rejeté, expiré ou en attente de vérification ou d’approbation.', -'cannot_delete_user' => 'Ne peut pas effacer l\'utilisateur', +'cannot_delete_user' => 'Impossible de supprimer l’utilisateur', 'cannot_delete_yourself' => 'Vous ne pouvez pas vous supprimer', 'cannot_move_root' => 'Erreur : Impossible de déplacer le dossier racine.', 'cannot_retrieve_approval_snapshot' => 'Impossible de retrouver l\'instantané de statut d\'approbation pour cette version de document.', 'cannot_retrieve_review_snapshot' => 'Impossible de récupérer l’instantané du statut de vérification pour cette version du document.', 'cannot_rm_root' => 'Erreur : Dossier racine ineffaçable.', 'categories' => 'Catégories', -'categories_loading' => 'Veuillez patienter durant le chargement de la liste des catégories…', +'categories_loading' => 'Veuillez patienter pendant le chargement de la liste des catégories…', 'category' => 'Catégorie', 'category_exists' => 'Catégorie déjà existante.', 'category_filter' => 'Uniquement les catégories', @@ -232,7 +232,7 @@ URL: [url]', 'category_in_use' => 'Cette catégorie est en cours d\'utilisation par des documents.', 'category_noname' => 'Aucun nom de catégorie fourni.', 'ca_ES' => 'Catalan', -'changelog_loading' => '', +'changelog_loading' => 'Veuillez patienter pendant le chargement du journal des modifications…', 'change_assignments' => 'Changer les affectations', 'change_password' => 'Changer de mot de passe', 'change_password_message' => 'Votre mot de passe a été changé.', @@ -248,11 +248,11 @@ URL: [url]', 'chart_docsperuser_title' => 'Documents par utilisateur', 'chart_selection' => 'Sélectionnez un graphique', 'chart_sizeperuser_title' => 'Volume par utilisateur', -'checkedout_file_has_different_version' => 'La version bloquée n’est pas identique à la version courante. Le déblocage ne modifiera pas le document.', +'checkedout_file_has_different_version' => 'La version bloquée n’est pas identique à la version actuelle. Le déblocage ne modifiera pas le document.', 'checkedout_file_has_disappeared' => 'Le fichier du document bloqué n’existe plus. Le déblocage est impossible.', 'checkedout_file_is_unchanged' => 'Le fichier du document bloqué est inchangé. Le déblocage n’est pas possible. Si vous ne souhaitez pas apporter de modifications, désactivez le blocage.', 'checkin_document' => 'Débloquer (check-in)', -'checkoutpath_does_not_exist' => '', +'checkoutpath_does_not_exist' => 'Le chemin de vérification n’existe pas', 'checkout_document' => 'Bloquer (check-out)', 'checkout_is_disabled' => 'Le blocage (check-out) de documents est désactivé dans la configuration.', 'choose_attrdef' => 'Choisissez une définition d\'attribut', @@ -269,7 +269,7 @@ URL: [url]', 'choose_workflow_action' => 'Choisir une action de workflow', 'choose_workflow_state' => 'Choisir un état de workflow', 'class_name' => 'Nom de classe', -'clear_cache' => 'Effacer le cache', +'clear_cache' => 'Vider le cache', 'clear_clipboard' => 'Vider le presse-papier', 'clear_password' => 'Sans mot de passe', 'clipboard' => 'Presse-papier', @@ -279,7 +279,7 @@ URL: [url]', 'comment_changed_email' => '', 'comment_for_current_version' => 'Commentaires pour la version actuelle', 'configure_extension' => 'Configurer l’extension', -'confirm_clear_cache' => 'Confirmer l\'effacement du cache', +'confirm_clear_cache' => 'Voulez-vous vraiment vider le cache ? Cela va effacer toutes les miniatures.', 'confirm_create_fulltext_index' => 'Oui, je souhaite recréer l\'index de recherche plein texte !', 'confirm_move_document' => 'Veuillez confirmer le déplacement du document.', 'confirm_move_folder' => 'Veuillez confirmer le déplacement du dossier.', @@ -299,7 +299,7 @@ URL: [url]', 'confirm_rm_user' => 'Voulez-vous vraiment supprimer l’utilisateur « [username] » ?
Attention : Cette action est irréversible.', 'confirm_rm_user_from_processes' => 'Voulez-vous vraiment retirer l’utilisateur « [username] » de tous les processus ?
Attention : Cette action peut entrainer la publication des documents si l’utilisateur était le seul (ou dernier) approbateur.', 'confirm_rm_version' => 'Voulez-vous vraiment supprimer la version [version] du document « [documentname] » ?
Attention : Cette action est irréversible.', -'confirm_transfer_link_document' => '', +'confirm_transfer_link_document' => 'Sélectionnez si vous souhaitez lier le document glissé ou transférer son contenu au document cible en tant que nouvelle version. Seuls les documents avec une seule version peuvent être transférés. Le document glissé sera supprimé par la suite.', 'confirm_transfer_objects' => 'Voulez-vous vraiment transférer les documents, dossiers, etc. de l’utilisateur « [username] » ?
Attention : Cette action est irréversible.', 'confirm_update_transmittalitem' => 'Confirmer la mise à jour', 'content' => 'Contenu', @@ -307,13 +307,14 @@ URL: [url]', 'converter_new_cmd' => 'Commande', 'converter_new_mimetype' => 'Nouveau type MIME', 'copied_to_checkout_as' => 'Fichier copié dans l’espace de blocage en tant que « [filename] » ([date])', +'create_download_link' => '', 'create_fulltext_index' => 'Créer un index de recherche plein texte', 'create_fulltext_index_warning' => 'Vous allez recréer l\'index de recherche plein texte. Cela peut prendre un temps considérable et réduire les performances de votre système dans son ensemble. Si vous voulez vraiment recréer l\'index, merci de confirmer votre opération.', 'creation_date' => 'Créé le', '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', @@ -376,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é', @@ -399,8 +400,8 @@ Ancien dossier: [old_folder_path] Nouveau dossier: [new_folder_path] Utilisateur: [username] URL: [url]', -'document_moved_email_subject' => '[sitename]: [name] - Document déplacé', -'document_not_checkedout' => '', +'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é Document: [name] @@ -408,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] @@ -416,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] @@ -433,16 +434,30 @@ 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' => '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' => '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', -'do_object_setfiletype' => '', +'do_object_setfiletype' => 'Définir le type de fichier', 'do_object_unlink' => 'Supprimer la version du document', 'draft' => 'Ébauche', 'draft_pending_approval' => 'Ébauche - en attente d’approbation', @@ -451,7 +466,7 @@ URL: [url]', 'dropfolderdir_missing' => 'Votre dossier de dépôt personnel n\'existe pas sur le serveur ! Veuillez faire une demande à l\'administrateur.', 'dropfolder_file' => 'Fichier du dossier de dépôt', 'dropfolder_folder' => 'Répertoire du dossier de dépôt', -'dropfolder_metadata' => '', +'dropfolder_metadata' => 'Métadonnées du dossier de dépôt', 'dropupload' => 'Téléchargement rapide', 'drop_files_here' => 'Glissez les fichiers ici !', 'dump_creation' => 'Sauvegarder la base de données', @@ -477,8 +492,8 @@ URL: [url]', 'edit_folder_props' => 'Modifier le dossier', 'edit_group' => 'Modifier un groupe', 'edit_online' => 'Modification en ligne', -'edit_online_warning' => '', -'edit_task' => '', +'edit_online_warning' => 'L’enregistrement de vos modifications écrasera le contenu de la version actuelle au lieu de créer une nouvelle version.', +'edit_task' => 'Modifier la tâche', 'edit_transmittal_props' => 'Modifier les propriétés de la transmission', 'edit_user' => 'Modifier un utilisateur', 'edit_user_details' => 'Modifier les détails d\'utilisateur', @@ -494,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', @@ -539,8 +554,8 @@ Document : [name] Dossier parent : [folder_path] Utilisateur : [username] URL : [url]', -'expiry_changed_email_subject' => '[sitename]: [name] - Date d\'expiration modifiée', -'export' => '', +'expiry_changed_email_subject' => '[sitename] : [name] - Date d’expiration modifiée', +'export' => 'Exporter', 'extension_archive' => 'Extension', 'extension_changelog' => 'Journal des modifications', 'extension_loading' => 'Chargement des extensions…', @@ -554,8 +569,8 @@ URL : [url]', 'files' => 'Fichiers', 'files_deletion' => 'Suppression de fichiers', 'files_deletion_warning' => 'Avec cette option, vous pouvez supprimer tous les fichiers d\'un dossier DMS. Les informations de version resteront visibles.', -'files_loading' => 'Patientez pendant le chargement de la liste des fichiers', -'filetype' => '', +'files_loading' => 'Veuillez patienter pendant le chargement de la liste des fichiers…', +'filetype' => 'Type de fichier', 'file_size' => 'Taille', 'filter_for_documents' => 'Filtre additionnel pour les documents', 'filter_for_folders' => 'Filtre additionnel pour les dossiers', @@ -580,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é @@ -588,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é @@ -597,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] @@ -605,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', @@ -640,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', @@ -661,7 +676,7 @@ URL: [url]', 'index_done' => 'Terminé', 'index_error' => 'Erreur', 'index_folder' => 'Dossier Index', -'index_no_content' => '', +'index_no_content' => 'Contenu non indexé', 'index_pending' => 'En attente', 'index_waiting' => 'Chargement…', 'individuals' => 'Individuels', @@ -727,7 +742,7 @@ URL: [url]', 'keep' => 'Ne pas modifier', 'keep_doc_status' => 'Garder le statut du document', 'keywords' => 'Mots-clés', -'keywords_loading' => 'Patientez pendant le chargement de la liste des mots-clés ...', +'keywords_loading' => 'Veuillez patienter pendant le chargement de la liste des mots-clés…', 'keyword_exists' => 'Mot-clé déjà existant', 'ko_KR' => 'Korean', 'language' => 'Langue', @@ -741,18 +756,18 @@ URL: [url]', 'linked_to_document' => 'Lié au document', 'linked_to_this_version' => 'Lié à cette version', 'link_alt_updatedocument' => 'Pour déposer des fichiers de taille supérieure, utilisez la page d\'ajout multiple.', -'link_document' => '', +'link_document' => 'Lien vers le document', '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_tasks' => '', +'list_hooks' => 'Liste des appels internes', +'list_tasks' => 'Liste des tâches', 'local_file' => 'Fichier local', 'locked_by' => 'Verrouillé par', 'lock_document' => 'Verrouiller', 'lock_message' => 'Ce document a été verrouillé par [username]. Seuls les utilisateurs autorisés peuvent déverrouiller ce document.', 'lock_status' => 'Statut', -'logfile_loading' => '', +'logfile_loading' => 'Veuillez patienter pendant le chargement du fichier journal…', 'login' => 'Identification', 'login_disabled_text' => 'Votre compte est désactivé, sans doute à cause de trop nombreuses connexions qui ont échoué.', 'login_disabled_title' => 'Compte désactivé', @@ -769,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', @@ -779,7 +794,7 @@ URL: [url]', 'max_upload_size' => 'Taille maximum de fichier déposé', 'may' => 'Mai', 'menu_dropfolder' => 'Dossier de dépôt', -'menu_upload_from_dropfolder' => '', +'menu_upload_from_dropfolder' => 'Importer ce fichier', 'mimetype' => 'Type MIME', 'minutes' => 'minutes', 'misc' => 'Divers', @@ -802,6 +817,7 @@ URL: [url]', 'my_documents' => 'Mes documents', 'my_transmittals' => 'Mes transmissions', 'name' => 'Nom', +'nb_NO' => 'Norvégien bokmål', 'needs_correction' => 'Nécessite une correction', 'needs_workflow_action' => 'Ce document requiert votre attention. Consultez l\'onglet workflow.', 'network_drive' => 'Lecteur réseau', @@ -819,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] @@ -827,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', @@ -837,37 +853,37 @@ 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' => '', +'next_revision_abbr' => 'Prochaine rév.', 'next_state' => 'Nouvel état', 'nl_NL' => 'Danois', 'no' => 'Non', -'notification' => 'Alerte', +'notification' => 'Notification', 'notify_added_email' => 'Vous avez été ajouté à la liste des notifications.', 'notify_added_email_body' => 'Ajouté à la liste des notifications 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', 'no_approval_needed' => 'Aucune approbation en attente', 'no_attached_files' => 'Aucun fichier attaché', -'no_backup_dir' => '', -'no_current_version' => 'Vous utilisez une vieille version de SeedDMS. La dernière version disponible est la [latestversion].', +'no_backup_dir' => 'Le répertoire de sauvegarde n’est pas défini.', +'no_current_version' => 'Vous utilisez une ancienne version de SeedDMS. La dernière version disponible est la [latestversion].', 'no_default_keywords' => 'Aucun mot-clé disponible', -'no_docs_checked_out' => '', -'no_docs_expired' => '', +'no_docs_checked_out' => 'Aucun document vérifié', +'no_docs_expired' => 'Aucun document expiré', 'no_docs_locked' => 'Aucun document verrouillé', 'no_docs_needs_correction' => 'Aucun document ne nécessite de correction', 'no_docs_rejected' => 'Aucun document rejeté.', @@ -910,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', @@ -925,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é', @@ -958,14 +974,14 @@ 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' => '', +'receipts_accepted_latest' => '(dont [no_receipts] dans la dernière version)', 'receipts_not_touched' => '[no_receipts] réceptions non amorcées', -'receipts_not_touched_latest' => '', +'receipts_not_touched_latest' => '(dont [no_receipts] dans la dernière version)', 'receipts_rejected' => '[no_receipts] réceptions déjà rejetées', -'receipts_rejected_latest' => '', +'receipts_rejected_latest' => '(dont [no_receipts] dans la dernière version)', 'receipts_without_group' => 'Réceptions sans groupe', 'receipts_without_user' => 'Réceptions sans utilisateur', 'receipt_deletion_email_body' => 'L’utilisateur a été retiré de la liste des destinataires @@ -1004,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.', @@ -1028,22 +1044,29 @@ Dossier parent : [folder_path] Utilisateur : [username] URL : [url]', 'request_workflow_action_email_subject' => '[sitename] : [name] - Action de Workflow requise', -'reset_checkout' => '', +'reset_checkout' => 'Terminer la vérification', 'restrict_access' => 'Pas d\'accès', 'results_page' => 'Page de résultats', 'return_from_subworkflow' => 'Revenir du sous-workflow', -'return_from_subworkflow_email_body' => '', -'return_from_subworkflow_email_subject' => '', -'reverse_links' => 'Documents liés au document courant', +'return_from_subworkflow_email_body' => 'Retour du sous-workflow +Document : [name] +Version : [version] +Workflow : [workflow] +Sous-workflow : [subworkflow] +Dossier parent : [folder_path] +Utilisateur : [username] +URL : [url]', +'return_from_subworkflow_email_subject' => 'Retour du sous-workflow', +'reverse_links' => 'Documents liés au document actuel', 'reviewers' => 'Examinateurs', 'reviewer_already_assigned' => 'est déjà déclaré en tant qu’examinateur', 'reviewer_already_removed' => 'L’examinateur a déjà été retiré du processus de vérification ou a déjà soumis la vérification.', 'reviews_accepted' => '[no_reviews] vérifications déjà confirmées', -'reviews_accepted_latest' => '', +'reviews_accepted_latest' => '(dont [no_reviews] dans la dernière version)', 'reviews_not_touched' => '[no_reviews] vérifications non amorcées', -'reviews_not_touched_latest' => '', +'reviews_not_touched_latest' => '(dont [no_reviews] dans la dernière version)', 'reviews_rejected' => '[no_reviews] vérifications déjà rejetées', -'reviews_rejected_latest' => '', +'reviews_rejected_latest' => '(dont [no_reviews] dans la dernière version)', 'reviews_without_group' => 'Vérifications sans groupe', 'reviews_without_user' => 'Vérifications sans utilisateur', 'review_deletion_email' => 'Demande de vérification supprimée', @@ -1081,13 +1104,13 @@ URL : [url]', 'revise_document' => 'Réviser le document', 'revise_document_on' => 'Prochaine révision de la version du document le [date]', 'revisions_accepted' => '[no_revisions] révisions déjà confirmées', -'revisions_accepted_latest' => '', +'revisions_accepted_latest' => '(dont [no_revisions] dans la dernière version)', 'revisions_not_touched' => '[no_revisions] révisions non amorcées', -'revisions_not_touched_latest' => '', +'revisions_not_touched_latest' => '(dont [no_revisions] dans la dernière version)', 'revisions_pending' => '[no_revisions] révisions à venir en attente', -'revisions_pending_latest' => '', +'revisions_pending_latest' => '(dont [no_revisions] dans la dernière version)', 'revisions_rejected' => '[no_revisions] révisions déjà rejetées', -'revisions_rejected_latest' => '', +'revisions_rejected_latest' => '(dont [no_revisions] dans la dernière version)', 'revisions_without_group' => 'Révisions sans groupe', 'revisions_without_user' => 'Révisions sans utilisateur', 'revision_date' => 'Date de révision', @@ -1100,16 +1123,23 @@ Utilisateur : [username] URL : [url]', 'revision_request_email_subject' => '[sitename] : [name] - Demande de révision', 'revision_status' => 'État', -'revision_submit_email_body' => '', -'revision_submit_email_subject' => '', +'revision_submit_email_body' => 'Publié à nouveau +Document : [name] +Version : [version] +Dossier parent : [folder_path] +Statut : [status] +Commentaire : [comment] +Utilisateur : [username] +URL : [url]', +'revision_submit_email_subject' => '[sitename] : [name] - Publié à nouveau', 'revision_summary' => 'Récapitulatif révision', '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_email_body' => '', -'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' => 'Reculer le workflow', +'rewind_workflow_email_body' => 'Le workflow a été reculé', +'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', @@ -1149,16 +1179,16 @@ 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.', 'save' => 'Enregistrer', -'scheduler_class' => '', -'scheduler_class_description' => '', -'scheduler_class_parameter' => '', -'scheduler_class_tasks' => '', -'scheduler_task_mgr' => '', +'scheduler_class' => 'Classe', +'scheduler_class_description' => 'Description', +'scheduler_class_parameter' => 'Paramètre', +'scheduler_class_tasks' => 'Tâches de la classe', +'scheduler_task_mgr' => 'Planificateur', 'search' => 'Recherche', 'search_fulltext' => 'Rechercher dans le texte', 'search_in' => 'Rechercher dans', @@ -1229,8 +1259,8 @@ Nom : [username] 'settings_Advanced' => 'Avancé', 'settings_advancedAcl' => 'Contrôle d’accès avancé', 'settings_advancedAcl_desc' => 'Le contrôle d’accès avancé permet d’activer/désactiver certains modules du logiciel. Il ne peut pas être utilisé pour les droits d’accès sur les documents et dossiers.', -'settings_allowChangeRevAppInProcess' => '', -'settings_allowChangeRevAppInProcess_desc' => '', +'settings_allowChangeRevAppInProcess' => 'Autoriser le changement de réviseurs / approbateurs après le début du processus', +'settings_allowChangeRevAppInProcess_desc' => 'Par défaut, les réviseurs et les approbateurs ne peuvent plus être modifiés une fois la soumission d’un examen ou d’une approbation. Cette option permettra aux administrateurs de le faire tant que le document n’est pas publié ou rejeté.', 'settings_allowReviewerOnly' => 'Permettre d’affecter l’examinateur uniquement', 'settings_allowReviewerOnly_desc' => 'Activer cette option pour permettre d’affecter un examinateur mais pas d’approbateur dans le mode de Workflow traditionnel.', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', @@ -1247,8 +1277,8 @@ Nom : [username] 'settings_calendarDefaultView' => 'Vue par défaut de l\'agenda', 'settings_calendarDefaultView_desc' => 'Vue par défaut de l\'agenda', 'settings_cannot_disable' => 'Le fichier ENABLE_INSTALL_TOOL ne peut pas être supprimé', -'settings_checkOutDir' => '', -'settings_checkOutDir_desc' => '', +'settings_checkOutDir' => 'Répertoire pour les documents vérifiés', +'settings_checkOutDir_desc' => 'Il s’agit du répertoire dans lequel le dernier contenu d’un document est copié si le document est vérifié. Si vous rendez ce répertoire accessible aux utilisateurs, ils peuvent modifier le fichier et le refaire vérifier une fois terminé.', 'settings_cmdTimeout' => 'Délai d\'expiration pour les commandes externes', 'settings_cmdTimeout_desc' => 'Cette durée en secondes détermine quand une commande externe (par exemple pour la création de l\'index de texte intégral) sera terminée.', 'settings_contentDir' => 'Répertoire du contenu', @@ -1265,7 +1295,7 @@ Nom : [username] 'settings_createCheckOutDir_desc' => 'Les versions du document seront copiées dans ce dossier lorsqu’un document est bloqué (check-out).', 'settings_createdatabase' => 'Créer tables de la base de données', 'settings_createdirectory' => 'Créer répertoire', -'settings_currentvalue' => 'Valeur courante', +'settings_currentvalue' => 'Valeur actuelle', 'settings_Database' => 'Paramètres base de données', 'settings_dbDatabase' => 'Base de données', 'settings_dbDatabase_desc' => 'Le nom de votre base de données entré pendant le processus d\'installation. Ne pas modifier le champ sauf si absolument nécessaire, par exemple si la base de données a été déplacé.', @@ -1297,7 +1327,7 @@ Nom : [username] 'settings_dropFolderDir_desc' => 'Ce répertoire peut être utilisé pour déposer des fichiers sur le serveur et les importer à partir d\'ici au lieu de les charger à partir du navigateur. Le répertoire doit avoir un sous-répertoire pour chaque utilisateur autorisé à importer des fichiers de cette manière.', 'settings_Edition' => 'Paramètres d’édition', 'settings_editOnlineFileTypes' => 'Types de fichiers éditables', -'settings_editOnlineFileTypes_desc' => 'Le contenu des fichiers portant les extensions précisées pourra être modifié en ligne (utiliser des lettres minuscules)', +'settings_editOnlineFileTypes_desc' => 'Le contenu des fichiers portant les extensions ou types MIME précisés pourra être modifié en ligne (utiliser des lettres minuscules)', 'settings_enable2FactorAuthentication' => 'Activer l’authentification forte', 'settings_enable2FactorAuthentication_desc' => 'Active/désactive l\'authentification forte à 2 facteurs. Les utilisateurs devront installer Google Authenticator sur leur téléphone mobile.', 'settings_enableAcknowledgeWorkflow' => '', @@ -1312,8 +1342,8 @@ Nom : [username] 'settings_enableClipboard_desc' => 'Active/désactive le presse-papier', 'settings_enableConverting' => 'Activer conversion des fichiers', 'settings_enableConverting_desc' => 'Active/désactive la conversion des fichiers', -'settings_enableDebugMode' => '', -'settings_enableDebugMode_desc' => '', +'settings_enableDebugMode' => 'Mode débogage', +'settings_enableDebugMode_desc' => 'Permet d’activer le mode débogage en ajoutant un nouveau menu dans les outils d’administration', 'settings_enableDropFolderList' => 'Activer la liste des fichiers du dossier de dépôt', 'settings_enableDropFolderList_desc' => 'Affiche un menu avec la liste des fichiers qui se trouvent dans le dossier de dépôt.', 'settings_enableDropUpload' => 'Activer la publication rapide de documents', @@ -1324,8 +1354,8 @@ Nom : [username] 'settings_enableDuplicateSubFolderNames_desc' => 'Autorise plusieurs sous-dossiers de même nom dans un dossier.', 'settings_enableEmail' => 'E-mails', 'settings_enableEmail_desc' => 'Active/désactive la notification automatique par e-mail', -'settings_enableFilterReceipt' => '', -'settings_enableFilterReceipt_desc' => '', +'settings_enableFilterReceipt' => 'Éliminer des propriétaires, examinateurs… d’une liste de destinataires', +'settings_enableFilterReceipt_desc' => 'Activez cette option pour éliminer certains destinataires d’une liste s’ils sont entrés en tant que membres d’un groupe.', 'settings_enableFolderTree' => 'Activer l\'arborescence des dossiers', 'settings_enableFolderTree_desc' => 'Active/désactive l’arborescence des dossiers sur la page de consultation d’un dossier', 'settings_enableFullSearch' => 'Activer la recherche plein texte', @@ -1338,7 +1368,7 @@ Nom : [username] 'settings_enableHelp_desc' => 'Active/désactive le lien vers les écrans d’aide dans le menu', 'settings_enableLanguageSelector' => 'Activer la sélection de langue', 'settings_enableLanguageSelector_desc' => 'Montrer le sélecteur de langue d\'interface après connexion de l\'utilisateur.', -'settings_enableLargeFileUpload' => 'Activer téléchargement des gros fichiers', +'settings_enableLargeFileUpload' => 'Activer le dépôt de fichiers très volumineux', 'settings_enableLargeFileUpload_desc' => 'Si défini, le téléchargement de fichier est également disponible via un applet java appelé jumploader sans limite de taille définie par le navigateur. Il permet également de télécharger plusieurs fichiers en une seule fois.', 'settings_enableMenuTasks' => 'Activer le menu des tâches', 'settings_enableMenuTasks_desc' => 'Affiche un menu avec la liste des tâches. Cette liste contient les documents en attente d’une action par l’utilisateur.', @@ -1363,13 +1393,13 @@ Nom : [username] 'settings_enableRecursiveCount' => 'Décompte récursif des documents/dossiers', 'settings_enableRecursiveCount_desc' => 'Si activé, le nombre de documents et répertoires dans un répertoire est calculé en comptant récursivement le contenu des sous-répertoires auxquels l\'utilisateur a accès.', 'settings_enableRevisionOneVoteReject' => 'Rejet par un réviseur', -'settings_enableRevisionOneVoteReject_desc' => '', +'settings_enableRevisionOneVoteReject_desc' => 'Si cette option est activée, le statut du document sera défini sur « nécessite une correction » une fois que le premier réviseur a rejeté le document. Si elle est désactivée, le statut du document ne changera pas jusqu’à ce que tous les réviseurs aient terminé leur révision.', 'settings_enableRevisionOnVoteReject' => '', 'settings_enableRevisionOnVoteReject_desc' => '', 'settings_enableRevisionWorkflow' => 'Activer la révision des documents', 'settings_enableRevisionWorkflow_desc' => 'Activer afin de pouvoir lancer un flux de travail pour réviser un document après une période donnée.', -'settings_enableSelfReceipt' => '', -'settings_enableSelfReceipt_desc' => '', +'settings_enableSelfReceipt' => 'Permettre la réception de documents par l’utilisateur connecté', +'settings_enableSelfReceipt_desc' => 'Activez cette option si vous souhaitez que l’utilisateur actuellement connecté puisse être sélectionné comme destinataire du document.', 'settings_enableSelfRevApp' => 'Autoriser vérification/approbation par l’utilisateur actuel', 'settings_enableSelfRevApp_desc' => 'Activer cette option pour ajouter l’utilisateur actuel à la liste des examinateurs/approbateurs et pour les transitions de workflow.', 'settings_enableSessionList' => 'Activer la liste des utilisateurs en ligne', @@ -1456,8 +1486,8 @@ Nom : [username] 'settings_maxUploadSize' => 'Taille max. des fichiers', 'settings_maxUploadSize_desc' => 'Taille maximale (en octets) pour les fichiers téléversés. Concerne les versions d’un document et les fichiers attachés.', 'settings_more_settings' => 'Configurer d\'autres paramètres. Connexion par défaut: admin/admin', -'settings_noDocumentFormFields' => 'N\'afficher pas ce champ', -'settings_noDocumentFormFields_desc' => 'Ce champ ne sera pas visible quand vous ajoutez ou éditez un document. Les valeurs existantes seront retenues.', +'settings_noDocumentFormFields' => 'Ne pas afficher ces champs', +'settings_noDocumentFormFields_desc' => 'Ces champs ne seront pas visibles à l’ajout et à la modification d’un document. Les valeurs existantes seront conservées.', 'settings_notfound' => 'Introuvable', 'settings_Notification' => 'Notifications', 'settings_notwritable' => 'La configuration ne peut pas être enregistrée car le fichier de configuration n’est pas accessible en écriture.', @@ -1497,12 +1527,12 @@ Nom : [username] 'settings_previewWidthMenuList_desc' => 'Largeur des vignettes affichées dans le menu déroulant « Dossier de dépôt ».', 'settings_printDisclaimer' => 'Afficher la clause de non-responsabilité', 'settings_printDisclaimer_desc' => 'Si activé, le message d’avertissement sera affiché en bas de chaque page.', -'settings_proxyUPassword' => '', -'settings_proxyUPassword_desc' => '', -'settings_proxyUrl' => '', -'settings_proxyUrl_desc' => '', -'settings_proxyUser' => '', -'settings_proxyUser_desc' => '', +'settings_proxyUPassword' => 'Mot de passe du proxy', +'settings_proxyUPassword_desc' => 'Mot de passe pour l’authentification via le proxy', +'settings_proxyUrl' => 'URL du proxy', +'settings_proxyUrl_desc' => 'URL du proxy utilisé pour accéder au dépôt des extensions', +'settings_proxyUser' => 'Nom d’utilisateur du proxy', +'settings_proxyUser_desc' => 'Nom d’utilisateur utilisé pour l’authentification via le proxy', 'settings_quota' => 'Quota de l\'utilisateur', 'settings_quota_desc' => 'Espace maximum (en octets) qu’un utilisateur peut occuper sur le disque. Définir à 0 pour un espace illimité. Une valeur spécifique peut être définie par utilisateur depuis son profil.', 'settings_removeFromDropFolder' => 'Supprimer le fichier du dossier de dépôt après un chargement réussi', @@ -1536,7 +1566,7 @@ Nom : [username] 'settings_smtpSendFrom' => 'Envoyé par', 'settings_smtpSendFrom_desc' => 'Envoyé par', 'settings_smtpSendTestMail' => 'Envoyer un e-mail test', -'settings_smtpSendTestMail_desc' => 'Envoie un message test pour vérifier la configuration e-mail courante.', +'settings_smtpSendTestMail_desc' => 'Envoie un message test pour vérifier la configuration e-mail actuelle.', 'settings_smtpServer' => 'Nom du serveur SMTP', 'settings_smtpServer_desc' => 'Nom du serveur SMTP', 'settings_smtpUser' => 'Utilisateur pour le serveur SMTP', @@ -1604,6 +1634,7 @@ Nom : [username] 'site_brand' => '', 'sk_SK' => 'Slovaque', 'sort_by_date' => 'Trier par date', +'sort_by_expiration_date' => '', 'sort_by_name' => 'Trier par nom', 'sort_by_sequence' => 'Trier par position', 'space_used_on_data_folder' => 'Espace utilisé dans le répertoire de données', @@ -1631,12 +1662,12 @@ Nom : [username] 'splash_edit_group' => 'Groupe modifié', 'splash_edit_role' => 'Rôle modifié', 'splash_edit_task' => 'Tâche modifiée', -'splash_edit_transmittal' => '', +'splash_edit_transmittal' => 'Transmission enregistrée', 'splash_edit_user' => 'Utilisateur modifié', 'splash_error_add_to_transmittal' => 'Erreur lors de l’ajout du document à la transmission', 'splash_error_rm_download_link' => 'Erreur lors de la suppression du lien de téléchargement', 'splash_error_send_download_link' => 'Erreur lors de l’envoi du lien de téléchargement', -'splash_extension_getlist' => 'Liste des extensions mises à jour depuis le dépôt', +'splash_extension_getlist' => 'Liste des extensions du dépôt actualisée', 'splash_extension_import' => 'Extension installée', 'splash_extension_refresh' => 'Liste des extensions actualisée', 'splash_extension_upload' => 'Extension installée', @@ -1645,8 +1676,8 @@ Nom : [username] 'splash_inherit_access' => 'Droits d’accès hérités', 'splash_invalid_folder_id' => 'Identifiant de répertoire invalide', 'splash_invalid_searchterm' => 'Recherche invalide', -'splash_link_document' => '', -'splash_moved_clipboard' => 'Contenu du presse-papier déplacé vers le dossier courant', +'splash_link_document' => 'Lien ajouté', +'splash_moved_clipboard' => 'Contenu du presse-papier déplacé vers le dossier en cours', 'splash_move_document' => 'Document déplacé', 'splash_move_folder' => 'Dossier déplacé', 'splash_notinherit_access' => 'Les droits d’accès ne sont plus hérités', @@ -1676,7 +1707,7 @@ Nom : [username] 'splash_substituted_user' => 'Utilisateur de substitution', 'splash_switched_back_user' => 'Revenu à l\'utilisateur initial', 'splash_toogle_group_manager' => 'Responsable de groupe changé', -'splash_transfer_content' => '', +'splash_transfer_content' => 'Contenu transféré', 'splash_transfer_document' => 'Document transféré', 'splash_transfer_objects' => 'Objets transférés', 'splash_trigger_workflow' => 'Transition de workflow déclenchée', @@ -1713,6 +1744,8 @@ Nom : [username] 'submit_review' => 'Soumettre la vérification', 'submit_revision' => 'Soumettre la révision', 'submit_userinfo' => 'Soumettre info', +'submit_webauthn_login' => 'Identification', +'submit_webauthn_register' => 'Inscription', 'subsribe_timelinefeed' => 'S’abonner au flux RSS', 'substitute_to_user' => 'Basculer sur \'[username]\'', 'substitute_user' => 'Utilisateur de substitution', @@ -1726,14 +1759,15 @@ Nom : [username] 'switched_to' => 'Connexion provisoire sous', 'takeOverAttributeValue' => 'Récupérer la valeur de la dernière version', 'takeOverGrpApprover' => 'Récupérer le groupe d\'approbateurs de la dernière version.', -'takeOverGrpApprovers' => '', +'takeOverGrpApprovers' => 'Récupérer le groupe d’approbateurs', 'takeOverGrpReviewer' => 'Récupérer le groupe d\'examinateurs de la dernière version.', -'takeOverGrpReviewers' => '', +'takeOverGrpReviewers' => 'Récupérer le groupe d’examinateurs', 'takeOverIndApprover' => 'Récupérer les approbateurs de la dernière version.', -'takeOverIndApprovers' => '', +'takeOverIndApprovers' => 'Récupérer les approbateurs individuels', 'takeOverIndReviewer' => 'Récupérer les examinateurs de la dernière version.', -'takeOverIndReviewers' => '', +'takeOverIndReviewers' => 'Récupérer les examinateurs individuels', 'tasks' => 'Tâches', +'task_core_expireddocs_days' => '', 'task_description' => 'Description', 'task_disabled' => 'Désactivée', 'task_frequency' => 'Fréquence', @@ -1769,14 +1803,15 @@ Nom : [username] 'to' => 'Au', 'toggle_manager' => 'Basculer \'Responsable\'', 'toggle_qrcode' => 'Afficher/masquer le QR code', +'total' => '', 'to_before_from' => 'La date de fin ne peut pas être avant la date de début.', -'transfer_content' => '', +'transfer_content' => 'Transférer le contenu', 'transfer_document' => 'Transférer le document', 'transfer_no_read_access' => 'L’utilisateur n’a pas le droit de lecture dans ce dossier', 'transfer_no_write_access' => 'L’utilisateur n’a pas le droit d’écriture dans ce dossier', 'transfer_objects' => 'Transférer les objets', 'transfer_objects_to_user' => 'Nouveau propriétaire', -'transfer_process_to_user' => '', +'transfer_process_to_user' => 'Transférer le processus à l’utilisateur', 'transfer_to_user' => 'Transférer à l’utilisateur', 'transition_triggered_email' => 'Transition de workflow activé', 'transition_triggered_email_body' => 'Transition de workflow déclenchée @@ -1785,7 +1820,7 @@ Version : [version] Commentaires : [comment] Workflow : [workflow] État précédent : [previous_state] -État courant : [current_state] +État actuel : [current_state] Dossier parent : [folder_path] Utilisateur : [username] URL : [url]', @@ -1796,13 +1831,13 @@ URL : [url]', 'transmittal_comment' => 'Commentaire', 'transmittal_name' => 'Nom', 'transmittal_size' => 'Taille', -'tree_loading' => 'Patientez pendant le chargement de l\'arborescence des documents', +'tree_loading' => 'Veuillez patienter pendant le chargement de l’arborescence des documents…', 'trigger_workflow' => 'Workflow', 'tr_TR' => 'Turc', 'tuesday' => 'Mardi', 'tuesday_abbr' => 'Mar.', -'type_of_hook' => '', -'type_to_filter' => '', +'type_of_hook' => 'Type', +'type_to_filter' => 'Filtrer dans la liste', 'type_to_search' => 'Effectuer une recherche', 'uk_UA' => 'Ukrénien', 'under_folder' => 'Dans le dossier', @@ -1815,8 +1850,8 @@ URL : [url]', 'unknown_owner' => 'Identifiant de propriétaire inconnu', 'unknown_user' => 'Identifiant d\'utilisateur inconnu', 'unlinked_content' => 'Contenu non lié', -'unlinked_documents' => '', -'unlinked_folders' => '', +'unlinked_documents' => 'Documents non liés', +'unlinked_folders' => 'Dossiers non liés', 'unlinking_objects' => 'Déliage du contenu', 'unlock_cause_access_mode_all' => 'Vous pouvez encore le mettre à jour, car vous avez les droits d\'accès "tout". Le verrouillage sera automatiquement annulé.', 'unlock_cause_locking_user' => 'Vous pouvez encore le mettre à jour, car vous êtes le seul à l\'avoir verrouillé. Le verrouillage sera automatiquement annulé.', @@ -1858,8 +1893,8 @@ URL : [url]', 'versioning_file_creation' => 'Créer les fichiers de versionnage', 'versioning_file_creation_warning' => 'Cette opération permet de créer, pour chaque document, un fichier texte contenant les informations générales et l’historique des versions du document. Chaque fichier sera enregistré dans le répertoire du document. Ces fichiers ne sont pas nécessaires au bon fonctionnement de SeedDMS, mais ils peuvent être utiles en cas de transfert des fichiers vers un autre système.', 'versioning_info' => 'Versions', -'versiontolow' => '', -'version_comment' => 'commentaire de la version', +'versiontolow' => 'Version antérieure', +'version_comment' => 'Commentaire de la version', 'version_deleted_email' => 'Version supprimée', 'version_deleted_email_body' => 'Version supprimée Document: [name] @@ -1867,11 +1902,15 @@ 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', 'warning' => 'Avertissement', +'webauthn_auth' => 'Authentification WebAuthn', +'webauthn_crossplatform_info' => 'Choisissez « Oui » lorsque vous avez un périphérique amovible, comme une clé Yubico, que vous souhaitez utiliser pour vous connecter sur différents ordinateurs ; choisissez « Non » lorsque votre appareil est connecté à l\'ordinateur. Le choix affecte le ou les appareils proposés par le navigateur et / ou le système de sécurité informatique.', +'webauthn_info' => 'WebAuthn est une authentification sans mot de passe utilisant la cryptographie à clé publique. Une paire de clés privée-publique (connue sous le nom de certificat) est créée pour un site Web. La clé privée est stockée en toute sécurité sur l’appareil de l’utilisateur ; une clé publique et un identifiant généré de manière aléatoire sont envoyés au serveur pour stockage. Le serveur peut ensuite utiliser cette clé publique pour prouver l’identité de l’utilisateur. La clé privée est généralement stockée sur un jeton matériel. Le jeton doit être enregistré avant de pouvoir être utilisé pour l’authentification.', +'webauth_crossplatform' => 'Multiplateforme', 'wednesday' => 'Mercredi', 'wednesday_abbr' => 'Mer.', 'weeks' => 'semaines', @@ -1881,28 +1920,28 @@ 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' => '', -'workflow_initstate' => 'Etat initial', +'workflow_has_cycle' => 'Le workflow a une boucle', +'workflow_initstate' => 'État initial', 'workflow_in_use' => 'Ce workflow est actuellement utilisé par des documents.', -'workflow_layoutdata_saved' => '', +'workflow_layoutdata_saved' => 'Données de mise en page enregistrées', 'workflow_management' => 'Gestion des workflows', 'workflow_name' => 'Nom', 'workflow_no_doc_rejected_state' => 'L’état « rejeté » n’a été défini sur aucune action !', -'workflow_no_doc_released_state' => '', +'workflow_no_doc_released_state' => 'L’état « publié » n’a été défini sur aucune action !', 'workflow_no_initial_state' => 'Aucune transition ne débute par l’état initial défini pour ce workflow !', 'workflow_no_states' => 'Vous devez d\'abord définir des états de workflow avant d\'ajouter un workflow.', -'workflow_save_layout' => '', +'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', 'workflow_transition_without_user_group' => 'Au moins une transition a ni utilisateur, ni groupe !', 'workflow_user_summary' => 'Récapitulatif utilisateur', -'wrong_filetype' => '', +'wrong_filetype' => 'Mauvais type de fichier', 'x_more_objects' => '[number] objets supplémentaires', 'year_view' => 'Vue annuelle', 'yes' => 'Oui', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index 9afd1a84b..7fab3f079 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' => '', @@ -307,6 +307,7 @@ Internet poveznica: [url]', 'converter_new_cmd' => 'Komanda', 'converter_new_mimetype' => 'Novi tip datoteke', 'copied_to_checkout_as' => 'Datoteka je kopirana u prostor odjave kao \'[filename]\'', +'create_download_link' => '', 'create_fulltext_index' => 'Indeksiraj cijeli tekst', 'create_fulltext_index_warning' => 'Želite ponovo indeksirati cijeli tekst. To može duže potrajati i smanjiti sveukupne performanse sustava. Ako zaista želite ponovno indeksirati, molimo potvrdite vašu radnju.', 'creation_date' => 'Izrađeno', @@ -426,7 +427,21 @@ Internet poveznica: [url]', 'does_not_inherit_access_msg' => 'Naslijedi nivo pristupa', 'download' => 'Preuzimanje', 'download_extension' => '', +'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_state' => '', 'download_links' => '', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Popravi sve mape i dokumente.', 'do_object_setchecksum' => 'Postavi kontrolnu sumu', 'do_object_setfilesize' => 'Postavi veličinu datoteke', @@ -783,6 +798,7 @@ Internet poveznica: [url]', 'my_documents' => 'Moji dokumenti', 'my_transmittals' => 'Moja proslijeđivanja', 'name' => 'Naziv', +'nb_NO' => '', 'needs_correction' => '', 'needs_workflow_action' => 'Ovaj dokument zahtjeva vašu pažnju. Molimo provjerite karticu toka rada.', 'network_drive' => '', @@ -1158,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', @@ -1437,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.', @@ -1579,6 +1595,7 @@ Internet poveznica: [url]', 'site_brand' => '', 'sk_SK' => 'Slovački', 'sort_by_date' => '', +'sort_by_expiration_date' => '', 'sort_by_name' => '', 'sort_by_sequence' => '', 'space_used_on_data_folder' => 'Prostor iskorišten na podatkovnoj mapi', @@ -1688,6 +1705,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', @@ -1709,6 +1728,7 @@ Internet poveznica: [url]', 'takeOverIndReviewer' => 'Preuzimanje pojedinačnog revizora iz zadnje verzije.', 'takeOverIndReviewers' => '', 'tasks' => 'Zadaci', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1744,6 +1764,7 @@ Internet poveznica: [url]', 'to' => 'Do', 'toggle_manager' => 'Zamjeni upravitelja', 'toggle_qrcode' => '', +'total' => '', 'to_before_from' => 'Datum završetka ne može biti prije datuma početka', 'transfer_content' => '', 'transfer_document' => 'Prijenos dokumenta', @@ -1847,6 +1868,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 e1adaf639..5c5d4b032 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -19,15 +19,15 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (638), ribaz (1036) +// Translators: Admin (639), Kalpy (110), ribaz (1036) $text = array( '2_factor_auth' => 'Kétfaktoros azonosítás', -'2_factor_auth_info' => '', +'2_factor_auth_info' => 'A rendszernek két faktoros hitelesítése van. Szükséged lesz a Google Authenticator-ra a mobil telefonodon. Lejebb látható két QR kód. A jobb oldali a saját jelszavát, a baloldali egy új titkos jelszót tartalmaz. Ha új jelszót szeretne beállítani, szkennelje be újra a Goolge Authenticator-al.', '2_fact_auth_secret' => 'Titkos', 'accept' => 'Elfogad', -'access_control' => '', -'access_control_is_off' => '', +'access_control' => 'Hozzáférés vezérlés', +'access_control_is_off' => 'A speciális vezérlés hozzáférése ki van kapcsolva', 'access_denied' => 'Hozzáférés megtagadva.', 'access_inheritance' => 'Hozzáférés öröklés', 'access_mode' => 'Hozzáférési mód', @@ -54,7 +54,7 @@ URL: [url]', 'action_revise' => 'Felülvizsgálat', 'add' => 'Hozzáad', 'add_approval' => 'Jóváhagyás küldése', -'add_attrdefgroup' => '', +'add_attrdefgroup' => 'Új tulajdonságcsoport hozzáadása', 'add_document' => 'Dokumentum hozzáadása', 'add_document_link' => 'Hivatkozás hozzáadása', 'add_document_notify' => 'Hozzárendelés értesítés', @@ -67,7 +67,7 @@ URL: [url]', 'add_multiple_files' => 'Több állomány hozzáadása (az állomány nevét használja dokumentum névként)', 'add_receipt' => '', 'add_review' => 'Felülvizsgálat küldése', -'add_revision' => '', +'add_revision' => 'Felülvizsgálat hozzáadása', 'add_role' => 'szerepkör hozzáadása', 'add_subfolder' => 'Alkönyvtár hozzáadása', 'add_task' => 'Feladat hozzáadása', @@ -103,7 +103,7 @@ URL: [url]', 'approval_deletion_email' => 'Jóváhagyási kérelem törölve', 'approval_deletion_email_body' => '', 'approval_deletion_email_subject' => '', -'approval_file' => '', +'approval_file' => 'Fájl', 'approval_group' => 'Jóváhagyó csoport', 'approval_log' => 'Jóváhagyási napló', 'approval_request_email' => 'Jóváhagyási kérelem', @@ -115,7 +115,7 @@ Felhasználó: [username] URL: [url]', 'approval_request_email_subject' => '[sitename]: [name] - Jóváhagyási kérelem', 'approval_status' => 'Jóváhagyási állapot', -'approval_submit_email' => '', +'approval_submit_email' => 'Fordítás hiányzik', 'approval_submit_email_body' => 'Dokumentum jóváhagyása Documentum: [name] Verzió: [version] @@ -131,7 +131,7 @@ URL: [url]', 'approver_already_assigned' => '', 'approver_already_removed' => '', 'april' => 'Április', -'archive' => '', +'archive' => 'Archívum', 'archive_creation' => 'Archívum létrehozása', 'archive_creation_warning' => 'Ezzel a művelettel archívumot hozhat létre, amely tartalmazza az összes DMS mappában található állományokat. A létrehozás követően az archívum a kiszolgáló adat mappájába lesz mentve.
FIGYELEM: az archívum értelmezhető formában kerül tárolásra és nem használható kiszolgáló mentésként.', 'ar_EG' => 'Arab', @@ -142,11 +142,11 @@ URL: [url]', 'assumed_released' => 'Feltételesen kiadott', 'attrdefgroup_management' => '', 'attrdefgrp_show_detail' => '', -'attrdefgrp_show_list' => '', -'attrdefgrp_show_search' => '', -'attrdefgrp_show_searchlist' => '', +'attrdefgrp_show_list' => 'Lista', +'attrdefgrp_show_search' => 'Keresés', +'attrdefgrp_show_searchlist' => 'Keresés eredménye', 'attrdef_exists' => 'Jellemző meghatározás már létezik', -'attrdef_info' => '', +'attrdef_info' => 'Információ', 'attrdef_in_use' => 'Jellemző meghatározás még használatban van', 'attrdef_management' => 'Jellemző meghatározás kezelése', 'attrdef_maxvalues' => 'Legnagyobb érték', @@ -162,11 +162,11 @@ URL: [url]', 'attrdef_type' => 'Típus', 'attrdef_type_boolean' => 'Logikai', 'attrdef_type_date' => 'Dátum', -'attrdef_type_email' => '', +'attrdef_type_email' => 'Email', 'attrdef_type_float' => 'Szám tizedesjeggyel', 'attrdef_type_int' => 'Egész szám', 'attrdef_type_string' => 'Szöveg', -'attrdef_type_url' => '', +'attrdef_type_url' => 'URL', 'attrdef_valueset' => 'Értékek beállítása', 'attributes' => 'Jellemzők', 'attribute_changed_email_body' => 'Jellemző módosult @@ -223,7 +223,7 @@ URL: [url]', 'category' => 'Kategória', 'category_exists' => 'Kategória már létezik', 'category_filter' => 'Kizárólag kategóriák', -'category_info' => '', +'category_info' => 'Információk', 'category_in_use' => 'Dokumentumok használják ezt a kategóriát', 'category_noname' => 'Nem adott meg kategória nevet.', 'ca_ES' => 'Katalán', @@ -254,7 +254,7 @@ URL: [url]', 'choose_attrdefgroup' => '', 'choose_category' => 'Kérjük válasszon', 'choose_group' => 'Válasszon csoportot', -'choose_role' => '', +'choose_role' => 'Válassz szabályt!', 'choose_target_category' => 'Válasszon kategóriát', 'choose_target_document' => 'Válasszon dokumentumot', 'choose_target_file' => 'Válasszon állományt', @@ -263,13 +263,13 @@ URL: [url]', 'choose_workflow' => 'Válasszon munkafolyamatot', 'choose_workflow_action' => 'Válasszon munkafolyamat műveletet', 'choose_workflow_state' => 'Válasszon munkafolyamat állapotot', -'class_name' => '', +'class_name' => 'Osztály neve', 'clear_cache' => 'Gyorsítótár törlése', 'clear_clipboard' => 'Vágólap törlése', 'clear_password' => 'jelszó törlése', 'clipboard' => 'Vágólap', 'close' => 'Bezár', -'command' => '', +'command' => 'Utasítás', 'comment' => 'Megjegyzés', 'comment_changed_email' => '', 'comment_for_current_version' => 'Megjegyzés az aktuális verzióhoz', @@ -299,9 +299,10 @@ URL: [url]', 'confirm_update_transmittalitem' => '', 'content' => 'Tartalom', 'continue' => 'Folytatás', -'converter_new_cmd' => '', -'converter_new_mimetype' => '', +'converter_new_cmd' => 'Új parancs', +'converter_new_mimetype' => 'Új mime típus', 'copied_to_checkout_as' => '', +'create_download_link' => '', 'create_fulltext_index' => 'Teljes szöveg index létrehozása', 'create_fulltext_index_warning' => 'Ön a teljes szöveg index újraépítését kezdeményezte. Ez a művelet hosszú ideig eltarthat és jelentősen csökkentheti az egész rendszer teljesítményét. Ha biztosan újra kívánja építeni az indexet, kérjük erősítse meg a műveletet.', 'creation_date' => 'Létrehozva', @@ -344,7 +345,7 @@ URL: [url]', 'documents_to_revise' => '', 'documents_to_trigger_workflow' => '', 'documents_user_draft' => '', -'documents_user_expiration' => '', +'documents_user_expiration' => 'Lejárt dokumentumok', 'documents_user_needs_correction' => '', 'documents_user_no_reception' => '', 'documents_user_obsolete' => '', @@ -365,7 +366,7 @@ Szülő mappa: [folder_path] Felhasználó: [username] URL: [url]', 'document_comment_changed_email_subject' => '[sitename]: [name] - Megjegyzés módosult', -'document_count' => '', +'document_count' => 'Dokumentumok száma', 'document_deleted' => 'Dokumentum törölve', 'document_deleted_email' => 'Dokumentum törölve', 'document_deleted_email_body' => 'Dokumentum törölve @@ -421,7 +422,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'Hozzáférés öröklése', 'download' => 'Letöltés', 'download_extension' => '', +'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_state' => '', 'download_links' => '', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Valamennyi mappa és dokumentum helyreállítása.', 'do_object_setchecksum' => 'Ellenőrző összeg beállítása', 'do_object_setfilesize' => 'Állomány méret beállítása', @@ -442,7 +457,7 @@ URL: [url]', 'dump_list' => 'Meglévő adatbázis metések', 'dump_remove' => 'Adatbázis mentés eltávolítása', 'duplicates' => '', -'duplicate_content' => '', +'duplicate_content' => 'Duplikált tartalom', 'edit' => 'Szerkesztés', 'edit_attributes' => 'Jellemzők szerkesztése', 'edit_comment' => 'Megjegyzés szerkesztése', @@ -524,7 +539,7 @@ Felhasználó: [username] URL: [url]', 'expiry_changed_email_subject' => '[sitename]: [name] - Lejárati dátum módosítva', 'export' => 'exportálás', -'extension_archive' => '', +'extension_archive' => 'Bővítmények', 'extension_changelog' => 'Változásnapló', 'extension_loading' => 'Kiterjesztések betöltése ...', 'extension_manager' => 'Bővítmények kezelése', @@ -615,7 +630,7 @@ URL: [url]', 'guest_login_disabled' => 'Vendég bejelentkezés letiltva.', 'hash' => 'hash', 'help' => 'Segítség', -'home_folder' => '', +'home_folder' => 'Saját mappa', 'hook_name' => '', 'hourly' => 'Óra', 'hours' => 'óra', @@ -626,14 +641,14 @@ URL: [url]', 'identical_version' => 'Az új verzió megegyezik az eredetivel.', 'import' => 'Import', 'importfs' => '', -'import_extension' => '', +'import_extension' => 'Kiterjesztés import', 'import_fs' => 'Importálás fájlrendszerből', 'import_fs_warning' => '', 'include_content' => '', 'include_documents' => 'Tartalmazó dokumentumok', 'include_subdirectories' => 'Tartalmazó alkönyvtárak', 'indexing_tasks_in_queue' => 'Indexelés folyamatban', -'index_converters' => '', +'index_converters' => 'Index konvertáló', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Mappa indexelése', @@ -769,7 +784,7 @@ URL: [url]', 'monday_abbr' => 'Hé', 'monthly' => 'Havi', 'month_view' => 'Havi nézet', -'more_objects_loading' => '', +'more_objects_loading' => 'További sorok betöltése...', 'move' => 'Áthelyez', 'move_clipboard' => 'Vágólapra helyez', 'move_document' => 'Dokumentum áthelyezése', @@ -778,9 +793,10 @@ URL: [url]', 'my_documents' => 'Saját dokumentumok', 'my_transmittals' => '', 'name' => 'Név', +'nb_NO' => 'Norvég', 'needs_correction' => '', 'needs_workflow_action' => 'Ez a dokumentum az Ön beavatkozására vár. Ellenőrizze a munkafolyamat fület.', -'network_drive' => '', +'network_drive' => 'Hálózati meghajtó', 'never' => 'soha', 'new' => 'Új', 'new_attrdef' => 'Jellemző meghatározás hozzáadása', @@ -913,10 +929,10 @@ Amennyiben problémákba ütközik a bejelentkezés során, kérjük vegye fel a 'password_strength' => 'Jelszó erősség', 'password_strength_insuffient' => 'Jelszó erőssége elégtelen', 'password_wrong' => 'Hibás jelszó', -'pdf_converters' => '', -'pending_approvals' => '', +'pdf_converters' => 'PDF konvertáló', +'pending_approvals' => 'Függőben lévő jóváhagyások', 'pending_receipt' => '', -'pending_reviews' => '', +'pending_reviews' => 'Függőben lévő feladatok', 'pending_revision' => '', 'pending_workflows' => '', 'personal_default_keywords' => 'Személyes kulcsszó lista', @@ -924,7 +940,7 @@ Amennyiben problémákba ütközik a bejelentkezés során, kérjük vegye fel a 'possible_substitutes' => '', 'preset_expires' => 'Érvényesség beállítása', 'preview' => 'Előnézet', -'preview_converters' => '', +'preview_converters' => 'A dokumentum átalakításának előnézete', 'preview_images' => 'előnézeti képek', 'preview_markdown' => '', 'preview_pdf' => '', @@ -932,7 +948,7 @@ Amennyiben problémákba ütközik a bejelentkezés során, kérjük vegye fel a 'previous_state' => 'Előző állapot', 'previous_versions' => 'Előző változatok', 'process' => 'Folyamat', -'process_without_user_group' => '', +'process_without_user_group' => 'Felhasználó / csoport nélküli folyamatok', 'pt_BR' => 'Portugál (BR)', 'quota' => 'Kvóta', 'quota_exceeded' => 'Túllépte a lemezterület korlátot [bytes].', @@ -1155,7 +1171,7 @@ URL: [url]', 'select_ind_recipients' => '', 'select_ind_reviewers' => 'Kattintson az önálló felülvizsgáló kijelöléséhez', 'select_ind_revisors' => '', -'select_one' => 'Vßlasszon egyet', +'select_one' => 'Válasszon egyet', 'select_user' => 'Felhasználó kiválasztása', 'select_users' => 'Kattintson a felhasználó kiválasztásához', 'select_value' => 'Érték kiválasztása', @@ -1164,13 +1180,13 @@ URL: [url]', 'send_login_data' => '', 'send_login_data_body' => '', 'send_login_data_subject' => '', -'send_test_mail' => 'teszt email küldése', +'send_test_mail' => 'Teszt e-mail küldése', 'september' => 'September', 'sequence' => 'Sorrend', 'seq_after' => '"[prevname]" utßn', 'seq_end' => 'V‰g‰re', 'seq_keep' => 'Pozci megtartßsa', -'seq_start' => 'Elej‰re', +'seq_start' => 'Elejé‰re', 'sessions' => '', 'setDateFromFile' => '', 'setDateFromFolder' => '', @@ -1184,16 +1200,16 @@ URL: [url]', 'settings_advancedAcl_desc' => '', 'settings_allowChangeRevAppInProcess' => '', 'settings_allowChangeRevAppInProcess_desc' => '', -'settings_allowReviewerOnly' => '', -'settings_allowReviewerOnly_desc' => '', +'settings_allowReviewerOnly' => 'Engedélyezi, hogy csak az ellenört állítsa be', +'settings_allowReviewerOnly_desc' => 'Ha ezt engedélyez, akkor lehetővé válik, hogy a hagyományos munkafolyamat módban csak ellenört állítson be, ne jóváhagyót.', 'settings_apache_mod_rewrite' => 'Apache - Rewrite modul', 'settings_Authentication' => 'Hitelesítési beállítások', -'settings_autoLoginUser' => '', -'settings_autoLoginUser_desc' => '', +'settings_autoLoginUser' => 'Automatikus bejelentkezés', +'settings_autoLoginUser_desc' => 'Használja ezt a felhasználói azonosítót a hozzáférésekhez, ha a felhasználó még nincs bejelentkezve. Az ilyen hozzáférés nem hoz létre munkamenetet.', 'settings_available_languages' => 'Elérhető nyelvek', 'settings_available_languages_desc' => '', -'settings_backupDir' => '', -'settings_backupDir_desc' => '', +'settings_backupDir' => 'Mentés könyvtára', +'settings_backupDir_desc' => 'Könyvtár, ahol a biztonsági mentési eszköz mentéseket készít. Ha ez a könyvtár nincs beállítva vagy nem érhető el, akkor a biztonsági másolatot a tartalom könyvtárba menti.', 'settings_cacheDir' => 'Átmeneti állományok könyvtára', 'settings_cacheDir_desc' => 'Ahol az előnézeti képek tárolódnak (legjobb olyan könyvtárat választani, amit a web-kiszolgálón keresztül nem lehet elérni)', 'settings_Calendar' => 'Naptár beállítások', @@ -1202,14 +1218,14 @@ URL: [url]', 'settings_cannot_disable' => 'ENABLE_INSTALL_TOOL állomány nem került törlésre', 'settings_checkOutDir' => '', 'settings_checkOutDir_desc' => '', -'settings_cmdTimeout' => '', -'settings_cmdTimeout_desc' => '', +'settings_cmdTimeout' => 'Külső parancsok időtúllépése', +'settings_cmdTimeout_desc' => 'Ez az időtartam másodpercben határozza meg, hogy mikor fejezik be a külső parancsot (például a teljes szöveg index létrehozásához).', 'settings_contentDir' => 'Tartalom könyvtár', 'settings_contentDir_desc' => 'Feltöltött állományok tárolási helye (olyan könyvtárat érdemes választani, amelyhez nem lehet a webszerveren keresztül hozzáférni)', 'settings_contentOffsetDir' => 'Tartalom eltérési könyvtár', 'settings_contentOffsetDir_desc' => 'Az alapul szolgáló fájlrendszer korlátozásainak kikerülésére új könyvtár struktúra került kialakításra amely úgy lett tervezve, hogy létezzen a tároló könyvtárban (Content Directory). Ehhez szükséges egy alap könyvtár ahonnan indul. Általában meg lehet hagyni az alapértelmezett értéket ami 1048576, de megadható bármilyen szám vagy karaktersorozat amely nem létezik a tartalom könyvtárban (Content Directory)', -'settings_convertToPdf' => '', -'settings_convertToPdf_desc' => '', +'settings_convertToPdf' => 'A dokumentum konvertálása PDF-be előnézet céljából', +'settings_convertToPdf_desc' => 'Ha a dokumentumot nem tudja megjeleníteni a böngészőben, akkor megjelenik egy pdf-formátumra konvertált változat.', 'settings_cookieLifetime' => 'Süti élettartam', 'settings_cookieLifetime_desc' => 'A süti élettartama másodpercben. Ha az értéke 0 akkor a süti a böngésző bezárásakor lesz törölve.', 'settings_coreDir' => 'Alap SeedDMS könyvtár', @@ -1231,12 +1247,12 @@ URL: [url]', 'settings_dbUser' => 'Felhasználónév', 'settings_dbUser_desc' => 'Az adatbázis eléréséhez tartozó felhasználónevet a telepítési eljárás során kell megadni. Ne szerkessze ezt a mezőt, csak ha nagyon szükséges, például, ha az adatbázist át kell helyezni egy másik gépre.', 'settings_dbVersion' => 'Adatbázis séma túl régi', -'settings_defaultAccessDocs' => '', -'settings_defaultAccessDocs_desc' => '', -'settings_defaultDocPosition' => '', -'settings_defaultDocPosition_desc' => '', -'settings_defaultDocPosition_val_end' => '', -'settings_defaultDocPosition_val_start' => '', +'settings_defaultAccessDocs' => 'Alapértelmezett hozzáférés az új dokumentumokhoz', +'settings_defaultAccessDocs_desc' => 'Új dokumentum létrehozásakor ez lesz az alapértelmezett hozzáférési jog.', +'settings_defaultDocPosition' => 'A dokumentum elhelyezése létrehozáskor', +'settings_defaultDocPosition_desc' => 'Ez az alapértelmezett hely egy mappában egy dokumentum létrehozásakor.', +'settings_defaultDocPosition_val_end' => 'vége', +'settings_defaultDocPosition_val_start' => 'eleje', 'settings_defaultSearchMethod' => 'Alapértelmezett keresési módszer', 'settings_defaultSearchMethod_desc' => '', 'settings_defaultSearchMethod_valdatabase' => 'adatbázis', @@ -1249,8 +1265,8 @@ URL: [url]', 'settings_dropFolderDir' => 'Drop mappa könyvtára', 'settings_dropFolderDir_desc' => 'Ez a könyvtár használható az importálandó állományok elhelyezésére a fájlrendszeren a böngészővel történő feltöltés helyett. A könyvtárnak tartalmaznia kell alkönyvtárakat minden felhasználóhoz akinek engedélyezett az állományok ilyen módon történő importálása.', 'settings_Edition' => 'Kiadás beállítások', -'settings_editOnlineFileTypes' => '', -'settings_editOnlineFileTypes_desc' => '', +'settings_editOnlineFileTypes' => 'Online fájltípusok szerkesztése', +'settings_editOnlineFileTypes_desc' => 'Az alábbi végződésekkel vagy mime-típusokkal rendelkező fájlok online szerkeszthetők (CSAK KISBETÜK HASZNÁLHTÓAK!)', 'settings_enable2FactorAuthentication' => '', 'settings_enable2FactorAuthentication_desc' => '', 'settings_enableAcknowledgeWorkflow' => '', @@ -1267,8 +1283,8 @@ URL: [url]', 'settings_enableConverting_desc' => 'Engedélyezi/tiltja az állományok konverzióját', 'settings_enableDebugMode' => '', 'settings_enableDebugMode_desc' => '', -'settings_enableDropFolderList' => '', -'settings_enableDropFolderList_desc' => '', +'settings_enableDropFolderList' => 'Engedélyezzi a fájlok listáját a drop mappa menüben', +'settings_enableDropFolderList_desc' => 'Kapcsolja be a Drop mappa-ban lévő fájlok listáját. A lista megjelenik a főmenüben.', 'settings_enableDropUpload' => 'Gyorsfeltöltés engedélyezése', 'settings_enableDropUpload_desc' => 'Be/Ki kapcsolja a \'Mappa nézet\' oldalon a fogd és vidd feltöltéshez tartozó területetet', 'settings_enableDuplicateDocNames' => 'Azonos dokumentum név engedélyezése', @@ -1283,8 +1299,8 @@ URL: [url]', 'settings_enableFolderTree_desc' => 'Hamis hogy ne jelenjen meg a mappa fastruktúra', 'settings_enableFullSearch' => 'Teljes szöveg keresés engedélyezése', 'settings_enableFullSearch_desc' => 'Engedélyezi a teljes szöveg keresést', -'settings_enableGuestAutoLogin' => '', -'settings_enableGuestAutoLogin_desc' => '', +'settings_enableGuestAutoLogin' => 'Engedélyezi az automatikus belépést a Vendég felhasználónak', +'settings_enableGuestAutoLogin_desc' => 'Ha a vendég bejelentkezés és az automatikus bejelentkezés engedélyezve van, a vendég automatikusan be lesz jelentkezve.', 'settings_enableGuestLogin' => 'Vendég belépésének engedélyezése', 'settings_enableGuestLogin_desc' => 'Ha azt szeretné, hogy bárki be tudjon jelentkezni vendégként, jelölje be ezt a lehetőséget. Megjegyzés: vendég bejelentkezés megbízható környezetben használható', 'settings_enableHelp' => 'Súgó engedélyezése', @@ -1293,10 +1309,10 @@ URL: [url]', 'settings_enableLanguageSelector_desc' => 'Megjelenít egy választást a felhasználói felületen a bejelentkezést követően.', 'settings_enableLargeFileUpload' => 'Nagy méretű állományok feltöltésének engedélyezése', 'settings_enableLargeFileUpload_desc' => 'Ha beállítja az állományok feltöltése elérhető lesz egy jumploadernek hívott java appleten keresztül a böngészőprogram állomány méret korlátja nélkül. Ez engedélyezi több állomány feltöltését egy lépésben.', -'settings_enableMenuTasks' => '', -'settings_enableMenuTasks_desc' => '', -'settings_enableMultiUpload' => '', -'settings_enableMultiUpload_desc' => '', +'settings_enableMenuTasks' => 'Feladatok menüpont engedélyezése', +'settings_enableMenuTasks_desc' => 'Engedélyezi / letiltja a menüelemet, amely a felhasználó összes feladatát tartalmazza. Ez olyan dokumentumokat tartalmaz, amelyeket felül kell vizsgálni, jóvá kell hagyni stb.', +'settings_enableMultiUpload' => 'Több fájl feltöltésének engedélyezése', +'settings_enableMultiUpload_desc' => 'Új dokumentum létrehozásakor több fájl feltölthető. Mindegyik létrehoz egy új dokumentumot.', 'settings_enableNotificationAppRev' => 'A felülvizsgáló/jóváhagyó értesítés engedélyezése', 'settings_enableNotificationAppRev_desc' => 'Ellenőrzi az értesítés küldését a felülvizsgálónak/jóváhagyónak új dokumentum változat hozzáadásakor', 'settings_enableNotificationWorkflow' => 'A felhasználó értesítése a következő munkafolyamatnál', @@ -1325,14 +1341,14 @@ URL: [url]', 'settings_enableSelfReceipt_desc' => '', 'settings_enableSelfRevApp' => 'Engedélyezi a felülvizsgálatot/jóváhagyást a bejelentkezett felhasználó számára', 'settings_enableSelfRevApp_desc' => 'Engedélyezze, a azt szeretné, hogy a bejelentkezett felhasználó listázásra kerüljön felülvizsgálóként/jóváhagyóként és a munkamenet átmeneteknél.', -'settings_enableSessionList' => '', -'settings_enableSessionList_desc' => '', +'settings_enableSessionList' => 'Engedélyezi a Felhasználók menüpont megjelenítését', +'settings_enableSessionList_desc' => 'Bejelentkezett felhasználók megjelenítése a főmenü / felhasználók menüjében.', 'settings_enableThemeSelector' => 'Téma választása', 'settings_enableThemeSelector_desc' => 'Kapcsolja be/ki a témaválasztót a bejelentkező oldalon', 'settings_enableUpdateReceipt' => '', 'settings_enableUpdateReceipt_desc' => '', 'settings_enableUpdateRevApp' => '', -'settings_enableUpdateRevApp_desc' => '', +'settings_enableUpdateRevApp_desc' => 'Engedélyezze ezt, ha a felülvizsgálatot / jóváhagyást megadó felhasználó megváltoztathatja a döntést, amíg a jelenlegi munkafolyamat még nem fejeződött be.', 'settings_enableUserImage' => 'Felhasználói kép engedélyezése', 'settings_enableUserImage_desc' => 'Engedélyezi a felhasználók képeit', 'settings_enableUsersView' => 'Felhasználók nézetének engedélyezése', @@ -1341,10 +1357,10 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => 'Engedélyezi/tiltja a korábbi dokumentum verziók törlését az általános felhasználóknak. Adminisztrátor mindig törölheti a korábbi változatokat.', 'settings_enableVersionModification' => 'Engedélyezi a verziók módosítását', 'settings_enableVersionModification_desc' => 'Engedélyezi/tiltja a dokumentum verziók módosítását az általános felhasználóknak miután a verzió feltöltésre került. Adminisztrátor mindig módosíthatja a verziót feltöltés után.', -'settings_enableWebdavReplaceDoc' => '', -'settings_enableWebdavReplaceDoc_desc' => '', -'settings_enableXsendfile' => '', -'settings_enableXsendfile_desc' => '', +'settings_enableWebdavReplaceDoc' => 'Dokumentum cseréje mentés után', +'settings_enableWebdavReplaceDoc_desc' => 'Ha engedélyezve van, egy dokumentum új verziójának mentése az új verzió létrehozása helyett a régi dokumentumot váltja fel. Ez csak akkor lesz érvényes, ha a felhasználó, a típustípus és a fájlnév megegyezik az utolsó verzióval. Ez hasznos lehet, ha az alkalmazások automatikusan menti a dokumentumot meghatározott időközönként.', +'settings_enableXsendfile' => 'Apache xsendfile module használata', +'settings_enableXsendfile_desc' => 'Ha ez az opció be van állítva, és az xsendfile apache modul telepítve van, akkor a képeket továbbítja.', 'settings_encryptionKey' => 'Titkosító kulcs', 'settings_encryptionKey_desc' => 'Ez a karaktersorozat használható egyedi azonosító létrehozásához amely rejtett mezőként lesz hozzáadva az űrlapokhoz a CSRF támadások megelőzésére.', 'settings_error' => 'Hiba', @@ -1360,16 +1376,16 @@ URL: [url]', 'settings_firstDayOfWeek_desc' => 'A hét első napja', 'settings_footNote' => 'Lábjegyzet', 'settings_footNote_desc' => 'Minden oldal alján megjelenő üzenet', -'settings_fullSearchEngine' => '', -'settings_fullSearchEngine_desc' => '', -'settings_fullSearchEngine_vallucene' => 'Zend Lucene', -'settings_fullSearchEngine_valsqlitefts' => 'SQLiteFTS', +'settings_fullSearchEngine' => 'Szöveg keresési mód', +'settings_fullSearchEngine_desc' => 'Állítsa be a kereséséhez használt módot.', +'settings_fullSearchEngine_vallucene' => 'Dokumentum tartalom keresés', +'settings_fullSearchEngine_valsqlitefts' => 'Adatbázis keresés', 'settings_guestID' => 'Vendég azonosító', 'settings_guestID_desc' => 'A vendég felhasználó azonosítója ami a vendégként történő bejelentkezéskor lesz használva (általában nem szükséges módosítani)', 'settings_httpRoot' => 'Http gyökér', 'settings_httpRoot_desc' => 'A relatív elérési út az URL-ben a tartomány rész után. Ne tartalmazza a http:// előtagot vag a web szerver nevét. Pl.: ha a teljes URL http://www.example.com/seeddms/, adja meg \'/seeddms/\'. Ha az URL http://www.example.com/, adja meg \'/\'', -'settings_incItemsPerPage' => '', -'settings_incItemsPerPage_desc' => '', +'settings_incItemsPerPage' => 'Az oldal végén betöltött bejegyzések száma', +'settings_incItemsPerPage_desc' => 'Ha a mappák és a dokumentumok száma korlátozott, akkor ez beállítja a kiegészítőként betöltött tételek számát, amikor a nézetmappa oldal aljára görget. Ha ezt 0-ra állítja, akkor nincs megjelenítési korlátozás.', 'settings_initialDocumentStatus' => '', 'settings_initialDocumentStatus_desc' => '', 'settings_initialDocumentStatus_draft' => '', @@ -1400,14 +1416,14 @@ URL: [url]', 'settings_maxDirID_desc' => 'Szülő könyvtárban lévő alkönyvtárak maximális mennyisége, Alapérték: 0.', 'settings_maxExecutionTime' => 'Maximális végrehajtási idő (s)', 'settings_maxExecutionTime_desc' => 'Beállítja a szkript maximális engedélyezett futási idejét másodpercben mielőtt megszakítja az értelmező', -'settings_maxItemsPerPage' => '', -'settings_maxItemsPerPage_desc' => '', +'settings_maxItemsPerPage' => 'Egy oldalon megjeleníthető tételek maximális száma', +'settings_maxItemsPerPage_desc' => 'Korlátozza a nézetlistában megjelenő mappák és dokumentumok számát. További tételeket tölt be, amikor az oldal végére görgeti. 0-ra állítva az összes tétel mindig megjelenik.', 'settings_maxRecursiveCount' => 'Rekurzív dokumentum/mappa számláló legnagyobb értéke', 'settings_maxRecursiveCount_desc' => 'A dokumentumok és mappák maximális mennyisége amelyeken ellenőrizni fogják a hozzáférési jogokat, ha rekurzívan számláló tárgyakat. Ha ezt az értéket túllépik, a dokumentumok számát és mappák a Mappa nézetben is becsülhetők.', -'settings_maxSizeForFullText' => '', -'settings_maxSizeForFullText_desc' => '', -'settings_maxUploadSize' => '', -'settings_maxUploadSize_desc' => '', +'settings_maxSizeForFullText' => 'Maximális fájlméret az azonnali indexeléshez', +'settings_maxSizeForFullText_desc' => 'A beállított méretnél kisebb minden új dokumentum verziót a feltöltés után azonnal teljesen indexeli. Minden más esetben csak a metaadatok kerülnek indexelésre.', +'settings_maxUploadSize' => 'Feltölthető állományok maximális mérete', +'settings_maxUploadSize_desc' => 'Ez a feltöltött fájlok maximális mérete. A dokumentum verziókra és a mellékletekre is vonatkozik.', 'settings_more_settings' => 'További beállítások konfigurálása. Alapértelmezett bejelentkezés: admin/admin', 'settings_noDocumentFormFields' => '', 'settings_noDocumentFormFields_desc' => '', @@ -1417,8 +1433,8 @@ URL: [url]', 'settings_no_content_dir' => 'Tartalom könyvtár', 'settings_onePageMode' => '', 'settings_onePageMode_desc' => '', -'settings_overrideMimeType' => '', -'settings_overrideMimeType_desc' => '', +'settings_overrideMimeType' => 'A Mime típus felülbírálása', +'settings_overrideMimeType_desc' => 'A fájl feltöltése esetén felülbírálja a böngésző által szállított Mime típust. Az új Mime típust maga a SeedDMS határozza meg.', 'settings_partitionSize' => 'Részleges fájlméret', 'settings_partitionSize_desc' => 'A részleges állományok mérete, amelyek a jumploader segítségével lesznek feltöltve. Ne adjon meg magasabb értéket, mint a szerveren beállított legnagyobb feltölthető állomány méret.', 'settings_passwordExpiration' => 'Jelszó lejárat', @@ -1442,14 +1458,14 @@ URL: [url]', 'settings_presetExpirationDate_desc' => 'Minden feltöltött dokumentumhoz ezt a lejárati dátumot rendeli hozzá. A PHP strtotime() függvényének formátuma használható, pl.: +5 weeks.', 'settings_previewWidthDetail' => 'Előnézeti képek szélessége (részletek)', 'settings_previewWidthDetail_desc' => 'A részletek oldalon megjelenő előnézeti képek szélessége', -'settings_previewWidthDropFolderList' => '', -'settings_previewWidthDropFolderList_desc' => '', +'settings_previewWidthDropFolderList' => 'Az előnézeti képek szélessége (drop mappa listában)', +'settings_previewWidthDropFolderList_desc' => 'A listában szereplő előnézeti képek szélessége, amikor a fájlt kiválasztja a drop mappából.', 'settings_previewWidthList' => 'Előnézeti képek szélessége (lista)', 'settings_previewWidthList_desc' => 'A listában megjelenő előnézeti képek szélessége', -'settings_previewWidthMenuList' => '', -'settings_previewWidthMenuList_desc' => '', +'settings_previewWidthMenuList' => 'Az előnézeti képek szélessége (menülista)', +'settings_previewWidthMenuList_desc' => 'Az előnézeti képek szélessége, amelyeket tételekként jelennek meg a Drop mappa menüben.', 'settings_printDisclaimer' => 'Nyilatkozat nyomtatása', -'settings_printDisclaimer_desc' => 'Ha igaz a nyilatkozat üzenet a lang.inc állományok lesznek kiíratva a lap alján', +'settings_printDisclaimer_desc' => 'Ha igaz ez a beállítás, akkor s lang.inc-ben a Disclaimer tartalma kerül megjelenítésre a lap alján', 'settings_proxyUPassword' => '', 'settings_proxyUPassword_desc' => '', 'settings_proxyUrl' => '', @@ -1458,10 +1474,10 @@ URL: [url]', 'settings_proxyUser_desc' => '', 'settings_quota' => 'Felhasználói kvóta', 'settings_quota_desc' => 'A felhasználó által a lemezen használható bájtok legnagyobb száma. Állítsa 0-ra a korlátlan lemezterülethez. Ez az érték felülírható valamennyi felhasználó saját profiljában.', -'settings_removeFromDropFolder' => '', -'settings_removeFromDropFolder_desc' => '', -'settings_repositoryUrl' => '', -'settings_repositoryUrl_desc' => '', +'settings_removeFromDropFolder' => 'A sikeres feltöltés után távolítsa el a fájlt a drop mappából', +'settings_removeFromDropFolder_desc' => 'Engedélyezze ezt, ha a drop mappából vett fájlt a sikeres feltöltés után törölhető.', +'settings_repositoryUrl' => 'Bővítmények URL-je', +'settings_repositoryUrl_desc' => 'A bővítmények tárházának URL-je', 'settings_restricted' => 'Korlátozott hozzáférés', 'settings_restricted_desc' => 'Kizárólag azok a felhasználók jelentkezhetnek be, akik a helyi adatbázisban vannak (függetlenül a sikeres LDAP azonosítástól)', 'settings_rootDir' => 'Gyökérkönyvtár', @@ -1474,8 +1490,8 @@ URL: [url]', 'settings_showFullPreview_desc' => '', 'settings_showMissingTranslations' => 'Jelenítse meg a hiányzó fordításokat', 'settings_showMissingTranslations_desc' => 'Felsorolja az összes hiányzó fordítást a lap alján. A bejelentkezett felhasználó képes lesz arra, hogy javaslatot nyújtson be a hiányzó fordításokra, amelyek egy csv állományba kerülnek mentésre. Ne kapcsolja be ezt a funkciót élse környezetben!', -'settings_showSingleSearchHit' => '', -'settings_showSingleSearchHit_desc' => '', +'settings_showSingleSearchHit' => 'Ugrás egyenesen egyetlen keresési találatra', +'settings_showSingleSearchHit_desc' => 'Ha a keresésnek egy találata van, akkor ugorjon a dokumentum tartalmára.', 'settings_Site' => 'Webhely', 'settings_siteDefaultPage' => 'Webhely kezdőlap', 'settings_siteDefaultPage_desc' => 'Alapértelmezett oldal a bejelentkezést követően. Ha üres, akkor az alapértelmezett out/out.ViewFolder.php', @@ -1488,8 +1504,8 @@ URL: [url]', 'settings_smtpPort_desc' => 'SMTP kiszolgáló port, alapértelmezett 25', 'settings_smtpSendFrom' => 'Feladó', 'settings_smtpSendFrom_desc' => 'A levél feladója', -'settings_smtpSendTestMail' => '', -'settings_smtpSendTestMail_desc' => '', +'settings_smtpSendTestMail' => 'Teszt e-mail küldése', +'settings_smtpSendTestMail_desc' => 'Tesztlevelet küld az aktuális e-mail konfiguráció ellenőrzéséhez.', 'settings_smtpServer' => 'SMTP kiszolgáló gépnév', 'settings_smtpServer_desc' => 'SMTP kiszolgáló gépnév', 'settings_smtpUser' => 'SMTP kiszolgáló felhasználó', @@ -1535,7 +1551,7 @@ URL: [url]', 'settings_versiontolow' => 'túl alacsony verzió', 'settings_viewOnlineFileTypes' => 'Online állománytípus nézet', 'settings_viewOnlineFileTypes_desc' => 'A következő végződéssel rendelkező állományok megtekinthetők online (KIZÁRÓLAG KISBETŰS KARAKTEREKET HASZNÁLJON)', -'settings_webdav' => '', +'settings_webdav' => 'WebDAV', 'settings_workflowMode' => 'Munkafolyamat mód', 'settings_workflowMode_desc' => 'A részletes munkafolyamat engedélyezi saját kiadási munkafolyamat megadását a dokumentum változatokhoz.', 'settings_workflowMode_valadvanced' => 'részletes', @@ -1557,6 +1573,7 @@ URL: [url]', 'site_brand' => '', 'sk_SK' => 'Szlovák', 'sort_by_date' => '', +'sort_by_expiration_date' => '', 'sort_by_name' => '', 'sort_by_sequence' => '', 'space_used_on_data_folder' => 'Használt terület az adat mappában', @@ -1666,6 +1683,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ó', @@ -1687,6 +1706,7 @@ URL: [url]', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', 'tasks' => '', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1705,7 +1725,7 @@ URL: [url]', 'timeline_full_add_file' => '', 'timeline_full_add_version' => '', 'timeline_full_scheduled_revision' => '', -'timeline_full_status_change' => '', +'timeline_full_status_change' => '[document]
Verzió [version]: [status]', 'timeline_scheduled_revision' => '', 'timeline_selected_item' => '', 'timeline_skip_add_file' => 'melléklet hozzáadva', @@ -1722,6 +1742,7 @@ URL: [url]', 'to' => 'ig', 'toggle_manager' => 'Kulcs kezelő', 'toggle_qrcode' => '', +'total' => '', 'to_before_from' => 'A lejárati dátum nem előzheti meg a kezdési dátumot', 'transfer_content' => '', 'transfer_document' => 'Tulajdonos váltás', @@ -1821,10 +1842,14 @@ Szülő mappa: [folder_path] Felhasználó: [username] URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name] - Változat törölve', -'version_info' => 'Változat információ', +'version_info' => 'Verzió információ', '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', @@ -1856,7 +1881,7 @@ URL: [url]', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Felhasználó áttekintés', 'wrong_filetype' => '', -'x_more_objects' => '', +'x_more_objects' => '[number] további tétel', 'year_view' => 'Éves nézet', 'yes' => 'Igen', 'zh_CN' => 'Kínai (CN)', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index c497531c8..0d8fd704b 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 (2021), rickr (144), s.pnt (26) $text = array( '2_factor_auth' => 'Autorizzazione a due fattori', @@ -307,6 +307,7 @@ URL: [url]', 'converter_new_cmd' => 'Comando', 'converter_new_mimetype' => 'Nuovo mimetype', 'copied_to_checkout_as' => 'File copiato come \'[filename]\'', +'create_download_link' => '', 'create_fulltext_index' => 'Crea indice fulltext', 'create_fulltext_index_warning' => 'Stai creando un indice fulltext. Questo può occupare un tempo considerevole e ridurre le prestazioni del sistema. Sei sicuro di voler ricreare l\'indice? Prego conferma l\'operazione.', 'creation_date' => 'Data creazione', @@ -431,7 +432,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'Imposta permessi ereditari', 'download' => 'Scarica', 'download_extension' => 'Scarica estensione come file 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_state' => '', 'download_links' => 'Collegamenti di scaricamento', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Ripara tutte le cartelle e i documenti.', 'do_object_setchecksum' => 'Imposta il checksum', 'do_object_setfilesize' => 'Imposta la dimensione del file', @@ -788,6 +803,7 @@ URL: [url]', 'my_documents' => 'Documenti personali', 'my_transmittals' => 'Mie trasmissioni', 'name' => 'Nome', +'nb_NO' => 'Norvegiese (Bokmål)', 'needs_correction' => 'Necessita correzioni', 'needs_workflow_action' => 'Il documento richiede attenzione. Prego controllare il flusso di lavoro.', 'network_drive' => 'Network drive', @@ -1606,6 +1622,7 @@ Name: [username] 'site_brand' => '', 'sk_SK' => 'Slovacco', 'sort_by_date' => 'Ordina per data', +'sort_by_expiration_date' => '', 'sort_by_name' => 'Ordina per nome', 'sort_by_sequence' => 'Ordina per sequenza', 'space_used_on_data_folder' => 'Spazio utilizzato dai dati', @@ -1715,6 +1732,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', @@ -1736,6 +1755,7 @@ Name: [username] 'takeOverIndReviewer' => 'Riprendi il revisore dall\'ultima versione.', 'takeOverIndReviewers' => '', 'tasks' => 'Attività', +'task_core_expireddocs_days' => '', 'task_description' => 'Descrizione', 'task_disabled' => 'Disabilitata', 'task_frequency' => 'Frequenza', @@ -1771,6 +1791,7 @@ Name: [username] 'to' => 'A', 'toggle_manager' => 'Gestore', 'toggle_qrcode' => 'Mostri/nascondi codice QR', +'total' => '', 'to_before_from' => 'La data di fine non può essere antecedente a quella di inizio', 'transfer_content' => 'Trasferisci contenuto', 'transfer_document' => 'Trasferisci documento', @@ -1874,6 +1895,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 c3c4d3608..f8ade3f6d 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -310,6 +310,7 @@ URL: [url]', 'converter_new_cmd' => '명령', 'converter_new_mimetype' => '새 MIME 형태', 'copied_to_checkout_as' => '체크아웃으로 파일(\'[filename]\')이 파일 복사됨', +'create_download_link' => '', 'create_fulltext_index' => '전체 텍스트 인덱스 만들기', 'create_fulltext_index_warning' => '전체 자료의 텍스트 인덱스를 다시 만들 수 있습니다. 이것은 상당한 시간을 요구하며 진행되는 동안 시스템 성능을 감소시킬 수 있습니다. 인덱스를 재 생성하려면, 확인하시기 바랍니다.', 'creation_date' => '생성일', @@ -427,7 +428,21 @@ URL: [url]', 'does_not_inherit_access_msg' => '액세스 상속', 'download' => '내려받기', 'download_extension' => '', +'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_state' => '', 'download_links' => '', +'do_no_transfer_to_user' => '', 'do_object_repair' => '모든 폴더와 문서를 복구', 'do_object_setchecksum' => '오류 검사', 'do_object_setfilesize' => '파일 크기 설정', @@ -784,6 +799,7 @@ URL: [url]', 'my_documents' => '내 문서', 'my_transmittals' => '내 송부', 'name' => '이름', +'nb_NO' => '', 'needs_correction' => '', 'needs_workflow_action' => '이 문서는 당신의주의가 필요합니다. 워크플로우 탭을 확인하시기 바랍니다.', 'network_drive' => '네트워크 드라이브', @@ -1573,6 +1589,7 @@ URL : [url]', 'site_brand' => '', 'sk_SK' => '슬로바키아어', 'sort_by_date' => '', +'sort_by_expiration_date' => '', 'sort_by_name' => '', 'sort_by_sequence' => '', 'space_used_on_data_folder' => '데이터 폴더에 사용되는 공간', @@ -1682,6 +1699,8 @@ URL : [url]', 'submit_review' => '리뷰 제출', 'submit_revision' => '리비전 더하기', 'submit_userinfo' => '정보 제출', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => '\'[username]\'로 전환', 'substitute_user' => '대체 사용자', @@ -1703,6 +1722,7 @@ URL : [url]', 'takeOverIndReviewer' => '최종 버전의 개인별 검수자를 상속합니다.', 'takeOverIndReviewers' => '', 'tasks' => '작업', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1738,6 +1758,7 @@ URL : [url]', 'to' => '마감일', 'toggle_manager' => '전환 매니저', 'toggle_qrcode' => 'QR code 보이기/숨기기', +'total' => '', 'to_before_from' => '종료일은 시작일 전이 될수 없습니다', 'transfer_content' => '', 'transfer_document' => '', @@ -1841,6 +1862,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 ea2a2072f..0f9d42de7 100644 --- a/languages/lo_LA/lang.inc +++ b/languages/lo_LA/lang.inc @@ -305,6 +305,7 @@ URL: [url]', 'converter_new_cmd' => 'ຄຳສັ່ງ', 'converter_new_mimetype' => 'ລະຄອນໃບຊະນິດຫນືື່ງ', 'copied_to_checkout_as' => 'ກັອບປີໄຟລໄປຍັງພື້ນທີ່ເຊັກເອົາເປັນ "[filename] " ໃນ [date]', +'create_download_link' => '', 'create_fulltext_index' => 'ສ້າງດັດສະນີແບບເຕັມຮູບແບບ', 'create_fulltext_index_warning' => 'ເຈົ້າກຳລັງສ້າງດັດຊະນີຂໍ້ຄວາມເຕັມໄຫມ່ ອາດໄຊ້ເວລາເປັນຈຳນວນຫຼາຍແລະລົດປະສິດທິພາບໂດຍລວມຂອງລະບົບເຈົ້າ ຖ້າຫາກວ່າຕ້ອງການສ້າງດັດຊະນີໄຫມ່ກະລຸນາຢືນຢັນການດຳເນີນການຂອງເຈົ້າ', 'creation_date' => 'ສ້າງໄວ້', @@ -424,7 +425,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'ໄດ້ຮັບສິດການເຂົ້າເຖິງ', 'download' => 'ດາວໂຫລດ', 'download_extension' => '', +'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_state' => '', 'download_links' => 'ດາວໂຫລດລິ້ງ', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'ສ້ອມແຊມໂຟລເດີ ແລະເອກະສານທັງໝົດ', 'do_object_setchecksum' => 'ຕັ້ງຄ່າການກວດສອບ', 'do_object_setfilesize' => 'ຕັ້ງຂະໜາດຟາຍ', @@ -781,6 +796,7 @@ URL: [url]', 'my_documents' => 'ເອກະສານຂອງຂ້ອຍ', 'my_transmittals' => 'ການຂົນສົ່ງຂອງຂ້ອຍ', 'name' => 'ຊື່', +'nb_NO' => '', 'needs_correction' => '', 'needs_workflow_action' => 'ກະລຸນາກວດສອບແທັບເວີກໂຟລ,ເອກະສານນີ້ຕ້ອງໃຫ້ຄວາມລະອຽດແລະເອົາໃຈໄສ່', 'network_drive' => 'ໄດຣເຄືອຂ່າຍ', @@ -1599,6 +1615,7 @@ URL: [url]', 'site_brand' => '', 'sk_SK' => 'ສະໂລວາເກຍ', 'sort_by_date' => '', +'sort_by_expiration_date' => '', 'sort_by_name' => '', 'sort_by_sequence' => '', 'space_used_on_data_folder' => 'ຟື້ນທີທີ່ໄຊ້ໃນໂຟລເດີຂໍ້ມູນ', @@ -1708,6 +1725,8 @@ URL: [url]', 'submit_review' => 'ສົ່ງຄວາມຄິດເຫັນ', 'submit_revision' => 'ເພີ່ມຄຳອະທິບາຍ', 'submit_userinfo' => 'ສົ່ງຂໍ້ມູນ', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => 'ຮັບສະໝັກຂໍ້ມູນຜິດເວລາ', 'substitute_to_user' => 'ປ່ຽນເປັນ "[username] "', 'substitute_user' => 'ຜູ້ໄຊ້ງານແທນ', @@ -1729,6 +1748,7 @@ URL: [url]', 'takeOverIndReviewer' => 'ການກວດສອບແຕ່ລະບຸກຄົນຈາກເວີຊັ້ນລ່າສຸດ', 'takeOverIndReviewers' => '', 'tasks' => 'ງານ', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1764,6 +1784,7 @@ URL: [url]', 'to' => 'ໄປຍັງ', 'toggle_manager' => 'ສຳລັບຜູ້ຈັດການ', 'toggle_qrcode' => 'ສະແດງ/ ຊ້ອນລະຫັດ QR', +'total' => '', 'to_before_from' => 'ວັນເລີ້ມຕົ້ນຈະບໍ່ຄືກັບວັນສຸດທ້າຍ', 'transfer_content' => '', 'transfer_document' => '', @@ -1867,6 +1888,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 new file mode 100644 index 000000000..be2819954 --- /dev/null +++ b/languages/nb_NO/lang.inc @@ -0,0 +1,1945 @@ + '2-trinns autentisering', +'2_factor_auth_info' => 'Dette systemet håndhever 2-faktor autentisering. Du trenger Google Authenticator på mobiltelefonen din. Nedenfor ser du to QR-koder. Den rette er din nåværende hemmelighet. På venstre side kan du angi en ny hemmelighet. Hvis du angir en ny hemmelighet, må du huske å skanne den på nytt med Google Authenticator.', +'2_fact_auth_secret' => 'Hemmelig', +'accept' => 'Godkjenn', +'access_control' => 'Adgangskontroll', +'access_control_is_off' => 'Avansert adgangskontroll er deaktivert', +'access_denied' => 'Adgang nektes.', +'access_inheritance' => 'Adgang arv', +'access_mode' => 'Adgangsnivå', +'access_mode_all' => 'Full adgang', +'access_mode_none' => 'Ingen adgang', +'access_mode_read' => 'Leserettigheter', +'access_mode_readwrite' => 'Lese-skrive rettigheter', +'access_permission_changed_email' => 'Rettigheter endret', +'access_permission_changed_email_body' => 'Rettigheter endret +Dokument: [name] +Overordnet katalog: [folder_path] +Bruker: [username] +URL: [url]', +'access_permission_changed_email_subject' => '[sitename]: [name] - Rettigheter endret', +'according_settings' => 'I henhold til innstillinger', +'action' => 'Handling', +'actions' => 'Handlinger', +'action_approve' => 'Godkjenn', +'action_complete' => 'Ferdig', +'action_is_complete' => 'Er ferdig', +'action_is_not_complete' => 'Er ikke ferdig', +'action_reject' => 'Avvist', +'action_review' => 'Sjekket', +'action_revise' => 'Revidert', +'add' => 'Legg til', +'add_approval' => 'Legg til godkjenning', +'add_attrdefgroup' => 'Legg til ny egenskapsgruppe', +'add_document' => 'Legg til dokument', +'add_document_link' => 'Legg til link', +'add_document_notify' => 'Legg til beskjed', +'add_doc_reviewer_approver_warning' => 'NB! Dokumentet kommer automatiskt til å markeres klart for bruk, hvis ingen personer angis for korrektur eller godkjenning av dokumentet.', +'add_doc_workflow_warning' => 'NB! Dokumentet kommer automatiskt til å markeres klart for bruk, om ingen arbetsflyt angis.', +'add_event' => 'Legg til hendelse', +'add_group' => 'Legg til gruppe', +'add_member' => 'Legg til bruker', +'add_multiple_documents' => 'Legg til flere dokumenter', +'add_multiple_files' => 'Legg til flere filer (vil bruke filnavn som dokumentnavn)', +'add_receipt' => 'Bekreftet motatt', +'add_review' => 'Send til gjennomgang', +'add_revision' => 'Legg til godkjenning', +'add_role' => 'Legg til ny rolle', +'add_subfolder' => 'Legg til undermappe', +'add_task' => 'Legg til ny oppgave for denne klassen', +'add_to_clipboard' => 'Flytt til utklipp', +'add_to_transmittal' => 'Legg til overføring', +'add_transmittal' => 'Legg til overføring', +'add_user' => 'Legge til ny bruker', +'add_user_to_group' => 'Legg bruker til gruppe', +'add_workflow' => 'Legg til ny arbeidflyt', +'add_workflow_action' => 'Legg til ny arbeidsflythandling', +'add_workflow_state' => 'Legg til ny arbeidsflyttilstand', +'admin' => 'Administrator', +'admin_tools' => 'Admin-verktøy', +'all' => 'Alle', +'all_categories' => 'Alle kategorier', +'all_documents' => 'Alle dokumenter', +'all_pages' => 'Alle', +'all_users' => 'Alle brukere', +'already_subscribed' => 'Abonnert allerede', +'and' => 'og', +'apply' => 'Søke om', +'approvals_accepted' => '[no_approvals] godkjenninger allerede akseptert', +'approvals_accepted_latest' => '(er [no_approvals] i siste versjon)', +'approvals_and_reviews_accepted' => '[no_approvals] godkjenninger og [no_reviews] anmeldelser allerede akseptert', +'approvals_and_reviews_not_touched' => '[no_approvals] godkjenninger og [no_reviews] anmeldelser ikke berørt', +'approvals_and_reviews_rejected' => '[no_approvals] godkjenninger og [no_reviews] anmeldelser avvist', +'approvals_not_touched' => '[no_approvals] godkjenninger ikke berørt', +'approvals_not_touched_latest' => '(er [no_approvals] i siste versjon)', +'approvals_rejected' => '[no_approvals] godkjenninger allerede avvist', +'approvals_rejected_latest' => '(er [no_approvals] i siste versjon)', +'approvals_without_group' => 'Godkjenninger uten gruppe', +'approvals_without_user' => 'Godkjenninger uten bruker', +'approval_deletion_email' => 'Godkjenningsforespørsel slettet', +'approval_deletion_email_body' => 'Godkjenningsforespørsel slettet +Dokument: [name] +Versjon: [version] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'approval_deletion_email_subject' => '[sitename]: [name] - Godkjenningsforespørsel slettet', +'approval_file' => 'Fil', +'approval_group' => 'Godkjenningsgruppe', +'approval_log' => 'Godkjennings Logg', +'approval_request_email' => 'Godkjennings forespørsel', +'approval_request_email_body' => 'Godkjennings forespørsel +Dokument: [name] +Versjon: [version] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'approval_request_email_subject' => '[sitename]: [name] - Godkjennings forespørsel', +'approval_status' => 'Godkjennings status', +'approval_submit_email' => 'godkjenning av sendt epost', +'approval_submit_email_body' => 'Godkjenning av dokument +Dokument: [name] +Versjon: [version] +Overordnet mappe: [folder_path] +Status: [status] +Kommentar: [comment] +Bruker: [username] +URL: [url]', +'approval_submit_email_subject' => '[sitename]: [name] - Sendt godkjenning', +'approval_summary' => 'Godkjennings oppsummering', +'approval_update_failed' => 'Feil ved oppdatering av godkjennings-status. Status oppdatertes ikke.', +'approvers' => 'Godkjennere', +'approver_already_assigned' => 'Bruker er allerede tilordnet som godkjenner.', +'approver_already_removed' => 'Godkjenner er allerede fjernet fra godkjenningsprosessen eller har allerede sendt inn en godkjenning.', +'april' => 'april', +'archive' => 'arkiv', +'archive_creation' => 'Lag arkiv', +'archive_creation_warning' => 'Med denne operasjonen kan du lage arkiv som inneholder filene til hele DMS-mapper. Etter opprettelsen vil arkivet bli lagret i datamappen på serveren din.
ADVARSEL: et arkiv som er opprettet som menneskelig lesbar, kan være ubrukelig som sikkerhetskopiering av serveren.', +'ar_EG' => 'Arabisk', +'assign_approvers' => 'Tildel godkjennere', +'assign_recipients' => 'Tildel mottakere', +'assign_reviewers' => 'Tildel korrekturleser', +'assign_user_property_to' => 'Sett bruker(e)s egenskaper til', +'assumed_released' => 'Antatt klart', +'attrdefgroup_management' => 'Ledelse av egenskaps grupper', +'attrdefgrp_show_detail' => 'Detaljer', +'attrdefgrp_show_list' => 'Liste', +'attrdefgrp_show_search' => 'Søk', +'attrdefgrp_show_searchlist' => 'Søkeresultat', +'attrdef_exists' => 'Egenskaps definisjon eksisterer allerede', +'attrdef_info' => 'Informasjon', +'attrdef_in_use' => 'Egenskaps definisjon fortsatt i bruk', +'attrdef_management' => 'Styring av egenskaps definisjon', +'attrdef_maxvalues' => 'Maks. antall verdier', +'attrdef_minvalues' => 'Min. antall verdier', +'attrdef_min_greater_max' => 'Verdien av minste tall er større en verdien av maksimum tall', +'attrdef_multiple' => 'Tillat flere verdier', +'attrdef_multiple_needs_valueset' => 'Egenskaps definisjon med flere verdier trenger verdisettes.', +'attrdef_must_be_multiple' => 'Egenskapet må ha mer enn én verdi, men er ikke angitt flere verdier', +'attrdef_name' => 'Navn', +'attrdef_noname' => 'Mangler navn for egenskapsdefinisjon', +'attrdef_objtype' => 'Objekt type', +'attrdef_regex' => 'Standard uttrykk', +'attrdef_type' => 'Type', +'attrdef_type_boolean' => 'Logisk', +'attrdef_type_date' => 'Dato', +'attrdef_type_email' => 'E-post', +'attrdef_type_float' => 'Flyttall', +'attrdef_type_int' => 'Heltall', +'attrdef_type_string' => 'Tekststreng', +'attrdef_type_url' => 'URL', +'attrdef_valueset' => 'Verdisett', +'attributes' => 'Egenskap', +'attribute_changed_email_body' => 'Endret egenskap +Dokument: [name] +Versjon: [version] +Egenskap: [attribute_name] +Gammel verdi: [attribute_old_value] +Ny verdi: [attribute_new_value] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'attribute_changed_email_subject' => '[sitename]: [name] - Endret egenskap', +'attribute_count' => 'Antall egenskaper', +'attribute_value' => 'Antall bruksområder', +'attribute_value_not_in_valueset' => 'Udefinert verdi', +'attr_malformed_boolean' => 'Den angitte verdien \'[value]\' for egenskapen \'[attrname]\' er ikke en gyldig logisk-verdi.', +'attr_malformed_date' => 'Den angitte verdien \'[value]\' for egenskapen \'[attrname]\' er ikke en gyldig dato.', +'attr_malformed_email' => 'Den angitte verdien \'[value]\' for egenskapen \'[attrname]\' er ikke en gyldig URL.', +'attr_malformed_float' => 'Den angitte verdien \'[value]\' for egenskapen \'[attrname]\' er ikke en gyldig flyttalls verdi.', +'attr_malformed_int' => 'Den angitte verdien \'[value]\' for egenskapen \'[attrname]\' er ikke et gyldig heltall.', +'attr_malformed_url' => 'Den angitte verdien \'[value]\' for egenskapen \'[attrname]\' er ikke en gyldig URL.', +'attr_max_values' => 'Det maksimale antallet nødvendige verdier for egenskapen [attrname] er overskredet.', +'attr_min_values' => 'Det minste antallet nødvendige verdier for egenskapen [attrname] er ikke oppnådd.', +'attr_not_in_valueset' => 'Den angitte verdien \'[value]\' for egenskapen \'[attrname]\' er ikke definert.', +'attr_no_regex_match' => 'Den angitte verdien \'[value]\' av egenskapen \'[attrname]\' stemmer ikke overens med vanlige uttrykket \'[regex]\'', +'attr_validation_error' => 'The value \'[value]\' of attribute \'[attrname]\' er ikke gyldig.', +'at_least_n_users_of_group' => 'Minst [number_of_users] brukere av [group]', +'august' => 'August', +'authentication' => 'Godkjenning', +'authentication_failed' => 'Godkjenning misslyktes', +'author' => 'Forfatter', +'automatic_status_update' => 'Automatisk oppdatering av status', +'back' => 'Tilbake', +'backup_list' => 'Eksisterende sikkerhetskopier', +'backup_log_management' => 'Sikkerhetskopi logg', +'backup_remove' => 'Slette sikkerhetskopi', +'backup_tools' => 'Sikkerhetskopi-verktøy', +'between' => 'mellom', +'bg_BG' => 'Bulgaria', +'browse' => 'Bla', +'calendar' => 'Kalender', +'calendar_week' => 'Kalenderuke', +'cancel' => 'Avbryt', +'cannot_assign_invalid_state' => 'Kan ikke endre et foreldet eller avvist dokument', +'cannot_change_final_states' => 'Advarsel: Du kan ikke endre status for dokument som er avvist, utløpt eller i påvente av gjennomgang eller godkjenning', +'cannot_delete_user' => 'Kan ikke slette bruker', +'cannot_delete_yourself' => 'Kan ikke slette deg selv', +'cannot_move_root' => 'Feil: Kan ikke flytte rotmappe.', +'cannot_retrieve_approval_snapshot' => 'Kan ikke hente øyeblikksbilde av godkjenningsstatus for denne dokumentversjonen.', +'cannot_retrieve_review_snapshot' => 'Kan ikke hente øyeblikksbilde av anmeldelsestatus for denne dokumentversjonen.', +'cannot_rm_root' => 'Feil: Kan ikke slette rotmappe.', +'categories' => 'Kategorier', +'categories_loading' => 'Venligst vent på listning av kategorier...', +'category' => 'Kategorier', +'category_exists' => 'Kategorien finnes allerede.', +'category_filter' => 'Bare kategorier', +'category_info' => 'Informasjon', +'category_in_use' => 'Denne kategorien brukes allerede av dokument(er).', +'category_noname' => 'Ingen kategorinavn angitt.', +'ca_ES' => 'Katalonia', +'changelog_loading' => 'Venligst vent til endringsloggen er lastet inn...', +'change_assignments' => 'Angi korrekturleser / godkjenner', +'change_password' => 'Endre passord', +'change_password_message' => 'Ditt passord er endret.', +'change_recipients' => 'Angi mottager', +'change_revisors' => 'Angi korrekturleser', +'change_status' => 'Endre status', +'charts' => 'Diagram', +'chart_docsaccumulated_title' => 'Antall dokumenter', +'chart_docspercategory_title' => 'Dokumenter pr. kategori', +'chart_docspermimetype_title' => 'Dokumenter pr. mime-type', +'chart_docspermonth_title' => 'Nye dokumenter pr. måned', +'chart_docsperstatus_title' => 'Dokumenter pr. status', +'chart_docsperuser_title' => 'Dokumenter pr. bruker', +'chart_selection' => 'Velg diagram', +'chart_sizeperuser_title' => 'Diskplass pr. bruker', +'checkedout_file_has_different_version' => 'Den utsjekkede versjonen er ikke identisk med den gjeldende versjonen. Innsjekking vil ikke oppdatere dokumentet.', +'checkedout_file_has_disappeared' => 'Filen til det utsjekkede dokumentet har forsvunnet. Innsjekking vil ikke være mulig.', +'checkedout_file_is_unchanged' => 'Filen til det utsjekkede dokumentet er fortsatt uendret. Innsjekking vil ikke være mulig. Hvis du ikke planlegger noen endringer, kan du tilbakestille statusen for utsjekking.', +'checkin_document' => 'Innsjekking', +'checkoutpath_does_not_exist' => 'Utsjekking sti mangler', +'checkout_document' => 'Utsjekking', +'checkout_is_disabled' => 'Sjekk ut av dokumentene er deaktivert i konfigurasjonen.', +'choose_attrdef' => 'Velg egenskaps definition', +'choose_attrdefgroup' => 'Velg egenskaps gruppe', +'choose_category' => 'Venligst velg', +'choose_group' => 'Velg gruppe', +'choose_role' => 'Velg rolle', +'choose_target_category' => 'Velg kategori', +'choose_target_document' => 'Velg dokument', +'choose_target_file' => 'Velg fil', +'choose_target_folder' => 'Velg mappe', +'choose_user' => 'Velg bruker', +'choose_workflow' => 'Velg arbeidsflyt', +'choose_workflow_action' => 'Velg arbeidsflythandling', +'choose_workflow_state' => 'Velg arbeidsflyttilstand', +'class_name' => 'Navn på klasse', +'clear_cache' => 'Tøm cache', +'clear_clipboard' => 'Tøm utklippstavle', +'clear_password' => 'Slett passord', +'clipboard' => 'Utklippstavle', +'close' => 'Lukk', +'command' => 'Kommando', +'comment' => 'Kommentar', +'comment_changed_email' => 'Forandre e-post', +'comment_for_current_version' => 'Versjonskommentar', +'configure_extension' => 'Konfigurere utvidelse', +'confirm_clear_cache' => 'Vil du virkelig tømme hurtigbufferen? Dette vil fjerne alle forhåndsberegnede forhåndsbilder.', +'confirm_create_fulltext_index' => 'Ja, jeg vil gjenskape fulltekstindeksen!', +'confirm_move_document' => 'Venligst bekreft flytting av dokumentet.', +'confirm_move_folder' => 'Venligst bekreft flytting av mappen.', +'confirm_pwd' => 'Bekreft passord', +'confirm_rm_attr_value' => 'Vil du virkelig fjerne egenskaps verdien?', +'confirm_rm_backup' => 'Vil du virkelig fjerne filen "[arkname]"?
OBS! Om filen fjernes, kan den ikke gjennopprettes!', +'confirm_rm_document' => 'Vil du virkelig fjerne dokumentet \'[documentname]\'?
OBS! Om dokumentet fjernes, kan det ikke gjennopprettes!', +'confirm_rm_dump' => 'Vil du virkelig fjerne filen "[dumpname]"?
OBS! Om filen tas bort, kan den ikke gjennopprettes!', +'confirm_rm_event' => 'Vil du virkelig fjerne hendelsen "[name]"?
OBS! Om hendelsen fjernes, kan den ikke gjennopprettes!', +'confirm_rm_file' => 'Vil du virkelig fjerne filen "[name]" i dokumentet "[documentname]"?
OBS! Om filen fjernes, kan den ikke gjennopprettes!', +'confirm_rm_folder' => 'Vil du virkelig fjerne mappen \'[foldername]\' og mappens innhold?
OBS! Mappen og innholdet kan ikke gjennopprettes!', +'confirm_rm_folder_files' => 'Vil du virkelig fjerne alle filer i mappen "[foldername]" og i katalogens undermapper?
OBS! Filene kan ikke gjennopprettes!', +'confirm_rm_group' => 'Vil du virkelig fjerne gruppen "[groupname]"?
OBS! Gruppen kan ikke gjennopprettes!', +'confirm_rm_log' => 'Vil du virkelig fjerne loggfilen "[logname]"?
OBS! Loggfilen kan ikke gjennopprettes!', +'confirm_rm_transmittal' => 'Bekreft fjerning av sendingen.', +'confirm_rm_transmittalitem' => 'Bekreft fjerning', +'confirm_rm_user' => 'Vil du virkelig fjerne bruker "[username]"?
OBS! handlingen kan ikke omgjøres!', +'confirm_rm_user_from_processes' => 'Vil du virkelig ta bort bruker "[username]" fra alle arbeidsflyter?
OBS! Denne handlingen kan føre til utgivelse av dokumenter hvis brukeren var den eneste eller siste godkjenneren.', +'confirm_rm_version' => 'Vil du virkelig ta bort versionen [version] av dokumentet "[documentname]"?
OBS! handlingen kan ikke omgjøres!', +'confirm_transfer_link_document' => 'Velg om du vil koble det dratte dokumentet eller overføre innholdet til måldokumentet som en ny versjon. Bare dokumenter med én versjon kan overføres. Det dratte dokumentet blir fjernet etterpå.', +'confirm_transfer_objects' => 'Vil du virkelig flytte dokument, kataloger m.m. tilhørende bruker "[username]"? OBS! handlingen kan ikke omgjøres!', +'confirm_update_transmittalitem' => 'Bekreft oppdatering', +'content' => 'Innhold', +'continue' => 'Fortsett', +'converter_new_cmd' => 'Kommando', +'converter_new_mimetype' => 'Ny MIME-type', +'copied_to_checkout_as' => 'Filen er kopiert til utsjekkingsmappen som \'[filename]\' pr. [date]', +'create_download_link' => 'Lag en link for nedlasting', +'create_fulltext_index' => 'Lag fulltekst-søkindex', +'create_fulltext_index_warning' => 'Du er i ferd med å gjenskape fulltekstindeksen. Dette kan ta betydelig tid og redusere den generelle systemytelsen. Hvis du virkelig vil gjenskape indeksen, må du bekrefte operasjonen.', +'creation_date' => 'Opprettet', +'cs_CZ' => 'Tjekkisk', +'current_password' => 'Nåværende passord', +'current_quota' => 'Systemets verdi før kvote er angitt [quota].', +'current_state' => 'Aktuell status', +'current_version' => 'Aktuell version', +'daily' => 'Daglig', +'databasesearch' => 'Søk i database', +'date' => 'Dato', +'days' => 'dager', +'debug' => 'Feilsøking', +'december' => 'Desember', +'default_access' => 'Standard tilgang', +'default_keywords' => 'Tilgjengelige søkeord', +'definitions' => 'Definisjoner', +'delete' => 'Slette', +'details' => 'Detaljer', +'details_version' => 'Detaljer for versjon: [version]', +'de_DE' => 'Tysk', +'disclaimer' => 'Dette er et klassifisert område. Tilgang er bare tillatt for autorisert personell. Ethvert brudd vil bli tiltalt i henhold til nasjonale og internasjonale lover.', +'discspace' => 'Diskplass', +'docs_in_reception_no_access' => 'Dokumenter med mottak uten tilgang fra mottaker', +'docs_in_revision_no_access' => 'Dokumenter i revisjon uten tilgang fra korrekturleser', +'document' => 'Dokument', +'documentcontent' => 'Dokumentinnehold', +'documents' => 'Dokumenter', +'documents_checked_out_by_you' => 'Dokument sjekket ut av deg', +'documents_expired' => 'Utgåtte dokumenter', +'documents_in_process' => 'Dokumenter under arbeid', +'documents_locked' => 'Låste dokumenter', +'documents_locked_by_you' => 'Dokumenter som du har låst', +'documents_only' => 'Bare dokumenter', +'documents_to_approve' => 'Dokumenter som venter på din godkjenning', +'documents_to_correct' => 'Dokumenter som trenger dine rettelser', +'documents_to_process' => 'Dokumenter som trenger din behandling', +'documents_to_receipt' => 'Dokumenter som venter på din bekreftelse', +'documents_to_review' => 'Dokumenter som venter på din vurdering', +'documents_to_revise' => 'Dokument som venter på din gjennomgang', +'documents_to_trigger_workflow' => 'Dokumenter i arbeidsflyt', +'documents_user_draft' => 'Utkast', +'documents_user_expiration' => 'Utgåtte dokumenter', +'documents_user_needs_correction' => 'Dokumenter som må korrigeres', +'documents_user_no_reception' => 'Dokumenter uten mottak', +'documents_user_obsolete' => 'Foreldede dokumenter', +'documents_user_reception' => 'Dokument som venter på mottagelse', +'documents_user_rejected' => 'Avviste dokumenter', +'documents_user_requiring_attention' => 'Dokumenter eid av deg som krever oppmerksomhet', +'documents_with_notification' => 'Dokumenter med meldinger', +'document_already_checkedout' => 'Dokumentet er allerede sjekket ut', +'document_already_locked' => 'Dette dokumentet er allerede låst', +'document_attribute_changed_email_body' => 'Egenskaper forandret +Dokument: [name] +Egenskap: [attribute_name] +Gammel verdi: [attribute_old_value] +Ny verdi: [attribute_new_value] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'document_attribute_changed_email_subject' => '[sitename]: [name] - Egenskaper forandret', +'document_comment_changed_email' => 'Kommentar endret', +'document_comment_changed_email_body' => 'Kommentar endret +Dokument: [name] +Gamel kommentar: [old_comment] +Ny kommentar: [new_comment] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'document_comment_changed_email_subject' => '[sitename]: [name] - Kommentar endret', +'document_count' => 'Antall dokumenter', +'document_deleted' => 'Dokumentet slettet', +'document_deleted_email' => 'Dokumentet er slettet', +'document_deleted_email_body' => 'Dokumentet er slettet +Dokument: [name] +Overordnet mappe: [folder_path] +Bruker: [username]', +'document_deleted_email_subject' => '[sitename]: [name] - Dokumentet er slettet', +'document_duplicate_name' => 'Dupliser dokumentnavn', +'document_has_no_workflow' => 'Dokumentet har ingen arbeidsflyt', +'document_infos' => 'Dokumentinformation', +'document_is_checked_out' => 'Dokumentet er allerede utsjekket. Hvis du laster opp en ny version kan den utsjekkede versionen ikke sjekkes inn igen.', +'document_is_not_locked' => 'Dette dokumentet er ikke låst', +'document_link_by' => 'Koblet av', +'document_link_public' => 'Offentlig', +'document_moved_email' => 'Dokument er flyttet', +'document_moved_email_body' => 'Dokument er flyttet +Dokument: [name] +Gammel mappe: [old_folder_path] +Ny mappe: [new_folder_path] +Bruker: [username] +URL: [url]', +'document_moved_email_subject' => '[sitename]: [name] - Dokumentet er flyttet', +'document_not_checkedout' => 'Dokumentet er ikke utsjekket.', +'document_renamed_email' => 'Dokumentet har byttet navn.', +'document_renamed_email_body' => 'Dokumentet fikk nytt navn +Dokument: [name] +Overordnet mappe: [folder_path] +Gammelt navn: [old_name] +Bruker: [username] +URL: [url]', +'document_renamed_email_subject' => '[sitename]: [name] - Dokumentet fikk nytt navn', +'document_status_changed_email' => 'Dokument status endret', +'document_status_changed_email_body' => 'Dokument status endret +Dokument: [name] +Status: [status] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'document_status_changed_email_subject' => '[sitename]: [name] - Dokumentet status er endret', +'document_title' => 'Dokument \'[documentname]\'', +'document_transfered_email_body' => 'Dokumentet er overført til en annen bruker +Dokument: [name] +Ny bruker: [newuser] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'document_transfered_email_subject' => '[sitename]: [name] - Flyttet dokument', +'document_updated_email' => 'Dokumentet er oppdatert', +'document_updated_email_body' => 'Dokumentet er oppdatert +Dokument: [name] +Overordnet mappe: [folder_path] +Bruker: [username] +Kommentarer: [comment] +Versjons kommentarer: [version_comment] +URL: [url]', +'document_updated_email_subject' => '[sitename]: [name] - Dokumentet er oppdatert', +'does_not_expire' => 'Løper aldri ut', +'does_not_inherit_access_msg' => 'Arvet ikke tilhørlighet', +'download' => 'Last ned', +'download_extension' => 'Last ned utvidelse som zip-fil', +'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_state' => '', +'download_links' => 'Nedlastings link', +'do_no_transfer_to_user' => '', +'do_object_repair' => 'Reparere alle mapper og dokumenter.', +'do_object_setchecksum' => 'Legg til checksum', +'do_object_setfilesize' => 'Angi filstørrelse', +'do_object_setfiletype' => 'Angi filtype', +'do_object_unlink' => 'Slett dokumentversion', +'draft' => 'Utkast', +'draft_pending_approval' => 'Utkast - venter på godkjenning', +'draft_pending_review' => 'Utkast - ventar på gjennomgang', +'drag_icon_here' => 'Dra ikon av mappen eller dokument hit!', +'dropfolderdir_missing' => 'Din personlige slippmappe eksisterer ikke på serveren! Be administratoren din om å opprette den.', +'dropfolder_file' => 'Fil fra personlige slippmappe', +'dropfolder_folder' => 'Katalog fra personlige slippmappe', +'dropfolder_metadata' => 'Metadata fra personlige slippmappe', +'dropupload' => 'Hurtig opplasting', +'drop_files_here' => 'Dra filene hit!', +'dump_creation' => 'Lag database-dump', +'dump_creation_warning' => 'Med denne operasjonen kan du opprette en dump-fil med databaseinnholdet. Etter opprettelsen blir dump-filen lagret i datamappen til serveren din.', +'dump_list' => 'Eksisterende dump-filer', +'dump_remove' => 'Ta bort dumpfil', +'duplicates' => 'Duplikater', +'duplicate_content' => 'Dubliser innehold', +'edit' => 'Rediger', +'edit_attributes' => 'Rediger egenskaper', +'edit_comment' => 'Rediger kommentar', +'edit_default_keywords' => 'Rediger søkeord', +'edit_document_access' => 'Rediger adgang', +'edit_document_notify' => 'Dokumentvarslingsliste', +'edit_document_props' => 'Rediger dokument', +'edit_event' => 'Rediger hendelse', +'edit_existing_access' => 'Rediger adgangsliste', +'edit_existing_attribute_groups' => 'Rediger egenskapsgruppe', +'edit_existing_notify' => 'Rediger varslingsliste', +'edit_folder_access' => 'Rediger adgang', +'edit_folder_attrdefgrp' => 'Rediger egenskapsgrupper', +'edit_folder_notify' => 'Beskjed-liste mappe', +'edit_folder_props' => 'Rediger mappe', +'edit_group' => 'Rediger gruppe', +'edit_online' => 'Rediger online', +'edit_online_warning' => 'Lagring av endringene vil overskrive innholdet i den gjeldende versjonen, i stedet for å opprette en ny versjon.', +'edit_task' => 'Redigere oppgave', +'edit_transmittal_props' => 'Rediger overføringsegenskaper', +'edit_user' => 'Rediger bruker', +'edit_user_details' => 'Rediger brukerinformasjon', +'edit_version' => 'Rediger versjon', +'el_GR' => 'Gresk', +'email' => 'E-post', +'email_error_title' => 'Ingen e-post adresse er oppgitt', +'email_footer' => 'Du kan alltid endre e-postinnstillingene dine ved å bruke \'Min side\' funksjoner', +'email_header' => 'Dette er en automatisk melding fra DMS-serveren.', +'email_not_given' => 'Vennligst skriv inn en gyldig e-post adresse.', +'empty_attribute_group_list' => 'Ingen egenskapsgrupper', +'empty_folder_list' => 'Ingen dokumenter eller mapper', +'empty_list' => 'Ingen oppføringer', +'empty_notify_list' => 'Ingen oppføringer', +'en_GB' => 'Engelsk (GB)', +'equal_transition_states' => 'Status for start og slutt er lik', +'error' => 'Feil', +'error_add_aro' => 'Feil under tilføyelse av adgangsforespørselsobjekt', +'error_add_permission' => 'Feil under tilføyelse av tillatelse', +'error_cleared_cache' => 'Feil ved rensning av hurtig-minne', +'error_edit_task' => 'Feil ved lagring av oppgave', +'error_extension_getlist' => 'Feil under mottak av utvidelsesliste fra depotet', +'error_importfs' => 'Feil under import av skjemafilsystem', +'error_no_document_selected' => 'Ingen dokumenter valgt', +'error_no_folder_selected' => 'Ingen katalog valgt', +'error_occured' => 'En feil har skjedd', +'error_remove_document' => 'Feil ved sletting av dokument', +'error_remove_folder' => 'Feil ved sletting av katalog', +'error_remove_permission' => 'Feil ved sletting av tillatelse', +'error_rm_workflow' => 'Feil ved fjerning av arbeidsflyt', +'error_rm_workflow_action' => 'Feil ved fjerning av arbeidsflythandling', +'error_rm_workflow_state' => 'Feil ved fjerning av arbeidsflyttilstand', +'error_toogle_permission' => 'Feil under endring av tillatelse', +'error_transfer_document' => 'Feil under overføring av dokument', +'error_trigger_workflow' => 'Feil under utløsning av arbeidsflyt', +'error_update_document' => 'Feil under oppdatering av dokument', +'error_uploading_reviewer_only' => 'Feil når du oppretter dokumentet. Dokumentet har en korrekturleser, men ingen godkjenner.', +'es_ES' => 'Spansk', +'event_details' => 'Arrangementsdetaljer', +'exclude_items' => 'Ekskluderte elementer', +'expired' => 'Utløpt', +'expired_at_date' => 'Utløpt pr. [datetime]', +'expired_documents' => 'Utløpte dokumenter', +'expires' => 'Utløper', +'expire_by_date' => 'Utgått på dato', +'expire_in_1d' => 'Utløper om 1 dag', +'expire_in_1h' => 'Utløper om 1 time', +'expire_in_1m' => 'Utløper om 1 måned', +'expire_in_1w' => 'Utløper om 1 uke', +'expire_in_1y' => 'Utløper om 1 år', +'expire_in_2h' => 'Utløper om 2 timer', +'expire_in_2y' => 'Utløper om 2 år', +'expire_today' => 'Utløper idag', +'expire_tomorrow' => 'Utløper i morgon', +'expiry_changed_email' => 'Utløpsdato endret', +'expiry_changed_email_body' => 'Utløpsdato endret +Dokument: [name] +Overordned mappe: [folder_path] +Bruker: [username] +URL: [url]', +'expiry_changed_email_subject' => '[sitename]: [name] - Utløpsdato endret', +'export' => 'Eksport', +'extension_archive' => 'Utvidelse', +'extension_changelog' => 'Endringslogg', +'extension_loading' => 'Laster inn utvidelser ...', +'extension_manager' => 'Administrer utvidelser', +'extension_mgr_installed' => 'Innstallert', +'extension_mgr_no_upload' => 'Det er ikke mulig å laste opp nye utvidelser fordi utvidelseskatalogen ikke kan skrives til.', +'extension_mgr_repository' => 'Tilgjengelig', +'extension_version_list' => 'Versjon', +'february' => 'Februar', +'file' => 'Fil', +'files' => 'Filer', +'files_deletion' => 'Sletting av filer', +'files_deletion_warning' => 'Med dette alternativet kan du slette alle filer av hele DMS-mapper. Informasjon om versjon vil forbli synlig.', +'files_loading' => 'Vennligst vent til listen over filer er lastet inn ...', +'filetype' => 'Filtype', +'file_size' => 'Filstørrelse', +'filter_for_documents' => 'Tilleggsfilter for dokumentet', +'filter_for_folders' => 'Tilleggsfilter for mapper', +'folder' => 'Mappe', +'folders' => 'Mapper', +'folders_and_documents_statistic' => 'Innholdsoversikt', +'folders_with_notification' => 'Mapper med varsling', +'folder_attribute_changed_email_body' => 'Egenskap endret +Mappe: [name] +Egenskaper: [attribute_name] +Gammel verdi: [attribute_old_value] +Ny verdi: [attribute_new_value] +Overordned mappe: [folder_path] +Bruker: [username] +URL: [url]', +'folder_attribute_changed_email_subject' => '[sitename]: [name] - Egenskap endret', +'folder_comment_changed_email' => 'Kommentar er endret', +'folder_comment_changed_email_body' => 'Kommentar er endret +Mappe: [name] +Tidigare kommentar: [old_comment] +Ny kommentar: [new_comment] +Overordned mappe: [folder_path] +Bruker: [username] +URL: [url]', +'folder_comment_changed_email_subject' => '[sitename]: [name] - Kommentar er endret', +'folder_contents' => 'Mappe innhold', +'folder_deleted_email' => 'Mappen er slettet', +'folder_deleted_email_body' => 'Mappen er slettet +Mappe: [name] +Overordned mappe: [folder_path] +Bruker: [username] +URL: [url]', +'folder_deleted_email_subject' => '[sitename]: [name] - Mappen er slettet', +'folder_infos' => 'Mappe informasjon', +'folder_moved_email' => 'Mappen er flyttet', +'folder_moved_email_body' => 'Mappen er flyttet +Mappe: [name] +Tidigare mappe: [old_folder_path] +Ny mappe: [new_folder_path] +Bruker: [username] +URL: [url]', +'folder_moved_email_subject' => '[sitename]: [name] - Mappen er flyttet', +'folder_renamed_email' => 'Mappen har byttet navn', +'folder_renamed_email_body' => 'Mappen har byttet navn +Mappe: [name] +Overordned mappe: [folder_path] +Tidigare mappe: [old_name] +Bruker: [username] +URL: [url]', +'folder_renamed_email_subject' => '[sitename]: [name] - Mappen har byttet navn', +'folder_title' => 'Mappe \'[foldername]\'', +'foot_note' => 'Fotnote', +'force_update' => 'Oppdater', +'friday' => 'Fredag', +'friday_abbr' => 'Fr', +'from' => 'Fra', +'fr_FR' => 'Fransk', +'fullsearch' => 'Fulltekst søking', +'fullsearch_hint' => 'Bruk fulltekst indeks', +'fulltextsearch_disabled' => 'Indeksering for fulltekstsøkning er deaktivert', +'fulltext_converters' => 'Indeks dokument konvertering', +'fulltext_info' => 'Fulltekst indeksinfo', +'global_attributedefinitiongroups' => 'Egenskapsgrupper', +'global_attributedefinitions' => 'Egenskaper', +'global_default_keywords' => 'Globale søkeord', +'global_document_categories' => 'Kategorier', +'global_workflows' => 'Arbeidsflyt', +'global_workflow_actions' => 'Arbeidsflyt-handlinger', +'global_workflow_states' => 'Arbeidsflyt-status', +'group' => 'Gruppe', +'groups' => 'Grupper', +'group_approval_summary' => 'Gruppegodkjennings-oppsummering', +'group_exists' => 'Gruppen finnes allerede.', +'group_info' => 'Gruppe informasjon', +'group_management' => 'Gruppe ledelse', +'group_members' => 'Gruppemedlemmer', +'group_receipt_summary' => 'Gruppe kvitterings sammendrag', +'group_review_summary' => 'Sammendrag av gruppevisning', +'group_revision_summary' => 'Sammendrag av grupperevisjon', +'guest_login' => 'Logg inn som gjest', +'guest_login_disabled' => 'Gjeste innlogging er deaktivert.', +'hash' => 'Hash', +'help' => 'Hjelp', +'home_folder' => 'Hjemme mappe', +'hook_name' => 'Hook-navn', +'hourly' => 'Hver time', +'hours' => 'timer', +'hr_HR' => 'Kroatsia', +'human_readable' => 'Menneskelig lesbart arkiv', +'hu_HU' => 'Ungarn', +'id' => 'Navn', +'identical_version' => 'Ny version er identisk med nåverende version.', +'import' => 'Import', +'importfs' => 'Import fra filsystem', +'import_extension' => 'Importer utvidelse', +'import_fs' => 'Import fra filsystem', +'import_fs_warning' => 'Dette fungerer bare for mapper i slippmappen. Operasjonen importerer rekursivt alle mapper og filer. Filer vil bli gitt ut umiddelbart.', +'include_content' => 'Inkludere innhold', +'include_documents' => 'Inkludere dokument', +'include_subdirectories' => 'Inkludere undermapper', +'indexing_tasks_in_queue' => 'Indekserings oppgaver i kø', +'index_converters' => 'Index konvertering', +'index_done' => 'Ferdig', +'index_error' => 'Feil', +'index_folder' => 'Indekseringsmappe', +'index_no_content' => 'Indekserte ikke innhold', +'index_pending' => 'Avventer', +'index_waiting' => 'Venter', +'individuals' => 'Personer', +'individuals_in_groups' => 'Medlemmer i en gruppe', +'info_recipients_tab_not_released' => 'Bekreftelse av mottak for denne dokumentversjonen er ikke mulig fordi versjonen ikke er utgitt.', +'inherited' => 'arvet', +'inherits_access_copy_msg' => 'Kopier arvet adgangsliste', +'inherits_access_empty_msg' => 'Start med tom adgangsliste', +'inherits_access_msg' => 'Tilgang blir arvet.', +'internal_error' => 'Intern feil', +'internal_error_exit' => 'Intern feil. Kan ikke fullføre forespørselen.', +'invalid_access_mode' => 'Ugyldig adgangsmodus', +'invalid_action' => 'Ugyldig handling', +'invalid_approval_status' => 'Ugyldig godkjenningstatus', +'invalid_create_date_end' => 'Ugyldig sluttdato for opprettelsesdatoer.', +'invalid_create_date_start' => 'Ugyldig startdato for opprettelsesdatoer.', +'invalid_doc_id' => 'Ugyldig dokumentnavn', +'invalid_dropfolder_folder' => 'Ugyldig mappe i slippmappe', +'invalid_expiration_date_end' => 'Ugyldig sluttdato for utløpsdatoer.', +'invalid_expiration_date_start' => 'Ugyldig startdato for utløpsdatoer.', +'invalid_file_id' => 'Ugyldig filnavn', +'invalid_folder_id' => 'Ugyldig mappenavn', +'invalid_group_id' => 'Ugyldig gruppenavn', +'invalid_link_id' => 'Ugyldig koblingsnavn', +'invalid_request_token' => 'Ugyldig forespørsels token', +'invalid_review_status' => 'Ugyldig gjennomgangsstatus', +'invalid_sequence' => 'Ugyldig sekvens verdi', +'invalid_status' => 'Ugyldig dokument status', +'invalid_target_doc_id' => 'Ugyldig navn for måldokumentet', +'invalid_target_folder' => 'Ugyldig navn for målmappe', +'invalid_user_id' => 'Ugyldig brukernavn', +'invalid_version' => 'Ugyldig dokument versjon', +'in_folder' => 'I', +'in_revision' => 'I revisjon', +'in_workflow' => 'I arbeidsflyt', +'is_disabled' => 'Deaktivert konto', +'is_hidden' => 'Skjul fra brukerlisten', +'it_IT' => 'Italiensk', +'january' => 'Januar', +'js_form_error' => 'Skjemaet inneholder fortsatt # feil.', +'js_form_errors' => 'Skjemaet inneholder fortsatt # feil.', +'js_invalid_email' => 'E-postadressen er ugyldig', +'js_no_approval_group' => 'Velg en godkjenningsgruppe', +'js_no_approval_status' => 'Velg godkjenningsstatus', +'js_no_comment' => 'Det er ingen kommentarer', +'js_no_currentpwd' => 'Vennligst tast inn ditt nåværende passord', +'js_no_email' => 'Skriv inn din e-postadresse', +'js_no_file' => 'Velg en fil', +'js_no_keywords' => 'Spesifiser noen søkeord', +'js_no_login' => 'Skriv inn et brukernavn', +'js_no_name' => 'Skriv inn et navn', +'js_no_override_status' => 'Velg den nye [override] statusen', +'js_no_pwd' => 'Du må skrive inn passordet ditt', +'js_no_query' => 'Skriv inn et spørsmål', +'js_no_review_group' => 'Velg en vurderingsgruppe', +'js_no_review_status' => 'Velg vurderingsstatus', +'js_pwd_not_conf' => 'Passord og passordbekreftelse er ikke like!', +'js_select_user' => 'Velg en bruker', +'js_select_user_or_group' => 'Velg minst en bruker eller en gruppe', +'js_unequal_passwords' => 'Passordene er ikke identiske!', +'july' => 'Juli', +'june' => 'Juni', +'keep' => 'Beholde', +'keep_doc_status' => 'Beholde dokumentstatus', +'keywords' => 'Søkeord', +'keywords_loading' => 'Vente til listan med søkeord er lastet...', +'keyword_exists' => 'Søkeordet finnes allerede', +'ko_KR' => 'Koreansk', +'language' => 'Språk', +'lastaccess' => 'Siste tilgang', +'last_update' => 'Siste oppdatering', +'legend' => 'Innholdsfortegnelse', +'librarydoc' => 'Dokumenter fra biblioteket', +'linked_documents' => 'Relaterte dokumenter', +'linked_files' => 'Vedlegg', +'linked_to_current_version' => 'Link til nåverende versjon', +'linked_to_document' => 'Link til dokument', +'linked_to_this_version' => 'Link til denne versjonen', +'link_alt_updatedocument' => 'Om du vil laste opp filer som er større enn den aktuella størsta tillate størrelsen, bruk den alternative metoden for å laste opp filer Alternativ opplasting.', +'link_document' => 'Koblingsdokument', +'link_to_version' => 'Vedlegg til versjonen', +'list_access_rights' => 'Liste over alle rettigheter...', +'list_contains_no_access_docs' => 'Listen inneholder flere dokumenter du ikke har tilgang til og ikke vises.', +'list_hooks' => 'Liste hooks', +'list_tasks' => 'Liste oppgaver', +'local_file' => 'Lokal fil', +'locked_by' => 'Låst av', +'lock_document' => 'Låst', +'lock_message' => 'Detta dokumentet er låst av [username]. Bara autoriserte brukere kan låse opp dokumentet.', +'lock_status' => 'Status', +'logfile_loading' => 'Vent til loggfilen er lastet inn...', +'login' => 'Innlogging', +'login_disabled_text' => 'Kontoen din er deaktivert, sannsynligvis på grunn av for mange mislykkede pålogginger.', +'login_disabled_title' => 'Konto er deaktivert', +'login_error_text' => 'Feil med innloggingen. Brukernavn eller passord er feil.', +'login_error_title' => 'Innloggingsfeil', +'login_not_given' => 'Det er ikke gitt noe brukernavn', +'login_ok' => 'Innloggingen var velykket', +'login_restrictions_apply' => 'Pålogging mislyktes på grunn av begrensninger', +'logout' => 'Logg ut', +'log_management' => 'Loggfil-håntering', +'lo_LA' => 'Laotian', +'malformed_expiration_date' => 'Feil utløpsdato', +'manager' => 'Leder', +'manager_of_group' => 'Du er leder for denne gruppen', +'mandatory_approvergroups' => 'Obligatoriske grupper av godkjennere', +'mandatory_approvergroup_no_access' => 'Obligatorisk gruppe av godkjennere \'[group]\' har mangelfull adgangsrettigheter.', +'mandatory_approvers' => 'Obligatoriske godkjennere', +'mandatory_approver_no_access' => 'Obligatorisk godkjenner \'[user]\' har mangelfull adgangsrettigheter.', +'mandatory_reviewergroups' => 'Obligatorisk gruppe korrekturleser', +'mandatory_reviewergroup_no_access' => 'Obligatorisk gruppe korrekturleser \'[group]\' har mangelfull adgangsrettigheter.', +'mandatory_reviewers' => 'Obligatorisk korrekturleser', +'mandatory_reviewer_no_access' => 'Obligatorisk korrekturleser \'[user]\' har mangelfull adgangsrettigheter.', +'march' => 'Mars', +'max_upload_size' => 'Maksimal størrelse for opplasting', +'may' => 'Mai', +'menu_dropfolder' => 'Slipp mappe', +'menu_upload_from_dropfolder' => 'Importer denne filen', +'mimetype' => 'Mime type', +'minutes' => 'minutter', +'misc' => 'Diverse', +'missing_checksum' => 'Mangler sjekksum', +'missing_file' => 'Mangler fil', +'missing_filesize' => 'Mangler filstørrelse', +'missing_reception' => 'Mangler mottager', +'missing_request_object' => 'Mangler forespørsels-objekt', +'missing_transition_user_group' => 'Mangler bruker / gruppe for overgang', +'monday' => 'Mandag', +'monday_abbr' => 'Ma', +'monthly' => 'Månedlig', +'month_view' => 'Månedsvisning', +'more_objects_loading' => 'Flere objekter lastes inn ...', +'move' => 'Flytte', +'move_clipboard' => 'Flytt utklippstavlen', +'move_document' => 'Flytte dokument', +'move_folder' => 'Flytte mappe', +'my_account' => 'Min side', +'my_documents' => 'Mine dokumenter', +'my_transmittals' => 'Mine sendinger', +'name' => 'Navn', +'nb_NO' => 'Norsk (Bokmål)', +'needs_correction' => 'Trenger korrigering', +'needs_workflow_action' => 'Dette dokumentet krever oppmerksomhet. Kontroller arbeidsflytfanen.', +'network_drive' => 'Nettverksstasjon', +'never' => 'aldri', +'new' => 'Ny', +'new_attrdef' => 'Legg til egenskapsdefinisjon', +'new_default_keywords' => 'Legg til søkeord', +'new_default_keyword_category' => 'Legg til kategori for søkeord', +'new_document_category' => 'Legg til kategori', +'new_document_email' => 'Nytt dokument', +'new_document_email_body' => 'Nytt dokument +Navn: [name] +Overordnt mappe: [folder_path] +Kommentar: [comment] +Versjons kommentar: [version_comment] +Bruker: [username] +URL: [url]', +'new_document_email_subject' => '[sitename]: [folder_name] - Nytt dokument', +'new_file_email' => 'Nytt bilag', +'new_file_email_body' => 'Nytt bilag +Navn: [name] +Dokument: [document] +Kommentar: [comment] +Bruker: [username] +URL: [url]', +'new_file_email_subject' => '[sitename]: [document] - Nytt bilag', +'new_folder' => 'Ny mappe', +'new_password' => 'Nytt passord', +'new_subfolder_email' => 'Ny mappe', +'new_subfolder_email_body' => 'Ny mappe +Navn: [name] +Overordnt mappe: [folder_path] +Kommentar: [comment] +Bruker: [username] +URL: [url]', +'new_subfolder_email_subject' => '[sitename]: [name] - Ny mappe', +'new_user_image' => 'Nytt bilde', +'next_revision_abbr' => 'Neste rev.', +'next_state' => 'Ny status', +'nl_NL' => 'Nederland', +'no' => 'Nei', +'notification' => 'Melding', +'notify_added_email' => 'Du har blitt lagt til varslingslisten', +'notify_added_email_body' => 'Lagt til varslingslisten +Navn: [name] +Overordnt mappe: [folder_path] +Bruker: [username] +URL: [url]', +'notify_added_email_subject' => '[sitename]: [name] - Lagt til varslingsliste', +'notify_deleted_email' => 'Du har blitt fjernet fra varslingslisten', +'notify_deleted_email_body' => 'Fjernet fra varslingslisten +Navn: [name] +Overordnt mappe: [folder_path] +Bruker: [username] +URL: [url]', +'notify_deleted_email_subject' => '[sitename]: [name] - Fjernet fra varslingslisten', +'november' => 'November', +'now' => 'nå', +'no_action' => 'Ingen handling nødvendig', +'no_approval_needed' => 'Ingen godkjenning i påvente.', +'no_attached_files' => 'Ingen vedlagte filer', +'no_backup_dir' => 'Sikkerhetskopi mappe er ikke angitt.', +'no_current_version' => 'Du har en gammal version av SeedDMS. Siste versionen er [latestversion].', +'no_default_keywords' => 'Ingen søkeord tilgjengelig', +'no_docs_checked_out' => 'Ingen dokumenter sjekket ut', +'no_docs_expired' => 'Ingen utgåtte dokumenter', +'no_docs_locked' => 'Ingen låste dokumenter.', +'no_docs_needs_correction' => 'Ingen dokumenter som må rettes opp', +'no_docs_rejected' => 'Ingen dokumenter avvist.', +'no_docs_to_approve' => 'Det er for øyeblikket ingen dokumenter som krever godkjenning.', +'no_docs_to_look_at' => 'Ingen dokumenter som trenger oppmerksomhet.', +'no_docs_to_receipt' => 'Ingen dokumentkvitteringer kreves', +'no_docs_to_review' => 'Det er for øyeblikket ingen dokumenter som krever gjennomgang.', +'no_docs_to_revise' => 'Det er for øyeblikket ingen dokumenter som må korrigeres.', +'no_email_or_login' => 'Innlogging og e-post må legges inn', +'no_fulltextindex' => 'Ingen fulltekstindeks tilgjengelig', +'no_groups' => 'Ingen grupper', +'no_group_members' => 'Denne gruppen har ingen medlemmer', +'no_linked_files' => 'Ingen koblede filer', +'no_previous_versions' => 'Ingen andre versjoner funnet', +'no_receipt_needed' => 'Det er for øyeblikket ingen dokumenter som krever kvitteringsbekreftelse.', +'no_review_needed' => 'Ingen gjennomgang i påvente.', +'no_revision_needed' => 'Ingen korrektur i påvente.', +'no_revision_planed' => 'Ingen planlagte korrigering av dokumentet', +'no_update_cause_locked' => 'Du kan derfor ikke oppdatere dette dokumentet. Kontakt brukeren som låste dette.', +'no_user_image' => 'Ingen bilder funnet', +'no_version_check' => 'Kontrollen av en ny versjon av SeedDMS mislyktes! Dette kan være forårsaket av at allow_url_fopen er satt til 0 i php-konfigurasjonen.', +'no_version_modification' => 'Ingen versjonsendring', +'no_workflow_available' => 'Ingen arbeidsflyt tilgjengelig', +'objectcheck' => 'Mappe/dokument sjekk', +'object_check_critical' => 'Kritisk feil!!', +'object_check_warning' => 'Advarsel!', +'obsolete' => 'Utdatert', +'october' => 'Oktober', +'old' => 'Gammel', +'only_jpg_user_images' => 'Bare .jpg-bilder kan brukes som bruker-bilder', +'order_by_sequence_off' => 'Sortering etter sekvens er slått av i innstillingene. Hvis du vil at denne parameteren skal ha effekt, må du slå den på igjen.', +'original_filename' => 'Orginalt filnavn', +'overall_indexing_progress' => 'Samlet fremgang for indeksering', +'owner' => 'Eier', +'ownership_changed_email' => 'Eier endret', +'ownership_changed_email_body' => 'Eier endret +Dokument: [name] +Overordnet mappe: [folder_path] +Tidigere eier: [old_owner] +Ny eier: [new_owner] +Bruker: [username] +URL: [url]', +'ownership_changed_email_subject' => '[sitename]: [name] - Eier endret', +'password' => 'Passord', +'password_already_used' => 'Passord allerede brukt', +'password_expiration' => 'Passord utgått', +'password_expiration_text' => 'Passordet ditt er utløpt. Velg en ny før du kan fortsette å bruke SeedDMS.', +'password_expired' => 'Utgått passord', +'password_expires_in_days' => 'Passordet utgår om %s dager.', +'password_forgotten' => 'Glemt passord?', +'password_forgotten_email_body' => 'Kjære bruker av SeedDMS. Vi har mottatt en forespørsel om å endre passordet ditt. +Dette kan gjøres ved å klikke på følgende lenke: [url_prefix]out/out.ChangePassword.php?hash=[hash] +Om du fortsatt har problemer med innloggingen, kontakt admin.', +'password_forgotten_email_subject' => '[sitename]: Glemt passord?', +'password_forgotten_send_hash' => 'Instruksjoner om hvordan du går frem er sendt til din oppgitte e-postadresse.', +'password_forgotten_text' => 'Fyll ut skjemaet nedenfor og følg instruksjonene i e-posten, som vil bli sendt til deg.', +'password_forgotten_title' => 'Passord sendt', +'password_repeat' => 'Gjenta passord', +'password_send' => 'Passord sendt', +'password_send_text' => 'Ditt nye passord er blitt sendt til den oppgitte e-postadressen, hvis påloggingen og e-posten samsvarer med en eksisterende bruker. Hvis du ikke mottar en e-post i løpet av de neste minuttene, må du sørge for at både innlogging og e-post er riktig og start prosessen på nytt.', +'password_strength' => 'Passordstyrke', +'password_strength_insuffient' => 'Utilstrekkelig passordstyrke', +'password_wrong' => 'Feil passord', +'pdf_converters' => 'PDF-konverterer', +'pending_approvals' => 'Venter på godkjenninger', +'pending_receipt' => 'Venter på kvitteringer', +'pending_reviews' => 'Venter på vurderinger', +'pending_revision' => 'Venter på korrektur', +'pending_workflows' => 'Venter på arbeidsflyt', +'personal_default_keywords' => 'Personlig søkeordliste', +'pl_PL' => 'Polsk', +'possible_substitutes' => 'Erstatte', +'preset_expires' => 'Forhåndsinnstilt utløp', +'preview' => 'Forhåndsvisning', +'preview_converters' => 'Forhåndsvis dokumentkonvertering', +'preview_images' => 'Forhåndsvis bilder', +'preview_markdown' => 'Forminsking', +'preview_pdf' => 'Forhåndsvis som PDF', +'preview_plain' => 'Tekst', +'previous_state' => 'Tidligere status', +'previous_versions' => 'Tidligere versjoner', +'process' => 'Prosess', +'process_without_user_group' => 'Prosesser uten brukere/grupper', +'pt_BR' => 'Portugisisk (BR)', +'quota' => 'Kvote', +'quota_exceeded' => 'Diskkvoten din er overskridet med [bytes].', +'quota_is_disabled' => 'Kvotestøtte er for øyeblikket deaktivert i innstillingene. Å sette en brukerkvote vil ikke ha noen effekt før den er aktivert igjen.', +'quota_warning' => 'Din maksimale lagringskvote er overskredet med [bytes]. Ta bort dokumenter eller tidigere versjoner.', +'receipts_accepted' => '[no_receipts] kvitteringer allerede akseptert', +'receipts_accepted_latest' => '(er [no_receipts] i siste versjon)', +'receipts_not_touched' => '[no_receipts] kvitteringer ikke blir berørt', +'receipts_not_touched_latest' => '(er [no_receipts] i siste versjon)', +'receipts_rejected' => '[no_receipts] kvitteringer allerede avvist', +'receipts_rejected_latest' => '(er [no_receipts] i siste versjon)', +'receipts_without_group' => 'Kvitteringer uten gruppe', +'receipts_without_user' => 'Kvitteringer uten bruker', +'receipt_deletion_email_body' => 'Bruker er fjernet fra listen over mottakere +Dokument: [name] +Versjon: [version] +Overordnet mappe: [folder_path] +Mottaker: [recipient] +Bruker: [username] +URL: [url]', +'receipt_deletion_email_subject' => '[sitename]: [name] - Mottaker fjernet', +'receipt_log' => 'Mottaksdagbok', +'receipt_request_email_body' => 'Mottak forespørsel +Dokument: [name] +Versjon: [version] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'receipt_request_email_subject' => '[sitename]: [name] - Mottak forespørsel', +'receipt_status' => 'Status', +'receipt_summary' => 'Kvitteringssammendrag', +'receipt_update_failed' => 'Bekreftelse av mottak mislyktes', +'recent_uploads' => 'Nylige opplastinger', +'reception' => 'Mottak', +'reception_acknowleged' => 'Mottaket erkjent', +'reception_noaction' => 'Ingen handling', +'reception_rejected' => 'Mottaket avvist', +'recipients' => 'Mottakere', +'recipient_already_removed' => 'Mottakeren er allerede fjernet eller bekreftet mottak.', +'redraw' => 'Tegne', +'refresh' => 'Oppdatere', +'rejected' => 'Avvist', +'released' => 'Klart', +'removed_approver' => 'er fjernet fra listen over godkjennere.', +'removed_file_email' => 'Fjernet vedlegg', +'removed_file_email_body' => 'Fjernet vedlegg +Dokument: [document] +Bruker: [username] +URL: [url]', +'removed_file_email_subject' => '[sitename]: [document] - Fjernet bilag', +'removed_recipient' => 'er fjernet fra listen over mottakere.', +'removed_reviewer' => 'er fjernet fra listen over korrekturleser.', +'removed_revisor' => 'er fjernet fra listen over revisorer.', +'removed_workflow_email_body' => 'Fjernet arbeidsflyt fra dokumentversjonen +Dokument: [name] +Versjon: [version] +Arbeidsflyt: [workflow] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'removed_workflow_email_subject' => '[sitename]: [name] - Fjernet arbeidsflyt fra dokumentversjonen', +'removeFolderFromDropFolder' => 'Fjern mappe etter import', +'remove_marked_files' => 'Fjern markerte filer', +'repaired' => 'reparert', +'repairing_objects' => 'Reparere dokumenter og mapper.', +'request_workflow_action_email_body' => 'Arbeidsflyten har nådd en tilstand som krever handling. +Dokument: [name] +Versjon: [version] +Arbeidsflyt: [workflow] +Nåværende status: [current_state] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'request_workflow_action_email_subject' => '[sitename]: [name] - Arbeidsflythandling kreves', +'reset_checkout' => 'Fullfør utsjekk', +'restrict_access' => 'Ingen tilgang til', +'results_page' => 'Resultat side', +'return_from_subworkflow' => 'Tilbake fra underliggende arbeidsflyt', +'return_from_subworkflow_email_body' => 'Tilbake fra underliggende arbeidsflyt +Dokument: [name] +Versjon: [version] +Arbeidsflyt: [workflow] +Underliggande Arbeidsflyt: [subworkflow] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'return_from_subworkflow_email_subject' => '[sitename]: [name] - Tilbake fra underliggende arbeidsflyt', +'reverse_links' => 'Dokumenter som har en lenke til det gjeldende dokumentet', +'reviewers' => 'Korrekturlesere', +'reviewer_already_assigned' => 'Bruker er allerede tilordnet som korrekturleser', +'reviewer_already_removed' => 'Korrekturleser er allerede fjernet fra vurderingsprosessen eller har allerede sendt inn en korrektur', +'reviews_accepted' => '[no_reviews] korrektur allerede akseptert', +'reviews_accepted_latest' => '(er [no_reviews] i siste versjon)', +'reviews_not_touched' => '[no_reviews] korrektur blir ikke berørt', +'reviews_not_touched_latest' => '(er [no_reviews] i siste versjon)', +'reviews_rejected' => '[no_reviews] korrektur allerede avvist', +'reviews_rejected_latest' => '(er [no_reviews] i siste versjon)', +'reviews_without_group' => 'Korrekturer uten gruppe', +'reviews_without_user' => 'Korrekturer som savner bruker', +'review_deletion_email' => 'Korrektur forespørsel slettet', +'review_deletion_email_body' => 'Korrektur forespørsel slettet +Dokument: [name] +Versjon: [version] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'review_deletion_email_subject' => '[sitename]: [name] - Korrektur forespørsel slettet', +'review_file' => 'Fil', +'review_group' => 'Korrekturgruppe', +'review_log' => 'Korrektur logg', +'review_request_email' => 'Korrektur forespørsel', +'review_request_email_body' => 'Korrektur forespørsel +Dokument: [name] +Versjon: [version] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'review_request_email_subject' => '[sitename]: [name] - Korrektur forespørsel', +'review_status' => 'Status for korrektur', +'review_submit_email' => 'Sendt korrektur', +'review_submit_email_body' => 'Sendt korrektur +Dokument: [name] +Versjon: [version] +Status: [status] +Kommentar: [comment] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'review_submit_email_subject' => '[sitename]: [name] - Sendt korrektur', +'review_summary' => 'Sammendrag av korrektur', +'review_update_failed' => 'Feil ved oppdatering av korrekturstatus. Oppdatering mislyktes.', +'revise_document' => 'Korrektur av dokumentet', +'revise_document_on' => 'Neste korrektur av dokumentversjonen den [date]', +'revisions_accepted' => '[no_revisions] korrektur allerede godkjent', +'revisions_accepted_latest' => '(er [no_revisions] i siste versjon)', +'revisions_not_touched' => '[no_revisions] korrektur blir ikke berørt', +'revisions_not_touched_latest' => '(er [no_revisions] i siste versjon)', +'revisions_pending' => '[no_revisions] korrekturer som forfaller fremover', +'revisions_pending_latest' => '(er [no_revisions] i siste versjon)', +'revisions_rejected' => '[no_revisions] korrekturer allerede avvist', +'revisions_rejected_latest' => '(er [no_revisions] i siste versjon)', +'revisions_without_group' => 'Korrekturer som savner grupp', +'revisions_without_user' => 'Korrekturer som savner bruker', +'revision_date' => 'Dato for korrektur', +'revision_log' => 'Korrekturlogg', +'revision_request_email_body' => 'Korrektur forespørsel +Dokument: [name] +Versjon: [version] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'revision_request_email_subject' => '[sitename]: [name] - Korrektur forespørsel', +'revision_status' => 'Status', +'revision_submit_email_body' => 'Revisjon av sendt e-post emne', +'revision_submit_email_subject' => 'Revisjon av sendt e-post emne', +'revision_summary' => 'Korrektur sammendrag', +'revisors' => 'Korrekturlesere', +'revisor_already_assigned' => 'Bruker er allerede tilordnet som korrekturleser.', +'revisor_already_removed' => 'Korrekturleser er allerede fjernet fra korrekturprosessen eller har allerede korrigert dokumentet.', +'rewind_workflow' => 'Spol arbeidsflyten tilbake', +'rewind_workflow_email_body' => 'Arbeidsflyten ble spolet tilbake +Dokument: [name] +Versjon: [version] +Workflow: [workflow] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'rewind_workflow_email_subject' => '[sitename]: [name] - Arbeidsflyten ble spolet tilbake', +'rewind_workflow_warning' => 'Hvis du spoler tilbake en arbeidsflyt til den opprinnelige tilstanden, blir hele arbeidsflytloggen for dette dokumentet slettet og kan ikke gjenopprettes.', +'rm_attrdef' => 'Fjern egenskapsdefinisjon', +'rm_attrdefgroup' => 'Fjern denne egenskapsgruppen', +'rm_attr_value' => 'Fjern verdien', +'rm_default_keyword_category' => 'Fjern kategori', +'rm_document' => 'Fjern dokumentet', +'rm_document_category' => 'Fjern kategori', +'rm_event' => 'Fjern hendelsen', +'rm_file' => 'Fjern fil', +'rm_folder' => 'Fjern mappe', +'rm_from_clipboard' => 'Fjern fra utklippstavlen', +'rm_group' => 'Fjern denne gruppen', +'rm_role' => 'Slett denne rollen', +'rm_transmittal' => 'Fjern overføringen', +'rm_transmittalitem' => 'Fjerne gjenstand', +'rm_user' => 'Fjern bruker', +'rm_user_from_processes' => 'Fjern bruker fra prosesser', +'rm_version' => 'Fjern versjon', +'rm_workflow' => 'Fjern arbeidsflyt', +'rm_workflow_action' => 'Fjern arbeidsflythandling', +'rm_workflow_state' => 'Fjern arbeidsflyt status', +'rm_workflow_warning' => 'Du er i ferd med å fjerne arbeidsflyten fra dokumentet. Dette kan ikke angres.', +'role' => 'Rolle', +'role_admin' => 'Administrator', +'role_guest' => 'Gjest', +'role_info' => 'Informasjon', +'role_management' => 'Rolle ledelse', +'role_name' => 'Rolle navn', +'role_type' => 'Type rolle', +'role_user' => 'Bruker', +'ro_RO' => 'Romensk', +'run_subworkflow' => 'Utfør under-arbeidsflyt', +'run_subworkflow_email_body' => 'Under-Arbeidsflyt utføres +Dokument: [name] +Versjon: [version] +Arbeidsflyt: [workflow] +Underliggende arbeidsflyt: [subworkflow] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'run_subworkflow_email_subject' => '[sitename]: [name] - Underarbeid ble startet', +'ru_RU' => 'Russisk', +'saturday' => 'Lørdag', +'saturday_abbr' => 'Lø', +'save' => 'Lagre', +'scheduler_class' => 'Klasse', +'scheduler_class_description' => 'Beskrivelse', +'scheduler_class_parameter' => 'Parameter', +'scheduler_class_tasks' => 'Oppgaver i klassen', +'scheduler_task_mgr' => 'Planlegger', +'search' => 'Søk', +'search_fulltext' => 'Søk i fulltekst', +'search_in' => 'Søk i', +'search_mode_and' => 'alle ord', +'search_mode_documents' => 'Kun dokumenter', +'search_mode_folders' => 'Bare mapper', +'search_mode_or' => 'minst ett ord', +'search_no_results' => 'Det er ingen dokumenter som samsvarer med søket ditt', +'search_query' => 'Søk etter', +'search_report' => 'Funnet [doccount] dokumenter og [foldercount] folders in [searchtime] sec.', +'search_report_fulltext' => 'Funnet [doccount] dokumenter', +'search_resultmode' => 'Søkeresultat', +'search_resultmode_both' => 'Dokumenter og mapper', +'search_results' => 'Søkeresultat', +'search_results_access_filtered' => 'Søkeresultater kan inneholde innhold som du ikke har tilgang til!', +'search_time' => 'Brukt tid: [time] sek.', +'seconds' => 'sekunder', +'selection' => 'Utvalg', +'select_attrdefgrp_show' => 'Velg visings alternativ', +'select_attribute_value' => 'Velg egenskapsverdi', +'select_category' => 'Klikk for å velge kategori', +'select_group' => 'Klikk for å velge gruppe', +'select_groups' => 'Klikk for å velge grupper', +'select_grp_approvers' => 'Klikk for å velge gruppe godkjennere', +'select_grp_ind_approvers' => 'Klikk for å velge gruppe', +'select_grp_ind_notification' => 'Klikk for å velge gruppe meldinger', +'select_grp_ind_recipients' => 'Klikk for å velge gruppe mottakere', +'select_grp_ind_reviewers' => 'Klikk for å velge gruppe', +'select_grp_ind_revisors' => 'Klikk for å velge gruppe', +'select_grp_notification' => 'Klikk for å velge gruppe meldinger', +'select_grp_recipients' => 'Klikk for å velge gruppe for mottagere', +'select_grp_reviewers' => 'Klikk for å velge gruppe som skal gjennomgå', +'select_grp_revisors' => 'Klikk for å velge gruppe av korrekturlesere', +'select_ind_approvers' => 'Klikk for å velge individuell godkjenning', +'select_ind_notification' => 'Klikk for å velge individuell meldinger', +'select_ind_recipients' => 'Klikk for å velge individuell mottakere', +'select_ind_reviewers' => 'Klikk for å velge individuell gjennomgå', +'select_ind_revisors' => 'Klikk for å velge individuell kontrollører', +'select_one' => 'Velg en', +'select_user' => 'Velg bruker', +'select_users' => 'Klikk for å velge flere brukere', +'select_value' => 'Velg verdi', +'select_workflow' => 'Velg arbeidsflyt', +'send_email' => 'Send e-post', +'send_login_data' => 'Send innloggingsdata', +'send_login_data_body' => 'Innloggingsdata +Loginn: [login] +Bruker: [username] +[comment]', +'send_login_data_subject' => '[sitename]: [login] - Dine innloggingsdata', +'send_test_mail' => 'Send test mail', +'september' => 'September', +'sequence' => 'Sekvens', +'seq_after' => 'Etter "[prevname]"', +'seq_end' => 'På slutten', +'seq_keep' => 'Hold posisjon', +'seq_start' => 'Første possisjon', +'sessions' => 'Brukere innlogget', +'setDateFromFile' => 'Overta dato fra importert fil', +'setDateFromFolder' => 'Overta dato fra importert mappe', +'settings' => 'Innstillinger', +'settings_activate_module' => 'Aktiver modul', +'settings_activate_php_extension' => 'Aktiver PHP-utvidelse', +'settings_adminIP' => 'Admin IP', +'settings_adminIP_desc' => 'Hvis den er angitt, kan administrator bare logge på med spesifisert IP-adresse. La stå tomt for å unngå at du mister tilgangen. MERKNAD: fungerer bare med lokal autentisering (ingen LDAP)', +'settings_Advanced' => 'Avansert', +'settings_advancedAcl' => 'Avansert adgangskontroll', +'settings_advancedAcl_desc' => 'Avansert adgangskontroll vil tillate å slå på/av visse moduler i programvaren. Det kan ikke brukes til adgangsrettigheter på dokumenter og mapper.', +'settings_allowChangeRevAppInProcess' => 'Tillat å endre anmelder/godkjenner etter at prosessen startet', +'settings_allowChangeRevAppInProcess_desc' => 'Som standard kan ikke anmelderne og godkjennerne endres lenger når en gjennomgang eller godkjenning er sendt. Dette alternativet lar administratorer gjøre dette så lenge dokumentet ikke er utgitt eller avvist.', +'settings_allowReviewerOnly' => 'Tilat til å kun sette korrektur', +'settings_allowReviewerOnly_desc' => 'Aktiver dette hvis det skal være tillatt å stille en korrekturleser, men ingen godkjenner i tradisjonell arbeidsflytmodus.', +'settings_apache_mod_rewrite' => 'Apache - Omskriving av moduler', +'settings_Authentication' => 'Autentiseringsinnstillinger', +'settings_autoLoginUser' => 'Automatisk innlogging', +'settings_autoLoginUser_desc' => 'Bruk dette brukernavnet for tilgange hvis brukeren ikke allerede er logget inn. En slik tilgang vil ikke opprette en økt.', +'settings_available_languages' => 'Tilgjengelige språk', +'settings_available_languages_desc' => 'Bare de valgte språkene lastes inn og vises i språkvelgeren. Standardspråket lastes alltid.', +'settings_backupDir' => 'Sikkerhetskopi mappe', +'settings_backupDir_desc' => 'Mappe der sikkerhetskopieringsverktøyet lagrer sikkerhetskopier. Hvis denne mappen ikke er angitt eller ikke kan nås, vil sikkerhetskopiene lagres i innholdskatalogen.', +'settings_cacheDir' => 'Cache-mappe', +'settings_cacheDir_desc' => 'Hvor forhåndsvisningsbildene er lagret (best å velge en mappe som ikke er tilgjengelig via webserveren)', +'settings_Calendar' => 'Kalender innstillinger', +'settings_calendarDefaultView' => 'Kalender standardvisning', +'settings_calendarDefaultView_desc' => 'Kalender standardvisning', +'settings_cannot_disable' => 'Filen ENABLE_INSTALL_TOOL kunne ikke slettes', +'settings_checkOutDir' => 'Mappe for utsjekkede dokumenter', +'settings_checkOutDir_desc' => 'Dette er katalogen der det siste innholdet i et dokument blir kopiert hvis dokumentet er sjekket ut. Hvis du gjør denne katalogen tilgjengelig for brukere, kan de redigere filen og sjekke den inn igjen når den er ferdig.', +'settings_cmdTimeout' => 'Tidsgrense for eksterne kommandoer', +'settings_cmdTimeout_desc' => 'Denne varigheten i sekunder avgjør når en ekstern kommando (f.eks. For å opprette fulltekstindeks) skal avsluttes.', +'settings_contentDir' => 'Innholds mappe', +'settings_contentDir_desc' => 'Mappen hvor de opplastede filene er lagret (best å velge en katalog som ikke er tilgjengelig via webserveren)', +'settings_contentOffsetDir' => 'Innholds forskyvnings mappe', +'settings_contentOffsetDir_desc' => 'For å omgå begrensninger i det underliggende filsystemet er det utviklet en ny mappestruktur som finnes i innholdskatalogen (Content Directory). Dette krever en basekatalog som du skal begynne fra. Overlater vanligvis dette til standardinnstillingen, 1048576, men kan være et hvilket som helst nummer eller streng som ikke allerede eksisterer i (Innholds mappe)', +'settings_convertToPdf' => 'Konverter dokument til PDF for forhåndsvisning', +'settings_convertToPdf_desc' => 'Hvis et dokument ikke kan vises naturlig av nettleseren, vises en konvertert versjon som pdf.', +'settings_cookieLifetime' => 'Cookies leve lengde', +'settings_cookieLifetime_desc' => 'Cookies levetid på sekunder. Hvis den er satt til 0, fjernes cookien når nettleseren er lukket.', +'settings_coreDir' => 'Mappe for SeedDMS kjerne', +'settings_coreDir_desc' => 'Sti til SeedDMS_Core (valgfritt). La dette være tomt hvis du har installert SeedDMS_Core på et sted der det kan bli funnet av PHP, f.eks. ekstra PHP inkluderer-bane', +'settings_createCheckOutDir' => 'Lag sjekk ut mappen', +'settings_createCheckOutDir_desc' => 'Lag mappe for sjekkut hvis den ikke eksisterer', +'settings_createdatabase' => 'Lag databasetabeller', +'settings_createdirectory' => 'Lag mappe', +'settings_currentvalue' => 'Nåværende verdi', +'settings_Database' => 'Databaseinnstillinger', +'settings_dbDatabase' => 'Database', +'settings_dbDatabase_desc' => 'Navnet på databasen som ble lagt inn under installasjonsprosessen. Ikke rediger dette feltet med mindre det er nødvendig, hvis databasen for eksempel er flyttet.', +'settings_dbDriver' => 'Databasetype', +'settings_dbDriver_desc' => 'Typen database som er brukt under installasjonsprosessen. Ikke rediger dette feltet med mindre du må migrere til en annen type database, kanskje på grunn av skiftende verter. Type DB-Driver brukt av adodb (se adodb-readme)', +'settings_dbHostname' => 'Server navn', +'settings_dbHostname_desc' => 'Vertsnavnet for databasen din ble skrevet inn under installasjonsprosessen. Ikke rediger felt med mindre det er absolutt nødvendig, for eksempel overføring av databasen til en ny web server.', +'settings_dbPass' => 'Passord', +'settings_dbPass_desc' => 'Passordet for tilgang til databasen din som ble lagt inn under installasjonsprosessen.', +'settings_dbUser' => 'Brukernavn', +'settings_dbUser_desc' => 'Brukernavnet for tilgang til databasen du skrev inn under installasjonsprosessen. Ikke rediger felt med mindre det er absolutt nødvendig, for eksempel overføring av databasen til en ny web server.', +'settings_dbVersion' => 'Databaseskjemaet er for gammelt', +'settings_defaultAccessDocs' => 'Standard tilgang for nye dokumenter', +'settings_defaultAccessDocs_desc' => 'Når et nytt dokument opprettes, vil dette være standard adgangsrett.', +'settings_defaultDocPosition' => 'Dokumentets plassering når det opprettes', +'settings_defaultDocPosition_desc' => 'Dette er standardposisjonen i en mappe når et dokument opprettes.', +'settings_defaultDocPosition_val_end' => 'slutt', +'settings_defaultDocPosition_val_start' => 'start', +'settings_defaultSearchMethod' => 'Standard søkemetode', +'settings_defaultSearchMethod_desc' => 'Standard søkemetode, når et søk startes av søkeskjemaet i hovedmenyen.', +'settings_defaultSearchMethod_valdatabase' => 'database', +'settings_defaultSearchMethod_valfulltext' => 'fulltekst', +'settings_delete_install_folder' => 'For å bruke SeedDMS, må du slette filen ENABLE_INSTALL_TOOL i konfigurasjonsmappen', +'settings_disableSelfEdit' => 'Deaktiver selvredigering', +'settings_disableSelfEdit_desc' => 'Hvis merket kan brukeren ikke redigere sin egen profil', +'settings_disable_install' => 'Slett filen ENABLE_INSTALL_TOOL hvis mulig', +'settings_Display' => 'Skjerm innstillinger', +'settings_dropFolderDir' => 'Mappe for slippmappe', +'settings_dropFolderDir_desc' => 'Denne mappen kan brukes til å slippe filer på serverens filsystem og importere dem derfra i stedet for å laste opp via nettleseren. Mappen må inneholde en undermappe for hver bruker som har lov til å importere filer på denne måten.', +'settings_Edition' => 'Redigerings innstillinger', +'settings_editOnlineFileTypes' => 'Rediger online filtyper', +'settings_editOnlineFileTypes_desc' => 'Filer med en av følgende avslutninger eller mime-typer kan redigeres online (BRUK KUN SMÅ BOKSTAVER)', +'settings_enable2FactorAuthentication' => 'Aktiver 2-faktorers autentisering', +'settings_enable2FactorAuthentication_desc' => 'Aktiver / deaktiver autentisering av to faktorer. Brukerne vil trenge Google Authenticator på mobiltelefonen sin.', +'settings_enableAcknowledgeWorkflow' => 'Aktiver arbeidsgjenkjenning', +'settings_enableAcknowledgeWorkflow_desc' => 'Aktiver arbeidsgjenkjenning', +'settings_enableAdminReceipt' => 'Tillat mottak av dokumenter for administratorer', +'settings_enableAdminReceipt_desc' => 'Aktiver dette hvis du vil at administratorer skal være oppført som mottakere av dokumenter.', +'settings_enableAdminRevApp' => 'Tillat gjennomgang/godkjenning for administratorer', +'settings_enableAdminRevApp_desc' => 'Aktiver dette hvis du vil at administratorer skal være oppført som korrekturlesere / godkjennere og for arbeidsflytoverganger.', +'settings_enableCalendar' => 'Aktiver kalender', +'settings_enableCalendar_desc' => 'Aktiver/deaktiver kalender', +'settings_enableClipboard' => 'Aktiver utklippstavle', +'settings_enableClipboard_desc' => 'Aktiver/deaktiver utklippstavlen på \'Vis mappe\' siden', +'settings_enableConverting' => 'Aktiver konvertering', +'settings_enableConverting_desc' => 'Aktiver/deaktiver konvertering av filer', +'settings_enableDebugMode' => 'Feilsøkingsmodus', +'settings_enableDebugMode_desc' => 'Aktiver dette for å slå på feilsøkingsmodus som legger til en ny meny i administratorverktøyene', +'settings_enableDropFolderList' => 'Aktiver liste over filer i slippmappe i menyen', +'settings_enableDropFolderList_desc' => 'Slå på en liste over filer i slippmappen. Listen vises i hovedmenyen.', +'settings_enableDropUpload' => 'Aktiver hurtigopplasting', +'settings_enableDropUpload_desc' => 'Aktiver/deaktiver slippområdet på \'Vis mappe \' -siden for å laste opp filer ved å dra og slippe.', +'settings_enableDuplicateDocNames' => 'Tillat dupliserte dokumentnavn', +'settings_enableDuplicateDocNames_desc' => 'Gjør det mulig å ha dupliserte dokumentnavn i en mappe.', +'settings_enableDuplicateSubFolderNames' => 'Tillat duplikat-undermappenavn', +'settings_enableDuplicateSubFolderNames_desc' => 'Gjør det mulig å ha dupliserte undermappenavn i en mappe.', +'settings_enableEmail' => 'Aktiver e-post', +'settings_enableEmail_desc' => 'Aktiver/deaktiver automatisk e-postvarsling', +'settings_enableFilterReceipt' => 'Filtrer eier, anmelder, etc. fra mottakslisten', +'settings_enableFilterReceipt_desc' => 'Aktiver for å filtrere ut noen mottakere fra en mottaksliste hvis medlemmer av en gruppe er valgt.', +'settings_enableFolderTree' => 'Aktiver mappetre', +'settings_enableFolderTree_desc' => 'Aktiver/deaktiver mappetreet på \'Vis mappe \' siden', +'settings_enableFullSearch' => 'Enable Full text search', +'settings_enableFullSearch_desc' => 'Aktiver fulltekstsøk', +'settings_enableGuestAutoLogin' => 'Aktiver automatisk innlogging for gjest', +'settings_enableGuestAutoLogin_desc' => 'Hvis en gjestelogging og automatisk pålogging er aktivert, logges gjesten automatisk.', +'settings_enableGuestLogin' => 'Aktiver gjestepålogging', +'settings_enableGuestLogin_desc' => 'Hvis du vil at noen skal logge inn som gjest, sjekk dette alternativet. Merk: innlogging av gjester skal bare brukes i et pålitelig miljø', +'settings_enableHelp' => 'Aktiver hjelp', +'settings_enableHelp_desc' => 'Aktiver/deaktiver koblingen til hjelpeskjermbildene i menyen', +'settings_enableLanguageSelector' => 'Aktiver språkvelger', +'settings_enableLanguageSelector_desc' => 'Vis velger for språk for bruker etter at du er logget inn.', +'settings_enableLargeFileUpload' => 'Aktiver for store filopplastinger', +'settings_enableLargeFileUpload_desc' => 'Hvis det er satt, er filopplasting også tilgjengelig via en java-applet som heter jumploader uten en filstørrelsesgrense som er angitt av nettleseren. Det gjør det også mulig å laste opp flere filer på ett trinn. Hvis du slår på dette, slås bare av cookies.', +'settings_enableMenuTasks' => 'Aktiver oppgaveliste i menyen', +'settings_enableMenuTasks_desc' => 'Aktiver/deaktiver menypunktet som inneholder alle oppgaver for brukeren. Denne inneholder dokumenter som må gjennomgås, godkjennes osv.', +'settings_enableMultiUpload' => 'Tillat opplasting av flere filer', +'settings_enableMultiUpload_desc' => 'Når du oppretter et nytt dokument, kan flere filer lastes opp. Hver fil vil lage et nytt dokument.', +'settings_enableNotificationAppRev' => 'Aktiver anmeldelse/godkjenningsvarsel', +'settings_enableNotificationAppRev_desc' => 'Merk av for å sende et varsel til korrekturleseren / godkjenneren når en ny dokumentversjon legges til', +'settings_enableNotificationWorkflow' => 'Send varsel til brukere i neste arbeidsflytovergang', +'settings_enableNotificationWorkflow_desc' => 'Hvis dette alternativet er aktivert, vil brukerne og gruppene som må iverksette tiltak i løpet av neste arbeidsflytovergang, varsles. Selv om de ikke har lagt til en varsling for dokumentet.', +'settings_enableOwnerNotification' => 'Aktiver eiervarsel som standard', +'settings_enableOwnerNotification_desc' => 'Sjekk for å legge til et varsel for eieren hvis et dokument når det legges til.', +'settings_enableOwnerReceipt' => 'Tillat mottak av dokumenter av eieren', +'settings_enableOwnerReceipt_desc' => 'Aktiver dette hvis du vil at eieren av et dokument skal være oppført som mottaker.', +'settings_enableOwnerRevApp' => 'Tillat gjennomgang/godkjenning for eieren', +'settings_enableOwnerRevApp_desc' => 'Aktiver dette hvis du vil at eieren av et dokument skal vises som korrekturlesere/godkjennere og for arbeidsflytoverganger.', +'settings_enablePasswordForgotten' => 'Aktiver passord glemt', +'settings_enablePasswordForgotten_desc' => 'Hvis du vil tillate at brukeren kan angi et nytt passord og sende det via e-post, sjekk dette alternativet.', +'settings_enableReceiptReject' => 'Aktiver avvisning av mottakelser', +'settings_enableReceiptReject_desc' => 'Aktiver for å slå på avvisningen av mottakelser.', +'settings_enableReceiptWorkflow' => 'Aktiver godkjenning av dokumentmottak', +'settings_enableReceiptWorkflow_desc' => 'Aktiver for å slå på arbeidsflyten for å bekrefte dokumentmottak.', +'settings_enableRecursiveCount' => 'Aktiver rekursivt antall dokumenter / mapper', +'settings_enableRecursiveCount_desc' => 'Hvis det er slått på, vil antall dokumenter og mapper i mappevisningen bestemmes ved å telle alle objekter ved rekursivt å behandle mappene og telle de dokumentene og mappene brukeren har lov til å få tilgang til.', +'settings_enableRevisionOneVoteReject' => 'Avvist av en rådgiver', +'settings_enableRevisionOneVoteReject_desc' => 'Hvis dette er aktivert, vil dokumentstatusen settes til \'trenger korrigering \' når den første rådgiveren avviser dokumentet. Hvis den er deaktivert, vil dokumentstatus ikke endres før alle revisorer er ferdige med revisjonen.', +'settings_enableRevisionOnVoteReject' => 'Aktiver revisjon av kvote avvist', +'settings_enableRevisionOnVoteReject_desc' => 'Aktiver revisjon av kvote avvist', +'settings_enableRevisionWorkflow' => 'Aktiver revisjon av dokumenter', +'settings_enableRevisionWorkflow_desc' => 'Aktiver for å kunne kjøre arbeidsflyten for å revidere et dokument etter en gitt tidsperiode.', +'settings_enableSelfReceipt' => 'Tillat mottak av dokumenter for pålogget bruker', +'settings_enableSelfReceipt_desc' => 'Aktiver dette hvis du vil at den nåværende påloggede brukeren skal vises som mottaker for et dokument.', +'settings_enableSelfRevApp' => 'Tillat gjennomgang/godkjenning for pålogget bruker', +'settings_enableSelfRevApp_desc' => 'Aktiver dette hvis du vil at den nåværende påloggede brukeren skal vises som korrekturlesere/godkjennere og for arbeidsflytoverganger.', +'settings_enableSessionList' => 'Aktiver liste over brukere online på menyen', +'settings_enableSessionList_desc' => 'Aktiver liste over brukere online på menyen.', +'settings_enableThemeSelector' => 'Temautvalg', +'settings_enableThemeSelector_desc' => 'Slår av og på temavelgeren på påloggingssiden.', +'settings_enableUpdateReceipt' => 'Tillat redigering av eksisterende mottak', +'settings_enableUpdateReceipt_desc' => 'Aktiver dette hvis brukeren som har mottatt mottak kan endre beslutningen.', +'settings_enableUpdateRevApp' => 'Tillat redigering av eksisterende gjennomgang/godkjenning', +'settings_enableUpdateRevApp_desc' => 'Aktiver dette hvis brukeren som har foretatt en gjennomgang/godkjenning kan endre beslutningen så lenge det gjeldende arbeidsflyttrinnet ikke er fullført.', +'settings_enableUserImage' => 'Aktiver brukerbilde', +'settings_enableUserImage_desc' => 'Aktiver brukerbilde', +'settings_enableUsersView' => 'Aktiver brukervisning', +'settings_enableUsersView_desc' => 'Aktiver / deaktiver gruppe- og brukervisning for alle brukere', +'settings_enableVersionDeletion' => 'Aktiver sletting av tidligere versjoner', +'settings_enableVersionDeletion_desc' => 'Aktiver/deaktiver sletting av tidligere dokumentversjoner av vanlige brukere. Administrator kan alltid slette gamle versjoner.', +'settings_enableVersionModification' => 'Aktiver modifisering av versjoner', +'settings_enableVersionModification_desc' => 'Aktiver / deaktiver endring av dokumentversjoner av vanlige brukere etter at en versjon ble lastet opp. Administrator kan alltid endre versjonen etter opplasting.', +'settings_enableWebdavReplaceDoc' => 'Bytt ut dokumentet når du lagrer', +'settings_enableWebdavReplaceDoc_desc' => 'Hvis det er aktivert, vil lagring av en ny versjon av et dokument erstatte det gamle dokumentet i stedet for å opprette en ny versjon. Dette vil bare gjelde hvis brukeren, mimetypen og filnavnet er lik den siste versjonen. Dette kan være nyttig når applikasjoner automatisk lagrer et dokument i faste intervaller.', +'settings_enableXsendfile' => 'Bruk apache xsendfile-modul', +'settings_enableXsendfile_desc' => 'Hvis dette alternativet er satt og apache-modulen xsendfile er installert, vil den bli brukt til å levere bilder.', +'settings_encryptionKey' => 'Krypteringsnøkkel', +'settings_encryptionKey_desc' => 'Denne strengen brukes til å lage en unik identifikator som blir lagt til som et skjult felt til et skjema for å forhindre CSRF-angrep.', +'settings_error' => 'Feil', +'settings_expandFolderTree' => 'Utvid mappetreet', +'settings_expandFolderTree_desc' => 'Utvid mappetreet', +'settings_expandFolderTree_val0' => 'starte med treet gjemt', +'settings_expandFolderTree_val1' => 'start med vist tre og første nivå utvidet', +'settings_expandFolderTree_val2' => 'start med treet vist fullt utvidet', +'settings_Extensions' => 'Utvidelser', +'settings_extraPath' => 'Ekstra PHP inkluderer sti', +'settings_extraPath_desc' => 'Sti til tilleggsprogramvare. Dette er mappeen som inneholder f.eks. adodb-mappeen eller ytterligere pear-pakker.', +'settings_firstDayOfWeek' => 'Ukens første dag', +'settings_firstDayOfWeek_desc' => 'Ukens første dag', +'settings_footNote' => 'Fotnote', +'settings_footNote_desc' => 'Melding som skal vises nederst på hver side', +'settings_fullSearchEngine' => 'Fulltekstmotor', +'settings_fullSearchEngine_desc' => 'Angi metoden som brukes for fulltekstsøk.', +'settings_fullSearchEngine_vallucene' => 'Zend Lucene', +'settings_fullSearchEngine_valsqlitefts' => 'SQLiteFTS', +'settings_guestID' => 'Gjestenavn', +'settings_guestID_desc' => 'Navn til gjestebruker som ble brukt når han er logget inn som gjest (trenger stort sett ikke å endre)', +'settings_httpRoot' => 'Http Rot', +'settings_httpRoot_desc' => 'Den relative banen i nettadressen, etter domenedelen. Ikke ta med prefikset http: // eller navnet på webverten. F.eks Hvis hele URL-adressen er http://www.example.com/seeddms/, angi \'/ seeddms / \'. Hvis URL-adressen er http://www.example.com/, angi \'/ \'', +'settings_incItemsPerPage' => 'Antall oppføringer lastet på slutten av siden', +'settings_incItemsPerPage_desc' => 'Hvis antall mapper og dokumenter er begrenset, vil dette angi antall tilleggsbelastede objekter når du ruller ned til bunnen av visningsmappesiden. Hvis du setter dette til 0, lastes det samme antallet objekter som først ble lastet inn.', +'settings_initialDocumentStatus' => 'Opprinnelig dokumentstatus', +'settings_initialDocumentStatus_desc' => 'Denne statusen blir satt når et dokument legges til.', +'settings_initialDocumentStatus_draft' => 'Utkast', +'settings_initialDocumentStatus_released' => 'frigjort', +'settings_installADOdb' => 'Installere ADOdb', +'settings_install_disabled' => 'Filen ENABLE_INSTALL_TOOL ble slettet. Du kan nå logge inn på SeedDMS og gjøre ytterligere konfigurasjon.', +'settings_install_pear_package_log' => 'Installere Pear-pakken \'Log\'', +'settings_install_pear_package_webdav' => 'Installere Pear-pakken \'HTTP_WebDAV_Server\', hvis du har tenkt å bruke web-grensesnittet.', +'settings_install_success' => 'Installasjonen er fullført uten feil.', +'settings_install_welcome_text' => '

Før du begynner å installere SeedDMS, må du forsikre deg om at du har opprettet en fil ENABLE_INSTALL_TOOL i konfigurasjonskatalogen, ellers vil ikke installasjonen fungere. Når du er ferdig med installasjonen, slett filen.

SeedDMS har veldig minimale krav. Du trenger en mysql-database eller sqlite-støtte og en php-aktivert webserver. Pearpakken Logg må også installeres. For lucene fulltekstsøket, trenger du også Zend-rammeverket installert på platen der den kan finnes av php. For WebDAV-serveren trenger du også HTTP_WebDAV_Server. Stien til den kan senere settes under installasjonen.

Hvis du ønsker å opprette databasen før du starter installasjonen, er det bare å opprette den manuelt med favorittverktøyet ditt, eventuelt opprette en databasebruker med tilgang til databasen og importer en av databasedumpene i konfigurasjonskatalogen. Installasjonsskriptet kan gjøre det også for deg, men det vil trenge databasetilgang med tilstrekkelige rettigheter for å lage databaser.

', +'settings_install_welcome_title' => 'Velkommen til installasjonen av SeedDMS', +'settings_install_zendframework' => 'Installer Zend Framework, hvis du har tenkt å bruke den zendbaserte søkemotoren i fulltekst. Ellers ignorerer du denne meldingen og fortsett installasjonen.', +'settings_language' => 'Standard språk', +'settings_language_desc' => 'Standard språk (navnet på en undermappe i mappen "languages")', +'settings_libraryFolder' => 'Bibliotekmappe', +'settings_libraryFolder_desc' => 'Mappe der dokumenter kan kopieres for å opprette nye dokumenter.', +'settings_logFileEnable' => 'Loggfil Aktiver', +'settings_logFileEnable_desc' => 'Aktiver/deaktiver loggfil', +'settings_logFileRotation' => 'Loggfil rotasjon', +'settings_logFileRotation_desc' => 'Loggfil rotasjon', +'settings_loginFailure' => 'Påloggingsfeil', +'settings_loginFailure_desc' => 'Deaktiver konto etter n påloggingsfeil.', +'settings_luceneClassDir' => 'Lucene SeedDMS mappe', +'settings_luceneClassDir_desc' => 'Sti til SeedDMS_Lucene (valgfritt). La dette være tomt hvis du har installert SeedDMS_Lucene på et sted der det kan bli funnet av PHP, f.eks. Ekstra PHP inkluderer-bane.', +'settings_luceneDir' => 'Mappe for fulltekstindeks', +'settings_luceneDir_desc' => 'Sti til Lucene-indeksen', +'settings_maxDirID' => 'Maks mappenavn', +'settings_maxDirID_desc' => 'Maksimalt antall undermappeer per overordnet mappe. Ikke endre denne verdien med mindre du vet hva du gjør! Standard: 0.', +'settings_maxExecutionTime' => 'Maks. utførelsestid (s)', +'settings_maxExecutionTime_desc' => 'Dette angir den maksimale tiden i sekunder et skript får kjøre før det avsluttes av analysen.', +'settings_maxItemsPerPage' => 'Maks. antall oppføringer på en side', +'settings_maxItemsPerPage_desc' => 'Begrenser antall mapper og dokumenter som vises på mappen. Ytterligere objekter blir lastet når du blar til slutten av siden. Sett til 0 for alltid å vise alle objekter.', +'settings_maxRecursiveCount' => 'Maks. antall rekursive dokumenter / mapper', +'settings_maxRecursiveCount_desc' => 'Dette er det maksimale antallet dokumenter eller mapper som vil bli sjekket for adgangsrettigheter når rekursivt teller objekter. Hvis dette tallet overskrides, blir antallet dokumenter og mapper i mappevisningen estimert.', +'settings_maxSizeForFullText' => 'Maksimal filstørrelse for øyeblikkelig indeksering', +'settings_maxSizeForFullText_desc' => 'Alle nye dokumentversjoner som er mindre enn den konfigurerte størrelsen, blir fullstendig indeksert rett etter opplasting. I alle andre tilfeller vil bare metadataene bli indeksert.', +'settings_maxUploadSize' => 'Maksimal størrelse for opplastede filer', +'settings_maxUploadSize_desc' => 'Dette er maksimal størrelse for opplastede filer. Det vil ha betydning for dokumentversjoner og vedlegg. Begrensningen angis i bytes.', +'settings_more_settings' => 'Konfigurer flere innstillinger. Standard innlogging: admin / admin', +'settings_noDocumentFormFields' => 'Ikke vis disse feltene', +'settings_noDocumentFormFields_desc' => 'Disse feltene vil ikke bli vist når du legger til eller utgiver et dokument. Eksisterende verdier vil bli holdt.', +'settings_notfound' => 'Ikke funnet', +'settings_Notification' => 'Varslingsinnstillinger', +'settings_notwritable' => 'Konfigurasjonen kan ikke lagres fordi konfigurasjonsfilen ikke er skrivbar.', +'settings_no_content_dir' => 'Innholdskatalog', +'settings_onePageMode' => 'Én sidemodus', +'settings_onePageMode_desc' => 'En sidemodus vil slå på javascript-kode på ViewFolder-siden, som oppdaterer mappe/dokumentliste, navigasjon osv. Når du klikker på en mappe eller endrer sorteringsparameter.', +'settings_overrideMimeType' => 'Overstyr Mime-type', +'settings_overrideMimeType_desc' => 'Overstyr Mime-type levert av nettleseren, hvis en fil lastes opp. Den nye Mime-type bestemmes av SeedDMS selv.', +'settings_partitionSize' => 'Oppdelt filstørrrelse', +'settings_partitionSize_desc' => 'Størrelse på oppdelte filer i byte, lastet opp av jumploader. Ikke angi en verdi som er større enn den maksimale opplastningsstørrelsen som er angitt av serveren.', +'settings_passwordExpiration' => 'Utløp av passord', +'settings_passwordExpiration_desc' => 'Antall dager etter at et passord utløper og må tilbakestilles. 0 slår passordets utløp av.', +'settings_passwordHistory' => 'Passordhistorikk', +'settings_passwordHistory_desc' => 'Antall passord en bruker må ha blitt brukt før et passord kan gjenbrukes. 0 slår passordhistorikken av.', +'settings_passwordStrength' => 'Min. passordstyrke', +'settings_passwordStrengthAlgorithm' => 'Algoritme for passordstyrke', +'settings_passwordStrengthAlgorithm_desc' => 'Algoritmen som brukes for å beregne passordstyrken. Den enkle algoritmen sjekker bare for minst åtte tegn totalt, en liten bokstav, en stor bokstav, et tall og en spesiell karakter. Hvis disse betingelsene er oppfylt, er den returnerte poengsummen 100 ellers 0.', +'settings_passwordStrengthAlgorithm_valadvanced' => 'avansert', +'settings_passwordStrengthAlgorithm_valsimple' => 'enkelt', +'settings_passwordStrength_desc' => 'Minste passordstyrke er en heltallsverdi fra 0 til 100. Hvis du setter det til 0, slås det av for å se etter minimum passordstyrke.', +'settings_pear_log' => 'Pear pakke : Logg', +'settings_pear_webdav' => 'Pear pakke : HTTP_WebDAV_Server', +'settings_perms' => 'Tillatelser', +'settings_php_dbDriver' => 'PHP utvidelse : php_\'see current value\'', +'settings_php_gd2' => 'PHP utvidelse : php_gd2', +'settings_php_mbstring' => 'PHP utvidelse : php_mbstring', +'settings_php_version' => 'PHP versjon', +'settings_presetExpirationDate' => 'Forhåndsinnstilt utløpsdato', +'settings_presetExpirationDate_desc' => 'Alle nye opplastede dokumenter vil ha en utløpsdato satt til denne verdien. Datoen som er angitt kan spesifiseres slik den forstås av PHPs strtotime () -funksjon, f.eks. +5 uker.', +'settings_previewWidthDetail' => 'Bredde på forhåndsvisningsbilder (detalj)', +'settings_previewWidthDetail_desc' => 'Bredde på forhåndsvisningsbildet som vises på detaljsiden', +'settings_previewWidthDropFolderList' => 'Bredde på forhåndsvisningsbilder (dropfolder list)', +'settings_previewWidthDropFolderList_desc' => 'Bredde på forhåndsvisningsbilder som vises i listen når du velger en fil fra slippmappen.', +'settings_previewWidthList' => 'Bredde på forhåndsvisningsbilder (liste)', +'settings_previewWidthList_desc' => 'Bredde på forhåndsvisningsbilder som vises i lister', +'settings_previewWidthMenuList' => 'Bredde på forhåndsvisningsbilder (menyliste)', +'settings_previewWidthMenuList_desc' => 'Bredde på forhåndsvisningsbilder som vises som elementer i slippmappemenyen.', +'settings_printDisclaimer' => 'Skriv ut ansvarsfraskrivelse', +'settings_printDisclaimer_desc' => 'Hvis dette er aktivert, skrives ansvarsfraskrivingsmeldingen nederst på hver side.', +'settings_proxyUPassword' => 'Passord for proxy', +'settings_proxyUPassword_desc' => 'Passord for godkjenning ved proxy', +'settings_proxyUrl' => 'URL til proxy', +'settings_proxyUrl_desc' => 'URL til proxy som brukes for å få tilgang til utvidelsesdatabasen.', +'settings_proxyUser' => 'Brukernavn brukt for proxy', +'settings_proxyUser_desc' => 'Brukernavn som brukes til godkjenning med proxy', +'settings_quota' => 'Brukerens kvote', +'settings_quota_desc' => 'Det maksimale antallet byte en bruker kan bruke på disken. Sett dette til 0 for ubegrenset diskplass. Denne verdien kan overstyres for hver bruker i profilen.', +'settings_removeFromDropFolder' => 'Fjern filen fra slippmappen etter vellykket opplasting', +'settings_removeFromDropFolder_desc' => 'Aktiver dette hvis en fil hentet fra slippmappen skal slettes etter vellykket opplasting.', +'settings_repositoryUrl' => 'URL til oppbevaringssted', +'settings_repositoryUrl_desc' => 'URL til oppbevaringssted til utvidelser', +'settings_restricted' => 'Begrenset tilgang', +'settings_restricted_desc' => 'Bare tillat brukere å logge inn hvis de har en oppføring i den lokale databasen (uavhengig av vellykket autentisering med LDAP)', +'settings_rootDir' => 'Rot mappe', +'settings_rootDir_desc' => 'Sti til hvor SeedDMS ligger', +'settings_rootFolderID' => 'Rot mappenavn', +'settings_rootFolderID_desc' => 'Navn for rotmappe (for det meste ikke nødvendig å endre)', +'settings_SaveError' => 'Feil ved lagring av konfigurasjonsfil', +'settings_Server' => 'Serverinnstillinger', +'settings_showFullPreview' => 'Vis komplett dokument', +'settings_showFullPreview_desc' => 'Aktiver/deaktiver en full forhåndsvisning av dokumentet på detaljsiden, hvis nettleseren er i stand til det.', +'settings_showMissingTranslations' => 'Vis manglende oversettelser', +'settings_showMissingTranslations_desc' => 'Liste over alle manglende oversettelser på siden nederst på siden. Den påloggede brukeren kan sende inn et forslag til en manglende oversettelse som vil bli lagret i en csv-fil. Ikke slå på denne funksjonen hvis du er i et produksjonsmiljø!', +'settings_showSingleSearchHit' => 'Hopp direkte til treff på et enkelt søk', +'settings_showSingleSearchHit_desc' => 'Hvis søkeresultatene bare blir ett treff, vil de vises med en gang i stedet for resultatlisten.', +'settings_Site' => 'Nettsted', +'settings_siteDefaultPage' => 'Nettstedets standardside', +'settings_siteDefaultPage_desc' => 'Standardside ved innlogging. Hvis tom er standard for out/out.ViewFolder.php', +'settings_siteName' => 'Navn på nettsted', +'settings_siteName_desc' => 'Navnet på nettstedet som brukes i sidetitlene. Standard: SeedDMS', +'settings_SMTP' => 'SMTP-serverinnstillinger', +'settings_smtpPassword' => 'SMTP-serverpassord', +'settings_smtpPassword_desc' => 'SMTP-serverpassord', +'settings_smtpPort' => 'SMTP-serverport', +'settings_smtpPort_desc' => 'SMTP-serverport, standard 25', +'settings_smtpSendFrom' => 'Sendt fra', +'settings_smtpSendFrom_desc' => 'Sendt fra', +'settings_smtpSendTestMail' => 'Send test e-post', +'settings_smtpSendTestMail_desc' => 'Sender en test e-post for å sjekke gjeldende e-postkonfigurasjon.', +'settings_smtpServer' => 'SMTP Server vertsnavn', +'settings_smtpServer_desc' => 'SMTP Server vertsnavn', +'settings_smtpUser' => 'SMTP-server bruker', +'settings_smtpUser_desc' => 'SMTP-server bruker', +'settings_sortFoldersDefault' => 'Standard sorteringsmetode', +'settings_sortFoldersDefault_desc' => 'Dette angir sorteringsmetodene for mapper og dokumenter i mappevisningen.', +'settings_sortFoldersDefault_val_name' => 'etter navn', +'settings_sortFoldersDefault_val_sequence' => 'etter sekvens', +'settings_sortFoldersDefault_val_unsorted' => 'usortert', +'settings_sortUsersInList' => 'Sorter brukere i listen', +'settings_sortUsersInList_desc' => 'Angir om brukere i utvalgte menyer blir bestilt ved innlogging eller ved fullstendig navn', +'settings_sortUsersInList_val_fullname' => 'Sorter etter fullt navn', +'settings_sortUsersInList_val_login' => 'Sorter etter innlogging', +'settings_stagingDir' => 'Mappe for delvis opplastinger', +'settings_stagingDir_desc' => 'Mappen der jumploader plasserer delene av en filopplasting før den settes sammen igjen.', +'settings_start_install' => 'Start installasjonen', +'settings_stopWordsFile' => 'Sti for å stoppe ord-filen', +'settings_stopWordsFile_desc' => 'Hvis fulltekstsøk er aktivert, vil denne filen inneholde stoppord som ikke indekseres', +'settings_strictFormCheck' => 'Streng skjemakontroll', +'settings_strictFormCheck_desc' => 'Streng skjemakontroll. Hvis satt til sann, vil alle felt i skjemaet bli sjekket for en verdi. Hvis den er satt til usann, blir (de fleste) kommentarer og søkeordfelt valgfrie. Kommentarer er alltid påkrevd når du sender inn en anmeldelse eller overstyrer dokumentstatus.', +'settings_suggestionvalue' => 'Foreslått verdi', +'settings_System' => 'System', +'settings_tasksInMenu' => 'Valgte oppgaver', +'settings_tasksInMenu_approval' => 'Godkjenninger', +'settings_tasksInMenu_desc' => 'Velg oppgavene som skal telles. Hvis ingen er valgt, telles alle oppgavene.', +'settings_tasksInMenu_needscorrection' => 'Retting nødvendig', +'settings_tasksInMenu_receipt' => 'Kvitteringer', +'settings_tasksInMenu_review' => 'Korrigeringer', +'settings_tasksInMenu_revision' => 'Revisjoner', +'settings_tasksInMenu_workflow' => 'Arbeidsflyt', +'settings_theme' => 'Standardtema', +'settings_theme_desc' => 'Standard stil (navn på en undermappe i mappen "styles")', +'settings_titleDisplayHack' => 'Tittel visning Hack', +'settings_titleDisplayHack_desc' => 'Løsning for sidetitler som går over mer enn to linjer.', +'settings_undelUserIds' => 'Ikke slettbare brukernavn', +'settings_undelUserIds_desc' => 'Kommaseparert liste over brukernavn, som ikke kan slettes.', +'settings_updateDatabase' => 'Kjør skjemaoppdateringsskript i databasen', +'settings_updateNotifyTime' => 'Oppdater varslingstid', +'settings_updateNotifyTime_desc' => 'Brukere får beskjed om dokumentendringer som skjedde i løpet av de siste \'Update Notify Time\' sekunder', +'settings_upgrade_php' => 'Oppgrader PHP til minst versjon 5.6.38', +'settings_versioningFileName' => 'Versjon av filnavn', +'settings_versioningFileName_desc' => 'Navnet på den versjonsfil som er laget av sikkerhetskopieringsverktøyet.', +'settings_versiontolow' => 'Versjonen for lav', +'settings_viewOnlineFileTypes' => 'Vis online filtyper', +'settings_viewOnlineFileTypes_desc' => 'Filer med en av følgende avslutninger kan sees på nettet (BRUK KUN SMÅ BOKSTAVER)', +'settings_webdav' => 'WebDAV', +'settings_workflowMode' => 'Arbeidsflytmodus', +'settings_workflowMode_desc' => 'Den avanserte arbeidsflyten gjør det mulig å spesifisere din egen utgivelsesarbeidsflyt for dokumentversjoner.', +'settings_workflowMode_valadvanced' => 'avansert', +'settings_workflowMode_valnone' => 'ingen', +'settings_workflowMode_valtraditional' => 'tradisjonell', +'settings_workflowMode_valtraditional_only_approval' => 'tradisjonell (uten gjennomgang)', +'settings_zendframework' => 'Zend Framework', +'set_expiry' => 'Angi utløpstid', +'set_owner' => 'Angi eier', +'set_owner_error' => 'Feil ved innstilling av eier', +'set_password' => 'Angi passord', +'set_workflow' => 'Velg arbeidsflyt', +'show_extension_changelog' => 'Vis forandrings logg', +'show_extension_version_list' => 'Vis liste over versjoner', +'signed_in_as' => 'Innlogget som', +'sign_in' => 'Logg inn', +'sign_out' => 'Logg ut', +'sign_out_user' => 'Logg ut bruker', +'site_brand' => 'Nettsted merke/logo', +'sk_SK' => 'Slovakisk', +'sort_by_date' => 'Sorter etter dato', +'sort_by_expiration_date' => '', +'sort_by_name' => 'Sorter etter navn', +'sort_by_sequence' => 'Sorter etter sekvens', +'space_used_on_data_folder' => 'Plass brukt på datamappe', +'splash_added_to_clipboard' => 'Lagt til utklippstavlen', +'splash_add_access' => 'Adgangs rett lagt til', +'splash_add_attribute' => 'Ny egenskap lagt til', +'splash_add_group' => 'Ny gruppe lagt til', +'splash_add_group_member' => 'Nytt gruppemedlem lagt til', +'splash_add_role' => 'Lagt til ny rolle', +'splash_add_to_transmittal' => 'Legg til overføring', +'splash_add_transmittal' => 'Lagt til overføring', +'splash_add_user' => 'Ny bruker lagt til', +'splash_cleared_cache' => 'Cache ble slettet', +'splash_cleared_clipboard' => 'Utklippstavlen ryddet', +'splash_delete_access' => 'Adgangs retten er slettet', +'splash_document_added' => 'Dokument lagt til', +'splash_document_checkedout' => 'Dokument sjekket ut', +'splash_document_edited' => 'Dokumentet lagret', +'splash_document_indexed' => 'Dokumentet \'[name]\' er indeksert.', +'splash_document_locked' => 'Dokumentet er låst', +'splash_document_unlocked' => 'Dokumentet åpnet', +'splash_edit_access' => 'Adgangsretten ble endret', +'splash_edit_attribute' => 'Egenskapen ble lagret', +'splash_edit_event' => 'Hendelsen lagret', +'splash_edit_group' => 'Gruppen lagret', +'splash_edit_role' => 'Rollen er lagret', +'splash_edit_task' => 'Oppgaven lagret', +'splash_edit_transmittal' => 'Overføring lagret', +'splash_edit_user' => 'Bruker lagret', +'splash_error_add_to_transmittal' => 'Feil under tilføyelse av dokument til overføringen', +'splash_error_rm_download_link' => 'Feil ved fjerning av nedlastingslenke', +'splash_error_send_download_link' => 'Feil under sending av nedlastingslenke', +'splash_extension_getlist' => 'Oppdatert liste over utvidelser fra oppbevaringsted', +'splash_extension_import' => 'Utvidelse installert', +'splash_extension_refresh' => 'Oppdaterte liste over utvidelser', +'splash_extension_upload' => 'Utvidelse installert', +'splash_folder_edited' => 'Lagre mappe endringer', +'splash_importfs' => 'Importerte [docs] dokumenter og [folders] mapper', +'splash_inherit_access' => 'Adgangsrett blir arvet', +'splash_invalid_folder_id' => 'Ugyldig mappenavn', +'splash_invalid_searchterm' => 'Ugyldig søkeord', +'splash_link_document' => 'Link lagt til', +'splash_moved_clipboard' => 'Utklippstavlen flyttet inn i gjeldende mappe', +'splash_move_document' => 'Dokumentet flyttet', +'splash_move_folder' => 'Mappen flyttet', +'splash_notinherit_access' => 'Adgangsrettigheter arves ikke lenger', +'splash_receipt_update_success' => 'Mottak ble lagt til', +'splash_removed_from_clipboard' => 'Fjernet fra utklippstavlen', +'splash_rm_attribute' => 'Egenskap fjernet', +'splash_rm_attr_value' => 'Egenskapsverdi fjernet', +'splash_rm_document' => 'Dokumentet er fjernet', +'splash_rm_download_link' => 'Fjernet nedlastingslenke', +'splash_rm_folder' => 'Mappen slettet', +'splash_rm_group' => 'Gruppen fjernet', +'splash_rm_group_member' => 'Gruppemedlem fjernet', +'splash_rm_role' => 'Rolle slettet', +'splash_rm_transmittal' => 'Overføring slettet', +'splash_rm_user' => 'Bruker fjernet', +'splash_rm_user_processes' => 'Bruker fjernet fra alle prosesser', +'splash_rm_workflow' => 'Arbeidsflyt fjernet', +'splash_rm_workflow_action' => 'Arbeidsflythandling fjernet', +'splash_rm_workflow_state' => 'Arbeidsflyttilstand fjernet', +'splash_saved_file' => 'Versjon lagret', +'splash_save_user_data' => 'Brukerdata lagret', +'splash_send_download_link' => 'Nedlastingslenke sendt via e-post.', +'splash_send_login_data' => 'Påloggingsdata sendt', +'splash_setowner' => 'Sett ny eier', +'splash_settings_saved' => 'Instillinger lagret', +'splash_set_default_access' => 'Standard adgangsrett satt', +'splash_substituted_user' => 'Erstatt bruker', +'splash_switched_back_user' => 'Bytt tilbake til opprinnelige bruker', +'splash_toogle_group_manager' => 'Gruppeleder er endret', +'splash_transfer_content' => 'Innholdet er overført', +'splash_transfer_document' => 'Dokumentet er øverført', +'splash_transfer_objects' => 'Objekt er øverført', +'splash_trigger_workflow' => 'Utløst overgang av arbeidsflyt', +'state_and_next_state' => 'Status/Neste status', +'statistic' => 'Statistikk', +'status' => 'Status', +'status_approval_rejected' => 'Utkast forkastet', +'status_approved' => 'Godkjent', +'status_approver_removed' => 'Godkjenner fjernet fra prosessen', +'status_needs_correction' => 'Trenger korrigering', +'status_not_approved' => 'Ikke godkjent', +'status_not_receipted' => 'Ikke mottatt ennå', +'status_not_reviewed' => 'Ikke gjennomgått', +'status_not_revised' => 'ikke revidert', +'status_receipted' => 'Mottatt', +'status_receipt_rejected' => 'Avvist', +'status_recipient_removed' => 'Mottakeren fjernet fra listen', +'status_reviewed' => 'Gjennomgått', +'status_reviewer_rejected' => 'Utkast forkastet', +'status_reviewer_removed' => 'Anmelderen ble fjernet fra prosessen', +'status_revised' => 'revidert', +'status_revision_rejected' => 'Avvist', +'status_revision_sleeping' => 'avventer', +'status_revisor_removed' => 'Revisor fjernet fra listen', +'status_unknown' => 'Ukjent', +'storage_size' => 'Lagrings størrelse', +'subfolder_duplicate_name' => 'Dupliser navnet på undermappen', +'submit_2_fact_auth' => 'Lagre hemmelighet', +'submit_approval' => 'Send inn godkjenning', +'submit_login' => 'Logg inn', +'submit_password' => 'Angi nytt passord', +'submit_password_forgotten' => 'Start prosessen', +'submit_receipt' => 'Send inn kvittering', +'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', +'success_add_aro' => 'Adgangsforespørsel objekt lagt til', +'success_add_permission' => 'Lagt til tillatelse', +'success_remove_permission' => 'Fjernet tillatelse', +'success_toogle_permission' => 'Tillatelsen ble endret', +'sunday' => 'Søndag', +'sunday_abbr' => 'Sø', +'sv_SE' => 'Svensk', +'switched_to' => 'Byttet til', +'takeOverAttributeValue' => 'Ta over egenskaps verdien fra forrige versjon.', +'takeOverGrpApprover' => 'Ta over gruppe godkjennere fra forrige versjon.', +'takeOverGrpApprovers' => 'Ta over gruppegodkjennere', +'takeOverGrpReviewer' => 'Ta over gruppen av korrekturleser fra forrige versjon.', +'takeOverGrpReviewers' => 'Ta over gruppevurderere', +'takeOverIndApprover' => 'Ta over individuell godkjenninger fra forrige versjon.', +'takeOverIndApprovers' => 'Ta over individuelle godkjennere', +'takeOverIndReviewer' => 'Ta over individuell anmelder fra forrige versjon.', +'takeOverIndReviewers' => 'Ta over individuelle korrekturleser', +'tasks' => 'Oppgaver', +'task_core_expireddocs_days' => '', +'task_description' => 'Beskrivelse', +'task_disabled' => 'Deaktivert', +'task_frequency' => 'Frekvens', +'task_last_run' => 'Siste kjøring', +'task_name' => 'Navn', +'task_next_run' => 'Neste kjøring', +'temp_jscode' => 'Midlertidig javascript-kode', +'testmail_body' => 'Denne e-posten er bare for å teste postkonfigurasjonen til SeedDMS', +'testmail_subject' => 'Test e-post', +'theme' => 'Tema', +'thursday' => 'Torsdag', +'thursday_abbr' => 'To', +'timeline' => 'Tidslinje', +'timeline_add_file' => 'Nytt vedlegg', +'timeline_add_version' => 'Ny versjon [version]', +'timeline_full_add_file' => '[document]
Nytt vedlegg', +'timeline_full_add_version' => '[document]
Ny versjon [version]', +'timeline_full_scheduled_revision' => '[document]
Revisjon av versjon [version]', +'timeline_full_status_change' => '[document]
Versjon [version]: [status]', +'timeline_scheduled_revision' => 'Revisjon av versjon [version]', +'timeline_selected_item' => 'Valgt dokument', +'timeline_skip_add_file' => 'vedlegg lagt til', +'timeline_skip_scheduled_revision' => 'Planlagt revisjon', +'timeline_skip_status_change_-1' => 'avvist', +'timeline_skip_status_change_-3' => 'utløpt', +'timeline_skip_status_change_0' => 'avventer vurdering', +'timeline_skip_status_change_1' => 'venter på godkjenning', +'timeline_skip_status_change_2' => 'løslatt', +'timeline_skip_status_change_3' => 'i arbeidsflyt', +'timeline_skip_status_change_4' => 'under revidering', +'timeline_skip_status_change_5' => 'utkast', +'timeline_status_change' => 'Versjon [version]: [status]', +'to' => 'Til', +'toggle_manager' => 'Bytt leder', +'toggle_qrcode' => 'Vis/skjul QR-kode', +'total' => '', +'to_before_from' => 'Sluttdato kan ikke være før startdato', +'transfer_content' => 'Overfør innhold', +'transfer_document' => 'Overfør dokumentet', +'transfer_no_read_access' => 'Brukeren har ikke lesetilgang i mappen', +'transfer_no_write_access' => 'Brukeren har ikke skrivetilgang i mappen', +'transfer_objects' => 'Overfør objekter', +'transfer_objects_to_user' => 'Ny eier', +'transfer_process_to_user' => 'Overfør prosess til bruker', +'transfer_to_user' => 'Overfør til bruker', +'transition_triggered_email' => 'Arbeidsflytovergang utløst', +'transition_triggered_email_body' => 'Arbeidsflytovergang utløst +Dokument: [name] +Versjon: [version] +Kommentar: [comment] +Arbeidsflyt: [workflow] +Tidligere status: [previous_state] +Nåværende status: [current_state] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'transition_triggered_email_subject' => '[sitename]: [name] - Arbeidsflytovergang utløst', +'transmittal' => 'Overføring', +'transmittalitem_removed' => 'Overførings element fjernet', +'transmittalitem_updated' => 'Dokument oppdatert til siste versjon', +'transmittal_comment' => 'Kommentar', +'transmittal_name' => 'Navn', +'transmittal_size' => 'Størrelse', +'tree_loading' => 'Venligst vent, til dokumenttreet er lastet...', +'trigger_workflow' => 'Arbeidsflyt', +'tr_TR' => 'Tyrkisk', +'tuesday' => 'Tirsdag', +'tuesday_abbr' => 'Ti', +'type_of_hook' => 'Type', +'type_to_filter' => 'Skriv for filter liste', +'type_to_search' => 'Skriv for å søke', +'uk_UA' => 'Ukrainsk', +'under_folder' => 'I mappe', +'unknown_attrdef' => 'Ukjent egenskaps definisjon', +'unknown_command' => 'Kommando ikke gjenkjent.', +'unknown_document_category' => 'Ukjent kategori', +'unknown_group' => 'Ukjent gruppenavn', +'unknown_id' => 'ukjent navn', +'unknown_keyword_category' => 'Ukjent kategori', +'unknown_owner' => 'Ukjent eiernavn', +'unknown_user' => 'Ukjent brukernavn', +'unlinked_content' => 'U-linket innhold', +'unlinked_documents' => 'U-linket dokumenter', +'unlinked_folders' => 'U-linket mapper', +'unlinking_objects' => 'Fjern tilknytning av innhold', +'unlock_cause_access_mode_all' => 'Du kan fremdeles oppdatere den fordi du har adgangsmodus "alle". Låsen fjernes automatisk.', +'unlock_cause_locking_user' => 'Du kan fortsatt oppdatere den fordi du også er den som låste den. Låsen fjernes automatisk.', +'unlock_document' => 'Lås opp', +'update' => 'Opptatere', +'update_approvers' => 'Oppdater liste over godkjennere', +'update_document' => 'Oppdater dokumentet', +'update_fulltext_index' => 'Oppdater fulltekstindeksen', +'update_info' => 'Oppdater informasjon', +'update_locked_msg' => 'Dette dokumentet er låst.', +'update_recipients' => 'Oppdater liste over mottakere', +'update_reviewers' => 'Oppdater liste over korrekturlesere', +'update_revisors' => 'Oppdater liste med reviderere', +'update_transmittalitem' => 'Oppdater til siste dokumentversjon', +'uploaded_by' => 'Lastet opp av', +'uploading_failed' => 'Opplasting av en av filene dine mislyktes. Kontroller den maksimale filstørrelsen for opplastning.', +'uploading_maxsize' => 'Den opplastede filen overskrider den maksimale opplastede filstørrelsen.', +'uploading_zerosize' => 'Laster opp en tom fil. Opplastingen er kansellert.', +'used_discspace' => 'Brukt diskplass', +'user' => 'Bruker', +'userid_groupid' => 'Brukernavn/gruppenavn', +'users' => 'Brukere', +'users_and_groups' => 'Brukere/grupper', +'users_done_work' => 'Brukere gjort arbeid', +'user_exists' => 'Bruker eksisterer allerede.', +'user_group' => 'Bruker/Gruppe', +'user_group_management' => 'Ledelse av brukere/grupper', +'user_image' => 'Bilde', +'user_info' => 'Brukerinformasjon', +'user_list' => 'Liste over brukere', +'user_login' => 'Brukernavn', +'user_management' => 'Brukerstyring', +'user_name' => 'Fullt navn', +'use_comment_of_document' => 'Bruk kommentaren til dokument', +'use_default_categories' => 'Bruk forhåndsdefinerte kategorier', +'use_default_keywords' => 'Bruk forhåndsdefinerte søkeord', +'valid_till' => 'Gyldig til', +'version' => 'Versjon', +'versioning_file_creation' => 'Versjon av oppretting av fil', +'versioning_file_creation_warning' => 'Med denne operasjonen kan du opprette en fil for hvert dokument som inneholder versjonsinformasjonen til det dokumentet. Etter opprettelsen vil hver fil lagres i dokumentmappen. Disse filene er ikke nødvendige for regelmessig drift av dms, men kan være av verdi hvis hele depotet skal overføres til et annet system.', +'versioning_info' => 'Versjons info', +'versiontolow' => 'Versjon for lav', +'version_comment' => 'Kommentar til versjon', +'version_deleted_email' => 'Versjon slettet', +'version_deleted_email_body' => 'Versjon slettet +Dokument: [name] +Versjon: [version] +Overordnet mappe: [folder_path] +Bruker: [username] +URL: [url]', +'version_deleted_email_subject' => '[sitename]: [name] - Versjon slettet', +'version_info' => 'Versjons informasjon', +'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', +'week_view' => 'Ukesvisning', +'workflow' => 'Arbeidsflyt', +'workflows_involded' => 'Tillhører en arbeidsflyt', +'workflow_actions_management' => 'Handlinger for arbeidsflyt', +'workflow_action_in_use' => 'Denne handling er i bruk i en arbeidsflyt.', +'workflow_action_name' => 'Navn', +'workflow_editor' => 'Arbeidsflyt editor', +'workflow_group_summary' => 'Sammendrag for gruppe', +'workflow_has_cycle' => 'Arbeidsflyten har en syklus', +'workflow_initstate' => 'Opprinnelige tilstand', +'workflow_in_use' => 'Denne arbeidsflyten brukes for tiden av dokumenter.', +'workflow_layoutdata_saved' => 'Layoutdata lagret', +'workflow_management' => 'Arbeidsflytstyring', +'workflow_name' => 'Navn', +'workflow_no_doc_rejected_state' => 'Dokumentet vil ikke bli avvist i arbeidsflyttilstand!', +'workflow_no_doc_released_state' => 'Dokumentet vil ikke bli utgitt i en arbeidsflyttilstand!', +'workflow_no_initial_state' => 'Ingen av overgangene starter med den opprinnelige tilstanden til arbeidsflyten!', +'workflow_no_states' => 'Du må først definere arbeidsflyttilstander, før du legger til en arbeidsflyt.', +'workflow_save_layout' => 'Lagre utforming', +'workflow_state' => 'status i arbeidsflyten', +'workflow_states_management' => 'Arbeidsflyt ledelse', +'workflow_state_docstatus' => 'Document status', +'workflow_state_in_use' => 'Denne tilstanden brukes for øyeblikket av arbeidsflyter.', +'workflow_state_name' => 'Navn', +'workflow_summary' => 'Arbeidsflyt sammendrag', +'workflow_transition_without_user_group' => 'Minst en av overgangene har verken en bruker eller en gruppe!', +'workflow_user_summary' => 'Brukersammendrag', +'wrong_filetype' => 'Feil filtype', +'x_more_objects' => '[number] flere objekter', +'year_view' => 'Årsvisning', +'yes' => 'Ja', +'zh_CN' => 'Kinesisk (CN)', +'zh_TW' => 'Kinesisk (TW)', +); +?> diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index b0c99387e..67196458e 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 (779), gijsbertush (651), pepijn (45), reinoutdijkstra@hotmail.com (270) $text = array( '2_factor_auth' => '2-factor-authenticatie', @@ -300,6 +300,7 @@ URL: [url]', 'converter_new_cmd' => 'Wijziging: nieuw commando', 'converter_new_mimetype' => 'Wijziging: nieuw mimetype', 'copied_to_checkout_as' => 'Gekopieerd naar checkout als:', +'create_download_link' => '', 'create_fulltext_index' => 'Creeer volledige tekst index', 'create_fulltext_index_warning' => 'U staat op het punt de volledigetekst opnieuw te indexeren. Dit kan behoorlijk veel tijd en snelheid vergen van het systeem. Als u zeker bent om opnieuw te indexeren, bevestig deze actie.', 'creation_date' => 'Aangemaakt', @@ -341,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', @@ -419,7 +420,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'Erft toegang', 'download' => 'Download', 'download_extension' => 'Download extensie als zip file', +'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_state' => '', 'download_links' => 'Download-links', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Repareer alle mappen en documenten.', 'do_object_setchecksum' => 'Set checksum', 'do_object_setfilesize' => 'Voer bestandgrootte in', @@ -776,6 +791,7 @@ URL: [url]', 'my_documents' => 'Mijn Documenten', 'my_transmittals' => 'Mijn zendingen', 'name' => 'Naam', +'nb_NO' => 'Noorweegs', 'needs_correction' => '', 'needs_workflow_action' => 'Dit document vereist uw aandacht. Bekijk deze onder het tabblad workflows.', 'network_drive' => 'Networkdrive', @@ -1084,7 +1100,7 @@ URL: [url]', 'revision_status' => 'Status revisie', 'revision_submit_email_body' => '', 'revision_submit_email_subject' => '', -'revision_summary' => '', +'revision_summary' => 'Revisie samenvatting', 'revisors' => 'Herzieners', 'revisor_already_assigned' => 'Gebruiker is reeds herziener', 'revisor_already_removed' => 'Herziener reeds verwijderd', @@ -1596,6 +1612,7 @@ Name: [username] 'site_brand' => '', 'sk_SK' => 'Slowaaks', 'sort_by_date' => 'Sorteren op datum', +'sort_by_expiration_date' => '', 'sort_by_name' => 'Sorteren op naam', 'sort_by_sequence' => 'Sorteer op volgorde', 'space_used_on_data_folder' => 'Gebruikte diskomvang in data map', @@ -1705,6 +1722,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', @@ -1726,6 +1745,7 @@ Name: [username] 'takeOverIndReviewer' => 'Onthoud de laatste groep individuele herzieners', 'takeOverIndReviewers' => '', 'tasks' => 'taken', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1761,6 +1781,7 @@ Name: [username] 'to' => 'aan', 'toggle_manager' => 'Wijzig Beheerder', 'toggle_qrcode' => 'Tonen/Verbergen QR-code', +'total' => '', 'to_before_from' => 'De einddatum mag niet voor de startdatum liggen', 'transfer_content' => '', 'transfer_document' => 'Document overdragen', @@ -1864,6 +1885,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 11c78c7a7..07206a753 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -19,14 +19,14 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (861), netixw (84), romi (93), uGn (112) +// Translators: Admin (871), netixw (84), romi (93), uGn (112) $text = array( '2_factor_auth' => '', '2_factor_auth_info' => '', '2_fact_auth_secret' => '', 'accept' => 'Akceptuj', -'access_control' => '', +'access_control' => 'Kontrola dostępu', 'access_control_is_off' => '', 'access_denied' => 'Dostęp zabroniony.', 'access_inheritance' => 'Dziedziczenie dostępu', @@ -224,8 +224,8 @@ URL: [url]', 'change_assignments' => 'Zmiana przypisania', 'change_password' => 'Zmiana hasła', 'change_password_message' => 'Twoje hasło zostało zmienione.', -'change_recipients' => '', -'change_revisors' => '', +'change_recipients' => 'Zmień odbiorców', +'change_revisors' => 'Zmień recenzentów', 'change_status' => 'Zmień status', 'charts' => 'Wykresy', 'chart_docsaccumulated_title' => 'Liczba dokumentów', @@ -295,6 +295,7 @@ URL: [url]', 'converter_new_cmd' => 'Komenda', 'converter_new_mimetype' => 'Nowy typ MIME', 'copied_to_checkout_as' => '', +'create_download_link' => '', 'create_fulltext_index' => 'Utwórz indeks pełnotekstowy', 'create_fulltext_index_warning' => 'Zamierzasz ponownie utworzyć indeks pełnotekstowy. To może zająć sporo czasu i ograniczyć ogólną wydajność systemu. Jeśli faktycznie chcesz to zrobić, proszę potwierdź tę operację.', 'creation_date' => 'Utworzony', @@ -414,7 +415,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'Dziedzicz dostęp', 'download' => 'Pobierz', 'download_extension' => 'Pobierz rozszerzenie w pliku 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_state' => '', 'download_links' => '', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Napraw wszystkie katalogi i pliki.', 'do_object_setchecksum' => 'Ustaw sumę kontrolną', 'do_object_setfilesize' => 'Podaj rozmiar pliku', @@ -769,8 +784,9 @@ URL: [url]', 'move_folder' => 'Przenieś folder', 'my_account' => 'Moje konto', 'my_documents' => 'Moje dokumenty', -'my_transmittals' => '', +'my_transmittals' => 'Moi recenzenci', 'name' => 'Nazwa', +'nb_NO' => 'Norweski', 'needs_correction' => '', 'needs_workflow_action' => 'Dokument wymaga uwagi. Proszę sprawdzić kartę workflow.', 'network_drive' => '', @@ -1073,7 +1089,7 @@ URL: [url]', 'role_admin' => 'Administrator', 'role_guest' => 'Gość', 'role_info' => '', -'role_management' => '', +'role_management' => 'Zarządzanie rolam', 'role_name' => '', 'role_type' => '', 'role_user' => 'Użytkownik', @@ -1096,7 +1112,7 @@ URL: [url]', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', 'scheduler_class_tasks' => '', -'scheduler_task_mgr' => '', +'scheduler_task_mgr' => 'Zadania', 'search' => 'Szukaj', 'search_fulltext' => 'Przeszukaj całe teksty', 'search_in' => 'Szukaj w', @@ -1536,8 +1552,9 @@ URL: [url]', 'sign_out_user' => 'Wyloguj użytkownika', 'site_brand' => '', 'sk_SK' => 'słowacki', -'sort_by_date' => '', -'sort_by_name' => '', +'sort_by_date' => 'Sortuj według daty', +'sort_by_expiration_date' => '', +'sort_by_name' => 'Sortuj według nazwy', 'sort_by_sequence' => '', 'space_used_on_data_folder' => 'Przestrzeń zajęta przez folder danych', 'splash_added_to_clipboard' => 'Dodano do schowka', @@ -1646,6 +1663,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', @@ -1667,6 +1686,7 @@ URL: [url]', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', 'tasks' => '', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1702,6 +1722,7 @@ URL: [url]', 'to' => 'Do', 'toggle_manager' => 'Przełączanie zarządcy', 'toggle_qrcode' => '', +'total' => '', 'to_before_from' => '', 'transfer_content' => '', 'transfer_document' => 'Transfer dokumentu', @@ -1792,7 +1813,7 @@ URL: [url]', 'versioning_file_creation_warning' => 'Ta operacja utworzy plik zawierający informacje o wersjach plików z całego wskazanego folderu. Po utworzeniu, każdy plik będzie zapisany w folderze odpowiednim dla danego dokumentu.', 'versioning_info' => 'Informacje o wersjach', 'versiontolow' => 'Za niska wersja', -'version_comment' => '', +'version_comment' => 'Opis wersji', 'version_deleted_email' => 'Wersja usunięta', 'version_deleted_email_body' => 'Wersja została usunięta Dokument: [name] @@ -1805,6 +1826,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 58d506f17..d006763fc 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 (1733), flaviove (627), lfcristofoli (352) +// Translators: Admin (1841), 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,6 +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' => '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', @@ -438,7 +439,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'Herdar acesso', 'download' => 'Download', 'download_extension' => 'Baixar extensão como arquivo 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_state' => '', 'download_links' => 'Links para download', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Reparar todas as pastas e documentos.', 'do_object_setchecksum' => 'Defina soma de verificação', 'do_object_setfilesize' => 'Defina o tamanho do arquivo', @@ -451,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', @@ -484,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.', @@ -576,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]', @@ -657,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', @@ -703,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', @@ -741,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.', @@ -752,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', @@ -802,6 +817,7 @@ URL: [url]', 'my_documents' => 'Meus Documentos', 'my_transmittals' => 'Minhas Transmissões', 'name' => 'Nome', +'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', @@ -862,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' => '', @@ -887,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', @@ -913,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', @@ -962,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', @@ -1022,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', @@ -1048,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', @@ -1069,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]', @@ -1089,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', @@ -1108,9 +1124,9 @@ 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_summary' => '', +'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.', 'revisor_already_removed' => 'Revisor já foi removido do processo de revisão ou já revisou o documento.', @@ -1139,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', @@ -1156,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] @@ -1232,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', @@ -1273,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', @@ -1302,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', @@ -1314,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', @@ -1334,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', @@ -1377,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', @@ -1428,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', @@ -1436,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")', @@ -1453,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', @@ -1470,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', @@ -1511,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', @@ -1526,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', @@ -1541,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', @@ -1549,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', @@ -1611,16 +1627,17 @@ 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' => '', -'sort_by_name' => '', -'sort_by_sequence' => '', -'space_used_on_data_folder' => 'Space used on data folder', +'sort_by_date' => 'classificar por data', +'sort_by_expiration_date' => '', +'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', @@ -1659,7 +1676,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', @@ -1682,7 +1699,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', @@ -1690,7 +1707,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', @@ -1713,12 +1730,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', @@ -1727,6 +1744,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', @@ -1748,6 +1767,7 @@ Nome: [username] 'takeOverIndReviewer' => 'Assuma o revisor individual da última versão.', 'takeOverIndReviewers' => '', 'tasks' => 'Tarefas', +'task_core_expireddocs_days' => '', 'task_description' => 'Descrição', 'task_disabled' => 'Desativado', 'task_frequency' => 'Frequência', @@ -1755,8 +1775,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', @@ -1779,12 +1799,13 @@ 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', +'total' => '', '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', @@ -1815,7 +1836,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', @@ -1873,7 +1894,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] @@ -1884,8 +1905,12 @@ 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', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Quarta-feira', 'wednesday_abbr' => 'Qa', 'weeks' => 'semanas', @@ -1907,16 +1932,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', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index 398c6bfae..fe8008d5f 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -19,14 +19,14 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1094), balan (87) +// Translators: Admin (1099), balan (87) $text = array( '2_factor_auth' => '', '2_factor_auth_info' => '', '2_fact_auth_secret' => '', 'accept' => 'Accept', -'access_control' => '', +'access_control' => 'Controlul accesului', 'access_control_is_off' => '', 'access_denied' => 'Acces interzis.', 'access_inheritance' => 'Mostenire acces', @@ -307,6 +307,7 @@ URL: [url]', 'converter_new_cmd' => '', 'converter_new_mimetype' => '', 'copied_to_checkout_as' => '', +'create_download_link' => '', 'create_fulltext_index' => 'Creați indexul pentru tot textul', 'create_fulltext_index_warning' => 'Sunteți pe cale sa recreați indexul pentru tot textul. Acest lucru poate dura o perioadă considerabilă de timp și poate reduce performanța sistemului în ansamblu. Dacă doriți cu adevărat să recreati indexul pentru tot textul, vă rugăm să confirmați operațiunea.', 'creation_date' => 'Creat', @@ -426,7 +427,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'Acces moștenit', 'download' => 'Descarca', 'download_extension' => 'Descarca extensia ca fisier 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_state' => '', 'download_links' => '', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Repară toate folderele și documentele.', 'do_object_setchecksum' => 'Setare sumă de control(checksum)', 'do_object_setfilesize' => 'Setare dimensiune fișier', @@ -783,6 +798,7 @@ URL: [url]', 'my_documents' => 'Documentele Mele', 'my_transmittals' => 'Trimiterile mele', 'name' => 'Nume', +'nb_NO' => 'Norvegiana', 'needs_correction' => '', 'needs_workflow_action' => 'Acest document necesită atenția dumneavoastră. Vă rugăm să verificați tab-ul workflow.', 'network_drive' => '', @@ -1116,7 +1132,7 @@ URL: [url]', 'role_admin' => 'Administrator', 'role_guest' => 'Oaspete', 'role_info' => '', -'role_management' => '', +'role_management' => 'Managementul rolurilor', 'role_name' => '', 'role_type' => '', 'role_user' => 'Utilizator', @@ -1139,7 +1155,7 @@ URL: [url]', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', 'scheduler_class_tasks' => '', -'scheduler_task_mgr' => '', +'scheduler_task_mgr' => 'Planificator', 'search' => 'Caută', 'search_fulltext' => 'Caută în tot textul', 'search_in' => 'Caută în', @@ -1179,7 +1195,7 @@ URL: [url]', 'select_ind_reviewers' => 'Click pentru a selecta un revizuitor individual', 'select_ind_revisors' => 'Faceti click pentru a selecta retrimitori individuali', 'select_one' => 'Selectați unul', -'select_user' => '', +'select_user' => 'Selecteaza utilizator', 'select_users' => 'Click pentru a selecta utilizatori', 'select_value' => 'Valoare selectata', 'select_workflow' => 'Selectați workflow', @@ -1580,6 +1596,7 @@ URL: [url]', 'site_brand' => '', 'sk_SK' => 'Slovacă', 'sort_by_date' => 'Sortare dupa data', +'sort_by_expiration_date' => '', 'sort_by_name' => 'Sortare dupa nume', 'sort_by_sequence' => 'Sortare dupa numar', 'space_used_on_data_folder' => 'Spatiu folosit în folderul de date', @@ -1689,6 +1706,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', @@ -1710,6 +1729,7 @@ URL: [url]', 'takeOverIndReviewer' => 'Preia revizuitorul individual din ultima versiune.', 'takeOverIndReviewers' => '', 'tasks' => '', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1745,6 +1765,7 @@ URL: [url]', 'to' => 'La', 'toggle_manager' => 'Comută Manager', 'toggle_qrcode' => '', +'total' => '', 'to_before_from' => 'Data de încheiere nu poate fi înainte de data de începere', 'transfer_content' => '', 'transfer_document' => 'Transfer document', @@ -1848,6 +1869,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 997dd8b0d..dd9107aeb 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 (1681) $text = array( '2_factor_auth' => 'Двухфакторная аутентификация', @@ -141,7 +141,7 @@ URL: [url]', 'archive_creation_warning' => 'Эта операция создаст архив, содержащий все каталоги. После создания архив будет сохранен в каталоге данных сервера.
Внимание: архив созданный как понятный человеку, будет непригоден в качестве резервной копии для восстановления!', 'ar_EG' => 'Arabic', 'assign_approvers' => 'Назначить утверждающих', -'assign_recipients' => '', +'assign_recipients' => 'Указать получателей', 'assign_reviewers' => 'Назначить рецензентов', 'assign_user_property_to' => 'Назначить свойства пользователя', 'assumed_released' => 'Утверждён', @@ -307,6 +307,7 @@ URL: [url]', 'converter_new_cmd' => 'Команда', 'converter_new_mimetype' => 'Новый mime тип', 'copied_to_checkout_as' => 'Файл скопирован в среду загрузки как \'[filename]\' на [date]', +'create_download_link' => '', 'create_fulltext_index' => 'Создать полнотекстовый индекс', 'create_fulltext_index_warning' => 'Вы хотите пересоздать полнотекстовый индекс. Это займёт какое-то время и снизит производительность. Продолжить?', 'creation_date' => 'Создан', @@ -426,7 +427,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'Наследовать уровень доступа', 'download' => 'Загрузить', 'download_extension' => '', +'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_state' => '', 'download_links' => '', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Исправить все каталоги и документы', 'do_object_setchecksum' => 'Установить контрольную сумму', 'do_object_setfilesize' => 'Установить размер файла', @@ -783,7 +798,8 @@ URL: [url]', 'my_documents' => 'Мои документы', 'my_transmittals' => 'Мои пересылки', 'name' => 'Имя', -'needs_correction' => '', +'nb_NO' => 'Норвежский', +'needs_correction' => 'Нужны правки', 'needs_workflow_action' => 'Этот документ требует вашего внимания. См. вкладку «Процесс».', 'network_drive' => 'Сетевой диск', 'never' => 'никогда', @@ -1173,7 +1189,7 @@ URL: [url]', 'select_grp_approvers' => 'Выберите утверждающую группу', 'select_grp_ind_approvers' => 'Выберите группу', 'select_grp_ind_notification' => 'Выберите группу', -'select_grp_ind_recipients' => '', +'select_grp_ind_recipients' => 'Щелкните для выбора группы', 'select_grp_ind_reviewers' => 'Выберите группу', 'select_grp_ind_revisors' => '', 'select_grp_notification' => 'Выберите группу для уведомления', @@ -1587,6 +1603,7 @@ URL: [url]', 'site_brand' => '', 'sk_SK' => 'Slovak', 'sort_by_date' => 'Сортировка по дате', +'sort_by_expiration_date' => '', 'sort_by_name' => 'Сортировка по имени', 'sort_by_sequence' => 'Сортировка по порядку', 'space_used_on_data_folder' => 'Размер каталога данных', @@ -1696,6 +1713,8 @@ URL: [url]', 'submit_review' => 'Рецензировать', 'submit_revision' => '', 'submit_userinfo' => 'Отправить информацию', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => 'Переключиться на \'[username]\'', 'substitute_user' => 'Переключиться', @@ -1717,6 +1736,7 @@ URL: [url]', 'takeOverIndReviewer' => 'Использовать рецензентов из прошлой версии', 'takeOverIndReviewers' => '', 'tasks' => 'Задания', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1752,6 +1772,7 @@ URL: [url]', 'to' => 'До', 'toggle_manager' => 'Изменить как менеджера', 'toggle_qrcode' => '', +'total' => '', 'to_before_from' => 'Конечная дата не может быть меньше начальной даты', 'transfer_content' => '', 'transfer_document' => 'Передать документ', @@ -1855,6 +1876,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 9ced5063f..5c9bbb3e3 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -307,6 +307,7 @@ URL: [url]', 'converter_new_cmd' => 'Príkaz', 'converter_new_mimetype' => 'Nový mime-type', 'copied_to_checkout_as' => 'File copied to checkout space as \'[filename]\' on [date]', +'create_download_link' => '', 'create_fulltext_index' => 'Vytvoriť fulltext index', 'create_fulltext_index_warning' => 'Chystáte sa obnoviť fulltext index, čo môže dlho trvať a môže znížiť výkon systému. Ak chcete pokračovať, potvrďte svoju voľbu.', 'creation_date' => 'Vytvorené', @@ -438,7 +439,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'Zdediť prístup', 'download' => 'Stiahnuť', 'download_extension' => 'Download extension as zip file', +'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_state' => '', 'download_links' => 'Odkazy na stiahnutie', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Opraviť všetky zložky a dokumenty.', 'do_object_setchecksum' => 'Nastaviť kontrolný súčet', 'do_object_setfilesize' => 'Nastaviť veľkosť súboru', @@ -802,6 +817,7 @@ URL: [url]', 'my_documents' => 'Moje dokumenty', 'my_transmittals' => 'My Transmittals', 'name' => 'Meno', +'nb_NO' => '', 'needs_correction' => 'Vyžaduje opravu', 'needs_workflow_action' => 'Tento dokument si vyžaduje vašu pozornosť. Skontrolujte kartu pracovného postupu.', 'network_drive' => 'Sieťová jednotka', @@ -1620,6 +1636,7 @@ Meno: [username] 'site_brand' => '', 'sk_SK' => 'Slovenčina', 'sort_by_date' => '', +'sort_by_expiration_date' => '', 'sort_by_name' => '', 'sort_by_sequence' => '', 'space_used_on_data_folder' => 'Space used on data folder', @@ -1729,6 +1746,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', @@ -1750,6 +1769,7 @@ Meno: [username] 'takeOverIndReviewer' => 'Take over individual reviewer from last version.', 'takeOverIndReviewers' => '', 'tasks' => 'Úlohy', +'task_core_expireddocs_days' => '', 'task_description' => 'Description', 'task_disabled' => 'Disabled', 'task_frequency' => 'Frequency', @@ -1785,6 +1805,7 @@ Meno: [username] 'to' => 'Do', 'toggle_manager' => 'Prepnúť stav manager', 'toggle_qrcode' => 'Ukázať/skryť QR kód', +'total' => '', 'to_before_from' => 'End date may not be before start date', 'transfer_content' => '', 'transfer_document' => 'Zmeniť vlastníka', @@ -1888,6 +1909,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 210ff3508..b3ef65ab4 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/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 (1161), MagnusI (649), tmichelfelder (106) +// Translators: Admin (1162), MagnusI (649), tmichelfelder (106) $text = array( '2_factor_auth' => '2-faktors autentisering', @@ -308,6 +308,7 @@ URL: [url]', 'converter_new_cmd' => 'Kommando', 'converter_new_mimetype' => 'Ny MIME-typ', 'copied_to_checkout_as' => 'Filen har kopierats till utcheckningmappen som \'[filename]\' per [date]', +'create_download_link' => '', 'create_fulltext_index' => 'Skapa fulltext-sökindex', 'create_fulltext_index_warning' => 'Du håller på att skapa fulltext-sökindex. Detta kan ta mycket lång tid och sakta ner den allmänna systemprestandan. Om du verkligen vill skapa indexet, bekräfta åtgärden.', 'creation_date' => 'Skapat', @@ -432,7 +433,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'Ärv behörighet', 'download' => 'Ladda ner', 'download_extension' => '', +'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_state' => '', 'download_links' => 'Nedladdningslänkar', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Reparera alla kataloger och dokument.', 'do_object_setchecksum' => 'Lägg till checksumma', 'do_object_setfilesize' => 'Ange filstorlek', @@ -789,6 +804,7 @@ URL: [url]', 'my_documents' => 'Mina dokument', 'my_transmittals' => 'Mina överföringar', 'name' => 'Namn', +'nb_NO' => 'Norska (Bokmål)', 'needs_correction' => '', 'needs_workflow_action' => 'Detta dokument behöver din uppmärksamhet. Kontrollera inställningarna för arbetsflödet.', 'network_drive' => 'Nätverkslagring', @@ -1593,6 +1609,7 @@ Kommentar: [comment]', 'site_brand' => '', 'sk_SK' => 'Slovakiska', 'sort_by_date' => '', +'sort_by_expiration_date' => '', 'sort_by_name' => '', 'sort_by_sequence' => '', 'space_used_on_data_folder' => 'Utrymme använt i datakatalogen', @@ -1702,6 +1719,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', @@ -1723,6 +1742,7 @@ Kommentar: [comment]', 'takeOverIndReviewer' => 'Ta över individuell granskare från senaste version', 'takeOverIndReviewers' => '', 'tasks' => 'Uppgifter', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1758,6 +1778,7 @@ Kommentar: [comment]', 'to' => 'till', 'toggle_manager' => 'Byt manager', 'toggle_qrcode' => 'Visa/göm QR-kod', +'total' => '', 'to_before_from' => 'Slutdatum får inte vara innan startdatum', 'transfer_content' => '', 'transfer_document' => 'Överför dokument', @@ -1861,6 +1882,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 c63eecdd5..c4ab29d9f 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -19,10 +19,10 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1091), aydin (83) +// Translators: Admin (1107), aydin (83) $text = array( -'2_factor_auth' => '', +'2_factor_auth' => 'İki faktörlü yetkilendirme', '2_factor_auth_info' => '', '2_fact_auth_secret' => '', 'accept' => 'Kabul', @@ -230,7 +230,7 @@ URL: [url]', 'change_assignments' => 'Atamaları Değiştir', 'change_password' => 'Parola degiştir', 'change_password_message' => 'Parolanız değişti.', -'change_recipients' => '', +'change_recipients' => 'Alıcıları değiştir', 'change_revisors' => '', 'change_status' => 'Değişme Durumu', 'charts' => 'Grafikler', @@ -301,6 +301,7 @@ URL: [url]', 'converter_new_cmd' => 'Komut', 'converter_new_mimetype' => '', 'copied_to_checkout_as' => '', +'create_download_link' => '', 'create_fulltext_index' => 'Tam metin indeksi oluştur', 'create_fulltext_index_warning' => 'Tam metin indeksi yeniden oluşturmak üzeresiniz. Bu işlem bir hayli uzun sürebilir ve sistem performansını olumsuz etkileyebilir. Buna rağmen indeksi oluşturmak istiyorsanız lütfen bu işlemi onaylayın.', 'creation_date' => 'Oluşturma tarihi', @@ -420,7 +421,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'Erişim haklarını devir al', 'download' => 'İndir', 'download_extension' => '', +'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_state' => '', 'download_links' => '', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Tüm klasörleri ve dokümanları onar.', 'do_object_setchecksum' => 'Sağlama (checksum) ayarla', 'do_object_setfilesize' => 'Dosya boyutu ayarla', @@ -775,8 +790,9 @@ URL: [url]', 'move_folder' => 'Klasörü Taşı', 'my_account' => 'Hesabım', 'my_documents' => 'Dokümanlarım', -'my_transmittals' => '', +'my_transmittals' => 'Çevirilerim', 'name' => 'İsim', +'nb_NO' => 'Norveç Havayolları', 'needs_correction' => '', 'needs_workflow_action' => 'Bu doküman dikkatinizi gerektiriyor. Lütfen iş akış sekmesini kontrol ediniz.', 'network_drive' => '', @@ -1095,7 +1111,7 @@ URL: [url]', 'role_admin' => 'Yönetici', 'role_guest' => 'Misafir', 'role_info' => '', -'role_management' => '', +'role_management' => 'Rol yönetimi', 'role_name' => '', 'role_type' => '', 'role_user' => 'Kullanıcı', @@ -1118,7 +1134,7 @@ URL: [url]', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', 'scheduler_class_tasks' => '', -'scheduler_task_mgr' => '', +'scheduler_task_mgr' => 'Takvim', 'search' => 'Ara', 'search_fulltext' => 'Tam metinde ara', 'search_in' => 'Şurada ara', @@ -1140,7 +1156,7 @@ URL: [url]', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Kategori seçmek için tıklayın', -'select_group' => '', +'select_group' => 'Grup Seç', 'select_groups' => 'Grup seçmek için tıklayın', 'select_grp_approvers' => 'Grup onaylayıcı seçmek için tıklayın', 'select_grp_ind_approvers' => '', @@ -1158,7 +1174,7 @@ URL: [url]', 'select_ind_reviewers' => 'Biresysel kontrol edeni seçmek için tıklayın', 'select_ind_revisors' => '', 'select_one' => 'Birini seçiniz', -'select_user' => '', +'select_user' => 'Kullanıcı Seç', 'select_users' => 'Kullanıcı seçmek için tıklayın', 'select_value' => 'Değeri seç', 'select_workflow' => 'İş akışı seç', @@ -1210,7 +1226,7 @@ URL: [url]', 'settings_contentDir_desc' => 'Yüklenecek dosyaların depolanacağı yer (web üzerinden erişilemeyen bir yer tercih etmeniz önerilir.)', 'settings_contentOffsetDir' => 'İçerik Ofset Klasörü', 'settings_contentOffsetDir_desc' => 'Dosya sistemindeki kısıtlamaları aşabilmek için mevcut içerik dizini içerisinde yeni bir dizin yapısı geliştirildi. Bu, başlangıç için temel bir dizin gerektirir. Genellikle bunu varsayılan değer olan 1048576 olarak bırakmanız önerilir fakat İçerik Dizininde mevcut olmayan herhangi bir sayı veya string olabilir.', -'settings_convertToPdf' => '', +'settings_convertToPdf' => 'PDF ön görünümden çevir', 'settings_convertToPdf_desc' => '', 'settings_cookieLifetime' => 'Çerez geçerlilik süresi', 'settings_cookieLifetime_desc' => 'Çerezlerin saniye olarak geçerlilik süresi. 0 olarak ayarlanırsa tarayıcı kapatıldığında çerezler silinir.', @@ -1239,9 +1255,9 @@ URL: [url]', 'settings_defaultDocPosition_desc' => '', 'settings_defaultDocPosition_val_end' => '', 'settings_defaultDocPosition_val_start' => '', -'settings_defaultSearchMethod' => '', +'settings_defaultSearchMethod' => 'Ön tanımlı arama metodu', 'settings_defaultSearchMethod_desc' => '', -'settings_defaultSearchMethod_valdatabase' => '', +'settings_defaultSearchMethod_valdatabase' => 'veritabanı', 'settings_defaultSearchMethod_valfulltext' => '', 'settings_delete_install_folder' => 'SeedDMS kullanabilmeniz için konfigürasyon (conf) dizini içindeki ENABLE_INSTALL_TOOL dosyasını silmelisiniz', 'settings_disableSelfEdit' => 'Kendi kendine Düzenlemeyi Kapat', @@ -1402,16 +1418,16 @@ URL: [url]', 'settings_maxDirID_desc' => 'Klasör altında oluşturulabilecek maksimum alt klasör sayısı Varsayılan: 0.', 'settings_maxExecutionTime' => 'Maksimum çalışma zamanı (s)', 'settings_maxExecutionTime_desc' => 'Durdurulmadan önce bir betikin en fazla kaç saniye çalışabileceğini ayarlar', -'settings_maxItemsPerPage' => '', +'settings_maxItemsPerPage' => 'Bir sayfadaki en fazla girdi sayısı', 'settings_maxItemsPerPage_desc' => '', 'settings_maxRecursiveCount' => 'Maks. özyinelemeli doküman/klasör sayısı', 'settings_maxRecursiveCount_desc' => 'Nesneleri özyinelemeli olarak erişim hakkı kontrolü için sayarken bu değer en fazla sayılacak doküman ve klasör sayısını belirler. Bu sayı aşıldığında klasörün içindeki dosya ve diğer klasörlerin sayısı tahmin yolu ile belirlenecektir.', -'settings_maxSizeForFullText' => '', +'settings_maxSizeForFullText' => 'Hızlı indeksleme için maksimum dosya boyu', 'settings_maxSizeForFullText_desc' => '', 'settings_maxUploadSize' => '', 'settings_maxUploadSize_desc' => '', 'settings_more_settings' => 'Daha fazla ayar yapın. Varsayılan kullanıcı adı/parola: admin/admin', -'settings_noDocumentFormFields' => '', +'settings_noDocumentFormFields' => 'Bu alanı gösterme', 'settings_noDocumentFormFields_desc' => '', 'settings_notfound' => 'Bulunamadı', 'settings_Notification' => 'Bildirim ayarları', @@ -1472,7 +1488,7 @@ URL: [url]', 'settings_rootFolderID_desc' => 'Kök dizinin ID numarası(genelde değiştirilmesine gerek yok)', 'settings_SaveError' => 'Konfigürasyon dosyası kaydedilemedi', 'settings_Server' => 'Sunucu ayarları', -'settings_showFullPreview' => '', +'settings_showFullPreview' => 'Tam dökümanı göster', 'settings_showFullPreview_desc' => '', 'settings_showMissingTranslations' => 'Eksik çevirileri göster', 'settings_showMissingTranslations_desc' => 'Eksik çevirilerin tamamı sayfanın en altında listelenir. Giriş yapan kullanıclıar yapacakları çevirileri csv formatında gönderebilirler. Gerçekte kullanılan sistemlerde bunu açmamanız önerilir!', @@ -1559,6 +1575,7 @@ URL: [url]', 'site_brand' => '', 'sk_SK' => 'Slovakça', 'sort_by_date' => 'Tarihe göre sırala', +'sort_by_expiration_date' => '', 'sort_by_name' => 'Ada göre sırala', 'sort_by_sequence' => 'Eklenme sırasına göre sırala', 'space_used_on_data_folder' => 'Data klasörü kullanılan alan', @@ -1668,6 +1685,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ç', @@ -1689,6 +1708,7 @@ URL: [url]', 'takeOverIndReviewer' => 'Bir önceki versiyonu kontrol edeni al.', 'takeOverIndReviewers' => '', 'tasks' => '', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1724,6 +1744,7 @@ URL: [url]', 'to' => 'Kime', 'toggle_manager' => 'Değişim yönetimi', 'toggle_qrcode' => '', +'total' => '', 'to_before_from' => 'Bitiş tarihi başlama tarihinden önce olamaz', 'transfer_content' => '', 'transfer_document' => 'Dokumanı gönder', @@ -1814,7 +1835,7 @@ URL: [url]', 'versioning_file_creation_warning' => 'Bu işlem ile tüm klasörlerdeki versiyon bilgisinin bulunduğu bir dosya oluşturursunuz. Her dosya oluşturulduğunda doküman klasörüne kaydedilir.', 'versioning_info' => 'Version bilgisi', 'versiontolow' => 'Versiyon düşük', -'version_comment' => '', +'version_comment' => 'Versiyon açıklaması', 'version_deleted_email' => 'Versiyon silindi', 'version_deleted_email_body' => 'Versiyon silindi Doküman: [name] @@ -1827,6 +1848,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 504dbde20..f8bf26bd9 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -307,6 +307,7 @@ URL: [url]', 'converter_new_cmd' => 'Команда', 'converter_new_mimetype' => 'Новий mime тип', 'copied_to_checkout_as' => 'Файл скопійовано в середовище скачування як', +'create_download_link' => '', 'create_fulltext_index' => 'Створити повнотекстовий індекс', 'create_fulltext_index_warning' => 'Ви хочете перестворити повнотекстовий індекс. Це займе деякий час і знизить продуктивність. Продовжити?', 'creation_date' => 'Створено', @@ -426,7 +427,21 @@ URL: [url]', 'does_not_inherit_access_msg' => 'Наслідувати рівень доступу', 'download' => 'Завантажити', 'download_extension' => '', +'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_state' => '', 'download_links' => '', +'do_no_transfer_to_user' => '', 'do_object_repair' => 'Виправити всі каталоги і документи', 'do_object_setchecksum' => 'Встановити контрольну суму', 'do_object_setfilesize' => 'Встановити розмір файлу', @@ -783,6 +798,7 @@ URL: [url]', 'my_documents' => 'Мої документи', 'my_transmittals' => 'Мої перенесення', 'name' => 'Назва', +'nb_NO' => '', 'needs_correction' => '', 'needs_workflow_action' => 'Цей документ потребує вашої уваги. Див. вкладку «Процес».', 'network_drive' => '', @@ -1580,6 +1596,7 @@ URL: [url]', 'site_brand' => '', 'sk_SK' => 'Slovak', 'sort_by_date' => '', +'sort_by_expiration_date' => '', 'sort_by_name' => '', 'sort_by_sequence' => '', 'space_used_on_data_folder' => 'Розмір каталогу даних', @@ -1689,6 +1706,8 @@ URL: [url]', 'submit_review' => 'Рецензувати', 'submit_revision' => '', 'submit_userinfo' => 'Відправити інформацію', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => 'Перемикнутися на \'[username]\'', 'substitute_user' => 'Перемикнутися', @@ -1710,6 +1729,7 @@ URL: [url]', 'takeOverIndReviewer' => 'Використати рецензентів з попередньої версії', 'takeOverIndReviewers' => '', 'tasks' => 'Завдання', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1745,6 +1765,7 @@ URL: [url]', 'to' => 'До', 'toggle_manager' => 'Змінити ознаку менеджера', 'toggle_qrcode' => '', +'total' => '', 'to_before_from' => 'Кінцева дата не може бути меншою початкової дати', 'transfer_content' => '', 'transfer_document' => '', @@ -1848,6 +1869,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 0a25764ae..10cf8e126 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/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 (766), archonwang (469), fengjohn (5), yang86 (1) +// Translators: Admin (770), archonwang (469), fengjohn (5), yang86 (1) $text = array( '2_factor_auth' => '双重认证', @@ -299,6 +299,7 @@ URL: [url]', 'converter_new_cmd' => '', 'converter_new_mimetype' => '新建 MIME 类型', 'copied_to_checkout_as' => '', +'create_download_link' => '', 'create_fulltext_index' => '创建全文索引', 'create_fulltext_index_warning' => '你将重新创建全 文索引。这将花费一定的时间但是会提升系统的整体表现。如果你想要重新创建索引,请确 @@ -420,7 +421,21 @@ URL: [url]', 'does_not_inherit_access_msg' => '继承访问权限', 'download' => '下载', 'download_extension' => '以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_state' => '', 'download_links' => '下载链接', +'do_no_transfer_to_user' => '', 'do_object_repair' => '', 'do_object_setchecksum' => '', 'do_object_setfilesize' => '设置文件大小', @@ -502,7 +517,7 @@ URL: [url]', 'event_details' => '错误详情', 'exclude_items' => '排除项目', 'expired' => '过期', -'expired_at_date' => '', +'expired_at_date' => '过期时间', 'expired_documents' => '过期文档', 'expires' => '有效限期', 'expire_by_date' => '指定过期时间', @@ -771,8 +786,9 @@ URL: [url]', 'move_folder' => '移动文件夹', 'my_account' => '我的账户', 'my_documents' => '我的文档', -'my_transmittals' => '', +'my_transmittals' => '我的送达函', 'name' => '名称', +'nb_NO' => '挪威语(书面挪威语)', 'needs_correction' => '', 'needs_workflow_action' => '', 'network_drive' => '网络驱动器', @@ -1109,7 +1125,7 @@ URL: [url]', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', 'scheduler_class_tasks' => '', -'scheduler_task_mgr' => '', +'scheduler_task_mgr' => '排程表', 'search' => '搜索', 'search_fulltext' => '全文检索', 'search_in' => '搜索于', @@ -1555,6 +1571,7 @@ URL: [url]', 'site_brand' => '', 'sk_SK' => '斯洛伐克语', 'sort_by_date' => '日期排序', +'sort_by_expiration_date' => '', 'sort_by_name' => '文件名排序', 'sort_by_sequence' => '顺序排列', 'space_used_on_data_folder' => '数据文件夹使用空间', @@ -1664,6 +1681,8 @@ URL: [url]', 'submit_review' => '提交校对', 'submit_revision' => '添加修订', 'submit_userinfo' => '提交信息', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '订阅时间线更新', 'substitute_to_user' => '切换到 \'[username]\' 账户', 'substitute_user' => '代理人', @@ -1685,6 +1704,7 @@ URL: [url]', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', 'tasks' => '任务', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1720,6 +1740,7 @@ URL: [url]', 'to' => '到', 'toggle_manager' => '角色切换', 'toggle_qrcode' => '显示/隐藏 QR 码', +'total' => '', 'to_before_from' => '结束日期不能早于开始日期', 'transfer_content' => '', 'transfer_document' => '共享文档', @@ -1814,6 +1835,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 fb29f0bed..5b8b4ee9a 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/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 (2423) +// Translators: Admin (2424) $text = array( '2_factor_auth' => '', @@ -282,6 +282,7 @@ URL: [url]', 'converter_new_cmd' => '', 'converter_new_mimetype' => '', 'copied_to_checkout_as' => '', +'create_download_link' => '', 'create_fulltext_index' => '創建全文索引', 'create_fulltext_index_warning' => '', 'creation_date' => '創建日期', @@ -371,7 +372,21 @@ URL: [url]', 'does_not_inherit_access_msg' => '繼承存取權限', 'download' => '下載', 'download_extension' => '', +'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_state' => '', 'download_links' => '', +'do_no_transfer_to_user' => '', 'do_object_repair' => '', 'do_object_setchecksum' => '', 'do_object_setfilesize' => '設定檔案大小', @@ -704,6 +719,7 @@ URL: [url]', 'my_documents' => '我的文件', 'my_transmittals' => '', 'name' => '名稱', +'nb_NO' => '', 'needs_correction' => '', 'needs_workflow_action' => '', 'network_drive' => '', @@ -810,7 +826,7 @@ URL: [url]', 'personal_default_keywords' => '用戶關鍵字', 'pl_PL' => '波蘭語', 'possible_substitutes' => '', -'preset_expires' => '', +'preset_expires' => '預設到期日', 'preview' => '預覽', 'preview_converters' => '', 'preview_images' => '', @@ -1410,6 +1426,7 @@ URL: [url]', 'site_brand' => '', 'sk_SK' => '斯洛伐克語', 'sort_by_date' => '', +'sort_by_expiration_date' => '', 'sort_by_name' => '', 'sort_by_sequence' => '', 'space_used_on_data_folder' => '資料檔案夾使用空間', @@ -1519,6 +1536,8 @@ URL: [url]', 'submit_review' => '提交校對', 'submit_revision' => '', 'submit_userinfo' => '', +'submit_webauthn_login' => '', +'submit_webauthn_register' => '', 'subsribe_timelinefeed' => '', 'substitute_to_user' => '', 'substitute_user' => '代理人', @@ -1540,6 +1559,7 @@ URL: [url]', 'takeOverIndReviewer' => '從上個版本接管個別審稿人', 'takeOverIndReviewers' => '', 'tasks' => '', +'task_core_expireddocs_days' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1575,6 +1595,7 @@ URL: [url]', 'to' => '到', 'toggle_manager' => '角色切換', 'toggle_qrcode' => '', +'total' => '總共', 'to_before_from' => '', 'transfer_content' => '', 'transfer_document' => '傳送檔案', @@ -1664,6 +1685,10 @@ URL: [url]', 'view' => '檢視', 'view_online' => '線上流覽', 'warning' => '警告', +'webauthn_auth' => '', +'webauthn_crossplatform_info' => '', +'webauthn_info' => '', +'webauth_crossplatform' => '', 'wednesday' => 'Wednesday', 'wednesday_abbr' => '', 'weeks' => '', diff --git a/op/op.AddDocument.php b/op/op.AddDocument.php index 4c55beb66..704052eea 100644 --- a/op/op.AddDocument.php +++ b/op/op.AddDocument.php @@ -75,7 +75,7 @@ if($user->isAdmin()) { $owner = $user; } $comment = trim($_POST["comment"]); -$version_comment = trim($_POST["version_comment"]); +$version_comment = !empty($_POST["version_comment"]) ? trim($_POST["version_comment"]) : ''; if($version_comment == "" && isset($_POST["use_comment"])) $version_comment = $comment; @@ -331,10 +331,14 @@ if(!empty($_POST['notification_groups'])) { } /* Check files for Errors first */ +$maxuploadsize = SeedDMS_Core_File::parse_filesize($settings->_maxUploadSize); for ($file_num=0;$file_num $folder->getName())),getMLText("uploading_zerosize")); } + if ($maxuploadsize && $_FILES["userfile"]["size"][$file_num] > $maxuploadsize) { + UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("uploading_maxsize")); + } if (/* is_uploaded_file($_FILES["userfile"]["tmp_name"][$file_num]) && */$_FILES['userfile']['error'][$file_num]!=0){ UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("uploading_failed")); } @@ -349,7 +353,9 @@ for ($file_num=0;$file_num_overrideMimeType) { $finfo = finfo_open(FILEINFO_MIME_TYPE); - $userfiletype = finfo_file($finfo, $userfiletmp); + $tmpfiletype = finfo_file($finfo, $userfiletmp); + if($tmpfiletype != 'application/octet-stream') + $userfiletype = $tmpfiletype; } if ((count($_FILES["userfile"]["tmp_name"])==1)&&($_POST["name"]!="")) diff --git a/op/op.AddFile.php b/op/op.AddFile.php index 8b3a8022a..3eb2d566f 100644 --- a/op/op.AddFile.php +++ b/op/op.AddFile.php @@ -62,10 +62,14 @@ if(isset($_POST[$prefix.'-fine-uploader-uuids']) && $_POST[$prefix.'-fine-upload } } +$maxuploadsize = SeedDMS_Core_File::parse_filesize($settings->_maxUploadSize); for ($file_num=0;$file_num $document->getName())),getMLText("uploading_zerosize")); } + if ($maxuploadsize && $_FILES["userfile"]["size"][$file_num] > $maxuploadsize) { + UI::exitError(getMLText("folder_title", array("documentname" => $document->getName())),getMLText("uploading_maxsize")); + } if (is_uploaded_file($_FILES["userfile"]["tmp_name"][$file_num]) && $_FILES['userfile']['error'][$file_num] != 0){ UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("uploading_failed")); } diff --git a/op/op.Ajax.php b/op/op.Ajax.php index 64239460c..5b798ffa5 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -546,7 +546,7 @@ switch($command) { add_log_line(); } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>getMLText('error_remove_document'), 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('error_remove_document')."
".getMLText($controller->getErrorMsg()), 'data'=>'')); } } else { header('Content-Type: application/json'); @@ -660,6 +660,13 @@ switch($command) { exit; } + $maxuploadsize = SeedDMS_Core_File::parse_filesize($settings->_maxUploadSize); + if ($maxuploadsize && $_FILES["userfile"]["size"] > $maxuploadsize) { + header('Content-Type: application/json'); + echo json_encode(array('success'=>false, 'message'=>getMLText("uploading_maxsize"))); + exit; + } + $userfiletmp = $_FILES["userfile"]["tmp_name"]; $userfiletype = $_FILES["userfile"]["type"]; $userfilename = $_FILES["userfile"]["name"]; diff --git a/op/op.DropFolderPreview.php b/op/op.DropFolderPreview.php index 8a0da1513..84f36213b 100644 --- a/op/op.DropFolderPreview.php +++ b/op/op.DropFolderPreview.php @@ -48,6 +48,9 @@ $dir = $dropfolderdir.'/'.$user->getLogin(); if(!file_exists($dir.'/'.$filename)) exit; +$finfo = finfo_open(FILEINFO_MIME_TYPE); +$mimetype = finfo_file($finfo, $dir.'/'.$filename); + if(!empty($_GET["width"])) $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $_GET["width"]); else @@ -55,7 +58,7 @@ else $previewer->setConverters($settings->_converters['preview']); $previewer->setXsendfile($settings->_enableXsendfile); if(!$previewer->hasRawPreview($dir.'/'.$filename, 'dropfolder/')) - $previewer->createRawPreview($dir.'/'.$filename, 'dropfolder/'); + $previewer->createRawPreview($dir.'/'.$filename, 'dropfolder/', $mimetype); header('Content-Type: image/png'); $previewer->getRawPreview($dir.'/'.$filename, 'dropfolder/'); 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]; diff --git a/op/op.PdfPreview.php b/op/op.PdfPreview.php index 62bc00dcb..9f0ad2849 100644 --- a/op/op.PdfPreview.php +++ b/op/op.PdfPreview.php @@ -27,6 +27,7 @@ include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); include("../inc/inc.DBInit.php"); include("../inc/inc.ClassUI.php"); +include("../inc/inc.ClassController.php"); include("../inc/inc.Authentication.php"); /** @@ -34,6 +35,9 @@ include("../inc/inc.Authentication.php"); */ require_once("SeedDMS/Preview.php"); +$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); +$controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); + $documentid = $_GET["documentid"]; if (!isset($documentid) || !is_numeric($documentid) || intval($documentid)<1) { exit; @@ -52,10 +56,13 @@ if(isset($_GET['version'])) { $version = $_GET["version"]; if (!is_numeric($version)) exit; - if(intval($version)<1) - $object = $document->getLatestContent(); - else - $object = $document->getContentByVersion($version); + $controller->setParam('document', $document); + $controller->setParam('version', $version); + $controller->setParam('type', 'version'); + if(!$controller->run()) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version")); + } + exit; } elseif(isset($_GET['file'])) { $file = $_GET['file']; if (!is_numeric($file) || intval($file)<1) diff --git a/op/op.UpdateDocument.php b/op/op.UpdateDocument.php index c8fa1759b..2e8a377a7 100644 --- a/op/op.UpdateDocument.php +++ b/op/op.UpdateDocument.php @@ -91,13 +91,20 @@ if (isset($_FILES['userfile']) && $_FILES['userfile']['error'] == 0) { if($_FILES["userfile"]["size"] == 0) UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("uploading_zerosize")); + $maxuploadsize = SeedDMS_Core_File::parse_filesize($settings->_maxUploadSize); + if ($maxuploadsize && $_FILES["userfile"]["size"] > $maxuploadsize) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("uploading_maxsize")); + } + $userfiletmp = $_FILES["userfile"]["tmp_name"]; $userfiletype = $_FILES["userfile"]["type"]; $userfilename = $_FILES["userfile"]["name"]; if($settings->_overrideMimeType) { $finfo = finfo_open(FILEINFO_MIME_TYPE); - $userfiletype = finfo_file($finfo, $userfiletmp); + $tmpfiletype = finfo_file($finfo, $userfiletmp); + if($tmpfiletype != 'application/octet-stream') + $userfiletype = $tmpfiletype; } } elseif($settings->_dropFolderDir) { if($_POST['dropfolderfileform1']) { diff --git a/out/out.AddDocument.php b/out/out.AddDocument.php index 0cc16f138..cfefbf0c1 100644 --- a/out/out.AddDocument.php +++ b/out/out.AddDocument.php @@ -68,10 +68,7 @@ if($view) { $view->setParam('presetexpiration', $settings->_presetExpirationDate); $view->setParam('sortusersinlist', $settings->_sortUsersInList); $view->setParam('defaultposition', $settings->_defaultDocPosition); - $view->setParam('maxuploadsize', $settings->_maxUploadSize); $view->setParam('orderby', $settings->_sortFoldersDefault); $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 6132b73e8..6c625d9eb 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); @@ -45,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 445a69d60..e4a4cfcd6 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()); @@ -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 e8f1ad8e0..9c0ddda64 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); @@ -84,5 +84,3 @@ if($view) { $view($_GET); exit; } - -?> 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); } 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..89e296e16 100644 --- a/out/out.ExpiredDocuments.php +++ b/out/out.ExpiredDocuments.php @@ -35,13 +35,19 @@ if ($user->isGuest()) { UI::exitError(getMLText("expired_documents"),getMLText("access_denied")); } -$orderby='n'; +$orderby='e'; if (isset($_GET["orderby"]) && strlen($_GET["orderby"])==1 ) { $orderby=$_GET["orderby"]; } +$orderdir='d'; +if (isset($_GET["orderdir"]) && strlen($_GET["orderdir"])==1 ) { + $orderdir=$_GET["orderdir"]; +} if($view) { + $view->setParam('showtree', showtree()); $view->setParam('orderby', $orderby); + $view->setParam('orderdir', $orderdir); $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('previewWidthList', $settings->_previewWidthList); $view->setParam('timeout', $settings->_cmdTimeout); @@ -49,5 +55,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 623fe8c2c..d4521bc81 100644 --- a/out/out.Indexer.php +++ b/out/out.Indexer.php @@ -40,30 +40,31 @@ if(!$settings->_enableFullSearch) { UI::exitError(getMLText("admin_tools"),getMLText("fulltextsearch_disabled")); } +$index = null; if(!isset($_GET['action']) || $_GET['action'] == 'show') { - if(isset($_GET['create']) && $_GET['create'] == 1) { - if(isset($_GET['confirm']) && $_GET['confirm'] == 1) { - $index = $indexconf['Indexer']::create($settings->_luceneDir); + if($indexconf) { + if(isset($_GET['create']) && $_GET['create'] == 1) { + if(isset($_GET['confirm']) && $_GET['confirm'] == 1) { + $index = $indexconf['Indexer']::create($settings->_luceneDir); + if(!$index) { + UI::exitError(getMLText("admin_tools"),getMLText("no_fulltextindex")); + } + $indexconf['Indexer']::init($settings->_stopWordsFile); + } else { + header('Location: out.CreateIndex.php'); + exit; + } + } else { + $index = $indexconf['Indexer']::open($settings->_luceneDir); if(!$index) { - UI::exitError(getMLText("admin_tools"),getMLText("no_fulltextindex")); + $index = $indexconf['Indexer']::create($settings->_luceneDir); + if(!$index) { + UI::exitError(getMLText("admin_tools"),getMLText("no_fulltextindex")); + } } $indexconf['Indexer']::init($settings->_stopWordsFile); - } else { - header('Location: out.CreateIndex.php'); - exit; } - } else { - $index = $indexconf['Indexer']::open($settings->_luceneDir); - if(!$index) { - $index = $indexconf['Indexer']::create($settings->_luceneDir); - if(!$index) { - UI::exitError(getMLText("admin_tools"),getMLText("no_fulltextindex")); - } - } - $indexconf['Indexer']::init($settings->_stopWordsFile); } -} else { - $index = null; } if (!isset($_GET["folderid"]) || !is_numeric($_GET["folderid"]) || intval($_GET["folderid"])<1) { @@ -85,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 bd204b655..4ffc38452 100644 --- a/out/out.ManageNotify.php +++ b/out/out.ManageNotify.php @@ -38,9 +38,8 @@ 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/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 9d7351aeb..883924713 100644 --- a/out/out.RemoveWorkflowFromDocument.php +++ b/out/out.RemoveWorkflowFromDocument.php @@ -33,7 +33,6 @@ require_once("inc/inc.Authentication.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user)); -$accessop = new SeedDMS_AccessOperation($dms, $document, $user, $settings); if (!$user->isAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } @@ -63,6 +62,7 @@ if (!is_object($workflow)) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("document_has_no_workflow")); } +$accessop = new SeedDMS_AccessOperation($dms, $document, $user, $settings); $folder = $document->getFolder(); if($view) { @@ -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 6132b73e8..6c625d9eb 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); @@ -45,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 0bbbca5eb..2b07ab5b1 100644 --- a/out/out.Timeline.php +++ b/out/out.Timeline.php @@ -57,7 +57,7 @@ if($view) { $view->setParam('dms', $dms); $view->setParam('user', $user); $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('showtree', showtree()); $view->setParam('fromdate', isset($_GET['fromdate']) ? $_GET['fromdate'] : ''); $view->setParam('todate', isset($_GET['todate']) ? $_GET['todate'] : ''); @@ -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; } - -?> 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); } } diff --git a/styles/bootstrap/application.css b/styles/bootstrap/application.css index d24cab1bd..c74824ddb 100644 --- a/styles/bootstrap/application.css +++ b/styles/bootstrap/application.css @@ -13,6 +13,12 @@ img.mimeicon { background-color: white; } +span.list-details { + font-size: 85%; + font-style: italic; + color: #666; +} + .list-action a { text-decoration: none; color: #333; @@ -54,6 +60,10 @@ ul.jqtree-tree li.jqtree-selected > .jqtree-element:hover { font-weight: bold; } +legend > span { + float: right; +} + td.today { background-color: rgb(255, 200, 0); } @@ -152,6 +162,21 @@ div.splash { display: none; } +div.clipboard-container { + position: fixed; + left: 10px; + top: 40px; + width: 29.8%; + background: white; + border: 1px solid #d4d4d4; + border-radius: 5px; + padding: 10px; + height: 500px; + margin: 10px; + overflow-y: auto; + overflow-x: hidden; +} + div.statusbar-container { display: none; position: fixed; @@ -209,10 +234,21 @@ 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: 230px; + 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 { diff --git a/styles/bootstrap/application.js b/styles/bootstrap/application.js index da9d4e291..a50736333 100644 --- a/styles/bootstrap/application.js +++ b/styles/bootstrap/application.js @@ -166,6 +166,12 @@ $(document).ready( function() { } }); /* }}} */ + $('body').on('click', '#clipboard-float', function(ev) { /* {{{ */ + ev.preventDefault(); + ev.stopPropagation(); + $('#clipboard-container').toggleClass('clipboard-container'); + }); /* }}} */ + $('body').on('click', 'a.addtoclipboard', function(ev) { /* {{{ */ ev.preventDefault(); ev.stopPropagation(); @@ -178,7 +184,7 @@ $(document).ready( function() { function(data) { if(data.success) { $("#main-clipboard").html('Loading').load('../out/out.Clipboard.php?action=mainclipboard') - $("#menu-clipboard").html('Loading').load('../out/out.Clipboard.php?action=menuclipboard') + $("#menu-clipboard div").html('Loading').load('../out/out.Clipboard.php?action=menuclipboard') noty({ text: attr_msg, type: 'success', @@ -213,7 +219,7 @@ $(document).ready( function() { function(data) { if(data.success) { $("#main-clipboard").html('Loading').load('../out/out.Clipboard.php?action=mainclipboard') - $("#menu-clipboard").html('Loading').load('../out/out.Clipboard.php?action=menuclipboard') + $("#menu-clipboard div").html('Loading').load('../out/out.Clipboard.php?action=menuclipboard') noty({ text: attr_msg, type: 'success', @@ -451,7 +457,7 @@ $(document).ready( function() { if(data.success) { if(element.data('param1') == 'command=clearclipboard') { $("#main-clipboard").html('Loading').load('../out/out.Clipboard.php?action=mainclipboard') - $("#menu-clipboard").html('Loading').load('../out/out.Clipboard.php?action=menuclipboard') + $("#menu-clipboard div").html('Loading').load('../out/out.Clipboard.php?action=menuclipboard') } noty({ text: data.message, @@ -492,7 +498,7 @@ function onAddClipboard(ev) { /* {{{ */ function(data) { if(data.success) { $("#main-clipboard").html('Loading').load('../out/out.Clipboard.php?action=mainclipboard') - $("#menu-clipboard").html('Loading').load('../out/out.Clipboard.php?action=menuclipboard') + $("#menu-clipboard div").html('Loading').load('../out/out.Clipboard.php?action=menuclipboard') noty({ text: data.message, type: 'success', @@ -758,18 +764,18 @@ $(document).ready(function() { /* {{{ */ attr_rel = $(e.currentTarget).data('droptarget'); target_type = attr_rel.split("_")[0]; target_id = attr_rel.split("_")[1]; - target_name = $(e.currentTarget).data('name') + target_name = $(e.currentTarget).data('name')+''; // Force this to be a string if(target_type == 'folder') { var files = e.originalEvent.dataTransfer.files; if(files.length > 0) { - console.log('Drop '+files.length+' files on '+target_type+' '+target_id); +// console.log('Drop '+files.length+' files on '+target_type+' '+target_id); SeedDMSUpload.handleFileUpload(files,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/); } else { var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text")); source_type = source_info.type; source_id = source_info.id; formtoken = source_info.formtoken; - console.log('Drop '+source_type+' '+source_id+' on '+target_type+' '+target_id); +// console.log('Drop '+source_type+' '+source_id+' on '+target_type+' '+target_id); if(source_type == 'document') { var bootbox_message = trans.confirm_move_document; if(source_info.name) @@ -863,14 +869,14 @@ $(document).ready(function() { /* {{{ */ } else if(target_type == 'document') { var files = e.originalEvent.dataTransfer.files; if(files.length > 0) { - console.log('Drop '+files.length+' files on '+target_type+' '+target_id); +// console.log('Drop '+files.length+' files on '+target_type+' '+target_id); SeedDMSUpload.handleFileUpload(files,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/); } else { var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text")); source_type = source_info.type; source_id = source_info.id; formtoken = source_info.formtoken; - console.log('Drop '+source_type+' '+source_id+' on '+target_type+' '+target_id); +// console.log('Drop '+source_type+' '+source_id+' on '+target_type+' '+target_id); if(source_type == 'document') { if(source_id != target_id) { bootbox.dialog(trans.confirm_transfer_link_document, [{ @@ -956,7 +962,7 @@ $(document).ready(function() { /* {{{ */ id : attr_rel.split("_")[1], type : "folder", formtoken : $(e.target).attr('formtoken'), - name: $(e.target).data('name') + name: $(e.target).data('name')+'' }; /* Currently not used $.ajax({url: '../out/out.ViewFolder.php', @@ -982,7 +988,7 @@ $(document).ready(function() { /* {{{ */ id : attr_rel.split("_")[1], type : "document", formtoken : $(e.target).attr('formtoken'), - name: $(e.target).data('name') + name: $(e.target).data('name')+'' }; e.originalEvent.dataTransfer.setData("text", JSON.stringify(dragStartInfo)); }); @@ -1139,6 +1145,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 +1155,7 @@ $(document).ready(function() { /* {{{ */ }); $("body").on("click", "span.closepopupbox", function(e) { $(this).parent().hide(); + e.stopPropagation(); }); }); /* }}} */ diff --git a/styles/bootstrap/favicon.ico b/styles/bootstrap/favicon.ico index 890150f4c..7b4adcc9f 100644 Binary files a/styles/bootstrap/favicon.ico and b/styles/bootstrap/favicon.ico differ 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":"AAMA,QAEI,WAAY,EAAE,IAAI,IAAI,sBAA0B,KAAK,CACzC,IAAI,EAAE,IAAI,sBAA0B,KAAK,CACzC,EAAE,IAAI,EAAE,eAAmB,CAC3B,EAAE,KAAK,KAAK,gBAAoB,MAC5C,QAAS,IAAI,IACb,OAAQ,IAAI,MAAM,KAClB,cAAe,IACf,MAAO,QACP,iBAAkB,KAEe,oBAArC,kBAAmB,iBACf,QAAS,OAEb,kBAEI,iBAAkB,QAClB,MAAO,QACP,aAAc,QACd,YAAa,EAAE,IAAI,IAAI,gBAE3B,wBACI,iBAAkB,QAEtB,kBAEI,iBAAkB,QAClB,aAAc,QAElB,wBACI,iBAAkB,QAEtB,iBAEI,iBAAkB,QAClB,aAAc,QAElB,uBACI,iBAAkB,QAEJ,oBAAlB,iBACI,iBAAkB,QAClB,MAAO,QACP,aAAc,QACd,YAAa,EAAE,IAAI,IAAI,gBAEH,0BAAxB,uBACI,iBAAkB,QAKtB,kBACI,QAAS,OACT,MAAO,MACP,cAAe,KACf,QAAS,IAAI,KACb,WAAY,OACZ,MAAO,KACP,WAAY,QACZ,MAAO,KACP,cAAe,IACf,OAAQ,IAAI,MAAM,QAClB,WAAY,EAAE,IAAI,IAAI,sBAA0B,KAAK,CACzC,IAAI,EAAE,IAAI,sBAA0B,KAAK,CACzC,EAAE,IAAI,EAAE,eAAmB,CAC3B,EAAE,KAAK,KAAK,gBAAoB,MAEhD,wBACI,WAAY,QAEhB,wBACI,QAAS,IAAI,OAAO,KAMxB,aACI,SAAU,SACV,WAAY,MACZ,WAAY,MACZ,WAAY,OACZ,MAAO,QACP,cAAe,IACf,iBAAkB,QAClB,OAAQ,IAAI,OAAO,KACnB,QAAS,KAEb,oBACI,QAAS,wBAAwB,IACjC,SAAU,SACV,UAAW,KACX,KAAM,EACN,MAAO,KACP,WAAY,OACZ,IAAK,IACL,QAAS,IAEb,qBAAsB,2BAClB,SAAU,SACV,IAAK,EACL,KAAM,EACN,MAAO,KACP,OAAQ,KACR,WAAY,KACZ,QAAS,EACT,WAAY,QACZ,cAAe,IACf,OAAQ,IAAI,OAAO,KACnB,WAAY,OAEhB,0BACI,QAAS,MACT,SAAU,SACV,IAAK,IACL,MAAO,KACP,WAAY,KACZ,UAAW,KAEf,2BACI,SAAU,SACV,WAAY,KACZ,UAAW,KACX,YAAa,KACb,OAAQ,KACR,WAAY,KAEhB,4BACI,WAAY,QACZ,cAAe,IACf,OAAQ,IAAI,OAAO,KAEvB,gBACI,OAAQ,EACR,QAAS,EACT,WAAY,KACZ,WAAY,MACZ,WAAY,KACZ,WAAY,EAAI,IAAI,EAAI,mBACxB,MAAO,KAMX,mBACI,OAAQ,EACR,QAAS,IACT,YAAa,KACb,UAAW,KACX,MAAO,QACP,iBAAkB,QAClB,WAAY,IAAI,MAAM,KACtB,cAAe,IAAI,MAAM,KAE7B,+BACI,WAAY,KAEhB,8BACI,cAAe,KAInB,kBACqC,oBAArC,kBADqC,uBADrC,gBAEmB,iBADA,iBADkB,gBAApB,mBAGb,aAAc,KACd,QAAS,OAEb,gBACI,eAAgB,OAChB,QAAS,aACT,MAAO,MACP,cAAe,SACf,YAAa,OACb,WAAY,OACZ,OAAQ,KAEZ,mBACI,QAAS,aACT,WAAY,iBACZ,MAAO,KACP,OAAQ,KACR,eAAgB,YAEpB,oBACI,QAAS,MAEb,4BACI,QAAS,aACT,WAAY,oBACZ,MAAO,KACP,OAAQ,KACR,eAAgB,YAEH,kBACoB,oBAArC,kBAAmB,iBADiB,iBAApC,gBAEI,UAAW,KACX,YAAa,IACb,OAAQ,QACR,eAAgB,OAEpB,uBACI,UAAW,KACX,YAAa,IACb,QAAS,MAEb,uBACI,QAAS,KACT,WAAY,OACZ,YAAa,IAEjB,uBACI,QAAQ,KACR,MAAM,KACN,OAAO,KACP,eAAe,YAEnB,uCACI,QAAS,OAEb,2CACI,QAAS,OAEb,qCACI,iBAAkB,QAClB,MAAO,QACP,cAAe,IAAI,MAAM,QACzB,WAAY,IAAI,MAAM,QAE1B,kCACI,iBAAkB,QAClB,MAAO,QACP,cAAe,IAAI,MAAM,QACzB,WAAY,IAAI,MAAM,QAE1B,iBACI,QAAS,MACT,QAAS,MACT,WAAY,QACZ,MAAO,EACP,OAAQ,KACR,cAAe,IACf,cAAe,IAGnB,uBACI,OAAQ,KACR,cAAe,IAGnB,iCACI,YAAa,IACb,QAAS,OACT,MAAO,MACP,MAAO,MAGX,uBACI,SAAU,SACV,QAAS,EAET,QAAS,GAIb,4BACI,OAAQ,QACR,aAAc,IAGlB,mCACI,QAAS,aACT,OAAQ,QAGZ,kCACI,SAAU,OACV,OAAQ,KACR,QAAS,EAAE,IACX,aAAc,KACd,cAAe,KACf,OAAQ,IAAI,MAAM,KAClB,cAAe,IACf,UAAW,KAEX,QAAS,EAKb,uBACI,QAAS,KACT,WAAY,cACZ,MAAO,KACP,OAAQ,KACR,eAAgB,YAChB,aAAc,KAGlB,SACI,QAAS,KAMb,uBACI,eAAgB,OAChB,aAAc,KAKlB,oBACI,QAAS,KAGb,0BACI,QAAS,MAGb,oBACI,QAAS,KAGb,0BACI,QAAS,MAGb,uCACI,WAAY,OACZ,YAAa,KAGjB,8CACI,YAAa,IACb,aAAc,IAGlB,gDACI,eAAgB,KAGpB,8BACI,iBAAkB"} \ 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(\" + contentHeading(getMLText("preview")); ?> - + hasConverter($latestContent->getMimeType())) { $this->contentHeading(getMLText("preview_pdf")); ?> - + 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 ""; echo ""; - echo ""; + echo ""; $loguser = $wkflog->getUser(); echo ""; echo ""; @@ -831,9 +828,9 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { if($accessop->mayReview()) { if ($is_reviewer) { if ($r["status"]==0) { - print "
  • getVersion()."&reviewid=".$r['reviewID']."\" class=\"btn btn-primary btn-mini\">".getMLText("add_review")."
  • "; + print "
  • getDocument()->getId()."&version=".$latestContent->getVersion()."&reviewid=".$r['reviewID']."\" class=\"btn btn-primary btn-mini\">".getMLText("add_review")."
  • "; } elseif ($accessop->mayUpdateReview($updateUser) && (($r["status"]==1)||($r["status"]==-1))) { - print "
  • getVersion()."&reviewid=".$r['reviewID']."\" class=\"btn btn-primary btn-mini\">".getMLText("edit")."
  • "; + print "
  • getDocument()->getId()."&version=".$latestContent->getVersion()."&reviewid=".$r['reviewID']."\" class=\"btn btn-primary btn-mini\">".getMLText("edit")."
  • "; } } } @@ -919,9 +916,9 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { if($accessop->mayApprove()) { if ($is_approver) { if ($a['status'] == 0) { - print "
  • getVersion()."&approveid=".$a['approveID']."\">".getMLText("add_approval")."
  • "; + print "
  • getDocument()->getId()."&version=".$latestContent->getVersion()."&approveid=".$a['approveID']."\">".getMLText("add_approval")."
  • "; } elseif ($accessop->mayUpdateApproval($updateUser) && (($a["status"]==1)||($a["status"]==-1))) { - print "
  • getVersion()."&approveid=".$a['approveID']."\">".getMLText("edit")."
  • "; + print "
  • getDocument()->getId()."&version=".$latestContent->getVersion()."&approveid=".$a['approveID']."\">".getMLText("edit")."
  • "; } } } @@ -983,9 +980,9 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { $this->contentContainerStart(); if($user->isAdmin()) { if(SeedDMS_Core_DMS::checkIfEqual($workflow->getInitState(), $latestContent->getWorkflowState())) { - print "getVersion()."\" />"; + print "getDocument()->getId()."\" />getVersion()."\" />"; } else { - print "getVersion()."\" />"; + print "getDocument()->getId()."\" />getVersion()."\" />"; } } @@ -1000,14 +997,14 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { foreach($transitions as $transition) { $nextstate = $transition->getNextState(); $docstatus = $nextstate->getDocumentStatus(); - echo ""; + echo ""; } echo ""; echo ""; echo ""; foreach($transitions as $transition) { $action = $transition->getAction(); - echo ""; + echo ""; } echo ""; echo ""; @@ -1085,7 +1082,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { echo ""; @@ -1104,7 +1101,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 +1148,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 ""; @@ -1185,11 +1182,9 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { print "
    ".getMLText("file")."".getMLText("comment")."".getMLText("status")."".htmlspecialchars($latestContent->getOriginalFileName())."".getMLText("file")."".getMLText("comment")."".getMLText("status")."
    "; - /* - 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())."\">"; } @@ -607,7 +597,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) @@ -619,6 +609,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) { @@ -634,7 +631,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { } print "
    ".htmlspecialchars($latestContent->getComment())."".htmlspecialchars($latestContent->getComment()).""; print getOverallStatusText($status["status"]); @@ -647,35 +644,35 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { print ""; print "
    ".$wkflog->getDate()."".$wkflog->getTransition()->getAction()->getName()."".htmlspecialchars($wkflog->getTransition()->getAction()->getName())."".htmlspecialchars($loguser->getFullName())."".htmlspecialchars($wkflog->getComment())."
    ".$nextstate->getName()." ".htmlspecialchars($nextstate->getName())."
    ".getMLText('action').":".getMLText('action_'.strtolower($action->getName()), array(), $action->getName())."".getMLText('action_'.strtolower($action->getName()), array(), htmlspecialchars($action->getName()))."
    "; if($latestContent->triggerWorkflowTransitionIsAllowed($user, $transition)) { $action = $transition->getAction(); - print "
    getVersion()."\" />getID()."\" />getName()), array(), $action->getName())."\" />
    "; + print "
    getDocument()->getId()."\" />getVersion()."\" />getID()."\" />getName()), array(), htmlspecialchars($action->getName()))."\" />
    "; $allowedtransitions[] = $transition; } echo "
    "; 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--) { @@ -1202,17 +1197,17 @@ 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 "getId()."\" class=\"table-row-document\" rel=\"document_".$targetDoc->getId()."\" formtoken=\"".createFormKey('movedocument')."\" draggable=\"true\">"; + echo $this->documentListRowStart($targetDoc); $targetDoc->verifyLastestContentExpriry(); $txt = $this->callHook('documentListItem', $targetDoc, $previewer, false, 'reverselinks'); if(is_string($txt)) @@ -1401,11 +1403,11 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { if (($user->getID() == $responsibleUser->getID()) || ($document->getAccessMode($user) == M_ALL )) print "".createHiddenFieldWithKey('removedocumentlink')."getID()."\" />"; print ""; - print ""; + echo $this->documentListRowEnd($targetDoc); } print "\n
    ".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 "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())."\">"; } @@ -1221,7 +1216,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")."
    • "; @@ -1229,6 +1224,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) { @@ -1243,14 +1245,14 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { } } print "
    ".htmlspecialchars($version->getComment())."".htmlspecialchars($version->getComment())."".getOverallStatusText($vstat["status"]).""; print ""; print "
    \n"; } - else printMLText("no_linked_files"); + else $this->infoMsg(getMLText("no_linked_files")); if (!$user->isGuest()){ $this->contentContainerStart(); @@ -1451,7 +1453,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { $responsibleUser = $link->getUser(); $sourceDoc = $link->getDocument(); - echo "getId()."\" class=\"table-row-document\" rel=\"document_".$sourceDoc->getId()."\" formtoken=\"".createFormKey('movedocument')."\" draggable=\"true\">"; + echo $this->documentListRowStart($sourceDoc); $sourceDoc->verifyLastestContentExpriry(); $txt = $this->callHook('documentListItem', $sourceDoc, $previewer, false, 'reverselinks'); if(is_string($txt)) @@ -1466,7 +1468,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { print "
    ".getMLText("document_link_public").": ".(($link->isPublic()) ? getMLText("yes") : getMLText("no")); print "
    ".createHiddenFieldWithKey('removedocumentlink')."getId()."\" />getID()."\" />
    "; print ""; - print ""; + echo $this->documentListRowEnd($sourceDoc); } print "\n\n"; // $this->contentContainerEnd(); diff --git a/views/bootstrap/class.ViewFolder.php b/views/bootstrap/class.ViewFolder.php index 669d73ba9..d2733cb53 100644 --- a/views/bootstrap/class.ViewFolder.php +++ b/views/bootstrap/class.ViewFolder.php @@ -109,6 +109,7 @@ class SeedDMS_View_ViewFolder extends SeedDMS_Bootstrap_Style { $expandFolderTree = $this->params['expandFolderTree']; $enableDropUpload = $this->params['enableDropUpload']; $maxItemsPerPage = $this->params['maxItemsPerPage']; + $maxuploadsize = $this->params['maxuploadsize']; $showtree = $this->params['showtree']; $onepage = $this->params['onepage']; $sitename = trim(strip_tags($this->params['sitename'])); @@ -183,7 +184,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 @@ -207,7 +215,11 @@ $('body').on('click', '.order-btn', function(ev) { echo "SeedDMSUpload.setUrl('../op/op.Ajax.php');"; echo "SeedDMSUpload.setAbortBtnLabel('".getMLText("cancel")."');"; echo "SeedDMSUpload.setEditBtnLabel('".getMLText("edit_document_props")."');"; - echo "SeedDMSUpload.setMaxFileSize(".SeedDMS_Core_File::parse_filesize(ini_get("upload_max_filesize")).");"; + $mus2 = SeedDMS_Core_File::parse_filesize(ini_get("upload_max_filesize")); + if($maxuploadsize && $maxuploadsize < $mus2) + echo "SeedDMSUpload.setMaxFileSize($maxuploadsize);"; + else + echo "SeedDMSUpload.setMaxFileSize($mus2);"; echo "SeedDMSUpload.setMaxFileSizeMsg('".getMLText("uploading_maxsize")."');"; } @@ -250,7 +262,7 @@ $('body').on('click', '.order-btn', function(ev) { echo ""; } - if($user->isAdmin()) { + if($user->isAdmin() || $folder->getAccessMode($user) > M_READ) { echo ""; echo "".getMLText('default_access').":"; echo "".$this->getAccessModeText($folder->getDefaultAccess()).""; @@ -359,7 +371,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 { @@ -428,9 +440,13 @@ $('body').on('click', '.order-btn', function(ev) { $folder = $this->params['folder']; $this->contentHeading(getMLText("dropupload"), true); + if ($folder->getAccessMode($user) >= M_READWRITE) { ?>
    errorMsg(getMLText('access_denied')); + } } /* }}} */ function entries() { /* {{{ */ @@ -467,7 +483,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 { @@ -582,7 +598,7 @@ $('body').on('click', '.order-btn', function(ev) { } echo "
    \n"; - if ($enableDropUpload && $folder->getAccessMode($user) >= M_READWRITE) { + if ($enableDropUpload/* && $folder->getAccessMode($user) >= M_READWRITE*/) { echo "
    "; echo "
    "; } @@ -591,7 +607,7 @@ $('body').on('click', '.order-btn', function(ev) { ?>
    getID()."\"" : "") ?>>
    getAccessMode($user) >= M_READWRITE) { + if ($enableDropUpload/* && $folder->getAccessMode($user) >= M_READWRITE*/) { echo "
    "; echo "
    "; // $this->dropUpload(); diff --git a/views/bootstrap/class.WorkflowActionsMgr.php b/views/bootstrap/class.WorkflowActionsMgr.php index 5963025e1..55bf3aeab 100644 --- a/views/bootstrap/class.WorkflowActionsMgr.php +++ b/views/bootstrap/class.WorkflowActionsMgr.php @@ -86,11 +86,11 @@ $(document).ready( function() { $workflow = $transition->getWorkflow(); echo ""; echo ""; - echo $workflow->getName(); + echo htmlspecialchars($workflow->getName()); echo ""; - echo ' '.$state->getName(); + echo ' '.htmlspecialchars($state->getName()); echo ""; - echo ' '.$nextstate->getName(); + echo ' '.htmlspecialchars($nextstate->getName()); echo ""; } echo ""; diff --git a/views/bootstrap/class.WorkflowMgr.php b/views/bootstrap/class.WorkflowMgr.php index b0de06218..d918b728d 100644 --- a/views/bootstrap/class.WorkflowMgr.php +++ b/views/bootstrap/class.WorkflowMgr.php @@ -117,7 +117,7 @@ $(document).ready(function() { if($path) { $names = array(); foreach($path as $state) { - $names[] = $state->getName(); + $names[] = htmlspecialchars($state->getName()); } $this->errorMsg(getMLText('workflow_has_cycle').": ".implode(' ', $names)); } @@ -219,14 +219,14 @@ $(document).ready(function() { if(!$transusers && !$transgroups) { echo " class=\"error\""; } - echo ">".' '.$state->getName()."
    "; + echo ">".' '.htmlspecialchars($state->getName())."
    "; $docstatus = $nextstate->getDocumentStatus(); - echo ' '.$nextstate->getName(); + echo ' '.htmlspecialchars($nextstate->getName()); if($docstatus == S_RELEASED || $docstatus == S_REJECTED) { echo "
    ".getOverallStatusText($docstatus); } echo ""; - echo " ".$action->getName().""; + echo " ".htmlspecialchars($action->getName()).""; echo ""; foreach($transusers as $transuser) { $u = $transuser->getUser(); @@ -237,7 +237,7 @@ $(document).ready(function() { $g = $transgroup->getGroup(); echo ' '.getMLText('at_least_n_users_of_group', array("number_of_users" => $transgroup->getNumOfUsers(), - "group" => $g->getName())); + "group" => htmlspecialchars($g->getName()))); echo "
    "; } echo ""; @@ -264,20 +264,20 @@ $(document).ready(function() { echo "
    "; echo ""; echo ""; echo ""; echo ""; echo ""; diff --git a/views/bootstrap/class.WorkflowStatesMgr.php b/views/bootstrap/class.WorkflowStatesMgr.php index ea30447b5..a4da2478d 100644 --- a/views/bootstrap/class.WorkflowStatesMgr.php +++ b/views/bootstrap/class.WorkflowStatesMgr.php @@ -87,11 +87,11 @@ $(document).ready(function() { $workflow = $transition->getWorkflow(); echo ""; echo ""; - echo $workflow->getName(); + echo htmlspecialchars($workflow->getName()); echo ""; - echo ' '.$state->getName(); + echo ' '.htmlspecialchars($state->getName()); echo ""; - echo ' '.$nextstate->getName(); + echo ' '.htmlspecialchars($nextstate->getName()); echo ""; } echo "";