mirror of
/repos/Prototyper.git
synced 2025-12-30 06:31:32 +01:00
added callbacks, got stuck without them
This commit is contained in:
parent
3fe9f7cd96
commit
b411815404
@ -312,80 +312,82 @@ function main_functions(app, vmName) {
|
||||
if (!mode || mode == 'none') {
|
||||
ace_mode = 'markdown';
|
||||
}
|
||||
var attributeDoc = getAttributeFromDocSnapshot(app, attribute);
|
||||
if (attributeDoc) {
|
||||
var aceMode = require("ace/mode/" + ace_mode).Mode;
|
||||
editor.session.setMode(new aceMode());
|
||||
var currentMode = attributeDoc.mode;
|
||||
if (!currentMode) {
|
||||
currentMode = 'none';
|
||||
}
|
||||
app.debug && console.log('modes', attribute, currentMode, mode);
|
||||
|
||||
if (currentMode != mode) {
|
||||
app.debug && console.log('mode differs', attribute, currentMode, mode);
|
||||
function doInsert(mode) {
|
||||
return mode && mode != 'none';
|
||||
return getAttributeFromDocSnapshot(app, attribute, function (err, attributeDoc) {
|
||||
if (attributeDoc) {
|
||||
var aceMode = require("ace/mode/" + ace_mode).Mode;
|
||||
editor.session.setMode(new aceMode());
|
||||
var currentMode = attributeDoc.mode;
|
||||
if (!currentMode) {
|
||||
currentMode = 'none';
|
||||
}
|
||||
app.debug && console.log('modes', attribute, currentMode, mode);
|
||||
|
||||
replaceAttributeDocKey(app, attribute, 'mode', mode, doInsert, function (err, result) {
|
||||
app.debug && console.log('err', err, 'result', result);
|
||||
});
|
||||
if (currentMode != mode) {
|
||||
app.debug && console.log('mode differs', attribute, currentMode, mode);
|
||||
function doInsert(mode) {
|
||||
return mode && mode != 'none';
|
||||
}
|
||||
|
||||
replaceAttributeDocKey(app, attribute, 'mode', mode, doInsert, function (err, result) {
|
||||
app.debug && console.log('err', err, 'result', result);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
setReadOnly: function (value) {
|
||||
editor.ace.setReadOnly(value);
|
||||
},
|
||||
|
||||
setDoc: function (attribute, callback) {
|
||||
setAttrDoc: function (attribute, callback) {
|
||||
//noinspection JSUnresolvedFunction
|
||||
editor.ace.setReadOnly(true);
|
||||
var attributeDoc = getAttributeFromDocSnapshot(app, attribute);
|
||||
var mode = (attributeDoc && attributeDoc.mode) || 'none';
|
||||
app.debug && console.log('setDoc attribute, mode', attribute.title, mode);
|
||||
return getAttributeFromDocSnapshot(app, attribute, function (err, attributeDoc) {
|
||||
var mode = (attributeDoc && attributeDoc.mode) || 'none';
|
||||
app.debug && console.log('setAttrDoc attribute, mode', attribute.title, mode);
|
||||
|
||||
this.setMode(attribute, mode);
|
||||
callFunction(app, 'main').setMode(attribute, mode);
|
||||
|
||||
if (editor.doc != null) {
|
||||
app.debug && console.log('current cursor position', editor.ace.getCursorPosition());
|
||||
callFunction(app, 'user').storeCurrentPosition(editor.doc.name, editor.ace.getCursorPosition());
|
||||
editor.doc.close();
|
||||
editor.doc.detach_ace();
|
||||
}
|
||||
loadAttributeTextDoc(app, attribute, function (error, newDoc) {
|
||||
if (error) {
|
||||
editor.ace.setReadOnly(true);
|
||||
console.error(error);
|
||||
return callback && callback(error);
|
||||
if (editor.doc != null) {
|
||||
app.debug && console.log('current cursor position', editor.ace.getCursorPosition());
|
||||
callFunction(app, 'user').storeCurrentPosition(editor.doc.name, editor.ace.getCursorPosition());
|
||||
editor.doc.close();
|
||||
editor.doc.detach_ace();
|
||||
}
|
||||
newDoc.on('error', function (err) {
|
||||
editor.ace.setReadOnly(true);
|
||||
return callback && callback(err);
|
||||
});
|
||||
|
||||
editor.doc = newDoc;
|
||||
|
||||
//noinspection JSUnresolvedFunction
|
||||
editor.doc.attach_ace(editor.ace);
|
||||
//noinspection JSUnresolvedFunction
|
||||
|
||||
var moveTo = callFunction(app, 'user').getCurrentPosition(editor.doc.name);
|
||||
if (!(moveTo && moveTo.row && moveTo.column)) {
|
||||
moveTo = {
|
||||
row: 0,
|
||||
column: 0
|
||||
loadAttributeTextDoc(app, attribute, function (error, newDoc) {
|
||||
if (error) {
|
||||
editor.ace.setReadOnly(true);
|
||||
console.error(error);
|
||||
return callback && callback(error);
|
||||
}
|
||||
}
|
||||
app.debug && console.log('moveTo', moveTo);
|
||||
editor.ace.moveCursorToPosition(moveTo);
|
||||
editor.ace.centerSelection();
|
||||
newDoc.on('error', function (err) {
|
||||
editor.ace.setReadOnly(true);
|
||||
return callback && callback(err);
|
||||
});
|
||||
|
||||
editor.ace.setReadOnly(false);
|
||||
editor.doc = newDoc;
|
||||
|
||||
editor.ace.focus(); //To focus the ace editor
|
||||
return callback && callback(null);
|
||||
//noinspection JSUnresolvedFunction
|
||||
editor.doc.attach_ace(editor.ace);
|
||||
//noinspection JSUnresolvedFunction
|
||||
|
||||
var moveTo = callFunction(app, 'user').getCurrentPosition(editor.doc.name);
|
||||
if (!(moveTo && moveTo.row && moveTo.column)) {
|
||||
moveTo = {
|
||||
row: 0,
|
||||
column: 0
|
||||
}
|
||||
}
|
||||
app.debug && console.log('moveTo', moveTo);
|
||||
editor.ace.moveCursorToPosition(moveTo);
|
||||
editor.ace.centerSelection();
|
||||
|
||||
editor.ace.setReadOnly(false);
|
||||
|
||||
editor.ace.focus(); //To focus the ace editor
|
||||
return callback && callback(null);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -437,6 +439,13 @@ function getAttributeLocation(attribute) {
|
||||
}
|
||||
}
|
||||
|
||||
function getLocation(location) {
|
||||
return {
|
||||
collection: location.collection,
|
||||
name: location.name
|
||||
}
|
||||
}
|
||||
|
||||
// identifying attributes parent doc
|
||||
function getDocId(attribute) {
|
||||
return attribute
|
||||
@ -444,14 +453,24 @@ function getDocId(attribute) {
|
||||
&& (attribute.collection + ':' + attribute.name);
|
||||
}
|
||||
|
||||
function getAttributeDoc(app, attribute) {
|
||||
function getAttributeDoc(app, attribute, callback) {
|
||||
var docId = getDocId(attribute);
|
||||
return docId && app.doc[docId];
|
||||
app.debug && console.log('getAttributeDoc attribute, docId', attribute, docId, app.doc);
|
||||
if (docId && app.doc[docId]) {
|
||||
return callback && callback(null, app.doc[docId]);
|
||||
} else {
|
||||
loadRawDoc(app, getLocation(attribute), function (err, attributeDoc) {
|
||||
setDoc(app, docId, attributeDoc);
|
||||
return getAttributeDoc(app, attribute, callback);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function getAttributeFromDocSnapshot(app, attribute) {
|
||||
var doc = getAttributeDoc(app, attribute);
|
||||
return doc && doc.snapshot && doc.snapshot[attribute.attribute];
|
||||
function getAttributeFromDocSnapshot(app, attribute, callback) {
|
||||
return getAttributeDoc(app, attribute, function (err, doc) {
|
||||
app.debug && console.log('getAttributeFromDocSnapshot doc', doc);
|
||||
return callback && callback( err, doc && doc.snapshot && doc.snapshot[attribute.attribute]);
|
||||
});
|
||||
}
|
||||
|
||||
function getAttributeUrl(attribute) {
|
||||
@ -459,25 +478,26 @@ function getAttributeUrl(attribute) {
|
||||
}
|
||||
|
||||
function replaceAttributeDocKey(app, attribute, key, value, doInsert, callback) {
|
||||
var op = [];
|
||||
var attributeDoc = getAttributeDoc(app, attribute);
|
||||
if (attributeDoc && attributeDoc[key]) {
|
||||
app.debug && console.log('// remove', key);
|
||||
op.push({
|
||||
p: [attribute.attribute, key],
|
||||
od: attributeDoc[key]
|
||||
return getAttributeDoc(app, attribute, function (err, attributeDoc) {
|
||||
var op = [];
|
||||
if (attributeDoc && attributeDoc[key]) {
|
||||
app.debug && console.log('// remove', key);
|
||||
op.push({
|
||||
p: [attribute.attribute, key],
|
||||
od: attributeDoc[key]
|
||||
});
|
||||
}
|
||||
if (typeof doInsert == 'function' && doInsert(value) || doInsert) {
|
||||
app.debug && console.log('//insert', key);
|
||||
op.push({
|
||||
p: [attribute.attribute, key],
|
||||
oi: value
|
||||
});
|
||||
}
|
||||
attributeDoc.submitOp(op, function (err, result) {
|
||||
app.debug && console.log('err', err, 'result', result);
|
||||
return callback && callback(err, result);
|
||||
});
|
||||
}
|
||||
if (typeof doInsert == 'function' && doInsert(value) || doInsert) {
|
||||
app.debug && console.log('//insert', key);
|
||||
op.push({
|
||||
p: [attribute.attribute, key],
|
||||
oi: value
|
||||
});
|
||||
}
|
||||
attributeDoc.submitOp(op, function (err, result) {
|
||||
app.debug && console.log('err', err, 'result', result);
|
||||
return callback && callback(err, result);
|
||||
});
|
||||
}
|
||||
|
||||
@ -513,17 +533,17 @@ function initViewModel_main(app, vmName) {
|
||||
var viewModel = app.ko.mapping.fromJS(snapshot, mapping);
|
||||
|
||||
viewModel._selectedMode = app.ko.observable();
|
||||
|
||||
var self = this;
|
||||
var noneAceMode = null;
|
||||
/* does not get invalidated */
|
||||
viewModel._noneMode = function () {
|
||||
if (!this.noneAceMode) {
|
||||
this.noneAceMode = _.find(viewModel._availableModes(),
|
||||
if (!self.noneAceMode) {
|
||||
self.noneAceMode = _.find(viewModel._availableModes(),
|
||||
function (mode) {
|
||||
return mode.ace() == 'none';
|
||||
});
|
||||
}
|
||||
return this.noneAceMode;
|
||||
return self.noneAceMode;
|
||||
};
|
||||
|
||||
viewModel._selectedMode(viewModel._noneMode());
|
||||
@ -538,50 +558,54 @@ function initViewModel_main(app, vmName) {
|
||||
return equalAttributes(active, attribute);
|
||||
};
|
||||
|
||||
viewModel._getModeForAttribute = function (attribute) {
|
||||
viewModel._getModeForAttribute = function (attribute, callback) {
|
||||
if (!attribute) {
|
||||
return viewModel._noneMode();
|
||||
}
|
||||
var attributeDoc = getAttributeFromDocSnapshot(app, attribute);
|
||||
var docMode = (attributeDoc && attributeDoc.mode);
|
||||
if (!docMode) {
|
||||
return viewModel._noneMode();
|
||||
}
|
||||
var mode = _.find(viewModel._availableModes(),
|
||||
function (mode) {
|
||||
return docMode == mode.ace();
|
||||
});
|
||||
if (mode) {
|
||||
app.debug && console.log('getModeForAttribute', mode);
|
||||
return mode;
|
||||
} else {
|
||||
return viewModel._noneMode();
|
||||
return callback && callback(null, viewModel._noneMode());
|
||||
}
|
||||
return getAttributeFromDocSnapshot(app, attribute, function (err, attributeDoc) {
|
||||
var docMode = (attributeDoc && attributeDoc.mode);
|
||||
app.debug && console.log('_getModeForAttribute attribute, docMode', attribute, docMode);
|
||||
if (!docMode) {
|
||||
return callback && callback(null, viewModel._noneMode());
|
||||
}
|
||||
var mode = _.find(viewModel._availableModes(),
|
||||
function (mode) {
|
||||
app.debug && console.log('_getModeForAttribute mode.ace()', mode.ace());
|
||||
return docMode == mode.ace();
|
||||
});
|
||||
if (mode) {
|
||||
app.debug && console.log('_getModeForAttribute', mode);
|
||||
return callback && callback(null, mode);
|
||||
} else {
|
||||
return callback && callback(null, viewModel._noneMode());
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
viewModel._getExtensionForAttribute = function (attribute) {
|
||||
var mode = viewModel._getModeForAttribute(attribute);
|
||||
if (mode && mode.ace() == 'markdown') {
|
||||
return '.md';
|
||||
} else {
|
||||
return '.html';
|
||||
}
|
||||
viewModel._getExtensionForAttribute = function (attribute, callback) {
|
||||
return viewModel._getModeForAttribute(attribute, function (err, mode) {
|
||||
if (mode && mode.ace() == 'markdown') {
|
||||
return callback && callback(null, '.md');
|
||||
}
|
||||
return callback && callback(null, '.html');
|
||||
});
|
||||
};
|
||||
|
||||
viewModel._getModeForChosenAttribute = function () {
|
||||
viewModel._getModeForChosenAttribute = function (callback) {
|
||||
var attribute = viewModel._chosenAttribute();
|
||||
app.debug && console.log('getModeForChosenAttribute._chosenAttribute', attribute);
|
||||
return viewModel._getModeForAttribute(attribute)
|
||||
return viewModel._getModeForAttribute(attribute, callback)
|
||||
};
|
||||
|
||||
|
||||
viewModel._updateSelectedMode = function () {
|
||||
var selectedMode = viewModel._getModeForChosenAttribute();
|
||||
app.debug && console.log('updateSelectedMode.getModeForChosenAttribute', selectedMode);
|
||||
if (selectedMode) {
|
||||
app.debug && console.log('setSelectedMode:', selectedMode.ace());
|
||||
viewModel._selectedMode(selectedMode);
|
||||
}
|
||||
return viewModel._getModeForChosenAttribute(function (err, selectedMode) {
|
||||
app.debug && console.log('updateSelectedMode.getModeForChosenAttribute', selectedMode);
|
||||
if (selectedMode) {
|
||||
app.debug && console.log('setSelectedMode:', selectedMode.ace());
|
||||
return viewModel._selectedMode(selectedMode);
|
||||
}
|
||||
});
|
||||
};
|
||||
var activeAttribute = callFunction(app, 'user').getActiveAttributes();
|
||||
|
||||
@ -591,7 +615,7 @@ function initViewModel_main(app, vmName) {
|
||||
app.debug && console.log('_goToAttribute',attribute);
|
||||
viewModel._chosenAttribute(attribute);
|
||||
viewModel._updateSelectedMode();
|
||||
callFunction(app, 'main').setDoc(attribute, function (err) {
|
||||
callFunction(app, 'main').setAttrDoc(attribute, function (err) {
|
||||
if (!_.find(
|
||||
viewModel._activeAttributes(),
|
||||
function (active) {
|
||||
@ -599,7 +623,6 @@ function initViewModel_main(app, vmName) {
|
||||
}
|
||||
)) { // TODO: do not update viewmodel, instead update sharedoc.
|
||||
callFunction(app, 'user').addActiveAttribute(attribute);
|
||||
//viewModel._activeAttributes.push(attribute);
|
||||
}
|
||||
});
|
||||
};
|
||||
@ -608,20 +631,25 @@ function initViewModel_main(app, vmName) {
|
||||
viewModel._previewAttribute = function () {
|
||||
var attribute = viewModel._chosenAttribute();
|
||||
if (attribute) {
|
||||
var ext = viewModel._getExtensionForAttribute(attribute);
|
||||
var url = '/page/' + getAttributeUrl(attribute) + ext + '#!watch';
|
||||
open_in_new_tab(url);
|
||||
return viewModel._getExtensionForAttribute(attribute, function (err, ext) {
|
||||
var url = '/page/' + getAttributeUrl(attribute) + ext + '#!watch';
|
||||
open_in_new_tab(url);
|
||||
});
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
viewModel._getMode = app.ko.computed(function () {
|
||||
viewModel._getMode = app.ko.observable();
|
||||
|
||||
viewModel._computeMode = app.ko.computed(function () {
|
||||
var attribute = viewModel._chosenAttribute();
|
||||
if (!attribute) return attribute;
|
||||
|
||||
var attributeDoc = getAttributeFromDocSnapshot(app, attribute);
|
||||
|
||||
return attribute && attributeDoc && attributeDoc.mode;
|
||||
if (!attribute) {
|
||||
return viewModel._getMode(attribute);
|
||||
} else {
|
||||
return getAttributeFromDocSnapshot(app, attribute, function (err, attributeDoc) {
|
||||
return viewModel._getMode(attribute && attributeDoc && attributeDoc.mode);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
viewModel._selectedMode.subscribe(function (newValue) {
|
||||
@ -931,6 +959,7 @@ function setDoc(app, docId, doc) {
|
||||
if (!app.doc) {
|
||||
app['doc'] = {};
|
||||
}
|
||||
app.debug && console.log('setDoc docId, doc', docId, doc);
|
||||
app.doc[docId] = doc;
|
||||
}
|
||||
|
||||
@ -1058,7 +1087,7 @@ function ensureIndexesOnAttributes(snapshot) {
|
||||
var maxAttribute = _.max(snapshot._attributes, function (attributeName) {
|
||||
return snapshot[attributeName].index;
|
||||
});
|
||||
var max = maxAttribute && snapshot[maxAttribute].index || 0;
|
||||
var max = maxAttribute && snapshot[maxAttribute] && snapshot[maxAttribute].index || 0;
|
||||
_.forEach(snapshot._attributes, function (attributeName,index) {
|
||||
if (!snapshot[attributeName].hasOwnProperty('index')) {
|
||||
max += 1;
|
||||
@ -1068,7 +1097,7 @@ function ensureIndexesOnAttributes(snapshot) {
|
||||
p: path,
|
||||
oi: max
|
||||
});
|
||||
snapshot[attributeName].index=max;
|
||||
snapshot[attributeName].index = max;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user