15aa1b0a59a4e024c2424691fa44c36b5a08560b
[plstackapi.git] / planetstack / core / xoslib / static / js / xoslib / xos-util.js
1 // misc utility functions
2
3 function idInArray(id, arr) {
4     // because sometimes ids are strings and sometimes they're integers
5     for (index in arr) {
6         if (id.toString() == arr[index].toString()) {
7             return true;
8         }
9     }
10     return false;
11 }
12
13 function assert(outcome, description) {
14     if (!outcome) {
15         console.log(description);
16     }
17 }
18
19 function templateFromId(id) {
20     return _.template($(id).html());
21 }
22
23 function firstCharUpper(s) {
24     return s.charAt(0).toUpperCase() + s.slice(1);
25 }
26
27 function toTitleCase(str)
28 {\r
29     return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});\r
30 }
31
32 function fieldNameToHumanReadable(str)
33 {
34     str = str.replace("_", " ");
35     return toTitleCase(str);
36 }
37
38 // http://stackoverflow.com/questions/2117320/set-maximum-displayed-rows-count-for-html-table
39 function limitTableRows(tableSelector, maxRows) {
40     var table = $(tableSelector)[0] //document.getElementById(tableId);
41     var wrapper = table.parentNode;
42     var rowsInTable = table.rows.length;
43     try {
44         var border = getComputedStyle(table.rows[0].cells[0], '').getPropertyValue('border-top-width');
45         border = border.replace('px', '') * 1;
46     } catch (e) {
47         var border = table.rows[0].cells[0].currentStyle.borderWidth;
48         border = (border.replace('px', '') * 1) / 2;
49     }
50     var height = 0;
51     if (rowsInTable > maxRows) {
52         for (var i = 0; i < maxRows; i++) {
53             height += table.rows[i].clientHeight + border;
54             //console.log("XXX " + height + " " + table.rows[i].clientHeight + " " + border);
55         }
56         wrapper.style.height = height + "px";
57     }
58 }
59
60 function validateField(validatorName, value, obj) {
61     if (validatorName=="notBlank") {
62         if ((value==undefined) || (value=="")) {
63             return "can not be blank";
64         }
65     }
66
67     // if notBlank wasn't set, and the field is blank, then we can return
68     if ((value==undefined) || (value=="")) {
69         return true;
70     }
71
72     switch (validatorName) {
73         case "url":
74             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)) {
75                 return "must be a valid url";
76             }
77             break;
78     }
79
80     return true;
81 }
82
83 function array_diff(a1, a2)
84 {\r
85   var a=[], diff=[];\r
86   for(var i=0;i<a1.length;i++)\r
87     a[a1[i]]=true;\r
88   for(var i=0;i<a2.length;i++)\r
89     if(a[a2[i]]) delete a[a2[i]];\r
90     else a[a2[i]]=true;\r
91   for(var k in a)\r
92     diff.push(k);\r
93   return diff;\r
94 }
95
96 function array_pair_lookup(x, names, values)
97 {
98     for (index in values) {
99         if (values[index] == x) {
100             return names[index];
101         }
102     }
103     return undefined;
104 }
105
106 function all_options(selector) {
107     el = $(selector);
108     result = [];
109     _.each(el.find("option"), function(option) {
110         result.push($(option).val());
111     });
112     return result;
113 }
114
115 function make_same_width(containerSelector, itemSelector) {
116     var maxWidth = 0;
117     $(containerSelector).find(itemSelector).each( function(index) { maxWidth = Math.max(maxWidth, $(this).width()); });\r
118     console.log(maxWidth);\r
119     $(containerSelector).find(itemSelector).each( function(index) { $(this).width(maxWidth); });
120 }