Git Product home page Git Product logo

Comments (4)

sorawee avatar sorawee commented on June 26, 2024 1

Hi!

I have a list of hashes called hash_list.

Note that the code that you wrote has missing parens, and is not a list of hashes. The list of hashes probably should be:

'(#hasheq((video . "path/to/example_0000.mp4"))
  #hasheq((video . "path/to/example_0001.mp4")))

Here's my attempt:

There are two possible mistakes here.

  1. Notice that in the output, you have (video [[src ("path/to/example_0000.mp4")]]). This doesn't make sense, because the attribute src should be associated with a string value, not a list of strings.

    The fix could be done by changing video-env to consume exactly one argument instead of making it consume variadic arguments. That is, you would need to make a definition like this instead:

    (define (video-env text)
      `(video [[src ,text]]))
    

    (Notice the absence of dot. Also, people usually use - instead of _ in names)

  2. Notice that in the output, you have ((video ...) (video ...)). This again doesn't make sense, because the body of the document should not be a list of elements. There are several ways to fix this. One possibility is:

    (apply @ (map .......))
    

So, your final code might look like this:

;; test.html.pm
#lang pollen

◊(define hash-list
  '(#hasheq((video . "path/to/example_0000.mp4"))
    #hasheq((video . "path/to/example_0001.mp4"))))

◊(define (video-env text)
  `(video [[src ,text]]))

◊(define (root . xs)
   (apply @ (map (λ (hash) (video-env (hash-ref hash 'video))) hash-list)))

which produces test.html after raco pollen render test.html.pm

<html>
  <head><meta charset="UTF-8"/></head>
  <body>
    <video src="path/to/example_0000.mp4"></video>
    <video src="path/to/example_0001.mp4"></video>
  </body>
</html>

from pollen-users.

jaybonthius avatar jaybonthius commented on June 26, 2024

@sorawee That did the trick! Thank you so much for pointing out both errors and putting me on the right path. I'm beaming 😄

I dropped some parens in the hash lists when I wrote the question. Whoops!

from pollen-users.

mbutterick avatar mbutterick commented on June 26, 2024

FWIW:

  • you can avoid using hash tables if you only have one value per record (and just use a flat list).
  • you can avoid defining a tag function if you just want the behavior of default-tag-function.
  • you can avoid using the splicing tag @ explicitly and instead use for/splice (which gathers the results of the iteration under a @ automatically)

So if you wished, you could simplify this example like so:

;; test2.html.pm
#lang pollen

◊(define videos
  '("path/to/example_0000.mp4"
    "path/to/example_0001.mp4"))

◊(for/splice ([v videos])
  (video #:src v))

from pollen-users.

jaybonthius avatar jaybonthius commented on June 26, 2024

@mbutterick My hash table comes from parsing a .json with multiple values per record, which isn't obvious from my oversimplified example. Sorry about that. But your points on default-tag-function and for/splice are taken! And thanks for giving an example, I appreciate it.

from pollen-users.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.