X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fcore%2Fxoslib%2Fstatic%2Fjs%2Fxoslib%2Fxos-util.js;h=1c42e26c5287e9814f71a74ce912d54363b776ea;hb=c2d7c700233884cf21df441192598df8347994ea;hp=bebc44a692ff9b06bf044816c77f7da666088b01;hpb=ce41118086d9956fd2d364b3c86983859616aceb;p=plstackapi.git diff --git a/planetstack/core/xoslib/static/js/xoslib/xos-util.js b/planetstack/core/xoslib/static/js/xoslib/xos-util.js index bebc44a..1c42e26 100644 --- a/planetstack/core/xoslib/static/js/xoslib/xos-util.js +++ b/planetstack/core/xoslib/static/js/xoslib/xos-util.js @@ -1,5 +1,40 @@ // misc utility functions +function idInArray(id, arr) { + // because sometimes ids are strings and sometimes they're integers + for (index in arr) { + if (id.toString() == arr[index].toString()) { + return true; + } + } + return false; +} + +function assert(outcome, description) { + if (!outcome) { + console.log(description); + } +} + +function templateFromId(id) { + return _.template($(id).html()); +} + +function firstCharUpper(s) { + return s.charAt(0).toUpperCase() + s.slice(1); +} + +function toTitleCase(str) +{ + return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); +} + +function fieldNameToHumanReadable(str) +{ + str = str.replace("_", " "); + return toTitleCase(str); +} + // http://stackoverflow.com/questions/2117320/set-maximum-displayed-rows-count-for-html-table function limitTableRows(tableSelector, maxRows) { var table = $(tableSelector)[0] //document.getElementById(tableId); @@ -22,18 +57,82 @@ function limitTableRows(tableSelector, maxRows) { } } -function validateField(validatorName, value) { +function validateField(validatorName, value, obj) { + if (validatorName=="notBlank") { + if ((value==undefined) || (value=="")) { + return "can not be blank"; + } + } + + // if notBlank wasn't set, and the field is blank, then we can return + if ((value==undefined) || (value=="")) { + return true; + } + switch (validatorName) { - case "notBlank": - if ((value==undefined) || (value=="")) { - return "can not be blank"; - } - break; - case "isUrl": + case "url": if (! /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value)) { return "must be a valid url"; } break; } + return true; } + +function array_diff(a1, a2) +{ + var a=[], diff=[]; + for(var i=0;i= 0) { + result.push(value); + } + } + return result; +} + +function array_same_elements(arr1, arr2) +{ + // return true if arrays have same elements, even if order is different + return ($(arr1).not(arr2).length == 0 && $(arr2).not(arr1).length == 0); +} + +function array_pair_lookup(x, names, values) +{ + for (index in values) { + if (values[index] == x) { + return names[index]; + } + } + return "object #" + x; +} + +function all_options(selector) { + el = $(selector); + result = []; + _.each(el.find("option"), function(option) { + result.push($(option).val()); + }); + return result; +} + +function make_same_width(containerSelector, itemSelector) { + var maxWidth = 0; + $(containerSelector).find(itemSelector).each( function(index) { maxWidth = Math.max(maxWidth, $(this).width()); }); + console.log(maxWidth); + $(containerSelector).find(itemSelector).each( function(index) { $(this).width(maxWidth); }); +}