All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.document_library.js.upload.js Maven / Gradle / Ivy

The newest version!
AUI.add(
	'document-library-upload',
	function(A) {
		var AArray = A.Array;
		var ANode = A.Node;
		var HistoryManager = Liferay.HistoryManager;
		var Lang = A.Lang;
		var LString = Lang.String;
		var UploaderQueue = A.Uploader.Queue;

		var isNumber = Lang.isNumber;
		var isString = Lang.isString;

		var sub = Lang.sub;

		var CSS_ACTIVE_AREA = 'active-area';

		var CSS_APP_VIEW_ENTRY = 'app-view-entry-taglib';

		var CSS_DISPLAY_DESCRIPTIVE = 'display-descriptive';

		var CSS_DISPLAY_ICON = 'display-icon';

		var CSS_DOCUMENT_ENTRIES_PAGINATION = 'document-entries-pagination';

		var CSS_ENTRIES_EMPTY = 'entries-empty';

		var CSS_ENTRY_DISPLAY_STYLE = 'entry-display-style';

		var CSS_ENTRY_LINK = CSS_ENTRY_DISPLAY_STYLE + ' a';

		var CSS_ENTRY_SELECTOR = 'entry-selector';

		var CSS_ENTRY_TITLE_TEXT = 'lfr-card-title-text';

		var CSS_ICON = 'icon';

		var CSS_SEARCHCONTAINER = 'searchcontainer';

		var CSS_TAGLIB_ICON = 'taglib-icon';

		var CSS_TAGLIB_TEXT = 'taglib-text';

		var CSS_UPLOAD_ERROR = 'upload-error';

		var CSS_UPLOAD_SUCCESS = 'upload-success';

		var CSS_UPLOAD_WARNING = 'upload-warning';

		var DOC = A.config.doc;

		var ERROR_RESULTS_MIXED = 1;

		var PATH_THEME_IMAGES = themeDisplay.getPathThemeImages();

		var REGEX_AUDIO = /\.(aac|auif|bwf|flac|mp3|mp4|m4a|wav|wma)$/i;

		var REGEX_COMPRESSED = /\.(dmg|gz|tar|tgz|zip)$/i;

		var REGEX_IMAGE = /\.(bmp|gif|jpeg|jpg|png|tiff)$/i;

		var REGEX_VIDEO = /\.(avi|flv|mpe|mpg|mpeg|mov|m4v|ogg|wmv)$/i;

		var SELECTOR_DATA_FOLDER = '[data-folder="true"]';

		var SELECTOR_DATA_FOLDER_DATA_TITLE = '[data-folder="true"][data-title]';

		var STR_DOT = '.';

		var SELECTOR_DISPLAY_DESCRIPTIVE = STR_DOT + CSS_DISPLAY_DESCRIPTIVE;

		var SELECTOR_DISPLAY_ICON = STR_DOT + CSS_DISPLAY_ICON;

		var SELECTOR_DOCUMENT_ENTRIES_PAGINATION = STR_DOT + CSS_DOCUMENT_ENTRIES_PAGINATION;

		var SELECTOR_ENTRIES_EMPTY = STR_DOT + CSS_ENTRIES_EMPTY;

		var SELECTOR_ENTRY_DISPLAY_STYLE = STR_DOT + CSS_ENTRY_DISPLAY_STYLE;

		var SELECTOR_ENTRY_LINK = STR_DOT + CSS_ENTRY_LINK;

		var SELECTOR_ENTRY_TITLE_TEXT = STR_DOT + CSS_ENTRY_TITLE_TEXT;

		var SELECTOR_IMAGE_ICON = 'img.icon';

		var SELECTOR_SEARCH_CONTAINER = STR_DOT + CSS_SEARCHCONTAINER;

		var SELECTOR_TAGLIB_ICON = STR_DOT + CSS_TAGLIB_ICON;

		var STR_BLANK = '';

		var STR_BOUNDING_BOX = 'boundingBox';

		var STR_CONTENT_BOX = 'contentBox';

		var STR_EXTENSION_PDF = '.pdf';

		var STR_FIRST = 'first';

		var STR_FOLDER_ID = 'folderId';

		var STR_HOST = 'host';

		var STR_LABEL = 'label';

		var STR_LIST = 'list';

		var STR_NAME = 'name';

		var STR_NAVIGATION_OVERLAY_BACKGROUND = '#FFF';

		var STR_SIZE = 'size';

		var STR_SPACE = ' ';

		var STR_THUMBNAIL_EXTENSION = '.png';

		var STR_THUMBNAIL_DEFAULT = 'default' + STR_THUMBNAIL_EXTENSION;

		var STR_THUMBNAIL_PDF = 'pdf' + STR_THUMBNAIL_EXTENSION;

		var STR_THUMBNAIL_AUDIO = 'music' + STR_THUMBNAIL_EXTENSION;

		var STR_THUMBNAIL_COMPRESSED = 'compressed' + STR_THUMBNAIL_EXTENSION;

		var STR_THUMBNAIL_VIDEO = 'video' + STR_THUMBNAIL_EXTENSION;

		var STR_THUMBNAIL_PATH = PATH_THEME_IMAGES + '/file_system/large/';

		var TPL_ENTRIES_CONTAINER = '
    '; var TPL_ENTRY_ROW_TITLE = '' + '' + '' + '{0}' + '' + ''; var TPL_ENTRY_WRAPPER = '
  • '; var TPL_ERROR_FOLDER = new A.Template( '{validFilesLength}', '{invalidFilesLength}', '
      ', '', '
    • {name}: {errorMessage}
    • ', '
      ', '
    ' ); var TPL_HIDDEN_CHECK_BOX = ''; var TPL_IMAGE_THUMBNAIL = themeDisplay.getPathContext() + '/documents/{0}/{1}/{2}'; var DocumentLibraryUpload = A.Component.create( { ATTRS: { appViewEntryTemplates: { validator: A.one, value: {} }, columnNames: { setter: function(val) { var instance = this; val.push(STR_BLANK); val.unshift(STR_BLANK); return val; }, validator: Array.isArray, value: [] }, dimensions: { value: {} }, displayStyle: { validator: isString, value: STR_BLANK }, entriesContainer: { validator: A.one, value: {} }, folderId: { getter: function() { var instance = this; return instance.get(STR_HOST).getFolderId(); }, readonly: true, setter: Lang.toInt, validator: isNumber || isString, value: null }, maxFileSize: { validator: function(val) { return isNumber(val) && val > 0; }, value: Liferay.PropsValues.UPLOAD_SERVLET_REQUEST_IMPL_MAX_SIZE }, redirect: { validator: isString, value: STR_BLANK }, scopeGroupId: { validator: isNumber, value: null }, uploadURL: { setter: '_decodeURI', validator: isString, value: STR_BLANK }, viewFileEntryURL: { setter: '_decodeURI', validator: isString, value: STR_BLANK } }, AUGMENTS: [Liferay.StorageFormatter], EXTENDS: A.Plugin.Base, NAME: 'documentlibraryupload', NS: 'upload', prototype: { initializer: function() { var instance = this; var appViewEntryTemplates = instance.get('appViewEntryTemplates'); instance._columnNames = instance.get('columnNames'); instance._dimensions = instance.get('dimensions'); instance._displayStyle = instance.get('displayStyle'); instance._entriesContainer = instance.get('entriesContainer'); instance._maxFileSize = instance.get('maxFileSize'); instance._scopeGroupId = instance.get('scopeGroupId'); instance._handles = []; instance._invisibleDescriptiveEntry = appViewEntryTemplates.one(SELECTOR_ENTRY_DISPLAY_STYLE + SELECTOR_DISPLAY_DESCRIPTIVE); instance._invisibleIconEntry = appViewEntryTemplates.one(SELECTOR_ENTRY_DISPLAY_STYLE + SELECTOR_DISPLAY_ICON); instance._strings = { invalidFileSize: Liferay.Language.get('please-enter-a-file-with-a-valid-file-size-no-larger-than-x'), zeroByteFile: Liferay.Language.get('the-file-contains-no-data-and-cannot-be-uploaded.-please-use-the-classic-uploader') }; instance._bindDragDropUI(); }, destructor: function() { var instance = this; if (instance._dataSet) { instance._dataSet.destroy(); } if (instance._navigationOverlays) { AArray.invoke(instance._navigationOverlays, 'destroy'); } if (instance._uploader) { instance._uploader.destroy(); } if (instance._tooltipDelegate) { instance._tooltipDelegate.destroy(); } instance._detachSubscriptions(); (new A.EventHandle(instance._eventHandles)).detach(); }, _addFilesToQueueBottom: function(files) { var instance = this; var queue = instance._getUploader().queue; files.forEach( function(item, index) { queue.addToQueueBottom(item); } ); }, _attachSubscriptions: function(data) { var instance = this; var handles = instance._handles; var displayStyle = instance._getDisplayStyle(); var uploader = instance._getUploader(); if (data.folder) { handles.push( uploader.on('alluploadscomplete', instance._showFolderUploadComplete, instance, data, displayStyle), uploader.on('totaluploadprogress', instance._showFolderUploadProgress, instance, data), uploader.on('uploadcomplete', instance._detectFolderUploadError, instance, data), uploader.on('uploadstart', instance._showFolderUploadStarting, instance, data) ); } else { handles.push( uploader.after('fileuploadstart', instance._showFileUploadStarting, instance), uploader.on('uploadcomplete', instance._showFileUploadComplete, instance, displayStyle), uploader.on('uploadprogress', instance._showFileUploadProgress, instance) ); } }, _bindDragDropUI: function() { var instance = this; var docElement = A.one(DOC.documentElement); var entriesContainer = instance._entriesContainer; var host = instance.get(STR_HOST); A.getWin()._node.onbeforeunload = A.bind('_confirmUnload', instance); var onDataRequestHandle = Liferay.on(host.ns('dataRequest'), instance._onDataRequest, instance); var removeCssClassTask = A.debounce( function() { docElement.removeClass('upload-drop-intent'); docElement.removeClass('upload-drop-active'); }, 500 ); var onDragOverHandle = docElement.on( 'dragover', function(event) { var dataTransfer = event._event.dataTransfer; if (dataTransfer && dataTransfer.types) { var dataTransferTypes = dataTransfer.types || []; if (AArray.indexOf(dataTransferTypes, 'Files') > -1 && AArray.indexOf(dataTransferTypes, 'text/html') === -1) { event.halt(); dataTransfer.dropEffect = 'copy'; docElement.addClass('upload-drop-intent'); var target = event.target; docElement.toggleClass('upload-drop-active', target.compareTo(entriesContainer) || entriesContainer.contains(target)); removeCssClassTask(); } } } ); var onDropHandle = docElement.delegate( 'drop', function(event) { var dataTransfer = event._event.dataTransfer; if (dataTransfer) { var dataTransferTypes = dataTransfer.types || []; if (AArray.indexOf(dataTransferTypes, 'Files') > -1 && AArray.indexOf(dataTransferTypes, 'text/html') === -1) { event.halt(); var dragDropFiles = AArray(dataTransfer.files); event.fileList = dragDropFiles.map( function(item, index) { return new A.FileHTML5(item); } ); var uploader = instance._getUploader(); uploader.fire('fileselect', event); } } }, 'body, .document-container, .overlaymask, .progressbar, [data-folder="true"]' ); var entriesDragDelegateHandle = entriesContainer.delegate( ['dragleave', 'dragover'], function(event) { var dataTransfer = event._event.dataTransfer; var dataTransferTypes = dataTransfer.types; if (AArray.indexOf(dataTransferTypes, 'Files') > -1 && AArray.indexOf(dataTransferTypes, 'text/html') === -1) { var parentElement = event.target.ancestor('[data-folder="true"]'); if (!parentElement) { parentElement = event.target; } parentElement.toggleClass(CSS_ACTIVE_AREA, event.type == 'dragover'); } }, SELECTOR_DATA_FOLDER ); var entriesClickDelegateHandle = entriesContainer.delegate( 'click', function(event) { event.preventDefault(); }, STR_DOT + CSS_UPLOAD_ERROR + STR_SPACE + SELECTOR_ENTRY_LINK ); instance._eventHandles = [ onDataRequestHandle, onDragOverHandle, onDropHandle, entriesDragDelegateHandle, entriesClickDelegateHandle ]; }, _combineFileLists: function(fileList, queuedFiles) { var instance = this; queuedFiles.forEach( function(item, index) { fileList.push(item); } ); }, _confirmUnload: function() { var instance = this; if (instance._isUploading()) { return Liferay.Language.get('uploads-are-in-progress-confirmation'); } }, _createEntriesContainer: function(searchContainer, displayStyle) { var containerClasses = 'display-style-descriptive tabular-list-group'; if (displayStyle === CSS_ICON) { containerClasses = 'display-style-icon list-unstyled row'; } var entriesContainer = ANode.create( Lang.sub( TPL_ENTRIES_CONTAINER, { cssClass: containerClasses } ) ); searchContainer.one('.searchcontainer-content').prepend(entriesContainer); return entriesContainer; }, _createEntryNode: function(name, size, displayStyle) { var instance = this; var entryNode; var entriesContainer = instance.get('entriesContainer'); var searchContainer = entriesContainer.one(SELECTOR_SEARCH_CONTAINER); if (displayStyle === STR_LIST) { entriesContainer = searchContainer.one('tbody'); entryNode = instance._createEntryRow(name, size); } else { var entriesContainerSelector = 'ul.tabular-list-group:last-of-type'; if (displayStyle === CSS_ICON) { entriesContainerSelector = 'ul.list-unstyled:last-of-type'; } entriesContainer = entriesContainer.one(entriesContainerSelector) || instance._createEntriesContainer(entriesContainer, displayStyle); var invisibleEntry = instance._invisibleDescriptiveEntry; var hiddenCheckbox = sub(TPL_HIDDEN_CHECK_BOX, [instance.get(STR_HOST).ns('rowIdsFileEntry')]); if (displayStyle === CSS_ICON) { invisibleEntry = instance._invisibleIconEntry; } entryNode = invisibleEntry.clone(); entryNode.append(hiddenCheckbox); var entryLink = entryNode.one('a'); var entryTitle = entryLink; if (displayStyle === CSS_ICON) { entryTitle = entryNode.one(SELECTOR_ENTRY_TITLE_TEXT); } entryLink.attr('title', name); entryTitle.setContent(name); instance._removeEmptyResultsMessage(searchContainer); var searchContainerWrapper = A.one('div.lfr-search-container-wrapper.main-content-body'); if (searchContainerWrapper) { searchContainerWrapper.show(); } } entryNode.attr( { 'data-title': name, id: A.guid() } ); if (displayStyle == CSS_ICON) { var entryNodeWrapper = ANode.create( Lang.sub( TPL_ENTRY_WRAPPER, { title: name } ) ); entryNodeWrapper.append(entryNode); entryNode = entryNodeWrapper; } entriesContainer.append(entryNode); entryNode.show().scrollIntoView(); return entryNode; }, _createEntryRow: function(name, size) { var instance = this; var searchContainerNode = instance._entriesContainer.one(SELECTOR_SEARCH_CONTAINER); var searchContainer = Liferay.SearchContainer.get(searchContainerNode.attr('id')); var columnValues = instance._columnNames.map( function(item, index) { var value = STR_BLANK; if (item == STR_NAME) { value = sub(TPL_ENTRY_ROW_TITLE, [name]); } else if (item == STR_SIZE) { value = instance.formatStorage(size); } else if (item == 'downloads') { value = '0'; } else if (index === 0) { value = sub(TPL_HIDDEN_CHECK_BOX, [instance.get(STR_HOST).ns('rowIdsFileEntry')]); } return value; } ); var row = searchContainer.addRow(columnValues, A.guid()); row.attr('data-draggable', true); return row; }, _createOverlay: function(target, background) { var instance = this; var overlay = new A.OverlayMask( { background: background || null, target: target } ).render(); overlay.get(STR_BOUNDING_BOX).addClass('portlet-document-library-upload-mask'); return overlay; }, _createProgressBar: function(target) { var instance = this; var height = target.height() / 5; var width = target.width() * 0.8; return new A.ProgressBar( { height: height, on: { complete: function(event) { this.set(STR_LABEL, 'complete!'); }, valueChange: function(event) { this.set(STR_LABEL, event.newVal + '%'); } }, width: width } ); }, _createUploadStatus: function(target, file) { var instance = this; var overlay = instance._createOverlay(target); var progressBar = instance._createProgressBar(target); overlay.show(); if (file) { file.overlay = overlay; file.progressBar = progressBar; file.target = target; } else { target.overlay = overlay; target.progressBar = progressBar; } }, _decodeURI: function(val) { return decodeURI(val); }, _destroyEntry: function() { var instance = this; var currentUploadData = instance._getCurrentUploadData(); var fileList = currentUploadData.fileList; if (!currentUploadData.folder) { fileList.forEach( function(item, index) { item.overlay.destroy(); item.progressBar.destroy(); } ); } AArray.invoke(fileList, 'destroy'); }, _detachSubscriptions: function() { var instance = this; var handles = instance._handles; AArray.invoke(handles, 'detach'); handles.length = 0; }, _detectFolderUploadError: function(event, data) { var instance = this; var response = instance._getUploadResponse(event.data); if (response.error) { var file = event.file; file.errorMessage = response.message; data.invalidFiles.push(file); } }, _displayEntryError: function(node, message, displayStyle) { var instance = this; if (displayStyle == STR_LIST) { var imageIcon = node.one(SELECTOR_IMAGE_ICON); imageIcon.attr('src', PATH_THEME_IMAGES + '/common/close.png'); } else { node.addClass(CSS_UPLOAD_ERROR); } instance._displayError(node, message); }, _displayError: function(node, message) { var instance = this; node.attr('data-message', message); var tooltipDelegate = instance._tooltipDelegate; if (!tooltipDelegate) { tooltipDelegate = new A.TooltipDelegate( { formatter: function(val) { return instance._formatTooltip(val, this); }, trigger: '.app-view-entry.upload-error', visible: false } ); instance._tooltipDelegate = tooltipDelegate; } return node; }, _displayResult: function(node, displayStyle, error) { var instance = this; var resultsNode = node; if (resultsNode) { var uploadResultClass = CSS_UPLOAD_SUCCESS; if (error) { resultsNode.removeClass(CSS_UPLOAD_ERROR).removeClass(CSS_UPLOAD_WARNING); if (error === true) { uploadResultClass = CSS_UPLOAD_ERROR; } else if (error == ERROR_RESULTS_MIXED) { uploadResultClass = CSS_UPLOAD_WARNING; } } resultsNode.addClass(uploadResultClass); resultsNode.addClass(CSS_ENTRY_DISPLAY_STYLE); } }, _formatTooltip: function(val, tooltip) { var instance = this; tooltip.set('zIndex', 2); var node = tooltip.get('trigger'); return node.attr('data-message'); }, _getCurrentUploadData: function() { var instance = this; var dataSet = instance._getDataSet(); return dataSet.get(STR_FIRST); }, _getDataSet: function() { var instance = this; var dataSet = instance._dataSet; if (!dataSet) { dataSet = new A.DataSet(); instance._dataSet = dataSet; } return dataSet; }, _getDisplayStyle: function(style) { var instance = this; var displayStyleNamespace = instance.get(STR_HOST).ns('displayStyle'); var displayStyle = HistoryManager.get(displayStyleNamespace) || instance._displayStyle; if (style) { displayStyle = style == displayStyle; } return displayStyle; }, _getEmptyMessage: function() { var instance = this; var emptyMessage = instance._emptyMessage; if (!emptyMessage) { emptyMessage = instance._entriesContainer.one(SELECTOR_ENTRIES_EMPTY); instance._emptyMessage = emptyMessage; } return emptyMessage; }, _getFolderEntryNode: function(target) { var instance = this; var folderEntry; var overlayContentBox = target.hasClass('overlay-content'); if (overlayContentBox) { var overlay = A.Widget.getByNode(target); folderEntry = overlay._originalConfig.target; } else { if (target.attr('data-folder') === 'true') { folderEntry = target; } if (!folderEntry) { folderEntry = target.ancestor(SELECTOR_ENTRY_LINK + SELECTOR_DATA_FOLDER); } if (!folderEntry) { folderEntry = target.ancestor(SELECTOR_DATA_FOLDER_DATA_TITLE); } folderEntry = folderEntry && folderEntry.ancestor(); } return folderEntry; }, _getMediaThumbnail: function(fileName) { var instance = this; var thumbnailName = STR_THUMBNAIL_DEFAULT; if (REGEX_IMAGE.test(fileName)) { thumbnailName = sub(TPL_IMAGE_THUMBNAIL, [instance._scopeGroupId, instance.get(STR_FOLDER_ID), fileName]); } else { if (LString.endsWith(fileName.toLowerCase(), STR_EXTENSION_PDF)) { thumbnailName = STR_THUMBNAIL_PDF; } else if (REGEX_AUDIO.test(fileName)) { thumbnailName = STR_THUMBNAIL_AUDIO; } else if (REGEX_VIDEO.test(fileName)) { thumbnailName = STR_THUMBNAIL_VIDEO; } else if (REGEX_COMPRESSED.test(fileName)) { thumbnailName = STR_THUMBNAIL_COMPRESSED; } thumbnailName = STR_THUMBNAIL_PATH + thumbnailName; } return thumbnailName; }, _getNavigationOverlays: function() { var instance = this; var navigationOverlays = instance._navigationOverlays; if (!navigationOverlays) { navigationOverlays = []; var createNavigationOverlay = function(target) { if (target) { var overlay = instance._createOverlay(target, STR_NAVIGATION_OVERLAY_BACKGROUND); navigationOverlays.push(overlay); } }; var entriesContainer = instance.get('entriesContainer'); createNavigationOverlay(entriesContainer.one(SELECTOR_DOCUMENT_ENTRIES_PAGINATION)); createNavigationOverlay(entriesContainer.one('.app-view-taglib.lfr-header-row')); createNavigationOverlay(instance.get('.searchcontainer')); instance._navigationOverlays = navigationOverlays; } return navigationOverlays; }, _getTargetFolderId: function(target) { var instance = this; var folderEntry = instance._getFolderEntryNode(target); var dataFolder = folderEntry && folderEntry.one('[data-folder-id]'); return dataFolder && Lang.toInt(dataFolder.attr('data-folder-id')) || instance.get(STR_FOLDER_ID); }, _getUploader: function() { var instance = this; var uploader = instance._uploader; if (!uploader) { uploader = new A.Uploader( { appendNewFiles: false, fileFieldName: 'file', multipleFiles: true, simLimit: 1 } ); var navigationOverlays = instance._getNavigationOverlays(); uploader.on( 'uploadstart', function(event) { AArray.invoke(navigationOverlays, 'show'); } ); uploader.after( 'alluploadscomplete', function(event) { AArray.invoke(navigationOverlays, 'hide'); var emptyMessage = instance._getEmptyMessage(); if (emptyMessage && !emptyMessage.hasClass('hide')) { emptyMessage.hide(true); } } ); uploader.get(STR_BOUNDING_BOX).hide(); uploader.render(); uploader.after('alluploadscomplete', instance._startNextUpload, instance); uploader.after('fileselect', instance._onFileSelect, instance); instance._uploader = uploader; } return uploader; }, _getUploadResponse: function(responseData) { var instance = this; var error; var message; try { responseData = JSON.parse(responseData); } catch (e) { } if (Lang.isObject(responseData)) { error = responseData.status && (responseData.status >= 490 && responseData.status < 500); if (error) { message = responseData.message; } else { message = instance.get(STR_HOST).ns('fileEntryId=') + responseData.fileEntryId; } } return { error: error, message: message }; }, _getUploadStatus: function(key) { var instance = this; var dataSet = instance._getDataSet(); return dataSet.item(String(key)); }, _getUploadURL: function(folderId) { var instance = this; var uploadURL = instance._uploadURL; if (!uploadURL) { var redirect = instance.get('redirect'); uploadURL = instance.get('uploadURL'); instance._uploadURL = Liferay.Util.addParams( { redirect: redirect, ts: Date.now() }, uploadURL ); } return sub( uploadURL, { folderId: folderId } ); }, _isUploading: function() { var instance = this; var uploader = instance._uploader; var queue = uploader && uploader.queue; return !!queue && (queue.queuedFiles.length > 0 || queue.numberOfUploads > 0 || !A.Object.isEmpty(queue.currentFiles)) && queue._currentState == UploaderQueue.UPLOADING; }, _onDataRequest: function(event) { var instance = this; if (instance._isUploading()) { event.halt(); } }, _onFileSelect: function(event) { var instance = this; var target = event.details[0].target; var filesPartition = instance._validateFiles(event.fileList); instance._updateStatusUI(target, filesPartition); instance._queueSelectedFiles(target, filesPartition); }, _positionProgressBar: function(overlay, progressBar) { var instance = this; var progressBarBoundingBox = progressBar.get(STR_BOUNDING_BOX); progressBar.render(overlay.get(STR_BOUNDING_BOX)); progressBarBoundingBox.center(overlay.get(STR_CONTENT_BOX)); }, _queueSelectedFiles: function(target, filesPartition) { var instance = this; var key = instance._getTargetFolderId(target); var keyData = instance._getUploadStatus(key); var validFiles = filesPartition.matches; if (keyData) { instance._updateDataSetEntry(key, keyData, validFiles); } else { var dataSet = instance._getDataSet(); var folderNode = null; var folder = key !== instance.get(STR_FOLDER_ID); if (folder) { folderNode = instance._getFolderEntryNode(target); } dataSet.add( key, { fileList: validFiles, folder: folder, folderId: key, invalidFiles: filesPartition.rejects, target: folderNode } ); } if (!instance._isUploading()) { instance._startUpload(); } }, _removeEmptyResultsMessage: function(searchContainer) { var instance = this; var id = searchContainer.getAttribute('id'); var emptyResultsMessage = A.one('#' + id + 'EmptyResultsMessage'); if (emptyResultsMessage) { emptyResultsMessage.hide(); } }, _showFileUploadComplete: function(event, displayStyle) { var instance = this; var file = event.file; var fileNode = file.target; var response = instance._getUploadResponse(event.data); if (response) { var hasErrors = !!response.error; if (hasErrors) { instance._displayEntryError(fileNode, response.message, displayStyle); } else { var displayStyleList = displayStyle == STR_LIST; var fileEntryId = JSON.parse(event.data).fileEntryId; if (!displayStyleList) { instance._updateThumbnail(fileNode, file.name); } instance._updateFileLink(fileNode, response.message, displayStyleList); instance._updateFileHiddenInput(fileNode, fileEntryId); } instance._displayResult(fileNode, displayStyle, hasErrors); } file.overlay.hide(); }, _showFileUploadProgress: function(event) { var instance = this; instance._updateProgress(event.file.progressBar, event.percentLoaded); }, _showFileUploadStarting: function(event) { var instance = this; var file = event.file; instance._positionProgressBar(file.overlay, file.progressBar); }, _showFolderUploadComplete: function(event, uploadData, displayStyle) { var instance = this; var folderEntry = uploadData.target; var invalidFiles = uploadData.invalidFiles; var totalFilesLength = uploadData.fileList.length; var invalidFilesLength = invalidFiles.length; var hasErrors = invalidFilesLength !== 0; if (hasErrors && invalidFilesLength !== totalFilesLength) { hasErrors = ERROR_RESULTS_MIXED; } instance._displayResult(folderEntry, displayStyle, hasErrors); if (hasErrors) { instance._displayError( folderEntry, TPL_ERROR_FOLDER.parse( { invalidFiles: invalidFiles, invalidFilesLength: invalidFilesLength, validFilesLength: totalFilesLength - invalidFilesLength } ) ); } folderEntry.overlay.hide(); }, _showFolderUploadProgress: function(event, uploadData) { var instance = this; instance._updateProgress(uploadData.target.progressBar, event.percentLoaded); }, _showFolderUploadStarting: function(event, uploadData) { var instance = this; var target = uploadData.target; instance._positionProgressBar(target.overlay, target.progressBar); }, _startNextUpload: function(event) { var instance = this; instance._destroyEntry(); var dataSet = instance._getDataSet(); dataSet.removeAt(0); if (dataSet.length) { instance._startUpload(); } }, _startUpload: function() { var instance = this; var uploadData = instance._getCurrentUploadData(); var fileList = uploadData.fileList; var uploader = instance._getUploader(); if (fileList.length) { var uploadURL = instance._getUploadURL(uploadData.folderId); instance._attachSubscriptions(uploadData); uploader.uploadThese(fileList, uploadURL); } else { uploader.fire('alluploadscomplete'); } }, _updateDataSetEntry: function(key, data, unmergedData) { var instance = this; var currentUploadData = instance._getCurrentUploadData(); if (currentUploadData.folderId === key) { instance._addFilesToQueueBottom(unmergedData); } else { instance._combineFileLists(data.fileList, unmergedData); var dataSet = instance._getDataSet(); dataSet.replace(key, data); } }, _updateFileHiddenInput: function(node, id) { var instance = this; var inputNode = node.one('input'); if (inputNode) { inputNode.val(id); } }, _updateFileLink: function(node, id, displayStyleList) { var instance = this; var selector = SELECTOR_ENTRY_LINK; if (displayStyleList) { selector = SELECTOR_ENTRY_DISPLAY_STYLE + STR_SPACE + SELECTOR_TAGLIB_ICON; } var link = node.all(selector); if (link.size()) { link.attr('href', Liferay.Util.addParams(id, instance.get('viewFileEntryURL'))); } }, _updateProgress: function(progressBar, value) { var instance = this; progressBar.set('value', Math.ceil(value)); }, _updateStatusUI: function(target, filesPartition) { var instance = this; var folderId = instance._getTargetFolderId(target); var folder = folderId !== instance.get(STR_FOLDER_ID); if (folder) { var folderEntryNode = instance._getFolderEntryNode(target); var folderEntryNodeOverlay = folderEntryNode.overlay; if (folderEntryNodeOverlay) { folderEntryNodeOverlay.show(); instance._updateProgress(folderEntryNode.progressBar, 0); } else { instance._createUploadStatus(folderEntryNode); } folderEntryNode.removeClass(CSS_ACTIVE_AREA); } else { var displayStyle = instance._getDisplayStyle(); filesPartition.matches.map( function(file) { var entryNode = instance._createEntryNode(file.name, file.size, displayStyle); instance._createUploadStatus(entryNode, file); } ); filesPartition.rejects.map( function(file) { var entryNode = instance._createEntryNode(file.name, file.size, displayStyle); instance._displayEntryError(entryNode, file.errorMessage, instance._getDisplayStyle()); } ); } }, _updateThumbnail: function(node, fileName) { var instance = this; var imageNode = node.one('img'); var thumbnailPath = instance._getMediaThumbnail(fileName); imageNode.attr('src', thumbnailPath); if (instance._getDisplayStyle() === CSS_ICON) { imageNode.ancestor('div').setStyle('backgroundImage', 'url("' + thumbnailPath + '")'); } }, _validateFiles: function(data) { var instance = this; var maxFileSize = instance._maxFileSize; return AArray.partition( data, function(item, index) { var errorMessage; var size = item.get(STR_SIZE) || 0; var strings = instance._strings; if (maxFileSize !== 0 && size > maxFileSize) { errorMessage = sub(strings.invalidFileSize, [instance.formatStorage(instance._maxFileSize)]); } else if (size === 0) { errorMessage = strings.zeroByteFile; } item.errorMessage = errorMessage; item.size = size; item.name = item.get(STR_NAME); return !errorMessage; } ); } } } ); Liferay.DocumentLibraryUpload = DocumentLibraryUpload; }, '', { requires: ['aui-component', 'aui-data-set-deprecated', 'aui-overlay-manager-deprecated', 'aui-overlay-mask-deprecated', 'aui-parse-content', 'aui-progressbar', 'aui-template-deprecated', 'aui-tooltip', 'liferay-history-manager', 'liferay-search-container', 'liferay-storage-formatter', 'querystring-parse-simple', 'uploader'] } );




    © 2015 - 2025 Weber Informatics LLC | Privacy Policy