Skip to end of metadata
Go to start of metadata

[08:06:54 CDT(-0500)] <thealphanerd> so if I am making a bunch of different components, should I limit a closure to a single component? In other words, should I only have one call to fluid.defaults within a closure?

[08:07:44 CDT(-0500)] <colinclark> thealphanerd: I'm assuming by "closure," you mean an anonymous namespace-y closure?

[08:07:46 CDT(-0500)] <colinclark> like

[08:07:59 CDT(-0500)]

<colinclark> (function ()

Unknown macro: { // Code goes here }


[08:08:01 CDT(-0500)] <thealphanerd> indeed, anonymous namespace closure

[08:08:01 CDT(-0500)] <colinclark> is that right?

[08:08:05 CDT(-0500)] <colinclark> Yeah

[08:08:13 CDT(-0500)] <colinclark> I don't see any reason so use more than one

[08:08:16 CDT(-0500)] <colinclark> per file

[08:08:36 CDT(-0500)] <thealphanerd> so should all the defaults be up at the top of the closure then?

[08:08:50 CDT(-0500)] <colinclark> Nope, probably not

[08:08:57 CDT(-0500)] <colinclark> I tend to group my defaults with my components

[08:09:03 CDT(-0500)] <thealphanerd> ok good to know

[08:09:07 CDT(-0500)] <colinclark> So that you can easily see the definition of the component, followed by the defaults block

[08:09:27 CDT(-0500)] <colinclark> I sent a link to an example component to asteig yesterday that you might also find helpful, thealphanerd

[08:09:30 CDT(-0500)] <colinclark> let me dig it up

[08:09:36 CDT(-0500)] <thealphanerd> will that cause anything to get moved around by the inturpreter?

[08:09:43 CDT(-0500)] <thealphanerd> interpreter

[08:10:18 CDT(-0500)] <colinclark> nope

[08:10:33 CDT(-0500)] <colinclark> So, Justin_o and I gave a talk about a year ago on HTML5 and Infusion

[08:10:34 CDT(-0500)] <thealphanerd> <-- is over thinking it (big grin)

[08:10:41 CDT(-0500)] <colinclark> yup, but that's okay

[08:11:03 CDT(-0500)] * colinclark apparently overthinks it, too, from time to time.

[08:11:18 CDT(-0500)] <thealphanerd> final question since I have you right now… right now I am making the piano a view compoent, and having the drawing of the piano as a method

[08:11:29 CDT(-0500)] <colinclark> great

[08:11:30 CDT(-0500)] <thealphanerd> couldn't wrap my head around how to implement it as a renderer...

[08:11:53 CDT(-0500)] <colinclark> The key is go backward a little bit

[08:12:14 CDT(-0500)] <colinclark> The approach with the Renderer is that everything is rendered into the page using pure HTML templates

[08:12:24 CDT(-0500)] <colinclark> no goofy %{} tokens or whatever

[08:12:35 CDT(-0500)] <colinclark> nor markup locked up in code where someone else can't come along and change it

[08:12:47 CDT(-0500)] <colinclark> Which means you need to take your SVG and make a little template for a single key

[08:12:58 CDT(-0500)] <colinclark> or perhaps two keys if the black keys and white keys use different markup

[08:13:01 CDT(-0500)] <thealphanerd> colinclark: rather than using d3 ?

[08:13:09 CDT(-0500)] <colinclark> yes, rather than using d3 (smile)

[08:14:04 CDT(-0500)] <thealphanerd> ok that's what I figured… and where I got stuck. I had some ideas about how to implement the drawing… specfiically making generic key types and layers

[08:14:12 CDT(-0500)] <colinclark> And you'd have a model that represented all the keys on your piano and the data associated with it

[08:14:21 CDT(-0500)] <thealphanerd> so key1 gets drawn first, then key two, etc

[08:14:39 CDT(-0500)] <thealphanerd> and each key has its own model (which is part of the options)

[08:14:52 CDT(-0500)] <colinclark> Each key has something in the model

[08:14:58 CDT(-0500)] <colinclark> and then you use the model to render the markup

[08:14:58 CDT(-0500)] <thealphanerd> but figuring out how to iteratethe drawing using the renderer made my head hurt

[08:15:06 CDT(-0500)] <colinclark> Yeah, you don't have to do things like iterate

[08:15:15 CDT(-0500)] <colinclark> you'll have to learn how to use a Renderer component tree

[08:15:23 CDT(-0500)] <colinclark> which, admittedly, isn't the prettiest part of Infusion

[08:15:28 CDT(-0500)] <thealphanerd> I guess we know what to discuss today

[08:15:31 CDT(-0500)] <colinclark> (smile)

[08:16:25 CDT(-0500)] <thealphanerd> also I was wondering if the idea of a key needed to be broken down into its own compoent

[08:16:34 CDT(-0500)] <thealphanerd> since both the keyboard and the grid are using keys

[08:16:53 CDT(-0500)] <colinclark> yes, that's right

[08:17:07 CDT(-0500)] <colinclark> Ultimately, I think the best case scenario would be to have two different templates

[08:17:16 CDT(-0500)] <colinclark> and that would then be the only real difference between the two versions

[08:17:22 CDT(-0500)] <thealphanerd> rendering templates?

[08:17:27 CDT(-0500)] <colinclark> yes

[08:17:31 CDT(-0500)] <thealphanerd> linear / grid

[08:17:34 CDT(-0500)] <colinclark> if it were HTML, I'd say you could do it quite nicely with two difference CSS files

[08:17:44 CDT(-0500)] <colinclark> but I don't know what relationship CSS has to SVG, if any at all

[08:17:48 CDT(-0500)] <colinclark> Do you know/

[08:17:56 CDT(-0500)] <thealphanerd> well I was using css to modify the color

[08:18:06 CDT(-0500)] <thealphanerd> I can double check and see if css can modify placement

[08:18:20 CDT(-0500)] <thealphanerd> in which case you could just draw them all to the cavnas and place via css

[08:22:24 CDT(-0500)] <colinclark> yeah, that would be interesting

[08:22:28 CDT(-0500)] <colinclark> placement and height/width

[08:22:36 CDT(-0500)] <colinclark> maybe it's not viable

[08:22:40 CDT(-0500)] <colinclark> no big deal, either way

[08:24:00 CDT(-0500)] <thealphanerd> well I'll move forward trying to get things working based on my current understanding

[08:24:04 CDT(-0500)] <thealphanerd> and we can discuss this afternoon

[08:41:16 CDT(-0500)] <colinclark> thealphanerd: If you want an example of a simple and fairly modern Infusion component, this one is a decent example:

[08:41:31 CDT(-0500)] <thealphanerd> awesome… thanks colinclark

[10:44:54 CDT(-0500)] <colinclark> Justin_o: I'm bummed out to say I can't join baseball today

[10:45:00 CDT(-0500)] <colinclark> I was really looking forward to it, but I booked a 1 pm meeting

[10:50:14 CDT(-0500)] <avtar> fluid-everyone: sorry for not being able to make it for standup, i was on a call with nebula for their weekly status meeting. yesterday i spent time testing lvm config changes on the physical nodes in the smaller cluster and automating that using debian/ubuntu preseed recipes. today i'm going to finish that, go over bittorrent and wifi policies with yong at ocad, and work on implementing the openstack network service in a more distributed

[10:50:15 CDT(-0500)] <avtar> across the nodes.

[10:51:24 CDT(-0500)] <colinclark> really cool, avtar

[10:51:36 CDT(-0500)] <avtar> colinclark: burt will schedule a date next week to perform the upgrade

[10:51:48 CDT(-0500)] <colinclark> great

[10:51:53 CDT(-0500)] <avtar> i believe you might have received an email from him as well

[10:52:00 CDT(-0500)] <avtar> not sure what can be done about that while iris is away

[10:52:44 CDT(-0500)] <colinclark> I don't think I did

[10:53:33 CDT(-0500)] <colinclark> money stuff, avtar?

[10:53:34 CDT(-0500)] <avtar> ah i just noticed that there was a typo in your email address

[10:53:38 CDT(-0500)] <avtar> i'll forward it to you

[10:53:42 CDT(-0500)] <avtar> colinclark: yes

[10:54:33 CDT(-0500)] <colinclark> thanks

[10:54:38 CDT(-0500)] <colinclark> I'm sure Iris can handle it when she gets back

[10:56:15 CDT(-0500)] <colinclark> Okay, I'm going to hop on my only-moderately-cool bike and see you in the office shortly

[10:56:47 CDT(-0500)] <avtar> want to come to 100 mccaul instead?

[11:16:51 CDT(-0500)] <alexn1> michelled: could you please review my branch before I pushed it

[11:18:32 CDT(-0500)] <michelled> yep

[12:42:01 CDT(-0500)] <michelled> alexn1: I'm reviewing you FLOE-21 branch - it looks like you've got an 'alt' attribute on an anchor. You should just use 'title' instead.

[12:48:23 CDT(-0500)] <yura> logiclord_: hi

[13:24:10 CDT(-0500)] <anastasiac> michelled, I've pushed more changes to my 566 branch (alt text in OpenAuth): I think I've actually managed to address all of the points you mentioned in your comment.

[13:25:22 CDT(-0500)] <michelled> thx anastasiac

[13:27:55 CDT(-0500)] <michelled> anastasiac: 566 looks good to me - go ahead with your pull request please (smile)

[13:28:03 CDT(-0500)] <anastasiac> thanks, michelled

[13:33:33 CDT(-0500)] <michelled> alexn1: FLOE-21 is looking great!

[13:34:18 CDT(-0500)] <alexn1> michelled: there is only 1 thing left there (sad) is the picture for unpublished OER. Need to change this one

[13:34:37 CDT(-0500)] <alexn1> also the jira for keyboard focus styling in high contrast themes is not a small one (sad)

[13:35:06 CDT(-0500)] <michelled> good to know alexn1

[13:38:36 CDT(-0500)] <michelled> alexn1, anastasiac: I've updated a11y-uio - you may want to update

[13:38:47 CDT(-0500)] <anastasiac> thanks for the heads-up, michelled

[13:46:09 CDT(-0500)] <logiclord_> yura: Hi

[13:46:49 CDT(-0500)] <logiclord_> I was going through the comments and I couldn't understand

[13:46:50 CDT(-0500)] <logiclord_> - keys like that should be parametrized (e.g. taken into defaults) so the user could configure their own key bindings.

[13:47:01 CDT(-0500)] <logiclord_> I already have it as options ?

[14:09:08 CDT(-0500)] <yura> logiclord_: hi

[14:09:16 CDT(-0500)] <yura> so regarding the 617-620

[14:09:35 CDT(-0500)] <yura> you can just have it specified in defaults i think

[14:09:41 CDT(-0500)] <yura> like that:

[14:09:55 CDT(-0500)] <logiclord_> yura : okay and about other point

[14:10:28 CDT(-0500)]

<yura> fluid.defaults("fluid.epubReader.bookHandler", {…, , book: "

Unknown macro: {fluid.epubReader}", …})

[14:11:17 CDT(-0500)] <yura> logiclord_: so the keys i see you check if they are equal to 38, 39, etc.

[14:11:17 CDT(-0500)] <logiclord_> got it

[14:12:12 CDT(-0500)] <yura> think of the situation when I want to integrate the epub reader in my website, but i want to bind keys like "w", "s", "a", "d" to navigate it

[14:12:39 CDT(-0500)] <yura> right now they are hardcoded to be equal to left, right, down, up

[14:13:08 CDT(-0500)] <logiclord_> so a separate configuration component ?

[14:13:22 CDT(-0500)] <logiclord_> of give options for these as well

[14:13:23 CDT(-0500)]

<yura> i think I would take out these into component defaults and have a default like that

Unknown macro: {next}

[14:13:44 CDT(-0500)] <logiclord_> but you mentioned about renderer ?

[14:13:47 CDT(-0500)] <yura> logiclord_: oh, hmm, do you know where i can find them ?

[14:14:15 CDT(-0500)] <logiclord_> yura: couldn't get you .. find what ?

[14:14:56 CDT(-0500)] <yura> logiclord_: sorry (smile) , i thought you said you have the keys already as options somewhere

[14:15:41 CDT(-0500)] <logiclord_> yura : I am really confused about renderer :-/

[14:16:41 CDT(-0500)] <yura> logiclord_: right, so have you seen the examples of rendererComponents

[14:16:42 CDT(-0500)] <yura> ?

[14:17:15 CDT(-0500)] <logiclord_> I have seens APIs

[14:18:15 CDT(-0500)] <logiclord_>

[14:19:45 CDT(-0500)] <logiclord_> any small implementation could be helpful

[14:20:32 CDT(-0500)] <yura> logiclord_: right, so the most basic example is here

[14:23:12 CDT(-0500)] <logiclord_> yura : so bascially I dynamically populate a model in UI ?

[14:23:19 CDT(-0500)] <logiclord_> ^it

[14:25:06 CDT(-0500)] <yura> logiclord_: exactly, you would want to bind the data (in your case the content of the book) to the markup through the renderer in declarative (JSON) way, so you can avoid writing code that so heavily uses jquery to render and bind things.

[14:25:26 CDT(-0500)] <yura> logiclord_: some bigger implementations can be found here (the other project I contribute to) :

[14:25:48 CDT(-0500)] <yura>

[14:26:23 CDT(-0500)] <yura> logiclord_: and other components in that repo. You can see the actual app in action here :

[14:26:54 CDT(-0500)] <logiclord_> yura: okay this will work for our toc, bookmarks and notes

[14:27:14 CDT(-0500)] <logiclord_> but I am parsing data as well .. we need to use jquery to parse it

[14:27:39 CDT(-0500)] <logiclord_> modifying stuff like css and image src to data uri

[14:27:48 CDT(-0500)] <yura> logiclord_: you can logiclord_ ya you surely can use jquery to parse, but i would try to avoid jquery when you render things

[14:28:37 CDT(-0500)] <logiclord_> yura : I think I will dig deep in renderer and replace as and when required

[14:28:42 CDT(-0500)] <yura> logiclord_: you should also be able to use the renderer to bind click events and so on, basically anything that jquery does

[14:29:05 CDT(-0500)] <alexn1> michelled: for FLOE-21 I need 2 more images for high contrast themes as well as start images for rating widget

[14:29:17 CDT(-0500)] <yura> logiclord_: ya we can do go into mode details after the overall architecture is more or less stabilized

[14:29:49 CDT(-0500)] <logiclord_> yura: Okay I will incorporate all review

[14:30:13 CDT(-0500)] <yura> logiclord_: also , if you give me admin access to your repo i would be able to contribute, make branches and leave inline comments as well i think

[14:30:45 CDT(-0500)] <yura> but i tried it yesterday and it worked so nice job (smile) !

[14:31:22 CDT(-0500)] <logiclord_> yura: access granted

[14:32:35 CDT(-0500)] <logiclord_> I think we can use reader without localhost if we replace xhr with jquery but that will take support of IE

[14:32:55 CDT(-0500)] <yura> right so the issue is the memory leak ?

[14:32:58 CDT(-0500)] <michelled> alexn1: ok - I've already pushed what you'd done earlier - just let me know when it's ready for another review

[14:33:12 CDT(-0500)] <logiclord_> yura: thre are 2 cases

[14:33:20 CDT(-0500)] <alexn1> michelled: where did you push it ?

[14:33:25 CDT(-0500)] <yura> Bosmon: do you know if fluid.fetchResources can be used for what we need it ^

[14:33:37 CDT(-0500)] <michelled> alexn1: a11y-uio

[14:34:34 CDT(-0500)] <logiclord_> yura: 1 IE request zip file and convert to binary and response is not made available as text data which can bot be access using kqXHR available in jquery

[14:34:38 CDT(-0500)] <Bosmon> yura - what is the requirement in particular?

[14:34:59 CDT(-0500)] <logiclord_> ^not

[14:35:10 CDT(-0500)] <yura> Bosmon: what logiclord_ writes above

[14:35:56 CDT(-0500)] <logiclord_> Bosmon: we require to access a zip file from file:// or http:// same domain

[14:36:19 CDT(-0500)] <logiclord_> Bosman: and we have responsebody available separate from responseText

[14:38:10 CDT(-0500)] <Bosmon> responsebody is just a matter of setting the right content type

[14:38:20 CDT(-0500)] <Bosmon> Since all that ends up in responseText is the full AJAX response

[14:38:44 CDT(-0500)] <Bosmon> The naming "responseText" is unfortunate....

[14:38:54 CDT(-0500)] <logiclord_> but responseText and responsebody differ in case of IE and zip file

[14:40:48 CDT(-0500)] <yura> Bosmon: ^

[14:40:56 CDT(-0500)] <Bosmon> I see it

[14:41:03 CDT(-0500)] <Bosmon> Just browsing through the still rubbish jQuery docs

[14:41:06 CDT(-0500)] <Bosmon> I'm amazed they never improve these

[14:41:13 CDT(-0500)] <colinclark> Bosmon: We should talk (wink)

[14:42:02 CDT(-0500)] <Bosmon> colinclark - just need to sell a swamp cooler

[14:46:35 CDT(-0500)] <Bosmon> I got $100 for my Swamp Cooler (smile)

[14:48:30 CDT(-0500)] <logiclord_> gud night everyone

[14:50:05 CDT(-0500)] <michelled> anastasiac: why does the toc container need to be wrapped in a span to stay hidden?

[14:51:23 CDT(-0500)] <anastasiac> the fl-hidden class is supposed to make the div completely hidden to everything, but the Enhancer changes the visibility by setting display to block, which negates half of the fl-hidden styles. You end up with something that's not visible, but maintains layout - hence the gap

[14:51:43 CDT(-0500)] <anastasiac> by moving fl-hidden to a container, showing the ToC doesn't affect the visibility of the container

[14:53:05 CDT(-0500)] <michelled> ok - all of this points out an issue with UIO/UIE. we should just not include the toc container if we don't want the toc - that's the most natural API

[14:53:24 CDT(-0500)] <anastasiac> yes, but the framework can't handle that right now, you'll get errors

[14:53:48 CDT(-0500)] <anastasiac> and I think fixing that is a bit more involved

[14:53:57 CDT(-0500)] <michelled> yes, it is

[14:59:21 CDT(-0500)] <anastasiac> michelled, I've pushed a branch with fixes to the ToC in OER Commons:; ready for review

[14:59:53 CDT(-0500)] <colinclark> yura: Hi dude

[14:59:58 CDT(-0500)] <yura> colinclark: hi there

[15:00:01 CDT(-0500)] <colinclark> You were asking me a question?

[15:00:17 CDT(-0500)] <michelled> thx anastasiac

[15:00:21 CDT(-0500)] <yura> colinclark: yes I was wondering if this pull request should be merged

[15:00:51 CDT(-0500)] <colinclark> Hmm

[15:00:54 CDT(-0500)] <colinclark> I still don't think it shoudl

[15:00:56 CDT(-0500)] <yura> It does look like the changes Greg was making when we were demoing at 49 mccaul last month

[15:00:58 CDT(-0500)] <colinclark> Kasper seems to think it does

[15:01:00 CDT(-0500)] <yura> how come

[15:01:00 CDT(-0500)] <yura> ?

[15:02:05 CDT(-0500)] <colinclark> Well, the page didn't work

[15:02:24 CDT(-0500)] <colinclark> And the last email I received from Gregg, off list, seemed to assert that the current URL is actually the latest

[15:02:33 CDT(-0500)] <colinclark> but Gregg often makes typos about these things

[15:02:40 CDT(-0500)] <colinclark> So I just find myself completely perplexed

[15:03:22 CDT(-0500)] <colinclark> I'm trying to coax Kasper in here, yura

[15:04:55 CDT(-0500)] <colinclark> hey kasper

[15:05:13 CDT(-0500)] <kasper> hey colinclark

[15:05:16 CDT(-0500)] <colinclark> yura was just asking me about your pull request to universal

[15:05:37 CDT(-0500)] <kasper> yes

[15:05:46 CDT(-0500)] <colinclark>

[15:05:55 CDT(-0500)] <colinclark> He wonders if it should go in

[15:05:58 CDT(-0500)] <colinclark> I still find myself perplexed

[15:06:00 CDT(-0500)] <kasper> so my understanding is that that's the most final version we'll have of a while

[15:06:11 CDT(-0500)] <kasper> what are you perplexed about?

[15:06:12 CDT(-0500)] <yura> that's what i thought too

[15:06:35 CDT(-0500)] <kasper> currently gregg does not have anyone doing development on it

[15:06:56 CDT(-0500)] <kasper> and I imagine that will be the case for at least a while

[15:07:11 CDT(-0500)] <colinclark> ok

[15:07:22 CDT(-0500)] <colinclark> Gregg's email says "the proper link for the sudanese farmer is"

[15:07:33 CDT(-0500)] <colinclark> ok

[15:07:40 CDT(-0500)] <colinclark> so my perplexity is invented

[15:07:42 CDT(-0500)] <colinclark> alright

[15:07:43 CDT(-0500)] <colinclark> (smile)

[15:07:46 CDT(-0500)] <yura> haha

[15:07:48 CDT(-0500)] <kasper> hehe

[15:07:50 CDT(-0500)] <colinclark> sheesh

[15:07:59 CDT(-0500)] <colinclark> I love code that lives primarily in Dropbox (tongue)

[15:08:20 CDT(-0500)] <colinclark> yura: make it so

[15:08:26 CDT(-0500)] <yura> ok i m going to merge it

[15:08:39 CDT(-0500)] <kasper> cool, thanks

[15:08:46 CDT(-0500)] <colinclark> hey kasper

[15:08:53 CDT(-0500)] <kasper> yes colinclark

[15:09:14 CDT(-0500)] <colinclark> one of these days, can you sit down and remind Bosmon and I of some of the deepest buggy details of the current matchmaker stub?

[15:09:35 CDT(-0500)] <kasper> yes – chances are that I've forgotten most of them, but I can definitely try

[15:11:16 CDT(-0500)] <yura> kasper: your pull request is in

[15:11:22 CDT(-0500)] <kasper> yura: weeee, thanks!

[15:11:27 CDT(-0500)] <anastasiac> michelled, I've revised my branch for FLOE-22 to add high-contrast styles for the bookmarklet port let:

[15:12:11 CDT(-0500)] <michelled> thx anastasiac

[15:12:51 CDT(-0500)] <kasper> colinclark: actually, while I got you here - in case of all the linux keyboard stuff, there are all these: "bounce-keys-enable", "sticky-keys-enable", etc., etc…. Any good ideas on how to handle these as generic preferences?

[15:13:58 CDT(-0500)] <colinclark> yes

[15:14:09 CDT(-0500)] <colinclark> bounceKeys: true

[15:14:14 CDT(-0500)] <colinclark> stickyKeys: true

[15:14:16 CDT(-0500)] <colinclark> etc.

[15:14:18 CDT(-0500)] <colinclark> (smile)

[15:14:33 CDT(-0500)] <kasper> ok, so no translation into "usage" or the like

[15:14:42 CDT(-0500)] <colinclark> what is usage?

[15:15:10 CDT(-0500)] <kasper> usage is from 24751 and has values like: required, preferred, optional or prohibited

[15:15:24 CDT(-0500)] <kasper> and is available in most of the categories of 24751

[15:16:02 CDT(-0500)] <kasper> not really sure how the translation would go either..

[15:16:15 CDT(-0500)] <colinclark> ah,i see

[15:16:19 CDT(-0500)] <colinclark> yes i remember that

[15:16:24 CDT(-0500)] <colinclark> let me think about it a bit

[15:16:51 CDT(-0500)] <kasper> In some ways it makes great sense - but to my mind there is a difference between the two

[15:18:33 CDT(-0500)] <kasper> I guess, theoretically required, preferred and prohibit are fairly straight forward - but then again - translating "preferred" to bounceKeys: true might throw off a future matchmaker - REQUIRING that bounce keys are available

[15:18:50 CDT(-0500)] <michelled> anastasiac, alexn1: FLOE-24 was pushed up to a11y-uio

[15:31:08 CDT(-0500)] <alexn1> michelled: Here is the branch which should take of keyboard focus in high contrast themes

[15:31:11 CDT(-0500)] <alexn1> could you review it please

[15:31:23 CDT(-0500)] <michelled> thx alexn1 - I will

[15:40:37 CDT(-0500)] <alexn1> anastasiac: I'm looking into FLOE-12. Could you give me an example of the link which is missing a hover style in a contrast mode?…. to be honest I'm having difficulty to find any link which has a hover style even in default mode.

[15:53:36 CDT(-0500)] <michelled> anastasiac, alexn1: FLOE-22 is pushed to a11y-uio

[16:02:30 CDT(-0500)] <alexn1> michelled: another branch to review. Very small change

[16:02:43 CDT(-0500)] <michelled> thx alexn1

[16:17:09 CDT(-0500)] <michelled> alexn1, anastasiac: FLOE-35 is pushed to a11y-uio

[17:02:44 CDT(-0500)] <colinclark> hey kasper

  • No labels