86 lines
1.9 KiB
CoffeeScript
86 lines
1.9 KiB
CoffeeScript
|
|
json_types_uninitialized = require "../Types/JsonTypes"
|
|
HistoryBuffer = require "../HistoryBuffer"
|
|
Engine = require "../Engine"
|
|
|
|
#
|
|
# Framework for Json data-structures.
|
|
# Known values that are supported:
|
|
# * String
|
|
# * Integer
|
|
# * Array
|
|
#
|
|
class JsonYatta
|
|
|
|
#
|
|
# @param {String} user_id Unique id of the peer.
|
|
# @param {Connector} Connector the connector class.
|
|
#
|
|
constructor: (user_id, Connector)->
|
|
@HB = new HistoryBuffer user_id
|
|
json_types = json_types_uninitialized @HB
|
|
@engine = new Engine @HB, json_types.parser
|
|
@connector = new Connector @engine, @HB, json_types.execution_listener, @
|
|
|
|
first_word = new json_types.types.JsonType @HB.getReservedUniqueIdentifier()
|
|
@HB.addOperation(first_word).execute()
|
|
@root_element = first_word
|
|
|
|
#
|
|
# @result JsonType
|
|
#
|
|
getRootElement: ()->
|
|
@root_element
|
|
|
|
#
|
|
# @see Engine
|
|
#
|
|
getEngine: ()->
|
|
@engine
|
|
|
|
#
|
|
# Get the initialized connector.
|
|
#
|
|
getConnector: ()->
|
|
@connector
|
|
|
|
#
|
|
# @see HistoryBuffer
|
|
#
|
|
getHistoryBuffer: ()->
|
|
@HB
|
|
|
|
#
|
|
# @see JsonType.setMutableDefault
|
|
#
|
|
setMutableDefault: (mutable)->
|
|
@root_element.setMutableDefault(mutable)
|
|
|
|
#
|
|
# Get the UserId from the HistoryBuffer object.
|
|
# In most cases this will be the same as the user_id value with which
|
|
# JsonYatta was initialized (Depending on the HistoryBuffer implementation).
|
|
#
|
|
getUserId: ()->
|
|
@HB.getUserId()
|
|
|
|
#
|
|
# @see JsonType.val
|
|
#
|
|
val : (name, content, mutable)->
|
|
@root_element.val(name, content, mutable)
|
|
|
|
#
|
|
# @see JsonType.value
|
|
#
|
|
Object.defineProperty JsonYatta.prototype, 'value',
|
|
get : -> @root_element.value
|
|
set : (o)->
|
|
if o.constructor is {}.constructor
|
|
for o_name,o_obj of o
|
|
@val(o_name, o_obj, 'immutable')
|
|
else
|
|
throw new Error "You must only set Object values!"
|
|
window?.JsonYatta = JsonYatta
|
|
module.exports = JsonYatta
|