+// global
+var one = {
+ // global variables
+ global : {
+ remoteAddress : "/"
+ },
+ role : null
+}
+
+// one ui library
+one.lib = {};
+
+// registry
+one.lib.registry = {};
+
+/** DASHLET */
+one.lib.dashlet = {
+ empty : function($dashlet) {
+ $dashlet.empty();
+ },
+ append : function($dashlet, $content) {
+ $dashlet.append($content);
+ },
+ header : function(header) {
+ var $h4 = $(document.createElement('h4'));
+ $h4.text(header);
+ return $h4;
+ },
+ label : function(name, type) {
+ var $span = $(document.createElement('span'));
+ $span.addClass('label');
+ if (type !== undefined) {
+ $span.addClass(type);
+ } else if (type !== null) {
+ $span.addClass('label-info');
+ }
+ $span.append(name);
+ return $span;
+ },
+ list : function(list) {
+ var $ul = $(document.createElement('ul'));
+ $(list).each(function(index, value) {
+ var $li = $(document.createElement('li'));
+ $li.append(value);
+ $ul.append($li);
+ });
+ return $ul;
+ },
+ button : {
+ config : function(name, id, type, size) {
+ var button = {};
+ button['name'] = name;
+ button['id'] = id;
+ button['type'] = type;
+ button['size'] = size;
+ return button;
+ },
+ single : function(name, id, type, size) {
+ var buttonList = [];
+ var button = one.lib.dashlet.button.config(name, id, type, size);
+ buttonList.push(button);
+ return buttonList;
+ },
+ button : function(buttonList) {
+ var $buttonGroup = $(document.createElement('div'));
+ $buttonGroup.addClass("btn-group");
+ $(buttonList).each(function(index, value) {
+ var $button = $(document.createElement('button'));
+ $button.text(value.name);
+ $button.addClass('btn');
+ $button.addClass(value['type']);
+ $button.addClass(value['size']);
+ if (!(typeof value.id === 'undefined')) {
+ $button.attr('id', value.id);
+ }
+ $buttonGroup.append($button);
+ });
+ return $buttonGroup;
+ }
+ },
+ datagrid: {
+ /*
+ * The init function returns HTML markup for the datagrid per the options provided. Each consumer
+ * of the datagrid must first call init and then provide the datasource for the grid.
+ * id: this is the id of the table
+ * options: {
+ * searchable: true/false,
+ * pagination: turned off for now,
+ * flexibleRowsPerPage: turned off
+ * }
+ * classes : String containing bootstrap related classes. For ex: "table-striped table-condensed"
+ * The classes "table", "table-bordered" and "datagrid" will be added by default
+ */
+ init: function(id, options, classes) {
+ var $fuelGridContainerDiv = $(document.createElement("div"));
+ $fuelGridContainerDiv.addClass("fuelux");
+ $table = $(document.createElement("table"));
+ $table.attr("id", id);
+ $table.addClass("table table-bordered datagrid");
+ $table.addClass(classes);
+ // create datagrid header
+ $thead = $(document.createElement("thead"));
+ $headertr = $(document.createElement("tr"));
+ $headerth = $(document.createElement("th"));
+ // create datagrid footer
+ $tfoot = $(document.createElement("tfoot"));
+ $footertr = $(document.createElement("tr"));
+ $footerth = $(document.createElement("th"));
+ if(options.searchable == true) {
+ $headerth.append(one.lib.dashlet.datagrid._searchable());
+ }
+ if(options.flexibleRowsPerPage == true) {
+ $footerth.append(one.lib.dashlet.datagrid._rowsPerPage(options.popout));
+ }
+ if(options.pagination == true) {
+ $footerth.append(one.lib.dashlet.datagrid._pagination());
+ }
+ $headertr.append($headerth);
+ $thead.append($headertr);
+ $footertr.append($footerth);
+ $tfoot.append($footertr);
+ $table.append($thead).append($tfoot);
+ $fuelGridContainerDiv.append($table);
+ return $fuelGridContainerDiv;
+ },
+ _searchable: function() {
+ var searchHTML = "<div class='datagrid-header-left'><div class='input-append search datagrid-search'> <input type='text' class='input-medium' placeholder='Search'><button type='button' class='btn'><i class='icon-search'></i></button></div></div>";
+ return searchHTML;
+ },
+ _pagination: function() {
+ var html = '<div class="datagrid-footer-right" style="display:none;"><div class="grid-pager"><button type="button" class="btn grid-prevpage"><i class="icon-chevron-left"></i></button><span>Page</span> <div style="display:inline-block;"><input type="text" name="pagenumber" style="width:25px;margin-bottom:-10px;vertical-align:middle;margin-right:5px;"></div><span>of <span class="grid-pages"></span></span><button type="button" class="btn grid-nextpage"><i class="icon-chevron-right"></i></button></div></div>';
+ return html;
+ },
+ _rowsPerPage: function(popout) {
+ if(popout) {
+ var html = '<div class="datagrid-footer-left" style="display:none;"><div class="grid-controls"><span><span class="grid-start"></span>-<span class="grid-end"></span> of <span class="grid-count"></span></span><div class="select grid-pagesize" data-resize="auto" style="visibility:hidden;"><button type="button" data-toggle="dropdown" class="btn dropdown-toggle"><span class="dropdown-label"></span><span class="caret"></span></button><ul class="dropdown-menu"><li data-value="10" data-selected="true"><a href="#">5</a></li><li data-value="10"><a href="#">10</a></li><li data-value="20"><a href="#">20</a></li><li data-value="50"><a href="#">50</a></li><li data-value="100"><a href="#">100</a></li></ul></div><span style="display:none;">Per Page</span></div></div>';
+ } else {
+ var html = '<div class="datagrid-footer-left" style="display:none;"><div class="grid-controls"><span><span class="grid-start"></span>-<span class="grid-end"></span> of <span class="grid-count"></span></span><div class="select grid-pagesize" data-resize="auto" style="visibility:hidden;"><button type="button" data-toggle="dropdown" class="btn dropdown-toggle"><span class="dropdown-label"></span><span class="caret"></span></button><ul class="dropdown-menu"><li data-value="5" data-selected="true"><a href="#">5</a></li><li data-value="10"><a href="#">10</a></li><li data-value="20"><a href="#">20</a></li><li data-value="50"><a href="#">50</a></li><li data-value="100"><a href="#">100</a></li></ul></div><span style="display:none;">Per Page</span></div></div>';
+ }
+ return html;
+ }
+ },
+ table : {
+ table : function(classes, id) {
+ var $table = $(document.createElement('table'));
+ $table.addClass("table");
+ $(classes).each(function(index, value) {
+ $table.addClass(value);
+ });
+ if (!(typeof id === 'undefined'))
+ $table.attr("id", id);
+ return $table;
+ },
+ header : function(headers) {
+ var $thead = $(document.createElement('thead'));
+ var $tr = $(document.createElement('tr'));
+ $(headers).each(function(index, value) {
+ $th = $(document.createElement('th'));
+ $th.append(value);
+ $tr.append($th);
+ });
+ $thead.append($tr);
+ return $thead;
+ },
+ body : function(body, thead) {
+ var $tbody = $(document.createElement('tbody'));
+ // if empty
+ if (body.length == 0 && !(typeof thead === 'undefined')) {
+ var $tr = $(document.createElement('tr'));
+ var $td = $(document.createElement('td'));
+ $td.attr('colspan', thead.length);
+ $td.text('No data available');
+ $td.addClass('empty');
+ $tr.append($td);
+ $tbody.append($tr);
+ return $tbody;
+ }
+ // else, populate as usual
+ $(body).each(function(index, value) {
+ var $tr = $(document.createElement('tr'));
+ $.each(value, function(key, value) {
+ if (key == 'type') {
+ // add classes
+ $(value).each(function(index, value) {
+ $tr.addClass(value);
+ });
+ } else if (key == 'entry') {
+ // add entries
+ $(value).each(function(index, value) {
+ var $td = $(document.createElement('td'));
+ $td.append(value);
+ $tr.append($td);
+ });
+ } else {
+ // data field
+ $tr.attr('data-' + key, value);
+ }
+ $tbody.append($tr);
+ });
+ });
+ return $tbody;
+ }
+ },
+ description : function(description, horizontal) {
+ var $dl = $(document.createElement('dl'));
+ if (horizontal == true) {
+ $dl.addClass("dl-horizontal");
+ }
+ $(description).each(function(index, value) {
+ var $dt = $(document.createElement('dt'));
+ $dt.text(value.dt);
+ var $dd = $(document.createElement('dd'));
+ $dd.text(value.dd);
+ $dl.append($dt).append($dd);
+ });
+ return $dl;
+ }
+}
+
+/** MODAL */
+one.lib.modal = {
+ // clone default modal
+ clone : function(id) {
+ var $clone = $("#modal").clone(true);
+ $clone.attr("id", id);
+ return $clone;
+ },
+ // populate modal
+ populate : function($modal, header, $body, footer, ajax) {
+ if (ajax === undefined && ajax !== false) {
+ $.getJSON('/web.json'); // session check per modal
+ }
+ var $h3 = $modal.find("h3");
+ $h3.text(header);
+
+ var $modalBody = $modal.find(".modal-body");
+ $modalBody.append($body);
+
+ $(footer).each(function(index, value) {
+ $modal.find(".modal-footer").append(value);
+ });
+ },
+ // clone and populate modal
+ spawn : function(id, header, $body, footer) {
+ var $modal = one.lib.modal.clone(id);
+ one.lib.modal.populate($modal, header, $body, footer);
+ $modal.on('hide', function () {
+ $('.modal-body').scrollTop(0);
+ });
+ return $modal;
+ },
+ // empty modal
+ empty : function($modal) {
+ $modal.find("h3").empty();
+ $modal.find(".modal-body").empty();
+ $modal.find(".modal-footer").empty();
+ },
+ // injection
+ inject : {
+ body : function($modal, $body) {
+ $modal.find(".modal-body").empty();
+ $modal.find(".modal-body").append($body);
+ }
+ }
+}
+
+/** FORM */
+one.lib.form = {
+ // create select-option form element
+ select : {
+ create : function(options, multiple, sort) {
+ // assert - auto assign
+ if (options == undefined)
+ options = {};
+
+ var $select = $(document.createElement('select'));
+ if (multiple == true) {
+ $select.attr("multiple", "multiple");
+ }
+ var optionArray = one.lib.form.select.options(options);
+
+ // If specified, sort the option elements based on their text field
+ if (sort == true && optionArray.length > 1) {
+ var shifted = true;
+ var limit = optionArray.length;
+ while (shifted) {
+ shifted = false;
+ for ( var i = 1; i < limit; i++) {
+ if (optionArray[i - 1].text() > optionArray[i].text()) {
+ var swap = optionArray[i - 1];
+ optionArray[i - 1] = optionArray[i];
+ optionArray[i] = swap;
+ shifted = true;
+ }
+ }
+ }
+ }
+
+ $(optionArray).each(function(index, value) {
+ $select.append(value);
+ });
+ return $select;
+ },
+ options : function(options) {
+ var result = [];
+ $.each(options, function(key, value) {
+ var $option = $(document.createElement('option'));
+ $option.attr("value", key);
+ $option.text(value);
+ result.push($option);
+ });
+ return result;
+ },
+ empty : function($select) {
+ $select.empty();
+ },
+ inject : function($select, options) {
+ $select.empty();
+ var options = one.lib.form.select.options(options);
+ $select.append(options);
+ },
+ prepend : function($select, options) {
+ var options = one.lib.form.select.options(options);
+ $select.prepend(options);
+ },
+ bubble : function($select, bubble) {
+ $($select.find("option")).each(function(index, value) {
+ if ($(value).attr("value") == bubble) {
+ var option = $(value);
+ $(value).remove();
+ $select.prepend(option);
+ return;
+ }
+ });
+ }
+ },
+ // create legend form element
+ legend : function(name) {
+ var $legend = $(document.createElement('legend'));
+ $legend.text(name);
+ return $legend;
+ },
+ // create label form element
+ label : function(name) {
+ var $label = $(document.createElement('label'));
+ $label.text(name);
+ return $label;
+ },
+ // create help block form element
+ help : function(help) {
+ var $help = $(document.createElement('span'));
+ $help.text(help);
+ $help.addClass("help-block");
+ return $help;
+ },
+ // create generic text input
+ input : function(placeholder) {
+ var $input = $(document.createElement('input'));
+ $input.attr('type', 'text');
+ $input.attr('placeholder', placeholder);
+ return $input;
+ }
+}
+
+/** NAV */
+one.lib.nav = {
+ unfocus : function($nav) {
+ $($nav.find("li")).each(function(index, value) {
+ $(value).removeClass("active");
+ });
+ }
+}
+
+one.lib.helper = {
+ parseInt : function(value) {
+ return (value != null && value.trim() !== '') ?
+ parseInt(value) : ''
+ },
+ parseFloat : function(value) {
+ return (value != null && value.trim() !== '') ?
+ parseFloat(value) : ''
+ }
+}
+
+
+/** ALERT */
+one.lib.alert = function(alert) {
+ $("#alert p").text(alert);
+ $("#alert").hide();
+ $("#alert").slideToggle();
+ clearTimeout(one.lib.registry.alert);
+ one.lib.registry.alert = setTimeout(function() {
+ $("#alert").slideUp();
+ }, 8000);
+}