Skip to content

Instantly share code, notes, and snippets.

%% @doc
%% Filter module for Zotonic
%% 'foldl' filter, applies foldl to a list
%%
%% Usage:
%% {{ [1,2,3]|foldl:["*", 1] }}
%% {{ [1,2,3]|foldl:["+", 0] }}
%% {{ ["a", "b", "c"]|foldl:["++", ""] }}
%%
%% Pass an attribute to fetch for each item:
@ArthurClemens
ArthurClemens / plural
Created June 12, 2015 15:01
Plural rule parser
/*
This code uses a regular expression to make the json safer.
An potentially safer alternative is https://github.com/joewalnes/filtrex (untested) at the cost of 130Kb.
Can be used for example with this JSON structure:
{
"_meta_po_header": "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);",
"COLLECTION_CONTENTS[0]": "Kolekcja zawiera %@ przepis.",
"COLLECTION_CONTENTS[1]": "Kolekcja zawiera %@ przepisy.",
"COLLECTION_CONTENTS[2]": "Kolekcja zawiera %@ przepisów."
@ArthurClemens
ArthurClemens / github-repos.es6.js
Created September 23, 2015 21:08
Example of mithril-infinite and retrieving json data from a server
'use strict';
import m from 'mithril';
import infinite from 'mithril-infinite';
const item = (data) => {
return m('.item',
{
style: {
background: '#eee',
@ArthurClemens
ArthurClemens / gist:1b06a661c14bdb369f7c
Last active March 19, 2016 20:24
Mithril simple router wrapper
var router = function(component, name) {
return {
controller: function() {
// Do something generic like calling Google Analytics from here
console.log("router", name);
return new component.controller();
},
view: component.view
};
};
@ArthurClemens
ArthurClemens / bundle.js
Created May 12, 2016 12:30
React JS hello world
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
'use strict';
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, stati
@ArthurClemens
ArthurClemens / m_omdb.erl
Last active August 3, 2016 02:33
Zotonic template model for the OMDB movie database - source code to accompany the documentation
-module(m_omdb).
-behaviour(gen_model).
-export([
m_find_value/3,
m_to_list/2,
m_value/2
]).
-include_lib("zotonic.hrl").
// app/redux/action-creators.es6.js
import {SET_ROUTE} from 'app/redux/action-types';
export const setRoute = (route) => {
return {
type: SET_ROUTE,
route
};
};
https://flems.io/#0=N4IgZglgNgpgziAXAbVAOwIYFsZJAOgAsAXLKEAGhAGMB7NYmBvAHgBMIA3AAgjYF4AOiABOtWsWEA+FgHoOnKYLTKWcaiIgAHYtzgjqQkCWJa4iWbJEYA7gHMIxfHSyyAgiOKEAriIDCsDhocLJatFAAnl5MMLJYGHCMIqEY1ADWGHbwoeFRhDEAtFiOhJpQ8hCJOZHRaDBFJWUFiRhobBhQ9DD4AFZw0nLqmjpKaGoa2rr6hsImZhZWtg5OLu6ePv6BTCFhNfl1cQlJKemZ2bt5hdRwIRxVF7X113DNxK3tnXW9-SAyskOTKSUEBwGCwajECD0BCIEAAZkQAEYAEwAThAAF8KOhsLhYd9gXQGExiHgiYluMBuAAVcRQABGGBEFBpdMZImpjlgLIAkkSAELeYjEegUZTcbgAEWsNhgzO4ABlKsQWUrEpzudw+aLuH4mWwWYLhfQAOJibxaQ1CkVobgY7j8bgPfYwADcynJuiptPC7L8AGV-Sy9SI2AGg4rlRqYOG7Q6nblHuH3So0CGw4H8Bg2Gx-cQIrAABTCfDRHBsArUfXCFnAcUSuidEQAfSgEDsJGb8QgaGbjPSdnNbUQ3GEAGJ+QAOVEAUQArJOa-XuI3aC22x3iM3IcRYNuYAAPYgj8dgM9L20N8Jr1vtztwbz0nd7xhHk+iOyMwvIudzig-v8AIofAAHYAEphGUDEwJTZQ1WIaNwyzHM8wLGBiwIMsYArNtEgKSFYBrSll1Xdc7y3Z8YHfMczzAC8JRXa8yM3PtUjSQdaG8YdRxAGiwERECABZBPoq8m2bdoRDSbcuSoni+LoygSKYiSmWk-t2KHNhqOoOdEURAA2ZFRO4MB6C3OAIAALxgGTdzk5FESgmDlA9aFdE6KtIXof0ADUTXjYQ1E4OxuE4OVLPoIRBGERF8CcmKQF4AQYuEPUtAwZsEuEbgDzIYJotmYUtAWGwyvwGw4XwNc7FkZEAAZGv+ELUqSvKoGCRADzbN
https://flems.io/#0=N4IgtglgJlA2CmIBcBWAjAOhQFgDQgDMIEBnZAbVADsBDMRJEDACwBcxYR8BjAeytbwByEAB4oEAG4ACaAF4AOiABOvXqyUA+UQHoJkzQqpHRJbsogAHVtJLLuikG1aWSSHTuU0A7gHMIrBh8YDoAgsqszACuygDCCPRUJDqWvLAAnpFC8DpgNCSCyik03ADWNL7wyakZWVTwALSQkRawehAFKWmZzNlNAcytDQU0VFA0sPzwGABWJFq6ZhbWhlSm5lY2dg5Kzq7unj7+gcFhEdFxCULV3XU5eQXwRZYl5ZU3tb31DdwkyRKdGo9Pq-EjDVijcaTeqzeYgbQ6JabTRcEAkeAIbisCD8MiMAAMSAAnA1CWgAMwgAC+uGodAY4F4UAx1VgJXgoUqAhIsNRfAEQlYIiM-IK0ngYEsk3S8CqABEaBDpHJpOQjNJpMB1RrpLR6EhpAByABSvGYVGkABl0ghDbhtRrLFEAEawCDcADS8HSBsNACYABzkonYANE8l+2gkAilP3Bu0O2z2X17NwebhQKj4jDu-hEMZPIK8ELjCE6XNJcui5i8MoAfV8UXSyXQfp0kOU8G8GEsVF8hu1NO1WotOr18F9lo6NGksWYNGUlQTo8dLrdnu9voAbOSAwG0GGI1GY3GicudUnuCnWC4Dm6qBhnb4dPe6xAwM+aJJFQudGhML2-aDvao4jhe46+gAsgupTSKEsAIFQ546k6rrul6PpGhG5LYKG4Z+gAKgAqnKJ7xiBF7bNeLhpjoGYPpYEAAB40M6NDpEWISWDWrC8Dofr4hSOj4gA7H+5J-viwliXkVANGgKBbigAbYHWRJbvidYiQJPZ9gOo5DqBiYQUaABK8B8L40hyrwNrwMhq5oRumGGviRJxnhR4SC82kBg5l7UZYBzcG6LwRCQaCCZxOhEKQOjkluYk7gAQqESnYKEACisTJSJABicp+luoQRnK+JhgpsTueS+I1e234QsodZUO6pS6UBBkUZqxn
https://flems.io/#0=N4IgtglgJlA2CmIBcBWATAOgOwEYA0IAzgMYBOA9rLMgNoAMedAugQGYQKG2gB2AhmERIQGABYAXMNQLFyPcfHnIQAHlgQeAawAEpeLAC8AHSLiAnp1Hx44k9tF7WxkBPEAHQkgD0XgK6F4DFY5cT4Ad3hCckEMWTAvPQQ+AMIvADcUbAw0L2JCVL4qWPy7DQUAc1IIc2dCUT4AZgAOABYAWlYeMAB5AGEARwAjABVYAHUASVgAKyaAGTNh6fIsHoBVAGVxacIAaV6Wt263AEVB-rMILAAlUlEAOSxfKAgATmuw0V3NAFkACTcaTmgz+AHFXhtSHYyOR8uQquUNM4+Dw5GYwOR-CYAHxGHh4lQvNLaaDOCjkWwgbEqLxE3E8EAEAIIYjiCByLjCHBIOggAC+eF4AiELnI5E0vjcGB2jJAsnkinEygAhKxfDxWeyeAAKHh4cQASmAJnIg2m8FZJgMBnMbng5FY2ngAA83PDxIQAGSekzqqDwdg8eBQEzKm1mO0O7QYqC+BAAfnE2pdbtIHrwen6vggem1Jkg4gcHBMBoNSBMao1bLkVvDkcd-sD8G9jY0gQEUHjraD2poJhT7sIJjw+eqRdgJhYhqQSd1Bh4AB8F8zWAaMAXx38xRK3PP12OqrAt+LJUvgAKeOuDXztYWIIQ8JXNXJdfqjb6AtpCOIqpaQABuJ9qx4XRX3EDMjT0cRfFIEDxBJECeHjbozQtcQMG7eAAAUKDtNMzDAwU0kKXx4CQUg8EUXxBFIPhBgQJBlQYeV2HKGC6IYpi8DCKpQnosimL5MseBocQmAMCieD5ICtSdXUjWCUhtWI0htHEAwcH-cQVD4Ug2MEeRCAwBAeHKQstIAagso0VKdec41gMNdP0xVCFEph42c6jXPcpBzzwcgDBQ81WQwTR4DMQhkwNf8K3VZ98RAa1bXtR1grQjByhsbowh4HDyDw8wNnRQZKC9T1tUC8hYjkYg+CTdLQqy8Qcry3D4Hw4q