Tag Archiv: MooTools

MooTools MenuMatic – Firefox 4 zweizeilig Problem

Die Zeit der neuen Browser. Und auch wenn alles schön und neu ist, heute morgen hatte ich dann auch gleich das erste kleine Problem.

Firefox4 mit MenuMatic wollten nicht ganz so wie ich. In meiner Navigation wurd ein Punkt zweizeilig und somit die ganze Höhe meines Menüs falsch, was zur Folge hatte das unten ein Stück abgeschnitten wurde.

Da sich über CSS keine Lösung finden ließ habe ich die js-Datei (MenuMatic_0.68.3-source.js) wie folgt geändert:
Zeile 737 einfach um +2 erhöht.

?View Code JAVASCRIPT
1
this.width = this.childMenu.getFirst().getCoordinates().width+2;

Ich hoffe das hilft dem ein oder anderen weiter…

Praxistipp – position absolute – parent height anpassen mit MooTools

Gestern bin ich auf ein kleines Problem mit einem absolut positionierten Div gestoßen.
Ich musste ein Div absolut positionieren doch sein parent Container sollte die Höhe entsprechend anpassen.
Da man ja mit absolute das Div aus dem Dokumentenfluß reißt geht das mit herkömmlichem CSS leider nicht.

Da für die Seite MooTools im Einsatz ist hab ich das ganze mit folgenden 2 Zeilen code gelöst:

?View Code JAVASCRIPT
1
2
var height = new Number($$('#content').getStyle('height').map(function(it){ return it.toInt();}));
$$('#container').setStyle('height', height + 420);

wobei +420 die Höhe des oberen Bereichs (Header, Navi, Newsblock) darstellt.
Liest man mit MooTools getStyle(‘height’) die Höhe des Containers aus so bekommt man z.b. 800px raus, daher wird die Funktion toInt() benötigt welche aus diesem String die Number 800 macht.

ScrollSpy – ein MooTools Plugin

Auf der Seite von der David Walsh findet ihr ein nettes MooTools Plugin um den Benutzer während längerer Scrollvorgänge ein kleines Erlebnis zu bieten.

walsh2

Es gibt verschiedene Demos auf der Seite, vom einfachen einblenden eines “Top-Page” Ankers, über Farbenwechsel der Hintergrunds bis zum ein- und ausblenden von Bildern während des scrollens.
Ein echt netter Eye-Catcher..

Ein kleines Beispiel:

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
window.addEvent('domready',function() {
	/* smooth */
	new SmoothScroll({duration:500});
 
	/* link management */
	$('gototop').set('opacity','0').setStyle('display','block');
 
	/* scrollspy instance */
	var ss = new ScrollSpy({
		min: 200,
		onEnter: function(position,state,enters) {
			$('gototop').fade('in');
		},
		onLeave: function(position,state,leaves) {
			$('gototop').fade('out');
		},
		container: window
	});
});

Der Code ist nicht ganz intuitiv und etwas CSS wird auch noch benötigt, aber nach dem Anschauen der Beispiele wird schnell alles klar.

jQuery noConflict Mode

Des öftern ist man gezwungen mehrere JS-Frameworks auf einer Website zu nutzen. Das geschieht wenn man eine Vielzahl von Plugins einbauen möchte und diese eben nicht für ein einziges Framework vorhanden sind. Natürlich mit dem Nachteil verbunden, dass bei jedem Aufruf einer Seite eine relativ große Menge an Daten mitgesendet werden muss, nämlich mindestens die verschiedenen Framework Core Dateien.

Die beiden Kerne einbinden bringt uns aber noch nicht ganz zum Ziel. jQuery bietet hierfür den noConflict-Mode an. Diese wird nach einbinden der Bibliothek aufgerufen und sorgt dafür, das jQuery unter einem anderen Namespace ansprechbar ist.

Ein Beispiel:

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script type="text/javascript" src="_js/mootools-release-1.1.2.js"></script>
<script type="text/javascript" src="_js/jquery.js"></script>
 
//domready-event von mootools 
window.addEvent('domready', function() {
    //jQuery Syntax zum Ansprechen eines Elementes
    var jq = $('#someid');
    alert(jq.attr('class')) ;
 
   //mootools
    var moot = $('moot');
    alert(moot.getProperty('class')) ;
 
});

Dieses Skript wirft bei installiertem Firebug nun ein Fehler. Javascript kann das $-Zeichen nicht referenzieren und findet in obigem Fall die Methode “attr” nicht. Nun kommt der noConflict-Mode ins Spiel.

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script type="text/javascript" src="_js/mootools-release-1.1.2.js"></script>
<script type="text/javascript" src="_js/jquery.js"></script>
<script>
     jQuery.noConflict();
 
//domready-event von mootools 
window.addEvent('domready', function() {
    //jQuery Syntax zum Ansprechen eines Elementes
    var jq = jQuery('#someid');
    alert(jq.attr('class')) ;
 
   //mootools
    var moot = $('moot');
    alert(moot.getProperty('class')) ;
 
});
 </script>

Will man nun über jQuery ein Element ansprechen ersetzt man das “$” durch “jQuery” und behält für MooTools den $-Syntax bei. Ein friedliche Koexistenz.
Auf diese Weise lässt sich jQuery mit sogut wie jedem anderen Framework benutzen. Leider gehört jQuery zu den wenigen Frameworks die einen solchen Modus besitzen. Möchte man bspw. Prototype in Verbindung mit MooTools einsetzen gibt es keine Option dieser Art.

jQuery Formulare validieren – Ein Überblick

Wie im vorigen Post angekündigt starten wir heute mit unserer Post-Reihe “Formulare mit jQuery – Die umfassende Serie“.

Heute wollen wir mit Teil 1 – “Übersicht über aktuelle Form-Validaton Scripts” beginnen.
Da es zahlreiche dieser Scripts gibt, und diese sich Teilweise nur minimal voneinander unterscheiden da sie meist auf dem bassistance-Plugin von Jörn Zaefferer basieren, werden wir versuchen euch hier nur die vorzustellen welche besonders im Bezug auf Funktionalität, Größe oder Einfachheit der Implementierung sind.



bassistance – jQuery plugin: Validation

Beim validation Plugin von bassistance kann man wohl vom offiziellen validation Plugin von jQuery sprechen. Dieses Plugin lässt nahezu keine Wünsche offen.
Das Plugin ist, für die vielzahl an Möglichkeiten die es bietet, mit nur 24KB in der minified-Version nicht sonderlich groß. Es ist ab jQuery 1.2.6+ verfügbar und kompatibel mit Version 1.3.2.

Es bietet alle nur erdenklichen Arten der Formular Überprüfung.

  • Validierung on the fly (beim Wechsel in das nächste Feld), validieren auf submit, validieren von Textfeldern, Textareas, radiobuttons und checkboxen.
  • Es besteht z.B. auch die Möglichkeit diese in Abhängigkeit voneinander zu prüfen. Bei einer Gruppe von checkboxen kann z.b. geprüft werden wieviele ausgewählt sein müssen usw.
  • Auch das prüfen von Selects und multiple-Selects ist ohne weiteres möglich.
  • Eingaben können auf Länge, Typ (E-Mail, Number, String…), Anzahl der gewählten Elemente usw. validiert werden.
  • Die Ausgabe der Error-Messages ist sehr flexibel gehalten. So können diese direkt am entsprechenden Formular-Element oder gesammelt, z.B. in einem div, ausgegeben werden. Ändert der User eine fehlerhafte Eingabe reagiert die Validierung und ändert die Error-Messages on the fly.
  • Mit dem Plugin können richtig ausgefüllte Formulare, auf submit, auch direkt per AJAX verarbeitet werden.

Das einbinden des Scripts ist auch denkbar einfach.

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$().ready(function() {
	$("#FormularID").validate({
		rules: {
			firstname: "required",
			lastname: "required",
			username: {
				required: true,
				minlength: 2
			},
			password: {
				required: true,
				minlength: 5
			},
			confirm_password: {
				required: true,
				minlength: 5,
				equalTo: "#password"
			}
	});
});

Nun müsst ihr nur noch euren Formular-Elementen die entsprechende ID geben.

Eine Vielzahl von Demos und die Dateien zum Download findet ihr auf der offiziellen Website.

ganzen Artikel lesen

Filemanager basierend auf MooTools

Unter der Website von Christoph Pojer findet ihr einen beeindruckenden Filemanager. Er ist noch in der Erprobungsphase, aber bietet schon eine angenehme Oberfläche und eine gute Usability und natürlich volle Funktionalität.

Der Filemanager zum Verwalten von Bildern bzw. Dateien auf einem PHP-Webserver basiert auf MooTools. Eine kleine Liste der Features:

  • Betrachten der Ordner und Dateien auf einem Server
  • Umbenennen, Löschen, Kopieren und Verschieben von Dateien
  • Detailansicht von Bildern
  • Fileupload mit dem bekannten Fancyupload in der neuen Version
  • Automatisches verkleinern von großen Bildern

Eine Demo findet ihr unter: Filemanager

Der Aufruf ist denkbar einfach:

?View Code JAVASCRIPT
1
2
3
4
5
6
7
 var manager = new FileManager({
    url: 'manager.php',
    assetBasePath: '../Assets',
    language: 'en',
    uploadAuthData: {session: 'MySessionId'}
  });
   $('beispiel').addEvent('click', manager.show.bind(manager));

Weiter gibt es auch die Möglichkeit den Filemanager in den WYSIWYG-Editor TinyMCE einzubauen. Dieser besitzt von Haus aus keine Möglichkeit eines gezielten Upload. Eine Demo dazu findet ihr ebenfalls auf Christopher’s Seite..

Notimoo – Mac Growl für MooTools

Mit Notimoo kommt die vom Mac bekannte Anwendung “Growl” für MooTools.
Mit Growl benachrichtigen Programme auf dem Mac den User darüber wenn etwas passiert.

Notimoo selbst zeigt dem User Notzien im “Growl-Style” am Rand der Seite an.

Einfaches Beispiel für die Implementierung:

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
// Now I create the manager so it will display notifications from the left bottom corner
var notimooManager = new Notimoo({
   locationVType: 'bottom',
   locationHType: 'left'
});
 
// Showing a notification that does not disappear.
notimooManager.show({
    title: 'Testing notification',
    message: 'This notification will not disapper on its own. You must click on it to close.',
    sticky: true
});

Das ganze Notimoo Projekt wird unter der MIT license bei Google Code gehostet.
Eine Demo des ganzen findet Ihr hier.

Wie nutzt man MooTools?!

Inspiriert von einem Artikel von “chromasynthetic” möchte ich ein paar Best Practices für den Umgang mit MooTools vorstellen und diese kurz erläutern.

  • Elemente ansprechen
  • ?View Code JAVASCRIPT
    1
    2
    3
    4
    
       //javascript methode
       document.getElementById("someID");
       //mit Mootools
       $('someID');

    Mit Mootools weit kürzer und vor allem problemlos zwecks CamalCases.

  • “Value” bearbeiten
  • ?View Code JAVASCRIPT
    1
    2
    3
    4
    
       //javascript methode
       var val= document.getElementById('input').value;
       //mit Mootools
       var val = $('input').getValue();

    Mootools bietet diverse Methoden um Objekteigenschaften zu verändern oder auszulesen.

  • Verketten von Methoden
  • ?View Code JAVASCRIPT
    1
    2
    3
    4
    5
    6
    7
    8
    
       //javascript methode
       $('div').style.height = '100px';
       $('div').style.background = '#ffc';
       //mit Mootools
       $('footer').setStyles({
       height: '100px',
       background: '#ffc'
    });

    Einfaches Beispiel für eine Verkettung von Funktionen.

  • Absetzen eines AJAX-Requests
  • ?View Code JAVASCRIPT
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
       //falsche Methode
       new Ajax('eine.php?var1=test&var2=request');
     
       //besser mit  
       new Ajax('eine.php', {
           data: {
           var1: 'test',
           var2: 'request'
      }
    });

    Beide Möglichkeiten führen zum selben Ergebnis. Allerdings ist die Überschaubarkeit für letzteres deutlich größer. Für nicht statische Variabeln wie z.B. der ‘test’-String lassen sich an dieser Stelle natürlich auch Selektoren benutzen.

  • Event-Handling
  • ?View Code JAVASCRIPT
    1
    2
    3
    4
    5
    
       //Falsche Methode
       $('Container').onclick = doSomething;
     
       //besser mit  
       $('Container').addEvent('click', doSomething);

    Die zweite Variante ist weitaus sicherer, da sich damit der Mootools Core um die Umsetzung auf den jeweiligen Browser kümmert.

  • Einfache Iteration über Elementgruppen
  • ?View Code JAVASCRIPT
    1
    2
    3
    4
    5
    6
    7
    
       //Falsche Methode
       $$('div.collapsed').each(function(el){
          el.addEvent('click', expand);
          });
     
       //besser mit  
       $$('div.collapsed').addEvent('click', expand);

    Beide Versionen selektieren in diesem Fall jedes div mit der Klasse “collapsed” und legen darauf ein Click-Event. Das “$$” gibt Elemente in Form eines Arrays zurück, so dass eine Iteration mit der each-Funktion nicht mehr nötig ist.
    Gleiches gilt für:

    ?View Code JAVASCRIPT
    1
    2
    3
    4
    5
    6
    7
    
       //Falsche Methode
       $$('div.hidden').each(function(el){
          el.removeClass('hidden');
       })
     
       //besser mit  
       $$('div.hidden').removeClass('hidden');

Ich hoffe dem ein oder anderen Einsteiger wird damit klar, inwiefern sich Standard Javascript von dem Einsatz von MooTools unterscheidet und wie man diese Zusatzfunkionalitäten nutzen kann.

Schönes Multi-Level Context Menu auf MooTools (Rechtsklick-Menu)

menu Beim allmorgentlichen absurfen meiner Blogroll bin ich heute auf ein nettes Multi-Level Context Menu gestoßen das ich euch hier kurz vorstellen will.

Das MooTools ContextMenu Plugin, wie es im Original heißt, wurde von David Walsh in CSS, XHTML und mittels MooTools geschrieben.
Das Plugin ermöglicht das erstellen von schönen und funktionalen ContextMenus.
Das Plugin kommt mit einer Vielzahl von Einstellmöglichkeiten daher:

  • actions: (wohl die Interessanteste) Hiermit lassen sich versch. Funktionen mit dem klick auf ein Item des Menus verknüpfen.
  • menu: Die ID des elements that represents the menu XHTML
  • stopEvent: Stopt die standard-Action des Elements wenn das Menu angewählt wird.
  • onShow: Ruft eine Funktion auf wenn das menu eingeblendet wird.
  • onHide: Ruft eine Funktion auf wenn das menu ausgeblendet wird.
  • onClick: Ruft eine Funktion auf wenn das menu geklickt wird.

Einen vollständigen Überblick über die Möglichkeiten findet Ihr im Blog-Post von David.
Eine DEMO des ganzen gibt es natürlich auch.

Und wen das Menu von David noch nicht so ganz überzeugt, der kann auch gerne mal einen Blick auf das Mif.Menu werfen.
Das Mif.Menu kommt mit abgerundeten Ecken, Schlagschatten und mehr daher.
Beipspiele und Doku findet man hier.

Wer also auf der Suche nach einem Rechtsklick- bzw. Context-Menu ist und für den MooTools die erste Wahl ist solle sich diese beiden Menus mal genauer anschauen.

MooTools removeClass Problem

Hi,

am Wochenende habe ich ein paar verzweifelte Versuche unternommen eine CSS Klasse eines Inputfeldes mit der Methode Objekt.removeClass(“CSSKLASSE”) zu entfernen.
Nach langem ergebnislosem Suchen im Netz und durchstöbern der Doku, ließ sich auch nicht herausfinden warum es nicht funktionierte, zumal die Funktion addClass keinerlei Probleme machte.

Am Ende habe ich einen ganzen einfachen Weg gefunden, das Ganze zum laufen zu bringen. Ich sag mal, fast schon zu einfach um sofort darauf zu kommen.
Hier mein Workaround:

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Mittels Selektor eigenes Skriptobjekt erzeugen	
var input = $('LieferName');
 
//Ausblenden eines DIVs, danach sollte das Validierungsskript durch entfernen des CSS deaktiviert werden. Reiner JavaScript Syntax, man hätte auch Mootools Code dafür verwenden können..
document.getElementById('liefer').style.display='none';
 
//Folgende Funktion blieb immer ergebnislos
//input.removeClass('validate[\'required\',\'length[6,-1]\']'); 
 
//Workaround, einfach direkt das Objektattribut als einen leeren String definieren
input.className = "";
 
//Änderungen dem Validierungsskript bekannt machen
myCheck.register(input);

Damit läßt sich nun auf den gängigen Browsern eine CSS Klasse einfach zur Laufzeit entfernen.