Search code examples
coffeescriptdocpad

How to pass a list of image filenames from Docpad to browser client


I want to get a list of filenames from a directory in my Docpad project and then pass them to the client for preloading. What is the best way to do this?

What I have been trying is to extract a list of file names from the directory and then pass them to the client via the document.

So I have a collection, like so in docpad.coffee:

collections:
        myImages: ->
            @getFilesAtPath({relativeOutDirPath: 'images'})

And then in the footer of my html, I've been trying something like this:

<script>
var images = <%= @getCollection('myImages').toJSON() %>
</script>

This however is not coming even close to working. What I really want to do is have images set to an array of urls pointing to the files. But I can't seem to figure out how this would be done. The Docpad documentation and the Query-Engine documentation are simply to sparse.

Anyone have any ideas? Or is there a totally different way to think about this? Is there a way to hand over a variable directly from the Node/Docpad backend to the client, by passing the need to pass it along with the HTML?


Solution

  • Not sure why you want to separate it as a script (btw if you want you can really put it in a separate script if it is called js.eco). I guess it is just for clear separation.

    This is how it will work:

    <script>
    var images = [];
    <%for obj in @getCollection("myImages").toJSON(): %>
        images.push('<%= obj.url %>');
    <% end %>
    console.log(images[0]);
    </script>
    

    So you will have an array with url's only. I've put there an info to print out in console first element to show it works.