Skip to content

vilmibm/marimo

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

marimo

disclaimer

marimo is beta software. these docs are not current with that which is HEAD. at this point if you are interested in using marimo, read its source and look at the examples in nathanielksmith/marimodemo.

smart widgets

marimo is a library for self-aware, nonblocking, and interactive javascript widgets. It strives to leave as much as possible to the application developer and to be more of a starting point for customized widgets that fulfill specific needs. It is not a kitchen-sink library nor a UI library: it's more of a toolset.

marimo is still evolving. it's currently used in big ways in production at Cox Media Group and what you see in the github repo is what we use in prod. However, the API is still stabilizing and growing and as such marimo should be considered a WIP.

example

var my_twitter_widget = marimo.extend(marimo.widgetlib.request_widget, {
    transform: function (data) {
        return { context: { tweets: data } }
    }
}
marimo.add_widget({
    id: 'tweets',
    murl: 'http://some.api/twitter/public',
    template: '<ul>{{#tweets}}<li>{{text}}</li>{{/tweets}}</ul'
})
var tweets = marimo.widgets.tweets
tweets.make_request()

More robust (and functional) examples can be found in the marimodemo repository.

default widgets

marimo provides three widgets that you can use or extend:

  • base_widget

      the mother widget. all widgets extend from here.
    
  • request_widget

      a widget that asks for data from a server and renders it with a
      mustache template
    
  • writecapture_widget

      a widget that accepts dirty, third party html and sanitizes it so it
      can be rendered in a nonblocking fashion
    

these objects all exist in marimo.widgetlib.

to extend a widget, we use marimo.extend(). this is a wrapper around Object.create() with a few niceties.

var my_new_widget = marimo.extend(marimo.widgetlib.base_widget, {
    // here, put new methods or method overrides.
    // your anonymous functions will be named using their key in this
    // object.
})

inter-widget communication

widgets are designed to talk to each other. There are two ways to accomplish this. First, any widget can introspect marimo.widgets on a running page to see what widgets are live. Introspection of those widgets is encouraged. Second, marimo provides a simple event transport for widgets to use. base_widget provides .on() and .emit() to all widgets to work with events. marimo.events contains a registry of all events that have fired up to that point for all widgets.

backends for request_widgets

request_widgets can either take properly formatted json in this form:

{
    template: "<somehtml>",
    context: {
        // context passed to Mustache to render template
    }
}

or accept arbitrary data. define a transform method in an extended request widget to massage incoming json (see the twitter example above).

documentation

marimo.js is fully documented with a pseudo-docstring format. marimodemo contains examples. The stuff in lib/docs should be considered highly deprecated; it will be deleted soon. Wiki pages and more examples (and probably a homepage) are TODOs at this point.

tests

marimo has a test suite. it bootstraps itself with jsdom so testing can occur in nodeunit.

meta

marimo was written by Nathaniel Smith (mailto:nathanielksmith@gmail.com) and Alex Dreyer for Cox Media Group Digital & Strategy. It is licensed under the terms of the MIT license.

contributors

  • datagrok
  • manny blum
  • calvin spealman
  • rob combs
  • cliff hayashida

About

Little green balls

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published