blob: 90121ffb5e39f5ff58921b5efa6f569280472db2 [file] [log] [blame]
Carsten Ziegelerdef0aa22009-09-24 12:09:34 +00001/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
Valentin Valchev699cc022010-03-15 14:17:58 +000017var eventsTable = false;
Carsten Ziegelerdef0aa22009-09-24 12:09:34 +000018
19/* displays a date in the user's local timezone */
20function printDate(time) {
21 var date = time ? new Date(time) : new Date();
22 return date.toLocaleString();
23}
24
Valentin Valchev699cc022010-03-15 14:17:58 +000025function renderData( eventData ) {
26 $('.statline').html(eventData.status); // FIXME:
27
28 // append table view
29 eventsBody.empty();
30 for ( var i in eventData.data ) entry( eventData.data[i] );
31 eventsTable.trigger('update').trigger('applyWidgets');
32
33 // append timeline view
34 timeline.empty();
35 for ( var i in eventData.data ) entryTimeline( eventData.data[i] );
Carsten Ziegelerdef0aa22009-09-24 12:09:34 +000036}
37
Valentin Valchev699cc022010-03-15 14:17:58 +000038
39function entryTimeline( /* Object */ dataEntry ) {
40 var txt = '<div class="event event' + dataEntry.category + '" style="width:' + dataEntry.width + '%">' +
41 '<b>' + dataEntry.offset + '</b>&nbsp;<b>' + dataEntry.topic + '</b>';
42 if ( dataEntry.info ) txt += '&nbsp;:&nbsp;' + dataEntry.info;
43 txt += '</div>';
44 timeline.prepend(txt);
Carsten Ziegeler40f56e32009-09-24 14:33:35 +000045}
Valentin Valchev699cc022010-03-15 14:17:58 +000046
47function entry( /* Object */ dataEntry ) {
48 var properties = dataEntry.properties;
49
50 var propE;
51 if ( dataEntry.info ) {
52 propE = text(dataEntry.info);
53 } else {
Valentin Valchev699cc022010-03-15 14:17:58 +000054 var bodyE = createElement('tbody');
Valentin Valchev699cc022010-03-15 14:17:58 +000055 for( var p in dataEntry.properties ) {
56 bodyE.appendChild(tr(null, null, [
Valentin Valchevbb75c892010-03-24 07:34:38 +000057 td('propName', null, [text(p)]),
58 td('propVal' , null, [text(dataEntry.properties[p])])
Valentin Valchev699cc022010-03-15 14:17:58 +000059 ]));
60 }
Valentin Valchevbb75c892010-03-24 07:34:38 +000061 propE = createElement('table', 'propTable', null, [ bodyE ]);
Valentin Valchev699cc022010-03-15 14:17:58 +000062 }
63
64 $(tr( null, { id: 'entry' + dataEntry.id }, [
Valentin Valchev66702252011-09-19 09:32:50 +000065 td( 'time', null, [ text( printDate(dataEntry.received) ) ] ),
66 td( 'topic', null, [ text( dataEntry.topic ) ] ),
67 td( 'detailes', null, [ propE ] )
Valentin Valchev699cc022010-03-15 14:17:58 +000068 ])).appendTo(eventsBody);
69}
70
71var timeline = false;
Valentin Valchevbb75c892010-03-24 07:34:38 +000072var timelineLegend = false;
Valentin Valchev699cc022010-03-15 14:17:58 +000073$(document).ready(function(){
74 eventsTable = $('#eventsTable');
75 eventsBody = eventsTable.find('tbody');
76 timeline = $('#timeline');
Valentin Valchevbb75c892010-03-24 07:34:38 +000077 timelineLegend = $('#timelineLegend');
Valentin Valchev699cc022010-03-15 14:17:58 +000078
79 $('#clear').click(function () {
80 $.post(pluginRoot, { 'action':'clear' }, renderData, 'json');
Carsten Ziegelerdef0aa22009-09-24 12:09:34 +000081 });
Valentin Valchev699cc022010-03-15 14:17:58 +000082 $('#switch').click(function() {
83 var timelineHidden = timeline.hasClass('ui-helper-hidden');
84 if (timelineHidden) {
85 $(this).text(i18n.displayList);
86 timeline.removeClass('ui-helper-hidden');
Valentin Valchevbb75c892010-03-24 07:34:38 +000087 timelineLegend.removeClass('ui-helper-hidden');
Valentin Valchev699cc022010-03-15 14:17:58 +000088 eventsTable.addClass('ui-helper-hidden');
89 } else {
90 $(this).text(i18n.displayTimeline);
91 timeline.addClass('ui-helper-hidden');
Valentin Valchevbb75c892010-03-24 07:34:38 +000092 timelineLegend.addClass('ui-helper-hidden');
Valentin Valchev699cc022010-03-15 14:17:58 +000093 eventsTable.removeClass('ui-helper-hidden');
94 }
95 });
96 $('#reload').click(function() {
97 $.get(pluginRoot + '/data.json', null, renderData, 'json');
Valentin Valchev699cc022010-03-15 14:17:58 +000098 }).click();
Valentin Valchev66702252011-09-19 09:32:50 +000099
100 function sendData(action) {
101 // check topic
102 var topic = sendTopic.val();
103 var topicOk = topic.match(/^[\w-]+(\/[\w-]+)*$/g) != null;
104 if (topicOk) {
105 sendTopic.removeClass('ui-state-error');
106 } else {
Valentin Valchevd8be7302012-04-06 09:05:42 +0000107 sendTopic.addClass('ui-state-error');
Valentin Valchev66702252011-09-19 09:32:50 +0000108 }
109 var data = sendProperties.propeditor('serialize');
Valentin Valchevd8be7302012-04-06 09:05:42 +0000110 if (topicOk && typeof data != 'boolean') {
Valentin Valchev66702252011-09-19 09:32:50 +0000111 $.post(pluginRoot,
112 data.concat([
113 {name : 'action', value : action},
114 {name : 'topic', value : topic}
115 ]),
116 renderData,
117 'json'
118 );
119 sendDialog.dialog("close");
120 }
121 }
122
123 /* send dialog code */
124 var sendButtons = {};
125 sendButtons[i18n.close] = function() {
126 $(this).dialog("close");
127 }
Valentin Valchevd8be7302012-04-06 09:05:42 +0000128 sendButtons[i18n.reset] = function() {
Valentin Valchev0b61fb92012-04-06 09:07:58 +0000129 sendTopic.val('');
Valentin Valchevd8be7302012-04-06 09:05:42 +0000130 sendProperties.propeditor('reset');
131 }
Valentin Valchev66702252011-09-19 09:32:50 +0000132 sendButtons[i18n.send] = function() {
133 sendData('send');
134 }
135 sendButtons[i18n.post] = function() {
136 sendData('post');
137 }
138 var sendDialog = $('#sendDialog').dialog({
139 autoOpen: false,
140 modal : true,
141 width : '40%',
142 buttons : sendButtons,
143 open : function() {
Valentin Valchevd8be7302012-04-06 09:05:42 +0000144 //sendTopic.val('');
145 //sendProperties.propeditor('reset');
Valentin Valchev66702252011-09-19 09:32:50 +0000146 }
147 });
148 var sendTopic = $('#sendTopic');
149 var sendProperties = $('#sendProperties').propeditor({
150 add: function(el) {
151 el.find('select').addClass('dynhover');
152 initStaticWidgets(el);
153 }
154 });
155 $('#sendButton').click(function() {
156 sendDialog.dialog('open');
157 });
158
Valentin Valchev699cc022010-03-15 14:17:58 +0000159});