Kategorien
CSS JavaScript Web Frontend Webdeveloper Tools

Browser Caching deaktivieren in Firefox, IE, Chrome, Safari, Opera

Als Webdeveloper muss man sich mit allen gängigen Browsern rumschlagen und beherrschen, mit allen zu debuggen. Um dies zu tun, braucht man auf jeden Fall 2 Dinge:

Browser Cache deaktivieren beim Firefox

Geht über das Plugin: Web Developer

Einfach nach der Installation: Disable->Disable Cache->Disable Entire Cache

Kategorien
JavaScript

Javascript Zugriff auf Member Variablen in innerer Funktion

Wenn man in einer solchen Situation Zugriff auf Member Variablen benötigt aus einer inneren (z.B. anonymen) Funktion, kann man folgenden Trick anwenden:

function Object() {
 this.memberVar= "foo";
 this.memberFunction= function()
 {
  var self = this;
  this.innerFunction= function()
  {
   alert(self.memberVar)
  }
 }
}
Kategorien
HTML5 JavaScript Web Frontend WebGL

HTML5 Canvas Text auf Canvas schreiben richtiger Zeilenumbruch

Wenn man einen bestimmten Text auf einen Canvas schreiben will und dafür bestimmen will, wann ein Text umgebrochen werden muss, kann man die folgende Funktion benutzen, die aus einem Text in Array macht in Abhängigkeit des Canvas.

Bsp:

var canvas = document.createElement("canvas");
var context = canvas.getContext("2d");
//vorher muss Schriftgröße des Canvas gesetzt werden
context.font = "30px arial";
textArr  = textToArray ("Wordpress eigene Farben und CSS Klassen in den Editor einbauen", 300, context);
//textArr enhält ["Wordpress Plugin"] und ["selber erstellen Tutorial"]
textToArray = function(text, maxWidth, context){
    var textArr = new Array();
    var fragment = "";
    var lastCutPostion = 0;
    var lastPossibleCutPosition = 0;
    var charCounter = 0;
    var position = 0;
    $j.each(text, function(index, char) {
        if(char == " " && charCounter != 0)
        {
            fragment  = text.substring (lastCutPostion, position);
            //console.log(fragment);
            textWidth = context.measureText(fragment).width;
            //console.log(textWidth);
            if(textWidth > maxWidth)
            {
                //console.log("max width reched");
                fragment  = text.substring (lastCutPostion, lastPossibleCutPosition);
                //console.log(fragment);
                textArr.push(fragment);
                charCounter = -1 + (position - lastPossibleCutPosition);
                lastCutPostion = lastPossibleCutPosition + 1;
            }
            lastPossibleCutPosition = position;
        }
        position++;
        charCounter++;
    });
    //do not forget the last Word
    if(charCounter > 0)
    {
        fragment  = text.substring(lastCutPostion, text.length);
        textWidth = context.measureText(fragment).width;
        //console.log(textWidth);
        if(textWidth > maxWidth)
        {
            fragment  = text.substring (lastCutPostion, lastPossibleCutPosition);
            lastCutPostion = lastPossibleCutPosition + 1;
            textArr.push(fragment);
            fragment  = text.substring(lastCutPostion, text.length);
        }
        textArr.push(fragment);
    }
    return textArr;
}
Kategorien
JavaScript Web Frontend

Javascript Text spliten in Array nach maximaler Zeichenlänge

Wenn man einen Text mit Javascript so teilen will, dass man eine bestimmte Zeichenlänge nicht überschreitet, kann man die folgende Funktion verwenden, die aus einem Text und einer Zeichenlänge ein Array zurückgibt:

Bsp:

textArr  = textToArray ("Wordpress eigene Farben und CSS Klassen in den Editor einbauen", 20);
//textArr enhält ["Wordpress Plugin"] und ["selber erstellen Tutorial"]
     textToArray = function(text, maxLineCharactersCount){
    var textArr = new Array();
    var fragment = "";
    var lastCutPostion = 0;
    var lastPossibleCutPosition = 0;
    var charCounter = 0;
    var position = 0;
    $j.each(text, function(index, char) {
        if(char == " " && charCounter != 0)
        {
            if(charCounter > maxLineCharactersCount)
            {
                //console.log(charCounter- (position - lastPossibleCutPosition));
                fragment  = text.substring (lastCutPostion, lastPossibleCutPosition);
                //console.log(fragment);
                textArr.push(fragment);
                charCounter = -1 + (position - lastPossibleCutPosition);
                lastCutPostion = lastPossibleCutPosition + 1;
            }
            lastPossibleCutPosition = position;
        }
        position++;
        charCounter++;
    });
    //do not forget the last Word
   if(charCounter > 0)
   {
       fragment  = text.substring(lastCutPostion, text.length);
       //console.log(textWidth);
       if(charCounter > maxLineCharactersCount)
       {
           fragment  = text.substring (lastCutPostion, lastPossibleCutPosition);
           lastCutPostion = lastPossibleCutPosition + 1;
           textArr.push(fragment);
           fragment  = text.substring(lastCutPostion, text.length);
       }
       textArr.push(fragment);
   }   
    return textArr;
}
Kategorien
HTML5 JavaScript WebGL

Three.js Camerasteuerung mit der Tastatur

Um mit der Tastatur (a,w,s,d und q,e und t,g,f,h) in einem three.js 3D-Projekt die Kamera zu bewegen, sind ein paar einfach Schritte nötig.

in der init-Methode

document.addEventListener( 'keypress', onDocumentKeyPress, false );

und eine einfache Methode

Kategorien
JavaScript Web Frontend

Objektorientierte Programmierung in JavaScript OOP

In der letzten Zeit erfreut sich JavaScript wieder größerer Beliebtheit. Für Freunde der objektorientierten Programmierung ist JavaScript allerdings etwas umständlich. Es gibt keine Klassen, keine Vererbung und keine privaten Attribute. Dennoch ist es möglich, in JavaScript objektorientiert zu programmieren.

Hierzu wird anstelle einer Klasse einfach eine Funktion definiert, die alle Attribute und Methoden enthält. Diese Funktion nennt sich Konstruktorfunktion. Man kann allerdings auch etwas tricksen, in dem man den Attributen das Schlüsselwort ‚var‘ voran stellt. Damit sind sie nur innerhalb der Klasse sichtbar (private statt public).

Um eine ganz allgemeine geometrische Figur darzustellen, kann der folgenden Programmcode verwendet werden:

function Figur() {}

Figur.prototype = {
 getBreite: function() {
 return this.breite;
 },
setBreite: function(b) {
 this.breite = b;
 },
getHoehe: function() {
 return this.hoehe;
 },
setHoehe: function(h) {
 this.hoehe = h;
 }
 }

Da gibt es zum einen den Konstruktor ganz oben. Wie auch in jeder Programmiersprache kann man in JavaScript beliebige Parameter angeben. Um die Attribute einer Klasse muss man sich an dieser Stelle nicht kümmern. Diese werden, wie in diesem Beispiel, über den Prototypen automatisch mit angelegt. Desweiteren werden direkt im Prototypen die Funktionen implementiert, die die Klasse bereitstellen soll. In diesem Beispiel sind das nur die Getter und Setter für die Breite und Höhe der Figur. Wie schon erwähnt, werden jetzt auch die Attribute mit angelegt. Zum Beispiel bei getBreite, wird mit dem Zugriff auf this.breite, die Variable angelegt und ist innerhalb der Klasse verfügbar.

Weiterhin ist auffällig, dass die Funktionen jeweils per Komma getrennt werden. Es ist also soetwa, wie eine Aufzählung der Funktionen.

Das Instanziieren der Klasse würde dann wie folgt aussehen:

meineFigur = new Figur();
meineFigur.setBreite(4);
meineFigur.setHoehe(6);

Vererbung

Will man jetzt eine ganz spezielle geometrische Figur, wie zum Beispiel ein Viereck anlegen, kann die Klasse Figur verwendet und erweitert werden. So kann eine Funktion hinzugefügt werden, um die Fläche der Figur zurück zu geben:

function Viereck() {}

Viereck.prototype = new Figur();
Viereck.prototype.constructor = Viereck;
Viereck.prototype.getFlaeche = function() {
 return this.getBreite() * this.getHoehe();
 }

Auch hier beginnt die Klasse mit dem Konstruktor. interessanter ist jetzt allerdings, dass die neue Funkton getFlaeche() zwar auch im Prototypen definiert wird, jetzt aber einen eigenen Eintrag erhält. Dem Prototypen der Klasse wird jetzt ein Objekt der Eltern-Klasse zugewiesen. Und den Konstruktor kann man auch nochmal explizit angeben, was aber optional ist.

Artikel von Tobias Spiesecke

Kategorien
Android C C++ CodeIgniter Framework iPhone/iOS Java JavaScript Mobil MySQL PHP Webdeveloper Tools Zend Framework

Teil 1: Clean Code – Regeln für guten, sauberen Code

Sauberen und leicht verständlichen Code zu schreiben ist das höchste Ziel in einem guten IT-Projet. Vieles hängt davon ab:

  • Wartbarkeit
  • Einarbeitungszeit für andere Programmierer, versteht man schnell, was einzelne Funktionen erledigen
  • Robustheit bei Änderungen
  • Testbarkeit, fällt alles zusammen, bei kleinen Änderungen, können schnell stabile Updates bereitgestellt werden
  • Popularität bei anderen Programmierern z.B: bei Open Source Projekten, als negative Beispiel sei XT-Commerce genannt

Das sehr zu empfehlende Standardwerk zu dem Thema ist „Clean Code – Refactoring, Patterns, Testen und Techniken für sauberen Code“ von Robert C. Martin. In diesem Artikel werden Kapitel 1 bis 3 behandelt.

Aussagekräftige Namen

Der Namen einer Variable, Funktion oder Klasse sollte sofort erklären, warum Sie existiert, was sie tut und wie sie benutzt wird. Wenn eine Variable einen Kommentar benötigt, drückt Sie ihren Zweck nicht aus.

Bsp:

int d //Anzahl vergangener Tage
besser ist:
int daysSinceCreation;

Aussprechbare Namen verwenden

Keine Konstrukte mit unklaren Abkürzungen wie: int daSiCre anstatt von daysSinceCreation.

Suchbare Namen verwenden

Moderne IDEs machen das Suchen einfach, aber es nützt nichts, wenn man nach dem Buchstaben e einer Laufvariable suchen muss und von Ergebnissen überschwemmt wird.

Variablen Namen mit einem Buchstaben sind nur als lokale Variablen in kurzen Methoden zu verwenden.

Kategorien
JavaScript Web Frontend

Javascript Cookies setzen und auslesen

Die Arbeit mit Cookies in Javascript ist sehr unhandlich, deswegen sollte immer eine Bibliothek benutzt werden, die einem schwer lesbaren Code erspart, sonst muss man sich mit solchem Code anfreunden:

a = document.cookie;
cookiename = a.substr(0,a.search('='));
cookiewert = a.substr(a.search('=')+1,a.search(';'));
if(cookiewert == '')
{
cookiewert = a.substr(a.search('=')+1,a.length);
}

Es empfiehlt sich die Bibliothek Javascript Cookie Library with jQuery bindings and JSON support für das Cookie Handling zu benutzen. Diese kann mit oder ohne jQuery benutzt werden. Mit jQuery sehen die Operationen dann so aus:

$.cookies.set('foo', '0');

var foo = $.cookies.get('foo');
Kategorien
CSS jQuery WordPress

Entfernen von leeren HTML paragraph Tags

Der Editor von WordPress generiert leere <p> Tags, die nicht sehr hilfreich sind beim Gestalten.

Eine Lösung via CSS (CSS3 – Kampatibilität :empty):

p:empty
{
    display:none;
}

oder mit besserer Browser Kompatibilität und jQuery:

 <script>
    $("p:empty").hide();
</script>
Kategorien
JavaScript

Javascript confirm

Mit dem Javascript Confirm-Snippet kann elegant eine Sicherheitsabfrage eingefügt werden z.B. in Backendbereiche, die kritische Optionen ausführen und bevor der User eine Bestätigung der zu ausführenden Aufgabe tätigen muss:

<a href="deleteAll.php" onclick="return confirm('Möchtest Du diese schwerwiegende Option wirklich ausführen?')">Test</a>