neft
Version:
JavaScript. Everywhere.
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.AttrChange'
log = log.scope 'View', 'AttrChange'
module.exports = (File) -> class AttrChange
= 'AttrChange'
= 'File.AttrChange'
JSON_CTOR_ID = = File.JSON_CTORS.push(AttrChange) - 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 AttrChange file, node, target, arr[JSON_NAME]
obj
constructor: (, , , ) ->
assert.instanceOf , File
assert.instanceOf , File.Element
assert.instanceOf , File.Element
assert.isString
assert.notLengthOf , 0
= .attrs[]
()
.onVisibleChange onVisibleChange, @
.onAttrsChange onAttrsChange, @
`//<development>`
if is AttrChange
Object.preventExtensions @
`//</development>`
update: ->
val = if .visible then .attrs.value else
.attrs.set , val
return
onVisibleChange = ->
()
onAttrsChange = (name, oldValue) ->
if name is 'name'
throw new Error "Dynamic neft:attr 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 AttrChange 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