mirror of
https://github.com/documize/community.git
synced 2025-07-25 16:19:46 +02:00
Saving wip on toc refactor
This commit is contained in:
parent
833c462872
commit
899281044e
3 changed files with 82 additions and 82 deletions
|
@ -1,64 +1,64 @@
|
||||||
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
||||||
//
|
//
|
||||||
// This software (Documize Community Edition) is licensed under
|
// This software (Documize Community Edition) is licensed under
|
||||||
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
||||||
//
|
//
|
||||||
// You can operate outside the AGPL restrictions by purchasing
|
// You can operate outside the AGPL restrictions by purchasing
|
||||||
// Documize Enterprise Edition and obtaining a commercial license
|
// Documize Enterprise Edition and obtaining a commercial license
|
||||||
// by contacting <sales@documize.com>.
|
// by contacting <sales@documize.com>.
|
||||||
//
|
//
|
||||||
// https://documize.com
|
// https://documize.com
|
||||||
|
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
export default Ember.Component.extend({
|
export default Ember.Component.extend({
|
||||||
document: {},
|
document: {},
|
||||||
meta: [],
|
meta: [],
|
||||||
pages: [],
|
pages: [],
|
||||||
|
|
||||||
didReceiveAttrs() {
|
didReceiveAttrs() {
|
||||||
let editors = this.get('meta.editors');
|
let editors = this.get('meta.editors');
|
||||||
let toc = this.get('pages');
|
let toc = this.get('pages');
|
||||||
|
|
||||||
if (is.null(editors)) {
|
if (is.null(editors)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
editors.forEach(function(item) {
|
editors.forEach(function (item) {
|
||||||
Ember.set(item, "added", item.action === "add-page");
|
Ember.set(item, "added", item.action === "add-page");
|
||||||
Ember.set(item, "changed", item.action === "update-page");
|
Ember.set(item, "changed", item.action === "update-page");
|
||||||
Ember.set(item, "deleted", item.action === "remove-page");
|
Ember.set(item, "deleted", item.action === "remove-page");
|
||||||
|
|
||||||
let page = _.findWhere(toc, {
|
let page = _.findWhere(toc, {
|
||||||
id: item.pageId
|
id: item.pageId
|
||||||
});
|
});
|
||||||
let title = "";
|
let title = "";
|
||||||
|
|
||||||
if (is.not.undefined(page)) {
|
if (is.not.undefined(page)) {
|
||||||
title = page.title;
|
title = page.get('title');
|
||||||
|
|
||||||
if (item.added) {
|
if (item.added) {
|
||||||
Ember.set(item, 'changeLabel', "added " + title);
|
Ember.set(item, 'changeLabel', "added " + title);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.changed) {
|
if (item.changed) {
|
||||||
Ember.set(item, 'changeLabel', "changed " + title);
|
Ember.set(item, 'changeLabel', "changed " + title);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Ember.set(item, "deleted", true);
|
Ember.set(item, "deleted", true);
|
||||||
|
|
||||||
if (item.added) {
|
if (item.added) {
|
||||||
Ember.set(item, 'changeLabel', "added section (since removed)");
|
Ember.set(item, 'changeLabel', "added section (since removed)");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.changed) {
|
if (item.changed) {
|
||||||
Ember.set(item, 'changeLabel', "changed section (since removed)");
|
Ember.set(item, 'changeLabel', "changed section (since removed)");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.deleted) {
|
if (item.deleted) {
|
||||||
Ember.set(item, 'changeLabel', "removed section");
|
Ember.set(item, 'changeLabel', "removed section");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
||||||
//
|
//
|
||||||
// This software (Documize Community Edition) is licensed under
|
// This software (Documize Community Edition) is licensed under
|
||||||
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
||||||
//
|
//
|
||||||
// You can operate outside the AGPL restrictions by purchasing
|
// You can operate outside the AGPL restrictions by purchasing
|
||||||
// Documize Enterprise Edition and obtaining a commercial license
|
// Documize Enterprise Edition and obtaining a commercial license
|
||||||
// by contacting <sales@documize.com>.
|
// by contacting <sales@documize.com>.
|
||||||
//
|
//
|
||||||
// https://documize.com
|
// https://documize.com
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ export default Ember.Controller.extend(NotifierMixin, {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
self.set('pages', _.sortBy(self.get('pages'), "sequence"));
|
self.set('pages', self.get('pages').sortBy('sequence'));
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ export default Ember.Controller.extend(NotifierMixin, {
|
||||||
});
|
});
|
||||||
|
|
||||||
let pages = self.get('pages');
|
let pages = self.get('pages');
|
||||||
pages = _.sortBy(pages, "sequence");
|
pages = pages.sortBy('sequence')
|
||||||
self.set('pages', []);
|
self.set('pages', []);
|
||||||
self.set('pages', pages);
|
self.set('pages', pages);
|
||||||
});
|
});
|
||||||
|
@ -216,4 +216,4 @@ export default Ember.Controller.extend(NotifierMixin, {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -12,17 +12,17 @@
|
||||||
function getState(toc, page) {
|
function getState(toc, page) {
|
||||||
let state = {
|
let state = {
|
||||||
tocTools: {
|
tocTools: {
|
||||||
upTarget: "",
|
upTarget: "",
|
||||||
downTarget: "",
|
downTarget: "",
|
||||||
indentIncrement: 0,
|
indentIncrement: 0,
|
||||||
allowIndent: false,
|
allowIndent: false,
|
||||||
allowOutdent: false
|
allowOutdent: false
|
||||||
},
|
},
|
||||||
actionablePage: false,
|
actionablePage: false,
|
||||||
upDisabled: true,
|
upDisabled: true,
|
||||||
downDisabled: true,
|
downDisabled: true,
|
||||||
indentDisabled: true,
|
indentDisabled: true,
|
||||||
outdentDisabled: true,
|
outdentDisabled: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (is.undefined(page)) {
|
if (is.undefined(page)) {
|
||||||
|
@ -55,19 +55,19 @@ function getState(toc, page) {
|
||||||
if (index2 !== -1) {
|
if (index2 !== -1) {
|
||||||
// up
|
// up
|
||||||
for (var i = index2; i >= 0; i--) {
|
for (var i = index2; i >= 0; i--) {
|
||||||
if (page.level > toc[i].level) {
|
if (page.get('level') > toc[i].get('level')) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (page.level === toc[i].level) {
|
if (page.get('level') === toc[i].get('level')) {
|
||||||
state.tocTools.upTarget = toc[i].id;
|
state.tocTools.upTarget = toc[i].id;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// indent?
|
// indent?
|
||||||
state.tocTools.allowIndent = upPage.level >= page.level;
|
state.tocTools.allowIndent = upPage.get('level') >= page.get('level');
|
||||||
state.tocTools.indentIncrement = upPage.level - page.level;
|
state.tocTools.indentIncrement = upPage.get('level') - page.get('level');
|
||||||
|
|
||||||
if (state.tocTools.indentIncrement === 0) {
|
if (state.tocTools.indentIncrement === 0) {
|
||||||
state.tocTools.indentIncrement = 1;
|
state.tocTools.indentIncrement = 1;
|
||||||
|
@ -115,7 +115,7 @@ function getState(toc, page) {
|
||||||
|
|
||||||
state.upDisabled = state.tocTools.upTarget === '';
|
state.upDisabled = state.tocTools.upTarget === '';
|
||||||
state.downDisabled = state.tocTools.downTarget === '';
|
state.downDisabled = state.tocTools.downTarget === '';
|
||||||
state.indentDisabled = !state.tocTools.allowIndent;
|
state.indentDisabled = !state.tocTools.allowIndent;
|
||||||
state.outdentDisabled = !state.tocTools.allowOutdent;
|
state.outdentDisabled = !state.tocTools.allowOutdent;
|
||||||
|
|
||||||
state.actionablePage = is.not.empty(state.tocTools.upTarget) ||
|
state.actionablePage = is.not.empty(state.tocTools.upTarget) ||
|
||||||
|
@ -141,8 +141,8 @@ function moveUp(state, pages, current) {
|
||||||
page2 = pages[index1 - 1];
|
page2 = pages[index1 - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
var sequence1 = page1.sequence;
|
var sequence1 = page1.get('sequence');
|
||||||
var sequence2 = is.not.null(page2) && is.not.undefined(page2) ? page2.sequence : 0;
|
var sequence2 = is.not.null(page2) && is.not.undefined(page2) ? page2.get('sequence') : 0;
|
||||||
var index = _.indexOf(pages, current, false);
|
var index = _.indexOf(pages, current, false);
|
||||||
|
|
||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
|
@ -154,11 +154,11 @@ function moveUp(state, pages, current) {
|
||||||
});
|
});
|
||||||
|
|
||||||
for (var i = index + 1; i < pages.length; i++) {
|
for (var i = index + 1; i < pages.length; i++) {
|
||||||
if (pages[i].level <= current.level) {
|
if (pages[i].get('level') <= current.get('level')) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
sequence = (sequence + page1.sequence) / 2;
|
sequence = (sequence + page1.get('sequence')) / 2;
|
||||||
|
|
||||||
pendingChanges.push({
|
pendingChanges.push({
|
||||||
pageId: pages[i].id,
|
pageId: pages[i].id,
|
||||||
|
@ -184,28 +184,28 @@ function moveDown(state, pages, current) {
|
||||||
var startingSequence = 0;
|
var startingSequence = 0;
|
||||||
var upperSequence = 0;
|
var upperSequence = 0;
|
||||||
var cutOff = _.rest(pages, downTargetIndex);
|
var cutOff = _.rest(pages, downTargetIndex);
|
||||||
var siblings = _.reject(cutOff, function(p) {
|
var siblings = _.reject(cutOff, function (p) {
|
||||||
return p.level !== current.level || p.id === current.id || p.id === downTarget.id;
|
return p.get('level') !== current.get('level') || p.id === current.id || p.id === downTarget.id;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (siblings.length > 0) {
|
if (siblings.length > 0) {
|
||||||
var aboveThisGuy = siblings[0];
|
var aboveThisGuy = siblings[0];
|
||||||
var belowThisGuy = pages[_.indexOf(pages, aboveThisGuy, false) - 1];
|
var belowThisGuy = pages[_.indexOf(pages, aboveThisGuy, false) - 1];
|
||||||
|
|
||||||
if (is.not.null(belowThisGuy) && belowThisGuy.level > current.level) {
|
if (is.not.null(belowThisGuy) && belowThisGuy.get('level') > current.get('level')) {
|
||||||
startingSequence = (aboveThisGuy.sequence + belowThisGuy.sequence) / 2;
|
startingSequence = (aboveThisGuy.get('sequence') + belowThisGuy.get('sequence')) / 2;
|
||||||
upperSequence = aboveThisGuy.sequence;
|
upperSequence = aboveThisGuy.get('sequence');
|
||||||
} else {
|
} else {
|
||||||
var otherGuy = pages[downTargetIndex + 1];
|
var otherGuy = pages[downTargetIndex + 1];
|
||||||
|
|
||||||
startingSequence = (otherGuy.sequence + downTarget.sequence) / 2;
|
startingSequence = (otherGuy.get('sequence') + downTarget.get('sequence')) / 2;
|
||||||
upperSequence = otherGuy.sequence;
|
upperSequence = otherGuy.get('sequence');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// startingSequence = downTarget.sequence * 2;
|
// startingSequence = downTarget.sequence * 2;
|
||||||
startingSequence = cutOff[cutOff.length-1].sequence * 2;
|
startingSequence = cutOff[cutOff.length - 1].sequence * 2;
|
||||||
upperSequence = startingSequence * 2;
|
upperSequence = startingSequence * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
pendingChanges.push({
|
pendingChanges.push({
|
||||||
pageId: current.id,
|
pageId: current.id,
|
||||||
|
@ -215,7 +215,7 @@ function moveDown(state, pages, current) {
|
||||||
var sequence = (startingSequence + upperSequence) / 2;
|
var sequence = (startingSequence + upperSequence) / 2;
|
||||||
|
|
||||||
for (var i = pageIndex + 1; i < pages.length; i++) {
|
for (var i = pageIndex + 1; i < pages.length; i++) {
|
||||||
if (pages[i].level <= current.level) {
|
if (pages[i].get('level') <= current.get('level')) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,17 +237,17 @@ function indent(state, pages, current) {
|
||||||
|
|
||||||
pendingChanges.push({
|
pendingChanges.push({
|
||||||
pageId: current.id,
|
pageId: current.id,
|
||||||
level: current.level + state.tocTools.indentIncrement
|
level: current.get('level') + state.tocTools.indentIncrement
|
||||||
});
|
});
|
||||||
|
|
||||||
for (var i = pageIndex + 1; i < pages.length; i++) {
|
for (var i = pageIndex + 1; i < pages.length; i++) {
|
||||||
if (pages[i].level <= current.level) {
|
if (pages[i].get('level') <= current.get('level')) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
pendingChanges.push({
|
pendingChanges.push({
|
||||||
pageId: pages[i].id,
|
pageId: pages[i].id,
|
||||||
level: pages[i].level + state.tocTools.indentIncrement
|
level: pages[i].get('level') + state.tocTools.indentIncrement
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,17 +260,17 @@ function outdent(state, pages, current) {
|
||||||
|
|
||||||
pendingChanges.push({
|
pendingChanges.push({
|
||||||
pageId: current.id,
|
pageId: current.id,
|
||||||
level: current.level - 1
|
level: current.get('level') - 1
|
||||||
});
|
});
|
||||||
|
|
||||||
for (var i = pageIndex + 1; i < pages.length; i++) {
|
for (var i = pageIndex + 1; i < pages.length; i++) {
|
||||||
if (pages[i].level <= current.level) {
|
if (pages[i].get('level') <= current.get('level')) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
pendingChanges.push({
|
pendingChanges.push({
|
||||||
pageId: pages[i].id,
|
pageId: pages[i].id,
|
||||||
level: pages[i].level - 1
|
level: pages[i].get('level') - 1
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue