Mercurial > code > home > repos > light9
changeset 1104:448fe9f81501
start to convert subserver to offer the new effects
Ignore-this: 8dcbd993db2e451d80da200cd2cfbc81
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Mon, 09 Jun 2014 07:30:23 +0000 |
parents | 771f50f19b4b |
children | 0440fb0f458b |
files | bin/subserver light9/subserver/chases.coffee light9/subserver/chases.jade light9/subserver/effects.coffee light9/subserver/effects.jade |
diffstat | 5 files changed, 87 insertions(+), 66 deletions(-) [+] |
line wrap: on
line diff
--- a/bin/subserver Mon Jun 09 07:10:39 2014 +0000 +++ b/bin/subserver Mon Jun 09 07:30:23 2014 +0000 @@ -37,9 +37,29 @@ log.info("got message %s" % message) self.sendMessage(message) +class EffectsUpdates(cyclone.websocket.WebSocketHandler): + def connectionMade(self, *args, **kwargs): + self.connected = True + self.settings.graph.addHandler(self.onGraphChange) + + def connectionLost(self, reason): + self.connected = False + + def onGraphChange(self): + if not self.connected: + return + graph = self.settings.graph + classes = [] + for e in graph.subjects(RDF.type, L9['EffectClass']): + classes.append({'uri': e, + 'label': graph.label(e), + 'code': graph.value(e, L9['code'])}) + print "sendMessage", classes + self.sendMessage({'classes': classes}) + class Static(PrettyErrorHandler, cyclone.web.StaticFileHandler): def get(self, path, *args, **kw): - if path in ['', 'chases']: + if path in ['', 'effects']: return self.respondStaticJade("light9/subserver/%s.jade" % (path or 'index')) @@ -129,6 +149,7 @@ port = 8052 reactor.listenTCP(port, cyclone.web.Application(handlers=[ (r'/live', Live), + (r'/effectsUpdates', EffectsUpdates), (r'/snapshot', Snapshot), (r'/static/(.*)', cyclone.web.StaticFileHandler, {'path': 'static/'}), (r'/(.*)', Static,
--- a/light9/subserver/chases.coffee Mon Jun 09 07:10:39 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -class Model - constructor: -> - @chases = ko.observable([]) - @moreExprs = [ - {label: "rainbow", expr: "hsv(t*1,1,1)"}, - {label: "pulserainbow", expr: "hsv(t*1,1,1)*nsin(t*2)"}, - {label: "stacrainbow", expr: "hsv(t*1,1,1)*(nsin(t*2)>.7)"}, - {label: "alternatergb", expr: "hsv(t*1,1,1, light='left')*nsin(t*3) + hsv(t*1,1,1,light='right')*(1-nsin(t*3))"}, - {label: "frontchase", expr: "chase(t, names=frontchase, ontime=.3, offset=-.11)"}, - {label: "bumpyhues", expr: "hsv(t*.5,.4,1)*notch(t*.01)"}, - ] - - subtermLink: (label, expr) => - "http://chase?"+$.param({ - subtermName: label - subtermExpr: label + '_env(t) * ' + expr - curve: label + '_env' - }) - subtermExprs: (chase) => - [ - 'chase(t, names=LABEL, ontime=0.5, offset=0.2)'.replace(/LABEL/g, chase.label) - ] - - - -model = new Model() - -# this sort of works to stop clicks in <input> from following the -# submaster hyperlink, but it may make certain clicks act wrong -$('a').live('click', (ev) -> - return false if ev.target.tagName == 'INPUT' -) - -reconnectingWebSocket "ws://localhost:8052/live", (msg) -> - model.chases(msg.chases) if msg.chases? - - -ko.applyBindings(model) \ No newline at end of file
--- a/light9/subserver/chases.jade Mon Jun 09 07:10:39 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -doctype html -html - head - title effects - link(rel='stylesheet', href='style.css') - body - h1 Effects - - div(data-bind="foreach: moreExprs") - div.resource.chase - span(data-bind="text: label") - | - a.resource(data-bind="attr: {href: $root.subtermLink(label, expr)}, text: expr") - - div(data-bind="foreach: chases") - div.resource.chase - | Chase - a(data-bind="attr: {href: uri}, text: label") - ul(data-bind="foreach: $parent.subtermExprs($data)") - li: a.resource(data-bind="attr: {href: $root.subtermLink($parent.label, $data)}, text: $data") - - #status - - script(src="static/jquery-2.1.1.min.js") - script(src="static/knockout-3.1.0.js") - script(src="static/websocket.js") - script(src="chases.js") \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/light9/subserver/effects.coffee Mon Jun 09 07:30:23 2014 +0000 @@ -0,0 +1,38 @@ +class Model + constructor: -> + @chases = ko.observable([]) + @moreExprs = [ + {label: "rainbow", expr: "hsv(t*1,1,1)"}, + {label: "pulserainbow", expr: "hsv(t*1,1,1)*nsin(t*2)"}, + {label: "stacrainbow", expr: "hsv(t*1,1,1)*(nsin(t*2)>.7)"}, + {label: "alternatergb", expr: "hsv(t*1,1,1, light='left')*nsin(t*3) + hsv(t*1,1,1,light='right')*(1-nsin(t*3))"}, + {label: "frontchase", expr: "chase(t, names=frontchase, ontime=.3, offset=-.11)"}, + {label: "bumpyhues", expr: "hsv(t*.5,.4,1)*notch(t*.01)"}, + ] + + subtermLink: (label, expr) => + "http://chase?"+$.param({ + subtermName: label + subtermExpr: label + '_env(t) * ' + expr + curve: label + '_env' + }) + subtermExprs: (chase) => + [ + 'chase(t, names=LABEL, ontime=0.5, offset=0.2)'.replace(/LABEL/g, chase.label) + ] + + + +model = new Model() + + +reconnectingWebSocket "ws://localhost:8052/effectsUpdates", (msg) -> + model.chases(msg.chases) if msg.chases? + +# this sort of works to stop clicks in <input> from following the +# submaster hyperlink, but it may make certain clicks act wrong +$(document).on('click', 'a', (ev) -> + return false if ev.target.tagName == 'INPUT' +) + +ko.applyBindings(model) \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/light9/subserver/effects.jade Mon Jun 09 07:30:23 2014 +0000 @@ -0,0 +1,27 @@ +doctype html +html + head + title effects + link(rel='stylesheet', href='style.css') + body + h1 Effects + + div(data-bind="foreach: moreExprs") + div.resource.chase + span(data-bind="text: label") + | + a.resource(data-bind="attr: {href: $root.subtermLink(label, expr)}, text: expr") + + div(data-bind="foreach: chases") + div.resource.chase + | Chase + a(data-bind="attr: {href: uri}, text: label") + ul(data-bind="foreach: $parent.subtermExprs($data)") + li: a.resource(data-bind="attr: {href: $root.subtermLink($parent.label, $data)}, text: $data") + + #status + + script(src="static/jquery-2.1.1.min.js") + script(src="static/knockout-3.1.0.js") + script(src="static/websocket.js") + script(src="effects.js") \ No newline at end of file