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 modal : 'one_main_admin_id_modal_password_modal',
147 submit : 'one_main_admin_id_modal_password_submit',
148 cancel : 'one_main_admin_id_modal_password_cancel',
150 old : 'one_main_admin_id_modal_password_form_old',
151 set : 'one_main_admin_id_modal_password_form_new',
152 verify : 'one_main_admin_id_modal_password_form_verify'
157 user : "one_main_admin_id_add_user"
163 password : '/admin/users/password/'
166 initialize : function(callback) {
167 var h3 = "Welcome " + $('#admin').text();
168 var footer = one.main.admin.modal.footer();
169 var $modal = one.lib.modal.spawn(one.main.admin.id.modal.main, h3,
173 $('#' + one.main.admin.id.modal.close, $modal).click(function() {
174 $modal.modal('hide');
178 one.main.admin.ajax.users(function($body) {
179 one.lib.modal.inject.body($modal, $body);
182 // modal show callback
185 footer : function() {
187 var closeButton = one.lib.dashlet.button.single('Close', one.main.admin.id.modal.close, '', '');
188 var $closeButton = one.lib.dashlet.button.button(closeButton);
189 footer.push($closeButton);
194 users : function(callback) {
195 $.getJSON(one.main.admin.address.root
196 + one.main.admin.address.users, function(data) {
197 var body = one.main.admin.data.users(data);
198 var $body = one.main.admin.body.users(body);
204 users : function(data) {
206 $(data).each(function(index, value) {
209 entry.push(value['user']);
210 entry.push(value['roles']);
212 tr['id'] = value['user'];
219 users : function(body) {
220 var $div = $(document.createElement('div'));
221 var $h5 = $(document.createElement('h5'));
222 $h5.append("Manage Users");
223 var attributes = [ "table-striped", "table-bordered",
224 "table-hover", "table-cursor" ];
225 var $table = one.lib.dashlet.table.table(attributes);
226 var headers = [ "User", "Role" ];
227 var $thead = one.lib.dashlet.table.header(headers);
228 var $tbody = one.lib.dashlet.table.body(body);
229 $table.append($thead).append($tbody);
233 $table.find('tr').click(function() {
234 var id = $(this).data('id');
235 one.main.admin.remove.modal.initialize(id);
240 $div.append($h5).append($table);
243 var addUserButton = one.lib.dashlet.button.single("Add User",
244 one.main.admin.id.add.user, "btn-primary", "btn-mini");
245 var $addUserButton = one.lib.dashlet.button
246 .button(addUserButton);
247 $div.append($addUserButton);
250 $addUserButton.click(function() {
251 one.main.admin.add.modal.initialize();
260 initialize : function(id) {
261 var h3 = "Edit User";
262 var footer = one.main.admin.remove.footer();
263 var $body = one.main.admin.remove.body();
264 var $modal = one.lib.modal.spawn(one.main.admin.id.modal.user,
267 $('#'+one.main.admin.id.modal.remove.close, $modal).click(function() {
268 $modal.modal('hide');
271 $('#' + one.main.admin.id.modal.remove.user, $modal).click(function() {
272 one.main.admin.remove.modal.ajax(id, function(result) {
273 if (result == 'Success') {
274 $modal.modal('hide');
276 var $admin = $('#'+one.main.admin.id.modal.main);
277 one.main.admin.ajax.users(function($body) {
278 one.lib.modal.inject.body($admin, $body);
281 alert("Failed to remove user: " + result);
285 // change password binding
286 $('#' + one.main.admin.id.modal.remove.password, $modal).click(function() {
287 one.main.admin.password.initialize(id, function() {
288 $modal.modal('hide');
293 ajax : function(id, callback) {
294 $.post(one.main.admin.address.root + one.main.admin.address.users + '/' + id, function(data) {
299 footer : function() {
301 var removeButton = one.lib.dashlet.button.single("Remove User",
302 one.main.admin.id.modal.remove.user, "btn-danger", "");
303 var $removeButton = one.lib.dashlet.button.button(removeButton);
304 footer.push($removeButton);
305 var change = one.lib.dashlet.button.single('Change Password',
306 one.main.admin.id.modal.remove.password, 'btn-success', '');
307 var $change = one.lib.dashlet.button.button(change);
308 footer.push($change);
309 var closeButton = one.lib.dashlet.button.single("Close",
310 one.main.admin.id.modal.remove.close, "", "");
311 var $closeButton = one.lib.dashlet.button.button(closeButton);
312 footer.push($closeButton);
316 var $p = $(document.createElement('p'));
317 $p.append('Select an action');
323 initialize : function() {
325 var footer = one.main.admin.add.footer();
326 var $body = one.main.admin.add.body();
327 var $modal = one.lib.modal.spawn(one.main.admin.id.modal.user,
330 $('#' + one.main.admin.id.modal.add.close, $modal).click(function() {
331 $modal.modal('hide');
334 $('#' + one.main.admin.id.modal.add.user, $modal).click(function() {
335 one.main.admin.add.modal.add($modal, function(result) {
336 if (result == 'Success') {
337 $modal.modal('hide');
339 var $admin = $('#'+one.main.admin.id.modal.main);
340 one.main.admin.ajax.users(function($body) {
341 one.lib.modal.inject.body($admin, $body);
344 alert("Failed to add user: "+result);
350 add : function($modal, callback) {
352 user['user'] = $modal.find(
353 '#' + one.main.admin.id.modal.add.form.name).val();
354 user['password'] = $modal.find(
355 '#' + one.main.admin.id.modal.add.form.password).val();
357 roles[0] = $modal.find(
358 '#' + one.main.admin.id.modal.add.form.role).find(
359 'option:selected').attr('value');
360 user['roles'] = roles;
363 var verify = $('#'+one.main.admin.id.modal.add.form.verify).val();
364 if (user.password != verify) {
365 alert('Passwords do not match');
370 resource['json'] = JSON.stringify(user);
371 resource['action'] = 'add'
373 one.main.admin.add.modal.ajax(resource, callback);
375 ajax : function(data, callback) {
376 $.post(one.main.admin.address.root
377 + one.main.admin.address.users, data, function(data) {
383 var $form = $(document.createElement('form'));
384 var $fieldset = $(document.createElement('fieldset'));
386 var $label = one.lib.form.label('Username');
387 var $input = one.lib.form.input('Username');
388 $input.attr('id', one.main.admin.id.modal.add.form.name);
389 $fieldset.append($label).append($input);
391 var $label = one.lib.form.label('Password');
392 var $input = one.lib.form.input('Password');
393 $input.attr('id', one.main.admin.id.modal.add.form.password);
394 $input.attr('type', 'password');
395 $fieldset.append($label).append($input);
397 var $label = one.lib.form.label('Verify Password');
398 var $input = one.lib.form.input('Verify Password');
399 $input.attr('id', one.main.admin.id.modal.add.form.verify);
400 $input.attr('type', 'password');
401 $fieldset.append($label).append($input);
403 var $label = one.lib.form.label('Roles');
405 "Network-Admin" : "Network Administrator",
406 "Network-Operator" : "Network Operator"
408 var $select = one.lib.form.select.create(options);
409 $select.attr('id', one.main.admin.id.modal.add.form.role);
410 $fieldset.append($label).append($select);
411 $form.append($fieldset);
414 footer : function() {
417 var addButton = one.lib.dashlet.button.single("Add User",
418 one.main.admin.id.modal.add.user, "btn-primary", "");
419 var $addButton = one.lib.dashlet.button.button(addButton);
420 footer.push($addButton);
422 var closeButton = one.lib.dashlet.button.single("Close",
423 one.main.admin.id.modal.add.close, "", "");
424 var $closeButton = one.lib.dashlet.button.button(closeButton);
425 footer.push($closeButton);
431 initialize : function(id, successCallback) {
432 var h3 = 'Change Password';
433 var footer = one.main.admin.password.footer();
434 var $body = one.main.admin.password.body(id);;
435 var $modal = one.lib.modal.spawn(one.main.admin.id.modal.password.modal,
439 $('#'+one.main.admin.id.modal.password.cancel, $modal).click(function() {
440 $modal.modal('hide');
443 // change password binding
444 $('#'+one.main.admin.id.modal.password.submit, $modal).click(function() {
445 one.main.admin.password.submit(id, $modal, function(result) {
446 if (result.code == 'SUCCESS') {
447 $modal.modal('hide');
450 alert(result.code+': '+result.description);
457 submit : function(id, $modal, callback) {
459 resource.newPassword = $('#'+one.main.admin.id.modal.password.form.set, $modal).val();
462 var verify = $('#'+one.main.admin.id.modal.password.form.verify, $modal).val();
463 if (verify != resource.newPassword) {
464 alert('Passwords do not match');
468 resource.currentPassword = $('#'+one.main.admin.id.modal.password.form.old, $modal).val();
470 $.post(one.main.admin.address.password+id, resource, function(data) {
474 body : function(id) {
475 var $form = $(document.createElement('form'));
476 var $fieldset = $(document.createElement('fieldset'));
478 var $label = one.lib.form.label('Username');
479 var $input = one.lib.form.input('');
480 $input.attr('disabled', 'disabled');
482 $fieldset.append($label)
485 var $label = one.lib.form.label('Old Password');
486 var $input = one.lib.form.input('Old Password');
487 $input.attr('id', one.main.admin.id.modal.password.form.old);
488 $input.attr('type', 'password');
489 $fieldset.append($label).append($input);
491 var $label = one.lib.form.label('New Password');
492 var $input = one.lib.form.input('New Password');
493 $input.attr('id', one.main.admin.id.modal.password.form.set);
494 $input.attr('type', 'password');
495 $fieldset.append($label).append($input);
496 // verify new password
497 var $label = one.lib.form.label('Verify Password');
498 var $input = one.lib.form.input('Verify Password');
499 $input.attr('id', one.main.admin.id.modal.password.form.verify);
500 $input.attr('type', 'password');
501 $fieldset.append($label).append($input);
503 $form.append($fieldset);
506 footer : function() {
508 var submit = one.lib.dashlet.button.single('Submit',
509 one.main.admin.id.modal.password.submit, 'btn-primary', '');
510 var $submit = one.lib.dashlet.button.button(submit);
511 footer.push($submit);
512 var cancel = one.lib.dashlet.button.single('Cancel',
513 one.main.admin.id.modal.password.cancel, '', '');
514 var $cancel = one.lib.dashlet.button.button(cancel);
515 footer.push($cancel);
522 id : { // one.main.cluster.id
523 modal : 'one-main-cluster-id-modal',
524 close : 'one-main-cluster-id-close',
525 datagrid : 'one-main-cluster-id-datagrid'
527 initialize : function() {
528 var h3 = 'Cluster Management';
529 var footer = one.main.cluster.footer();
531 var $modal = one.lib.modal.spawn(one.main.cluster.id.modal, h3, $body, footer);
534 $('#'+one.main.cluster.id.close, $modal).click(function() {
535 $modal.modal('hide');
539 $.getJSON('/admin/cluster', function(data) {
540 var $gridHTML = one.lib.dashlet.datagrid.init(one.main.cluster.id.datagrid, {
544 flexibleRowsPerPage: true
545 }, 'table-striped table-condensed table-cursor');
546 var source = one.main.cluster.data(data);
547 $gridHTML.datagrid({dataSource : source}).on('loaded', function() {
548 $(this).find('tbody tr').click(function() {
550 if ($tr.find('td:nth-child(1)').attr('colspan') === '1') {
553 var address = $tr.find('.ux-id').text();
554 one.main.cluster.nodes.initialize(address);
557 one.lib.modal.inject.body($modal, $gridHTML);
562 data : function(data) {
565 $(data).each(function(idx, controller) {
566 var name = controller.name;
567 var address = controller.address;
568 var $registry = $(document.createElement('span'));
570 .append(JSON.stringify(address))
571 .css('display', 'none')
573 name = one.lib.dashlet.label(name, null)[0].outerHTML;
574 name += $registry[0].outerHTML;
575 if (controller.me === true) {
576 var me = one.lib.dashlet.label('*', 'label-inverse')[0].outerHTML;
579 if (controller.coordinator === true) {
580 var coord = one.lib.dashlet.label('C')[0].outerHTML;
581 name += ' '+coord;
585 'numNodes' : controller.numConnectedNodes
588 var source = new StaticDataSource({
591 property : 'controller',
592 label : 'Controller',
596 property : 'numNodes',
606 footer : function() {
608 var close = one.lib.dashlet.button.single('Close', one.main.cluster.id.close, '', '');
609 var $close = one.lib.dashlet.button.button(close);
615 one.main.cluster.nodes = {
616 id : { // one.main.cluster.nodes.id
617 modal : 'one-main-cluster-nodes-id-modal',
618 close : 'one-main-cluster-nodes-id-close',
619 datagrid : 'one-main-cluser-nodes-id-datagrid'
621 initialize : function(address) { // one.main.cluster.nodes.initialize
622 var h3 = 'Connected Nodes';
623 var footer = one.main.cluster.nodes.footer();
625 var $modal = one.lib.modal.spawn(one.main.cluster.nodes.id.modal, h3, $body, footer);
628 $('#'+one.main.cluster.nodes.id.close, $modal).click(function() {
629 $modal.modal('hide');
633 $.getJSON('/admin/cluster/controller/'+address, function(data) {
634 var $gridHTML = one.lib.dashlet.datagrid.init(one.main.cluster.nodes.id.datagrid, {
638 flexibleRowsPerPage: true
639 }, 'table-striped table-condensed');
640 var source = one.main.cluster.nodes.data(data);
641 $gridHTML.datagrid({dataSource : source});
642 one.lib.modal.inject.body($modal, $gridHTML);
647 data : function(data) {
649 $(data).each(function(idx, val) {
651 'node' : val.description
654 var source = new StaticDataSource({
667 footer : function() { // one.main.cluster.nodes.footer
669 var close = one.lib.dashlet.button.single('Close', one.main.cluster.nodes.id.close, '', '');
670 var $close = one.lib.dashlet.button.button(close);
678 top : $("#left-top .dashlet"),
679 bottom : $("#left-bottom .dashlet")
682 bottom : $("#right-bottom .dashlet")
687 $(".modal").on('hidden', function() {
691 $("#alert .close").click(function() {
698 one.role = $('#admin').data('role');
701 $("#admin").click(function() {
702 one.main.admin.modal.initialize(function($modal) {
708 $('#cluster').click(function() {
709 one.main.cluster.initialize();
713 $("#save").click(function() {
714 $.post(one.main.constants.address.save, function(data) {
715 if (data == "Success") {
716 one.lib.alert("Configuration Saved");
718 one.lib.alert("Unable to save configuration: " + data);
724 $("#logout").click(function() {
725 location.href = "/logout";
729 complete : function(xhr, textStatus) {
730 var mime = xhr.getResponseHeader('Content-Type');
731 if (mime.substring(0, 9) == 'text/html') {
737 /** MAIN PAGE LOAD */
738 one.main.menu.load();