hi Matthias,
Om nah hoo pez nyeetz, tami!
finde aber aus didaktisch-pädagogischen gründen durchaus einen reiz darin, auch als "lehrbeispiel" für selfhtml ...; aber ich rieche schon, dass es dafür "um die ohren" gibt ...;
Warum sollte es?
SELFHTML hat ganz klar einen Bildungsauftrag. Und dazu zählt auch ein sauber eingerückter Code. In den Wikibeispielen achten wir sehr darauf, bei den anderen Sachen ist es nicht immer möglich.
Also ich bin bei Zeile 120. Es ist auch nicht nur die Einrückung, wie ich schrieb. typeof soll weg, das war das eine mal, wo ich in den Code eingeriffen habe.
"test.js:122:17:Unexpected 'typeof'. Use '===' to compare directly with undefined."
Und die dreifachen Gleichheitszeichen:
configChecked === 'false'
mit
configChecked = sessionStorage.getItem('config_checked');
ich gehe davon aus, das .getItem einen String in dem Fall zurück gibt.
"test.js:125:67:Expected '===' and instead saw '=='."
Für ein Gefühl, was jslint mir ausspuckt:
C:\Program Files\nodejs\node.exe C:\jslint-reporter\wrapper.js test.js
test.js:127:25:Combine this with the previous 'var' statement.
test.js:128:23:Expected exactly one space between 'if' and '('.
test.js:129:29:Combine this with the previous 'var' statement.
test.js:130:29:Combine this with the previous 'var' statement.
test.js:131:27:Expected exactly one space between 'if' and '('.
test.js:135:25:Unnecessary 'else' after disruption.
test.js:136:29:Expected 'sessionStorage' at column 33, not column 29.
test.js:137:25:Expected '}' at column 29, not column 25.
test.js:140:16:Unexpected character '(space)'.
test.js:145:19:Expected exactly one space between 'if' and '('.
test.js:145:49:Expected '{' and instead saw 'Storage'.
test.js:145:49:Stopping. (7% scanned).
Also ja: über 50% sind Einrückungen, es sind aber auch fehlende Semikola nach Funktionsbeendigungen, fehlende Blanks (und zuviele Blanks hinter einem Semikolon), Zusammenfassung der var-Statements am Anfang (das ist etwas mühselig, die alle da oben reinzuschreiben ...).
Ich paste hier mal die ersten 172 Zeilen jslint-konform und sehe grade, dass er mir einen Fehler gibt, den ich nicht zuordnen kann:
test.js:116:61:Uninitialized 'threads_open'.
test.js:116:75:Uninitialized 'Config'.
beide mit "undefined" zu initialisieren ist blödsinn, dass will "er" nicht:
test.js:116:74:It is not necessary to initialize 'threads_open' to 'undefined'.
ich hoffe zudem dass:
test.js:148:37:['HighlightVisitedPostings'] is better written in dot notation.
test.js:148:91:['HighlightOwnPostings'] is better written in dot notation.
mit dot notation auch "funzt":
if (Config.Settings.HighlightVisitedPostings !== 'yes' || Config.Settings.HighlightOwnPostings !== 'yes') {
Ansonsten hier die ersten 172 Zeilen (inkl. o.g. Fehler mit nichtinitialisierten Variablen);
(function () {
'use strict';
var
div = document.createElement('div'),
supported =
div.querySelector && div.querySelectorAll &&
div.classList && div.classList.contains &&
div.textContent === '' &&
div.addEventListener &&
window.sessionStorage &&
window.localStorage &&
window.getComputedStyle &&
window.XMLHttpRequest &&
Function.prototype.bind,
firstVisit = false,
lastVisit = sessionStorage.getItem('session_start'),
lastReload = sessionStorage.getItem('last_reload'),
forEach, escapeHTML, slice, timeout, clearIntervals, getLength, Modules;
if (!supported) {
if (window.console && console.error) {
console.error('JavaScript-Erweitungen: Sie verwenden einen nicht unterstuetzten Browser. Bitte verwenden Sie eine aktuelle Browserversion.');
}
return;
}
div = undefined;
if (!lastVisit) {
lastVisit = localStorage.getItem('logged_out');
if (!lastVisit) {
lastVisit = Date.now();
}
localStorage.setItem('last_visit', lastVisit);
sessionStorage.setItem('session_start', Date.now());
sessionStorage.setItem('config_checked', 'false');
firstVisit = true;
} else {
lastVisit = localStorage.getItem('last_visit');
}
if (!lastReload) {
lastReload = lastVisit;
}
forEach = function (object, func) {
var property;
for (property in object) {
if (object.hasOwnProperty(property)) {
func.call(object, property, object[property]);
}
}
};
escapeHTML = function (string) {
return string
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '<')
.replace(/'/g, '"')
.replace(/'/g, ''');
};
slice = Array.prototype.slice;
if (!Array.from) {
Array.from = function (list) {
return slice.call(list);
};
}
timeout = function (id) {
window.clearTimeout(id);
};
clearIntervals = function (id) {
window.clearInterval(id);
};
getLength = function (arr) {
var len = arr.length;
console.log('Config.activeXMLHttpRequests.length: ' + len);
return len;
};
Modules = {};
Modules.queue = [];
Modules.add = function (module) {
Modules.queue.push(module);
};
Modules.init = function () {
var configMismatch = false, configChecked, root, a, threads_open, Config, tmp, ConfigDialog, ret;
if (document.body.id === 'selfforum-hauptseite') {
configChecked = sessionStorage.getItem('config_checked');
root = document.getElementById('root');
a = root.querySelector('a');
if ((threads_open === undefined || threads_open === false) || !a || !a.onclick) {
configMismatch = true;
} else if (firstVisit || !configChecked || configChecked === 'false') {
Config.Check('Name', true);
if (!Config.Settings.Name) {
tmp = sessionStorage.getItem('name');
if (!tmp) {
ConfigDialog = 'Du hast keinen (Posting)Namen angegeben!\nWillst du jetzt die Benutzer-Einstellungen aufrufen,\num einen Namen einzugeben?';
ret = window.confirm(ConfigDialog);
if (ret) {
window.location = 'http://forum.de.selfhtml.org/cgi-bin/user/fo_userconf#neuepostings';
return;
}
sessionStorage.setItem('name', '');
}
}
sessionStorage.setItem('name', Config.Settings.Name);
Config.Check('HighlightVisitedPostings', true);
Config.Check('HighlightOwnPostings', true);
Config.Check('SortThreads', true);
if (Config.Settings.SortThreads) {
Storage.setValue('thread_sort', Config.Settings.SortThreads);
} else {
Storage.setValue('thread_sort', 'newestfirst');
}
if (Config.Settings.HighlightVisitedPostings !== 'yes' || Config.Settings.HighlightOwnPostings !== 'yes') {
configMismatch = true;
} else {
sessionStorage.setItem('config_checked', 'true');
}
}
}
if (!configMismatch) {
Modules.queue.forEach(function (module) {
if (module.documentType === 'all' || document.body.id === 'selfforum-' + module.documentType) {
module.init();
}
});
} else {
Config.Show('mismatch');
}
};
document.addEventListener('DOMContentLoaded', Modules.init);
Matthias
mfg
tami