neft
Version:
Universal Platform
76 lines (59 loc) • 2.17 kB
text/coffeescript
assert = require 'src/assert'
utils = require 'src/utils'
log = require 'src/log'
assert = assert.scope 'View.PropChange'
log = log.scope 'View', 'PropChange'
module.exports = (File) -> class PropChange
= 'PropChange'
= 'File.PropChange'
JSON_CTOR_ID = = File.JSON_CTORS.push(PropChange) - 1
i = 1
JSON_NODE = i++
JSON_TARGET = i++
JSON_NAME = i++
JSON_ARGS_LENGTH = = i
= (file, arr, obj) ->
unless obj
node = file.node.getChildByAccessPath arr[JSON_NODE]
target = file.node.getChildByAccessPath arr[JSON_TARGET]
obj = new PropChange file, node, target, arr[JSON_NAME]
obj
constructor: (, , , ) ->
assert.instanceOf , File
assert.instanceOf , File.Element
assert.instanceOf , File.Element
assert.isString
assert.notLengthOf , 0
= .props[]
()
.onVisibleChange onVisibleChange, @
.onPropsChange onPropsChange, @
`//<development>`
if is PropChange
Object.preventExtensions @
`//</development>`
update: ->
val = if .visible then .props.value else
.props.set , val
return
onVisibleChange = ->
()
onPropsChange = (name, oldValue) ->
if name is 'name'
throw new Error 'Dynamic prop name is not implemented'
else if name is 'value'
()
return
clone: (original, file) ->
node = original.node.getCopiedElement , file.node
target = original.node.getCopiedElement , file.node
new PropChange file, node, target,
toJSON: (key, arr) ->
unless arr
arr = new Array JSON_ARGS_LENGTH
arr[0] = JSON_CTOR_ID
arr[JSON_NODE] = .getAccessPath .node
arr[JSON_TARGET] = .getAccessPath .node
arr[JSON_NAME] =
arr