14 one.lib.registry = {};
18 empty : function($dashlet) {
21 append : function($dashlet, $content) {
22 $dashlet.append($content);
24 header : function(header) {
25 var $h4 = $(document.createElement('h4'));
29 list : function(list) {
30 var $ul = $(document.createElement('ul'));
31 $(list).each(function(index, value) {
32 var $li = $(document.createElement('li'));
39 config : function(name, id, type, size) {
41 button['name'] = name;
43 button['type'] = type;
44 button['size'] = size;
47 single : function(name, id, type, size) {
49 var button = one.lib.dashlet.button.config(name, id, type, size);
50 buttonList.push(button);
53 button : function(buttonList) {
54 var $buttonGroup = $(document.createElement('div'));
55 $buttonGroup.addClass("btn-group");
56 $(buttonList).each(function(index, value) {
57 var $button = $(document.createElement('button'));
58 $button.text(value.name);
59 $button.addClass('btn');
60 $button.addClass(value['type']);
61 $button.addClass(value['size']);
62 if(!(typeof value.id === 'undefined')) {
63 $button.attr('id', value.id);
65 $buttonGroup.append($button);
71 table : function(classes, id) {
72 var $table = $(document.createElement('table'));
73 $table.addClass("table");
74 $(classes).each(function(index, value) {
75 $table.addClass(value);
77 if (!(typeof id === 'undefined'))
78 $table.attr("id", id);
81 header : function(headers) {
82 var $thead = $(document.createElement('thead'));
83 var $tr = $(document.createElement('tr'));
84 $(headers).each(function(index, value) {
85 $th = $(document.createElement('th'));
92 body : function(body, thead) {
93 var $tbody = $(document.createElement('tbody'));
95 if (body.length == 0 && !(typeof thead === 'undefined')) {
96 var $tr = $(document.createElement('tr'));
97 var $td = $(document.createElement('td'));
98 $td.attr("colspan", thead.length);
99 $td.text("No data available");
100 $td.addClass("empty");
105 // else, populate as usual
106 $(body).each(function(index, value) {
107 var $tr = $(document.createElement('tr'));
109 if(value['id'] != undefined) {
110 $tr.attr('data-id', value['id']);
113 $(value["type"]).each(function(index, value) {
117 $(value["entry"]).each(function(index, value) {
118 var $td = $(document.createElement('td'));
127 description : function(description, horizontal) {
128 var $dl = $(document.createElement('dl'));
129 if(horizontal == true) {
130 $dl.addClass("dl-horizontal");
132 $(description).each(function(index, value) {
133 var $dt = $(document.createElement('dt'));
135 var $dd = $(document.createElement('dd'));
137 $dl.append($dt).append($dd);
145 // clone default modal
146 clone : function(id) {
147 var $clone = $("#modal").clone(true);
148 $clone.attr("id", id);
152 populate : function($modal, header, $body, footer) {
153 var $h3 = $modal.find("h3");
156 var $modalBody = $modal.find(".modal-body");
157 $modalBody.append($body);
159 $(footer).each(function(index, value) {
160 $modal.find(".modal-footer").append(value);
163 // clone and populate modal
164 spawn : function(id, header, $body, footer) {
165 var $modal = one.lib.modal.clone(id);
166 one.lib.modal.populate($modal, header, $body, footer);
170 empty : function($modal) {
171 $modal.find("h3").empty();
172 $modal.find(".modal-body").empty();
173 $modal.find(".modal-footer").empty();
177 body : function($modal, $body) {
178 $modal.find(".modal-body").empty();
179 $modal.find(".modal-body").append($body);
186 // create select-option form element
188 create : function(options, multiple) {
189 // assert - auto assign
190 if(options == undefined) options = {};
192 var $select = $(document.createElement('select'));
193 if (multiple == true) {
194 $select.attr("multiple", "multiple");
196 var optionArray = one.lib.form.select.options(options);
197 $(optionArray).each(function(index, value) {
198 $select.append(value);
202 options : function(options) {
204 $.each(options, function(key, value) {
205 var $option = $(document.createElement('option'));
206 $option.attr("value", key);
208 result.push($option);
212 empty : function($select) {
215 inject : function($select, options) {
217 var options = one.lib.form.select.options(options);
218 $select.append(options);
220 prepend : function($select, options) {
221 var options = one.lib.form.select.options(options);
222 $select.prepend(options);
224 bubble : function($select, bubble) {
225 $($select.find("option")).each(function(index, value) {
226 if( $(value).attr("value") == bubble ) {
227 var option = $(value);
229 $select.prepend(option);
235 // create legend form element
236 legend : function(name) {
237 var $legend = $(document.createElement('legend'));
241 // create label form element
242 label : function(name) {
243 var $label = $(document.createElement('label'));
247 // create help block form element
248 help : function(help) {
249 var $help = $(document.createElement('span'));
251 $help.addClass("help-block");
254 // create generic text input
255 input : function(placeholder) {
256 var $input = $(document.createElement('input'));
257 $input.attr('type', 'text');
258 $input.attr('placeholder', placeholder);
265 unfocus : function($nav) {
266 $($nav.find("li")).each(function(index, value) {
267 $(value).removeClass("active");
273 one.lib.alert = function(alert) {
274 $("#alert p").text(alert);
276 $("#alert").slideToggle();
277 clearTimeout(one.lib.registry.alert);
278 one.lib.registry.alert = setTimeout(function() {
279 $("#alert").slideUp();
285 executable JS code starts here
287 //OpenDaylight root page
290 one.main.constants = {
293 prefix : "/controller/web",
300 one.main.menu.ajax(function(data) {
301 // reparse the ajax data
302 var result = one.main.menu.data.menu(data);
303 // transform into list to append to menu
304 var $div = one.main.menu.menu(result);
306 $("#menu .nav").append($div.children());
307 // binding all menu items
308 var $menu = $("#menu .nav a");
309 $menu.click(function() {
310 var href = $(this).attr('href').substring(1);
311 one.main.page.load(href);
312 var $li = $(this).parent();
313 // reset all other active
314 $menu.each(function(index, value) {
315 $(value).parent().removeClass('active');
317 $li.addClass('active');
319 // reset or go to first menu item by default
320 var currentLocation = location.hash;
321 if (data[currentLocation.substring(1)] == undefined) {
324 $menu.each(function(index, value) {
325 var menuLocation = $(value).attr('href');
326 if (currentLocation == menuLocation) {
327 $($menu[index]).click();
334 menu : function(result) {
335 var $div = $(document.createElement('div'));
336 $(result).each(function(index, value) {
337 if( value != undefined) {
338 var $li = $(document.createElement('li'));
339 var $a = $(document.createElement('a'));
340 $a.text(value['name']);
341 $a.attr('href', '#'+value['id']);
348 ajax : function(successCallback) {
349 $.getJSON(one.main.constants.address.menu, function(data) {
350 successCallback(data);
354 menu : function(data) {
356 $.each(data, function(key, value) {
357 var order = value['order'];
359 var name = value['name'];
364 result[order] = entry;
373 load : function(page) {
374 if (one.f !== undefined && one.f.cleanUp !== undefined) {
377 // clear page related
379 $('.dashlet', '#main').empty();
380 $('.nav', '#main').empty();
382 $.getScript(one.main.constants.address.prefix+"/"+page+"/js/page.js");
390 dashlet : function($nav, dashlet) {
391 var $li = $(document.createElement('li'));
392 var $a = $(document.createElement('a'));
393 $a.text(dashlet.name);
394 $a.attr('id', dashlet.id);
395 $a.attr('href', '#');
404 main : "one_main_admin_id_modal_main",
405 close : "one_main_admin_id_modal_close",
406 user : "one_main_admin_id_modal_user",
408 user : "one_main_admin_id_modal_add_user",
409 close : "one_main_admin_id_modal_add_close",
411 name : "one_main_admin_id_modal_add_form_name",
412 role : "one_main_admin_id_modal_add_form_role",
413 password : "one_main_admin_id_modal_add_form_password"
417 user : "one_main_admin_id_modal_remove_user",
418 close : "one_main_admin_id_modal_remove_close"
422 user : "one_main_admin_id_add_user"
430 initialize : function(callback) {
431 var h3 = "Welcome "+$('#admin').text();
432 var footer = one.main.admin.modal.footer();
433 var $modal = one.lib.modal.spawn(one.main.admin.id.modal.main, h3, '', footer);
436 $('#'+one.main.admin.id.modal.close, $modal).click(function() {
437 $modal.modal('hide');
441 one.main.admin.ajax.users(function($body) {
442 one.lib.modal.inject.body($modal, $body);
445 // modal show callback
448 footer : function() {
451 var closeButton = one.lib.dashlet.button.single("Close", one.main.admin.id.modal.close, "", "");
452 var $closeButton = one.lib.dashlet.button.button(closeButton);
453 footer.push($closeButton);
459 users : function(callback) {
460 $.getJSON(one.main.admin.address.root+one.main.admin.address.users, function(data) {
461 var body = one.main.admin.data.users(data);
462 var $body = one.main.admin.body.users(body);
468 users : function(data) {
470 $(data).each(function(index, value) {
473 entry.push(value['user']);
474 entry.push(value['role']);
476 tr['id'] = value['user'];
483 users : function(body) {
484 var $div = $(document.createElement('div'));
485 var $h5 = $(document.createElement('h5'));
486 $h5.append("Manage Users");
487 var attributes = ["table-striped", "table-bordered", "table-hover", "table-cursor"];
488 var $table = one.lib.dashlet.table.table(attributes);
489 var headers = ["User", "Role"];
490 var $thead = one.lib.dashlet.table.header(headers);
491 var $tbody = one.lib.dashlet.table.body(body);
492 $table.append($thead).append($tbody);
496 $table.find('tr').click(function() {
497 var id = $(this).data('id');
498 one.main.admin.remove.modal.initialize(id);
503 $div.append($h5).append($table);
506 var addUserButton = one.lib.dashlet.button.single("Add User", one.main.admin.id.add.user, "btn-primary", "btn-mini");
507 var $addUserButton = one.lib.dashlet.button.button(addUserButton);
508 $div.append($addUserButton);
511 $addUserButton.click(function() {
512 one.main.admin.add.modal.initialize();
521 initialize : function(id) {
522 var h3 = "Remove User";
523 var footer = one.main.admin.remove.footer();
524 var $body = one.main.admin.remove.body();
525 var $modal = one.lib.modal.spawn(one.main.admin.id.modal.user, h3, $body, footer);
528 $('#'+one.main.admin.id.modal.remove.close, $modal).click(function() {
529 $modal.modal('hide');
533 $('#'+one.main.admin.id.modal.remove.user, $modal).click(function() {
534 one.main.admin.remove.modal.ajax(id, function(result) {
535 if (result == 'Success') {
536 $modal.modal('hide');
538 var $admin = $('#'+one.main.admin.id.modal.main);
539 one.main.admin.ajax.users(function($body) {
540 one.lib.modal.inject.body($admin, $body);
542 } else alert("Failed to remove user: "+result);
548 ajax : function(id, callback) {
549 $.post(one.main.admin.address.root+one.main.admin.address.users+'/'+id, function(data) {
555 footer : function() {
558 var removeButton = one.lib.dashlet.button.single("Remove User", one.main.admin.id.modal.remove.user, "btn-danger", "");
559 var $removeButton = one.lib.dashlet.button.button(removeButton);
560 footer.push($removeButton);
562 var closeButton = one.lib.dashlet.button.single("Close", one.main.admin.id.modal.remove.close, "", "");
563 var $closeButton = one.lib.dashlet.button.button(closeButton);
564 footer.push($closeButton);
569 var $p = $(document.createElement('p'));
570 $p.append("Remove user?");
576 initialize : function() {
578 var footer = one.main.admin.add.footer();
579 var $body = one.main.admin.add.body();
580 var $modal = one.lib.modal.spawn(one.main.admin.id.modal.user, h3, $body, footer);
583 $('#'+one.main.admin.id.modal.add.close, $modal).click(function() {
584 $modal.modal('hide');
588 $('#'+one.main.admin.id.modal.add.user, $modal).click(function() {
589 one.main.admin.add.modal.add($modal, function(result) {
590 if(result == 'Success') {
591 $modal.modal('hide');
593 var $admin = $('#'+one.main.admin.id.modal.main);
594 one.main.admin.ajax.users(function($body) {
595 one.lib.modal.inject.body($admin, $body);
597 } else alert("Failed to add user: "+result);
603 add : function($modal, callback) {
605 user['user'] = $modal.find('#'+one.main.admin.id.modal.add.form.name).val();
606 user['password'] = $modal.find('#'+one.main.admin.id.modal.add.form.password).val();
607 user['role'] = $modal.find('#'+one.main.admin.id.modal.add.form.role).find('option:selected').attr('value');
610 resource['json'] = JSON.stringify(user);
611 resource['action'] = 'add'
613 one.main.admin.add.modal.ajax(resource, callback);
615 ajax : function(data, callback) {
616 $.post(one.main.admin.address.root+one.main.admin.address.users, data, function(data) {
622 var $form = $(document.createElement('form'));
623 var $fieldset = $(document.createElement('fieldset'));
625 var $label = one.lib.form.label('Username');
626 var $input = one.lib.form.input('Username');
627 $input.attr('id', one.main.admin.id.modal.add.form.name);
628 $fieldset.append($label).append($input);
630 var $label = one.lib.form.label('Password');
631 var $input = one.lib.form.input('Password');
632 $input.attr('id', one.main.admin.id.modal.add.form.password);
633 $input.attr('type', 'password');
634 $fieldset.append($label).append($input);
636 var $label = one.lib.form.label('Roles');
638 "Network-Admin" : "Network Administrator",
639 "Network-Operator" : "Network Operator"
641 var $select = one.lib.form.select.create(options);
642 $select.attr('id', one.main.admin.id.modal.add.form.role);
643 $fieldset.append($label).append($select);
644 $form.append($fieldset);
647 footer : function() {
650 var addButton = one.lib.dashlet.button.single("Add User", one.main.admin.id.modal.add.user, "btn-primary", "");
651 var $addButton = one.lib.dashlet.button.button(addButton);
652 footer.push($addButton);
654 var closeButton = one.lib.dashlet.button.single("Close", one.main.admin.id.modal.add.close, "", "");
655 var $closeButton = one.lib.dashlet.button.button(closeButton);
656 footer.push($closeButton);
665 top : $("#left-top .dashlet"),
666 bottom : $("#left-bottom .dashlet")
669 bottom : $("#right-bottom .dashlet")
674 $(".modal").on('hidden', function() {
678 $("#alert .close").click(function() {
685 one.role = $('#admin').data('role');
688 $("#admin").click(function() {
689 one.main.admin.modal.initialize(function($modal) {
695 $("#save").click(function() {
696 $.post(one.main.constants.address.save, function(data) {
697 if (data == "Success") {
698 one.lib.alert("Configuration Saved");
700 one.lib.alert("Unable to save configuration: "+data);
706 $("#logout").click(function() {
707 location.href = "/logout";
711 complete : function(xhr,textStatus) {
712 var mime = xhr.getResponseHeader('Content-Type');
713 if (mime.substring(0, 9) == 'text/html') {
719 /** MAIN PAGE LOAD */
720 one.main.menu.load();