Skip to content

Commit

Permalink
jscs integration + config
Browse files Browse the repository at this point in the history
  • Loading branch information
soliton4 committed Feb 1, 2015
1 parent 9389d26 commit a9014cc
Show file tree
Hide file tree
Showing 7 changed files with 363 additions and 18 deletions.
74 changes: 60 additions & 14 deletions src/modules/JavaScript.js
Expand Up @@ -10,6 +10,9 @@ define([
, "main/clientOnly!dijit/form/Button"
, "main/clientOnly!dijit/form/ToggleButton"
, "main/clientOnly!./javascript/Formatter4"
, "main/clientOnly!./javascript/formatSettingsDlg"
, "main/clientOnly!dijit/form/DropDownButton"
, "main/config"
], function(
declare
, Base
Expand All @@ -22,19 +25,17 @@ define([
, Button
, ToggleButton
, Formatter
, formatSettingsDlg
, DropDownButton
, config
){

var checker;
var mChecker;
var getFormatter = function(){
if (!checker){
var Checker = Formatter();
checker = new Checker();
checker.registerDefaultRules();
checker.configure( {
preset: 'mdcs'
} );
if (!mChecker){
mChecker = Formatter();
};
return checker;
return mChecker;
};

var additionalSubtypes = {
Expand Down Expand Up @@ -77,22 +78,67 @@ define([
}

, format: function(){
var checker = getFormatter();
this.mirror.set("value", checker.formatString(this.get("content").text));
var self = this;
config.get("codemirror-jscsPreset").then(function(preset){
var Checker = getFormatter();
var checker = new Checker();
checker.registerDefaultRules();

preset = preset || "mdcs";
checker.configure( {
preset: preset
} );
self.mirror.set("value", checker.formatString(self.get("content").text));
});
}


// so special implementations can override it
, setCodemirrorValue: function(parValue){
if (this.mirror && this.mirror.get("autoJscsFormat")){
var preset = this.mirror.get("jscsPreset") || "mdcs";
var Checker = getFormatter();
var checker = new Checker();
checker.registerDefaultRules();

preset = preset || "mdcs";
checker.configure( {
preset: preset
} );
this.mirror.set("value", checker.formatString(parValue));
}else{
return this.inherited(arguments);
};
}


, buildRendering: function(){
var ret = this.inherited(arguments);


this.mirror.setJscs(getFormatter());


return ret;
}

, createMenu: function(){
var menu = this.inherited(arguments);
this.syntaxSettingsBtn = this.ownObj(new DropDownButton({
label: "Format cfg.",
dropDown: formatSettingsDlg()
}));
menu.addChild(this.syntaxSettingsBtn);

this.formatBtn = this.ownObj(new Button({
onClick: lang.hitch(this, "format")
, label: "format"
}));
this.menu.addChild(this.formatBtn);

menu.addChild(this.formatBtn);

return ret;
return menu;
}



});
Expand Down
11 changes: 10 additions & 1 deletion src/modules/Text.js
Expand Up @@ -301,10 +301,19 @@ define([
, _setContentAttr: function(parContent){
this._set("content", parContent);
if (this.mirror){
this.mirror.set("value", this.content.text);
//this.mirror.set("value", this.content.text);
this.setCodemirrorValue(this.content.text);
this.mirror.set("mode", this.content.contentType);
};
}

// so special implementations can override it
, setCodemirrorValue: function(parValue){
if (this.mirror){
this.mirror.set("value", parValue);
};
}

, _getContentAttr: function(){
if (this.mirror){
this.content.text = this.mirror.get("value");
Expand Down
190 changes: 190 additions & 0 deletions src/modules/javascript/formatSettingsDlg.js
@@ -0,0 +1,190 @@
define([
"dojo/_base/declare"
, "dijit/TooltipDialog"
, "main/clientOnly!codemirror4/theme/all"
, "main/clientOnly!dijit/form/Select"
, "dojo/_base/array"
, "dojo/_base/lang"
, "dojox/layout/TableContainer"
, "dojo/topic"
, "main/config"
, "dijit/form/CheckBox"
, "modules/text/codeMirrorSettings"
, "dijit/form/HorizontalSlider"
, "sol/convenient/Delayed"

, "codemirror4/keymap/emacs"
, "codemirror4/keymap/vim"
], function(
declare
, TooltipDialog
, allThemes
, Select
, array
, lang
, TableContainer
, topic
, config
, CheckBox
, codeMirrorSettings
, HorizontalSlider
, Delayed
){
var Dlg = declare([TooltipDialog], {
buildRendering: function(){
this.inherited(arguments);
var self = this;

this.table = this.ownObj(new TableContainer({
"class": "codeMirrorSettingsTable"
, labelWidth: 220
}));
this.table.placeAt(this.containerNode);

var onChangeFun = function(parValue){
if (!self.startedComplete){
return;
};
codeMirrorSettings.set(this.setting, parValue);
};
var valueSetFun = function(parValue){
this.set("value", parValue);
};
var onChangeCheckBoxFun = function(parValue){
if (!self.startedComplete){
return;
};
if (this.get("checked")){
codeMirrorSettings.set(this.setting, true);
}else{
codeMirrorSettings.set(this.setting, false);
};
};
var valueSetCheckBoxFun = function(parValue){
if (parValue){
this.set("checked", true);
}else{
this.set("checked", false);
};
};

var settingsStructure = [new Select({
options: [{
label: "jshint"
, value: "jshint"
},{
label: "jscs"
, value: "jscs"
},{
label: "jshint + jscs"
, value: "jshint+jscs"
}]
, label: "Syntax Check"
, setting: "javascriptSyntax"
, valueSet: valueSetFun
, onChange: onChangeFun

}), new Select({
options: [{
label: "airbnb"
, value: "airbnb"
},{
label: "crockford"
, value: "crockford"
},{
label: "google"
, value: "google"
},{
label: "jquery"
, value: "jquery"
},{
label: "mdcs"
, value: "mdcs"
},{
label: "wikimedia"
, value: "wikimedia"
},{
label: "yandex"
, value: "yandex"
}]
, label: "jscs preset"
, setting: "jscsPreset"
, valueSet: valueSetFun
, onChange: onChangeFun

}), new CheckBox({
label: "format after loading"
, setting: "autoJscsFormat"
, valueSet: valueSetCheckBoxFun
, onChange: onChangeCheckBoxFun
})];




var settingsMap = {};
array.forEach(settingsStructure, function(entry){
settingsMap[entry.setting] = entry;
});

var doneBoo = false;
var handle = codeMirrorSettings.on("settings", function(settings){
if (handle){
handle.remove();
};
doneBoo = true;
var s;
for (s in settings){
if (settingsMap[s]){
settingsMap[s].valueSet(settings[s]);
};
};
self.checkStarted(2);
});
if (doneBoo){
handle.remove();
};

array.forEach(settingsStructure, function(entry){
self.table.addChild(entry);
});

}
, checkStarted: function(par){
if (par == 1){
this.started1 = true;
};
if (par == 2){
this.started2 = true;
};
if (this.started1 && this.started2)
{
this.startedComplete = true;
}
}
, startup: function(){
if (this._started){
return;
};
this.inherited(arguments);
var self = this;
setTimeout(function(){
self.checkStarted(1);
}, 0);
}
, destroy: function(){
//debugger; // this should not happen !!!
// i shall not be destroyed !
return;
}

});

var dlg;
return function(){
if (!dlg){
dlg = new Dlg({});
};
return dlg;
};
});
3 changes: 3 additions & 0 deletions src/modules/text/codeMirrorSetable.js
Expand Up @@ -12,5 +12,8 @@ define([
, autoComplete: true
, keyMap: "default"
, highlightSelectionMatches: null
, javascriptSyntax: "jshint"
, jscsPreset: "mdcs"
, autoJscsFormat: false
};
});
7 changes: 5 additions & 2 deletions src/modules/text/codeMirrorSettings.js
Expand Up @@ -20,17 +20,20 @@ define([
};
settingsDef.resolve(loadedSettings);
};
var getValue = function(parValue){
var getValue = function(parValue, parDefault){
config.get("codemirror-" + parValue).then(function(value){
--valCnt;
if (value === undefined){
value = parDefault;
};
loadedSettings[parValue] = value;
checkValCnt();
});
};

for (var valname in codeMirrorSetable){
++valCnt;
getValue(valname);
getValue(valname, codeMirrorSetable[valname]);
};
--valCnt;
checkValCnt();
Expand Down
2 changes: 1 addition & 1 deletion src/modules/text/settingsDlg.js
Expand Up @@ -30,7 +30,7 @@ define([
, HorizontalSlider
, Delayed
){
Dlg = declare([TooltipDialog], {
var Dlg = declare([TooltipDialog], {
buildRendering: function(){
this.inherited(arguments);
var self = this;
Expand Down

0 comments on commit a9014cc

Please sign in to comment.