A jQuery based tooltip solution for a large web application

by Oliver Tue, March 13 2012 01:37

Finally, with an update we rolled out last week, (almost) all tooltips on Camping.Info look and behave similar, differing mostly in positioning and size, but not in the general look and feel. We chose the jQuery Tools Tooltip as the base for our own solution and it got us pretty far, but there were some pitfalls and scenarios that we needed to handle ourselves. This post is about what limitations we experienced and how we dealt with them.

The original

As you can read in the jQuery Tools Tooltip documentation, the tooltip plugin is highly configurable. It can take different elements as the tooltip for any given trigger:

  • the value of title attribute of the trigger element
  • the html element immediately following the trigger
  • the html element immediately following the first parent of the trigger
  • an arbitrary html element on the page.

You can also position the tooltip pretty much wherever you want relatively to the trigger:

jQuery Tools Tooltip Positioning

Our adaptations

Another way to chose the tooltip

We found one more useful way to define the tooltip for a trigger element: if the trigger is e.g. a table cell in an html table and you don’t want to specify a static tooltip for some or all table cells but a different one for each cell or at least a number of cells, it makes sense to define the tooltip element inside the trigger (the table cell). Since this effect was not achievable extending the jQuery Tools Tooltip plugin we started changing their source:

image

Breaking the tooltip out of some parent container

We also faced some problem properly showing tooltips that needed to “break out” of some bounding box, inside which they were defined (i.e. their html markup). This problem e.g. occurred inside elements with style position: relative, which we have a few of on Camping.Info. Our first attempt was to clone the tooltip element and show the clone instead of the original. This worked in almost all cases – until we tried to attach some more behavior to elements inside the tooltip. The behavior, e.g. some click event handler that we expected to fire when clicking on some element inside the tooltip, wouldn’t execute, since we were working with the clone! So we decided to simply move the tooltip up in the DOM tree for the time it is being shown, more precisely just beneath the form tag that we have on all our pages. We create a placeholder at the place where we removed the tooltip to reinsert it again once it’s being hidden. The code we added to the show() method looks like this:

image

… and here’s the counterpart in hide():

image

Now, this works quite well everywhere, independent of the position of the tooltip in the DOM tree.

Global tooltip configuration

Using inline static configuration

One feature we quickly missed was some kind of static tooltip configuration without calling  $(...).tooltip({ settings: ... }) for every single tooltip we wanted to create or hook up, respectively. What we came up with is to use the HTML5 data attributes to define any specific configuration statically inside the trigger element’s html markup. Thus, we need to call the tooltip initialization code only once for the whole page. The configuration now looks like this:

image

We use specific prefixes with the data attributes to make them easier to understand, e.g. data-tt-position for an attribute that is used for tooltips and jq-tt-trigger for a class that is used by some jQuery code for tooltips.

To process this kind of static configuration we need some custom code that will, at some point, call the original (well, modified by now) plugin code. Unfortunately, the jQuery Tools Tooltip plugin was not designed to allow runtime configuration of the tooltip to show, but we found a way using the onBeforeShow and onHide event handlers. The basic idea is to change the global Tooltip configuration during the first method so that the tooltip we will be showing will be configured correctly, and to reset the global configuration once the tooltip has been hidden again. To achieve this, we iterate over all configuration properties that the jQuery Tools Tooltip plugin supports and search for the respective data attributes on the currently processes trigger element. One example would be the position property: to replace the default value provided by the plugin we look for an attribute that’s called data-tt-position and use its value to temporarily overwrite the default value during the onBeforeShow event handler.

Using global profiles

Once we had the static configuration working and started to replace all of those clumsy and overly complicated AjaxControlToolkit HoverMenuExtenders, it quickly turned out that we were copy’n’pasting the same configuration in a thousand places. This was not only ugly and violated the DRY principle, it also lead to some unnecessarily bloated html. As a solution to this maintenance nightmare we came up with profiles that comprise a set of configuration options that would else be repeated over and over again:

image

Now, they lead to some really clean html markup:

image

The only change from using the inline static configuration is to use the profile’s properties – everything else stays the same!

Conclusion

The jQuery Tools Tooltip plugin is a nice, small and highly configurable tool for easy tooltip creation and usage. In a larger web application there a few shortcomings that we’ve addressed here and which we’ve provided working solutions for. We hope to release those changes soon in its own project on our GitHub account.

Happy coding!

Tags:

jQuery | Web Applikationen | Software development | WEB 2.0 | Usability | Design

Sicheres(!) Netzwerken – Diaspora

by robert Mon, May 31 2010 00:05

Soziale Netzwerke sind erst 10 Jahre alt und Daten die wir heute “abgeben” gehen in die Hände Dritter, für immer? Das Diaspora Team möchte das Problem lösen und dafür sorgen, dass die Nutzerdaten in den Nutzern gehören:

join-the-diaspora

Das Projekt scheint einen Nerv zu treffen,

Pledges

auch meinen!

Hoffentlich kommt gute Software heraus. Vielleicht erlaubt die Lizenz ja auch eine C# Implementierung/Clone. Ich bin gespannt was die 4 am Ende des Sommers vorzeigen werden. Viel Erfolg und GO, GO, GO!

Links:

(Robert)

Tags:

WEB 2.0

Javascript in UserControl in UpdatePanel

by Oliver Sat, November 28 2009 15:17

Wenn man weiß, wie es geht, ist alles einfach. Aber JavaScript in UserControls innerhalb eines UpdatePanels funktionstüchtig zu bekommen hatte für mich - bis heute! - immer etwas mit Magie zu tun... Hinzu kam heute, dass ich noch Sys.UI.DomElement-Methoden nutzen wollte (aus der AJAX-Bibliothek). Folgende Versuche habe ich gemacht:

1. Page.ClientScript.RegisterClientScriptBlock(GetType(), "helpful_css_" + ClientID, script, true);
2. ScriptManager.RegisterClientScriptBlock(this, GetType(), "helpful_" + ClientID, script, true);
3. Page.ClientScript.RegisterStartupScript(GetType(), "helpful_css_" + ClientID, script, true);
4. ScriptManager.RegisterStartupScript(this, GetType(), "helpful_css_" + ClientID, script, true); // <-- this is it!

 

Zu 1. und 3. ist zu sagen, dass sie innerhalb einen UpdatePanels nur nach dem ursprünglichen PageLoad funktionieren, nicht nach einem asynchronen Postback. Also fallen sie raus. Außerdem fallen 1. und 2. weg, weil an der Stelle, an der der hier übergebene JavaScript-Code in die Seite generiert wird, der $Sys-Namespace noch nicht definiert ist (ähnlich wie hier: http://encosia.com/2007/08/16/updated-your-webconfig-but-sys-is-still-undefined/).

Bleibt nur 4. Und 4. funktioniert sowohl nach dem initialen PageLoad als auch nach einem async Postback und man kann $Sys verwenden. Wunderbar!

1. oder 2. bleiben allerdings nützlich, wenn man Custom Javascript in die Seite einfügen will, um es weiter unten auf der Seite zu nutzen. Wahlweise kann man natürlich auch die Methode RegisterClientScriptInclude nutzen, um das Javascript in eine eigene Datei auszulagern. Soviel dazu.

Oliver

Tags: , ,

ASP.NET | Tips & Tricks | WEB 2.0 | Web Applikationen

CPE (CollapsiblePanelExtender) per JavaScript öffnen

by Oliver Thu, November 12 2009 20:53

Bevor ich noch x Mal durchs Web klicke, hier der Einzeiler:

hplCatBox.Attributes["onclick"] = "javascript:$find('" + cpeInqCat.BehaviorID + "').expandPanel(new Sys.EventArgs)";

Tags: , ,

ASP.NET | Tips & Tricks | WEB 2.0

Amazon S3 Ausfall

by Robert Sat, February 16 2008 22:16

Der Ausfall von Amazon S3 für ca. 3 Stunden am gestrigen Freitag, hat eine Reihe von Web 2.0 Seiten für ein paar Stunden total oder teils offline gebracht.

Ob das Webseiten-Anbieter davon abhalten sollte Teile Ihre Software auf Utility Computing Komponenten aufzusetzen sei dahin gestellt. Als einfache Rechengrundlage lassen sich einfach die Kosten für die Entwicklung eine 99.9999 Ausfallsicheren Inhouse Lösung vs. die Kosten durch eine Ausfall pro Stunden vergleichen.

Vor allen Dingen stellt sich auch die Frage, wie ausfallsicher den die eigene Server Landschaft ist und welche SLA der eigene Webhoster anbietet

Verfügbarkeit pro Jahr erlauben wieviel Ausfall:

  • 99.9% erlauben 8.76 Stunden Ausfall
  • 99.99% erlauben 52.56 Minuten Ausfall
  • 99.999% erlauben 5.256  Minuten Ausfall 
  • 99.9999% erlauben 31.536 Sekunden Ausfall

Amazon S3 liegt in diesem Jahr noch im Bereich von 99.9% Verfügbarkeit. Keine Glanzleistung, aber für die meisten betroffenen Unternehmen, dürften die entstanden Ausfallkosten an Einkommen und Prestige immer noch die Ersparnisse, bei der Entwicklung und Betrieb der entsprechenden Hard und Softwarelösungen nicht ansatzweise überschreiten.

[via: TechCrunch]

Tags:

WEB 2.0

Bubble Video

by Robert Thu, December 06 2007 19:27

Tags:

Unterhaltung | WEB 2.0

Skalierbares Windows-Hosting

by Robert Sun, October 07 2007 03:44

windows hosting  Es geschah an einen Dienstag. Die neue Buzzword-Ready Web 2.0 App war am Freitag zuvor nach 4 Monaten harter Arbeit online gegangen. Zur Feier des Tages wurde abends beim Italiener eine Flasche Wein geordert. Es war der erste freie Abend nach vielen Wochen. Der Wein wirkte sofort, für untrainierte ist ein Rausch preiswerter und preiswert ist gut, wenn man sich darauf einstellt ein junges Produkt langsam am Mark zu etablieren und jeder ausgegebene Euro der Firma gehört, nicht einer Bank oder einem Venture Capitalisten.

Die ersten 4 Tage waren ruhig verlaufen. Wie erwartet registrierten sich nur wenige Benutzer, denn trotz automatisierter Test und einer ausführlichen Analyse wie sich das Baby unter Last verhalten würde, sollte sich die Anwendung im Live-Betrieb erstmal bewähren.

Es war tägliche Routine, etwas gelangweilt arbeitete einer der Entwickler die letzten Tage von Mashable und Techcrunch auf. Keine großen Highlights, das übliche. Die meisten der 275 ungelesenen Posts landeten nach einem kurzen Blick auf den Betreff und Autor im Papierkorb. Genau wie „Special Interest Trading Platform Launches“ … moment … „Special Interest Trading Platform“  ... (??!) ... STRG-Z beförderte den gerade gesehenen Eintrag aus dem Papierkorb wieder zurück in die aktuelle Ansicht. Es war 23:45Uhr.

Von den 900 000 Techchruch Lesern hatten 14 325 die junge Seite innerhalb der ersten 30 Minuten aufgerufen und 1500 neue „Special Interest Trading Platforms“ aufgesetzt. Ca. 15-20 davon waren wohl mehr als ein Test. Der Web-Server schnaufte, hielt sich aber mit 25% Prozessorleistung noch ganz gut, der Datenbankserver lief mit 80-90% Auslastung und war am Limit.

Um 1:17 hatte Mashable und wohl 3 Dutzend anderer Blogger das Techcrunch Post aufgegriffen und Ihrerseits über die neue Handelsplatform berichtet. Ab 1:26 lies sich der Web-Server nicht mehr via http erreichen. Mit sehr viel Geduld gelang es dann letztlich um 3:40 die Anwendung durch eine freundlich Dankesseite ersetzen. Die nächsten Wochen versprachen wunderbar zu werden.

......................................................................

Okay genug feuchte Träume.

Flexiscale bietet skalierbares Hosting. Das Versprechen ist, das man innerhalb von wenigen Minuten von einem Rechner auf einige tausend Rechner aufrüsten kann. Doch statt wie Amazon EC2/S3 nur Linux zu unterstützen, bietet Flexiscale Windows 2003 Server und Windows SBS an. Windows SBS ist insbesondere interessant, da es eine MS-SQL Server Lizenz bundelt. (Wobei man die sich genaue Lizenz des SBS noch mal genauer anschauen müsste um zu entscheiden ob sich Windows-SBS auch legal für Hosting einsetzen lässt.) Die Preise sind absolut konkurrenzfähig. Wir werden uns das definitiv genauer anschauen. Ich kann kaum erwarten den Zugang zu erhalten :-)

[via Techchrunch]

Tags:

ASP.NET | MS-SQL Server | WEB 2.0 | Web Applikationen

Gruenderszene-Brunch II / 05. August 2007

by Robert Wed, August 01 2007 02:19

Thinkomat hat eine Übersicht über Seiten, die über die deutsche Gründerszene berichten zusammengestellt und beobachtet eine massiven Aufschwung. Da sich Gleich und Gleich gern gesellt, werde ich mich wahrscheinlich auch gesellen :-)

Tags:

Berlin | WEB 2.0

Michael Arrington von Techcrunch.com über Start-Ups

by Robert Wed, July 04 2007 21:42
Auf der "The Future of Web Apps" Konferenz, auf der unter anderem auch Jeffrey Veen von Google, Kevin Rose von digg, Cal Henderson von Flickr und Tom Coates von Yahoo sprachen, hielt auch der Gründer und hauptsächliche Schreiber von techcrunch.com, Michael Arrington, einen Vortrag.

techcrunchTechcrunch.com

Heute als Guru für Web Applikationen bekannt, geliebt und gefürchtet, ging Michael Arrington seinem Hobby nach, über Start-Ups von Web Applikationen zu schreiben und startete die Seite techcrunch.com. Heute verfügt sein blog über atemberaubende 430.000 Abonennten und ist maßgeblich an dem Erfolg oder Misserfolg von neuen Web Applikationen beteiligt. Da Arrington sich 15 Stunden am Tag mit Web Applikationen beschäftigt, sollte sich da einiges an Know-How angesammelt haben, was den Erfolg oder Misserfolg von Applikationen anbelangt.

Wie macht man es richtig?

Das wohl zentralste Kriterium für eine erfolgreiche Web Applikation, so Arrington, sei, ob sie herausrage. Das klingt einfach, was jedoch dahinter steckt ist der Umstand, dass es nicht reicht, eine gute Anwendung zu bauen (oder gar nachzubauen), die unter funktionalen und ästethischen Gesichtspunkt bestehen kann.

Der Standard, dass man seinen Beruf lieben muss, fehlt auch bei Arrington nicht, wobei ich denke, dass es für das Web noch viel eher gilt, als für "normale" Geschäfte, da die Konkurenz tatsächlich global ist.

Ein tatsächlich guter Tipp für eine Applikation ist, "Reibung im Prozess zu minimieren". Wenn deine Applikation Arbeit verringert, Abläufe vereinfacht, Zeit und Geld spart, wird sie sich sicher durchsetzen.

Was sind typische Fehler?

Arrington berichtet von überfinanzierten Applikationen, zu großen Versprechungen, die nicht eingehalten werden können, features, die keinen Sinn ergeben (squidoo.com). Er empfiehlt darüber hinaus, möglichst klein anzufangen, nicht überzufinanzieren und zu schauen, wie sich das Unternehmen entwickelt. Auch auf der persönlichen Ebene gibt es genug Bespiele, dass Start-Ups auseinanderbrechen, weil das Team sich zerstritten hat.

Die Anforderung, stets ein funktionierende Einkommens-Modell zu haben, hinterfragt Arrington: youtube.com als wohl erfolgreichster Vertreter dieser Gruppe.

Fazit

"Wenn du glaubst, du kannst flickr schlagen, dann tu es!" ;)

"The Future of Web Apps"

Neben Michael Arringtons Rede gibt es auf der Seite zu dem Kongress noch andere hörenswerte Beiträge zum Thema Web Applikationen, Start-Ups, Iteration, Software-Entwicklung, Features, etc. Definitiv lohnenswert.

andrej.

Tags:

Software development | WEB 2.0 | Web Applikationen

web applikationen suchen und finden! mit Simple Spark

by Robert Thu, June 21 2007 11:44

Da Robert und ich auch längere Zeit darüber nachgedacht hatten, einen Katalog für Web Applikationen zu bauen, freue ich mich eine Lösung zu sehen, die zwar nicht ganz dem entspricht, was wir im Hinterkopf hatten, jedoch eine durchaus funktionale und solide Lösung darstellt: Die englisch-sprachige Seite zum Suchen und Finden von web-basierten Applikationen: simplespark.com.

Features

Das wohl bestechendste feature ist der unglaublich Umfang der Datenbank von Web Applikationen, die Simple Spark als Grundlage hat. So findet man für den Suchbegriff "collaboration" unglaubliche 143 Einträge. Dabei sind Klassiker wie basecamp, wikis wie Wetpaint oder eher grafisch-orientierte Tools wie thinkature oder conceptshare, stets mit screenshots.

Darüber hinaus werden die verschiedenen Applikationen nach Kategorien sortiert, die im Moment noch ein wenig willkürlich erscheinen. Man kann Web Applikationen in einem persönlichen Ordner speichern und bewerten und sogar eigene Vorschläge hinzufügen.

Finden von Web Applikationen

Zentral für den Erfolg der Seite ist jedoch die Frage, ob Nutzer, die sich kostenfrei anmelden können, zu den verschiedenen Web Applikationen Berichte schreiben und Bewertungen abgeben werden (derzeit noch. Denn ohne Einschätzungen anderer Nutzer oder von Redakteuren sind 143 Suchergebnisse schlicht und ergreifend eine unüberschaubare Menge und die richtige Applikation auszuwählen wird schier unmöglich. Zumal derzeit auch noch keine Sortierfunktion eingebaut ist.

Fazit

Insgesamt sehr ansprechend gestaltete Seite, grafisch und usability technisch. Ob sie sich durchsetzen kann, liegt an der Beteiligung der User. Ich habe meine erste Bewertung schon geschrieben ;)


andrej

Tags:

Collaboration | Productivity | Software development | Usability | WEB 2.0