Skip to content

Instantly share code, notes, and snippets.

@antonycourtney
antonycourtney / todoActions.js
Last active October 19, 2015 02:42
Responses to user interaction in oneref-todomvc
/**
* todoActions.js -- event handlers for TodoMVC app
*/
import TodoItem from './todoItem';
export function create(text,updater) {
updater((state) => state.addItem(new TodoItem(text)));
}
export function toggleComplete(item,updater) {
@antonycourtney
antonycourtney / app.js
Last active October 19, 2015 02:43
Top level of React application
/**
* app.js -- top level of TodoMVC app
*/
import React from 'react';
import OneRef from 'oneref';
import TodoAppState from './todoAppState';
import TodoApp from './components/TodoApp.react';
const todoAppState = new TodoAppState();
const stateRef = new OneRef.Ref(todoAppState);
@antonycourtney
antonycourtney / Message.js
Created October 15, 2015 01:55
oneref-chat Message as Immutable Record
const Message = Immutable.Record({
id: '',
threadID: '',
threadName: '',
authorName: '',
text: '',
date: new Date(),
isRead: false
});
@antonycourtney
antonycourtney / Thread.js
Created October 15, 2015 01:59
oneref-chat message Thread
/**
* Contents of a single conversation (message thread) sharing a common thread ID
*
* We use a SortedMap and add messages in chronological order
*/
export default class Thread extends Immutable.Record({
messageIdMap: Immutable.OrderedMap() // map from id to Message, ordered by date
}) {
/*
* add or update the message by its message id
@antonycourtney
antonycourtney / ChatAppState.js
Last active October 19, 2015 03:46
oneref-chat application state
/**
*
* ChatAppState.js - atate of Chat application as an Immutable record
*
* Our application state consists of a collection of message threads
* and a current thread (identified by its thread ID)
*
* Each thread id maps to a Thread (a collection of Message)
*/
const emptyThread = new Thread();
import EventEmitter from 'events';
export class Ref extends EventEmitter {
constructor(v) {
super();
this._value = v;
}
getValue() {
@antonycourtney
antonycourtney / fillView.js
Created October 15, 2015 06:28
fillView action in oneref-flux-challenge
/*
* fill view by generating more requests if necessary
*/
function fillView(st,updater) {
const lastSith = st.lastKnownSith();
if (st.needsApprentice(lastSith)) {
requestSithInfo(true,lastSith.info.apprenticeId,updater);
} else {
const firstSith = st.firstKnownSith();
if (st.needsMaster(firstSith)) {
@antonycourtney
antonycourtney / scrollAction.js
Created October 15, 2015 06:32
scroll action in oneref-flux-challenge
export function scroll(scrollAmount,updater) {
updater((prevState) => {
const {nextState, oldRequests} = prevState.scrollAdjust(scrollAmount);
oldRequests.forEach((req) => req.abort()); // cancel old requests
// Need invokeLater since we're within updater
invokeLater(() => fillView(nextState,updater));
return nextState;
});
}
@antonycourtney
antonycourtney / invokeLater.js
Last active October 19, 2015 03:11
invokeLater for oneref
function invokeLater(f) {
window.setTimeout(f, 0);
}
@antonycourtney
antonycourtney / Example1.elm
Last active November 8, 2015 06:00
Animaxe Example 1 in Elm
import Color exposing (..)
import Graphics.Collage exposing (..)
import Graphics.Element exposing (..)
import List exposing (..)
import Signal exposing (..)
import Time exposing (..)
import Array
-- a square of the given width and color:
square : Float -> Color -> Form