6 prefix : "/controller/web",
16 one.main.menu.ajax(function(data) {
17 // reparse the ajax data
18 var result = one.main.menu.data.menu(data);
19 // transform into list to append to menu
20 var $div = one.main.menu.menu(result);
22 $("#menu .nav").append($div.children());
23 // binding all menu items
24 var $menu = $("#menu .nav a");
25 $menu.click(function() {
26 if (one.main.menu.registry.load === true) {
29 one.main.menu.registry.load = true;
30 var href = $(this).attr('href').substring(1);
31 one.main.page.load(href);
32 var $li = $(this).parent();
33 // reset all other active
34 $menu.each(function(index, value) {
35 $(value).parent().removeClass('active');
37 $li.addClass('active');
39 // reset or go to first menu item by default
40 var currentLocation = location.hash;
41 if (data[currentLocation.substring(1)] == undefined) {
44 $menu.each(function(index, value) {
45 var menuLocation = $(value).attr('href');
46 if (currentLocation == menuLocation) {
47 $($menu[index]).click();
54 menu : function(result) {
55 var $div = $(document.createElement('div'));
56 $(result).each(function(index, value) {
57 if (value != undefined) {
58 var $li = $(document.createElement('li'));
59 var $a = $(document.createElement('a'));
60 $a.text(value['name']);
61 $a.attr('href', '#' + value['id']);
68 ajax : function(successCallback) {
69 $.getJSON(one.main.constants.address.menu, function(data) {
70 successCallback(data);
74 menu : function(data) {
76 $.each(data, function(key, value) {
77 var order = value['order'];
79 var name = value['name'];
84 result[order] = entry;
93 load : function(page) {
94 if (one.f !== undefined && one.f.cleanUp !== undefined) {
99 $('.dashlet', '#main').empty();
100 $('.nav', '#main').empty();
102 $.getScript(one.main.constants.address.prefix+"/"+page+"/js/page.js")
103 .success(function() {
104 one.main.menu.registry.load = false;
113 dashlet : function($nav, dashlet) {
114 var $li = $(document.createElement('li'));
115 var $a = $(document.createElement('a'));
116 $a.text(dashlet.name);
117 $a.attr('id', dashlet.id);
118 $a.attr('href', '#');
127 main : "one_main_admin_id_modal_main",
128 close : "one_main_admin_id_modal_close",
129 user : "one_main_admin_id_modal_user",
131 user : "one_main_admin_id_modal_add_user",
132 close : "one_main_admin_id_modal_add_close",
134 name : "one_main_admin_id_modal_add_form_name",
135 role : "one_main_admin_id_modal_add_form_role",
136 password : "one_main_admin_id_modal_add_form_password",
137 verify : "one_main_admin_id_modal_add_form_verify"
141 user : "one_main_admin_id_modal_remove_user",
142 close : "one_main_admin_id_modal_remove_close",
143 password : 'one_main_admin_id_modal_remove_password'
146 user : "one_main_admin_id_modal_modify_user",
149 modal : 'one_main_admin_id_modal_password_modal',
150 submit : 'one_main_admin_id_modal_password_submit',
151 cancel : 'one_main_admin_id_modal_password_cancel',
153 old : 'one_main_admin_id_modal_password_form_old',
154 set : 'one_main_admin_id_modal_password_form_new',
155 verify : 'one_main_admin_id_modal_password_form_verify'
160 user : "one_main_admin_id_add_user"
169 modifyUser : "/user/modify",
170 password : '/admin/users/password/'
173 initialize : function(callback) {
174 var h3 = "Welcome " + $('#admin').text();
175 var footer = one.main.admin.modal.footer();
176 var $modal = one.lib.modal.spawn(one.main.admin.id.modal.main, h3,
180 $('#' + one.main.admin.id.modal.close, $modal).click(function() {
181 $modal.modal('hide');
185 one.main.admin.ajax.users(function($body) {
186 one.lib.modal.inject.body($modal, $body);
189 // modal show callback
192 footer : function() {
194 var closeButton = one.lib.dashlet.button.single('Close', one.main.admin.id.modal.close, '', '');
195 var $closeButton = one.lib.dashlet.button.button(closeButton);
196 footer.push($closeButton);
201 users : function(callback) {
202 $.getJSON(one.main.admin.address.root
203 + one.main.admin.address.users, function(data) {
204 var body = one.main.admin.data.users(data);
205 one.main.admin.registry["users"] = data;
206 var $body = one.main.admin.body.users(body);
212 users : function(data) {
214 $(data).each(function(index, value) {
217 entry.push(value['user']);
218 entry.push(value['roles']);
220 tr['id'] = value['user'];
227 users : function(body) {
228 var $div = $(document.createElement('div'));
229 var $h5 = $(document.createElement('h5'));
230 $h5.append("Manage Users");
231 var attributes = [ "table-striped", "table-bordered",
232 "table-hover", "table-cursor" ];
233 var $table = one.lib.dashlet.table.table(attributes);
234 var headers = [ "User", "Role" ];
235 var $thead = one.lib.dashlet.table.header(headers);
236 var $tbody = one.lib.dashlet.table.body(body);
237 $table.append($thead).append($tbody);
241 $table.find('tr').click(function() {
242 var id = $(this).data('id');
243 one.main.admin.remove.modal.initialize(id);
248 $div.append($h5).append($table);
251 var addUserButton = one.lib.dashlet.button.single("Add User",
252 one.main.admin.id.add.user, "btn-primary", "btn-mini");
253 var $addUserButton = one.lib.dashlet.button
254 .button(addUserButton);
255 $div.append($addUserButton);
258 $addUserButton.click(function() {
259 one.main.admin.add.modal.initialize();
268 initialize : function(id) {
269 var h3 = "Manage user - " + id;
270 var footer = one.main.admin.remove.footer();
271 var $body = one.main.admin.remove.body();
272 var $modal = one.lib.modal.spawn(one.main.admin.id.modal.user,
275 $('#'+one.main.admin.id.modal.remove.close, $modal).click(function() {
276 $modal.modal('hide');
279 $('#'+one.main.admin.id.modal.modify.user, $modal).click(function() {
280 one.main.admin.add.modal.initialize(id, true);
283 $('#' + one.main.admin.id.modal.remove.user, $modal).click(function() {
284 one.main.admin.remove.modal.ajax(id, function(result) {
285 if (result.description == 'Success') {
286 $modal.modal('hide');
288 var $admin = $('#'+one.main.admin.id.modal.main);
289 one.main.admin.ajax.users(function($body) {
290 one.lib.modal.inject.body($admin, $body);
293 alert("Failed to remove user: " + result.description);
297 // change password binding
298 $('#' + one.main.admin.id.modal.remove.password, $modal).click(function() {
299 one.main.admin.password.initialize(id, function() {
300 $modal.modal('hide');
305 ajax : function(id, callback) {
306 $.post(one.main.admin.address.root + one.main.admin.address.users + '/' + id, function(data) {
311 footer : function() {
313 var removeButton = one.lib.dashlet.button.single("Remove User",
314 one.main.admin.id.modal.remove.user, "btn-danger", "");
315 var $removeButton = one.lib.dashlet.button.button(removeButton);
316 footer.push($removeButton);
317 var modifyButton = one.lib.dashlet.button.single("Change Role",
318 one.main.admin.id.modal.modify.user, "btn-success", "");
319 var $modifyButton = one.lib.dashlet.button.button(modifyButton);
320 footer.push($modifyButton);
321 var change = one.lib.dashlet.button.single('Change Password',
322 one.main.admin.id.modal.remove.password, 'btn-success', '');
323 var $change = one.lib.dashlet.button.button(change);
324 footer.push($change);
325 var closeButton = one.lib.dashlet.button.single("Close",
326 one.main.admin.id.modal.remove.close, "", "");
327 var $closeButton = one.lib.dashlet.button.button(closeButton);
328 footer.push($closeButton);
332 var $p = $(document.createElement('p'));
333 $p.append('Select an action');
339 initialize : function(id, edit) {
340 var h3 = edit? "Change Role of user " + id:"Add User";
341 var footer = one.main.admin.add.footer(edit);
342 var $body = one.main.admin.add.body(id, edit);
343 var $modal = one.lib.modal.spawn(one.main.admin.id.modal.user,
346 $('#' + one.main.admin.id.modal.add.close, $modal).click(function() {
347 $modal.modal('hide');
350 $('#' + one.main.admin.id.modal.add.user, $modal).click(function() {
351 one.main.admin.add.modal.add($modal, edit, function(result) {
352 if (result.description == 'Success') {
353 $modal.modal('hide');
355 var $admin = $('#'+one.main.admin.id.modal.main);
356 one.main.admin.ajax.users(function($body) {
357 one.lib.modal.inject.body($admin, $body);
360 var action = edit? "edit" :"add";
361 alert("Failed to "+ action +" user: "+result.description);
367 add : function($modal, edit, callback) {
369 user['user'] = $modal.find(
370 '#' + one.main.admin.id.modal.add.form.name).val();
372 user['password'] = $modal.find(
373 '#' + one.main.admin.id.modal.add.form.password).val();
376 roles[0] = $modal.find(
377 '#' + one.main.admin.id.modal.add.form.role).find(
378 'option:selected').attr('value');
379 user['roles'] = roles;
383 var verify = $('#'+one.main.admin.id.modal.add.form.verify).val();
384 if (user.password != verify) {
385 alert('Passwords do not match');
390 resource['json'] = JSON.stringify(user);
391 resource['action'] = 'add'
393 one.main.admin.add.modal.ajax(resource, edit, callback);
395 ajax : function(data, edit, callback) {
397 $.post(one.main.admin.address.root
398 + one.main.admin.address.modifyUser, data, function(data) {
402 $.post(one.main.admin.address.root
403 + one.main.admin.address.users, data, function(data) {
409 body : function(id, edit) {
410 var $form = $(document.createElement('form'));
411 var $fieldset = $(document.createElement('fieldset'));
412 var users = one.main.admin.registry["users"];
415 $(users).each(function(index, val) {
423 var $label = one.lib.form.label('Username');
424 var $input = one.lib.form.input('Username');
425 $input.attr('id', one.main.admin.id.modal.add.form.name);
427 $input.attr("disabled",true);
430 $fieldset.append($label).append($input);
433 var $label = one.lib.form.label('Password');
434 var $input = one.lib.form.input('Password');
435 $input.attr('id', one.main.admin.id.modal.add.form.password);
436 $input.attr('type', 'password');
437 $fieldset.append($label).append($input);
439 var $label = one.lib.form.label('Verify Password');
440 var $input = one.lib.form.input('Verify Password');
441 $input.attr('id', one.main.admin.id.modal.add.form.verify);
442 $input.attr('type', 'password');
443 $fieldset.append($label).append($input);
446 var $label = one.lib.form.label('Roles');
448 "Network-Admin" : "Network Administrator",
449 "Network-Operator" : "Network Operator"
451 var $select = one.lib.form.select.create(options);
452 $select.attr('id', one.main.admin.id.modal.add.form.role);
454 $select.children().each(function() {
455 this.selected = (this.text == options[currentUser.roles[0]]);
459 $fieldset.append($label).append($select);
460 $form.append($fieldset);
463 footer : function(edit) {
466 var buttonText = edit ? "Update User" : "Add User";
468 var addButton = one.lib.dashlet.button.single(buttonText,
469 one.main.admin.id.modal.add.user, "btn-primary", "");
470 var $addButton = one.lib.dashlet.button.button(addButton);
471 footer.push($addButton);
473 var closeButton = one.lib.dashlet.button.single("Close",
474 one.main.admin.id.modal.add.close, "", "");
475 var $closeButton = one.lib.dashlet.button.button(closeButton);
476 footer.push($closeButton);
482 initialize : function(id, successCallback) {
483 var h3 = 'Change Password';
484 var footer = one.main.admin.password.footer();
485 var $body = one.main.admin.password.body(id);;
486 var $modal = one.lib.modal.spawn(one.main.admin.id.modal.password.modal,
490 $('#'+one.main.admin.id.modal.password.cancel, $modal).click(function() {
491 $modal.modal('hide');
494 // change password binding
495 $('#'+one.main.admin.id.modal.password.submit, $modal).click(function() {
496 one.main.admin.password.submit(id, $modal, function(result) {
497 if (result.success) {
498 //if changed own password, enforce relogin
499 if (id.trim() == $('#currentuser').val().trim()) {
500 alert("Password changed successfully. Please re-login with your new password.");
501 window.location = '/';
504 alert(result.code+': '+result.description);
511 submit : function(id, $modal, callback) {
513 resource.newPassword = $('#'+one.main.admin.id.modal.password.form.set, $modal).val();
516 var verify = $('#'+one.main.admin.id.modal.password.form.verify, $modal).val();
517 if (verify != resource.newPassword) {
518 alert('Passwords do not match');
522 resource.currentPassword = $('#'+one.main.admin.id.modal.password.form.old, $modal).val();
524 $.post(one.main.admin.address.password+id, resource, function(data) {
528 body : function(id) {
529 var $form = $(document.createElement('form'));
530 var $fieldset = $(document.createElement('fieldset'));
532 var $label = one.lib.form.label('Username');
533 var $input = one.lib.form.input('');
534 $input.attr('disabled', 'disabled');
536 $fieldset.append($label)
539 var $label = one.lib.form.label('Old Password');
540 var $input = one.lib.form.input('Old Password');
541 $input.attr('id', one.main.admin.id.modal.password.form.old);
542 $input.attr('type', 'password');
543 $fieldset.append($label).append($input);
545 var $label = one.lib.form.label('New Password');
546 var $input = one.lib.form.input('New Password');
547 $input.attr('id', one.main.admin.id.modal.password.form.set);
548 $input.attr('type', 'password');
549 $fieldset.append($label).append($input);
550 // verify new password
551 var $label = one.lib.form.label('Verify Password');
552 var $input = one.lib.form.input('Verify Password');
553 $input.attr('id', one.main.admin.id.modal.password.form.verify);
554 $input.attr('type', 'password');
555 $fieldset.append($label).append($input);
557 $form.append($fieldset);
560 footer : function() {
562 var submit = one.lib.dashlet.button.single('Submit',
563 one.main.admin.id.modal.password.submit, 'btn-primary', '');
564 var $submit = one.lib.dashlet.button.button(submit);
565 footer.push($submit);
566 var cancel = one.lib.dashlet.button.single('Cancel',
567 one.main.admin.id.modal.password.cancel, '', '');
568 var $cancel = one.lib.dashlet.button.button(cancel);
569 footer.push($cancel);
576 id : { // one.main.cluster.id
577 modal : 'one-main-cluster-id-modal',
578 close : 'one-main-cluster-id-close',
579 datagrid : 'one-main-cluster-id-datagrid'
581 initialize : function() {
582 var h3 = 'Cluster Management';
583 var footer = one.main.cluster.footer();
585 var $modal = one.lib.modal.spawn(one.main.cluster.id.modal, h3, $body, footer);
588 $('#'+one.main.cluster.id.close, $modal).click(function() {
589 $modal.modal('hide');
593 $.getJSON('/admin/cluster', function(data) {
594 var $gridHTML = one.lib.dashlet.datagrid.init(one.main.cluster.id.datagrid, {
598 flexibleRowsPerPage: true
599 }, 'table-striped table-condensed table-cursor');
600 var source = one.main.cluster.data(data);
601 $gridHTML.datagrid({dataSource : source}).on('loaded', function() {
602 $(this).find('tbody tr').click(function() {
604 if ($tr.find('td:nth-child(1)').attr('colspan') === '1') {
607 var address = $tr.find('.ux-id').text();
608 one.main.cluster.nodes.initialize(address);
611 one.lib.modal.inject.body($modal, $gridHTML);
616 data : function(data) {
619 $(data).each(function(idx, controller) {
620 var name = controller.name;
621 var address = controller.address;
622 var $registry = $(document.createElement('span'));
624 .append(JSON.stringify(address))
625 .css('display', 'none')
627 name = one.lib.dashlet.label(name, null)[0].outerHTML;
628 name += $registry[0].outerHTML;
629 if (controller.me === true) {
630 var me = one.lib.dashlet.label('*', 'label-inverse')[0].outerHTML;
633 if (controller.coordinator === true) {
634 var coord = one.lib.dashlet.label('C')[0].outerHTML;
635 name += ' '+coord;
639 'numNodes' : controller.numConnectedNodes
642 var source = new StaticDataSource({
645 property : 'controller',
646 label : 'Controller',
650 property : 'numNodes',
660 footer : function() {
662 var close = one.lib.dashlet.button.single('Close', one.main.cluster.id.close, '', '');
663 var $close = one.lib.dashlet.button.button(close);
669 one.main.cluster.nodes = {
670 id : { // one.main.cluster.nodes.id
671 modal : 'one-main-cluster-nodes-id-modal',
672 close : 'one-main-cluster-nodes-id-close',
673 datagrid : 'one-main-cluser-nodes-id-datagrid'
675 initialize : function(address) { // one.main.cluster.nodes.initialize
676 var h3 = 'Connected Nodes';
677 var footer = one.main.cluster.nodes.footer();
679 var $modal = one.lib.modal.spawn(one.main.cluster.nodes.id.modal, h3, $body, footer);
682 $('#'+one.main.cluster.nodes.id.close, $modal).click(function() {
683 $modal.modal('hide');
687 $.getJSON('/admin/cluster/controller/'+address, function(data) {
688 var $gridHTML = one.lib.dashlet.datagrid.init(one.main.cluster.nodes.id.datagrid, {
692 flexibleRowsPerPage: true
693 }, 'table-striped table-condensed');
694 var source = one.main.cluster.nodes.data(data);
695 $gridHTML.datagrid({dataSource : source});
696 one.lib.modal.inject.body($modal, $gridHTML);
701 data : function(data) {
703 $(data).each(function(idx, val) {
705 'node' : val.description
708 var source = new StaticDataSource({
721 footer : function() { // one.main.cluster.nodes.footer
723 var close = one.lib.dashlet.button.single('Close', one.main.cluster.nodes.id.close, '', '');
724 var $close = one.lib.dashlet.button.button(close);
732 top : $("#left-top .dashlet"),
733 bottom : $("#left-bottom .dashlet")
736 bottom : $("#right-bottom .dashlet")
741 $(".modal").on('hidden', function() {
745 $("#alert .close").click(function() {
752 one.role = $('#admin').data('role');
755 $("#admin").click(function() {
756 one.main.admin.modal.initialize(function($modal) {
762 $('#cluster').click(function() {
763 one.main.cluster.initialize();
767 $("#save").click(function() {
768 $.post(one.main.constants.address.save, function(data) {
769 if (data == "Success") {
770 one.lib.alert("Configuration Saved");
772 one.lib.alert("Unable to save configuration: " + data);
778 $("#logout").click(function() {
779 location.href = "/logout";
782 // felix osgi runtime
783 $("#osgi").click(function() {
784 window.open("/controller/osgi/system/console", '_newtab');
788 complete : function(xhr, textStatus) {
789 var mime = xhr.getResponseHeader('Content-Type');
790 if (mime.substring(0, 9) == 'text/html') {
796 /** MAIN PAGE LOAD */
797 one.main.menu.load();