changed examples, added listener methods

This commit is contained in:
Kevin Jahns
2014-08-19 21:09:23 +02:00
parent 9a1b0b7ced
commit 92e23b7007
50 changed files with 1229 additions and 526 deletions

View File

@@ -32,25 +32,35 @@ module.exports = (HB)->
# @param {String} event Name of the event.
# @param {Function} f f is executed in case the event fires.
#
on: (event, f)->
on: (events, f)->
@event_listeners ?= {}
@event_listeners[event] ?= []
@event_listeners[event].push f
if events.constructor isnt [].constructor
events = [events]
for e in events
@event_listeners[e] ?= []
@event_listeners[e].push f
deleteListener: (events, f)->
if events.constructor isnt [].constructor
events = [events]
for e in events
if @event_listeners?[e]?
@event_listeners[e] = @event_listeners[e].filter (g)->
f isnt g
#
# Fire an event.
# TODO: Do something with timeouts. You don't want this to fire for every operation (e.g. insert).
#
callEvent: (event, args)->
callEvent: (event, args...)->
if @event_listeners?[event]?
for f in @event_listeners[event]
f.call @, event, args
f.call @, event, args...
#
# Set the parent of this operation.
#
setParent: (o)->
@parent = o
setParent: (@parent)->
#
# Get the parent of this operation.

View File

@@ -77,7 +77,10 @@ module.exports = (HB)->
uid_end.op_number = "_#{uid_end.op_number}_RM_#{@name}_end"
beg = HB.addOperation(new types.Delimiter uid_beg, undefined, uid_end).execute()
end = HB.addOperation(new types.Delimiter uid_end, beg, undefined).execute()
@map_manager.map[@name] = HB.addOperation(new ReplaceManager undefined, uid_r, beg, end).execute()
@map_manager.map[@name] = HB.addOperation(new ReplaceManager undefined, uid_r, beg, end)
@map_manager.map[@name].setParent @map_manager, @name
@map_manager.map[@name].execute()
@map_manager.callEvent 'addProperty', @name
super
#
@@ -165,8 +168,6 @@ module.exports = (HB)->
o = o.next_cl
if not o.isDeleted()
position -= 1
o
#
@@ -199,6 +200,16 @@ module.exports = (HB)->
HB.addOperation(op).execute()
#
# Add change listeners for parent.
#
setParent: (parent, property_name)->
@on 'insert', (event, op)=>
if op.next_cl instanceof types.Delimiter
@parent.callEvent 'change', property_name
@on 'change', (event)=>
@parent.callEvent 'change', property_name
super parent
#
# Get the value of this Word
# @return {String}
#

View File

@@ -140,7 +140,9 @@ module.exports = (HB)->
#
setReplaceManager: (op)->
@saveOperation 'replace_manager', op
@validateSavedOperations
@validateSavedOperations()
@on ['insert', 'delete'], ()=>
@replace_manager?.callEvent 'change'
#
# Bind this Word to a textfield.