actionsbuilder.parameters.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551
  1. var ActionsBuilder;
  2. (function (ActionsBuilder) {
  3. var Parameters = (function () {
  4. /*
  5. * Constructor
  6. */
  7. function Parameters(viewer) {
  8. var _this = this;
  9. this._action = null;
  10. // Get HTML elements
  11. this.parametersContainer = document.getElementById("ParametersElementID");
  12. this.parametersHelpElement = document.getElementById("ParametersHelpElementID");
  13. // Configure this
  14. this._viewer = viewer;
  15. // Configure events
  16. window.addEventListener("resize", function (event) {
  17. _this.onResize(event);
  18. });
  19. }
  20. /*
  21. * Clears the parameters fileds in the parameters view
  22. */
  23. Parameters.prototype.clearParameters = function () {
  24. if (this.parametersContainer.children === null) {
  25. return;
  26. }
  27. while (this.parametersContainer.children.length > 0) {
  28. this.parametersContainer.removeChild(this.parametersContainer.firstChild);
  29. }
  30. };
  31. /*
  32. * Creates parameters fields
  33. * @param action: the action to configure
  34. */
  35. Parameters.prototype.createParameters = function (action) {
  36. // Clear parameters fields and draw help description
  37. this._action = action;
  38. this.clearParameters();
  39. if (action === null) {
  40. return;
  41. }
  42. this._createHelpSection(action);
  43. this._createNodeSection(action);
  44. // Get properties
  45. var properties = action.properties;
  46. var propertiesResults = action.propertiesResults;
  47. var targetParameterSelect = null;
  48. var targetParameterNameSelect = null;
  49. var propertyPathSelect = null;
  50. var propertyPathOptionalSelect = null;
  51. var booleanSelect = null;
  52. var propertyInput = null;
  53. var propertyPathIndice = -1;
  54. if (properties.length === 0) {
  55. return;
  56. }
  57. // Draw properties
  58. for (var i = 0; i < properties.length; i++) {
  59. // Create separator
  60. var separator = document.createElement("hr");
  61. separator.noShade = true;
  62. separator.className = "ParametersElementSeparatorClass";
  63. this.parametersContainer.appendChild(separator);
  64. // Create parameter text
  65. var parameterName = document.createElement("a");
  66. parameterName.text = properties[i].text;
  67. parameterName.className = "ParametersElementTitleClass";
  68. this.parametersContainer.appendChild(parameterName);
  69. if (properties[i].text === "parameter" || properties[i].text === "target" || properties[i].text === "parent") {
  70. // Create target select element
  71. targetParameterSelect = document.createElement("select");
  72. targetParameterSelect.className = "ParametersElementSelectClass";
  73. this.parametersContainer.appendChild(targetParameterSelect);
  74. // Create target name select element
  75. targetParameterNameSelect = document.createElement("select");
  76. targetParameterNameSelect.className = "ParametersElementSelectClass";
  77. this.parametersContainer.appendChild(targetParameterNameSelect);
  78. // Events and configure
  79. (this._parameterTargetChanged(targetParameterSelect, targetParameterNameSelect, propertyPathSelect, propertyPathOptionalSelect, i))(null);
  80. targetParameterSelect.value = propertiesResults[i].targetType;
  81. targetParameterNameSelect.value = propertiesResults[i].value;
  82. targetParameterSelect.onchange = this._parameterTargetChanged(targetParameterSelect, targetParameterNameSelect, propertyPathSelect, propertyPathOptionalSelect, i);
  83. targetParameterNameSelect.onchange = this._parameterTargetNameChanged(targetParameterSelect, targetParameterNameSelect, i);
  84. }
  85. else if (properties[i].text === "propertyPath") {
  86. propertyPathIndice = i;
  87. // Create property path select
  88. propertyPathSelect = document.createElement("select");
  89. propertyPathSelect.className = "ParametersElementSelectClass";
  90. this.parametersContainer.appendChild(propertyPathSelect);
  91. // Create additional select
  92. propertyPathOptionalSelect = document.createElement("select");
  93. propertyPathOptionalSelect.className = "ParametersElementSelectClass";
  94. this.parametersContainer.appendChild(propertyPathOptionalSelect);
  95. // Events and configure
  96. (this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, null, null, i))(null);
  97. var property = this._action.propertiesResults[i].value.split(".");
  98. if (property.length > 0) {
  99. if (property.length === 1) {
  100. propertyPathSelect.value = property[0];
  101. }
  102. else {
  103. var completePropertyPath = "";
  104. for (var j = 0; j < property.length - 1; j++) {
  105. completePropertyPath += property[j];
  106. completePropertyPath += (j === property.length - 2) ? "" : ".";
  107. }
  108. propertyPathSelect.value = completePropertyPath;
  109. this._viewer.utils.setElementVisible(propertyPathOptionalSelect, true);
  110. }
  111. this._fillAdditionalPropertyPath(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect);
  112. propertyPathOptionalSelect.value = property[property.length - 1];
  113. if (propertyPathOptionalSelect.options.length === 0 || propertyPathOptionalSelect.options[0].text === "") {
  114. this._viewer.utils.setElementVisible(propertyPathOptionalSelect, false);
  115. }
  116. }
  117. targetParameterSelect.onchange = this._parameterTargetChanged(targetParameterSelect, targetParameterNameSelect, propertyPathSelect, propertyPathOptionalSelect, i - 1);
  118. propertyPathSelect.onchange = this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, null, null, i);
  119. propertyPathOptionalSelect.onchange = this._additionalPropertyPathSelectChanged(propertyPathSelect, propertyPathOptionalSelect, i);
  120. }
  121. else if (properties[i].text === "operator") {
  122. var conditionOperatorSelect = document.createElement("select");
  123. conditionOperatorSelect.className = "ParametersElementSelectClass";
  124. this.parametersContainer.appendChild(conditionOperatorSelect);
  125. // Configure event
  126. (this._conditionOperatorSelectChanged(conditionOperatorSelect, i))(null);
  127. conditionOperatorSelect.value = propertiesResults[i].value;
  128. conditionOperatorSelect.onchange = this._conditionOperatorSelectChanged(conditionOperatorSelect, i);
  129. }
  130. else if (properties[i].text === "sound") {
  131. var soundSelect = document.createElement("select");
  132. soundSelect.className = "ParametersElementSelectClass";
  133. this.parametersContainer.appendChild(soundSelect);
  134. // Configure event
  135. (this._soundSelectChanged(soundSelect, i))(null);
  136. soundSelect.value = propertiesResults[i].value;
  137. soundSelect.onchange = this._soundSelectChanged(soundSelect, i);
  138. }
  139. else {
  140. var isBoolean = propertiesResults[i].value === "true" || propertiesResults[i].value === "false";
  141. var object = this._getObjectFromType(targetParameterSelect.value);
  142. if (object !== null) {
  143. var property = this._action.propertiesResults[i - 1].value.split(".");
  144. for (var j = 0; j < property.length && object !== undefined; j++) {
  145. object = object[property[j]];
  146. if (j === property.length - 1) {
  147. isBoolean = isBoolean || typeof object === "boolean";
  148. }
  149. }
  150. }
  151. booleanSelect = document.createElement("select");
  152. booleanSelect.className = "ParametersElementSelectClass";
  153. this.parametersContainer.appendChild(booleanSelect);
  154. // Configure event
  155. (this._booleanSelectChanged(booleanSelect, i))(null);
  156. booleanSelect.value = propertiesResults[i].value;
  157. booleanSelect.onchange = this._booleanSelectChanged(booleanSelect, i);
  158. propertyInput = document.createElement("input");
  159. propertyInput.value = propertiesResults[i].value;
  160. propertyInput.className = "ParametersElementInputClass";
  161. this.parametersContainer.appendChild(propertyInput);
  162. // Configure event
  163. propertyInput.onkeyup = this._propertyInputChanged(propertyInput, i);
  164. if (propertyPathIndice !== -1 && properties[i].text === "value") {
  165. propertyPathSelect.onchange = this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, booleanSelect, propertyInput, propertyPathIndice);
  166. }
  167. if (isBoolean) {
  168. this._viewer.utils.setElementVisible(booleanSelect, true);
  169. this._viewer.utils.setElementVisible(propertyInput, false);
  170. }
  171. else {
  172. this._viewer.utils.setElementVisible(booleanSelect, false);
  173. this._viewer.utils.setElementVisible(propertyInput, true);
  174. }
  175. }
  176. }
  177. };
  178. /*
  179. * Resizes the parameters view
  180. * @param: the resize event
  181. */
  182. Parameters.prototype.onResize = function (event) {
  183. var tools = document.getElementById("ToolsButtonsID");
  184. this.parametersContainer.style.height = window.innerHeight - tools.getBoundingClientRect().height - 25 - 200 + "px";
  185. this.parametersHelpElement.style.height = 200 + "px";
  186. };
  187. /*
  188. * Returns the boolean select change event
  189. * @param booleanSelect: the boolean select element
  190. * @param indice: the properties result indice
  191. */
  192. Parameters.prototype._booleanSelectChanged = function (booleanSelect, indice) {
  193. var _this = this;
  194. return function (ev) {
  195. if (booleanSelect.options.length === 0) {
  196. var values = ["true", "false"];
  197. for (var i = 0; i < values.length; i++) {
  198. var option = document.createElement("option");
  199. option.value = option.text = values[i];
  200. booleanSelect.options.add(option);
  201. }
  202. }
  203. else {
  204. _this._action.propertiesResults[indice].value = booleanSelect.value;
  205. }
  206. };
  207. };
  208. /*
  209. * Returns the sound select change event
  210. * @param soundSelect: the sound select element
  211. * @param indice: the properties result indice
  212. */
  213. Parameters.prototype._soundSelectChanged = function (soundSelect, indice) {
  214. var _this = this;
  215. return function (ev) {
  216. if (soundSelect.options.length === 0) {
  217. for (var i = 0; i < ActionsBuilder.SceneElements.SOUNDS.length; i++) {
  218. var option = document.createElement("option");
  219. option.value = option.text = ActionsBuilder.SceneElements.SOUNDS[i];
  220. soundSelect.options.add(option);
  221. }
  222. _this._sortList(soundSelect);
  223. }
  224. else {
  225. _this._action.propertiesResults[indice].value = soundSelect.value;
  226. }
  227. };
  228. };
  229. /*
  230. * Returns the condition opeator select changed event
  231. * @param conditionOperatorSelect: the condition operator select element
  232. * @param indice: the properties result indice
  233. */
  234. Parameters.prototype._conditionOperatorSelectChanged = function (conditionOperatorSelect, indice) {
  235. var _this = this;
  236. return function (ev) {
  237. if (conditionOperatorSelect.options.length === 0) {
  238. for (var i = 0; i < ActionsBuilder.SceneElements.OPERATORS.length; i++) {
  239. var option = document.createElement("option");
  240. option.value = option.text = ActionsBuilder.SceneElements.OPERATORS[i];
  241. conditionOperatorSelect.options.add(option);
  242. }
  243. }
  244. else {
  245. _this._action.propertiesResults[indice].value = conditionOperatorSelect.value;
  246. }
  247. };
  248. };
  249. /*
  250. * Returns the property input changed event
  251. * @param propertyInput: the property input
  252. * @param indice: the properties result indice
  253. */
  254. Parameters.prototype._propertyInputChanged = function (propertyInput, indice) {
  255. var _this = this;
  256. return function (ev) {
  257. _this._action.propertiesResults[indice].value = propertyInput.value;
  258. };
  259. };
  260. /*
  261. * Returns the propertyPath select changed event
  262. * @param targetParameterSelect: the target/parameter select element
  263. * @param propertyPathSelect: the propertyPath select element
  264. * @param additionalPropertyPathSelect: the additional propertyPath select element
  265. * @param indice: the properties indice in action.properties
  266. */
  267. Parameters.prototype._propertyPathSelectChanged = function (targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect, booleanSelect, propertyInput, indice) {
  268. var _this = this;
  269. return function (event) {
  270. if (propertyPathSelect.options.length === 0) {
  271. // Configure start values
  272. var properties = _this._getPropertiesFromType(targetParameterSelect.value);
  273. if (properties !== null) {
  274. for (var i = 0; i < properties.length; i++) {
  275. var option = document.createElement("option");
  276. option.value = option.text = properties[i];
  277. propertyPathSelect.options.add(option);
  278. }
  279. }
  280. }
  281. else {
  282. // Set property
  283. _this._action.propertiesResults[indice].value = propertyPathSelect.value;
  284. if (booleanSelect !== null && propertyInput !== null) {
  285. var object = _this._getObjectFromType(targetParameterSelect.value);
  286. var isBoolean = false;
  287. if (object !== null) {
  288. var property = _this._action.propertiesResults[indice].value.split(".");
  289. for (var j = 0; j < property.length; j++) {
  290. object = object[property[j]];
  291. if (j === property.length - 1) {
  292. isBoolean = isBoolean || typeof object === "boolean";
  293. }
  294. }
  295. }
  296. if (isBoolean) {
  297. _this._viewer.utils.setElementVisible(booleanSelect, true);
  298. _this._viewer.utils.setElementVisible(propertyInput, false);
  299. }
  300. else {
  301. _this._viewer.utils.setElementVisible(booleanSelect, false);
  302. _this._viewer.utils.setElementVisible(propertyInput, true);
  303. }
  304. }
  305. }
  306. // Configure addition property
  307. _this._fillAdditionalPropertyPath(targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect);
  308. // Sort
  309. _this._sortList(propertyPathSelect);
  310. };
  311. };
  312. Parameters.prototype._fillAdditionalPropertyPath = function (targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect) {
  313. additionalPropertyPathSelect.options.length = 0;
  314. var object = this._getObjectFromType(targetParameterSelect.value);
  315. if (object !== null) {
  316. var propertyPath = propertyPathSelect.value.split(".");
  317. for (var i = 0; i < propertyPath.length; i++) {
  318. object = object[propertyPath[i]];
  319. }
  320. }
  321. if (object === null || object === undefined || (typeof (object)).toLowerCase() === "string") {
  322. this._viewer.utils.setElementVisible(additionalPropertyPathSelect, false);
  323. return;
  324. }
  325. // Add options
  326. var emptyOption = document.createElement("option");
  327. emptyOption.value = emptyOption.text = "";
  328. additionalPropertyPathSelect.add(emptyOption);
  329. for (var thing in object) {
  330. var type = ActionsBuilder.SceneElements.GetInstanceOf(object[thing]);
  331. var index = ActionsBuilder.SceneElements.TYPES.indexOf(type);
  332. if (index !== -1) {
  333. var option = document.createElement("option");
  334. option.value = option.text = thing;
  335. additionalPropertyPathSelect.options.add(option);
  336. emptyOption.text += thing + ", ";
  337. }
  338. }
  339. if (additionalPropertyPathSelect.options.length === 0 || additionalPropertyPathSelect.options[0].text === "") {
  340. this._viewer.utils.setElementVisible(additionalPropertyPathSelect, false);
  341. }
  342. else {
  343. this._viewer.utils.setElementVisible(additionalPropertyPathSelect, true);
  344. }
  345. };
  346. /*
  347. * Returns the additional propertyPath select changed event
  348. * @param propertyPathSelect: the propertyPath select element
  349. * @param additionalPropertyPathSelect: the additional propertyPath select element
  350. * @param indice: the properties indice in action.properties
  351. */
  352. Parameters.prototype._additionalPropertyPathSelectChanged = function (propertyPathSelect, additionalPropertyPathSelect, indice) {
  353. var _this = this;
  354. return function (event) {
  355. var property = propertyPathSelect.value;
  356. var additionalProperty = additionalPropertyPathSelect.value;
  357. if (additionalProperty !== "") {
  358. property += ".";
  359. property += additionalPropertyPathSelect.value;
  360. }
  361. _this._action.propertiesResults[indice].value = property;
  362. };
  363. };
  364. /*
  365. * Returns the parameter/target select changed event
  366. * @param targetParameterSelect: the target/parameter select element
  367. * @param targetParameterNameSelect: the target/parameter name select element
  368. * @param propertyPathSelect: the propertyPath select element
  369. * @param additionalPropertyPathSelect: the additional propertyPath select element
  370. * @param indice: the properties indice in action.properties
  371. */
  372. Parameters.prototype._parameterTargetChanged = function (targetParameterSelect, targetParameterNameSelect, propertyPathSelect, additionalPropertyPathSelect, indice) {
  373. var _this = this;
  374. return function (event) {
  375. if (targetParameterSelect.options.length === 0) {
  376. // Configure start values
  377. var options = [
  378. { text: "Mesh", targetType: "MeshProperties" },
  379. { text: "Light", targetType: "LightProperties" },
  380. { text: "Camera", targetType: "CameraProperties" },
  381. { text: "Scene", targetType: "SceneProperties" }
  382. ];
  383. targetParameterSelect.options.length = 0;
  384. for (var i = 0; i < options.length; i++) {
  385. var option = document.createElement("option");
  386. option.text = options[i].text;
  387. option.value = options[i].targetType;
  388. targetParameterSelect.options.add(option);
  389. }
  390. targetParameterSelect.value = _this._action.propertiesResults[indice].targetType;
  391. }
  392. else {
  393. _this._action.propertiesResults[indice].targetType = targetParameterSelect.value;
  394. var names = _this._getListFromType(targetParameterSelect.value);
  395. if (names !== null && names.length > 0) {
  396. _this._action.propertiesResults[indice].value = names[0];
  397. }
  398. else {
  399. _this._action.propertiesResults[indice].value = "";
  400. }
  401. if (propertyPathSelect !== null) {
  402. _this._action.propertiesResults[indice + 1].value = ""; // propertyPath
  403. }
  404. }
  405. // Configure target names
  406. var targetParameterProperties = _this._getTargetFromType(targetParameterSelect.value);
  407. targetParameterNameSelect.options.length = 0;
  408. if (targetParameterProperties !== null) {
  409. for (var i = 0; i < targetParameterProperties.length; i++) {
  410. var option = document.createElement("option");
  411. option.text = option.value = targetParameterProperties[i];
  412. targetParameterNameSelect.options.add(option);
  413. }
  414. }
  415. targetParameterNameSelect.value = _this._action.propertiesResults[indice].value;
  416. // Clear property path
  417. if (propertyPathSelect !== null) {
  418. propertyPathSelect.options.length = 0;
  419. additionalPropertyPathSelect.options.length = 0;
  420. _this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect, null, null, indice + 1)(null);
  421. }
  422. _this._sortList(targetParameterNameSelect);
  423. _this._sortList(targetParameterSelect);
  424. };
  425. };
  426. /*
  427. * Returns the parameter/target name select changed
  428. * @param indice: the properties indice to change
  429. */
  430. Parameters.prototype._parameterTargetNameChanged = function (targetParameterSelect, targetParameterNameSelect, indice) {
  431. var _this = this;
  432. return function (event) {
  433. _this._action.propertiesResults[indice].value = targetParameterNameSelect.value;
  434. };
  435. };
  436. /*
  437. * Returns the array of objects names in function of its type
  438. * @param type: the target type
  439. */
  440. Parameters.prototype._getTargetFromType = function (type) {
  441. if (type === "MeshProperties" || type === "Mesh") {
  442. return ActionsBuilder.SceneElements.MESHES;
  443. }
  444. if (type === "LightProperties" || type === "Light") {
  445. return ActionsBuilder.SceneElements.LIGHTS;
  446. }
  447. if (type === "CameraProperties" || type === "Camera") {
  448. return ActionsBuilder.SceneElements.CAMERAS;
  449. }
  450. return null;
  451. };
  452. /*
  453. * Returns the properties in function of its type
  454. * @param type: the target type
  455. */
  456. Parameters.prototype._getPropertiesFromType = function (type) {
  457. if (type === "MeshProperties" || type === "Mesh") {
  458. return ActionsBuilder.SceneElements.MESH_PROPERTIES;
  459. }
  460. if (type === "LightProperties" || type === "Light") {
  461. return ActionsBuilder.SceneElements.LIGHT_PROPERTIES;
  462. }
  463. if (type === "CameraProperties" || type === "Camera") {
  464. return ActionsBuilder.SceneElements.CAMERA_PROPERTIES;
  465. }
  466. if (type === "SceneProperties" || type === "Scene") {
  467. return ActionsBuilder.SceneElements.SCENE_PROPERTIES;
  468. }
  469. return null;
  470. };
  471. Parameters.prototype._getListFromType = function (type) {
  472. if (type === "MeshProperties" || type === "Mesh") {
  473. return ActionsBuilder.SceneElements.MESHES;
  474. }
  475. if (type === "LightProperties" || type === "Light") {
  476. return ActionsBuilder.SceneElements.LIGHTS;
  477. }
  478. if (type === "CameraProperties" || type === "Camera") {
  479. return ActionsBuilder.SceneElements.CAMERAS;
  480. }
  481. return null;
  482. };
  483. /*
  484. * Returns the object in function of the given type
  485. * @param type: the target type
  486. */
  487. Parameters.prototype._getObjectFromType = function (type) {
  488. if (type === "MeshProperties" || type === "Mesh") {
  489. this._currentObject = ActionsBuilder.SceneElements.MESH;
  490. return ActionsBuilder.SceneElements.MESH;
  491. }
  492. if (type === "LightProperties" || type === "Light") {
  493. this._currentObject = ActionsBuilder.SceneElements.LIGHT;
  494. return ActionsBuilder.SceneElements.LIGHT;
  495. }
  496. if (type === "CameraProperties" || type === "Camera") {
  497. this._currentObject = ActionsBuilder.SceneElements.CAMERA;
  498. return ActionsBuilder.SceneElements.CAMERA;
  499. }
  500. if (type === "SceneProperties" || type === "Scene") {
  501. this._currentObject = ActionsBuilder.SceneElements.SCENE;
  502. return ActionsBuilder.SceneElements.SCENE;
  503. }
  504. return null;
  505. };
  506. /*
  507. * Creates the node section (top of parameters)
  508. * @param action: the action element to get color, text, name etc.
  509. */
  510. Parameters.prototype._createNodeSection = function (action) {
  511. var element = document.createElement("div");
  512. element.style.background = this._viewer.getSelectedNodeColor(action.type, action.node.detached);
  513. element.className = "ParametersElementNodeClass";
  514. var text = document.createElement("a");
  515. text.text = action.name;
  516. text.className = "ParametersElementNodeTextClass";
  517. element.appendChild(text);
  518. this.parametersContainer.appendChild(element);
  519. };
  520. /*
  521. * Creates the help section
  522. * @param action : the action containing the description
  523. */
  524. Parameters.prototype._createHelpSection = function (action) {
  525. // Get description
  526. var element = ActionsBuilder.Elements.GetElementFromName(action.name);
  527. if (element !== null) {
  528. this.parametersHelpElement.textContent = element.description;
  529. }
  530. };
  531. /*
  532. * Alphabetically sorts a HTML select element options
  533. * @param element : the HTML select element to sort
  534. */
  535. Parameters.prototype._sortList = function (element) {
  536. var options = [];
  537. for (var i = element.options.length - 1; i >= 0; i--) {
  538. options.push(element.removeChild(element.options[i]));
  539. }
  540. options.sort(function (a, b) {
  541. return a.innerHTML.localeCompare(b.innerHTML);
  542. });
  543. for (var i = 0; i < options.length; i++) {
  544. element.options.add(options[i]);
  545. }
  546. };
  547. return Parameters;
  548. })();
  549. ActionsBuilder.Parameters = Parameters;
  550. })(ActionsBuilder || (ActionsBuilder = {}));
  551. //# sourceMappingURL=actionsbuilder.parameters.js.map