Skip to content

Instantly share code, notes, and snippets.

@tmeasday
tmeasday / Console output
Created May 29, 2012 06:50
Meteor Subscription timeline
at Subscribing to post#undefined; comments are:
at Subscribed; comments are:
at Startup; comments are:
at Subscription complete; comments are:
at Setting session var to 1; comments are:
at Set to 1; comments are:
at Subscribing to post#1; comments are:
at Subscribed; comments are:
at Flushed; comments are:
@tmeasday
tmeasday / select.coffee
Created May 29, 2012 07:30
A really simple custom select widget implemented in Meteor
Session.set 'select.open', false
Template.select.selected_value = -> Session.get('select.selected_value')
Template.select.open = -> 'open' if Session.get('select.open')
Template.select.selected = ->
'selected' if Session.equals('select.selected_value', this.valueOf())
Template.select.events =
'click li:not(:first-child)': (e) ->
Session.set('select.selected_value', this.valueOf())
'click': ->
Session.set('select.open', !Session.get('select.open'))
@tmeasday
tmeasday / model.coffee
Created June 1, 2012 01:17
Meteor Model idea
class InvalidModelException
constructor: (@record) ->
@errors = @record.errors
toString: ->
"Invalid model: #{@record}: #{@record.full_errors()}"
class Model
@_collection: null
constructor: (attributes) ->
@tmeasday
tmeasday / reactive_object.coffee
Created June 1, 2012 02:43
Reactive Object using getters + setters
# pretty straightforward, very similar to the Session object, except uses getters and setters
# to allow reactivity to happen 'magically'
class ReactiveObject
constructor: (attributes) ->
@attributes = attributes
@contexts = {}
_.each attributes, (v, key) =>
@contexts[key] = {}
Object.defineProperty(this, key,
@tmeasday
tmeasday / gist:2958636
Created June 20, 2012 07:30
CSS to visualise form animation in meteor.
/* CSS declarations go here */
input {
position: relative;
-moz-transition: all 500ms;
-webkit-transition: all 500ms;
-o-transition: all 500ms;
transition: all 500ms;
}
input[checked] {
top: 10px;
@tmeasday
tmeasday / example-usage.js
Created August 16, 2012 08:41
Very basic reactive select for meteor
{{> select selectData}}
Template.foo.selectData = {
include_blank: true
icon: 'player'
name: 'players_required',
options: ({text: "#{i} players", value: i, selected: i == required} for i in [3..18])
}
@tmeasday
tmeasday / template.html
Created August 16, 2012 12:01
Binding an object to a template, reactively, using a model pattern
{{#with aPost}}
{{> post}}
{{/with}}
<template name="post">
...draw a form for the post...
</template>
<script type="text/javascript" src="/packages/underscore/underscore.js?772b2587aa2fa345fb760eff9ebe5acd97937243"></script>
<script type="text/javascript" src="/packages/meteor/client_environment.js?b157cf590c380de2b08e97439017132517a1ea4b"></script>
<script type="text/javascript" src="/packages/meteor/helpers.js?71d94de5b2e532dba62dcbf68be35f05d6ba7834"></script>
<script type="text/javascript" src="/packages/meteor/timers.js?751790703a2d75d770e3a46b896d1e2b6ebf2dab"></script>
<script type="text/javascript" src="/packages/meteor/dynamics_browser.js?46b8d1f1158040fcc2beb7906ec2f932871a398d"></script>
<script type="text/javascript" src="/packages/deps/deps.js?f8cf99fe4b1eaaf75f0f0df346ea65f11d49119b"></script>
<script type="text/javascript" src="/packages/logging/logging.js?b9c522c3b350fdcf851971f3373c042776bd3ec4"></script>
<script type="text/javascript" src="/packages/json/json2.js?b6fa2247d96bb52f6fd1be0e21414e71c8e6c8d0"></script>
<script type="text/javascript" src="/packages/reload/reload
@tmeasday
tmeasday / gist:3614984
Created September 3, 2012 23:52
meteor syntax error
app/tester.js:20
{
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
SyntaxError: Unexpected end of input
at /Users/tom/Development/Sandbox/tester/.meteor/local/build/server/server.js:112:21
at Array.forEach (native)
@tmeasday
tmeasday / gist:4042603
Last active August 3, 2025 23:42
Meteor "Join" -- Note that this code is *not* production ready.
Meteor.publish 'paths', (since) ->
pointHandles = {}
publishPath = (pathId) =>
pointHandles[pathId] = Points.find({pathId: pathId}).observe
added: (obj) =>
@set('points', obj._id, obj)
@flush()
# these two should never happen
changed: (obj) =>