tami: [Update - Version 1.1] Molilys JavaScript-Erweiterung - jslint

Beitrag lesen

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);

  
/*jslint browser : true, devel: true*/  
/*!  
JavaScript fuer die benutzerspezifische Ansicht des SELFHTML-Forums (http://forum.de.selfhtml.org/)  
Author: Mathias Schaefer (molily)  
Aenderungen & Ergaenzungen: Gunther Pilz (Gunther)  
Lizenz: MIT License  
*/  
  
(function () {  
  
    'use strict';  
  
// ####################################################################################  
  
// Check browser support  
  
    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 = Date.now();  
        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;  
    }  
  
    // ####################################################################################  
  
    // Helfer  
  
    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, '&lt;')  
            .replace(/>/g, '&lt;')  
            .replace(/'/g, '&quot;')  
            .replace(/'/g, '&#39;');  
    };  
  
    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;  
    };  
    // ####################################################################################  
  
    // Modulverwaltung  
  
    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);  
  
    // ####################################################################################  
  
    // Hauptobjekt mit Caches  
  

Matthias

mfg

tami

4 122

Molilys JavaScript-Erweiterung aktualisiert + erweitert

Gunther
  • zu diesem forum
  1. 2
    1UnitedPower
    1. 0
      tami
  2. 1

    Molilys JavaScript-Erweiterung erweitert / Screenshots

    Gunther
  3. 2

    Molilys JavaScript-Erweiterung erweitert / Danksagung

    Gunther
  4. 0
    Auge
    1. 0
      Matthias Apsel
      1. 0
        Auge
      2. 0
        Gunther
    2. 0
      Gunther
      1. 0
        Auge
        1. 0
          Gunther
          1. 0
            Gunther
            1. 0
              Felix Riesterer
              1. 0
                Matthias Apsel
              2. 0
                Gunther
            2. 0
              Matthias Apsel
              1. 0
                Gunther
                1. 0
                  Matthias Apsel
                  1. 0
                    Gunther
                  2. 0
                    Gunther
          2. 0
            Auge
            1. 0
              Gunther
              1. 0
                Matthias Apsel
                1. 0
                  Gunther
                  1. 0
                    Matthias Apsel
                    1. 0
                      Auge
                      1. 0
                        Gunther
    3. 0
      1UnitedPower
      1. 0
        Auge
    4. 0
      Matthias Apsel
      1. 0
        Auge
        1. 0
          Matthias Apsel
          1. 0
            Gunther
            1. 0
              Matthias Apsel
              1. 0
                Gunther
                1. 0
                  Auge
          2. 0
            Auge
  5. 0
    Christian Kruse
  6. 0
    Felix Riesterer
    1. 0
      Matthias Apsel
    2. 0
      Gunther
  7. 1

    [Update - Version 1.1] Molilys JavaScript-Erweiterung

    Gunther
    1. 0
      tami
      1. 0
        Gunther
        1. 0
          tami
          1. 0
            Gunther
            1. 0
              Auge
              1. 0
                Matthias Apsel
                1. 0
                  Auge
                  1. 0
                    Gunther
                    1. 0
                      Auge
                      1. 0
                        Gunther
            2. 0

              [Update - Version 1.1] Molilys JavaScript-Erweiterung - jslint

              tami
              1. 0
                1UnitedPower
                1. 0
                  Auge
              2. 0
                Matthias Apsel
                1. 0
                  tami
                  1. 0

                    jslint - details

                    tami
                    1. 0
                      Gunther
                      1. 0
                        tami
              3. 0
                Gunther
                1. 0
                  tami
                2. 1

                  jslint - kein beauty-tool sondern ein fehlervermeidungstool

                  tami
                  • programmiertechnik
                  1. 0
                    Gunther
                    1. 0
                      tami
          2. 0

            Semantic Versioning

            1UnitedPower
            1. 0
              Matthias Apsel
  8. 0

    meiner Neugier wegen …

    Auge
    1. 0
      Gunther
      1. 0
        Auge
        1. 0
          Gunther
          1. 0
            Auge
        2. 0
          Christian Kruse
          1. 0
            Auge
            1. 0
              Christian Kruse
              1. 0
                Auge
                1. 0
                  Christian Kruse
                  1. 0
                    Auge
                2. 0
                  Matthias Apsel
                  1. 0
                    Auge
                    1. 0
                      Matthias Apsel
              2. 0
                Gunther
          2. 0
            Gunther
            1. 0
              Matthias Apsel
              1. 0
                Gunther
                1. 0
                  Matthias Apsel
                2. 0
                  Auge
                  1. 0
                    Gunther
                    1. 0
                      Auge
                      1. 0
                        Gunther
                        1. 0
                          Auge
                          1. 0
                            Gunther
              2. 0
                Gunther
            2. 0
              Auge
              1. 0
                Gunther
  9. 0
    Auge
    1. 0

      Nö, is nich wegen dir

      Auge
      • zur info
      1. 0
        Matthias Apsel
        1. 0
          Matthias Apsel
          1. 0

            Fragen und ein kleines Rätsel

            Auge
            • menschelei
            1. 0
              Matthias Apsel
              1. 0
                Matthias Apsel
  10. 0

    [Update - Version 1.2] Molilys JavaScript-Erweiterung

    Gunther
  11. 0
    M.
    1. 0
      Gunther
      1. 0
        M.
        1. 0
          Gunther
          1. 0
            M.
            1. 0
              Gunther
              1. 0
                M.
                1. 0
                  Gunther
  12. 0
    Matthias Apsel
    1. 0
      Matthias
    2. 0
      Gunther
      1. 0
        Matthias Apsel
        1. 0
          Gunther
          1. 0
            Matthias Apsel
            1. 0
              Auge
              1. 0
                Matthias Apsel
                1. 0
                  Auge
            2. 0
              Gunther