Skip to content

find_by_selector should return more easily navigable / parseable data structure #71

Open

Description

@getaaron

This code:

parser = CssParser::Parser.new
parser.load_string! 'a { color: hotpink; font-size: 13px; }'
parser.find_by_selector 'a'

Returns an array of one string:

["color: hotpink; font-size: 13px;"]

Is there a more easily navigable / parseable data structure we could return? For example, maybe something like:

[{:color=>["hotpink"], :font_size=>["13px"]}]

Activity

  1. grosser commented on Jun 22, 2016

    @grosser
    Contributor

    sounds like an useful feature, I think the internal structure should exist ... you could either add a raw: true option or as_hash: true ... but a simpler workaround could be to do

    Hash[s.split(';').map {|k| k.split(': ', 2) }]
    
  2. getaaron commented on Jun 24, 2016

    @getaaron
    ContributorAuthor

    That doesn't work exactly right on shorthand properties like border:

    ["color: hotpink; font-size: 13px;border: 5px solid red"]
    

    Also there are some spacing issues (we get the key " font-size" with a leading space), and also the split wouldn't work on variants like color : hotpink or color:hotpink

  3. grosser commented on Jun 24, 2016

    @grosser
    Contributor

    I think it produces normalized css, so spaces should not be an issue, shorthand won't work though

  4. tres commented on Jul 19, 2016

    @tres
    Contributor

    #72

    this pull request adds a to_h instance method that will allow traversal of CSS as nested Hash objects.

    don't know if that's going to get you where you need to go @getaaron , but it solves an issue for me & saw this so I thought I'd drop by & let you know about it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions