fixing various lint violations

This commit is contained in:
Peli de Halleux 2016-05-04 23:31:55 -07:00
parent 29b28e7f0d
commit 04a60a5b47
5 changed files with 335 additions and 272 deletions

5
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,5 @@
// Place your settings in this file to overwrite default and user settings.
{
"tslint.enable": true,
"tslint.rulesDirectory": "node_modules/tslint-microsoft-contrib"
}

View File

@ -4,12 +4,12 @@
namespace pxsim { namespace pxsim {
pxsim.initCurrentRuntime = () => { pxsim.initCurrentRuntime = () => {
U.assert(!runtime.board) U.assert(!runtime.board);
runtime.board = new Board() runtime.board = new Board();
} }
export function board() { export function board() {
return runtime.board as Board return runtime.board as Board;
} }
export interface AnimationOptions { export interface AnimationOptions {
@ -125,9 +125,9 @@ namespace pxsim {
export namespace AudioContextManager { export namespace AudioContextManager {
var _context: any; // AudioContext let _context: any; // AudioContext
var _vco: any; //OscillatorNode; let _vco: any; // OscillatorNode;
var _vca: any; // GainNode; let _vca: any; // GainNode;
function context(): any { function context(): any {
if (!_context) _context = freshContext(); if (!_context) _context = freshContext();
@ -152,7 +152,7 @@ namespace pxsim {
export function tone(frequency: number, gain: number) { export function tone(frequency: number, gain: number) {
if (frequency <= 0) return; if (frequency <= 0) return;
var ctx = context(); let ctx = context();
if (!ctx) return; if (!ctx) return;
gain = Math.max(0, Math.min(1, gain)); gain = Math.max(0, Math.min(1, gain));
@ -198,7 +198,7 @@ namespace pxsim.basic {
pause(interval * 5); pause(interval * 5);
} else { } else {
if (s.length == 1) showLeds(createImageFromString(s), interval * 5) if (s.length == 1) showLeds(createImageFromString(s), interval * 5)
else ImageMethods.scrollImage(createImageFromString(s + ' '), interval, 1); else ImageMethods.scrollImage(createImageFromString(s + " "), interval, 1);
} }
} }
@ -231,14 +231,14 @@ namespace pxsim.control {
let b = board(); let b = board();
return b && b.id return b && b.id
? b.id.slice(0, 4) ? b.id.slice(0, 4)
: 'abcd'; : "abcd";
} }
export function deviceSerialNumber(): number { export function deviceSerialNumber(): number {
let b = board(); let b = board();
return parseInt(b && b.id return parseInt(b && b.id
? b.id.slice(1) ? b.id.slice(1)
: '42'); : "42");
} }
export function onEvent(id: number, evid: number, handler: RefAction) { export function onEvent(id: number, evid: number, handler: RefAction) {
@ -306,7 +306,7 @@ namespace pxsim.input {
export function compassHeading(): number { export function compassHeading(): number {
var b = board(); let b = board();
if (!b.usesHeading) { if (!b.usesHeading) {
b.usesHeading = true; b.usesHeading = true;
runtime.queueDisplayUpdate(); runtime.queueDisplayUpdate();
@ -315,7 +315,7 @@ namespace pxsim.input {
} }
export function temperature(): number { export function temperature(): number {
var b = board(); let b = board();
if (!b.usesTemperature) { if (!b.usesTemperature) {
b.usesTemperature = true; b.usesTemperature = true;
runtime.queueDisplayUpdate(); runtime.queueDisplayUpdate();

View File

@ -35,7 +35,8 @@ namespace pxsim.micro_bit {
virtualButtonUp: "#fff", virtualButtonUp: "#fff",
lightLevelOn: "yellow", lightLevelOn: "yellow",
lightLevelOff: "#555" lightLevelOff: "#555"
}}); }
});
export function randomTheme(): IBoardTheme { export function randomTheme(): IBoardTheme {
return themes[Math.floor(Math.random() * themes.length)]; return themes[Math.floor(Math.random() * themes.length)];
@ -59,8 +60,7 @@ namespace pxsim.micro_bit {
leave: "mouseleave" leave: "mouseleave"
}; };
export class MicrobitBoardSvg export class MicrobitBoardSvg {
{
public element: SVGSVGElement; public element: SVGSVGElement;
private style: SVGStyleElement; private style: SVGStyleElement;
private defs: SVGDefsElement; private defs: SVGDefsElement;
@ -127,10 +127,10 @@ namespace pxsim.micro_bit {
Svg.fill(this.buttons[index], btn.pressed ? theme.buttonDown : theme.buttonUp); Svg.fill(this.buttons[index], btn.pressed ? theme.buttonDown : theme.buttonUp);
}); });
var bw = state.displayMode == pxsim.DisplayMode.bw let bw = state.displayMode == pxsim.DisplayMode.bw
var img = state.image; let img = state.image;
this.leds.forEach((led, i) => { this.leds.forEach((led, i) => {
var sel = (<SVGStylable><any>led) let sel = (<SVGStylable><any>led)
sel.style.opacity = ((bw ? img.data[i] > 0 ? 255 : 0 : img.data[i]) / 255.0) + ""; sel.style.opacity = ((bw ? img.data[i] > 0 ? 255 : 0 : img.data[i]) / 255.0) + "";
}) })
this.updatePins(); this.updatePins();
@ -163,7 +163,7 @@ namespace pxsim.micro_bit {
Svg.fill(this.shakeButton, this.props.theme.virtualButtonUp); Svg.fill(this.shakeButton, this.props.theme.virtualButtonUp);
this.board.bus.queue(DAL.MICROBIT_ID_GESTURE, 11); // GESTURE_SHAKE this.board.bus.queue(DAL.MICROBIT_ID_GESTURE, 11); // GESTURE_SHAKE
}) })
this.shakeText = Svg.child(this.g, "text", {x:400, y:110, class:'sim-text'}) as SVGTextElement; this.shakeText = Svg.child(this.g, "text", { x: 400, y: 110, class: "sim-text" }) as SVGTextElement;
this.shakeText.textContent = "SHAKE" this.shakeText.textContent = "SHAKE"
} }
} }
@ -171,9 +171,9 @@ namespace pxsim.micro_bit {
private updateButtonAB() { private updateButtonAB() {
let state = this.board; let state = this.board;
if (state.usesButtonAB && !this.buttonABText) { if (state.usesButtonAB && !this.buttonABText) {
(<any>this.buttonsOuter[2]).style.visibility = 'visible'; (<any>this.buttonsOuter[2]).style.visibility = "visible";
(<any>this.buttons[2]).style.visibility = 'visible'; (<any>this.buttons[2]).style.visibility = "visible";
this.buttonABText = Svg.child(this.g, "text", {class: 'sim-text', x:370, y:272 }) as SVGTextElement; this.buttonABText = Svg.child(this.g, "text", { class: "sim-text", x: 370, y: 272 }) as SVGTextElement;
this.buttonABText.textContent = "A+B"; this.buttonABText.textContent = "A+B";
this.updateTheme(); this.updateTheme();
} }
@ -182,9 +182,9 @@ namespace pxsim.micro_bit {
private updatePin(pin: Pin, index: number) { private updatePin(pin: Pin, index: number) {
if (!pin) return; if (!pin) return;
let text = this.pinTexts[index]; let text = this.pinTexts[index];
let v = ''; let v = "";
if (pin.mode & PinMode.Analog) { if (pin.mode & PinMode.Analog) {
v = Math.floor(100 - (pin.value || 0) / 1023 * 100) + '%'; v = Math.floor(100 - (pin.value || 0) / 1023 * 100) + "%";
if (text) text.textContent = (pin.period ? "~" : "") + (pin.value || 0) + ""; if (text) text.textContent = (pin.period ? "~" : "") + (pin.value || 0) + "";
} }
else if (pin.mode & PinMode.Digital) { else if (pin.mode & PinMode.Digital) {
@ -312,7 +312,8 @@ namespace pxsim.micro_bit {
this.lightLevelButton = Svg.child(this.g, "circle", { this.lightLevelButton = Svg.child(this.g, "circle", {
cx: `50px`, cy: `${cy}px`, r: `${r}px`, cx: `50px`, cy: `${cy}px`, r: `${r}px`,
class: 'sim-light-level-button', class: 'sim-light-level-button',
fill: `url(#${gid})` }) as SVGCircleElement; fill: `url(#${gid})`
}) as SVGCircleElement;
let pt = this.element.createSVGPoint(); let pt = this.element.createSVGPoint();
Svg.buttonEvents(this.lightLevelButton, Svg.buttonEvents(this.lightLevelButton,
(ev) => { (ev) => {
@ -361,7 +362,8 @@ namespace pxsim.micro_bit {
"enable-background": "new 0 0 498 406", "enable-background": "new 0 0 498 406",
"class": "sim", "class": "sim",
"x": "0px", "x": "0px",
"y": "0px"}); "y": "0px"
});
this.style = <SVGStyleElement>Svg.child(this.element, "style", {}); this.style = <SVGStyleElement>Svg.child(this.element, "style", {});
this.style.textContent = ` this.style.textContent = `
svg.sim { svg.sim {
@ -485,12 +487,12 @@ svg.sim.grayscale {
// leds // leds
this.leds = []; this.leds = [];
this.ledsOuter = []; this.ledsOuter = [];
var left = 154, top = 113, ledoffw = 46, ledoffh = 44; let left = 154, top = 113, ledoffw = 46, ledoffh = 44;
for (var i = 0; i < 5; ++i) { for (let i = 0; i < 5; ++i) {
var ledtop = i * ledoffh + top; let ledtop = i * ledoffh + top;
for (var j = 0; j < 5; ++j) { for (let j = 0; j < 5; ++j) {
var ledleft = j * ledoffw + left; let ledleft = j * ledoffw + left;
var k = i * 5 + j; let k = i * 5 + j;
this.ledsOuter.push(Svg.child(this.g, "rect", { class: "sim-led-back", x: ledleft, y: ledtop, width: 10, height: 20, rx: 2, ry: 2 })); this.ledsOuter.push(Svg.child(this.g, "rect", { class: "sim-led-back", x: ledleft, y: ledtop, width: 10, height: 20, rx: 2, ry: 2 }));
this.leds.push(Svg.child(this.g, "rect", { class: "sim-led", x: ledleft - 2, y: ledtop - 2, width: 14, height: 24, rx: 3, ry: 3, title: `(${j},${i})` })); this.leds.push(Svg.child(this.g, "rect", { class: "sim-led", x: ledleft - 2, y: ledtop - 2, width: 14, height: 24, rx: 3, ry: 3, title: `(${j},${i})` }));
} }
@ -498,11 +500,11 @@ svg.sim.grayscale {
// head // head
this.head = <SVGGElement>Svg.child(this.g, "g", {}); this.head = <SVGGElement>Svg.child(this.g, "g", {});
Svg.child(this.head, "circle", { cx: 258, cy: 75, r: 100, fill:'transparent'}) Svg.child(this.head, "circle", { cx: 258, cy: 75, r: 100, fill: "transparent" })
this.logos.push(Svg.path(this.head, "sim-theme", "M269.9,50.2L269.9,50.2l-39.5,0v0c-14.1,0.1-24.6,10.7-24.6,24.8c0,13.9,10.4,24.4,24.3,24.7v0h39.6c14.2,0,24.8-10.6,24.8-24.7C294.5,61,284,50.3,269.9,50.2 M269.7,89.2L269.7,89.2l-39.3,0c-7.7-0.1-14-6.4-14-14.2c0-7.8,6.4-14.2,14.2-14.2h39.1c7.8,0,14.2,6.4,14.2,14.2C283.9,82.9,277.5,89.2,269.7,89.2")); this.logos.push(Svg.path(this.head, "sim-theme", "M269.9,50.2L269.9,50.2l-39.5,0v0c-14.1,0.1-24.6,10.7-24.6,24.8c0,13.9,10.4,24.4,24.3,24.7v0h39.6c14.2,0,24.8-10.6,24.8-24.7C294.5,61,284,50.3,269.9,50.2 M269.7,89.2L269.7,89.2l-39.3,0c-7.7-0.1-14-6.4-14-14.2c0-7.8,6.4-14.2,14.2-14.2h39.1c7.8,0,14.2,6.4,14.2,14.2C283.9,82.9,277.5,89.2,269.7,89.2"));
this.logos.push(Svg.path(this.head, "sim-theme", "M230.6,69.7c-2.9,0-5.3,2.4-5.3,5.3c0,2.9,2.4,5.3,5.3,5.3c2.9,0,5.3-2.4,5.3-5.3C235.9,72.1,233.5,69.7,230.6,69.7")); this.logos.push(Svg.path(this.head, "sim-theme", "M230.6,69.7c-2.9,0-5.3,2.4-5.3,5.3c0,2.9,2.4,5.3,5.3,5.3c2.9,0,5.3-2.4,5.3-5.3C235.9,72.1,233.5,69.7,230.6,69.7"));
this.logos.push(Svg.path(this.head, "sim-theme", "M269.7,80.3c2.9,0,5.3-2.4,5.3-5.3c0-2.9-2.4-5.3-5.3-5.3c-2.9,0-5.3,2.4-5.3,5.3C264.4,77.9,266.8,80.3,269.7,80.3")); this.logos.push(Svg.path(this.head, "sim-theme", "M269.7,80.3c2.9,0,5.3-2.4,5.3-5.3c0-2.9-2.4-5.3-5.3-5.3c-2.9,0-5.3,2.4-5.3,5.3C264.4,77.9,266.8,80.3,269.7,80.3"));
this.headText = <SVGTextElement>Svg.child(this.g, "text", { x: 310, y: 100, class:'sim-text' }) this.headText = <SVGTextElement>Svg.child(this.g, "text", { x: 310, y: 100, class: "sim-text" })
// https://www.microbit.co.uk/device/pins // https://www.microbit.co.uk/device/pins
// P0, P1, P2 // P0, P1, P2
@ -648,7 +650,7 @@ svg.sim.grayscale {
let state = this.board; let state = this.board;
let pin = state.pins[index]; let pin = state.pins[index];
let svgpin = this.pins[index]; let svgpin = this.pins[index];
Svg.addClass(svgpin, 'touched'); Svg.addClass(svgpin, "touched");
if (pin.mode & PinMode.Input) { if (pin.mode & PinMode.Input) {
let cursor = Svg.cursorPoint(pt, this.element, ev); let cursor = Svg.cursorPoint(pt, this.element, ev);
let v = (400 - cursor.y) / 40 * 1023 let v = (400 - cursor.y) / 40 * 1023
@ -661,7 +663,7 @@ svg.sim.grayscale {
let state = this.board; let state = this.board;
let pin = state.pins[index]; let pin = state.pins[index];
let svgpin = this.pins[index]; let svgpin = this.pins[index];
Svg.removeClass(svgpin, 'touched'); Svg.removeClass(svgpin, "touched");
this.updatePin(pin, index); this.updatePin(pin, index);
return false; return false;
}); });

56
tslint.json Normal file
View File

@ -0,0 +1,56 @@
{
"rules": {
"class-name": true,
"comment-format": [
true
],
"indent": [
true,
"spaces"
],
"no-duplicate-variable": true,
"no-eval": true,
"no-internal-module": true,
"no-trailing-whitespace": true,
"no-var-keyword": true,
"one-line": [
true,
"check-open-brace",
"check-whitespace"
],
"quotemark": [
true,
"double"
],
"semicolon": [
false,
"always"
],
"triple-equals": [
false,
"allow-null-check"
],
"typedef-whitespace": [
true,
{
"call-signature": "nospace",
"index-signature": "nospace",
"parameter": "nospace",
"property-declaration": "nospace",
"variable-declaration": "nospace"
}
],
"variable-name": [
true,
"ban-keywords"
],
"whitespace": [
true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
]
}
}