renamed to yjs

This commit is contained in:
DadaMonad 2015-01-26 23:24:50 +00:00
parent d5c7d51dc4
commit 978203d73e
57 changed files with 83 additions and 54177 deletions

View File

@ -1,23 +1,23 @@
# ![Yatta!](https://dadamonad.github.io/files/layout/Yatta_logo.png)
# ![Yatta!](https://dadamonad.github.io/files/layout/y_logo.png)
[![Build Status](http://layers.dbis.rwth-aachen.de/jenkins/job/Yatta/badge/icon)](http://layers.dbis.rwth-aachen.de/jenkins/job/Yatta/)
Yatta is a framework for optimistic concurrency control and automatic conflict resolution on arbitrary data types. The framework implements a new OT-like concurrency algorithm and provides similar functionality as [ShareJs] and [OpenCoweb]. Yatta was designed to take away the pain from concurrently editing complex data types like Text, Json, and XML. For more information you should check out the [website](https://dadamonad.github.io/Yatta/)!
Y is a framework for optimistic concurrency control and automatic conflict resolution on arbitrary data types. The framework implements a new OT-like concurrency algorithm and provides similar functionality as [ShareJs] and [OpenCoweb]. Y was designed to take away the pain from concurrently editing complex data types like Text, Json, and XML. For more information you should check out the [website](https://dadamonad.github.io/yjs/)!
In the future, we want to enable users to implement their own collaborative types. Currently we provide data types for
* Text
* Json
* XML
Unlike other frameworks, Yatta supports P2P message propagation and is not bound to a specific communication protocol. Therefore, Yatta is extremely scalable and can be used in a wide range of application scenarios.
Unlike other frameworks, Y supports P2P message propagation and is not bound to a specific communication protocol. Therefore, Y is extremely scalable and can be used in a wide range of application scenarios.
We support several communication protocols as so called *Connectors*. You find a bunch of Connectors in the [Yatta-Connectors](https://github.com/rwth-acis/Yatta-Connectors) repository. Currently supported communication protocols:
We support several communication protocols as so called *Connectors*. You find a bunch of Connectors in the [Y-Connectors](https://github.com/rwth-acis/y-connectors) repository. Currently supported communication protocols:
* [XMPP-Connector](http://xmpp.org) - Propagates updates in a XMPP multi-user-chat room
* [WebRTC-Connector](http://peerjs.com/) - Propagate updates directly with WebRTC
* [IWC-Connector](http://dbis.rwth-aachen.de/cms/projects/the-xmpp-experience#interwidget-communication) - Inter-widget Communication
You can use Yatta client-, and server- side. You can get it as via npm, and bower. We even provide a polymer element for Yatta!
You can use Y client-, and server- side. You can get it as via npm, and bower. We even provide a polymer element for Y!
The theoretical advantages over similar frameworks are support for
* .. P2P message propagation and arbitrary communication protocols
@ -27,32 +27,32 @@ The theoretical advantages over similar frameworks are support for
* .. Intention Preservation: When working on Text, the intention of your changes are preserved. This is particularily important when working offline.
## Use it!
You find a tutorial, examples, and documentation on the [website](https://dadamonad.github.io/Yatta/).
You find a tutorial, examples, and documentation on the [website](https://dadamonad.github.io/yjs/).
Either clone this git repository, install it with [bower](http://bower.io/), or install it with [npm](https://www.npmjs.org/package/yatta).
Either clone this git repository, install it with [bower](http://bower.io/), or install it with [npm](https://www.npmjs.org/package/yjs).
### Bower
```
bower install Yatta
bower install yjs
```
Then you include the libraries directly from the installation folder.
```
<script src="./bower_components/yatta/yatta.js"></script>
<script src="./bower_components/yjs/y.js"></script>
```
### Npm
```
npm install yatta --save
npm install yjs --save
```
And use it like this with *npm*:
```
Yatta = require("yatta");
Y = require("yjs");
```
## Status
Yatta! is still in an early development phase. Don't expect that everything is working fine.
But I would become really motivated if you gave me some feedback :) ([github](https://github.com/DadaMonad/Yatta/issues)).
yjs is still in an early development phase. Don't expect that everything is working fine.
But I would become really motivated if you gave me some feedback :) ([github](https://github.com/rwth-acis/yjs/issues)).
### Current Issues
* The History Buffer should be able to store operations in a database
@ -61,11 +61,11 @@ But I would become really motivated if you gave me some feedback :) ([github](ht
* Custom data types
## Support
Please report _any_ issues to the [Github issue page](https://github.com/DadaMonad/Yatta/issues)!
I would appreciate if developers give me feedback on how _convenient_ the framework is, and if it is easy to use. Particularly the XML-support may not support every DOM-methods - if you encounter a method that does not cause any change on other peers, please state function name, and sample parameters. However, there are browser-specific features, that Yatta won't support.
Please report _any_ issues to the [Github issue page](https://github.com/rwth-acis/yjs/issues)!
I would appreciate if developers give me feedback on how _convenient_ the framework is, and if it is easy to use. Particularly the XML-support may not support every DOM-methods - if you encounter a method that does not cause any change on other peers, please state function name, and sample parameters. However, there are browser-specific features, that Y won't support.
## License
Yatta! is licensed under the [MIT License](./LICENSE.txt).
yjs is licensed under the [MIT License](./LICENSE.txt).
[ShareJs]: https://github.com/share/ShareJS
[OpenCoweb]: https://github.com/opencoweb/coweb

View File

@ -1,15 +1,15 @@
{
"name": "Y",
"version": "0.2.3",
"homepage": "https://github.com/DadaMonad/Yatta",
"name": "yjs",
"version": "0.3.0",
"homepage": "https://github.com/DadaMonad/yjs",
"authors": [
"Kevin Jahns <kevin.jahns@rwth-aachen.de>"
],
"description": "A Framework that enables Real-Time collaboration on arbitrary data structures.",
"main": [
"./yatta.js",
"./yatta-element.html",
"./build/node/yatta.js"
"./y.js",
"./y-object.html",
"./build/node/y.js"
],
"keywords": [
"OT",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -60,8 +60,8 @@ adaptConnector = function(connector, engine, HB, execution_listener) {
return engine.applyOp(op);
}
});
if (connector._whenBoundToYatta != null) {
return connector._whenBoundToYatta();
if (connector._whenBoundToY != null) {
return connector._whenBoundToY();
}
};

View File

@ -116,7 +116,7 @@ module.exports = function(HB) {
o = type.create.apply(null, args);
return Object.__super__.val.call(this, name, o);
} else {
throw new Error("The " + content.constructor.name + "-type is not (yet) supported in Yatta.");
throw new Error("The " + content.constructor.name + "-type is not (yet) supported in Y.");
}
} else {
return Object.__super__.val.call(this, name, content);

View File

@ -164,7 +164,7 @@ module.exports = function(HB) {
if ((type != null) && (type.create != null)) {
return type.create(content, options);
} else {
throw new Error("The " + content.constructor.name + "-type is not (yet) supported in Yatta.");
throw new Error("The " + content.constructor.name + "-type is not (yet) supported in Y.");
}
} else {
return content;

View File

@ -1,92 +0,0 @@
var Yatta, bindToChildren;
Yatta = require('./yatta');
bindToChildren = function(that) {
var attr, i, _i, _ref;
for (i = _i = 0, _ref = that.children.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
attr = that.children.item(i);
if (attr.name != null) {
attr.val = that.val.val(attr.name);
}
}
return that.val.observe(function(events) {
var event, newVal, _j, _len, _results;
_results = [];
for (_j = 0, _len = events.length; _j < _len; _j++) {
event = events[_j];
if (event.name != null) {
_results.push((function() {
var _k, _ref1, _results1;
_results1 = [];
for (i = _k = 0, _ref1 = that.children.length; 0 <= _ref1 ? _k < _ref1 : _k > _ref1; i = 0 <= _ref1 ? ++_k : --_k) {
attr = that.children.item(i);
if ((attr.name != null) && attr.name === event.name) {
newVal = that.val.val(attr.name);
if (attr.val !== newVal) {
_results1.push(attr.val = newVal);
} else {
_results1.push(void 0);
}
} else {
_results1.push(void 0);
}
}
return _results1;
})());
} else {
_results.push(void 0);
}
}
return _results;
});
};
Polymer("yatta-element", {
ready: function() {
if (this.connector != null) {
this.val = new Yatta(this.connector);
return bindToChildren(this);
} else if (this.val != null) {
return bindToChildren(this);
}
},
valChanged: function() {
if ((this.val != null) && this.val.type === "Object") {
return bindToChildren(this);
}
},
connectorChanged: function() {
if (this.val == null) {
this.val = new Yatta(this.connector);
return bindToChildren(this);
}
}
});
Polymer("yatta-property", {
ready: function() {
if ((this.val != null) && (this.name != null)) {
if (this.val.constructor === Object) {
this.val = this.parentElement.val(this.name, this.val).val(this.name);
} else if (typeof this.val === "string") {
this.parentElement.val(this.name, this.val);
}
if (this.val.type === "Object") {
return bindToChildren(this);
}
}
},
valChanged: function() {
var _ref;
if ((this.val != null) && (this.name != null)) {
if (this.val.constructor === Object) {
return this.val = this.parentElement.val.val(this.name, this.val).val(this.name);
} else if (this.val.type === "Object") {
return bindToChildren(this);
} else if ((((_ref = this.parentElement.val) != null ? _ref.val : void 0) != null) && this.val !== this.parentElement.val.val(this.name)) {
return this.parentElement.val.val(this.name, this.val);
}
}
}
});

View File

@ -1,54 +0,0 @@
var Engine, HistoryBuffer, adaptConnector, createYatta, json_types_uninitialized,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
json_types_uninitialized = require("./Types/JsonTypes");
HistoryBuffer = require("./HistoryBuffer");
Engine = require("./Engine");
adaptConnector = require("./ConnectorAdapter");
createYatta = function(connector) {
var HB, Yatta, type_manager, types, user_id;
user_id = null;
if (connector.id != null) {
user_id = connector.id;
} else {
user_id = "_temp";
connector.whenUserIdSet(function(id) {
user_id = id;
return HB.resetUserId(id);
});
}
HB = new HistoryBuffer(user_id);
type_manager = json_types_uninitialized(HB);
types = type_manager.types;
Yatta = (function(_super) {
__extends(Yatta, _super);
function Yatta() {
this.connector = connector;
this.HB = HB;
this.types = types;
this.engine = new Engine(this.HB, type_manager.types);
adaptConnector(this.connector, this.engine, this.HB, type_manager.execution_listener);
Yatta.__super__.constructor.apply(this, arguments);
}
Yatta.prototype.getConnector = function() {
return this.connector;
};
return Yatta;
})(types.Object);
return new Yatta(HB.getReservedUniqueIdentifier()).execute();
};
module.exports = createYatta;
if ((typeof window !== "undefined" && window !== null) && (window.Yatta == null)) {
window.Yatta = createYatta;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,274 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='javascript/application.js'></script>
<script src='javascript/search.js'></script>
<link rel='stylesheet' href='stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path=''></div>
<div id='header'>
<div id='menu'>
</div>
</div>
<div id='content'>
<h1 class='noborder title'></h1>
<div id='listing'>
<h1 class='alphaindex'>Alphabetical Index</h1>
<h2>Extra File Listing</h2>
<ul id='files'>
<li>
<a href='extra/README.md.html' title='README.md'>
README.md
</a>
</li>
<li>
<a href='extra/LICENSE.txt.html' title='LICENSE.txt'>
LICENSE.txt
</a>
</li>
</ul>
<h2>Class Listing A-Z</h2>
<div class='index'>
<ul>
<li class='letter'>a</li>
<ul>
<li>
<a href='class/types/Array.html'>
Array
</a>
<small>
(types)
</small>
</li>
</ul>
</ul>
<ul>
<li class='letter'>o</li>
<ul>
<li>
<a href='class/types/Object.html'>
Object
</a>
<small>
(types)
</small>
</li>
</ul>
</ul>
<ul>
<li class='letter'>s</li>
<ul>
<li>
<a href='class/types/String.html'>
String
</a>
<small>
(types)
</small>
</li>
</ul>
</ul>
<ul>
<li class='letter'>y</li>
<ul>
<li>
<a href='class/Yatta.html'>
Yatta
</a>
</li>
</ul>
</ul>
</div>
<h2>File Listing A-Z</h2>
<div class='index'>
<ul>
<li class='letter'>b</li>
<ul>
<li>
<a href='file/lib/Types/BasicTypes.coffee.html'>
BasicTypes.coffee
</a>
<small>
(lib&#47;Types)
</small>
</li>
</ul>
</ul>
<ul>
<li class='letter'>c</li>
<ul>
<li>
<a href='file/lib/ConnectorAdapter.coffee.html'>
ConnectorAdapter.coffee
</a>
<small>
(lib)
</small>
</li>
</ul>
</ul>
<ul>
<li class='letter'>e</li>
<ul>
<li>
<a href='file/lib/Engine.coffee.html'>
Engine.coffee
</a>
<small>
(lib)
</small>
</li>
</ul>
</ul>
<ul>
<li class='letter'>h</li>
<ul>
<li>
<a href='file/lib/HistoryBuffer.coffee.html'>
HistoryBuffer.coffee
</a>
<small>
(lib)
</small>
</li>
</ul>
</ul>
<ul>
<li class='letter'>j</li>
<ul>
<li>
<a href='file/lib/Types/JsonTypes.coffee.html'>
JsonTypes.coffee
</a>
<small>
(lib&#47;Types)
</small>
</li>
</ul>
</ul>
<ul>
<li class='letter'>s</li>
<ul>
<li>
<a href='file/lib/Types/StructuredTypes.coffee.html'>
StructuredTypes.coffee
</a>
<small>
(lib&#47;Types)
</small>
</li>
</ul>
</ul>
<ul>
<li class='letter'>t</li>
<ul>
<li>
<a href='file/lib/Types/TextTypes.coffee.html'>
TextTypes.coffee
</a>
<small>
(lib&#47;Types)
</small>
</li>
</ul>
</ul>
<ul>
<li class='letter'>y</li>
<ul>
<li>
<a href='file/lib/yatta-element.coffee.html'>
yatta-element.coffee
</a>
<small>
(lib)
</small>
</li>
<li>
<a href='file/lib/yatta.coffee.html'>
yatta.coffee
</a>
<small>
(lib)
</small>
</li>
</ul>
</ul>
</div>
</div>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,212 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../javascript/application.js'></script>
<script src='../javascript/search.js'></script>
<link rel='stylesheet' href='../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../'></div>
<div id='header'>
<div id='menu'>
<a href='../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>Yatta</span>
</div>
</div>
<div id='content'>
<h1>
Class:
Yatta
</h1>
<table class='box'>
<tr>
<td>Defined in:</td>
<td>lib&#47;yatta.coffee</td>
</tr>
<tr>
<td>Inherits:</td>
<td>
<a href='../class/types/Object.html'>types.Object</a>
</td>
</tr>
</table>
<h2>Overview</h2>
<div class='docstring'>
<p>Framework for Json data-structures.
Known values that are supported:</p><ul>
<li>String</li>
<li>Integer</li>
<li>Array</li>
</ul>
</div>
<div class='tags'>
</div>
<h2>Variables Summary</h2>
<h3 class='inherited'>
Variable inherited from
<a href='../class/types/Object.html'>types.Object</a>
</h3>
<p class='inherited'>
<a href='../class/types/Object.html#type-variable'>type</a>
</p>
<h2>Instance Method Summary</h2>
<ul class='summary'>
<li>
<span class='signature'>
<a href='#getConnector-dynamic'>
#
(void)
<b>getConnector</b><span>()</span>
</a>
</span>
<span class='desc'>
</span>
</li>
</ul>
<h2>
<small>Inherited Method Summary</small>
<h3 class='inherited'>
Methods inherited from
<a href='../class/types/Object.html'>types.Object</a>
</h3>
<p class='inherited'>
<a href='../class/types/Object.html#applyDelete-dynamic'>#applyDelete</a>
<a href='../class/types/Object.html#cleanup-dynamic'>#cleanup</a>
<a href='../class/types/Object.html#toJson-dynamic'>#toJson</a>
<a href='../class/types/Object.html#val-dynamic'>#val</a>
<a href='../class/types/Object.html#_encode-dynamic'>#_encode</a>
</p>
</h2>
<h2>Constructor Details</h2>
<div class='methods'>
<div class='method_details'>
<p class='signature' id='constructor-dynamic'>
#
(void)
<b>constructor</b><span>()</span>
<br>
</p>
<div class='tags'>
<h3>Parameters:</h3>
<ul class='param'>
<li>
<span class='name'>user_id</span>
<span class='type'>
(
<tt>String</tt>
)
</span>
&mdash;
<span class='desc'>Unique id of the peer. </span>
</li>
<li>
<span class='name'>Connector</span>
<span class='type'>
(
<tt>Connector</tt>
)
</span>
&mdash;
<span class='desc'>the connector class. </span>
</li>
</ul>
</div>
</div>
</div>
<h2>Instance Method Details</h2>
<div class='methods'>
<div class='method_details'>
<p class='signature' id='getConnector-dynamic'>
#
(void)
<b>getConnector</b><span>()</span>
<br>
</p>
</div>
</div>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,357 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../../javascript/application.js'></script>
<script src='../../javascript/search.js'></script>
<link rel='stylesheet' href='../../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../../'></div>
<div id='header'>
<div id='menu'>
<a href='../../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>types</span>
&raquo;
<span class='title'>Array</span>
</div>
</div>
<div id='content'>
<h1>
Class:
types.Array
</h1>
<table class='box'>
<tr>
<td>Defined in:</td>
<td>lib&#47;Types&#47;TextTypes.coffee</td>
</tr>
<tr>
<td>Inherits:</td>
<td>
types.ListManager
</td>
</tr>
</table>
<h2>Direct Known Subclasses</h2>
<p class='children'>
<a href='../../class/types/String.html'>types.String</a>
</p>
<h2>Variables Summary</h2>
<dl class='constants'>
<dt id='type-variable'>
type
=
</dt>
<dd>
<pre><code class='coffeescript'>&quot;Array&quot;</code></pre>
</dd>
</dl>
<h2>Instance Method Summary</h2>
<ul class='summary'>
<li>
<span class='signature'>
<a href='#applyDelete-dynamic'>
#
(void)
<b>applyDelete</b><span>()</span>
</a>
</span>
<span class='desc'>
</span>
</li>
<li>
<span class='signature'>
<a href='#cleanup-dynamic'>
#
(void)
<b>cleanup</b><span>()</span>
</a>
</span>
<span class='desc'>
</span>
</li>
<li>
<span class='signature'>
<a href='#toJson-dynamic'>
#
(void)
<b>toJson</b><span>(transform_to_value = false)</span>
</a>
</span>
<span class='desc'>
</span>
</li>
<li>
<span class='signature'>
<a href='#val-dynamic'>
#
(void)
<b>val</b><span>(pos)</span>
</a>
</span>
<span class='desc'>
</span>
</li>
<li>
<span class='signature'>
<a href='#push-dynamic'>
#
(void)
<b>push</b><span>(content)</span>
</a>
</span>
<span class='desc'>
</span>
</li>
<li>
<span class='signature'>
<a href='#insertAfter-dynamic'>
#
(void)
<b>insertAfter</b><span>(left, content, options)</span>
</a>
</span>
<span class='desc'>
</span>
</li>
<li>
<span class='signature'>
<a href='#insert-dynamic'>
#
(Array Type)
<b>insert</b><span>(position, content, options)</span>
</a>
</span>
<span class='desc'>
Inserts a string into the word.
</span>
</li>
<li>
<span class='signature'>
<a href='#delete-dynamic'>
#
(Array Type)
<b>delete</b><span>(position, length)</span>
</a>
</span>
<span class='desc'>
Deletes a part of the word.
</span>
</li>
<li>
<span class='signature'>
<a href='#_encode-dynamic'>
#
(void)
<b>_encode</b><span>()</span>
</a>
</span>
<span class='note private title'>Private</span>
<span class='desc'>
Encode this operation in such a way that it can be parsed by remote peers.
</span>
</li>
</ul>
<h2>Instance Method Details</h2>
<div class='methods'>
<div class='method_details'>
<p class='signature' id='applyDelete-dynamic'>
#
(void)
<b>applyDelete</b><span>()</span>
<br>
</p>
</div>
<div class='method_details'>
<p class='signature' id='cleanup-dynamic'>
#
(void)
<b>cleanup</b><span>()</span>
<br>
</p>
</div>
<div class='method_details'>
<p class='signature' id='toJson-dynamic'>
#
(void)
<b>toJson</b><span>(transform_to_value = false)</span>
<br>
</p>
</div>
<div class='method_details'>
<p class='signature' id='val-dynamic'>
#
(void)
<b>val</b><span>(pos)</span>
<br>
</p>
</div>
<div class='method_details'>
<p class='signature' id='push-dynamic'>
#
(void)
<b>push</b><span>(content)</span>
<br>
</p>
</div>
<div class='method_details'>
<p class='signature' id='insertAfter-dynamic'>
#
(void)
<b>insertAfter</b><span>(left, content, options)</span>
<br>
</p>
</div>
<div class='method_details'>
<p class='signature' id='insert-dynamic'>
#
(Array Type)
<b>insert</b><span>(position, content, options)</span>
<br>
</p>
<div class='docstring'>
<p>Inserts a string into the word.</p>
</div>
<div class='tags'>
<h3>Returns:</h3>
<ul class='return'>
<li>
<span class='type'></span>
(
<tt>Array Type</tt>
)
&mdash;
<span class='desc'>This String object. </span>
</li>
</ul>
</div>
</div>
<div class='method_details'>
<p class='signature' id='delete-dynamic'>
#
(Array Type)
<b>delete</b><span>(position, length)</span>
<br>
</p>
<div class='docstring'>
<p>Deletes a part of the word.</p>
</div>
<div class='tags'>
<h3>Returns:</h3>
<ul class='return'>
<li>
<span class='type'></span>
(
<tt>Array Type</tt>
)
&mdash;
<span class='desc'>This String object </span>
</li>
</ul>
</div>
</div>
<div class='method_details'>
<p class='signature' id='_encode-dynamic'>
#
(void)
<b>_encode</b><span>()</span>
<span class='note private'>Private</span>
<br>
</p>
<div class='docstring'>
<p>Encode this operation in such a way that it can be parsed by remote peers.</p>
</div>
<div class='tags'>
</div>
</div>
</div>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,389 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../../javascript/application.js'></script>
<script src='../../javascript/search.js'></script>
<link rel='stylesheet' href='../../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../../'></div>
<div id='header'>
<div id='menu'>
<a href='../../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>types</span>
&raquo;
<span class='title'>Object</span>
</div>
</div>
<div id='content'>
<h1>
Class:
types.Object
</h1>
<table class='box'>
<tr>
<td>Defined in:</td>
<td>lib&#47;Types&#47;JsonTypes.coffee</td>
</tr>
<tr>
<td>Inherits:</td>
<td>
types.MapManager
</td>
</tr>
</table>
<h2>Overview</h2>
<div class='docstring'>
<p>Manages Object-like values.</p>
</div>
<div class='tags'>
</div>
<h2>Direct Known Subclasses</h2>
<p class='children'>
<a href='../../class/Yatta.html'>Yatta</a>
</p>
<h2>Variables Summary</h2>
<dl class='constants'>
<dt id='type-variable'>
type
=
</dt>
<dd>
<pre><code class='coffeescript'>&quot;Object&quot;</code></pre>
<div class='docstring'>
<p>Identifies this class.
Use it to check whether this is a json-type or something else.</p>
<div class='examples'>
<h3>Examples:</h3>
<h4>
</h4>
<pre><code class='coffeescript'>var x = yatta.val(&#39;unknown&#39;)
if (x.type === &quot;Object&quot;) {
console.log JSON.stringify(x.toJson())
}</code></pre>
</div>
</div>
<div class='tags'>
</div>
</dd>
</dl>
<h2>Instance Method Summary</h2>
<ul class='summary'>
<li>
<span class='signature'>
<a href='#applyDelete-dynamic'>
#
(void)
<b>applyDelete</b><span>()</span>
</a>
</span>
<span class='desc'>
</span>
</li>
<li>
<span class='signature'>
<a href='#cleanup-dynamic'>
#
(void)
<b>cleanup</b><span>()</span>
</a>
</span>
<span class='desc'>
</span>
</li>
<li>
<span class='signature'>
<a href='#toJson-dynamic'>
#
(Json)
<b>toJson</b><span>(transform_to_value = false)</span>
</a>
</span>
<span class='desc'>
Transform this to a Json.
</span>
</li>
<li>
<span class='signature'>
<a href='#val-dynamic'>
~
(Json)
<b>val</b><span>()</span>
</a>
</span>
<span class='desc'>
</span>
</li>
<li>
<span class='signature'>
<a href='#_encode-dynamic'>
#
(void)
<b>_encode</b><span>()</span>
</a>
</span>
<span class='note private title'>Private</span>
<span class='desc'>
</span>
</li>
</ul>
<h2>Instance Method Details</h2>
<div class='methods'>
<div class='method_details'>
<p class='signature' id='applyDelete-dynamic'>
#
(void)
<b>applyDelete</b><span>()</span>
<br>
</p>
</div>
<div class='method_details'>
<p class='signature' id='cleanup-dynamic'>
#
(void)
<b>cleanup</b><span>()</span>
<br>
</p>
</div>
<div class='method_details'>
<p class='signature' id='toJson-dynamic'>
#
(Json)
<b>toJson</b><span>(transform_to_value = false)</span>
<br>
</p>
<div class='docstring'>
<p>Transform this to a Json. If your browser supports Object.observe it will be transformed automatically when a change arrives.
Otherwise you will loose all the sharing-abilities (the new object will be a deep clone)!</p><p>TODO: at the moment you don&#39;t consider changing of properties.
E.g.: let x = {a:[]}. Then x.a.push 1 wouldn&#39;t change anything</p>
</div>
<div class='tags'>
<h3>Returns:</h3>
<ul class='return'>
<li>
<span class='type'></span>
<tt>Json</tt>
</li>
</ul>
</div>
</div>
<div class='method_details'>
<p class='signature' id='val-dynamic'>
~
(Json)
<b>val</b><span>()</span>
<br>
~
(Object Type||String|Object)
<b>val</b><span>(name)</span>
<br>
~
(Object Type)
<b>val</b><span>(name, content)</span>
<br>
</p>
<div class='tags'>
<div class='overloads'>
<h3>Overloads:</h3>
<div class='overload'>
<p class='signature'>
~
(Json)
<b>val</b><span>()</span>
</p>
<div class='docstring'>
<p>Get this as a Json object.</p>
</div>
<div class='tags'>
<h3>Returns:</h3>
<ul class='return'>
<li>
<span class='type'></span>
<tt>Json</tt>
</li>
</ul>
</div>
</div>
<div class='overload'>
<p class='signature'>
~
(Object Type||String|Object)
<b>val</b><span>(name)</span>
</p>
<div class='docstring'>
<p>Get value of a property.</p>
</div>
<div class='tags'>
<h3>Parameters:</h3>
<ul class='param'>
<li>
<span class='name'>name</span>
<span class='type'>
(
<tt>String</tt>
)
</span>
&mdash;
<span class='desc'>Name of the object property. </span>
</li>
</ul>
<h3>Returns:</h3>
<ul class='return'>
<li>
<span class='type'></span>
(
<tt>Object Type||String|Object</tt>
)
&mdash;
<span class='desc'>Depending on the value of the property. If mutable it will return a Operation-type object, if immutable it will return String/Object. </span>
</li>
</ul>
</div>
</div>
<div class='overload'>
<p class='signature'>
~
(Object Type)
<b>val</b><span>(name, content)</span>
</p>
<div class='docstring'>
<p>Set a new property.</p>
</div>
<div class='tags'>
<h3>Parameters:</h3>
<ul class='param'>
<li>
<span class='name'>name</span>
<span class='type'>
(
<tt>String</tt>
)
</span>
&mdash;
<span class='desc'>Name of the object property. </span>
</li>
<li>
<span class='name'>content</span>
<span class='type'>
(
<tt>Object|String</tt>
)
</span>
&mdash;
<span class='desc'>Content of the object property. </span>
</li>
</ul>
<h3>Returns:</h3>
<ul class='return'>
<li>
<span class='type'></span>
(
<tt>Object Type</tt>
)
&mdash;
<span class='desc'>This object. (supports chaining) </span>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class='method_details'>
<p class='signature' id='_encode-dynamic'>
#
(void)
<b>_encode</b><span>()</span>
<span class='note private'>Private</span>
<br>
</p>
<div class='tags'>
</div>
</div>
</div>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,374 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../../javascript/application.js'></script>
<script src='../../javascript/search.js'></script>
<link rel='stylesheet' href='../../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../../'></div>
<div id='header'>
<div id='menu'>
<a href='../../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>types</span>
&raquo;
<span class='title'>String</span>
</div>
</div>
<div id='content'>
<h1>
Class:
types.String
</h1>
<table class='box'>
<tr>
<td>Defined in:</td>
<td>lib&#47;Types&#47;TextTypes.coffee</td>
</tr>
<tr>
<td>Inherits:</td>
<td>
<a href='../../class/types/Array.html'>types.Array</a>
</td>
</tr>
</table>
<h2>Overview</h2>
<div class='docstring'>
<div class='note'>
<strong>Note:</strong>
Currently, only Text is supported!
</div>
<p>Handles a String-like data structures with support for insert/delete at a word-position.</p>
</div>
<div class='tags'>
</div>
<h2>Variables Summary</h2>
<dl class='constants'>
<dt id='type-variable'>
type
=
</dt>
<dd>
<pre><code class='coffeescript'>&quot;String&quot;</code></pre>
<div class='docstring'>
<p>Identifies this class.
Use it to check whether this is a word-type or something else.</p>
<div class='examples'>
<h3>Examples:</h3>
<h4>
</h4>
<pre><code class='coffeescript'>var x = yatta.val(&#39;unknown&#39;)
if (x.type === &quot;String&quot;) {
console.log JSON.stringify(x.toJson())
}</code></pre>
</div>
</div>
<div class='tags'>
</div>
</dd>
</dl>
<h3 class='inherited'>
Variable inherited from
<a href='../../class/types/Array.html'>types.Array</a>
</h3>
<p class='inherited'>
<a href='../../class/types/Array.html#type-variable'>type</a>
</p>
<h2>Instance Method Summary</h2>
<ul class='summary'>
<li>
<span class='signature'>
<a href='#val-dynamic'>
#
(String)
<b>val</b><span>()</span>
</a>
</span>
<span class='desc'>
Get the String-representation of this word.
</span>
</li>
<li>
<span class='signature'>
<a href='#toString-dynamic'>
#
(void)
<b>toString</b><span>()</span>
</a>
</span>
<span class='desc'>
Same as String.val
</span>
</li>
<li>
<span class='signature'>
<a href='#insert-dynamic'>
#
(Array Type)
<b>insert</b><span>(position, content, options)</span>
</a>
</span>
<span class='desc'>
Inserts a string into the word.
</span>
</li>
<li>
<span class='signature'>
<a href='#bind-dynamic'>
#
(void)
<b>bind</b><span>(textfield, dom_root)</span>
</a>
</span>
<span class='desc'>
Bind this String to a textfield or input field.
</span>
</li>
<li>
<span class='signature'>
<a href='#_encode-dynamic'>
#
(void)
<b>_encode</b><span>()</span>
</a>
</span>
<span class='note private title'>Private</span>
<span class='desc'>
Encode this operation in such a way that it can be parsed by remote peers.
</span>
</li>
</ul>
<h2>
<small>Inherited Method Summary</small>
<h3 class='inherited'>
Methods inherited from
<a href='../../class/types/Array.html'>types.Array</a>
</h3>
<p class='inherited'>
<a href='../../class/types/Array.html#applyDelete-dynamic'>#applyDelete</a>
<a href='../../class/types/Array.html#cleanup-dynamic'>#cleanup</a>
<a href='../../class/types/Array.html#toJson-dynamic'>#toJson</a>
<a href='../../class/types/Array.html#val-dynamic'>#val</a>
<a href='../../class/types/Array.html#push-dynamic'>#push</a>
<a href='../../class/types/Array.html#insertAfter-dynamic'>#insertAfter</a>
<a href='../../class/types/Array.html#insert-dynamic'>#insert</a>
<a href='../../class/types/Array.html#delete-dynamic'>#delete</a>
<a href='../../class/types/Array.html#_encode-dynamic'>#_encode</a>
</p>
</h2>
<h2>Constructor Details</h2>
<div class='methods'>
<div class='method_details'>
<p class='signature' id='constructor-dynamic'>
#
(void)
<b>constructor</b><span>(uid)</span>
<span class='note private'>Private</span>
<br>
</p>
<div class='tags'>
<h3>Parameters:</h3>
<ul class='param'>
<li>
<span class='name'>uid</span>
<span class='type'>
(
<tt>Object</tt>
)
</span>
&mdash;
<span class='desc'>A unique identifier. If uid is undefined, a new uid will be created. </span>
</li>
</ul>
</div>
</div>
</div>
<h2>Instance Method Details</h2>
<div class='methods'>
<div class='method_details'>
<p class='signature' id='val-dynamic'>
#
(String)
<b>val</b><span>()</span>
<br>
</p>
<div class='docstring'>
<p>Get the String-representation of this word.</p>
</div>
<div class='tags'>
<h3>Returns:</h3>
<ul class='return'>
<li>
<span class='type'></span>
(
<tt>String</tt>
)
&mdash;
<span class='desc'>The String-representation of this object. </span>
</li>
</ul>
</div>
</div>
<div class='method_details'>
<p class='signature' id='toString-dynamic'>
#
(void)
<b>toString</b><span>()</span>
<br>
</p>
<div class='docstring'>
<p>Same as String.val</p>
</div>
<div class='tags'>
<h3>See also:</h3>
<ul class='see'>
<li>
<a href='String.val'>String.val</a>
</li>
</ul>
</div>
</div>
<div class='method_details'>
<p class='signature' id='insert-dynamic'>
#
(Array Type)
<b>insert</b><span>(position, content, options)</span>
<br>
</p>
<div class='docstring'>
<p>Inserts a string into the word.</p>
</div>
<div class='tags'>
<h3>Returns:</h3>
<ul class='return'>
<li>
<span class='type'></span>
(
<tt>Array Type</tt>
)
&mdash;
<span class='desc'>This String object. </span>
</li>
</ul>
</div>
</div>
<div class='method_details'>
<p class='signature' id='bind-dynamic'>
#
(void)
<b>bind</b><span>(textfield, dom_root)</span>
<br>
</p>
<div class='docstring'>
<p>Bind this String to a textfield or input field.</p>
<div class='examples'>
<h3>Examples:</h3>
<h4>
</h4>
<pre><code class='coffeescript'>var textbox = document.getElementById(&quot;textfield&quot;);
yatta.bind(textbox);</code></pre>
</div>
</div>
<div class='tags'>
</div>
</div>
<div class='method_details'>
<p class='signature' id='_encode-dynamic'>
#
(void)
<b>_encode</b><span>()</span>
<span class='note private'>Private</span>
<br>
</p>
<div class='docstring'>
<p>Encode this operation in such a way that it can be parsed by remote peers.</p>
</div>
<div class='tags'>
</div>
</div>
</div>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,92 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='javascript/application.js'></script>
<script src='javascript/search.js'></script>
<link rel='stylesheet' href='stylesheets/application.css' type='text/css'>
</head>
<body class='list'>
<div class='list tree' id='content'>
<h1 class='full_list_header'>Class List</h1>
<nav>
<a target='_self' href='class_list.html'>
Classes
</a>
<a target='_self' href='file_list.html'>
Files
</a>
<a target='_self' href='method_list.html'>
Methods
</a>
<a target='_self' href='extra_list.html'>
Extras
</a>
</nav>
<div id='search'>
Search:
<input type='text'>
</div>
<ul>
<li>
<span>
types
</span>
</li>
<ul>
<li>
<a href='class/types/Object.html' target='main'>
Object
</a>
<small class='parent'>
<
types.MapManager
</small>
<small class='namespace'>
types
</small>
</li>
<li>
<a href='class/types/Array.html' target='main'>
Array
</a>
<small class='parent'>
<
types.ListManager
</small>
<small class='namespace'>
types
</small>
</li>
<li>
<a href='class/types/String.html' target='main'>
String
</a>
<small class='parent'>
<
types.Array
</small>
<small class='namespace'>
types
</small>
</li>
</ul>
<li>
<a href='class/Yatta.html' target='main'>
Yatta
</a>
<small class='parent'>
<
types.Object
</small>
<small class='namespace'>
</small>
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,112 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../javascript/application.js'></script>
<script src='../javascript/search.js'></script>
<link rel='stylesheet' href='../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../'></div>
<div id='header'>
<div id='menu'>
<a href='../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>LICENSE.txt</span>
</div>
</div>
<div id='content'>
<nav class='toc'>
<p class='title'>
<a class='hide_toc' href='#'>
<strong>Table of Contents</strong>
</a>
<small>
(<a class='float_toc' href='#'>left</a>)
</small>
</p>
</nav>
<div id='filecontents'>
<p>The MIT License (MIT)<br/><br/>Copyright (c) 2014 Kevin Jahns <kevin.jahns@rwth-aachen.de>.<br/><br/>Permission is hereby granted, free of charge, to any person obtaining a copy<br/>of this software and associated documentation files (the "Software"), to deal<br/>in the Software without restriction, including without limitation the rights<br/>to use, copy, modify, merge, publish, distribute, sublicense, and/or sell<br/>copies of the Software, and to permit persons to whom the Software is<br/>furnished to do so, subject to the following conditions:<br/><br/>The above copyright notice and this permission notice shall be included in all<br/>copies or substantial portions of the Software.<br/><br/>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br/>IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br/>FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE<br/>AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br/>LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,<br/>OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE<br/>SOFTWARE.<br/></p>
</div>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,147 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../javascript/application.js'></script>
<script src='../javascript/search.js'></script>
<link rel='stylesheet' href='../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../'></div>
<div id='header'>
<div id='menu'>
<a href='../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>README.md</span>
</div>
</div>
<div id='content'>
<nav class='toc'>
<p class='title'>
<a class='hide_toc' href='#'>
<strong>Table of Contents</strong>
</a>
<small>
(<a class='float_toc' href='#'>left</a>)
</small>
</p>
</nav>
<div id='filecontents'>
<h1 id="-yatta-https-dadamonad-github-io-files-layout-yatta_logo-png-"><img src="https://dadamonad.github.io/files/layout/Yatta_logo.png" alt="Yatta!"></h1><p><a href="http://layers.dbis.rwth-aachen.de/jenkins/job/Yatta/"><img src="http://layers.dbis.rwth-aachen.de/jenkins/job/Yatta/badge/icon" alt="Build Status"></a></p><p>Yatta is a framework for optimistic concurrency control and automatic conflict resolution on arbitrary data types. The framework implements a new OT-like concurrency algorithm and provides similar functionality as <a href="https://github.com/share/ShareJS">ShareJs</a> and <a href="https://github.com/opencoweb/coweb">OpenCoweb</a>. Yatta was designed to take away the pain from concurrently editing complex data types like Text, Json, and XML. For more information you should check out the <a href="https://dadamonad.github.io/Yatta/">website</a>!</p><p>In the future, we want to enable users to implement their own collaborative types. Currently we provide data types for</p><ul>
<li>Text</li>
<li>Json</li>
<li>XML</li>
</ul><p>Unlike other frameworks, Yatta supports P2P message propagation and is not bound to a specific communication protocol. Therefore, Yatta is extremely scalable and can be used in a wide range of application scenarios.</p><p>We support several communication protocols as so called <em>Connectors</em>. You find a bunch of Connectors in the <a href="https://github.com/rwth-acis/Yatta-Connectors">Yatta-Connectors</a> repository. Currently supported communication protocols:</p><ul>
<li><a href="http://xmpp.org">XMPP-Connector</a> - Propagates updates in a XMPP multi-user-chat room</li>
<li><a href="http://peerjs.com/">WebRTC-Connector</a> - Propagate updates directly with WebRTC</li>
<li><a href="http://dbis.rwth-aachen.de/cms/projects/the-xmpp-experience#interwidget-communication">IWC-Connector</a> - Inter-widget Communication</li>
</ul><p>You can use Yatta client-, and server- side. You can get it as via npm, and bower. We even provide a polymer element for Yatta!</p><p>The theoretical advantages over similar frameworks are support for</p><ul>
<li>.. P2P message propagation and arbitrary communication protocols</li>
<li>.. arbitrary complex data types</li>
<li>.. offline editing: Only relevant changes are propagated on rejoin (unimplemented)</li>
<li>.. AnyUndo: Undo <em>any</em> action that was executed in constant time (unimplemented)</li>
<li>.. Intention Preservation: When working on Text, the intention of your changes are preserved. This is particularily important when working offline.</li>
</ul>
<h2 id="use-it-">Use it!</h2><p>You find a tutorial, examples, and documentation on the <a href="https://dadamonad.github.io/Yatta/">website</a>.</p><p>Either clone this git repository, install it with <a href="http://bower.io/">bower</a>, or install it with <a href="https://www.npmjs.org/package/yatta">npm</a>.</p><h3 id="bower">Bower</h3>
<pre><code>bower install Yatta
</code></pre><p>Then you include the libraries directly from the installation folder.</p><pre><code>&lt;script src=&quot;./bower_components/yatta/yatta.js&quot;&gt;&lt;/script&gt;
</code></pre><h3 id="npm">Npm</h3>
<pre><code>npm install yatta --save
</code></pre><p>And use it like this with <em>npm</em>:</p><pre><code>Yatta = require(&quot;yatta&quot;);
</code></pre><h2 id="status">Status</h2><p>Yatta! is still in an early development phase. Don&#39;t expect that everything is working fine.
But I would become really motivated if you gave me some feedback :) (<a href="https://github.com/DadaMonad/Yatta/issues">github</a>).</p><h3 id="current-issues">Current Issues</h3>
<ul>
<li>The History Buffer should be able to store operations in a database</li>
<li>Documentation</li>
<li>Reimplement support for XML as a data type</li>
<li>Custom data types</li>
</ul>
<h2 id="support">Support</h2><p>Please report <em>any</em> issues to the <a href="https://github.com/DadaMonad/Yatta/issues">Github issue page</a>!
I would appreciate if developers give me feedback on how <em>convenient</em> the framework is, and if it is easy to use. Particularly the XML-support may not support every DOM-methods - if you encounter a method that does not cause any change on other peers, please state function name, and sample parameters. However, there are browser-specific features, that Yatta won&#39;t support.</p><h2 id="license">License</h2><p>Yatta! is licensed under the <a href="./LICENSE.txt">MIT License</a>.</p><a href="&#x6d;&#x61;&#105;&#108;&#x74;&#111;&#x3a;&#x6b;&#x65;&#118;&#x69;&#x6e;&#x2e;&#106;&#x61;&#104;&#x6e;&#115;&#64;&#x72;&#x77;&#116;&#x68;&#x2d;&#x61;&#97;&#99;&#104;&#101;&#x6e;&#46;&#x64;&#101;">&#x6b;&#x65;&#118;&#x69;&#x6e;&#x2e;&#106;&#x61;&#104;&#x6e;&#115;&#64;&#x72;&#x77;&#116;&#x68;&#x2d;&#x61;&#97;&#99;&#104;&#101;&#x6e;&#46;&#x64;&#101;</a>
</div>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,46 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='javascript/application.js'></script>
<script src='javascript/search.js'></script>
<link rel='stylesheet' href='stylesheets/application.css' type='text/css'>
</head>
<body class='list'>
<div class='list tree' id='content'>
<h1 class='full_list_header'>File List</h1>
<nav>
<a target='_self' href='class_list.html'>
Classes
</a>
<a target='_self' href='file_list.html'>
Files
</a>
<a target='_self' href='method_list.html'>
Methods
</a>
<a target='_self' href='extra_list.html'>
Extras
</a>
</nav>
<div id='search'>
Search:
<input type='text'>
</div>
<ul>
<li>
<a href='extra/README.md.html' target='main'>
README.md
</a>
</li>
<li>
<a href='extra/LICENSE.txt.html' target='main'>
LICENSE.txt
</a>
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,180 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../../javascript/application.js'></script>
<script src='../../javascript/search.js'></script>
<link rel='stylesheet' href='../../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../../'></div>
<div id='header'>
<div id='menu'>
<a href='../../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>lib</span>
&raquo;
<span class='title'>ConnectorAdapter.coffee</span>
</div>
</div>
<div id='content'>
<h1>
File:
ConnectorAdapter.coffee
</h1>
<table class='box'>
<tr>
<td>Defined in:</td>
<td>lib</td>
</tr>
</table>
<h2>Variables Summary</h2>
<dl class='constants'>
<dt id='module.exports-variable'>
module.exports
=
</dt>
<dd>
<pre><code class='coffeescript'>adaptConnector</code></pre>
</dd>
</dl>
<h2>Method Summary</h2>
<ul class='summary'>
<li>
<span class='signature'>
<a href='#adaptConnector-'>
~
(void)
<b>adaptConnector</b><span>(connector, engine, HB, execution_listener)</span>
</a>
</span>
<span class='desc'>
</span>
</li>
</ul>
<h2>Method Details</h2>
<div class='methods'>
<div class='method_details'>
<p class='signature' id='adaptConnector-'>
~
(void)
<b>adaptConnector</b><span>(connector, engine, HB, execution_listener)</span>
<br>
</p>
<div class='tags'>
<h3>Parameters:</h3>
<ul class='param'>
<li>
<span class='name'>engine</span>
<span class='type'>
(
<tt>Engine</tt>
)
</span>
&mdash;
<span class='desc'>The transformation engine </span>
</li>
<li>
<span class='name'>HB</span>
<span class='type'>
(
<tt>HistoryBuffer</tt>
)
</span>
</li>
<li>
<span class='name'>execution_listener</span>
<span class='type'>
(
<tt>Array&lt;Function&gt;</tt>
)
</span>
&mdash;
<span class='desc'>You must ensure that whenever an operation is executed, every function in this Array is called. </span>
</li>
</ul>
</div>
</div>
</div>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,146 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../../javascript/application.js'></script>
<script src='../../javascript/search.js'></script>
<link rel='stylesheet' href='../../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../../'></div>
<div id='header'>
<div id='menu'>
<a href='../../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>lib</span>
&raquo;
<span class='title'>Engine.coffee</span>
</div>
</div>
<div id='content'>
<h1>
File:
Engine.coffee
</h1>
<table class='box'>
<tr>
<td>Defined in:</td>
<td>lib</td>
</tr>
</table>
<h2>Variables Summary</h2>
<dl class='constants'>
<dt id='window.unprocessed_counter-variable'>
window.unprocessed_counter
=
</dt>
<dd>
<pre><code class='coffeescript'>0</code></pre>
</dd>
<dt id='window.unprocessed_exec_counter-variable'>
window.unprocessed_exec_counter
=
</dt>
<dd>
<pre><code class='coffeescript'>0</code></pre>
</dd>
<dt id='window.unprocessed_types-variable'>
window.unprocessed_types
=
</dt>
<dd>
<pre><code class='coffeescript'>[]</code></pre>
</dd>
<dt id='module.exports-variable'>
module.exports
=
</dt>
<dd>
<pre><code class='coffeescript'>Engine</code></pre>
</dd>
</dl>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,122 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../../javascript/application.js'></script>
<script src='../../javascript/search.js'></script>
<link rel='stylesheet' href='../../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../../'></div>
<div id='header'>
<div id='menu'>
<a href='../../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>lib</span>
&raquo;
<span class='title'>HistoryBuffer.coffee</span>
</div>
</div>
<div id='content'>
<h1>
File:
HistoryBuffer.coffee
</h1>
<table class='box'>
<tr>
<td>Defined in:</td>
<td>lib</td>
</tr>
</table>
<h2>Variables Summary</h2>
<dl class='constants'>
<dt id='module.exports-variable'>
module.exports
=
</dt>
<dd>
<pre><code class='coffeescript'>HistoryBuffer</code></pre>
</dd>
</dl>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,113 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../../../javascript/application.js'></script>
<script src='../../../javascript/search.js'></script>
<link rel='stylesheet' href='../../../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../../../'></div>
<div id='header'>
<div id='menu'>
<a href='../../../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../../../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>lib</span>
&raquo;
<span class='title'>Types</span>
&raquo;
<span class='title'>BasicTypes.coffee</span>
</div>
</div>
<div id='content'>
<h1>
File:
BasicTypes.coffee
</h1>
<table class='box'>
<tr>
<td>Defined in:</td>
<td>lib&#47;Types</td>
</tr>
</table>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,113 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../../../javascript/application.js'></script>
<script src='../../../javascript/search.js'></script>
<link rel='stylesheet' href='../../../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../../../'></div>
<div id='header'>
<div id='menu'>
<a href='../../../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../../../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>lib</span>
&raquo;
<span class='title'>Types</span>
&raquo;
<span class='title'>JsonTypes.coffee</span>
</div>
</div>
<div id='content'>
<h1>
File:
JsonTypes.coffee
</h1>
<table class='box'>
<tr>
<td>Defined in:</td>
<td>lib&#47;Types</td>
</tr>
</table>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,113 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../../../javascript/application.js'></script>
<script src='../../../javascript/search.js'></script>
<link rel='stylesheet' href='../../../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../../../'></div>
<div id='header'>
<div id='menu'>
<a href='../../../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../../../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>lib</span>
&raquo;
<span class='title'>Types</span>
&raquo;
<span class='title'>StructuredTypes.coffee</span>
</div>
</div>
<div id='content'>
<h1>
File:
StructuredTypes.coffee
</h1>
<table class='box'>
<tr>
<td>Defined in:</td>
<td>lib&#47;Types</td>
</tr>
</table>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,113 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../../../javascript/application.js'></script>
<script src='../../../javascript/search.js'></script>
<link rel='stylesheet' href='../../../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../../../'></div>
<div id='header'>
<div id='menu'>
<a href='../../../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../../../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>lib</span>
&raquo;
<span class='title'>Types</span>
&raquo;
<span class='title'>TextTypes.coffee</span>
</div>
</div>
<div id='content'>
<h1>
File:
TextTypes.coffee
</h1>
<table class='box'>
<tr>
<td>Defined in:</td>
<td>lib&#47;Types</td>
</tr>
</table>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,137 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../../javascript/application.js'></script>
<script src='../../javascript/search.js'></script>
<link rel='stylesheet' href='../../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../../'></div>
<div id='header'>
<div id='menu'>
<a href='../../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>lib</span>
&raquo;
<span class='title'>yatta-element.coffee</span>
</div>
</div>
<div id='content'>
<h1>
File:
yatta-element.coffee
</h1>
<table class='box'>
<tr>
<td>Defined in:</td>
<td>lib</td>
</tr>
</table>
<h2>Method Summary</h2>
<ul class='summary'>
<li>
<span class='signature'>
<a href='#bindToChildren-'>
~
(void)
<b>bindToChildren</b><span>(that)</span>
</a>
</span>
<span class='desc'>
</span>
</li>
</ul>
<h2>Method Details</h2>
<div class='methods'>
<div class='method_details'>
<p class='signature' id='bindToChildren-'>
~
(void)
<b>bindToChildren</b><span>(that)</span>
<br>
</p>
</div>
</div>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,148 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='../../javascript/application.js'></script>
<script src='../../javascript/search.js'></script>
<link rel='stylesheet' href='../../stylesheets/application.css' type='text/css'>
</head>
<body>
<div id='base' data-path='../../'></div>
<div id='header'>
<div id='menu'>
<a href='../../extra/README.md.html' title='Yatta!'>
Yatta!
</a>
&raquo;
<a href='../../alphabetical_index.html' title='Index'>
Index
</a>
&raquo;
<span class='title'>lib</span>
&raquo;
<span class='title'>yatta.coffee</span>
</div>
</div>
<div id='content'>
<h1>
File:
yatta.coffee
</h1>
<table class='box'>
<tr>
<td>Defined in:</td>
<td>lib</td>
</tr>
</table>
<h2>Variables Summary</h2>
<dl class='constants'>
<dt id='module.exports-variable'>
module.exports
=
</dt>
<dd>
<pre><code class='coffeescript'>createYatta</code></pre>
</dd>
</dl>
<h2>Method Summary</h2>
<ul class='summary'>
<li>
<span class='signature'>
<a href='#createYatta-'>
~
(void)
<b>createYatta</b><span>(connector)</span>
</a>
</span>
<span class='desc'>
</span>
</li>
</ul>
<h2>Method Details</h2>
<div class='methods'>
<div class='method_details'>
<p class='signature' id='createYatta-'>
~
(void)
<b>createYatta</b><span>(connector)</span>
<br>
</p>
</div>
</div>
</div>
<div id='footer'>
January 23, 15 16:14:11 by
<a href='https://github.com/coffeedoc/codo' title='CoffeeScript API documentation generator'>
Codo
</a>
2.0.9
&#10034;
Press H to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/netzpirat' target='_parent'>@netzpirat</a>
&#10034;
<a href='http://twitter.com/_inossidabile' target='_parent'>@_inossidabile</a>
</div>
<iframe id='search_frame'></iframe>
<div id='fuzzySearch'>
<input type='text'>
<ol></ol>
</div>
<div id='help'>
<p>
Quickly fuzzy find classes, mixins, methods, file:
</p>
<ul>
<li>
<span>T</span>
Open fuzzy finder dialog
</li>
</ul>
<p>
Control the navigation frame:
</p>
<ul>
<li>
<span>L</span>
Toggle list view
</li>
<li>
<span>C</span>
Show class list
</li>
<li>
<span>I</span>
Show mixin list
</li>
<li>
<span>F</span>
Show file list
</li>
<li>
<span>M</span>
Show method list
</li>
<li>
<span>E</span>
Show extras list
</li>
</ul>
<p>
You can focus and blur the search input:
</p>
<ul>
<li>
<span>S</span>
Focus search input
</li>
<li>
<span>Esc</span>
Blur search input
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,124 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='javascript/application.js'></script>
<script src='javascript/search.js'></script>
<link rel='stylesheet' href='stylesheets/application.css' type='text/css'>
</head>
<body class='list'>
<div class='list tree' id='content'>
<h1 class='full_list_header'>File List</h1>
<nav>
<a target='_self' href='class_list.html'>
Classes
</a>
<a target='_self' href='file_list.html'>
Files
</a>
<a target='_self' href='method_list.html'>
Methods
</a>
<a target='_self' href='extra_list.html'>
Extras
</a>
</nav>
<div id='search'>
Search:
<input type='text'>
</div>
<ul>
<li>
<span>
lib
</span>
</li>
<ul>
<li>
<a href='file/lib/ConnectorAdapter.coffee.html' target='main'>
ConnectorAdapter.coffee
</a>
<small class='namespace'>
lib
</small>
</li>
<li>
<a href='file/lib/Engine.coffee.html' target='main'>
Engine.coffee
</a>
<small class='namespace'>
lib
</small>
</li>
<li>
<a href='file/lib/HistoryBuffer.coffee.html' target='main'>
HistoryBuffer.coffee
</a>
<small class='namespace'>
lib
</small>
</li>
<li>
<span>
Types
</span>
</li>
<ul>
<li>
<a href='file/lib/Types/BasicTypes.coffee.html' target='main'>
BasicTypes.coffee
</a>
<small class='namespace'>
lib&#47;Types
</small>
</li>
<li>
<a href='file/lib/Types/JsonTypes.coffee.html' target='main'>
JsonTypes.coffee
</a>
<small class='namespace'>
lib&#47;Types
</small>
</li>
<li>
<a href='file/lib/Types/StructuredTypes.coffee.html' target='main'>
StructuredTypes.coffee
</a>
<small class='namespace'>
lib&#47;Types
</small>
</li>
<li>
<a href='file/lib/Types/TextTypes.coffee.html' target='main'>
TextTypes.coffee
</a>
<small class='namespace'>
lib&#47;Types
</small>
</li>
</ul>
<li>
<a href='file/lib/yatta-element.coffee.html' target='main'>
yatta-element.coffee
</a>
<small class='namespace'>
lib
</small>
</li>
<li>
<a href='file/lib/yatta.coffee.html' target='main'>
yatta.coffee
</a>
<small class='namespace'>
lib
</small>
</li>
</ul>
</ul>
</div>
</body>
</html>

View File

@ -1,14 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='javascript/application.js'></script>
<script src='javascript/search.js'></script>
<link rel='stylesheet' href='stylesheets/application.css' type='text/css'>
</head>
<frameset cols='25%, *'>
<frame name='list' src='class_list.html'></frame>
<frame name='main' src='extra/README.md.html'></frame>
</frameset>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@
window.searchData = [{"t":"types.Object","p":"class/types/Object.html"},{"t":"types.Array","p":"class/types/Array.html"},{"t":"types.String","p":"class/types/String.html"},{"t":"Yatta","p":"class/Yatta.html"},{"t":"lib/ConnectorAdapter.coffee","p":"file/lib/ConnectorAdapter.coffee.html"},{"t":"lib/Engine.coffee","p":"file/lib/Engine.coffee.html"},{"t":"lib/HistoryBuffer.coffee","p":"file/lib/HistoryBuffer.coffee.html"},{"t":"lib/Types/BasicTypes.coffee","p":"file/lib/Types/BasicTypes.coffee.html"},{"t":"lib/Types/JsonTypes.coffee","p":"file/lib/Types/JsonTypes.coffee.html"},{"t":"lib/Types/StructuredTypes.coffee","p":"file/lib/Types/StructuredTypes.coffee.html"},{"t":"lib/Types/TextTypes.coffee","p":"file/lib/Types/TextTypes.coffee.html"},{"t":"lib/yatta-element.coffee","p":"file/lib/yatta-element.coffee.html"},{"t":"lib/yatta.coffee","p":"file/lib/yatta.coffee.html"},{"t":"README.md","p":"extra/README.md.html"},{"t":"LICENSE.txt","p":"extra/LICENSE.txt.html"},{"t":"types.Array#_encode","p":"class/types/Array.html#_encode-dynamic"},{"t":"types.Object#_encode","p":"class/types/Object.html#_encode-dynamic"},{"t":"types.String#_encode","p":"class/types/String.html#_encode-dynamic"},{"t":"lib/ConnectorAdapter.coffee~adaptConnector","p":"file/lib/ConnectorAdapter.coffee.html#adaptConnector-"},{"t":"types.Object#applyDelete","p":"class/types/Object.html#applyDelete-dynamic"},{"t":"types.Array#applyDelete","p":"class/types/Array.html#applyDelete-dynamic"},{"t":"types.String#bind","p":"class/types/String.html#bind-dynamic"},{"t":"lib/yatta-element.coffee~bindToChildren","p":"file/lib/yatta-element.coffee.html#bindToChildren-"},{"t":"types.Array#cleanup","p":"class/types/Array.html#cleanup-dynamic"},{"t":"types.Object#cleanup","p":"class/types/Object.html#cleanup-dynamic"},{"t":"Yatta#constructor","p":"class/Yatta.html#constructor-dynamic"},{"t":"types.String#constructor","p":"class/types/String.html#constructor-dynamic"},{"t":"lib/yatta.coffee~createYatta","p":"file/lib/yatta.coffee.html#createYatta-"},{"t":"types.Array#delete","p":"class/types/Array.html#delete-dynamic"},{"t":"Yatta#getConnector","p":"class/Yatta.html#getConnector-dynamic"},{"t":"types.Array#insert","p":"class/types/Array.html#insert-dynamic"},{"t":"types.String#insert","p":"class/types/String.html#insert-dynamic"},{"t":"types.Array#insertAfter","p":"class/types/Array.html#insertAfter-dynamic"},{"t":"types.Array#push","p":"class/types/Array.html#push-dynamic"},{"t":"types.Array#toJson","p":"class/types/Array.html#toJson-dynamic"},{"t":"types.Object#toJson","p":"class/types/Object.html#toJson-dynamic"},{"t":"types.String#toString","p":"class/types/String.html#toString-dynamic"},{"t":"types.Array#val","p":"class/types/Array.html#val-dynamic"},{"t":"types.String#val","p":"class/types/String.html#val-dynamic"},{"t":"types.Object#val","p":"class/types/Object.html#val-dynamic"}]

View File

@ -1,235 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='javascript/application.js'></script>
<script src='javascript/search.js'></script>
<link rel='stylesheet' href='stylesheets/application.css' type='text/css'>
</head>
<body class='list'>
<div class='list' id='content'>
<h1 class='full_list_header'>Method List</h1>
<nav>
<a target='_self' href='class_list.html'>
Classes
</a>
<a target='_self' href='file_list.html'>
Files
</a>
<a target='_self' href='method_list.html'>
Methods
</a>
<a target='_self' href='extra_list.html'>
Extras
</a>
</nav>
<div id='search'>
Search:
<input type='text'>
</div>
<ul>
<li>
<a href='class/types/Array.html#_encode-dynamic' target='main' title='_encode'>
#_encode
</a>
<small>
(types.Array)
</small>
</li>
<li>
<a href='class/types/Object.html#_encode-dynamic' target='main' title='_encode'>
#_encode
</a>
<small>
(types.Object)
</small>
</li>
<li>
<a href='class/types/String.html#_encode-dynamic' target='main' title='_encode'>
#_encode
</a>
<small>
(types.String)
</small>
</li>
<li>
<a href='file/lib/ConnectorAdapter.coffee.html#adaptConnector-' target='main' title='adaptConnector'>
~adaptConnector
</a>
<small>
(lib&#47;ConnectorAdapter.coffee)
</small>
</li>
<li>
<a href='class/types/Object.html#applyDelete-dynamic' target='main' title='applyDelete'>
#applyDelete
</a>
<small>
(types.Object)
</small>
</li>
<li>
<a href='class/types/Array.html#applyDelete-dynamic' target='main' title='applyDelete'>
#applyDelete
</a>
<small>
(types.Array)
</small>
</li>
<li>
<a href='class/types/String.html#bind-dynamic' target='main' title='bind'>
#bind
</a>
<small>
(types.String)
</small>
</li>
<li>
<a href='file/lib/yatta-element.coffee.html#bindToChildren-' target='main' title='bindToChildren'>
~bindToChildren
</a>
<small>
(lib&#47;yatta-element.coffee)
</small>
</li>
<li>
<a href='class/types/Array.html#cleanup-dynamic' target='main' title='cleanup'>
#cleanup
</a>
<small>
(types.Array)
</small>
</li>
<li>
<a href='class/types/Object.html#cleanup-dynamic' target='main' title='cleanup'>
#cleanup
</a>
<small>
(types.Object)
</small>
</li>
<li>
<a href='class/Yatta.html#constructor-dynamic' target='main' title='constructor'>
#constructor
</a>
<small>
(Yatta)
</small>
</li>
<li>
<a href='class/types/String.html#constructor-dynamic' target='main' title='constructor'>
#constructor
</a>
<small>
(types.String)
</small>
</li>
<li>
<a href='file/lib/yatta.coffee.html#createYatta-' target='main' title='createYatta'>
~createYatta
</a>
<small>
(lib&#47;yatta.coffee)
</small>
</li>
<li>
<a href='class/types/Array.html#delete-dynamic' target='main' title='delete'>
#delete
</a>
<small>
(types.Array)
</small>
</li>
<li>
<a href='class/Yatta.html#getConnector-dynamic' target='main' title='getConnector'>
#getConnector
</a>
<small>
(Yatta)
</small>
</li>
<li>
<a href='class/types/Array.html#insert-dynamic' target='main' title='insert'>
#insert
</a>
<small>
(types.Array)
</small>
</li>
<li>
<a href='class/types/String.html#insert-dynamic' target='main' title='insert'>
#insert
</a>
<small>
(types.String)
</small>
</li>
<li>
<a href='class/types/Array.html#insertAfter-dynamic' target='main' title='insertAfter'>
#insertAfter
</a>
<small>
(types.Array)
</small>
</li>
<li>
<a href='class/types/Array.html#push-dynamic' target='main' title='push'>
#push
</a>
<small>
(types.Array)
</small>
</li>
<li>
<a href='class/types/Array.html#toJson-dynamic' target='main' title='toJson'>
#toJson
</a>
<small>
(types.Array)
</small>
</li>
<li>
<a href='class/types/Object.html#toJson-dynamic' target='main' title='toJson'>
#toJson
</a>
<small>
(types.Object)
</small>
</li>
<li>
<a href='class/types/String.html#toString-dynamic' target='main' title='toString'>
#toString
</a>
<small>
(types.String)
</small>
</li>
<li>
<a href='class/types/Array.html#val-dynamic' target='main' title='val'>
#val
</a>
<small>
(types.Array)
</small>
</li>
<li>
<a href='class/types/String.html#val-dynamic' target='main' title='val'>
#val
</a>
<small>
(types.String)
</small>
</li>
<li>
<a href='class/types/Object.html#val-dynamic' target='main' title='val'>
#val
</a>
<small>
(types.Object)
</small>
</li>
</ul>
</div>
</body>
</html>

View File

@ -1,36 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Yatta! API</title>
<script src='javascript/application.js'></script>
<script src='javascript/search.js'></script>
<link rel='stylesheet' href='stylesheets/application.css' type='text/css'>
</head>
<body class='list'>
<div class='list tree' id='content'>
<h1 class='full_list_header'>Mixin List</h1>
<nav>
<a target='_self' href='class_list.html'>
Classes
</a>
<a target='_self' href='file_list.html'>
Files
</a>
<a target='_self' href='method_list.html'>
Methods
</a>
<a target='_self' href='extra_list.html'>
Extras
</a>
</nav>
<div id='search'>
Search:
<input type='text'>
</div>
<ul>
</ul>
</div>
</body>
</html>

View File

@ -1,745 +0,0 @@
pre code{display:block;padding:.5em;background:#f0f0f0}pre code,pre .subst,pre .tag .title,pre .lisp .title,pre .clojure .built_in,pre .nginx .title{color:black}pre .string,pre .title,pre .constant,pre .parent,pre .tag .value,pre .rules .value,pre .rules .value .number,pre .preprocessor,pre .haml .symbol,pre .ruby .symbol,pre .ruby .symbol .string,pre .aggregate,pre .template_tag,pre .django .variable,pre .smalltalk .class,pre .addition,pre .flow,pre .stream,pre .bash .variable,pre .apache .tag,pre .apache .cbracket,pre .tex .command,pre .tex .special,pre .erlang_repl .function_or_atom,pre .asciidoc .header,pre .markdown .header,pre .coffeescript .attribute{color:#800}pre .comment,pre .annotation,pre .template_comment,pre .diff .header,pre .chunk,pre .asciidoc .blockquote,pre .markdown .blockquote{color:#888}pre .number,pre .date,pre .regexp,pre .literal,pre .hexcolor,pre .smalltalk .symbol,pre .smalltalk .char,pre .go .constant,pre .change,pre .lasso .variable,pre .asciidoc .bullet,pre .markdown .bullet,pre .asciidoc .link_url,pre .markdown .link_url{color:#080}pre .label,pre .javadoc,pre .ruby .string,pre .decorator,pre .filter .argument,pre .localvars,pre .array,pre .attr_selector,pre .important,pre .pseudo,pre .pi,pre .haml .bullet,pre .doctype,pre .deletion,pre .envvar,pre .shebang,pre .apache .sqbracket,pre .nginx .built_in,pre .tex .formula,pre .erlang_repl .reserved,pre .prompt,pre .asciidoc .link_label,pre .markdown .link_label,pre .vhdl .attribute,pre .clojure .attribute,pre .asciidoc .attribute,pre .lasso .attribute,pre .coffeescript .property{color:#88F}pre .keyword,pre .id,pre .title,pre .built_in,pre .aggregate,pre .css .tag,pre .javadoctag,pre .phpdoc,pre .yardoctag,pre .smalltalk .class,pre .winutils,pre .bash .variable,pre .apache .tag,pre .go .typename,pre .tex .command,pre .asciidoc .strong,pre .markdown .strong,pre .request,pre .status{font-weight:bold}pre .asciidoc .emphasis,pre .markdown .emphasis{font-style:italic}pre .nginx .built_in{font-weight:normal}pre .coffeescript .javascript,pre .javascript .xml,pre .lasso .markup,pre .tex .formula,pre .xml .javascript,pre .xml .vbscript,pre .xml .css,pre .xml .cdata{opacity:.5}
body {
padding: 0 5px;
font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
font-size: 13px;
}
h1 {
font-size: 25px;
margin: 0.8em 0 0.5em;
padding-top: 4px;
border-top: 1px dotted #d5d5d5;
}
h2 {
padding: 0;
padding-bottom: 3px;
border-bottom: 1px #aaa solid;
font-size: 1.4em;
margin: 1.8em 0 0.5em;
}
#base {
display: none;
}
#fuzzySearch {
-webkit-box-shadow: rgba(0,0,0,0.5) 0px 10px 30px 10px;
box-shadow: rgba(0,0,0,0.5) 0px 10px 30px 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
position: fixed;
z-index: 8000;
left: 0;
right: 0;
top: 25px;
width: 80%;
height: 45px;
margin: 0 auto;
display: none;
background-color: #fff;
padding-top: 25px;
padding-bottom: 25px;
}
#fuzzySearch input {
margin-left: 10%;
-webkit-border-radius: 5px;
border-radius: 5px;
width: 80%;
border: 2px solid #05a;
font-size: 20px;
padding: 5px;
}
#fuzzySearch ol {
list-style-type: none;
margin: 10px 0 0 0;
padding: 0;
}
#fuzzySearch ol li {
padding: 3px;
}
#fuzzySearch ol li.stripe {
background: #f0f0f0;
}
#fuzzySearch ol li.selected {
background: #05a;
}
#fuzzySearch ol li.selected a {
color: #fff;
}
#fuzzySearch ol li.selected a:visited {
color: #fff;
}
#fuzzySearch ol li.selected a:hover {
color: #05a;
}
#fuzzySearch ol li.selected a span {
color: #05a;
}
#fuzzySearch ol li a {
color: #05a;
font-size: 18px;
text-decoration: none;
}
#fuzzySearch ol li a:visited {
color: #05a;
}
#fuzzySearch ol li a:hover {
background: #ffffa5;
}
#fuzzySearch ol li a span {
background-color: #ff0;
}
#fuzzySearch ol li small {
font-size: 14px;
padding-left: 10px;
color: #888;
}
#help {
-webkit-box-shadow: rgba(0,0,0,0.5) 0px 10px 30px 10px;
box-shadow: rgba(0,0,0,0.5) 0px 10px 30px 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
position: fixed;
z-index: 8000;
left: 0;
right: 0;
top: 50%;
width: 500px;
height: 460px;
margin: 0 auto;
margin-top: -265px;
display: none;
padding: 25px;
background-color: #fff;
}
#help ul {
list-style-type: none;
margin: 0;
padding: 0;
}
#help ul li {
height: 35px;
font-weight: bold;
}
#help ul li span {
-webkit-box-shadow: rgba(0,0,0,0.5) 1px 1px 2px;
box-shadow: rgba(0,0,0,0.5) 1px 1px 2px;
-webkit-border-radius: 3px;
border-radius: 3px;
display: block;
float: left;
width: 50px;
padding: 5px;
margin-right: 20px;
background: #eee;
text-align: center;
}
#content a:link,
#content a:visited {
text-decoration: none;
color: #05a;
}
#content a:hover {
background: #ffffa5;
}
#content #filecontents img {
border: 0;
}
#content #filecontents li {
line-height: 25px;
}
#content #filecontents table {
padding: 0;
border-collapse: collapse;
border-spacing: 0;
}
#content #filecontents table tr {
border-top: 1px solid #ccc;
background-color: #fff;
margin: 0;
padding: 0;
}
#content #filecontents table tr td {
border: 1px solid #ccc;
text-align: left;
margin: 0;
padding: 6px 13px;
}
#content table.box {
font-size: 1em;
line-height: 2;
border-spacing: 0;
border-collapse: collapse;
}
#content table.box tr {
background-color: #fff;
}
#content table.box tr:first-child {
background-color: #eee;
}
#content table.box tr td {
border: 1px solid #aaa;
}
#content table.box tr td:first-child {
width: 100px;
padding-right: 10px;
text-align: right;
font-weight: bold;
}
#content table.box tr td:last-child {
min-width: 420px;
padding-left: 10px;
padding-right: 10px;
}
#content h1 .note,
#content li .note,
#content .properties .note,
#content .method_details .signature .note {
font-weight: normal;
padding: 3px 5px;
position: relative;
top: -3px;
text-transform: capitalize;
display: inline;
}
#content .method_details .signature .note {
font-size: 0.6em;
top: -1px;
}
#content h1 .note {
font-size: 0.5em;
}
#content li .note {
top: 0px;
font-size: 0.9em;
}
#content .properties .note {
top: 0px;
font-size: 0.85em;
}
#content ul.summary,
#content .properties {
list-style: none;
font-family: monospace;
font-size: 1em;
line-height: 1.5em;
}
#content ul.summary li,
#content .properties li {
margin-bottom: 5px;
}
#content ul.summary .signature,
#content .properties .signature {
-webkit-border-radius: 3px;
border-radius: 3px;
padding: 1px 10px;
color: #05a;
background: #eaeaff;
border: 1px solid #dfdfe5;
}
#content ul.summary .signature a:hover,
#content .properties .signature a:hover {
background: transparent;
}
#content ul.summary li[deprecated] .signature,
#content .properties li[deprecated] .signature {
text-decoration: line-through;
}
#content ul.summary .signature + .note.title,
#content .properties .signature + .note.title {
margin-left: 7px;
}
#content ul.summary .desc,
#content .properties .desc {
margin-left: 32px;
display: block;
font-family: sans-serif;
}
#content ul.summary .desc p,
#content .properties .desc p {
padding: 0;
margin: 0;
}
#content dl.constants dt {
font-weight: bold;
}
#content dl.constants,
#content dl.properties {
margin-left: 40px;
}
#content dl.constants dt,
#content dl.properties dt {
font-size: 1.1em;
margin-bottom: 5px;
}
#content dl.constants dt .docstring,
#content dl.properties dt .docstring {
margin-left: 32px;
font-size: 0.9em;
font-weight: normal;
}
#content dl.constants dd,
#content dl.properties dd {
margin-bottom: 18px;
}
#content .method_details {
border-top: 1px dotted #aaa;
margin-top: 15px;
padding-top: 0;
}
#content .method_details:first-child {
border: none;
}
#content .method_details p.signature {
-webkit-border-radius: 3px;
border-radius: 3px;
font-size: 1.1em;
font-weight: normal;
font-family: Monaco, Consolas, Courier, monospace;
padding: 6px 10px;
margin-top: 18px;
background: #e5e8ff;
border: 1px solid #d8d8e5;
}
#content .tags {
font-size: 13px;
}
#content .tags h3 {
font-size: 1em;
margin-bottom: 3px;
}
#content .tags ul {
margin-top: 0px;
padding-left: 30px;
list-style: square;
}
#content .tags ul .name {
font-family: monospace;
font-weight: bold;
}
#content .tags .overloads h3 {
margin-bottom: 0px;
}
#content .tags .overloads .overload {
margin-left: 20px;
}
#content .tags .overloads .overload p.signature {
padding-top: 2px;
padding-bottom: 2px;
}
#content .tags .events h3 {
margin-bottom: 0px;
}
#content .tags .events .event {
margin-left: 20px;
}
#content .tags .events .event p.signature {
padding-top: 2px;
padding-bottom: 2px;
}
#content .note {
-webkit-border-radius: 3px;
border-radius: 3px;
margin-top: 10px;
color: #222;
background: #e3e4e3;
border: 1px solid #d5d5d5;
padding: 7px 10px;
display: block;
}
#content .deprecated {
background: #ffe5e5;
border-color: #e9dada;
}
#content .writeonly {
background: #d3ff97;
border-color: #c3eb8b;
}
#content .readonly {
background: #ffe5e5;
border-color: #e9dada;
}
#content .bound {
background: #d3ff97;
border-color: #c3eb8b;
}
#content .todo {
background: #ffffc5;
border-color: #ececaa;
}
#content .private {
background: #d5d5d5;
border-color: #c5c5c5;
}
#content .constructor {
color: #fff;
background: #6a98d6;
border-color: #6689d6;
}
#content h3.inherited,
#content h3.included,
#content h3.extended {
font-style: italic;
font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
font-weight: normal;
padding: 0;
margin: 0;
margin-top: 12px;
margin-bottom: 3px;
font-size: 13px;
}
#content p.inherited,
#content p.included,
#content p.extended {
word-spacing: 5px;
font-size: 1.2em;
padding: 0;
margin: 0;
margin-left: 25px;
}
#content p.inherited a,
#content p.included a,
#content p.extended a {
font-family: monospace;
font-size: 0.9em;
}
#footer {
margin-top: 15px;
border-top: 1px solid #ccc;
text-align: center;
padding: 7px 0;
font-size: 12px;
color: #999;
}
#footer a:link,
#footer a:visited {
color: #999;
text-decoration: none;
border-bottom: 1px dotted #bbd;
}
#footer a:hover {
color: #05a;
}
#menu {
font-size: 1.3em;
color: #bbb;
top: -5px;
position: relative;
}
#menu .title,
#menu a {
font-size: 0.7em;
}
#menu .title a {
font-size: 1em;
}
#menu .title {
color: #555;
}
#menu a:link,
#menu a:visited {
color: #333;
text-decoration: none;
border-bottom: 1px dotted #bbd;
}
#menu a:hover {
color: #05a;
}
#header nav {
float: right;
color: #000;
font-size: 0.7em;
}
#header nav ul {
list-style-type: none;
margin: 4px !important;
}
#header nav ul,
#header nav ul li {
margin: 0px;
padding: 0px;
display: inline;
}
#header nav a {
font-size: 1em;
}
#header #search {
float: right;
margin-top: -3px;
}
#header #search a:link,
#header #search a:visited {
-webkit-box-shadow: #ddd -1px 1px 3px;
box-shadow: #ddd -1px 1px 3px;
border-bottom-left-radius: 3px;
border-bottom-right-radius: 3px;
display: block;
float: left;
margin-right: 4px;
padding: 8px 10px;
color: #05a;
background: #eaf0ff;
text-decoration: none;
border: 1px solid #d8d8e5;
}
#header #search a:hover {
background: #f5faff;
color: #06b;
}
#header #search a.active {
border-top-left-radius: 5px;
border-top-right-radius: 5px;
padding-bottom: 20px;
color: #fff;
background: #568;
border: 1px solid #457;
}
#header #search a.inactive {
color: #999;
}
#search_frame {
-webkit-box-shadow: #aaa -7px 5px 25px;
box-shadow: #aaa -7px 5px 25px;
display: none;
position: absolute;
overflow-y: scroll;
z-index: 9999;
top: 36px;
right: 18px;
width: 500px;
height: 80%;
background: #fff;
border: 1px solid #999;
border-collapse: collapse;
}
.alphaindex {
margin-top: 0;
font-size: 22px;
}
.noborder {
border-top: 0px;
margin-top: 0;
padding-top: 4px;
}
.title {
margin-bottom: 10px;
}
#files {
padding: 0;
font-size: 1.1em;
}
#files li {
list-style: none;
display: inline;
padding: 7px 12px;
line-height: 35px;
background: #f0f0f0;
margin-right: 5px;
}
.index {
-webkit-column-count: 3;
-moz-column-count: 3;
column-count: 3;
-webkit-column-width: 33%;
-moz-column-width: 33%;
column-width: 33%;
}
.index > ul {
margin: 0;
padding: 0;
padding-bottom: 10px;
font-size: 1.1em;
list-style: none;
}
.index > ul > li.letter {
-webkit-column-break-after: avoid;
font-size: 1.4em;
padding-bottom: 10px;
text-transform: uppercase;
}
.index > ul > ul {
margin: 0;
padding-left: 20px;
}
.index > ul > ul small {
color: #666;
font-size: 0.7em;
}
body.list {
padding: 0;
margin: 0;
}
body #content.list #search {
position: relative;
margin-top: 5px;
margin-left: 10px;
}
#content.list.tree > ul {
margin-top: 13px !important;
}
#content.list.tree ul {
font-size: 16px;
margin: 0;
padding: 0;
}
#content.list.tree ul li {
margin: 0;
padding: 5px;
color: #000;
font-size: 1em;
list-style: none;
white-space: nowrap;
overflow: hidden;
cursor: pointer;
}
#content.list.tree ul li.namespace {
overflow: visible;
}
#content.list.tree ul li > a.toggle {
display: block;
float: left;
width: 10px;
height: 10px;
margin-top: 5px;
margin-left: 5px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUAMy8xNC8wOeNZPpQAAAE2SURBVDiNrZTBccIwEEXfelIAHUA6CZ24BGaWO+FuzZAK4k6gg5QAdGAq+Bxs2Yqx7BzyL7Llp/VfzZeQhCTc/ezuGzKKnKSzpCxXJM8fwNXda3df5RZETlIt6YUzSQDs93sl8w3wBZxCCE10GM1OcWbWjB2mWgEH4Mfdyxm3PSepBHibgQE2wLe7r4HjEidpnXMYdQPKEMJcsZ4zs2POYQOcaPfwMVOo58zsAdMt18BuoVDPxUJRacELbXv3hUIX2vYmOUvi8C8ydz/ThjXrqKqqLbDIAdsCKBd+Wo7GWa7o9qzOQHVVVXeAbs+yHHCH4aTsaCOQqunmUy1yBUAXkdMIfMlgF5EXLo2OpV/c/Up7jG4hhHcYLgWzAZXUc2b2ixsfvc/RmNNfOXD3Q/oeL9axJE1yT9IOoUu6MGUkAAAAAElFTkSuQmCC");
background-repeat: no-repeat;
background-position: 0px -10px;
}
#content.list.tree ul li > a.toggle.collapsed {
background-position: 0px 0px;
}
#content.list.tree ul li > span,
#content.list.tree ul li a {
margin-left: 20px;
text-decoration: none;
}
#content.list.tree ul li > a.toggle + span,
#content.list.tree ul li a.toggle + a {
margin-left: 5px;
}
#content.list.tree ul li small {
color: #888;
white-space: nowrap;
}
#content.list.tree ul li small.namespace {
display: none;
}
#content.list.tree ul li.result a.toggle {
visibility: hidden;
}
#content.list.tree ul li.result small.namespace {
display: inline;
}
#content.list.tree ul li.result small.parent {
display: none;
}
#content.list {
padding: 0;
margin: 0;
}
#content.list h1 {
padding: 12px 10px;
padding-bottom: 10px;
margin: 0;
font-size: 1.4em;
}
#content.list a:hover {
background: transparent;
}
#content.list nav {
margin-left: 10px;
}
#content.list #search {
color: #888;
}
#content.list #search input {
-webkit-border-radius: 3px;
border-radius: 3px;
border: 1px solid #bbb;
}
#content.list a {
color: #05a;
cursor: pointer;
text-decoration: none;
}
#content.list a:hover {
text-decoration: underline;
}
#content.list ul {
padding: 0;
list-style: none;
margin-left: 0;
}
#content.list ul li[deprecated] {
text-decoration: line-through;
}
#content.list ul li {
padding: 5px;
padding-left: 12px;
margin: 0;
font-size: 1.1em;
list-style: none;
color: #888;
cursor: pointer;
}
#content.list ul li.stripe {
background: #f0f0f0;
}
#content.list ul li:hover {
background: #ddd;
}
nav.toc {
-webkit-box-shadow: #bbb -2px 2px 6px;
box-shadow: #bbb -2px 2px 6px;
overflow: hidden;
float: right;
z-index: 500;
right: 0px;
max-width: 300px;
padding: 20px;
padding-right: 30px;
margin-left: 20px;
margin-bottom: 20px;
background: #fff;
border: 1px solid #ddd;
}
nav.toc p.title {
margin-top: 5px;
}
nav.toc ol {
padding-left: 1.8em;
}
nav.toc li {
font-size: 1.1em;
line-height: 1.7em;
}
nav.toc > ol > li {
font-size: 1.1em;
font-weight: bold;
}
nav.toc ol > ol {
font-size: 0.9em;
}
nav.toc.inline {
-webkit-box-shadow: #fff 0px 0px 0px;
box-shadow: #fff 0px 0px 0px;
position: relative;
float: none;
padding: 0;
margin: 5px 0 0 0;
border: 0px;
}
nav.toc.inline.hidden {
background: none;
padding: 0;
text-align: left;
}
nav.toc.hidden {
height: 26px;
width: 140px;
padding: 5px;
background: #f6f6f6;
text-align: center;
}
nav.toc.hidden p.title small {
display: none;
}

View File

@ -2,14 +2,14 @@
<html>
<head>
<meta charset=utf-8 />
<title>Yatta+Polymer Example</title>
<title>Y Example</title>
<script src="../../../webcomponentsjs/webcomponents.min.js"></script>
<link rel="import" href="../../../polymer/polymer.html">
<link rel="import" href="yatta-test.html">
<link rel="import" href="y-test.html">
</head>
<body>
<yatta-test></yatta-test>
<y-test></y-test>
<script src="./index.js"></script>
</body>
</html>

View File

@ -1,16 +1,16 @@
setTimeout(function(){
window.x = document.querySelector("yatta-test");
// x.yatta.HB.stopGarbageCollection();
x.yatta.val("stuff",{otherstuff:{nostuff:"this is no stuff"}})
window.y_test = document.querySelector("y-test");
window.y_test.y.val("stuff",{otherstuff:{nostuff:"this is no stuff"}})
setTimeout(function(){
var res = x.yatta.val("stuff");
if(!(x.nostuff === "this is no stuff")){
var res = y_test.y.val("stuff");
if(!(y_test.nostuff === "this is no stuff")){
console.log("Deep inherit doesn't work!")
}
window.y_stuff_property.val = {nostuff: "this is also no stuff"};
setTimeout(function(){
if(!(x.nostuff === "this is also no stuff")){
if(!(y_test.nostuff === "this is also no stuff")){
console.log("Element val overwrite doesn't work")
}
console.log("Everything is fine :)");

View File

@ -1,38 +0,0 @@
<link rel="import" href="../../yatta-element.html">
<link rel="import" href="../../../Yatta-Connectors/xmpp-connector/xmpp-connector.html">
<link rel="import" href="../../../paper-slider/paper-slider.html">
<polymer-element name="yatta-test" attributes="yatta connector stuff">
<template>
<h1 id="text" contentEditable> Check this out !</h1>
<xmpp-connector id="connector" connector={{connector}} room="testy-xmpp-polymer"></xmpp-connector>
<yatta-element connector={{connector}} val={{yatta}}>
<yatta-property name="slider" val={{slider}}>
</yatta-property>
<yatta-property name="stuff" val={{stuff}}>
<yatta-property id="otherstuff" name="otherstuff" val={{otherstuff}}>
</yatta-property>
</yatta-property>
</yatta-element>
<yatta-element val={{otherstuff}}>
<yatta-property name="nostuff" val={{nostuff}}>
</yatta-property>
</yatta-element>
<paper-slider min="0" max="200" immediateValue={{slider}}></paper-slider>
</template>
<script>
Polymer({
ready: function(){
window.y_stuff_property = this.$.otherstuff;
this.yatta.val("slider",50)
var that = this;
this.connector.whenSynced(function(){
if(that.yatta.val("text") == null){
that.yatta.val("text","stuff","mutable");
}
that.yatta.val("text").bind(that.$.text,that.shadowRoot)
})
}
})
</script>
</polymer-element>

View File

@ -2,20 +2,19 @@
<html>
<head>
<meta charset=utf-8 />
<title>PeerJs Json Example</title>
<script src="../../../Yatta-Connectors/xmpp-connector/xmpp-connector.js"></script>
<script src="../../build/browser/yatta.js"></script>
<title>Y Example</title>
<script src="../../build/browser/y.js"></script>
<script src="../../../y-connectors/y-xmpp/y-xmpp.js"></script>
<script src="./index.js"></script>
</head>
<body>
<h1 contentEditable> PeerJs + Json Tutorial</h1>
<p> Collaborative Json editing with <a href="https://github.com/DadaMonad/Yatta/">Yatta</a>
and <a href="http://peerjs.com/">PeerJs</a> (WebRTC). </p>
<h1 contentEditable> yjs Tutorial</h1>
<p> Collaborative Json editing with <a href="https://github.com/rwth-acis/yjs/">yjs</a>
and XMPP Connector. </p>
<textarea style="width:80%;" rows=40 id="textfield"></textarea>
<p> <a href="https://github.com/DadaMonad/Yatta/">Yatta</a> is a Framework for Real-Time collaboration on arbitrary data structures.
You can find the code for this example <a href="https://github.com/DadaMonad/Yatta/tree/master/examples/PeerJs-Json">here</a>.
<p> <a href="https://github.com/rwth-acis/yjs/">yjs</a> is a Framework for Real-Time collaboration on arbitrary data types.
</p>
</body>
</html>

View File

@ -1,59 +1,25 @@
/**
## PeerJs + JSON Example
Here, I will give a short overview on how to enable collaborative json with the
[PeerJs](http://peerjs.com/) Connector and the Json Framework. Open
[index.html](http://dadamonad.github.io/Yatta/examples/PeerJs-Json/index.html) in your Browser and
use the console to explore Yatta!
[PeerJs](http://peerjs.com) is a Framework that enables you to connect to other peers. You just need the
user-id of the peer (browser/client). And then you can connect to it.
First you have to include the following libraries in your html file:
```
<script src="http://cdn.peerjs.com/0.3/peer.js"></script>
<script src="../../build/browser/Frameworks/JsonFramework.js"></script>
<script src="../../build/browser/Connectors/PeerJsConnector.js"></script>
<script src="./index.js"></script>
```
### Create Connector
The PeerJs Framework requires an API key, or you need to set up your own PeerJs server.
Get an API key from the [Website](http://peerjs.com/peerserver).
The first parameter of `createPeerJsConnector` is forwarded as the options object in PeerJs.
Therefore, you may also specify the server/port here, if you have set up your own server.
*/
var yatta, yattaHandler;
/**
This will connect to the server owned by the peerjs team.
For now, you can use my API key.
*/
connector = new XMPPConnector("testy-xmpp-json2");
connector = new Y.XMPP("testy-xmpp-json2");
connector.debug = true
/**
### Yatta
yatta is the shared json object. If you change something on this object,
it will be instantly shared with all the other collaborators.
*/
yatta = new Yatta(connector);
y = new Y(connector);
window.onload = function(){
var textbox = document.getElementById("textfield");
yatta.observe(function(events){
y.observe(function(events){
for(var i=0; i<events.length; i++){
var event = events[i];
if(event.name === "textfield" && event.type !== "delete"){
yatta.val("textfield").bind(textbox);
yatta.val("headline").bind(document.querySelector("h1"))
y.val("textfield").bind(textbox);
y.val("headline").bind(document.querySelector("h1"))
}
}
});
connector.whenSynced(function(){
if(yatta.val("textfield") == null){
yatta.val("headline","headline", "mutable");
yatta.val("textfield","stuff", "mutable")
if(y.val("textfield") == null){
y.val("headline","headline", "mutable");
y.val("textfield","stuff", "mutable")
}
})

View File

@ -23,9 +23,9 @@ gulp.task 'default', ['build_browser']
files =
lib : ['./lib/**/*.coffee']
browser : ['./lib/yatta.coffee','./lib/yatta-element.coffee']
browser : ['./lib/y.coffee','./lib/y-object.coffee']
#test : ['./test/**/*_test.coffee']
test : ['./test/JsonYatta_test.coffee', './test/TextYatta_test.coffee']
test : ['./test/Json_test.coffee', './test/Text_test.coffee']
gulp : ['./gulpfile.coffee']
examples : ['./examples/**/*.js']
other: ['./lib/**/*']
@ -107,7 +107,7 @@ gulp.task 'literate', ->
.pipe gulpif '!**/', git.add({args : "-A"})
gulp.task 'codo', [], ()->
command = './node_modules/codo/bin/codo -o "./doc" --name "Yatta!" --readme "README.md" --undocumented false --private true --title "Yatta! API" ./lib - LICENSE.txt '
command = './node_modules/codo/bin/codo -o "./doc" --name "yjs" --readme "README.md" --undocumented false --private true --title "yjs API" ./lib - LICENSE.txt '
run(command).exec()
gulp.task 'phantom_test', ['build_browser'], ()->
@ -118,5 +118,5 @@ gulp.task 'clean', ->
gulp.src ['./build/{browser,test,node}/**/*.{js,map}','./doc/'], { read: false }
.pipe rimraf()
gulp.task 'default', ['clean','build', 'codo'], ->
gulp.task 'default', ['clean','build'], ->

View File

@ -50,7 +50,7 @@ adaptConnector = (connector, engine, HB, execution_listener)->
if op.uid.creator isnt HB.getUserId()
engine.applyOp op
if connector._whenBoundToYatta?
connector._whenBoundToYatta()
if connector._whenBoundToY?
connector._whenBoundToY()
module.exports = adaptConnector

View File

@ -14,7 +14,7 @@ module.exports = (HB)->
# Use it to check whether this is a json-type or something else.
#
# @example
# var x = yatta.val('unknown')
# var x = y.val('unknown')
# if (x.type === "Object") {
# console.log JSON.stringify(x.toJson())
# }
@ -55,7 +55,7 @@ module.exports = (HB)->
Object.observe @bound_json, (events)->
for event in events
if not event.changedBy? and (event.type is "add" or event.type = "update")
# this event is not created by Yatta.
# this event is not created by Y.
that.val(event.name, event.object[event.name])
@observe (events)->
for event in events
@ -111,7 +111,7 @@ module.exports = (HB)->
o = type.create.apply null, args
super name, o
else
throw new Error "The #{content.constructor.name}-type is not (yet) supported in Yatta."
throw new Error "The #{content.constructor.name}-type is not (yet) supported in Y."
else
super name, content
else # is this even necessary ? I have to define every type anyway.. (see Number type below)

View File

@ -142,7 +142,7 @@ module.exports = (HB)->
if type? and type.create?
type.create content, options
else
throw new Error "The #{content.constructor.name}-type is not (yet) supported in Yatta."
throw new Error "The #{content.constructor.name}-type is not (yet) supported in Y."
else
content
@ -236,7 +236,7 @@ module.exports = (HB)->
# Use it to check whether this is a word-type or something else.
#
# @example
# var x = yatta.val('unknown')
# var x = y.val('unknown')
# if (x.type === "String") {
# console.log JSON.stringify(x.toJson())
# }
@ -278,7 +278,7 @@ module.exports = (HB)->
#
# @example
# var textbox = document.getElementById("textfield");
# yatta.bind(textbox);
# y.bind(textbox);
#
bind: (textfield, dom_root)->
dom_root ?= window

View File

@ -3,7 +3,7 @@ json_types_uninitialized = require "./JsonTypes"
# some dom implementations may call another dom.method that simulates the behavior of another.
# For example xml.insertChild(dom) , wich inserts an element at the end, and xml.insertAfter(dom,null) wich does the same
# But yatta's proxy may be called only once!
# But Y's proxy may be called only once!
proxy_token = false
dont_proxy = (f)->
proxy_token = true
@ -18,7 +18,7 @@ _proxy = (f_name, f)->
old_f = @[f_name]
if old_f?
@[f_name] = ()->
if not proxy_token and not @_yatta?.isDeleted()
if not proxy_token and not @_y?.isDeleted()
that = this
args = arguments
dont_proxy ()->
@ -59,10 +59,10 @@ module.exports = (HB)->
super(uid)
if @xml?._yatta?
d = new types.Delete undefined, @xml._yatta
if @xml?._y?
d = new types.Delete undefined, @xml._y
HB.addOperation(d).execute()
@xml._yatta = null
@xml._y = null
if attributes? and elements?
@saveOperation 'attributes', attributes
@ -114,7 +114,7 @@ module.exports = (HB)->
super()
setXmlProxy: ()->
@xml._yatta = @
@xml._y = @
that = @
@elements.on 'insert', (event, op)->
@ -160,7 +160,7 @@ module.exports = (HB)->
findNode = (child)->
if not child?
throw new Error "you must specify a parameter!"
child = child._yatta
child = child._y
elem = that.elements.beginning.next_cl
while elem.type isnt 'Delimiter' and elem.content isnt child
elem = elem.next_cl
@ -177,7 +177,7 @@ module.exports = (HB)->
if next
prev = next.prev_cl
else
prev = @_yatta.elements.end.prev_cl
prev = @_y.elements.end.prev_cl
while prev.isDeleted()
prev = prev.prev_cl
inserted_nodes = null
@ -235,7 +235,7 @@ module.exports = (HB)->
throw new Error "You are only allowed to delete existing (direct) child elements!"
d = new types.Delete undefined, elem
HB.addOperation(d).execute()
node._yatta = null
node._y = null
@xml._proxy 'removeChild', removeChild
@xml._proxy 'replaceChild', (insertedNode, replacedNode)->
insertBefore.call this, insertedNode, replacedNode
@ -326,11 +326,11 @@ module.exports = (HB)->
# @param {Object} content
#
constructor: (uid, content)->
if content._yatta?
d = new types.Delete undefined, content._yatta
if content._y?
d = new types.Delete undefined, content._y
HB.addOperation(d).execute()
content._yatta = null
content._yatta = @
content._y = null
content._y = @
super uid, content
applyDelete: (op)->

View File

@ -1,59 +0,0 @@
Yatta = require './yatta'
bindToChildren = (that)->
for i in [0...that.children.length]
attr = that.children.item(i)
if attr.name?
attr.val = that.val.val(attr.name)
that.val.observe (events)->
for event in events
if event.name?
for i in [0...that.children.length]
attr = that.children.item(i)
if attr.name? and attr.name is event.name
newVal = that.val.val(attr.name)
if attr.val isnt newVal
attr.val = newVal
Polymer "yatta-element",
ready: ()->
if @connector?
@val = new Yatta @connector
bindToChildren @
else if @val?
bindToChildren @
valChanged: ()->
if @val? and @val.type is "Object"
bindToChildren @
connectorChanged: ()->
if (not @val?)
@val = new Yatta @connector
bindToChildren @
Polymer "yatta-property",
ready: ()->
if @val? and @name?
if @val.constructor is Object
@val = @parentElement.val(@name,@val).val(@name)
# TODO: please use instanceof instead of .type,
# since it is more safe (consider someone putting a custom Object type here)
else if typeof @val is "string"
@parentElement.val(@name,@val)
if @val.type is "Object"
bindToChildren @
valChanged: ()->
if @val? and @name?
if @val.constructor is Object
@val = @parentElement.val.val(@name,@val).val(@name)
# TODO: please use instanceof instead of .type,
# since it is more safe (consider someone putting a custom Object type here)
else if @val.type is "Object"
bindToChildren @
else if @parentElement.val?.val? and @val isnt @parentElement.val.val(@name)
@parentElement.val.val @name, @val

View File

@ -1,48 +0,0 @@
json_types_uninitialized = require "./Types/JsonTypes"
HistoryBuffer = require "./HistoryBuffer"
Engine = require "./Engine"
adaptConnector = require "./ConnectorAdapter"
createYatta = (connector)->
user_id = null
if connector.id?
user_id = connector.id # TODO: change to getUniqueId()
else
user_id = "_temp"
connector.whenUserIdSet (id)->
user_id = id
HB.resetUserId id
HB = new HistoryBuffer user_id
type_manager = json_types_uninitialized HB
types = type_manager.types
#
# Framework for Json data-structures.
# Known values that are supported:
# * String
# * Integer
# * Array
#
class Yatta extends types.Object
#
# @param {String} user_id Unique id of the peer.
# @param {Connector} Connector the connector class.
#
constructor: ()->
@connector = connector
@HB = HB
@types = types
@engine = new Engine @HB, type_manager.types
adaptConnector @connector, @engine, @HB, type_manager.execution_listener
super
getConnector: ()->
@connector
return new Yatta(HB.getReservedUniqueIdentifier()).execute()
module.exports = createYatta
if window? and not window.Yatta?
window.Yatta = createYatta

View File

@ -1,26 +0,0 @@
0 info it worked if it ends with ok
1 verbose cli [ '/home/codio/.nvm/v0.10.33/bin/node',
1 verbose cli '/home/codio/.nvm/v0.10.33/bin/npm',
1 verbose cli 'adduser' ]
2 info using npm@1.4.28
3 info using node@v0.10.33
4 error Error: canceled
4 error at Interface.<anonymous> (/home/codio/.nvm/v0.10.33/lib/node_modules/npm/node_modules/read/lib/read.js:66:13)
4 error at Interface.emit (events.js:92:17)
4 error at Interface._ttyWrite (readline.js:620:16)
4 error at ReadStream.onkeypress (readline.js:99:10)
4 error at ReadStream.emit (events.js:98:17)
4 error at emitKey (readline.js:1095:12)
4 error at ReadStream.onData (readline.js:840:14)
4 error at ReadStream.emit (events.js:95:17)
4 error at ReadStream.<anonymous> (_stream_readable.js:764:14)
4 error at ReadStream.emit (events.js:92:17)
5 error If you need help, you may report this *entire* log,
5 error including the npm and node versions, at:
5 error <http://github.com/npm/npm/issues>
6 error System Linux 3.16.0-23-generic
7 error command "/home/codio/.nvm/v0.10.33/bin/node" "/home/codio/.nvm/v0.10.33/bin/npm" "adduser"
8 error cwd /home/codio/workspace/Yatta
9 error node -v v0.10.33
10 error npm -v 1.4.28
11 verbose exit [ 1, true ]

View File

@ -1,14 +1,14 @@
{
"name": "Y",
"version": "0.2.3",
"name": "yjs",
"version": "0.3.0",
"description": "A Framework that enables Real-Time Collaboration on arbitrary data structures.",
"main": "./build/node/yatta.js",
"main": "./build/node/y.js",
"scripts": {
"test": "./node_modules/.bin/gulp test"
},
"repository": {
"type": "git",
"url": "https://github.com/rwth-acis/Yatta"
"url": "https://github.com/rwth-acis/yjs"
},
"keywords": [
"OT",
@ -23,9 +23,9 @@
"email": "kevin.jahns@rwth-aachen.de",
"license": "MIT",
"bugs": {
"url": "https://github.com/DadaMonad/Yatta/issues"
"url": "https://github.com/rwth-acis/yjs/issues"
},
"homepage": "https://dadamonad.github.io/Yatta/",
"homepage": "https://dadamonad.github.io/yjs/",
"dependencies": {
},
"devDependencies": {

View File

@ -1,274 +0,0 @@
chai = require('chai')
expect = chai.expect
should = chai.should()
sinon = require('sinon')
sinonChai = require('sinon-chai')
_ = require("underscore")
chai.use(sinonChai)
Connector = require "../../Yatta-Connectors/lib/test-connector/test-connector.coffee"
Yatta = require "../lib/yatta.coffee"
Test = require "./TestSuite"
class JsonTest extends Test
makeNewUser: (userId)->
conn = new Connector userId
super new Yatta conn
type: "JsonTest"
getRandomRoot: (user_num, root)->
root ?= @users[user_num]
types = @users[user_num].types
if _.random(0,1) is 1 # take root
root
else # take child
elems = null
if root.type is "Object"
elems =
for oname,val of root.val()
val
else if root.type is "Array"
elems = root.val()
else
return root
elems = elems.filter (elem)->
(elem.type is "Array") or (elem.type is "Object")
if elems.length is 0
root
else
p = elems[_.random(0, elems.length-1)]
@getRandomRoot user_num, p
getContent: (user_num)->
@users[user_num].toJson(true)
getGeneratingFunctions: (user_num)->
types = @users[user_num].types
super(user_num).concat [
f : (y)=> # SET PROPERTY
l = y.val().length
y.val(_.random(0, l-1), @getRandomText(), 'immutable')
null
types : [types.Array]
, f : (y)=> # Delete Array Element
list = y.val()
if list.length > 0
key = list[_random(0,list.length-1)]
y.delete(key)
types: [types.Array]
, f : (y)=> # insert TEXT mutable
l = y.val().length
y.val(_.random(0, l-1), @getRamdomObject())
types: [types.Array]
, f : (y)=> # insert string
l = y.val().length
y.val(_.random(0, l-1), @getRandomText(), 'immutable')
null
types : [types.Array]
, f : (y)=> # Delete Object Property
list = for name, o of y.val()
name
if list.length > 0
key = list[_random(0,list.length-1)]
y.delete(key)
types: [types.Object]
, f : (y)=> # SET Object Property
y.val(@getRandomKey(), @getRandomObject())
types: [types.Object]
,
f : (y)=> # SET PROPERTY TEXT
y.val(@getRandomKey(), @getRandomText(), 'mutable')
types: [types.Object]
]
describe "JsonFramework", ->
beforeEach (done)->
@timeout 50000
@yTest = new JsonTest()
@users = @yTest.users
@test_user = @yTest.makeNewUser "test_user"
done()
it "can handle many engines, many operations, concurrently (random)", ->
console.log "" # TODO
@yTest.run()
it "has a working test suite", ->
@yTest.compareAll()
it "handles double-late-join", ->
test = new JsonTest("double")
test.run()
@yTest.run()
u1 = test.users[0]
u2 = @yTest.users[1]
ops1 = u1.HB._encode()
ops2 = u2.HB._encode()
u1.HB.renewStateVector u2.HB.getOperationCounter()
u2.HB.renewStateVector u1.HB.getOperationCounter()
u1.engine.applyOps ops2
u2.engine.applyOps ops1
expect(test.getContent(0)).to.deep.equal(@yTest.getContent(1))
it "can handle creaton of complex json (1)", ->
@yTest.users[0].val('a', 'q', "mutable")
@yTest.users[1].val('a', 't', "mutable")
@yTest.compareAll()
q = @yTest.users[2].val('a')
q.insert(0,'A')
@yTest.compareAll()
expect(@yTest.getSomeUser().val("a").val()).to.equal("At")
it "can handle creaton of complex json (2)", ->
@yTest.getSomeUser().val('x', {'a':'b'})
@yTest.getSomeUser().val('a', {'a':{q:"dtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt"}}, "mutable")
@yTest.getSomeUser().val('b', {'a':{}})
@yTest.getSomeUser().val('c', {'a':'c'})
@yTest.getSomeUser().val('c', {'a':'b'})
@yTest.compareAll()
q = @yTest.getSomeUser().val("a").val("a").val("q")
q.insert(0,'A')
@yTest.compareAll()
expect(@yTest.getSomeUser().val("a").val("a").val("q").val()).to.equal("Adtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt")
it "can handle creaton of complex json (3)", ->
@yTest.users[0].val('l', [1,2,3], "mutable")
@yTest.users[1].val('l', [4,5,6], "mutable")
@yTest.compareAll()
@yTest.users[2].val('l').insert(0,'A')
w = @yTest.users[1].val('l').insert(0,'B', "mutable").val(0)
w.insert 1, "C"
expect(w.val()).to.equal("BC")
@yTest.compareAll()
it "handles immutables and primitive data types", ->
@yTest.getSomeUser().val('string', "text", "immutable")
@yTest.getSomeUser().val('number', 4, "immutable")
@yTest.getSomeUser().val('object', {q:"rr"}, "immutable")
@yTest.getSomeUser().val('null', null)
@yTest.compareAll()
expect(@yTest.getSomeUser().val('string')).to.equal "text"
expect(@yTest.getSomeUser().val('number')).to.equal 4
expect(@yTest.getSomeUser().val('object').val('q')).to.equal "rr"
expect(@yTest.getSomeUser().val('null') is null).to.be.ok
it "handles immutables and primitive data types (2)", ->
@yTest.users[0].val('string', "text", "immutable")
@yTest.users[1].val('number', 4, "immutable")
@yTest.users[2].val('object', {q:"rr"}, "immutable")
@yTest.users[0].val('null', null)
@yTest.compareAll()
expect(@yTest.getSomeUser().val('string')).to.equal "text"
expect(@yTest.getSomeUser().val('number')).to.equal 4
expect(@yTest.getSomeUser().val('object').val('q')).to.equal "rr"
expect(@yTest.getSomeUser().val('null') is null).to.be.ok
it "Observers work on JSON Types (add type observers, local and foreign)", ->
u = @yTest.users[0]
@yTest.flushAll()
last_task = null
observer1 = (changes)->
expect(changes.length).to.equal(1)
change = changes[0]
expect(change.type).to.equal("add")
expect(change.object).to.equal(u)
expect(change.changedBy).to.equal('0')
expect(change.name).to.equal("newStuff")
last_task = "observer1"
u.observe observer1
u.val("newStuff","someStuff","mutable")
expect(last_task).to.equal("observer1")
u.unobserve observer1
observer2 = (changes)->
expect(changes.length).to.equal(1)
change = changes[0]
expect(change.type).to.equal("add")
expect(change.object).to.equal(u)
expect(change.changedBy).to.equal('1')
expect(change.name).to.equal("moreStuff")
last_task = "observer2"
u.observe observer2
v = @yTest.users[1]
v.val("moreStuff","someMoreStuff")
@yTest.flushAll()
expect(last_task).to.equal("observer2")
u.unobserve observer2
it "Observers work on JSON Types (update type observers, local and foreign)", ->
u = @yTest.users[0].val("newStuff","oldStuff","mutable").val("moreStuff","moreOldStuff","mutable")
@yTest.flushAll()
last_task = null
observer1 = (changes)->
expect(changes.length).to.equal(1)
change = changes[0]
expect(change.type).to.equal("update")
expect(change.object).to.equal(u)
expect(change.changedBy).to.equal('0')
expect(change.name).to.equal("newStuff")
expect(change.oldValue.val()).to.equal("oldStuff")
last_task = "observer1"
u.observe observer1
u.val("newStuff","someStuff")
expect(last_task).to.equal("observer1")
u.unobserve observer1
observer2 = (changes)->
expect(changes.length).to.equal(1)
change = changes[0]
expect(change.type).to.equal("update")
expect(change.object).to.equal(u)
expect(change.changedBy).to.equal('1')
expect(change.name).to.equal("moreStuff")
expect(change.oldValue.val()).to.equal("moreOldStuff")
last_task = "observer2"
u.observe observer2
v = @yTest.users[1]
v.val("moreStuff","someMoreStuff")
@yTest.flushAll()
expect(last_task).to.equal("observer2")
u.unobserve observer2
it "Observers work on JSON Types (delete type observers, local and foreign)", ->
u = @yTest.users[0].val("newStuff","oldStuff","mutable").val("moreStuff","moreOldStuff","mutable")
@yTest.flushAll()
last_task = null
observer1 = (changes)->
expect(changes.length).to.equal(1)
change = changes[0]
expect(change.type).to.equal("delete")
expect(change.object).to.equal(u)
expect(change.changedBy).to.equal('0')
expect(change.name).to.equal("newStuff")
expect(change.oldValue.val()).to.equal("oldStuff")
last_task = "observer1"
u.observe observer1
u.delete("newStuff")
expect(last_task).to.equal("observer1")
u.unobserve observer1
observer2 = (changes)->
expect(changes.length).to.equal(1)
change = changes[0]
expect(change.type).to.equal("delete")
expect(change.object).to.equal(u)
expect(change.changedBy).to.equal('1')
expect(change.name).to.equal("moreStuff")
expect(change.oldValue.val()).to.equal("moreOldStuff")
last_task = "observer2"
u.observe observer2
v = @yTest.users[1]
v.delete("moreStuff")
@yTest.flushAll()
expect(last_task).to.equal("observer2")
u.unobserve observer2

View File

@ -7,7 +7,7 @@ _ = require("underscore")
chai.use(sinonChai)
Connector = require "../../Yatta-Connectors/lib/test-connector/test-connector.coffee"
Connector = require "../../y-connectors/lib/y-test/y-test.coffee"
module.exports = class Test
constructor: (@name_suffix = "")->

View File

@ -1,119 +0,0 @@
chai = require('chai')
expect = chai.expect
should = chai.should()
sinon = require('sinon')
sinonChai = require('sinon-chai')
_ = require("underscore")
chai.use(sinonChai)
Yatta = require "../lib/yatta"
Connector = require "../../Yatta-Connectors/lib/test-connector/test-connector.coffee"
Test = require "./TestSuite"
class TextTest extends Test
type: "TextTest"
makeNewUser: (userId)->
conn = new Connector userId
new Yatta conn
initUsers: (u)->
u.val("TextTest","","mutable")
getRandomRoot: (user_num)->
@users[user_num].val("TextTest")
getContent: (user_num)->
@users[user_num].val("TextTest").val()
describe "TextFramework", ->
beforeEach (done)->
@timeout 50000
@yTest = new TextTest()
done()
it "simple multi-char insert", ->
u = @yTest.users[0].val("TextTest")
u.insert 0, "abc"
u = @yTest.users[1].val("TextTest")
u.insert 0, "xyz"
@yTest.compareAll()
u.delete 0, 1
@yTest.compareAll()
expect(u.val()).to.equal("bcxyz")
it "Observers work on shared Text (insert type observers, local and foreign)", ->
u = @yTest.users[0].val("TextTest","my awesome Text","mutable").val("TextTest")
@yTest.flushAll()
last_task = null
observer1 = (changes)->
expect(changes.length).to.equal(1)
change = changes[0]
expect(change.type).to.equal("insert")
expect(change.object).to.equal(u)
expect(change.value).to.equal("a")
expect(change.position).to.equal(1)
expect(change.changedBy).to.equal('0')
last_task = "observer1"
u.observe observer1
u.insert 1, "a"
expect(last_task).to.equal("observer1")
u.unobserve observer1
observer2 = (changes)->
expect(changes.length).to.equal(1)
change = changes[0]
expect(change.type).to.equal("insert")
expect(change.object).to.equal(u)
expect(change.value).to.equal("x")
expect(change.position).to.equal(0)
expect(change.changedBy).to.equal('1')
last_task = "observer2"
u.observe observer2
v = @yTest.users[1].val("TextTest")
v.insert 0, "x"
@yTest.flushAll()
expect(last_task).to.equal("observer2")
u.unobserve observer2
it "Observers work on shared Text (delete type observers, local and foreign)", ->
u = @yTest.users[0].val("TextTest","my awesome Text","mutable").val("TextTest")
@yTest.flushAll()
last_task = null
observer1 = (changes)->
expect(changes.length).to.equal(1)
change = changes[0]
expect(change.type).to.equal("delete")
expect(change.object).to.equal(u)
expect(change.position).to.equal(1)
expect(change.length).to.equal(1)
expect(change.changedBy).to.equal('0')
last_task = "observer1"
u.observe observer1
u.delete 1, 1
expect(last_task).to.equal("observer1")
u.unobserve observer1
observer2 = (changes)->
expect(changes.length).to.equal(1)
change = changes[0]
expect(change.type).to.equal("delete")
expect(change.object).to.equal(u)
expect(change.position).to.equal(0)
expect(change.length).to.equal(1)
expect(change.changedBy).to.equal('1')
last_task = "observer2"
u.observe observer2
v = @yTest.users[1].val("TextTest")
v.delete 0, 1
@yTest.flushAll()
expect(last_task).to.equal("observer2")
u.unobserve observer2
it "can handle many engines, many operations, concurrently (random)", ->
console.log("testiy deleted this TODO:dtrn")
@yTest.run()

View File

@ -1,196 +0,0 @@
chai = require('chai')
expect = chai.expect
should = chai.should()
sinon = require('sinon')
sinonChai = require('sinon-chai')
_ = require("underscore")
$ = require("jquery")
document?.$ = $ # for browser
require 'coffee-errors'
chai.use(sinonChai)
Y = require "../lib/index"
Connector = require "../../Yatta-Connectors/lib/test-connector/test-connector.coffee"
Test = require "./TestSuite"
class XmlTest extends Test
type: "XmlTest"
makeNewUser: (user, conn)->
super new Y.XmlFramework user, conn
getRandomRoot: (user_num)->
@users[user_num].getSharedObject()
getContent: (user_num)->
@users[user_num].val()
describe "XmlFramework", ->
beforeEach (done)->
@timeout 50000
@yTest = new XmlTest()
###
@users = @yTest.users
###
test_users = []
connector = (new Connector 0, test_users)
@test_user = @yTest.makeNewUser 0, connector
test_users.push @test_user
# test_user_listen listens to the actions of test_user. He will update his dom when he receives from test_user.
@test_user_listen = @yTest.makeNewUser 2, connector
test_users.push @test_user_listen
@test_user2 = @yTest.makeNewUser 1, (Connector_uninitialized [])
$("#test_dom").replaceWith('<div id="test_dom" test_attribute="the test" class="stuffy" style="color: blue"><p id="replaceme">replace me</p><p id="removeme">remove me</p><p>This is a test object for <b>XmlFramework</b></p><span class="span_element"><p>span</p></span></div>')
@$dom = $("#test_dom")
@dom = @$dom[0]
@test_user.val(@dom)
@test_user_listen.getConnector().flushAll()
@test_user_listen_dom = @test_user_listen.val()
@check = ()=>
dom_ = @dom.outerHTML
# now test if other collaborators can parse the HB and result in the same content
hb = @test_user.HB._encode()
@test_user2.engine.applyOps(hb)
dom2 = @test_user2.val()
expect(dom_).to.equal(dom2.outerHTML)
@test_user_listen.getConnector().flushAll()
expect(dom_).to.equal(@test_user_listen_dom.outerHTML)
done()
it "can transform to a new real Dom element", ->
dom_ = @test_user.val(true)
expect(dom_ isnt @dom).to.be.true
it "supports dom.insertBefore", ->
newdom = $("<p>dtrn</p>")[0]
newdom2 = $("<p>dtrn2</p>")[0]
n = $("#removeme")[0]
@dom.insertBefore(newdom, null)
@dom.insertBefore(newdom2, n)
@check()
it "supports dom.appendChild", ->
newdom = $("<p>dtrn</p>")[0]
@dom.appendChild(newdom)
@check()
it "supports dom.setAttribute", ->
@dom.setAttribute("test_attribute", "newVal")
@check()
it "supports dom.removeAttribute", ->
@dom.removeAttribute("test_attribute")
@check()
it "supports dom.removeChild", ->
@dom.removeChild($("#removeme")[0])
expect($("#removeme").length).to.equal(0)
@check()
it "supports dom.replaceChild", ->
newdom = $("<p>replaced</p>")[0]
replace = $("#replaceme")[0]
@dom.replaceChild(newdom,replace)
expect($("#replaceme").length).to.equal(0)
@check()
it "supports dom.classList.add", ->
@dom.classList.add "classy"
@check()
it "supports dom.textcontent", -> #TODO!!!!
@dom.classList.add "classy"
@check()
it "supports jquery.addClass", ->
@$dom.addClass("testy")
@check()
it "supports jquery.after", ->
d = $("#test_dom p")
d.after("<div class=\"inserted_after\">after</div>")
@check()
it "supports jquery.append", ->
d = $("#test_dom p")
d.after("<b>appended</b>")
@check()
it "supports jquery.appendTo", ->
$("<b>appendedTo</b>").appendTo("#test_dom p")
$("p").appendTo("#test_dom")
@check()
it "supports jquery.before", ->
d = $("#test_dom p")
d.before("<div>before</div>")
@check()
it "supports jquery.detach", ->
d = $(".inserted_after")
d.detach()
@check()
it "supports jquery.empty", ->
d = $("#test_dom p")
d.empty()
@check()
it "supports jquery.insertAfter", ->
$("<p>after span</p>").insertAfter(".span_element")
@check()
it "supports jquery.insertBefore", ->
$("<p>before span</p>").insertBefore(".span_element")
@check()
it "supports jquery.prepend", ->
d = $("#test_dom div")
d.prepend("<p>prepended</p>")
@check()
it "supports jquery.prependTo", ->
$("<p atone=false attwo=\"dtrn\" class=\"attr_node sudo su\">prepended to</p>").prependTo("#test_dom div")
@check()
it "supports jquery.remove", ->
d = $("#test_dom b")
d.remove()
@check()
it "supports jquery.removeAttr", ->
d = $(".attr_node")
d.removeAttr("attwo")
@check()
it "supports jquery.removeClass", ->
d = $(".attr_node")
d.removeClass("sudo")
@check()
it "supports jquery.attr", ->
d = $(".attr_node")
d.attr("atone", true)
@check()
it "supports jquery.replaceAll", ->
$("<span>New span content </span>").replaceAll("#test_dom div")
@check()
it "supports jquery.replaceWith", ->
d = $("#test_dom span")
d.replaceWith("<div>me is div again </div>")
@check()

View File

@ -1,8 +0,0 @@
<polymer-element name="yatta-element" hidden attributes="val connector">
</polymer-element>
<polymer-element name="yatta-property" hidden attributes="val name">
</polymer-element>
<script src="./build/browser/yatta-element.js"></script>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long