common.js 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. /*##############################################################################
  2. # Copyright (C) 2011 HPCC Systems.
  3. #
  4. # All rights reserved. This program is free software: you can redistribute it and/or modify
  5. # it under the terms of the GNU Affero General Public License as
  6. # published by the Free Software Foundation, either version 3 of the
  7. # License, or (at your option) any later version.
  8. #
  9. # This program is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. # GNU Affero General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU Affero General Public License
  15. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. ############################################################################## */
  17. function getNextAtDepth (dt, id, depth, prev) {
  18. if (typeof (depth) === 'undefined' || typeof (id) === 'undefined' || id === 0 || depth === -1)
  19. return;
  20. var ret, rec;
  21. var recSet = dt.getRecordSet();
  22. var recSetLen = recSet.getLength();
  23. for (var i = 0; i < recSetLen; i++) {
  24. var r = recSet.getRecord(i);
  25. if (r.getData('depth') === depth) {
  26. if (prev && r.getData('id') < id)
  27. ret = r;
  28. if (r.getData('id') === id) {
  29. rec = r;
  30. if (prev)
  31. break;
  32. }
  33. if (r.getData('id') > id) {
  34. ret = r;
  35. break;
  36. }
  37. }
  38. }
  39. if (!ret && rec) {
  40. return getNextAtDepth(dt, rec.getData('parent'), depth - 1, prev);
  41. }
  42. return ret;
  43. }
  44. function handleComplexTableKeyDown(oArgs, dt) {
  45. var Dom = YAHOO.util.Dom;
  46. if (oArgs.event.keyCode === 38 || oArgs.event.keyCode === 40) {
  47. var rec = dt.getRecord(dt.getLastSelectedRecord());
  48. if (oArgs.event.keyCode === 40) {
  49. var prevSelRec = dt.getRecord(dt.getRecordIndex(rec) - 1);
  50. var tdEl = dt.getFirstTdEl(prevSelRec);
  51. var children = Dom.getChildren(tdEl);
  52. if (Dom.hasClass(children[0].children[0].children[0], 'yui-button') &&
  53. Dom.hasClass(children[0].children[0].children[0], 'buttoncollapsed')) {
  54. var next = getNextAtDepth(dt, prevSelRec.getData('id'), prevSelRec.getData('depth'), oArgs.event.keyCode === 38);
  55. if (next && next !== rec) {
  56. dt.unselectRow(rec);
  57. dt.selectRow(next);
  58. }
  59. else if (!next) {
  60. dt.unselectRow(rec);
  61. dt.selectRow(prevSelRec);
  62. }
  63. }
  64. }
  65. else {
  66. var prevSelRec = dt.getRecord(dt.getRecordIndex(rec) + 1);
  67. var tmprec = rec;
  68. while (true) {
  69. var tmpparrec = getRecord(dt, tmprec.getData('parent'));
  70. var tdEl = dt.getFirstTdEl(tmpparrec);
  71. var children = Dom.getChildren(tdEl);
  72. if (Dom.hasClass(children[0].children[0].children[0], 'yui-button') &&
  73. Dom.hasClass(children[0].children[0].children[0], 'buttoncollapsed')) {
  74. tmprec = tmpparrec;
  75. continue;
  76. }
  77. else {
  78. var next = tmprec; //getNextAtDepth(dt, tmprec.getData('id'), tmprec.getData('depth'), true);
  79. if (next && next !== rec) {
  80. dt.unselectRow(rec);
  81. dt.selectRow(next);
  82. }
  83. break;
  84. }
  85. }
  86. }
  87. }
  88. }
  89. function getRecord(table, id) {
  90. var recSet = table.getRecordSet();
  91. var recSetLen = recSet.getLength();
  92. for (var i = 0; i < recSetLen; i++) {
  93. var r = recSet.getRecord(i);
  94. if (r.getData('id') === id) {
  95. return r;
  96. }
  97. }
  98. }
  99. function setFocusToNavTable() {
  100. var tabView = top.document.RightTabView;
  101. top.document.navDT.focus();
  102. if (tabView) {
  103. var dt = tabView.get("activeTab").dt;
  104. saveOpenEditors(dt);
  105. dt.fireEvent("tableBlurEvent");
  106. if (dt.subTables) {
  107. for (var stIdx = 0; stIdx < dt.subTables.length; stIdx++) {
  108. dt.subTables[stIdx].oDT.fireEvent("tableBlurEvent");
  109. }
  110. }
  111. }
  112. }
  113. function setFocusToActiveTabDT() {
  114. var tabView = top.document.RightTabView;
  115. if (tabView) {
  116. tabView.get("activeTab").dt.focus();
  117. top.document.navDT.fireEvent("tableBlurEvent");
  118. }
  119. }
  120. function setFocusToTable(dt) {
  121. dt.focus();
  122. top.document.navDT.fireEvent("tableBlurEvent");
  123. }
  124. function clickCurrentSelOrName(dt, name, donotclick) {
  125. var rec = getCurrentSelRec(dt, name);
  126. if (typeof (rec) !== 'undefined') {
  127. expandRecordWithId(dt, rec.getData('parent'));
  128. var el = dt.getTrEl(rec);
  129. dt.unselectAllCells();
  130. dt.unselectAllRows();
  131. var tdEl = dt.getFirstTdEl(rec);
  132. if (!donotclick)
  133. YAHOO.util.UserAction.click(tdEl);
  134. top.document.lastSelectedRow = rec.getData('Name');
  135. }
  136. }
  137. function getCurrentSelRec(dt, name) {
  138. var rec;
  139. if (typeof (name) === 'undefined') {
  140. var selectedRows = dt.getSelectedRows();
  141. if (typeof (selectedRows) !== 'undefined') {
  142. if (selectedRows.length > 0)
  143. rec = dt.getRecord(selectedRows[0]);
  144. }
  145. }
  146. else {
  147. var recSet = dt.getRecordSet();
  148. var recSetLen = recSet.getLength();
  149. for (var i = 0; i < recSetLen; i++) {
  150. var r = recSet.getRecord(i);
  151. if (r.getData('Name') === name) {
  152. rec = r;
  153. break;
  154. }
  155. }
  156. }
  157. return rec;
  158. }
  159. function getFirstNodeName(dt, parentName,fldType) {
  160. var recSet = dt.getRecordSet();
  161. var recSetLen = recSet.getLength();
  162. var rec;
  163. if(fldType === '')
  164. fldType = 'Name';
  165. for (var i = 0; i < recSetLen; i++) {
  166. var r = recSet.getRecord(i);
  167. if (r.getData(fldType) === parentName) {
  168. rec = r;
  169. break;
  170. }
  171. }
  172. if (typeof (rec) === 'undefined')
  173. return;
  174. for (var i = 0; i < recSetLen; i++) {
  175. var r = recSet.getRecord(i);
  176. if (r.getData('parent') === rec.getData('id')) {
  177. return r;
  178. break;
  179. }
  180. }
  181. }
  182. function selectRecordAndClick(dt, recName, flag, recField) {
  183. var recSet = dt.getRecordSet();
  184. var recSetLen = recSet.getLength();
  185. if (!recField)
  186. recField = "name";
  187. var self = dt;
  188. for (var i = 0; i < recSetLen; i++) {
  189. var r = recSet.getRecord(i);
  190. if (r.getData(recField) === recName) {
  191. dt.selectRow(r);
  192. if (flag) {
  193. var tdEl = dt.getFirstTdEl(r);
  194. tdEl.click();
  195. break;
  196. }
  197. }
  198. }
  199. }
  200. function saveOpenEditors(myDataTable) {
  201. if (typeof (myDataTable.editors) !== 'undefined') {
  202. for (var colIdx = 1; colIdx < 7; colIdx++)
  203. if (myDataTable.editors[colIdx].isActive) {
  204. myDataTable.editors[colIdx].save();
  205. }
  206. }
  207. if (myDataTable.subTables) {
  208. for (var stIdx = 0; stIdx < myDataTable.subTables.length; stIdx++) {
  209. saveOpenEditors(myDataTable.subTables[stIdx].oDT);
  210. }
  211. }
  212. }
  213. function isValidIPAddress(ipList, theName, ignoredot, checkspecial) {
  214. var errorString = "";
  215. var k = 0;
  216. var pattern =/-/;
  217. ipList = ipList.replace(/;$/, "");
  218. var ipArr = new Array();
  219. ipArr = ipList.split(";");
  220. var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
  221. for (k = 0; k < ipArr.length; k++) {
  222. var IPvalue = ipArr[k];
  223. if (IPvalue.match(pattern) != null) {
  224. var newIpArr = IPvalue.split("-");
  225. if (newIpArr.length > 1) {
  226. if ( !isInteger(newIpArr[1]) || (parseInt(newIpArr[1]) > 255)){
  227. errorString = errorString + theName + ": " + IPvalue + " is not a valid IP address.";
  228. }
  229. IPvalue = newIpArr[0];
  230. }
  231. }
  232. var ipArray = IPvalue.match(ipPattern);
  233. if (checkspecial) {
  234. if (IPvalue == "0.0.0.0")
  235. errorString = errorString + theName + ': ' + IPvalue + ' is a special IP address and cannot be used here.';
  236. else if (IPvalue == "255.255.255.255")
  237. errorString = errorString + theName + ': ' + IPvalue + ' is a special IP address and cannot be used here.';
  238. }
  239. if (ignoredot && IPvalue === ".")
  240. continue;
  241. if (ipArray == null)
  242. errorString = errorString + theName + ': ' + IPvalue + ' is not a valid IP address.';
  243. else {
  244. for (i = 0; i < 4; i++) {
  245. thisSegment = ipArray[i];
  246. if (thisSegment > 255) {
  247. errorString = errorString + theName + ': ' + IPvalue + ' is not a valid IP address.';
  248. i = 4;
  249. }
  250. if ((i == 0) && (thisSegment > 255)) {
  251. errorString = errorString + theName + ': ' + IPvalue + ' is a special IP address and cannot be used here.';
  252. i = 4;
  253. }
  254. }
  255. }
  256. }
  257. return errorString;
  258. }
  259. function isInteger(val){
  260. if (isBlank(val)){return false;}
  261. for(var i=0;i<val.length;i++){
  262. if(!isDigit(val.charAt(i))){return false;}
  263. }
  264. return true;
  265. }
  266. function isBlank(val){
  267. if(val==null){return true;}
  268. for(var i=0;i<val.length;i++) {
  269. if ((val.charAt(i)!=' ')&&(val.charAt(i)!="\t")&&(val.charAt(i)!="\n")&&(val.charAt(i)!="\r")){return false;}
  270. }
  271. return true;
  272. }
  273. function isDigit(num) {
  274. if (num.length>1){return false;}
  275. var string="1234567890";
  276. if (string.indexOf(num)!=-1){return true;}
  277. return false;
  278. }
  279. function removeSpaces(string) {
  280. return string.split(' ').join('');
  281. }
  282. function addUniqueToArray(arr, itm) {
  283. var flag = false;
  284. var s = typeof arr;
  285. if (s === 'object') {
  286. if (arr) {
  287. if (typeof arr.length === 'number' &&
  288. !(arr.propertyIsEnumerable('length')) &&
  289. typeof arr.splice === 'function')
  290. flag = true;
  291. else
  292. return;
  293. }
  294. }
  295. if (arr.length == 0)
  296. flag = true;
  297. else
  298. for (var i = 0; i < arr.length; i++) {
  299. if (arr[i] == itm) {
  300. flag = false;
  301. break;
  302. }
  303. }
  304. if (flag)
  305. arr[arr.length] = itm;
  306. }