1
0
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:
Aiko Mastboom 2015-07-06 10:23:57 +02:00
parent 3fe9f7cd96
commit b411815404

View File

@ -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;
}
});
}