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
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 // clear page related
376 $('.dashlet', '#main').empty();
377 $('.nav', '#main').empty();
379 $.getScript(one.main.constants.address.prefix+"/"+page+"/js/page.js");
387 dashlet : function($nav, dashlet) {
388 var $li = $(document.createElement('li'));
389 var $a = $(document.createElement('a'));
390 $a.text(dashlet.name);
391 $a.attr('id', dashlet.id);
392 $a.attr('href', '#');
401 main : "one_main_admin_id_modal_main",
402 close : "one_main_admin_id_modal_close",
403 user : "one_main_admin_id_modal_user",
405 user : "one_main_admin_id_modal_add_user",
406 close : "one_main_admin_id_modal_add_close",
408 name : "one_main_admin_id_modal_add_form_name",
409 role : "one_main_admin_id_modal_add_form_role",
410 password : "one_main_admin_id_modal_add_form_password"
414 user : "one_main_admin_id_modal_remove_user",
415 close : "one_main_admin_id_modal_remove_close"
419 user : "one_main_admin_id_add_user"
427 initialize : function(callback) {
428 var h3 = "Welcome "+$('#admin').text();
429 var footer = one.main.admin.modal.footer();
430 var $modal = one.lib.modal.spawn(one.main.admin.id.modal.main, h3, '', footer);
433 $('#'+one.main.admin.id.modal.close, $modal).click(function() {
434 $modal.modal('hide');
438 one.main.admin.ajax.users(function($body) {
439 one.lib.modal.inject.body($modal, $body);
442 // modal show callback
445 footer : function() {
448 var closeButton = one.lib.dashlet.button.single("Close", one.main.admin.id.modal.close, "", "");
449 var $closeButton = one.lib.dashlet.button.button(closeButton);
450 footer.push($closeButton);
456 users : function(callback) {
457 $.getJSON(one.main.admin.address.root+one.main.admin.address.users, function(data) {
458 var body = one.main.admin.data.users(data);
459 var $body = one.main.admin.body.users(body);
465 users : function(data) {
467 $(data).each(function(index, value) {
470 entry.push(value['user']);
471 entry.push(value['role']);
473 tr['id'] = value['user'];
480 users : function(body) {
481 var $div = $(document.createElement('div'));
482 var $h5 = $(document.createElement('h5'));
483 $h5.append("Manage Users");
484 var attributes = ["table-striped", "table-bordered", "table-hover", "table-cursor"];
485 var $table = one.lib.dashlet.table.table(attributes);
486 var headers = ["User", "Role"];
487 var $thead = one.lib.dashlet.table.header(headers);
488 var $tbody = one.lib.dashlet.table.body(body);
489 $table.append($thead).append($tbody);
493 $table.find('tr').click(function() {
494 var id = $(this).data('id');
495 one.main.admin.remove.modal.initialize(id);
500 $div.append($h5).append($table);
503 var addUserButton = one.lib.dashlet.button.single("Add User", one.main.admin.id.add.user, "btn-primary", "btn-mini");
504 var $addUserButton = one.lib.dashlet.button.button(addUserButton);
505 $div.append($addUserButton);
508 $addUserButton.click(function() {
509 one.main.admin.add.modal.initialize();
518 initialize : function(id) {
519 var h3 = "Remove User";
520 var footer = one.main.admin.remove.footer();
521 var $body = one.main.admin.remove.body();
522 var $modal = one.lib.modal.spawn(one.main.admin.id.modal.user, h3, $body, footer);
525 $('#'+one.main.admin.id.modal.remove.close, $modal).click(function() {
526 $modal.modal('hide');
530 $('#'+one.main.admin.id.modal.remove.user, $modal).click(function() {
531 one.main.admin.remove.modal.ajax(id, function(result) {
532 if (result == 'Success') {
533 $modal.modal('hide');
535 var $admin = $('#'+one.main.admin.id.modal.main);
536 one.main.admin.ajax.users(function($body) {
537 one.lib.modal.inject.body($admin, $body);
539 } else alert("Failed to remove user: "+result);
545 ajax : function(id, callback) {
546 $.post(one.main.admin.address.root+one.main.admin.address.users+'/'+id, function(data) {
552 footer : function() {
555 var removeButton = one.lib.dashlet.button.single("Remove User", one.main.admin.id.modal.remove.user, "btn-danger", "");
556 var $removeButton = one.lib.dashlet.button.button(removeButton);
557 footer.push($removeButton);
559 var closeButton = one.lib.dashlet.button.single("Close", one.main.admin.id.modal.remove.close, "", "");
560 var $closeButton = one.lib.dashlet.button.button(closeButton);
561 footer.push($closeButton);
566 var $p = $(document.createElement('p'));
567 $p.append("Remove user?");
573 initialize : function() {
575 var footer = one.main.admin.add.footer();
576 var $body = one.main.admin.add.body();
577 var $modal = one.lib.modal.spawn(one.main.admin.id.modal.user, h3, $body, footer);
580 $('#'+one.main.admin.id.modal.add.close, $modal).click(function() {
581 $modal.modal('hide');
585 $('#'+one.main.admin.id.modal.add.user, $modal).click(function() {
586 one.main.admin.add.modal.add($modal, function(result) {
587 if(result == 'Success') {
588 $modal.modal('hide');
590 var $admin = $('#'+one.main.admin.id.modal.main);
591 one.main.admin.ajax.users(function($body) {
592 one.lib.modal.inject.body($admin, $body);
594 } else alert("Failed to add user: "+result);
600 add : function($modal, callback) {
602 user['user'] = $modal.find('#'+one.main.admin.id.modal.add.form.name).val();
603 user['password'] = $modal.find('#'+one.main.admin.id.modal.add.form.password).val();
604 user['role'] = $modal.find('#'+one.main.admin.id.modal.add.form.role).find('option:selected').attr('value');
607 resource['json'] = JSON.stringify(user);
608 resource['action'] = 'add'
610 one.main.admin.add.modal.ajax(resource, callback);
612 ajax : function(data, callback) {
613 $.post(one.main.admin.address.root+one.main.admin.address.users, data, function(data) {
619 var $form = $(document.createElement('form'));
620 var $fieldset = $(document.createElement('fieldset'));
622 var $label = one.lib.form.label('Username');
623 var $input = one.lib.form.input('Username');
624 $input.attr('id', one.main.admin.id.modal.add.form.name);
625 $fieldset.append($label).append($input);
627 var $label = one.lib.form.label('Password');
628 var $input = one.lib.form.input('Password');
629 $input.attr('id', one.main.admin.id.modal.add.form.password);
630 $input.attr('type', 'password');
631 $fieldset.append($label).append($input);
633 var $label = one.lib.form.label('Roles');
635 "Network-Admin" : "Network Administrator",
636 "Network-Operator" : "Network Operator"
638 var $select = one.lib.form.select.create(options);
639 $select.attr('id', one.main.admin.id.modal.add.form.role);
640 $fieldset.append($label).append($select);
641 $form.append($fieldset);
644 footer : function() {
647 var addButton = one.lib.dashlet.button.single("Add User", one.main.admin.id.modal.add.user, "btn-primary", "");
648 var $addButton = one.lib.dashlet.button.button(addButton);
649 footer.push($addButton);
651 var closeButton = one.lib.dashlet.button.single("Close", one.main.admin.id.modal.add.close, "", "");
652 var $closeButton = one.lib.dashlet.button.button(closeButton);
653 footer.push($closeButton);
662 top : $("#left-top .dashlet"),
663 bottom : $("#left-bottom .dashlet")
666 bottom : $("#right-bottom .dashlet")
671 $(".modal").on('hidden', function() {
675 $("#alert .close").click(function() {
682 one.role = $('#admin').data('role');
685 $("#admin").click(function() {
686 one.main.admin.modal.initialize(function($modal) {
692 $("#save").click(function() {
693 $.post(one.main.constants.address.save, function(data) {
694 if (data == "Success") {
695 one.lib.alert("Configuration Saved");
697 one.lib.alert("Unable to save configuration: "+data);
703 $("#logout").click(function() {
704 location.href = "/logout";
708 complete : function(xhr,textStatus) {
709 var page = xhr.getResponseHeader('X-Page-Location');
710 if(page == '/login') {
711 location.href = '/login';
716 /** MAIN PAGE LOAD */
717 one.main.menu.load();