Fix cba reset on join. Change how the cba state is stored
This commit is contained in:
@@ -3,8 +3,10 @@ define([
|
||||
'/common/diffMarked.js',
|
||||
'/bower_components/nthen/index.js',
|
||||
'/common/sframe-common.js',
|
||||
'/common/hyperscript.js',
|
||||
'/common/sframe-app-framework.js',
|
||||
'/common/sframe-common-codemirror.js',
|
||||
'/common/common-interface.js',
|
||||
'/common/common-util.js',
|
||||
'/common/common-hash.js',
|
||||
'/code/markers.js',
|
||||
@@ -48,8 +50,10 @@ define([
|
||||
DiffMd,
|
||||
nThen,
|
||||
SFCommon,
|
||||
h,
|
||||
Framework,
|
||||
SFCodeMirror,
|
||||
UI,
|
||||
Util,
|
||||
Hash,
|
||||
Markers,
|
||||
@@ -276,6 +280,54 @@ define([
|
||||
};
|
||||
};
|
||||
|
||||
var mkColorByAuthor = function (framework, markers) {
|
||||
var common = framework._.sfCommon;
|
||||
var $cbaButton = framework._.sfCommon.createButton(null, true, {
|
||||
icon: 'fa-paint-brush',
|
||||
text: Messages.cba_title,
|
||||
name: 'cba'
|
||||
}, function () {
|
||||
var div = h('div');
|
||||
var $div = $(div);
|
||||
var content = h('div', [
|
||||
h('h4', Messages.cba_properties),
|
||||
h('p', Messages.cba_hint),
|
||||
div
|
||||
]);
|
||||
var setButton = function (state) {
|
||||
var button = h('button.btn');
|
||||
var $button = $(button);
|
||||
$div.html('').append($button);
|
||||
if (state) {
|
||||
// Add "enable" button
|
||||
$button.addClass('btn-secondary').text(Messages.cba_enable);
|
||||
UI.confirmButton(button, {
|
||||
classes: 'btn-primary'
|
||||
}, function () {
|
||||
$button.remove();
|
||||
markers.setState(true);
|
||||
common.setAttribute(['code', 'enableColors'], true);
|
||||
setButton(false);
|
||||
});
|
||||
return;
|
||||
}
|
||||
// Add "disable" button
|
||||
$button.addClass('btn-danger-alt').text(Messages.cba_disable);
|
||||
UI.confirmButton(button, {
|
||||
classes: 'btn-danger'
|
||||
}, function () {
|
||||
$button.remove();
|
||||
markers.setState(false);
|
||||
common.setAttribute(['code', 'enableColors'], false);
|
||||
setButton(true);
|
||||
});
|
||||
};
|
||||
setButton(!markers.getState());
|
||||
UI.alert(content);
|
||||
});
|
||||
framework._.toolbar.$drawer.append($cbaButton);
|
||||
};
|
||||
|
||||
var mkFilePicker = function (framework, editor, evModeChange) {
|
||||
evModeChange.reg(function (mode) {
|
||||
if (MEDIA_TAG_MODES.indexOf(mode) !== -1) {
|
||||
@@ -397,14 +449,17 @@ define([
|
||||
//console.log("%s => %s", CodeMirror.highlightMode, CodeMirror.$language.val());
|
||||
}
|
||||
|
||||
if (newPad && Util.find(privateData, ['settings', 'code', 'enableColors'])) {
|
||||
var metadataMgr = common.getMetadataMgr();
|
||||
var md = Util.clone(metadataMgr.getMetadata());
|
||||
md.enableColors = true;
|
||||
metadataMgr.updateMetadata(md);
|
||||
}
|
||||
|
||||
markers.ready();
|
||||
common.getPadMetadata(null, function (md) {
|
||||
if (md && md.error) { return; }
|
||||
if (!common.isOwned(md.owners)) { return; }
|
||||
// We're the owner: add the button and enable the colors if needed
|
||||
mkColorByAuthor(framework, markers);
|
||||
if (newPad && Util.find(privateData, ['settings', 'code', 'enableColors'])) {
|
||||
markers.setState(true);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
var fmConfig = {
|
||||
dropArea: $('.CodeMirror'),
|
||||
|
||||
@@ -336,6 +336,7 @@ define([
|
||||
var editor = Env.editor;
|
||||
var CodeMirror = Env.CodeMirror;
|
||||
|
||||
Env.enabled = Boolean(userDoc.authormarks && userDoc.authormarks.marks);
|
||||
setAuthorMarks(Env, userDoc.authormarks);
|
||||
|
||||
if (!Env.enabled) { return; }
|
||||
@@ -654,12 +655,38 @@ define([
|
||||
var md = metadataMgr.getMetadata();
|
||||
Env.ready = true;
|
||||
Env.myAuthorId = getAuthorId(Env);
|
||||
Env.enabled = md.enableColors;
|
||||
|
||||
if (Env.enabled) {
|
||||
if (Env.$button) { Env.$button.show(); }
|
||||
setMarks(Env);
|
||||
if (!Env.enabled) { return; }
|
||||
if (Env.$button) { Env.$button.show(); }
|
||||
if (!Env.authormarks.marks || !Env.authormarks.marks.length) {
|
||||
Env.authormarks = Util.clone(DEFAULT);
|
||||
}
|
||||
setMarks(Env);
|
||||
};
|
||||
|
||||
var getState = function (Env) {
|
||||
return Boolean(Env.authormarks && Env.authormarks.marks);
|
||||
};
|
||||
var setState = function (Env, enabled) {
|
||||
// If the state has changed in the pad, change the Env too
|
||||
if (!Env.ready) { return; }
|
||||
if (Env.enabled === enabled) { return; }
|
||||
Env.enabled = enabled;
|
||||
if (!Env.enabled) {
|
||||
// Reset marks
|
||||
Env.authormarks = {};
|
||||
setMarks(Env);
|
||||
if (Env.$button) { Env.$button.hide(); }
|
||||
} else {
|
||||
Env.myAuthorId = getAuthorId(Env);
|
||||
// If it's a reset, add initial marker
|
||||
if (!Env.authormarks.marks || !Env.authormarks.marks.length) {
|
||||
Env.authormarks = Util.clone(DEFAULT);
|
||||
setMarks(Env);
|
||||
}
|
||||
if (Env.$button) { Env.$button.show(); }
|
||||
}
|
||||
if (Env.ready) { Env.framework.localChange(); }
|
||||
};
|
||||
|
||||
Markers.create = function (config) {
|
||||
@@ -680,30 +707,10 @@ define([
|
||||
|
||||
var metadataMgr = Env.common.getMetadataMgr();
|
||||
metadataMgr.onChange(function () {
|
||||
var md = metadataMgr.getMetadata();
|
||||
// If the state has changed in the pad, change the Env too
|
||||
if (Env.enabled !== md.enableColors) {
|
||||
Env.enabled = md.enableColors;
|
||||
if (!Env.enabled) {
|
||||
// Reset marks
|
||||
Env.authormarks = {};
|
||||
setMarks(Env);
|
||||
if (Env.$button) { Env.$button.hide(); }
|
||||
} else {
|
||||
Env.myAuthorId = getAuthorId(Env);
|
||||
// If it's a reset, add initial marker
|
||||
if (!Env.authormarks.marks || !Env.authormarks.marks.length) {
|
||||
Env.authormarks = Util.clone(DEFAULT);
|
||||
setMarks(Env);
|
||||
}
|
||||
if (Env.$button) { Env.$button.show(); }
|
||||
}
|
||||
if (Env.ready) { Env.framework.localChange(); }
|
||||
}
|
||||
|
||||
// If the markers are disabled or if I haven't pushed content since the last reset,
|
||||
// don't update my data
|
||||
if (!Env.enabled || !Env.myAuthorId || !Env.authormarks.authors[Env.myAuthorId]) {
|
||||
if (!Env.enabled || !Env.myAuthorId || !Env.authormarks.authors ||
|
||||
!Env.authormarks.authors[Env.myAuthorId]) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -735,7 +742,9 @@ define([
|
||||
setMarks: call(setMarks),
|
||||
localChange: call(localChange),
|
||||
ready: call(ready),
|
||||
setButton: call(setButton)
|
||||
setButton: call(setButton),
|
||||
getState: call(getState),
|
||||
setState: call(setState),
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user