getting ready for 0.4 realeasy
This commit is contained in:
parent
b6fe47efe1
commit
60de3ce5b0
@ -68,11 +68,9 @@ I would appreciate if developers give me feedback on how _convenient_ the framew
|
|||||||
## License
|
## License
|
||||||
Yjs is licensed under the [MIT License](./LICENSE.txt).
|
Yjs is licensed under the [MIT License](./LICENSE.txt).
|
||||||
|
|
||||||
|
<kevin.jahns@rwth-aachen.de>
|
||||||
|
|
||||||
[ShareJs]: https://github.com/share/ShareJS
|
[ShareJs]: https://github.com/share/ShareJS
|
||||||
[OpenCoweb]: https://github.com/opencoweb/coweb
|
[OpenCoweb]: https://github.com/opencoweb/coweb
|
||||||
|
|
||||||
<kevin.jahns@rwth-aachen.de>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -35,10 +35,10 @@ module.exports = {
|
|||||||
if (this.receive_handlers == null) {
|
if (this.receive_handlers == null) {
|
||||||
this.receive_handlers = [];
|
this.receive_handlers = [];
|
||||||
}
|
}
|
||||||
this.is_bound_to_y = false;
|
|
||||||
this.connections = {};
|
this.connections = {};
|
||||||
this.current_sync_target = null;
|
this.current_sync_target = null;
|
||||||
return this.sent_hb_to_all_users = false;
|
this.sent_hb_to_all_users = false;
|
||||||
|
return this.is_initialized = true;
|
||||||
},
|
},
|
||||||
isRoleMaster: function() {
|
isRoleMaster: function() {
|
||||||
return this.role === "master";
|
return this.role === "master";
|
||||||
@ -250,7 +250,7 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
} else if (res.sync_step === "applyHB") {
|
} else if (res.sync_step === "applyHB") {
|
||||||
this.applyHB(res.data, sender === this.current_sync_target);
|
this.applyHB(res.data, sender === this.current_sync_target);
|
||||||
if ((this.syncMethod === "syncAll" || (res.sent_again != null)) && (!this.is_synced) && (this.current_sync_target === sender)) {
|
if ((this.syncMethod === "syncAll" || (res.sent_again != null)) && (!this.is_synced) && ((this.current_sync_target === sender) || (this.current_sync_target == null))) {
|
||||||
this.connections[sender].is_synced = true;
|
this.connections[sender].is_synced = true;
|
||||||
return this.findNewSyncTarget();
|
return this.findNewSyncTarget();
|
||||||
}
|
}
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
15
examples/WebRTC-Polymer/index.html
Normal file
15
examples/WebRTC-Polymer/index.html
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset=utf-8 />
|
||||||
|
<title>Y Example</title>
|
||||||
|
<script src="../../../webcomponentsjs/webcomponents.min.js"></script>
|
||||||
|
<link rel="import" href="../../../polymer/polymer.html">
|
||||||
|
|
||||||
|
<link rel="import" href="y-test.html">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<y-test></y-test>
|
||||||
|
<p> This example tests a few things like Late Join, the synchronization process while editing, and if the Connector and Yjs work together as Polymer elements. you can use this example as a starting point for your own Polymer project too. </p>
|
||||||
|
</body>
|
||||||
|
</html>
|
55
examples/WebRTC-Polymer/y-test.html
Normal file
55
examples/WebRTC-Polymer/y-test.html
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<link rel="import" href="../../build/browser/y-object.html">
|
||||||
|
<link rel="import" href="../../../y-webrtc/build/browser/y-webrtc.html">
|
||||||
|
<link rel="import" href="../../../paper-slider/paper-slider.html">
|
||||||
|
|
||||||
|
<polymer-element name="y-test" attributes="y connector stuff">
|
||||||
|
<template>
|
||||||
|
<h1 id="text" contentEditable> Check this out !</h1>
|
||||||
|
<y-webrtc id="connector" connector={{connector}} room="testy-webrtc-polymer" debug="true"></y-webrtc>
|
||||||
|
<y-object connector={{connector}} val={{y}}>
|
||||||
|
<y-property name="slider" val={{slider}}>
|
||||||
|
</y-property>
|
||||||
|
<y-property name="stuff" val={{stuff}}>
|
||||||
|
<y-property id="otherstuff" name="otherstuff" val={{otherstuff}}>
|
||||||
|
</y-property>
|
||||||
|
</y-property>
|
||||||
|
</y-object>
|
||||||
|
<y-object val={{otherstuff}}>
|
||||||
|
<y-property name="nostuff" val={{nostuff}}>
|
||||||
|
</y-property>
|
||||||
|
</y-object>
|
||||||
|
<paper-slider min="0" max="200" immediateValue={{slider}}></paper-slider>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
Polymer({
|
||||||
|
ready: function(){
|
||||||
|
window.y_stuff_property = this.$.otherstuff;
|
||||||
|
this.y.val("slider",50)
|
||||||
|
var that = this;
|
||||||
|
this.connector.whenSynced(function(){
|
||||||
|
if(that.y.val("text") == null){
|
||||||
|
that.y.val("text","stuff","mutable");
|
||||||
|
}
|
||||||
|
that.y.val("text").bind(that.$.text,that.shadowRoot)
|
||||||
|
})
|
||||||
|
|
||||||
|
// Everything is initialized. Lets test stuff!
|
||||||
|
window.y_test = this;
|
||||||
|
window.y_test.y.val("stuff",{otherstuff:{nostuff:"this is no stuff"}})
|
||||||
|
setTimeout(function(){
|
||||||
|
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(!(y_test.nostuff === "this is also no stuff")){
|
||||||
|
console.log("Element val overwrite doesn't work")
|
||||||
|
}
|
||||||
|
console.log("Everything is fine :)");
|
||||||
|
},500)
|
||||||
|
},500);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
</polymer-element>
|
20
examples/WebRTC/index.html
Normal file
20
examples/WebRTC/index.html
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset=utf-8 />
|
||||||
|
<title>Y Example</title>
|
||||||
|
<script src="../../build/browser/y.js"></script>
|
||||||
|
<script src="../../../y-webrtc/build/browser/y-webrtc.js"></script>
|
||||||
|
<script src="./index.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1 contentEditable> yjs Tutorial</h1>
|
||||||
|
<p> Collaborative Json editing with <a href="https://github.com/rwth-acis/yjs/">yjs</a>
|
||||||
|
and WebRTC Connector. </p>
|
||||||
|
|
||||||
|
<textarea style="width:80%;" rows=40 id="textfield"></textarea>
|
||||||
|
|
||||||
|
<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>
|
27
examples/WebRTC/index.js
Normal file
27
examples/WebRTC/index.js
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
|
||||||
|
connector = new Y.WebRTC("testy", {debug: true});
|
||||||
|
|
||||||
|
connector.debug = true
|
||||||
|
|
||||||
|
y = new Y(connector);
|
||||||
|
|
||||||
|
window.onload = function(){
|
||||||
|
var textbox = document.getElementById("textfield");
|
||||||
|
y.observe(function(events){
|
||||||
|
for(var i=0; i<events.length; i++){
|
||||||
|
var event = events[i];
|
||||||
|
if(event.name === "textfield" && event.type !== "delete"){
|
||||||
|
y.val("textfield").bind(textbox);
|
||||||
|
y.val("headline").bind(document.querySelector("h1"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
connector.whenSynced(function(){
|
||||||
|
if(y.val("textfield") == null){
|
||||||
|
y.val("headline","headline", "mutable");
|
||||||
|
y.val("textfield","stuff", "mutable")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
};
|
@ -41,10 +41,10 @@ module.exports =
|
|||||||
@receive_handlers ?= []
|
@receive_handlers ?= []
|
||||||
|
|
||||||
# whether this instance is bound to any y instance
|
# whether this instance is bound to any y instance
|
||||||
@is_bound_to_y = false
|
|
||||||
@connections = {}
|
@connections = {}
|
||||||
@current_sync_target = null
|
@current_sync_target = null
|
||||||
@sent_hb_to_all_users = false
|
@sent_hb_to_all_users = false
|
||||||
|
@is_initialized = true
|
||||||
|
|
||||||
isRoleMaster: ->
|
isRoleMaster: ->
|
||||||
@role is "master"
|
@role is "master"
|
||||||
@ -229,7 +229,7 @@ module.exports =
|
|||||||
else if res.sync_step is "applyHB"
|
else if res.sync_step is "applyHB"
|
||||||
@applyHB(res.data, sender is @current_sync_target)
|
@applyHB(res.data, sender is @current_sync_target)
|
||||||
|
|
||||||
if (@syncMethod is "syncAll" or res.sent_again?) and (not @is_synced) and (@current_sync_target is sender)
|
if (@syncMethod is "syncAll" or res.sent_again?) and (not @is_synced) and ((@current_sync_target is sender) or (not @current_sync_target?))
|
||||||
@connections[sender].is_synced = true
|
@connections[sender].is_synced = true
|
||||||
@findNewSyncTarget()
|
@findNewSyncTarget()
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user