diff --git a/packages/file-handling/src/nextcloud-file-picker.js b/packages/file-handling/src/nextcloud-file-picker.js
index d03d98d1d6834f4a54acc0dc7df604c90fa689b8..d030b0a74a064b07e5dadeff439ba254d547496b 100644
--- a/packages/file-handling/src/nextcloud-file-picker.js
+++ b/packages/file-handling/src/nextcloud-file-picker.js
@@ -71,6 +71,9 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
this.boundCloseBreadcrumbMenuHandler = this.hideBreadcrumbMenu.bind(this);
this.initateOpenBreadcrumbMenu = false;
+ this.boundClickOutsideNewFolderHandler = this.cancelNewFolderCreation.bind(this);
+ this.initateOpenNewFolder = false;
+
this.disableRowClick = false;
}
@@ -178,6 +181,9 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
responsiveLayout: "collapse",
responsiveLayoutCollapseStartOpen: false,
resizableColumns: false,
+ // autoResize: true, //TODO
+ // virtualDomBuffer: 1000, //TODO
+ // reactiveData: true, //TODO
columns: [
{
width: 32,
@@ -285,7 +291,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
}
},
rowSelectionChanged: (data, rows) => {
- if (!this.disableRowClick) {
+ if (!this.disableRowClick) { //TODO delete condition? - should not be able to select things
if (data.length > 0 && this.directoriesOnly) {
this.folderIsSelected = i18n.t('nextcloud-file-picker.load-to-folder');
} else {
@@ -330,11 +336,11 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
} else {
row.deselect();
}
- } else {
- // TODO
+ } else { // TODO
console.log('reached');
if (this._('#tf-new-folder')) {
this._('#tf-new-folder').focus();
+ // this._('#tf-new-folder').select();
}
}
},
@@ -347,8 +353,11 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
}*/
},
rowAdded: (row) => {
- if (that._('#new-folder-row')) { //TODO find a better condition
+ console.log('row added');
+ if (!this.disableRowClick) { //TODO find a better condition-name
row.getElement().classList.toggle("addRowAnimation");
+ } else {
+ console.log('in new folder row');
}
},
dataLoaded: () => {
@@ -391,8 +400,6 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
// that.addFolder();
// }
// });
-
-
});
}
@@ -681,7 +688,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
this.isInRecent = false;
this.isInFilteredRecent = false;
this.isInFavorites = true;
-
+
if (this.webDavClient === null) {
// client is broken reload try to reset & reconnect
this.tabulatorTable.clearData();
@@ -1236,7 +1243,6 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
this.dispatchEvent(event);
}
-
/**
* Upload Files to a directory
*
@@ -1636,9 +1642,10 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
addOpenFolderTableEntry() {
const i18n = this._i18n;
- if (this._('.addRowAnimation')) {
+ if (this._('.addRowAnimation')) { //TODO verify
this._('.addRowAnimation').classList.remove('addRowAnimation');
}
+ this.disableRowClick = true;
let props = {permissions: 'RGDNVCK'};
var row = {
@@ -1647,52 +1654,129 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
basename: "",
props: props
};
- this.tabulatorTable.addRow(row, 1, 1);
+
+ var data = this.tabulatorTable.getData();
+ console.log('1', data);
+
+ const that = this;
+
+ // this.tabulatorTable.addData(row, true); //this
+ this.tabulatorTable.addRow(row, true, 1).then(() => {
- // row id
- this._('#directory-content-table').querySelector("div.tabulator-tableHolder > div.tabulator-table > div.tabulator-row:nth-child(1)").setAttribute('id', 'new-folder-row');
+ // setTimeout(function(){
+ // that.tabulatorTable.redraw(true);
+ // }, 0);
- this._('#new-folder-row').setAttribute('style', 'background: #259207; color: white');
- this._('#new-folder-row').querySelector("div.tabulator-cell:nth-child(1) > div > span.tabulator-responsive-collapse-toggle-open").classList.add('new-folder-selected');
- this._('#new-folder-row').querySelector("div.tabulator-cell:nth-child(1) > div > span.tabulator-responsive-collapse-toggle-close").classList.add('new-folder-selected');
+ that._('#directory-content-table').querySelector("div.tabulator-tableHolder > div.tabulator-table > div.tabulator-row:nth-child(1)").setAttribute('id', 'new-folder-row');
+ that._('#new-folder-row').classList.toggle('highlighted');
- this._('#new-folder-row').querySelector("div.tabulator-cell:nth-child(6)").innerText = '';
- this._('#new-folder-row').querySelector("div.tabulator-cell:nth-child(3)").setAttribute('id', 'new-folder-cell');
+ that._('#new-folder-row').querySelector("div.tabulator-cell:nth-child(1) > div > span.tabulator-responsive-collapse-toggle-open").classList.add('new-folder-selected');
+ that._('#new-folder-row').querySelector("div.tabulator-cell:nth-child(1) > div > span.tabulator-responsive-collapse-toggle-close").classList.add('new-folder-selected');
+ that._('#new-folder-row').querySelector("div.tabulator-cell:nth-child(6)").innerText = '';
- // add text input field
- this._('#new-folder-cell').innerHTML = '<input type="text" class="input" name="tf-new-folder" id ="tf-new-folder" value="" placeholder="'+ i18n.t('nextcloud-file-picker.new-folder-placeholder') + '" />';
+ that._('#new-folder-row').querySelector("div.tabulator-cell:nth-child(3)").setAttribute('id', 'new-folder-cell');
- // add event listener for pressing enter to save new folder with given name
- this._('#tf-new-folder').addEventListener("keyup", ({key}) => {
- if (key === "Enter") {
- console.log('enter pressed');
- this.addNewFolder();
- }
- })
+ // add text input field
+ that._('#new-folder-cell').innerHTML = '<input type="text" class="input" name="tf-new-folder" id ="tf-new-folder" value="'+ i18n.t('nextcloud-file-picker.new-folder-placeholder') +'" placeholder="'+ i18n.t('nextcloud-file-picker.new-folder-placeholder') + '" />';
- this._('#tf-new-folder').addEventListener("keyup", ({key}) => {
- if (key === "Escape") {
- console.log('ESC pressed');
- // TODO abbrechen
- }
- })
+ that._('#tf-new-folder').addEventListener("keydown", ({key}) => {
+ if (key === "Enter") {
+ console.log('ENTER pressed');
+ that.addNewFolder();
+ }
+ })
- this._('#tf-new-folder').addEventListener("click", ({key}) => {
- //TODO add click rules
- })
+ that._('#tf-new-folder').addEventListener("keydown", ({key}) => {
+ if (key === "Escape") {
+ console.log('ESC pressed');
+ that.cancelNewFolderCreation();
+ }
+ })
+ that._('#tf-new-folder').addEventListener("click", (event) => {
+ // console.log('clicked inside', event);
+ that._('#tf-new-folder').select();
+ event.stopPropagation();
+ })
- // during folder creation it should not be possible to click something
- this.disableRowClick = true;
+ that.initateOpenNewFolder = true;
+
+ }).catch((error) => {
+ console.log('error', error);
+ });
- // disable selection of rows during folder creation
- this.tabulatorTable.getRows().forEach((row) => {
- row.getElement().classList.add("no-select");
- row.getElement().classList.remove("tabulator-selectable");
- })
+ var data2 = this.tabulatorTable.getData();
+ console.log('2', data2);
+
+ // row id
+ // this._('#directory-content-table').querySelector("div.tabulator-tableHolder > div.tabulator-table > div.tabulator-row:nth-child(1)").setAttribute('id', 'new-folder-row');
+
+ // this._('#new-folder-row').setAttribute('style', 'background: #259207; color: white');
+ // this._('#new-folder-row').querySelector("div.tabulator-cell:nth-child(1) > div > span.tabulator-responsive-collapse-toggle-open").classList.add('new-folder-selected');
+ // this._('#new-folder-row').querySelector("div.tabulator-cell:nth-child(1) > div > span.tabulator-responsive-collapse-toggle-close").classList.add('new-folder-selected');
+
+ // this._('#new-folder-row').querySelector("div.tabulator-cell:nth-child(6)").innerText = '';
+ // this._('#new-folder-row').querySelector("div.tabulator-cell:nth-child(3)").setAttribute('id', 'new-folder-cell');
+
+ // // add text input field
+ // this._('#new-folder-cell').innerHTML = '<input type="text" class="input" name="tf-new-folder" id ="tf-new-folder" value="'+ i18n.t('nextcloud-file-picker.new-folder-placeholder') +'" placeholder="'+ i18n.t('nextcloud-file-picker.new-folder-placeholder') + '" />';
+
+ // this._('#tf-new-folder').addEventListener("keydown", ({key}) => {
+ // if (key === "Enter") {
+ // console.log('ENTER pressed');
+ // this.addNewFolder();
+ // }
+ // })
+
+ // this._('#tf-new-folder').addEventListener("keydown", ({key}) => {
+ // if (key === "Escape") {
+ // console.log('ESC pressed');
+ // this.cancelNewFolderCreation();
+ // }
+ // })
+
+ // this._('#tf-new-folder').addEventListener("click", (event) => {
+ // console.log('clicked inside', event);
+ // //TODO do we need to set focus?
+ // this._('#tf-new-folder').select();
+ // event.stopPropagation();
+ // })
+
+ // document.addEventListener('click', this.boundClickOutsideNewFolderHandler);
+ // this.initateOpenNewFolder = true;
+
+ // // during folder creation it should not be possible to click something
+ document.addEventListener('click', this.boundClickOutsideNewFolderHandler);
+
+ // // disable selection of rows during folder creation
+ // this.tabulatorTable.getRows().forEach((row) => {
+ // row.getElement().classList.add("no-select");
+ // row.getElement().classList.remove("tabulator-selectable");
+ // })
// set focus to text field
// this._('#tf-new-folder').focus();
+ // this._('#tf-new-folder').select();
+ }
+
+ cancelNewFolderCreation() {
+
+ if (this.initateOpenNewFolder) {
+ this.initateOpenNewFolder = false;
+ return;
+ }
+
+ console.log('canceled folder creation');
+
+ this._('#new-folder-row').classList.toggle('highlighted');
+
+ var row = this.tabulatorTable.getRowFromPosition(0);
+ if (row) {
+ row.delete();
+ }
+
+ this.disableRowClick = false;
+ document.removeEventListener('click', this.boundClickOutsideNewFolderHandler);
}
addNewFolder() {
@@ -1702,8 +1786,11 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
if (typeof this.directoryPath === 'undefined') {
this.directoryPath = '';
}
+ this.cancelNewFolderCreation();
+
let folderPath = this.directoryPath + "/" + folderName;
this.webDavClient.createDirectory(folderPath).then(contents => {
+
const d = new Date();
let props = {permissions: 'RGDNVCK'};
this.tabulatorTable.addRow({
@@ -1728,24 +1815,18 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
}
})
.finally(() => { // folder should be created now - delete default entry
- // this.tabulatorTable.deleteRow(row);
- var row = this.tabulatorTable.getRowFromPosition(1);
- row.delete();
- // console.log(this.tabulatorTable.getData());
- this.disableRowClick = false;
-
-
- this.tabulatorTable.getRows().forEach((row) => {
- let data = row.getData();
- if (!this.checkFileType(data, this.allowedMimeTypes)) {
- row.getElement().classList.remove("no-select");
- row.getElement().classList.add("tabulator-selectable");
- }
- if (!(this.directoriesOnly && typeof data.mime !== 'undefined')) {
- row.getElement().classList.remove("no-select");
- row.getElement().classList.add("tabulator-selectable");
- }
- })
+
+ // this.tabulatorTable.getRows().forEach((row) => {
+ // let data = row.getData();
+ // if (!this.checkFileType(data, this.allowedMimeTypes)) {
+ // row.getElement().classList.remove("no-select");
+ // row.getElement().classList.add("tabulator-selectable");
+ // }
+ // if (!(this.directoriesOnly && typeof data.mime !== 'undefined')) {
+ // row.getElement().classList.remove("no-select");
+ // row.getElement().classList.add("tabulator-selectable");
+ // }
+ // })
});
}
}
@@ -1856,17 +1937,17 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
}}" title="${i18n.t('nextcloud-file-picker.folder-home')}"><dbp-icon name="home"></dbp-icon> </a></span>`;
if (this.isInFavorites) {
- htmlpath[1] = html`<span> › </span><span class="breadcrumb special"><a @click="${() => {
+ htmlpath[1] = html`<span class="first"> › </span><span class="breadcrumb special"><a @click="${() => {
this.loadFavorites();
}}" title="${i18n.t('nextcloud-file-picker.favorites-title')}">${i18n.t('nextcloud-file-picker.favorites-title')}</a></span>`;
} else if (this.isInRecent) {
- htmlpath[1] = html`<span> › </span><span class="breadcrumb special"><a @click="${() => {
+ htmlpath[1] = html`<span class="first"> › </span><span class="breadcrumb special"><a @click="${() => {
this.loadAllRecentFiles();
}}" title="${i18n.t('nextcloud-file-picker.recent-files-title')}">${i18n.t('nextcloud-file-picker.recent-files-title')}</a></span>`;
} else if (this.isInFilteredRecent) {
- htmlpath[1] = html`<span> › </span><span class="breadcrumb special"><a @click="${() => {
+ htmlpath[1] = html`<span class="first"> › </span><span class="breadcrumb special"><a @click="${() => {
this.loadMyRecentFiles();
}}" title="${i18n.t('nextcloud-file-picker.my-recent-files-title')}">${i18n.t('nextcloud-file-picker.my-recent-files-title')}</a></span>`;
@@ -1883,9 +1964,15 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
path += directories[j];
}
- htmlpath[i] = html`<span> › </span><span class="breadcrumb"><a @click="${() => {
- this.loadDirectory(path);
- }}" title="${i18n.t('nextcloud-file-picker.load-path-link', {path: directories[i]})}">${directories[i]}</a></span>`;
+ if (i === 1) {
+ htmlpath[i] = html`<span class="first"> › </span><span class="breadcrumb"><a @click="${() => {
+ this.loadDirectory(path);
+ }}" title="${i18n.t('nextcloud-file-picker.load-path-link', {path: directories[i]})}">${directories[i]}</a></span>`;
+ } else {
+ htmlpath[i] = html`<span> › </span><span class="breadcrumb"><a @click="${() => {
+ this.loadDirectory(path);
+ }}" title="${i18n.t('nextcloud-file-picker.load-path-link', {path: directories[i]})}">${directories[i]}</a></span>`;
+ }
}
let length = htmlpath.length;
@@ -1914,8 +2001,8 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
let shortcrumb = [];
shortcrumb[0] = htmlpath[0];
- shortcrumb[1] = html`<span> › </span>
- <span class="breadcrumb"><a class="extended-breadcrumb-link" @click="${() => { this.toggleBreadcrumbMenu(); }}" title="TODO">. . .</a><div class="breadcrumb-menu"><ul class='extended-breadcrumb-menu hidden'>${path_temp}</ul></div></span>`;
+ shortcrumb[1] = html`<span class="first"> › </span>
+ <span class="breadcrumb"><a class="extended-breadcrumb-link" @click="${() => { this.toggleBreadcrumbMenu(); }}">. . .</a><div class="breadcrumb-menu"><ul class='extended-breadcrumb-menu hidden'>${path_temp}</ul></div></span>`;
shortcrumb[2] = htmlpath[length - 1];
@@ -2036,6 +2123,25 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
${commonStyles.getRadioAndCheckboxCss()}
${fileHandlingStyles.getFileHandlingCss()}
+ #new-folder-row.highlighted {
+ background: #259207;
+ color: white;
+ }
+
+ span.first {
+ margin-left: -6px;
+ }
+
+ a.home-link {
+ padding-left: 6px;
+ padding-right: 6px;
+ margin-left: -6px;
+ }
+
+ .extended-menu-link {
+ padding: 7px;
+ }
+
.breadcrumb.special a {
overflow: visible;
}
@@ -2056,8 +2162,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
}
.nextcloud-header {
- /** padding-bottom: 40px; 10px**/
- /** height: 33px; TODO nur mobil! **/
+ padding-bottom: 7px;
}
.breadcrumb-menu {
@@ -2302,7 +2407,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
.additional-menu {
white-space: nowrap;
height: 33px;
- margin-right: -8px
+ margin-right: -12px; /*-15px; -8px*/
}
.nextcloud-nav p {
@@ -2522,6 +2627,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
height: 22.4px;
/*top: 4px;*/
width: 19px;
+ margin-top: 4px;
}
.nextcloud-nav a.home-link {
@@ -2532,12 +2638,20 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
and (orientation: portrait)
and (max-width: 768px) {
+ .nextcloud-header {
+ padding-bottom: 0px;
+ }
+
+ .extended-breadcrumb-link {
+ margin-top: -2px; /*TODO verify*/
+ }
+
.extended-menu {
top: 0px;
}
.breadcrumb .extended-breadcrumb-menu a {
- /** overflow: visible; **/
+ /* overflow: visible; */
display: inherit;
}