WikiNavigation, rename/delete
This commit is contained in:
parent
296ad3a2ce
commit
7365248bf3
@ -1,8 +1,9 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
class WikiDropdownHelper {
|
class WikiDropdownHelper {
|
||||||
constructor(element) {
|
constructor(element, onChange) {
|
||||||
this.dd = element;
|
this.dd = element;
|
||||||
|
this.dd.addEventListener('change', e=>onChange(+e.target.value||0));
|
||||||
}
|
}
|
||||||
clear() {
|
clear() {
|
||||||
while (this.dd.hasChildNodes()) {
|
while (this.dd.hasChildNodes()) {
|
||||||
@ -20,18 +21,26 @@ class WikiDropdownHelper {
|
|||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
rename(value, text) {
|
delete(value) {
|
||||||
this.dd.querySelector(`option[value="${value}"]`).innerHTML=text;
|
let index = Array.from(this.dd.options).findIndex(option=>option.value==value);
|
||||||
|
if (index>0) {
|
||||||
|
this.dd.remove(index);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
rename(value, newText) {
|
||||||
|
this.dd.querySelector(`option[value="${value}"]`).innerHTML=newText;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
get() {
|
get() {
|
||||||
return {
|
return {
|
||||||
text:this.dd.parentElement.value,
|
text:this.dd.options[this.dd.selectedIndex].innerHTML,
|
||||||
value:this.dd.parentElement.text
|
value:this.dd.value
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
set(value) {
|
set(value) {
|
||||||
this.dd.parentElement.value=value;
|
this.dd.parentElement.value=value;
|
||||||
// this.onSelectWiki(value);
|
// this.onSelectWiki(value);
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -10,23 +10,54 @@ class WikiNavigation {
|
|||||||
this.onSelectWiki = onSelectWiki;
|
this.onSelectWiki = onSelectWiki;
|
||||||
|
|
||||||
let wikiSelector = container.getElementsByTagName('select')[0];
|
let wikiSelector = container.getElementsByTagName('select')[0];
|
||||||
this.dd = new WikiDropdownHelper(wikiSelector);
|
|
||||||
wikiSelector.addEventListener('change', e=>{
|
let appNavigationMenu = container.getElementsByClassName('app-navigation-entry-menu')[0];
|
||||||
if(self.onSelectWiki) {
|
let menuEntry = {
|
||||||
self.onSelectWiki(+e.target.value||0);
|
add:appNavigationMenu.querySelector('[data-id="add"]'),
|
||||||
}
|
rename:appNavigationMenu.querySelector('[data-id="rename"]'),
|
||||||
});
|
delete:appNavigationMenu.querySelector('[data-id="delete"]')
|
||||||
|
};
|
||||||
|
this.dd = new WikiDropdownHelper(wikiSelector, id=>{
|
||||||
|
menuEntry.rename.disabled = (id==0);
|
||||||
|
menuEntry.delete.disabled = (id==0);
|
||||||
|
self.onSelectWiki(id);
|
||||||
|
} );
|
||||||
this.loadWikis();
|
this.loadWikis();
|
||||||
|
|
||||||
// Popup menu
|
// Popup menu
|
||||||
let appNavigationMenu = container.getElementsByClassName('app-navigation-entry-menu')[0];
|
|
||||||
let button = container.querySelector('.app-navigation-entry-utils-menu-button button');
|
let button = container.querySelector('.app-navigation-entry-utils-menu-button button');
|
||||||
button.addEventListener('click', ()=>appNavigationMenu.classList.toggle("open") );
|
button.addEventListener('click', ()=>appNavigationMenu.classList.toggle("open") );
|
||||||
document.addEventListener('click', e=>{if(e.target!==button)appNavigationMenu.classList.remove("open");})
|
document.addEventListener('click', e=>{if(e.target!==button)appNavigationMenu.classList.remove("open");})
|
||||||
|
|
||||||
appNavigationMenu.querySelector('[data-id="add"]').addEventListener('click', ()=>self.wikiChooseFolder() );
|
menuEntry.add.addEventListener('click', ()=>self.wikiChooseFolder() );
|
||||||
appNavigationMenu.querySelector('[data-id="rename"]').addEventListener('click', ()=>self.wikiRename() );
|
menuEntry.rename.addEventListener('click', ()=>self.wikiRename() );
|
||||||
appNavigationMenu.querySelector('[data-id="delete"]').addEventListener('click', ()=>self.wikiDelete() );
|
menuEntry.delete.addEventListener('click', ()=>self.wikiDelete() );
|
||||||
|
}
|
||||||
|
|
||||||
|
wikiDelete() {
|
||||||
|
let self=this;
|
||||||
|
let wiki = this.dd.get();
|
||||||
|
OC.dialogs.confirm( t(appName, 'Delete the wiki {text}?', wiki),
|
||||||
|
t(appName, 'Delete Wiki'),
|
||||||
|
(ok)=>{
|
||||||
|
if ( ok ) {
|
||||||
|
var baseUrl = OC.generateUrl('/apps/mywiki/wikis');
|
||||||
|
$.ajax({
|
||||||
|
url: baseUrl+'/'+wiki.value,
|
||||||
|
type: 'DELETE',
|
||||||
|
contentType: 'application/json',
|
||||||
|
data: JSON.stringify({removeFiles:false})
|
||||||
|
}).done(function (response) {
|
||||||
|
console.info('JDG :: Wiki deleted', response);
|
||||||
|
self.dd.set('').delete(wiki.value);
|
||||||
|
}).fail(function (response, code) {
|
||||||
|
OC.dialogs.alert('Error', t(appName,'Error deleting wiki {text}', wiki));
|
||||||
|
console.error('JDG :: Error deleting wiki', response);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
false
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
wikiRename() {
|
wikiRename() {
|
||||||
@ -41,13 +72,13 @@ class WikiNavigation {
|
|||||||
let wiki = self.dd.get();
|
let wiki = self.dd.get();
|
||||||
var baseUrl = OC.generateUrl('/apps/mywiki/wikis');
|
var baseUrl = OC.generateUrl('/apps/mywiki/wikis');
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: baseUrl,
|
url: baseUrl+'/'+wiki.value,
|
||||||
type: 'PUT',
|
type: 'PUT',
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
data: JSON.stringify({id:wiki.value, title:value})
|
data: JSON.stringify({title:value})
|
||||||
}).done(function (response) {
|
}).done(function (response) {
|
||||||
console.info('JDG :: Wiki renamed', response);
|
console.info('JDG :: Wiki renamed', response);
|
||||||
// ToDo :: Rename in the dropdown
|
self.dd.rename(response.id, response.title);
|
||||||
}).fail(function (response, code) {
|
}).fail(function (response, code) {
|
||||||
OC.dialogs.alert('Error', t(appName,'Error renaming wiki'));
|
OC.dialogs.alert('Error', t(appName,'Error renaming wiki'));
|
||||||
console.error('JDG :: Error renaming wiki', response);
|
console.error('JDG :: Error renaming wiki', response);
|
||||||
@ -56,7 +87,7 @@ class WikiNavigation {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
false,
|
false,
|
||||||
t(appName, 'New name:'),
|
t(appName, 'New name'),
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -60,16 +60,10 @@ class WikiHelper {
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function isWiki() :bool {
|
private function isWikiable() :bool {
|
||||||
return $this->wikiFolder && $this->wikiFolder->getType() == \OCP\Files\Node::TYPE_FOLDER;
|
return $this->wikiFolder && $this->wikiFolder->getType() == \OCP\Files\Node::TYPE_FOLDER;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function reloadWikiTree(): array {
|
|
||||||
$wiki = $this->getWikiData();
|
|
||||||
$wiki['pages'] = $this->rebuildWikiTree();
|
|
||||||
$this->setWikiData($wiki);
|
|
||||||
return $wiki;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getWikiData(): ?array {
|
public function getWikiData(): ?array {
|
||||||
try {
|
try {
|
||||||
@ -96,24 +90,33 @@ class WikiHelper {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function initWiki(string $folderPath, string $title) :?int {
|
public function createWikiData(): array {
|
||||||
$this->wikiFolder = $this->userFolder->get($folderPath);
|
$wiki = [
|
||||||
if ( !$this->isWiki() ) {
|
"title"=>$this->wikiFolder->getName(),
|
||||||
return null;
|
"folderId"=>$this->wikiFolder->getId(),
|
||||||
|
"pages"=>[]
|
||||||
|
];
|
||||||
|
$wiki['pages'] = $this->rebuildWikiTree();
|
||||||
|
return $wiki;
|
||||||
}
|
}
|
||||||
|
|
||||||
$folderId = $this->wikiFolder->getId();
|
public function rebuildWiki($title): ?array {
|
||||||
|
$wiki = $this->createWikiData(true);
|
||||||
|
$wiki['title'] = $title;
|
||||||
|
return $this->setWikiData($wiki) ? $wiki : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function initWiki(string $folderPath, string $title) :?int {
|
||||||
|
$this->wikiFolder = $this->userFolder->get($folderPath);
|
||||||
|
if ( !$this->isWikiable() ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
if ( $this->getWikiData() === null ) {
|
if ( $this->getWikiData() === null ) {
|
||||||
$wiki = [
|
if ( $this->rebuildWiki($title) === null ) {
|
||||||
"title"=>$title,
|
|
||||||
"folderId"=>$folderId,
|
|
||||||
"pages"=>$this->rebuildWikiTree()
|
|
||||||
];
|
|
||||||
if ( !$this->setWikiData($wiki) ) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $folderId;
|
return $this->wikiFolder->getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function add(int $parentId, string $title) {
|
public function add(int $parentId, string $title) {
|
||||||
|
@ -13,20 +13,20 @@
|
|||||||
<li>
|
<li>
|
||||||
<a href="#" data-id="add">
|
<a href="#" data-id="add">
|
||||||
<span class="icon-add"></span>
|
<span class="icon-add"></span>
|
||||||
<span>Add</span>
|
<span>Add Wiki</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#" data-id="rename">
|
<button disabled data-id="rename">
|
||||||
<span class="icon-rename"></span>
|
<span class="icon-rename"></span>
|
||||||
<span>Edit</span>
|
<span>Rename Wiki</span>
|
||||||
</a>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#" data-id="delete">
|
<button disabled data-id="delete">
|
||||||
<span class="icon-delete"></span>
|
<span class="icon-delete"></span>
|
||||||
<span>Remove</span>
|
<span>Delete Wiki</span>
|
||||||
</a>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user