Browse Source

Merge branch 'master' into asm_doc

dev/git-series/gccdum
Rubén 6 years ago committed by GitHub
parent
commit
c6f6ab6351
  1. 1
      app.js
  2. 11
      static/compiler.js
  3. 49
      static/diff.js
  4. 18
      static/editor.js
  5. 28
      static/explorer.css
  6. 11
      static/main.js
  7. 11
      static/output.js
  8. 19
      static/settings.js
  9. 4
      views/embed.pug
  10. 40
      views/popups.pug

1
app.js

@ -516,7 +516,6 @@ findCompilers()
webServer
.set('trust proxy', true)
.set('view engine', 'pug')
.set('view cache', true)
.use(morgan('combined', {stream: logger.stream}))
.use(compression())
.get('/', function (req, res) {

11
static/compiler.js

@ -159,6 +159,7 @@ define(function (require) {
container.on('destroy', function () {
self.eventHub.unsubscribe();
self.eventHub.emit('compilerClose', self.id);
self.outputEditor.dispose();
}, this);
container.on('resize', this.resize, this);
container.on('shown', this.resize, this);
@ -472,12 +473,16 @@ define(function (require) {
};
Compiler.prototype.sendCompiler = function () {
this.eventHub.emit('compiler', this.id, this.compiler, this.options);
this.eventHub.emit('compiler', this.id, this.compiler, this.options, this.sourceEditorId);
};
Compiler.prototype.onEditorClose = function (editor) {
if (editor === this.sourceEditorId) {
this.container.close();
// We can't immediately close as an outer loop somewhere in GoldenLayout is iterating over
// the hierarchy. We can't modify while it's being iterated over.
_.defer(function (self) {
self.container.close();
}, this);
}
};
@ -519,7 +524,7 @@ define(function (require) {
Compiler.prototype.updateCompilerName = function () {
var compilerName = this.compiler ? this.compiler.name : "no compiler set";
var compilerVersion = this.compiler ? this.compiler.version : "";
this.container.setTitle("#" + this.sourceEditorId + " with " + compilerName);
this.container.setTitle(compilerName + " (Editor #" + this.sourceEditorId + ", Compiler #" + this.id + ")");
this.domRoot.find(".full-compiler-name").text(compilerVersion);
};

49
static/diff.js

@ -72,7 +72,18 @@ define(function (require) {
labelField: 'name',
searchField: ['name'],
options: [],
items: []
items: [],
render: {
option: function (item, escape) {
return '<div>' +
'<span class="compiler">' + escape(item.compiler.name) + '</span>' +
'<span class="options">' + escape(item.options) + '</span>' +
'<ul class="meta">' +
'<li class="editor">Editor #' + escape(item.editorId) + '</li>' +
'<li class="compilerId">Compiler #' + escape(item.id) + '</li>' +
'</ul></div>';
}
}
}).on('change', function () {
var compiler = self.compilers[$(this).val()];
if (!compiler) return;
@ -83,9 +94,7 @@ define(function (require) {
self.rhs.compiler = compiler;
self.rhs.id = compiler.id;
}
self.eventHub.emit('resendCompilation', compiler.id);
self.updateCompilerNames();
self.updateState();
self.onDiffSelect(compiler.id);
});
this.selectize = {lhs: selectize[0].selectize, rhs: selectize[1].selectize};
@ -98,6 +107,7 @@ define(function (require) {
this.container.on('destroy', function () {
this.eventHub.unsubscribe();
this.outputEditor.dispose();
}, this);
container.on('resize', this.resize, this);
container.on('shown', this.resize, this);
@ -119,6 +129,12 @@ define(function (require) {
});
};
Diff.prototype.onDiffSelect = function (id) {
this.eventHub.emit('resendCompilation', id);
this.updateCompilerNames();
this.updateState();
};
Diff.prototype.onCompileResult = function (id, compiler, result) {
// both sides must be updated, don't be tempted to rewrite this as
// var changes = lhs.update() || rhs.update();
@ -129,10 +145,31 @@ define(function (require) {
}
};
Diff.prototype.onCompiler = function (id, compiler, options) {
Diff.prototype.onCompiler = function (id, compiler, options, editorId) {
if (!compiler) return;
options = options || "";
this.compilers[id] = {id: id, name: compiler.name + " " + options};
var name = compiler.name + " " + options;
// TODO: selectize doesn't play nicely with CSS tricks for truncation; this is the best I can do
// There's a plugin at: http://www.benbybenjacobs.com/blog/2014/04/09/no-wrap-plugin-for-selectize-dot-js
// but it doesn't look easy to integrate.
var maxLength = 30;
if (name.length > maxLength - 3) name = name.substr(0, maxLength - 3) + "...";
this.compilers[id] = {
id: id,
name: name,
options: options,
editorId: editorId,
compiler: compiler
};
if (!this.lhs.id) {
this.lhs.compiler = this.compilers[id];
this.lhs.id = id;
this.onDiffSelect(id);
} else if (!this.rhs.id) {
this.rhs.compiler = this.compilers[id];
this.rhs.id = id;
this.onDiffSelect(id);
}
this.updateCompilers();
};

18
static/editor.js

@ -98,6 +98,18 @@ define(function (require) {
}, this)
});
this.editor.addAction({
id: 'toggleCompileOnChange',
label: 'Toggle compile on change',
keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Enter],
keybindingContext: null,
run: _.bind(function () {
this.eventHub.emit('modifySettings', {
compileOnChange: !this.settings.compileOnChange
});
}, this)
});
function tryCompilerSelectLine(thisLineNumber) {
_.each(self.asmByCompiler, function (asms, compilerId) {
var targetLines = [];
@ -242,8 +254,10 @@ define(function (require) {
// * Turn off auto.
// * edit code
// * change compiler or compiler options (out of date code is used)
if (before.delayAfterChange !== after.delayAfterChange || !this.debouncedEmitChange) {
if (after.delayAfterChange) {
var bDac = before.compileOnChange ? before.delayAfterChange : 0;
var aDac = after.compileOnChange ? after.delayAfterChange : 0;
if (bDac !== aDac || !this.debouncedEmitChange) {
if (aDac) {
this.debouncedEmitChange = _.debounce(_.bind(function () {
this.maybeEmitChange();
}, this), after.delayAfterChange);

28
static/explorer.css

@ -55,9 +55,33 @@
}
.diff-picker {
max-width: 20em;
width: 20em;
}
.diff-picker .compiler {
font-weight: bold;
}
.diff-picker .options {
padding-left: 0.5em;
font-size: small;
}
.diff-picker .meta {
text-align: right;
list-style: none;
margin: 0;
padding: 0;
font-size: x-small;
}
.diff-picker .meta li {
padding: 0;
display: inline;
margin: 0 10px 0 0;
}
input.options {
width: 98%;
margin-left: 0.25em;
@ -164,11 +188,11 @@ pre.content {
}
.font-option-active {
background: #226699!important;
background: #226699 !important;
}
.font-option-active:hover {
background: #4477AA!important;
background: #4477AA !important;
}
.notification {

11
static/main.js

@ -65,6 +65,7 @@ define(function (require) {
var Raven = require('raven-js');
var settings = require('./settings');
var local = require('./local');
var Alert = require('./alert');
function setupSettings(eventHub) {
var currentSettings = JSON.parse(local.get('settings', '{}'));
@ -79,7 +80,10 @@ define(function (require) {
eventHub.emit('settingsChange', currentSettings);
});
settings($('#settings'), currentSettings, onChange);
var setSettings = settings($('#settings'), currentSettings, onChange);
eventHub.on('modifySettings', function (newSettings) {
setSettings(_.extend(currentSettings, newSettings));
});
}
function start() {
@ -178,6 +182,11 @@ define(function (require) {
local.remove('gl');
window.location.reload();
});
$('#thanks-to').click(function () {
$.get('thanks.html', function (result) {
new Alert().alert("Special thanks to", $(result));
});
});
}
$(start);

11
static/output.js

@ -44,6 +44,7 @@ define(function (require) {
this.eventHub.on('compileResult', this.onCompileResult, this);
this.eventHub.emit('resendCompilation', this.compilerId);
this.eventHub.on('compilerFontScale', this.onFontScale, this);
this.eventHub.on('compilerClose', this.onCompilerClose, this);
this.updateCompilerName();
}
@ -88,6 +89,16 @@ define(function (require) {
this.container.setTitle(name);
};
Output.prototype.onCompilerClose = function (id) {
if (id === this.compilerId) {
// We can't immediately close as an outer loop somewhere in GoldenLayout is iterating over
// the hierarchy. We can't modify while it's being iterated over.
_.defer(function (self) {
self.container.close();
}, this);
}
};
return {
Output: Output
};

19
static/settings.js

@ -108,19 +108,30 @@ define(function (require) {
_.map(colour.schemes, function (scheme) {
return {label: scheme.name, desc: scheme.desc};
}));
add(root.find('.slider'), 'delayAfterChange', 750, Slider, {
// Handle older settings
if (settings.delayAfterChange === 0) {
settings.delayAfterChange = 750;
settings.compileOnChange = false;
}
add(root.find('.compileOnChange'), 'compileOnChange', true, Checkbox);
add(root.find('.delay'), 'delayAfterChange', 750, Slider, {
max: 3000,
step: 250,
min: 250,
formatter: function (x) {
if (x === 0) return "Disabled";
return (x / 1000.0).toFixed(2) + "s";
}
});
add(root.find('.hoverShowSource'), 'hoverShowSource', true, Checkbox);
add(root.find('.hoverShowAsmDoc'), 'hoverShowAsmDoc', true, Checkbox);
onSettingsChange(settings);
onChange(settings);
function setSettings(settings) {
onSettingsChange(settings);
onChange(settings);
}
setSettings(settings);
return setSettings;
}
return setupSettings;

4
views/embed.pug

@ -4,9 +4,7 @@ html(lang="en")
include head.pug
body.embedded
a.float-link.link(href="/" target="_blank")
| Edit on
span.lanugage-name
| Compiler Explorer
| Edit on #{language} Compiler Explorer
span.glyphicon.glyphicon-new-window
br

40
views/popups.pug

@ -57,38 +57,44 @@
button.close(type="button" data-dismiss="modal" aria-hidden="true") &times;
h3.modal-title Compiler Explorer Settings
.modal-body
div
.well.well-sm
| These settings control how Compiler Explorer acts for you. They are not
| preserved as part of shared URLs, and are persisted locally using browser
| local storage.
.well.well-sm
h4 Editor
.form-group(role="group")
.form-control.checkbox
.checkbox
label
input.autoCloseBrackets(type="checkbox")
| Automatically insert matching brackets and parentheses
.form-control Delay before compiling:&nbsp;
b Disabled
.slider.slider-horizontal.delay
b 3s
.form-control.checkbox
div
.checkbox
label
input.compileOnChange(type="checkbox")
| Compile automatically when source changes
div Delay before compiling:&nbsp;
b 0.25s&nbsp;
.slider.slider-horizontal.delay
b &nbsp;3s
.checkbox
label
input.hoverShowSource(type="checkbox")
| Highlight linked code lines on hover
.form-control.checkbox
.checkbox
label
input.hoverShowAsmDoc(type="checkbox")
| Show asm description on hover
.well.well-sm
h4 Compilation
.form-group(role="group")
.form-control.checkbox
label
input.colourise(type="checkbox")
| Colourise lines so one can see how the source maps to the output
.form-control
label
| Colour scheme:
select.colourScheme
.form-group(role="group")
.checkbox
label
input.colourise(type="checkbox")
| Colourise lines to show how the source maps to the output
label
| Colour scheme:
select.colourScheme
.modal-footer
button.btn.btn-default(type="button" data-dismiss="modal") Close

Loading…
Cancel
Save