diff --git a/css/interface.css b/css/interface.css
index ea2cfea..dcc8816 100644
--- a/css/interface.css
+++ b/css/interface.css
@@ -162,22 +162,37 @@ html {
background-color: transparent;
}
-.empty-state, .search-empty-state {
+.empty-state,
+.move-modal-empty-state,
+.search-empty-state {
width: 100%;
text-align: center;
padding-top: 40px;
display: none;
}
-.empty-state.active, .search-empty-state.active {
+.move-modal-empty-state {
+ padding-bottom: 40px;
+}
+
+.empty-state.active,
+.search-empty-state.active {
display: table-caption;
}
-.empty-state span, .search-empty-state span {
+.move-modal-empty-state.active {
+ display: block;
+}
+
+.empty-state span,
+.move-modal-empty-state span,
+.search-empty-state span {
font-size: 30px;
}
-.empty-state h3, .search-empty-state h3 {
+.empty-state h3,
+.move-modal-empty-state h3,
+.search-empty-state h3 {
color: #14505e;
}
@@ -577,6 +592,10 @@ html {
background-color: #f3f3f3;
}
+.file-row.moving {
+ opacity: 0.3;
+}
+
.file-cell {
border-bottom: 1px solid rgba(0, 0, 0, 0.065);
display: table-cell;
@@ -720,7 +739,6 @@ html {
white-space: nowrap;
}
-
.file-table-body .file-ID {
color: #bbbbbb;
}
@@ -917,58 +935,203 @@ html {
text-shadow: 0px 0px 8px rgba(0,0,0,0.2);
}
-.search-holder {
+#move-modal .modal-header > .row,
+#move-modal .modal-footer.row {
display: flex;
- width: 30%;
+ align-items: center;
+ margin: 0 !important;
+}
+
+#move-modal .form-control{
+ height: 35px;
+ font-size: 12px;
+}
+
+#move-modal .header-breadcrumbs {
+ margin-top: 20px;
+}
+
+#move-modal .modal-body {
+ padding: 0 15px;
+}
+
+.move-modal-list {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+
+.move-modal-list li {
+ position: relative;
+ border-top: 1px solid #e5e4e4;
+ padding: 10px 0 10px 10px;
+}
+
+.move-modal-list li.children:after {
+ content: '';
+ position: absolute;
+ top: 50%;
+ right: 15px;
+ width: 8px;
+ height: 8px;
+ border-top: 1px solid #323232;
+ border-left: 1px solid #323232;
+ transform: rotate(135deg);
+ margin-top: -4px;
+}
+
+.move-modal-list li:hover {
+ background-color: #f5f5f5;
+}
+
+.move-modal-list li.selected {
+ background-color: #00abd2 !important;
+ color: #fff;
+}
+
+.move-modal-list li:first-child {
+ border-top: none;
+}
+
+.move-modal-list__file-name {
+ position: relative;
+ padding-left: 30px;
+}
+
+.move-modal-list__file-name:before {
+ content: "\f07c";
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ position: absolute;
+ top: 50%;
+ left: 0;
+ width: 25px;
+ height: 25px;
+ line-height: 25px;
+ font-size: 18px;
+ text-align: center;
+ -webkit-transform: translate3d(0, -50%, 0);
+ -ms-transform: translate3d(0, -50%, 0);
+ transform: translate3d(0, -50%, 0);
+}
+
+.move-modal-loading {
+ display: none;
+ min-height: 100px;
+ text-align: center;
+ align-items: center;
+ justify-content: center;
+}
+
+.move-modal-loading.visible {
+ display: flex;
+}
+
+.move-modal-loading div {
+ display: inline-block;
+ position: relative;
+ width: 40px;
+ height: 40px;
+}
+
+.move-modal-loading div div {
+ box-sizing: border-box;
+ display: block;
+ position: absolute;
+ width: 30px;
+ height: 30px;
+ margin: 2px;
+ border: 2px solid #000;
+ border-radius: 50%;
+ animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
+ border-color: #000 transparent transparent transparent;
+}
+
+.move-modal-loading div div:nth-child(1) {
+ animation-delay: -0.45s;
+}
+
+.move-modal-loading div div:nth-child(2) {
+ animation-delay: -0.3s;
+}
+
+.move-modal-loading div div:nth-child(3) {
+ animation-delay: -0.15s;
+}
+
+@keyframes lds-ring {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+@-ms-keyframes lds-ring {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+.search-holder {
+ display: flex;
+ width: 30%;
}
.search-holder .search-term {
- margin-left: 10px;
- margin-right: 10px;
+ margin-left: 10px;
+ margin-right: 10px;
}
.search-holder .search-type {
- width: 190px;
+ width: 190px;
}
.search-result-cell {
- display: none;
+ display: none;
}
.search-result .search-result-cell {
- display: table-cell;
+ display: table-cell;
}
.search-result .folder-result-cell {
- display: none;
+ display: none;
}
@media (min-width: 1440px) and (max-width: 1600px) {
- .file-name {
- width: 400px;
- }
+ .file-name {
+ width: 400px;
+ }
- .file-path {
- width: 200px;
- }
+ .file-path {
+ width: 200px;
+ }
}
@media (min-width: 1280px) and (max-width: 1440px) {
- .file-name {
- width: 300px;
- }
+ .file-name {
+ width: 300px;
+ }
- .file-path {
- width: 150px;
- }
+ .file-path {
+ width: 150px;
+ }
}
@media (max-width: 1280px) {
- .file-name {
- width: 150px;
- }
-
- .file-path {
- width: 100px;
- }
-}
+ .file-name {
+ width: 150px;
+ }
+
+ .file-path {
+ width: 100px;
+ }
+}
\ No newline at end of file
diff --git a/interface.html b/interface.html
index 25db4ed..723feed 100644
--- a/interface.html
+++ b/interface.html
@@ -125,7 +125,7 @@
-
😳
+
😳
This seems to be empty.
Use the "New" button.
@@ -194,6 +194,9 @@ Did you know?
Download
+
+ Move
+
Delete
@@ -210,6 +213,9 @@ Did you know?
Download
+
+ Move
+
Delete
@@ -378,3 +384,106 @@
+
+
+
+
+
+
+
+
+
+ \{{#if (gt children.length 0)}}
+
+ \{{/if}}
+ \{{#if (eq children.length 0)}}
+
+ \{{/if}}
+
+ \{{name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
😳
+
This seems to be empty.
+
Use the "Create new folder" button.
+
+
+
+
+
+
+
+
+
+
+
+
+ \{{name}}
+
+
+
diff --git a/js/interface.js b/js/interface.js
index b005857..84f6680 100644
--- a/js/interface.js
+++ b/js/interface.js
@@ -6,11 +6,24 @@ var $organizationList = $('.dropdown-menu-holder .panel-group');
var $progress = $('.progress');
var $progressBar = $progress.find('.progress-bar');
var $dropZone = $('#drop-zone');
+var $fileManagerBlock = $('.file-manager-wrapper');
+var $moveModal;
+var $modalSelect;
+var $emptyStateBlock;
+var $foldersList;
+var $loadingBlock;
+var $moveButton;
+var $folderForMoving;
var templates = {
file: template('file'),
folder: template('folder'),
organizations: template('organizations'),
- apps: template('apps')
+ apps: template('apps'),
+ moveModal: template('move-modal'),
+ organizationsSelect: template('select-organizations'),
+ appsSelect: template('select-apps'),
+ moveModalFolders: template('move-modal-folders'),
+ breadcrumbsItem: template('breadcrumbs-item')
};
var $searchType = $('.search-type');
var $searchTerm = $('.search-term');
@@ -27,12 +40,14 @@ var currentFolders;
var currentFiles;
var counterOrganization;
var currentSearchResult;
+var foldersForMoving = { navStack: [] };
+var selectedItemsForMoving;
var tetherBox;
var folders = [];
-var apps;
-var organizations;
+var appsList;
+var organizationsList;
var navStack = [];
var beforeSearchNavStack = [];
@@ -45,17 +60,26 @@ var searchDebounceTime = 500;
// therefore we want this to be an clean direct link to the API with no token.
var useCdn = false;
+Handlebars.registerHelper({
+ eq: function (v1, v2) {
+ return v1 === v2;
+ },
+ gt: function (v1, v2) {
+ return v1 > v2;
+ }
+});
+
// CORE FUNCTIONS //
// Get organizations and apps list for left side menu
function getOrganizationsList() {
counterOrganization = 0;
Fliplet.Organizations.get().then(function(organizations) {
// Sort alphabetically
- organizations = _.sortBy(organizations, [function(o) {
+ organizationsList = _.sortBy(organizations, [function(o) {
return o.name;
}]);
// Add to HTML
- organizations.forEach(addOrganizations);
+ organizationsList.forEach(addOrganizations);
}).then(function() {
getAppsList();
$('.file-cell.selectable').addClass('active');
@@ -119,6 +143,7 @@ function navigateToDefaultFolder() {
type = 'folder';
updatePaths();
}
+
getFolderContentsById(folderId, type);
}
@@ -129,11 +154,11 @@ function getAppsList() {
return !app.legacy;
});
// Sort apps alphabetically
- apps = _.sortBy(apps, [function(o) {
+ appsList = _.sortBy(apps, [function(o) {
return o.name;
}]);
// Add apps to HTML
- apps.forEach(addApps);
+ appsList.forEach(addApps);
navigateToDefaultFolder();
});
@@ -162,7 +187,7 @@ function getFolderContentsById(id, type, isSearchNav) {
filterFolders = function(folder) {
return !folder.parentFolderId;
};
- } else if(type === "organization"){
+ } else if (type === "organization"){
options.organizationId = currentOrganizationId = id;
currentAppId = null;
currentFolderId = null;
@@ -183,7 +208,7 @@ function getFolderContentsById(id, type, isSearchNav) {
$folderContents.empty();
Fliplet.Media.Folders.get(options).then(function(response) {
- if(!isSearchNav) {
+ if (!isSearchNav) {
var navItem = navStack[navStack.length - 1];
switch (navItem.type) {
case 'organizationId':
@@ -207,6 +232,7 @@ function getFolderContentsById(id, type, isSearchNav) {
return;
}
}
+
if (response.files.length === 0 && response.folders.length === 0) {
$('.empty-state').addClass('active');
$('.file-cell.selectable').addClass('active');
@@ -388,6 +414,7 @@ function addFolder(folder) {
folders.push(folder);
$('.empty-state').removeClass('active');
+
// Toggle checkbox header to false
$('.file-table-header input[type="checkbox"]').prop('checked', false);
$('.file-cell.selectable').css({'opacity': '1', 'visibility': 'visible'});
@@ -593,7 +620,6 @@ function uploadFiles(files) {
});
}
-
// Sorts items by name
function sortItems(items) {
return _.sortBy(items, [
@@ -607,7 +633,7 @@ function sortItems(items) {
// Adds single item to DOM
function renderItem(item, isFolder, insertIndex) {
var template = isFolder ? templates.folder(item) : templates.file(item);
-
+
if (insertIndex >= 0) {
var $item = $folderContents.find('.file-row').eq(insertIndex);
$item.before(template);
@@ -620,13 +646,13 @@ function renderItem(item, isFolder, insertIndex) {
function renderList() {
var folders = sortItems(currentFolders);
var files = sortItems(currentFiles);
-
+
$folderContents.empty();
-
+
folders.forEach(function (folder) {
renderItem(folder, true);
});
-
+
files.forEach(function (file) {
renderItem(file, false);
});
@@ -638,16 +664,16 @@ function findItemInsertIndex(item, isFolder) {
items = items.filter(function (i) {
return i.id !== item.id;
});
-
+
var insertIndex = -1;
-
+
for (var i = 0; i < items.length; i++) {
if (items[i].name.toLowerCase() > item.name.toLowerCase()) {
insertIndex = i;
break;
}
}
-
+
if (insertIndex === -1) {
if (isFolder) {
if (currentFolders.length) {
@@ -661,7 +687,7 @@ function findItemInsertIndex(item, isFolder) {
}
}
}
-
+
return insertIndex;
}
@@ -675,7 +701,7 @@ function search(type, term) {
var query = {
name: term
};
-
+
if (type == 'all') {
if (currentAppId) {
query.appId = currentAppId;
@@ -691,7 +717,7 @@ function search(type, term) {
query.organizationId = currentOrganizationId;
}
}
-
+
return Fliplet.Media.Folders.search(query).then(function (result) {
currentSearchResult = result;
renderSearchResult(result, type);
@@ -700,23 +726,23 @@ function search(type, term) {
function renderSearchResult(result, searchType) {
enableSearchState();
-
+
if (!result || !result.length) {
showNothingFoundAlert(true);
return;
}
-
+
if (searchType == 'all') {
resetToTop();
}
-
+
result = result
.filter(function (item) {
return !item.deletedAt;
})
.map(function (item) {
item.relativePath = calculatePath(item);
-
+
if (item.parentId) {
item.parentItemType = 'folder';
item.parentItemId = item.parentId;
@@ -727,20 +753,20 @@ function renderSearchResult(result, searchType) {
item.parentItemType = 'organization';
item.parentItemId = item.organizationId;
}
-
+
if (item.type !== 'folder') {
item.dimensions = item.size ? item.size.join('x') : null;
}
-
+
return item;
});
-
+
$pagination.pagination({
dataSource: result,
pageSize: 10,
callback: function (data) {
$folderContents.empty();
-
+
data.forEach(function (item) {
if (item.type === 'folder') {
addFolder(item)
@@ -758,7 +784,7 @@ function calculatePath(item) {
var path = [];
var separator = '/';
var isLast = false;
-
+
var getNames = function (item) {
if (!item) {
return;
@@ -768,14 +794,14 @@ function calculatePath(item) {
} else {
isLast = true;
}
-
+
if (isLast && item.id === +currentFolderId) {
return;
}
-
+
path.push(item.name);
};
-
+
getNames(item.parentFolder);
return separator + path.join(separator);
}
@@ -807,21 +833,21 @@ function updateBreadcrumbsBySearchItem(item) {
if (!item) {
return;
}
-
+
var tempNav = [];
var isLast = false;
-
+
var getParents = function (parent) {
if (parent.parentFolder) {
getParents(parent.parentFolder);
} else {
isLast = true;
}
-
+
if (isLast && parent.id === +currentFolderId) {
return;
}
-
+
tempNav.push({
id: parent.id,
name: parent.name,
@@ -831,9 +857,9 @@ function updateBreadcrumbsBySearchItem(item) {
}
});
};
-
+
getParents(item);
-
+
navStack = navStack.concat(tempNav);
updatePaths();
}
@@ -866,13 +892,249 @@ function backToLastFolderBeforeSearch() {
}
function showNothingFoundAlert(isShow){
- if(isShow){
+ if (isShow) {
$('.search-empty-state').addClass('active');
- }else{
+ } else {
$('.search-empty-state').removeClass('active');
}
}
+// FUNCTIONS FOR MOVING FILES/FOLDERS IN MODAL
+
+// Add app select item template
+function addAppsToSelect(apps) {
+ var $appSelectList = $('#organization-optgroup-' + apps.organizationId);
+
+ $appSelectList.append(templates.appsSelect(apps));
+}
+
+// Create list of folders in modal
+function addFoldersToMoveModal(folders) {
+ if (Array.isArray(folders)) {
+ if (folders.length < 1) {
+ $emptyStateBlock.addClass('active');
+ } else {
+ folders = _.sortBy(folders, [function(o) {
+ return o.name;
+ }]);
+
+ folders.forEach(function (folder) {
+ $foldersList.append(templates.moveModalFolders(folder));
+ });
+ }
+ } else {
+ $foldersList.append(templates.moveModalFolders(folders));
+ $emptyStateBlock.removeClass('active');
+ }
+}
+
+// Add organization select item template
+function addOrganizationsToSelect(org) {
+ $modalSelect.append(templates.organizationsSelect(org));
+ appsList.forEach(addAppsToSelect);
+}
+
+// Users selected folders tree (for breadcrumbs)
+function addPathToStack(id, name, orgId, appId, parentId, type) {
+ foldersForMoving.navStack.push({
+ id: Number(id) || null,
+ name: name,
+ organizationId: Number(orgId) || null,
+ appId: Number(appId) || null,
+ parentId: Number(parentId) || null,
+ type: type
+ });
+}
+
+// Check if any folders exists
+function checkExistsMovingFolders(id) {
+ if (foldersForMoving.hasOwnProperty(id)) {
+ return foldersForMoving[id];
+ } else {
+ return false;
+ }
+}
+
+// Function for creating breadcrumbs
+function createMoveModalBreadCrumbsPaths() {
+ var $breadcrumbsWrapping = $moveModal.find('.current-folder-title');
+
+ $breadcrumbsWrapping.html('');
+
+ if (foldersForMoving.navStack.length) {
+ for (var i = 0; i < foldersForMoving.navStack.length; i++) {
+ $breadcrumbsWrapping.append(templates.breadcrumbsItem(foldersForMoving.navStack[i]));
+ }
+ }
+}
+
+// Create array tree form search result
+function createTreeFoldersArr(arr) {
+ var currentArr = arr;
+
+ function transformToTree(arr) {
+ var nodes = {};
+
+ return arr.filter(function(obj) {
+ var id = obj.id;
+ var parentId = obj.parentId;
+
+ nodes[id] = _.defaults(obj, nodes[id], { children: [] });
+ parentId && (nodes[parentId] = (nodes[parentId] || { children: [] })).children.push(obj);
+
+ return !parentId;
+ });
+ }
+ return transformToTree(currentArr);
+}
+
+// Redefinition of dynamic elements after open modal
+function declareVariablesForMoveModal() {
+ $moveModal = $('#move-modal');
+ $modalSelect = $('#move-model-organizations-select');
+ $emptyStateBlock = $('.move-modal-empty-state');
+ $foldersList = $('.move-modal-list');
+ $loadingBlock = $('.move-modal-loading');
+ $moveButton = $('[data-move-button]');
+ $folderForMoving = $('[data-move-folder]');
+}
+
+// Check if folder that has selected items to move has a subfolder and filter it
+function excludeFolders(items) {
+ var parentItemIdOfSelectedItems = navStack[navStack.length-1].id;
+ var selectedIdPlaceInModal = foldersForMoving.navStack[foldersForMoving.navStack.length-1].id;
+ var searchingResults = items;
+ var selectedIdForMoving = [];
+
+ for (var i = 0; i < selectedItemsForMoving.length; i++) {
+ if ($(selectedItemsForMoving[i]).attr('data-file-type') === 'folder') {
+ selectedIdForMoving.push(Number($(selectedItemsForMoving[i]).attr('data-id')));
+ }
+ }
+
+ if (parentItemIdOfSelectedItems === selectedIdPlaceInModal) {
+ searchingResults = searchingResults.filter(function (item) {
+ for (var i = 0; i < selectedIdForMoving.length; i++) {
+ return item.id !== selectedIdForMoving[i];
+ }
+ });
+ }
+
+ return searchingResults;
+}
+
+// Create and open move modal
+function openMovePopup() {
+ foldersForMoving.navStack = [];
+ selectedItemsForMoving = $('.file-row.active');
+
+ var objData = {
+ items: selectedItemsForMoving,
+ itemsLength: selectedItemsForMoving.length
+ };
+
+ $fileManagerBlock.append(templates.moveModal(objData));
+
+ declareVariablesForMoveModal();
+
+ $moveModal.modal('show');
+
+ organizationsList.forEach(addOrganizationsToSelect);
+
+ var $moveSelectPlaces = $modalSelect.find('option').first();
+ var id = $moveSelectPlaces.attr('data-id');
+ var type = $moveSelectPlaces.attr('data-type');
+ var name = $moveSelectPlaces.val();
+
+ addPathToStack(id, name, null, null, null, type);
+
+ searchFolders(id, type);
+}
+
+// Function for opening children folders
+function openChildrenFolders(folderId) {
+ var id = $modalSelect.find(':selected').attr('data-id');
+ var folders = [];
+ var folder;
+
+ folderId = +folderId;
+
+ foldersForMoving[id].forEach(function (currChild) {
+ if (!!searchTree(currChild, folderId)) {
+ folder = searchTree(currChild, folderId);
+ }
+ });
+
+ folders = folder.children;
+ $foldersList.html('');
+
+ addFoldersToMoveModal(folders);
+
+ createMoveModalBreadCrumbsPaths();
+}
+
+// Call method for searching folders for selected app/organization
+function searchFolders(id, type) {
+ $foldersList.html('');
+
+ if (checkExistsMovingFolders(id)) {
+ addFoldersToMoveModal(checkExistsMovingFolders(id));
+ createMoveModalBreadCrumbsPaths();
+ } else {
+ var filterFolders = function(folders) {
+ return true;
+ };
+ var body = {};
+
+ if (type === 'organizationId') {
+ body.organizationId = id;
+
+ filterFolders = function(folder) {
+ return (!(folder.appId || folder.parentFolderId) && folder.type === 'folder');
+ };
+ } else if (type === 'appId') {
+ body.appId = id;
+
+ filterFolders = function(folder) {
+ return (!(folder.parentFolderId) && folder.type === 'folder');
+ };
+ }
+
+ $loadingBlock.addClass('visible');
+
+ Fliplet.Media.Folders.search(body).then(function(response) {
+ response = response.filter(filterFolders);
+ response = createTreeFoldersArr(excludeFolders(response));
+ foldersForMoving[id] = response;
+
+ addFoldersToMoveModal(response);
+ createMoveModalBreadCrumbsPaths();
+
+ $loadingBlock.removeClass('visible');
+ });
+ }
+}
+
+// Function for searching folders in array tree by id
+function searchTree(currChild, searchString) {
+ if (currChild.id === searchString) {
+ return currChild;
+ }
+
+ if (currChild.children !== null) {
+ var result = null;
+ var i;
+
+ for (i = 0; result === null && i < currChild.children.length; i++) {
+ result = searchTree(currChild.children[i], searchString);
+ }
+
+ return result;
+ }
+
+ return null;
+}
+
$dropZone.on('drop', function(e) {
e.preventDefault();
hideDropZone();
@@ -898,7 +1160,8 @@ $('html').on('dragenter', function(e) {
// EVENTS //
// Removes options popup by clicking elsewhere
-$(document).on("click", function(e) {
+$(document)
+ .on("click", function(e) {
if ($(e.target).is(".new-menu") === false && $(e.target).is("ul") === false) {
$('.new-menu').removeClass('active');
}
@@ -953,9 +1216,18 @@ $('.file-manager-wrapper')
})
.on('click', '[data-create-folder]', function(event) {
// Creates folder
+ var isCreatingInModal = $(this).attr('data-create-folder-modal');
var folderName = prompt('Type folder name');
- var lastFolderSelected = navStack[navStack.length - 1];
-
+ var lastFolderMainNavStack = navStack[navStack.length - 1];
+ var lastFolderModalNavStack;
+ var lastFolderSelected;
+
+ if (isCreatingInModal) {
+ lastFolderModalNavStack = foldersForMoving.navStack[foldersForMoving.navStack.length - 1];
+ }
+
+ lastFolderSelected = !isCreatingInModal ? lastFolderMainNavStack : lastFolderModalNavStack;
+
var options = {
name: folderName,
parentId: currentFolderId || undefined
@@ -964,10 +1236,10 @@ $('.file-manager-wrapper')
if (!folderName) {
return;
}
-
- if (lastFolderSelected.type === "appId") {
+
+ if (lastFolderSelected.type === 'appId') {
options.appId = lastFolderSelected.id;
- } else if (lastFolderSelected.type === "organizationId") {
+ } else if (lastFolderSelected.type === 'organizationId') {
options.organizationId = lastFolderSelected.id;
} else {
options.parentId = lastFolderSelected.id;
@@ -978,13 +1250,22 @@ $('.file-manager-wrapper')
options.appId = lastFolderSelected.appId;
}
}
-
- Fliplet.Media.Folders.create(options).then(function (folder) {
- addFolder(folder);
- insertItem(folder, true);
+
+ Fliplet.Media.Folders.create(options).then( function (folder) {
+ if (!isCreatingInModal || lastFolderMainNavStack.id === lastFolderModalNavStack.id) {
+ addFolder(folder);
+ insertItem(folder, true);
+ }
+
+ if (isCreatingInModal) {
+ folder.children = [];
+
+ addFoldersToMoveModal(folder);
+ }
});
-
- $('.new-btn').click();
+ if (!isCreatingInModal) {
+ $('.new-btn').click();
+ }
})
.on('submit', '[data-upload-file]', function(event) {
// Upload file
@@ -1122,6 +1403,9 @@ $('.file-manager-wrapper')
window.location.href = '/v1/media/zip?' + contextType + '=' + contextId + params;
})
+ .on('click', '[move-action]', function() {
+ openMovePopup();
+ })
.on('click', '[open-action]', function() {
// Open folder or file
var itemID = $('.file-row.active').data('id');
@@ -1163,7 +1447,7 @@ $('.file-manager-wrapper')
}
}
})
- .on('click', '.header-breadcrumbs [data-breadcrumb]', function() {
+ .on('click', '.file-manager-body .header-breadcrumbs [data-breadcrumb]', function() {
var index = $(this).data('breadcrumb');
var position = index + 1;
@@ -1225,6 +1509,139 @@ $('.file-manager-wrapper')
}
$searchTerm.keyup();
+ })
+ .on('hidden.bs.modal', '#move-modal', function() {
+ $(this).remove();
+ foldersForMoving = {};
+ })
+ .on('change', '#move-model-organizations-select', function() {
+ var type = $(this).find(':selected').attr('data-type');
+ var id = $(this).find(':selected').attr('data-id');
+ var name = $(this).find(':selected').val();
+
+ $loadingBlock.removeClass('visible');
+ $emptyStateBlock.removeClass('active');
+ $moveButton.attr('disabled');
+
+ foldersForMoving.navStack = [];
+
+ addPathToStack(id, name, null, null, null, type);
+
+ searchFolders(id, type);
+ })
+ .on('click', '[data-move-folder]', function() {
+ $moveButton.removeAttr('disabled');
+ $folderForMoving.removeClass('selected');
+ $(this).addClass('selected');
+ })
+ .on('dblclick', '[data-move-folder]', function() {
+ if ($(this).hasClass('children')) {
+ addPathToStack(
+ $(this).attr('data-folder-id'),
+ $(this).text(),
+ $(this).attr('data-org-id'),
+ $(this).attr('data-app-id'),
+ $(this).attr('data-parent-id'),
+ 'folder'
+ );
+
+ openChildrenFolders($(this).attr('data-folder-id'));
+ }
+
+ $moveButton.attr('disabled');
+ })
+ .on('click', '[data-breadcrumb-item]', function() {
+ var index = Number($(this).parent().index());
+ var id = $(this).attr('data-breadcrumb');
+ var type = $(this).attr('data-breadcrumb-type');
+
+ $emptyStateBlock.removeClass('active');
+
+ if (index !== foldersForMoving.navStack.length - 1) {
+ $foldersList.html('');
+
+ foldersForMoving.navStack.splice(index + 1, foldersForMoving.navStack.length - 1 - index);
+
+ if (type === 'organizationId' || type === 'appId') {
+ addFoldersToMoveModal(foldersForMoving[id]);
+ } else {
+ openChildrenFolders(id);
+ }
+
+ createMoveModalBreadCrumbsPaths();
+ }
+ })
+ .on('click', '[data-move-button]', function() {
+ var $selectedPlace = $foldersList.find('.selected');
+ var appId;
+ var orgId;
+ var folderId;
+ var updateMethod;
+
+ if ($selectedPlace.length) {
+ appId = Number($selectedPlace.attr('data-app-id'));
+ orgId = Number($selectedPlace.attr('data-org-id'));
+ folderId = Number($selectedPlace.attr('data-folder-id'));
+ } else {
+ var selectedPath = foldersForMoving.navStack[foldersForMoving.navStack.length - 1];
+
+ if (selectedPath.type === 'appId') {
+ appId = selectedPath.id;
+ } else if (selectedPath.type === 'organizationId') {
+ orgId = selectedPath.id;
+ } else {
+ appId = selectedPath.appId;
+ orgId = selectedPath.organizationId;
+ }
+
+ folderId = selectedPath.parentId;
+ }
+
+ appId = appId || null;
+ orgId = orgId || null;
+ folderId = folderId || null;
+
+ $moveModal.modal('hide');
+
+ $(selectedItemsForMoving).each(function(index) {
+ var $element = $(this);
+
+ $element.addClass('moving');
+ $element.removeClass('active');
+
+ if ($element.attr('data-file-type') === 'folder') {
+ updateMethod = Fliplet.Media.Folders.update(
+ Number($element.attr('data-id')),
+ {
+ appId: appId,
+ parentId: folderId,
+ organizationId: orgId
+ }
+ )
+ } else {
+ updateMethod = Fliplet.Media.Files.update(
+ Number($element.attr('data-id')),
+ {
+ appId: appId,
+ mediaFolderId: folderId,
+ organizationId: orgId
+ }
+ )
+ }
+
+ updateMethod
+ .then(function() {
+ checkboxStatus();
+
+ if (selectedItemsForMoving.length - 1 === index) {
+ $(selectedItemsForMoving).remove();
+ }
+ })
+ .catch(function () {
+ $element.removeClass('moving');
+ alert('Error while moving an item!');
+ });
+ });
});
/* Resize sidebar
.on('mousedown', '.split-bar', function(e) {