After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 666166 - dash - put app labels beside launchers
dash - put app labels beside launchers
Status: RESOLVED FIXED
Product: gnome-shell
Classification: Core
Component: general
3.3.x
Other Linux
: Normal normal
: ---
Assigned To: gnome-shell-maint
gnome-shell-maint
Depends on:
Blocks:
 
 
Reported: 2011-12-14 12:28 UTC by Allan Day
Modified: 2011-12-24 00:07 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
mockup - dash labels alongside launchers (375.82 KB, image/png)
2011-12-14 12:28 UTC, Allan Day
  Details
Patch to place tooltips beside buttons (for the dash) (958 bytes, patch)
2011-12-15 20:05 UTC, Seif Lotfy
needs-work Details | Review
Patch to place tooltips beside buttons (for the dash) (4.03 KB, patch)
2011-12-16 03:00 UTC, Seif Lotfy
none Details | Review
Created new Label based tooltip inside every DashItemContainer. The tooltip now show beside the DashItemContainer 500ms upon hovering. The tooltip does now show up over the menu. (5.77 KB, patch)
2011-12-16 22:56 UTC, Seif Lotfy
none Details | Review
theme patch for labels (1.06 KB, patch)
2011-12-17 15:47 UTC, Allan Day
none Details | Review
tooltip js patch (6.26 KB, patch)
2011-12-17 19:05 UTC, Seif Lotfy
none Details | Review
Patch to place tooltips beside buttons (for the dash) (6.31 KB, patch)
2011-12-18 14:15 UTC, Seif Lotfy
needs-work Details | Review
Patch to place tooltips beside buttons (for the dash) (7.89 KB, patch)
2011-12-18 23:13 UTC, Seif Lotfy
none Details | Review
Added a Dashboard for new tabs and zeitgeist powered searching (7.44 KB, patch)
2011-12-19 16:27 UTC, Seif Lotfy
needs-work Details | Review
Patch to place tooltips beside buttons (for the dash) (7.44 KB, patch)
2011-12-19 16:41 UTC, Seif Lotfy
needs-work Details | Review
Patch to place tooltips beside buttons (for the dash) (7.30 KB, patch)
2011-12-19 17:53 UTC, Seif Lotfy
needs-work Details | Review
Patch to place tooltips beside buttons (for the dash) (7.32 KB, patch)
2011-12-19 18:16 UTC, Seif Lotfy
needs-work Details | Review
Patch to place tooltips beside buttons (for the dash) (7.29 KB, patch)
2011-12-19 18:30 UTC, Seif Lotfy
reviewed Details | Review
Patch to place tooltips beside buttons (for the dash) (7.01 KB, patch)
2011-12-19 19:32 UTC, Seif Lotfy
reviewed Details | Review
Patch to place tooltips beside buttons (for the dash) (7.35 KB, patch)
2011-12-21 23:51 UTC, Seif Lotfy
committed Details | Review

Description Allan Day 2011-12-14 12:28:22 UTC
Created attachment 203453 [details]
mockup - dash labels alongside launchers

Currently, app labels are placed below the launcher icons. This creates a number of visual problems. The labels for apps with longer names end up having awkward alignments, and they compete with the other parts of the dash that they are superimposed on.

Placing the labels to the right hand side of the app launchers would solve these problems. The attached mockup demonstrates this.
Comment 1 Seif Lotfy 2011-12-15 20:05:40 UTC
Created attachment 203603 [details] [review]
Patch to place tooltips beside buttons (for the dash)

So I have a very small fix for this... However this will affect all tooltips. So maybe a more generic solution that would allow us to place the tooltip below/left/right/over is better. However I am not sure this is necessary though since the dash is the only thing that uses tooltips AFAICT.
Cheers
Seif
Comment 2 Florian Müllner 2011-12-15 21:26:26 UTC
Review of attachment 203603 [details] [review]:

Beside from the comment below, the tooltip code in general is pretty broken (note a whole load of Clutter warnings caused by our tooltips) - I suspect that it'll be much cleaner to move the dash "tooltips" to javascript and kill this class altogether.

::: src/st/st-tooltip.c
@@ +303,2 @@
   /* attempt to place the tooltip */
+  tooltip_x = (int)(tip_area->x) + tip_area->width + 9; // 9px offset to the border

We shouldn't hardcode 9 pixels. More importantly, this position does not work at all for RTL locales (where the dash is located on the right monitor edge)
Comment 3 Seif Lotfy 2011-12-16 03:00:09 UTC
Created attachment 203625 [details] [review]
Patch to place tooltips beside buttons (for the dash)

I reworked it on the js side. The patch is not ready for merging but I need some help with:
1) The general direction of the patch. Is this what you meant?
2) The math in _showTooltip in dash.js
Comment 4 Allan Day 2011-12-16 10:09:00 UTC
Yay, thanks for the patch Seif! The placement looks good from a design point of view.

It would be good to be able to set the offset in the theme...
Comment 5 Seif Lotfy 2011-12-16 22:56:48 UTC
Created attachment 203705 [details] [review]
Created new Label based tooltip inside every DashItemContainer. The tooltip now show beside the DashItemContainer 500ms upon hovering. The tooltip does now  show up over the menu.

Created new Label based tooltip inside every DashItemContainer. The tooltip now show beside the DashItemContainer 500ms upon hovering. The tooltip does now show up over the menu.

@Allan: The offset is now configurable via the css
@Florian: I changed the patch completely from scratch. It is much cleaner now and Everything is packed inside the DashItemContainer except for calling the "tooltips" to be shown is done in the Dash.
Comment 6 Allan Day 2011-12-17 15:47:34 UTC
Created attachment 203732 [details] [review]
theme patch for labels

Thanks for the updated patch Seif. I've attached some changes for the css - feel free to squash them into what you're doing.

I'm still not seeing the fade that was discussed in bug 654845, or are my eyes deceiving me?
Comment 7 Seif Lotfy 2011-12-17 15:57:05 UTC
Awesome. I did not do the fade yet. I will finish it tonight. I just need to know the general direction if it is right or wrong
Comment 8 Allan Day 2011-12-17 16:17:00 UTC
(In reply to comment #7)
> Awesome. I did not do the fade yet. I will finish it tonight. I just need to
> know the general direction if it is right or wrong

Looks good design wise. :)
Comment 9 Seif Lotfy 2011-12-17 19:05:19 UTC
Created attachment 203742 [details] [review]
tooltip js patch 

Created new Label based tooltip inside every DashItemContainer:
1) The tooltip now show beside the DashItemContainer 500ms upon hovering.
2) The tooltip does not show up over the menu. 
3) Hide tooltips upon mouse click.
4) Hiding and showing are done via fade effects
5) Use Allan's CSS style
Comment 10 Allan Day 2011-12-18 13:08:25 UTC
(In reply to comment #9)
> Created an attachment (id=203742) [details] [review]
> tooltip js patch 
> 
> Created new Label based tooltip inside every DashItemContainer:
> 1) The tooltip now show beside the DashItemContainer 500ms upon hovering.
> 2) The tooltip does not show up over the menu. 
> 3) Hide tooltips upon mouse click.
> 4) Hiding and showing are done via fade effects
> 5) Use Allan's CSS style

It needs to be faster - display timeout to 300ms and fade time to 150ms
Comment 11 Seif Lotfy 2011-12-18 13:29:00 UTC
(In reply to comment #10)
> (In reply to comment #9)
> > Created an attachment (id=203742) [details] [review] [details] [review]
> > tooltip js patch 
> > 
> > Created new Label based tooltip inside every DashItemContainer:
> > 1) The tooltip now show beside the DashItemContainer 500ms upon hovering.
> > 2) The tooltip does not show up over the menu. 
> > 3) Hide tooltips upon mouse click.
> > 4) Hiding and showing are done via fade effects
> > 5) Use Allan's CSS style
> 
> It needs to be faster - display timeout to 300ms and fade time to 150ms

So we have 3 timeouts:
1) timeout for the "animte tooltip to start" = 500ms
2) timeout for the "tooltip to animate(show)" upon hover = 300ms
3) timeout for the "tooltip to animate(hide)" upon hovering out = 300ms

How do you want it exactly?
Comment 12 Allan Day 2011-12-18 13:37:01 UTC
(In reply to comment #11)
...
> So we have 3 timeouts:
> 1) timeout for the "animte tooltip to start" = 500ms
> 2) timeout for the "tooltip to animate(show)" upon hover = 300ms
> 3) timeout for the "tooltip to animate(hide)" upon hovering out = 300ms
> 
> How do you want it exactly?

1) 300ms
2) 150ms
3) 100ms

:)
Comment 13 Seif Lotfy 2011-12-18 14:15:19 UTC
Created attachment 203796 [details] [review]
Patch to place tooltips beside buttons (for the dash)

ok fixed timeouts
Comment 14 Florian Müllner 2011-12-18 17:33:53 UTC
Review of attachment 203796 [details] [review]:

Slowly getting there; as mentioned on IRC, I wouldn't call the item label "tooltip" - it's particularly confusing as we have a widget called "Tooltip" (not to mention that the behavior *is* (subtly) different from a generic tooltip).

On the nitpick front, the commit message is messed up, and there are whitespace changes Linus dislikes (which means that git is anal about them) ...

::: js/ui/appDisplay.js
@@ +552,3 @@
         }
 
+        this.actor.set_hover(false);

Uh? I don't think we want a change from 'true' to 'false' here - note the unintended style change you are introducing with this patch!

::: js/ui/dash.js
@@ +34,3 @@
         this.actor._delegate = this;
 
+        this.tooltip = null;

Why is this public?

@@ +35,3 @@
 
+        this.tooltip = null;
+        this._tooltip_text = null;

camelCase in JS.

@@ +89,3 @@
     },
 
+    removeTooltip: function() {

Unused function.

@@ +96,3 @@
+
+    showTooltip: function() {
+        if (this.tooltip != null) {

Use an early return to save one level of indentation:

if (this.tooltip == null)
    return;

// Rest of the function

@@ +103,3 @@
+            this.tooltip.show();
+            let height = this.actor.allocation.y2 - this.actor.allocation.y1;
+            let offset = Main.overview._dash.actor.allocation.y1 + height/2;

Beeeep - don't access private properties of another object!

@@ +111,3 @@
+            
+            let y = this.actor.allocation.y1 + offset - tooltipHeight/2;
+            let x = this.actor.allocation.x2;

Again: completely broken for RTL locales.

@@ +115,3 @@
+            Tweener.addTween(this.tooltip,
+                         { scale_center_x: 1,
+                           scale_center_y: 1,

This is not what you want (apart from not having any visible effect at the moment).

My guess of what you are trying to do:
 - set the scale gravity when creating the "tooltip"
 - animate the scale_x/scale_y properties

@@ +117,3 @@
+                           scale_center_y: 1,
+                           opacity: 255,
+                           time: 0.15,

Please define values like this as a constant at the top of the file (after imports), for instance ITEM_LABEL_ANIMATION_TIME

@@ +127,3 @@
+            this.tooltip = new St.BoxLayout({style_class: 'tooltip-container',
+                                         vertical: false,
+                                         clip_to_allocation: true });

So you are using a container for the gap between dash and label? That's ugly, don't do that - instead, define a custom property (-dash-label-offset or something) and use its value when positioning the label.

@@ +144,3 @@
+                       scale_center_y: 0,
+                       opacity: 0,
+                       time: 0.1,

Should be another constant

@@ +455,3 @@
+    _onHover: function (item, display) {
+        if (display.actor.get_hover()) {
+            Mainloop.timeout_add(300,

... and another contant

@@ +457,3 @@
+            Mainloop.timeout_add(300,
+                Lang.bind(this, function() { 
+                    if (display.actor.get_hover()) {

The double check for hover is ugly! Better save the id returned by timeout_add and cancel the call as necessary.

@@ +459,3 @@
+                    if (display.actor.get_hover()) {
+                        item.showTooltip();
+                    }

Callbacks for timeout_add() are expected to return a boolean - please return an explicit value rather than relying on some obscure js behavior.

@@ +462,3 @@
+                }));
+        }
+        else if (!display.actor.get_hover()) {

Wrong indentation style (should be } else { ) - and

if (foo)
  // something
else if (not foo)

 - seriously?
Comment 15 Seif Lotfy 2011-12-18 17:51:55 UTC
Review of attachment 203796 [details] [review]:

::: js/ui/appDisplay.js
@@ +552,3 @@
         }
 
+        this.actor.set_hover(false);

I prefer to remove it completly since setting it to true forces the "tooltip" to appear below the menu if clicked

::: js/ui/dash.js
@@ +103,3 @@
+            this.tooltip.show();
+            let height = this.actor.allocation.y2 - this.actor.allocation.y1;
+    showTooltip: function() {

How else can i access the _dash actor allocation. The other solution is to call the parent of the dashitemcontainer?

@@ +111,3 @@
+            
+            let y = this.actor.allocation.y1 + offset - tooltipHeight/2;
+            this.tooltip.scale_center_y = 0;

I think I will need help with that then

@@ +462,3 @@
+                }));
+        }
+                    if (display.actor.get_hover()) {

Must have missed that! Stupid me -.-
Comment 16 Florian Müllner 2011-12-18 18:43:07 UTC
(In reply to comment #15)
> +        this.actor.set_hover(false);
> 
> I prefer to remove it completly since setting it to true forces the "tooltip"
> to appear below the menu if clicked

Without setting the tooltip text (which your patch rightfully removes) it does not do anything like that. What it does is forcing the :hover style on the item while its menu is up - your patch must not change this.


> ::: js/ui/dash.js
> @@ +103,3 @@
> +            this.tooltip.show();
> +            let height = this.actor.allocation.y2 - this.actor.allocation.y1;
> +    showTooltip: function() {
> 
> How else can i access the _dash actor allocation. The other solution is to call
> the parent of the dashitemcontainer?

Or use get_transformed_position(), or set the position from the dash


> @@ +111,3 @@
> +            
> +            let y = this.actor.allocation.y1 + offset - tooltipHeight/2;
> +            this.tooltip.scale_center_y = 0;
> 
> I think I will need help with that then

Not sure what with?
Comment 17 Seif Lotfy 2011-12-18 18:50:03 UTC
(In reply to comment #16)
> (In reply to comment #15)
> > +        this.actor.set_hover(false);
> > 
> > I prefer to remove it completly since setting it to true forces the "tooltip"
> > to appear below the menu if clicked
> 
> Without setting the tooltip text (which your patch rightfully removes) it does
> not do anything like that. What it does is forcing the :hover style on the item
> while its menu is up - your patch must not change this.
> 
> 
> > ::: js/ui/dash.js
> > @@ +103,3 @@
> > +            this.tooltip.show();
> > +            let height = this.actor.allocation.y2 - this.actor.allocation.y1;
> > +    showTooltip: function() {
> > 
> > How else can i access the _dash actor allocation. The other solution is to call
> > the parent of the dashitemcontainer?
> 
> Or use get_transformed_position(), or set the position from the dash
> 
> 
> > @@ +111,3 @@
> > +            
> > +            let y = this.actor.allocation.y1 + offset - tooltipHeight/2;
> > +            this.tooltip.scale_center_y = 0;
> > 
> > I think I will need help with that then
> 
> Not sure what with?
With RTL
Comment 18 Seif Lotfy 2011-12-18 19:02:35 UTC
Review of attachment 203796 [details] [review]:

::: js/ui/dash.js
@@ +457,3 @@
+            Mainloop.timeout_add(300,
+                Lang.bind(this, function() { 
+                    if (display.actor.get_hover()) {

I really don't understand how I should do this
Comment 19 Florian Müllner 2011-12-18 19:17:02 UTC
(In reply to comment #17)
> > Not sure what with?
> With RTL

You can test for the text direction with

  if (this.actor.get_text_direction() == St.TextDirection.RTL)

and then position the "tooltips" accordingly (currently they show up over the workspace switcher ;-)


(In reply to comment #18)
> Review of attachment 203796 [details] [review]:
> 
> ::: js/ui/dash.js
> @@ +457,3 @@
> +            Mainloop.timeout_add(300,
> +                Lang.bind(this, function() { 
> +                    if (display.actor.get_hover()) {
> 
> I really don't understand how I should do this

There are a lot of examples in the existing code, but the general approach would be:

if (display.actor.get_hover()) {
  if (this._labelTimeoutId == 0)
    this._labelTimeoutId = Mainloop.timeout_add(...);
} else {
  if (this._labelTimeoutId > 0)
    Mainloop.source_remove(this._labelTimeoutId);
  this._hideLabel();
}
Comment 20 Seif Lotfy 2011-12-18 23:13:03 UTC
Created attachment 203810 [details] [review]
Patch to place tooltips beside buttons (for the dash)

OK fixed most issues you asked for... The only 2 remaining issues are highlighted via "TODO" and "FIXME"
Comment 21 Allan Day 2011-12-19 09:38:59 UTC
(In reply to comment #20)
> Created an attachment (id=203810) [details] [review]
> Patch to place tooltips beside buttons (for the dash)
> 
> OK fixed most issues you asked for... The only 2 remaining issues are
> highlighted via "TODO" and "FIXME"

What's with the crazy new transition effect? This has way too much movement; we just need it to quickly fade in and out.
Comment 22 Seif Lotfy 2011-12-19 16:27:19 UTC
Created attachment 203888 [details] [review]
Added a Dashboard for new tabs and zeitgeist powered searching

OK added RTL and dropped the animation (only fade is used)
Comment 23 Seif Lotfy 2011-12-19 16:41:28 UTC
Created attachment 203891 [details] [review]
Patch to place tooltips beside buttons (for the dash)

Sorry wrong description
Comment 24 Florian Müllner 2011-12-19 16:59:43 UTC
Review of attachment 203888 [details] [review]:

The positioning code needs cleanup, other than that only style comments left (also note the whitespace warnings and commit message mentioned earlier, those will need fixing as well).

::: js/ui/dash.js
@@ +98,3 @@
+        this._label.show();
+        let height = this.actor.allocation.y2 - this.actor.allocation.y1;
+        let offset = this.actor.get_parent().get_parent().allocation.y1 + height/2;

Style nit: missing spaces around operator

@@ +102,3 @@
+        // Make sure that label height is an even number so we can divide
+        let labelHeight = this._label.get_height();
+        if (labelHeight%2 == 1)

Dto.

@@ +105,3 @@
+            labelHeight = labelHeight + 1;
+
+        let y = this.actor.allocation.y1 + offset - labelHeight/2;

Dto.

@@ +108,3 @@
+        
+        let node = this._label.get_theme_node();
+        let spacing = node.get_length('x-offset');

Nit: custom properties should be prefixed with '-'

@@ +114,3 @@
+        // Check for RTL
+        if (St.Widget.get_default_direction () == St.TextDirection.RTL) {
+            let mainWidth = this.actor.get_parent().get_parent().get_parent().allocation.x2

Ugh, no - this is massively breaking encapsulation (more than your use of actor.allocation, which is not entirely correct either, as it relies on the dash's position at the screen edge).

Again: to get the position on the stage, use get_transformed_position ()

@@ +129,3 @@
+        if (this._label == null) {
+            this._label = new St.Label({ style_class: 'dash-label'});
+        }

No parentheses

@@ +138,3 @@
+        this._label.opacity = 255;
+        Tweener.addTween(this._label,
+                     { opacity: 0,

Weird indentation

@@ +143,3 @@
+                       onComplete: Lang.bind(this, function() {
+                               this._label.hide();
+                           })

wrong indent

@@ +456,3 @@
+                        item.showLabel();
+                        return false;
+                        }

indentation
Comment 25 Seif Lotfy 2011-12-19 17:53:26 UTC
Created attachment 203902 [details] [review]
Patch to place tooltips beside buttons (for the dash)

used get_transformed_postion where needed thus making code looking better... Also fixed issues raised by Florian.
Comment 26 Jasper St. Pierre (not reading bugmail) 2011-12-19 18:07:24 UTC
Review of attachment 203902 [details] [review]:

::: js/ui/dash.js
@@ +98,3 @@
+        this._label.show();
+
+        var actorPosition = this.actor.get_transformed_position();

Don't use 'var'.

    let [actorX, actorY] = this.actor.get_transformed_position();

@@ +121,3 @@
+        this._label.set_position(x, y);
+        Tweener.addTween(this._label,
+                     { opacity: 255,

Indentation is still funny.
Comment 27 Seif Lotfy 2011-12-19 18:16:52 UTC
Created attachment 203906 [details] [review]
Patch to place tooltips beside buttons (for the dash)

fixed issues raised by Jasper
Comment 28 Florian Müllner 2011-12-19 18:19:58 UTC
Comment on attachment 203906 [details] [review]
Patch to place tooltips beside buttons (for the dash)

(In reply to comment #27)
> fixed issues raised by Jasper

No you didn't
Comment 29 Seif Lotfy 2011-12-19 18:30:20 UTC
Created attachment 203908 [details] [review]
Patch to place tooltips beside buttons (for the dash)

Ok now its fixed
Comment 30 Florian Müllner 2011-12-19 18:50:46 UTC
Review of attachment 203908 [details] [review]:

OK, getting there - remaining comments are mostly style nits. (Commit message is still messed up btw)

::: js/ui/appDisplay.js
@@ +536,3 @@
 
+    getMenuUp: function () {
+        return this._isMenuUp;

Just make the property public

@@ +557,3 @@
         }
 
+        this._isMenuUp = true;

Any reason for not setting the property in the 'open-state-changed' handler?

this._isMenuUp = isPoppedUp;

should cover both cases ...

::: js/ui/dash.js
@@ +98,3 @@
+        this._label.show();
+
+        let [actorX, actorY] = this.actor.get_transformed_position();

Maybe stageX, stageY (to make it clear that it's the position on the stage)?

@@ +100,3 @@
+        let [actorX, actorY] = this.actor.get_transformed_position();
+
+        let offset = (this.actor.allocation.y2 - this.actor.allocation.y1) / 2;

Hmm, doesn't make too much sense - the actual offset is "offset - labelHeight / 2". Maybe just use itemHeight here (e.g. don't divide) and use

let y = stageY + (itemHeight - labelHeight) / 2;

later. (or rather Math.floor((itemHeight - labelHeight) / 2), see below)

@@ +105,3 @@
+        let labelHeight = this._label.get_height();
+        if (labelHeight % 2 == 1)
+            labelHeight = labelHeight + 1;

What about "offset"? It's arguably cleaner to just use Math.floor(), see comment above.

@@ +110,3 @@
+
+        let node = this._label.get_theme_node();
+        let spacing = node.get_length('-x-offset');

nit: foo = get('bar') reads weird - use xOffset

@@ +112,3 @@
+        let spacing = node.get_length('-x-offset');
+
+        let x = actorX + this.actor.allocation.x2 + spacing;

this.actor.allocation.x2 should be the item's width - the two match, but we should not rely on that

@@ +116,3 @@
+        // Check for RTL
+        if (St.Widget.get_default_direction () == St.TextDirection.RTL) {
+            x = actorX - this._label.get_width() - spacing;

You shouldn't assign x twice - do

let x;
if (rtl)
  x = ...
else
  x = ...

(also: why not this._label.get_text_direction()? the comment is superfluous)
Comment 31 Seif Lotfy 2011-12-19 19:32:39 UTC
Created attachment 203909 [details] [review]
Patch to place tooltips beside buttons (for the dash)

@Florian: this._label.get_text_direction() always gives me LTR, also setting the isMenuUp property in the 'open-state-changed' handler doesn't work for me since the Menu does not disappear...
Comment 32 Florian Müllner 2011-12-21 22:25:20 UTC
Review of attachment 203909 [details] [review]:

(In reply to comment #31)
> @Florian: setting the isMenuUp property in the 'open-state-changed' handler 
> doesn't work for me since the Menu does not disappear...

Hmm, it should work (you might need to move the calls to sync_hover()/set_hover(), as you rely on isMenuUp being set before onHover is called). Anyway, the patch looks ok as-is, provided you write a proper commit message. See those[0] examples[1].

[0] https://github.com/torvalds/subsurface/blob/master/README#L161
[1] http://lists.cairographics.org/archives/cairo/2008-September/015092.html
Comment 33 Seif Lotfy 2011-12-21 23:51:39 UTC
Created attachment 204065 [details] [review]
Patch to place tooltips beside buttons (for the dash)

Updated commit message
Comment 34 Florian Müllner 2011-12-22 09:10:19 UTC
Pushed the patch, thanks! Feel free to close the other two bugs as obsolete/dups ...
Comment 35 Finnbarr P. Murphy 2011-12-24 00:07:29 UTC
Probably should remove the double semi-colon in stylesheet.css

+.dash-label {
+ border-radius: 7px;
+ padding: 4px 12px;
+ background-color: rgba(0,0,0,0.5);
+ color: #ffffff;
+ font-size: 0.9em;
+ font-weight: bold;;
+ text-align: center;
+ -x-offset: 8px;
+}
+