3 socket: null, // TMとの通信用ソケット。
4 port: 0, // ソケットのポート番号。
6 edit_mode: false, // 編集モード判別フラグ。
10 segments: null, // パラグラフの連想配列。
15 wordring.segments = Array();
16 var elements = document.getElementsByTagName('span');
19 for(; i < elements.length ; i++)
21 element = elements.item(i);
22 if(!element.hasAttribute('data-wordring-segment')) continue;
24 var id = element.getAttribute('data-wordring-segment');
26 segment.segment_id = id;
27 segment.loaded = false;
28 segment.element = element;
29 segment.html = element.innerHTML;
30 wordring.segments[id] = segment;
33 wordring.socket = new WebSocket('ws://localhost:' + window.wordring.port + '/');
34 wordring.socket.onopen = wordring.onopen;
35 wordring.socket.onmessage = wordring.onmessage;
36 wordring.socket.onerror = wordring.onerror;
37 wordring.socket.onclose = wordring.onclose;
40 onopen: function(ev) {
41 document.addEventListener('click', wordring.onclick);
42 window.addEventListener('focus', wordring.onfocus);
43 window.addEventListener('blur', wordring.onblur);
45 wordring.socket.send(JSON.stringify({
47 'url': window.wordring.url,
50 // 全てのセグメントの対して、セグメントの情報を送信する。
51 var length = wordring.segments.length;
53 for(; i < length; i++) {
54 var segment = wordring.segments[i];
55 wordring.socket.send(JSON.stringify({
56 'cmd': 'load_segment',
57 'segment_id': segment.segment_id,
63 onmessage: function(ev) {
64 var json = JSON.parse(ev.data);
67 case 'set_segment': wordring.set_segment(json); break;
68 case 'set_edit_mode': wordring.set_edit_mode(json); break;
69 case 'segment_loaded': wordring.segment_loaded(json); break;
73 onerror: function(ev) {
74 //document.location.href = 'http://www.yahoo.co.jp/';
77 onclose: function(ev) {
78 //alert('接続が閉じられました');
81 onfocus: function(ev) {
82 wordring.socket.send(JSON.stringify({
88 wordring.socket.send(JSON.stringify({
94 onclick: function(ev) {
95 if(!wordring.edit_mode) return;
98 for(node = ev.target; node.nodeType == Node.ELEMENT_NODE; node = node.parentNode) {
99 if(node.hasAttribute('data-wordring-segment'))
101 var id = node.getAttribute('data-wordring-segment');
102 var segment = wordring.segments[id];
103 if(segment.loaded) break;
104 wordring.socket.send(JSON.stringify({
105 'cmd': 'edit_segment',
106 'segment_id': segment.segment_id,
113 set_segment: function(json) {
114 var segment_id = json.segment_id;
115 wordring.segments[segment_id].element.innerHTML = json.html;
118 set_edit_mode: function(json) {
119 wordring.edit_mode = json.edit_mode;
122 segment_loaded: function(json) {
123 var segment_id = json.segment_id;
124 var segment = wordring.segments[segment_id];
125 segment.loaded = true;
126 segment.element.className = '';
130 window.addEventListener('load', function(ev){