"use strict"; var gModelDialogOpen = false; var KeyOperations = { UNKNOWN: 0, CUT: 1, COPY: 2, PASTE: 3, MOVEDOWN: 4, MOVEUP: 5, ENTER: 6, INSERT: 7, DELETE: 8, NAVDOWN: 9, NAVUP: 10, NAVLEFT: 11, NAVRIGHT: 12, SAVE: 13, UNDO: 14, REDO: 15, OPENANAEDIT: 16, PLAYTTS: 17, OPENINPUTS: 18 }; function endsWith(str, suffix) { return str.indexOf(suffix, str.length - suffix.length) !== -1; } function trimQuotes(s) { while (s.length > 0 && s.charAt(0) == '"') s = s.substr(1); while (s.length > 0 && s.charAt(s.length - 1) == '"') s = s.substr(0, s.length - 1); return s; } function nameSpaceResolver(ns) { if (ns == "vp3") return "http://www.a-i.com/VP3/Golduck"; return null; } function utilSetAttr(node, name, value) { if (node.nodeType === 1) node.setAttribute(name, value); } function utilDelAttr(node, name) { if (node.nodeType !== 1) return; if (!node.hasAttribute(name)) return; node.removeAttribute(name); } function utilGetAttr(node, name) { if (node.nodeType != 1) return null; if (!node.hasAttribute(name)) return null; return node.getAttribute(name); } function utilSelectSingleNode(path, doc, context) { var result = doc.evaluate(path, context, nameSpaceResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null); if (result) result = result.singleNodeValue; return result; } function utilSelectNodes(path, doc, context) { var result = []; var nodes = doc.evaluate(path, context, nameSpaceResolver, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); var node; if (nodes) while ((node = nodes.iterateNext()) != null) result.push(node); return result; } function utilInsertAfter(newNode, referenceNode) { referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); } function loadXmlAsync(path, callback) { var request = null; // Create a request object. Try Mozilla / Safari method first. if (window.XMLHttpRequest) { request = new XMLHttpRequest(); // If that doesn't work, try IE methods. } else if (window.ActiveXObject) { try { request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e1) { try { request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) {} } } // If we couldn't make one, abort. if (!request) { window.alert("No ajax support."); return false; } // Upon completion of the request, execute the callback. request.onreadystatechange = function() { if (request.readyState === 4) { if (request.status === 200) { callback(request.responseXML); } else { window.alert("Could not load " + path); } } }; request.open("GET", path, true); request.overrideMimeType("text/xml"); request.send(); } function sendXml(path, xmlDoc) { var request = null; // Create a request object. Try Mozilla / Safari method first. if (window.XMLHttpRequest) { request = new XMLHttpRequest(); // If that doesn't work, try IE methods. } else if (window.ActiveXObject) { try { request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e1) { try { request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) {} } } // If we couldn't make one, abort. if (!request) { return "No ajax support"; } request.open("PUT", path, false); request.overrideMimeType("text/xml"); request.send(xmlDoc); if (request.readyState != 4 || request.status != 200) { return request.statusText; } return null; } function loadXmlFromText(xmlText) { if (!xmlText) return null; var xmlDoc = null; if (window.DOMParser) { let parser = new DOMParser(); xmlDoc = parser.parseFromString(xmlText, "text/xml"); } else { // Internet Explorer xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async = false; xmlDoc.loadXML(xmlText); } return xmlDoc; } function xslTransform(inputXml, transformXsltCandidate, paramName1, paramValue1, paramName2, paramValue2, paramName3, paramValue3) { if (window.XSLTProcessor) { const transformXslt = typeof transformXsltCandidate === "string" ? new DOMParser().parseFromString(transformXsltCandidate, "application/xml") : transformXsltCandidate; var processor = new XSLTProcessor(); processor.importStylesheet(transformXslt); if (paramName1) processor.setParameter(null, paramName1, paramValue1); if (paramName2) processor.setParameter(null, paramName2, paramValue2); if (paramName3) processor.setParameter(null, paramName3, paramValue3); var result = processor.transformToDocument(inputXml); return result; } else if (window.ActiveXObject) { var xslt = new ActiveXObject("Msxml2.XSLTemplate"); xslt.stylesheet = transformXslt; var xsltProc = xslt.createProcessor(); xsltProc.input = inputXml; if (paramName1) xsltProc.addParameter(paramName1, paramValue1, ""); if (paramName2) xsltProc.addParameter(paramName2, paramValue2, ""); if (paramName3) xsltProc.addParameter(paramName3, paramValue3, ""); xsltProc.transform(); var newRuleXML = xsltProc.output; var ownerDoc = new ActiveXObject("Msxml2.DOMDocument"); ownerDoc.async = false; ownerDoc.loadXML(newRuleXML); return ownerDoc; } else throw "XSLT not supported"; } function XmlToText(xml) { try { return new XMLSerializer().serializeToString(xml); } catch (e) { try { // Internet Explorer. return xml.xml; } catch (e) { //Other browsers without XML Serializer alert("Xmlserializer not supported"); return null; } } } function keyPressed(e) { if (e.ctrlKey || e.metaKey) { switch (e.keyCode) { case 88: return KeyOperations.CUT; case 67: return KeyOperations.COPY; case 86: return KeyOperations.PASTE; case 40: return KeyOperations.MOVEDOWN; case 38: return KeyOperations.MOVEUP; case 73: return KeyOperations.INSERT; case 79: return KeyOperations.OPENINPUTS; case 83: return KeyOperations.SAVE; case 89: return KeyOperations.REDO; case 90: return KeyOperations.UNDO; case 74: // j return KeyOperations.OPENANAEDIT; case 75: // k return KeyOperations.PLAYTTS; default: return KeyOperations.UNKNOWN; } } switch (e.keyCode) { case 113: case 13: return KeyOperations.ENTER; case 45: return KeyOperations.INSERT; case 8: case 46: return KeyOperations.DELETE; case 40: return KeyOperations.NAVDOWN; case 38: return KeyOperations.NAVUP; case 37: return KeyOperations.NAVLEFT; case 39: case 9: return KeyOperations.NAVRIGHT; default: return KeyOperations.UNKNOWN; } } function encodeXML(text) { return text .replace(/&/g, "&") .replace(//g, ">") .replace(/'/g, "'") .replace(/"/g, """); } function decodeXML(text) { return text .replace(/"/g, '"') .replace(/>/g, ">") .replace(/</g, "<") .replace(/'/g, "'") .replace(/&/g, "&"); } function locateVariableOnCaret($ta) { var caretPos = $ta.caret(); var val = $ta.val(); var result = { start: val.lastIndexOf("[", caretPos), end: -1, selectNowPressed: val.charAt(caretPos - 1) == "]" }; if (result.selectNowPressed) caretPos -= 1; if (result.start != -1) { result.start += 1; // skip [ var i = val.lastIndexOf("]", caretPos - 1); if (result.start > i) { // we are in the middle of a [|] or [| scenario result.end = val.indexOf("]", caretPos); if (result.end != -1) { // there is a ] afterwords i = val.indexOf("[", caretPos); if (i == -1 || result.end < i) { // the ] is indeed relevant for this variable i = val.indexOf("(", caretPos); if (i != -1 && i < result.end) // var name is up to the (, not the [ result.end = i; i = val.indexOf(":", caretPos); if (i != -1 && i < result.end) // var name is up to the :, not the [ result.end = i; } else result.end = -1; } } else result.start = -1; } if (result.start != -1 && result.end == -1) result.end = caretPos; return result; } function showDialog(text, title, level, buttons) { gModelDialogOpen = true; $.jAlert( text, level, function() { gModelDialogOpen = false; }, { title: title, show: "puff", hide: "puff", buttons: buttons } ); } function showMessage(text, title, level) { gModelDialogOpen = true; $.jAlert( text, level, function() { gModelDialogOpen = false; }, {title: title, show: "puff", hide: "puff"} ); } function showError(text, title) { showMessage(text, title ? title : "Syntax error", "error"); } function showWarning(text, title) { showMessage(text, title ? title : "Symbol not found", "highlight"); } function showInfo(text, title) { if (title) $.jGrowl(text, {header: title}); else $.jGrowl(text); // showMessage (text, (title ? title : "Information"),"" ); } function setClassIf(className, source, target) { if (source.hasClass(className)) target.addClass(className); else target.removeClass(className); } function InsertVarsToElement($a) { replaceVarInElement($a, "href"); replaceVarInElement($a, "download"); replaceVarInElement($a, "action"); } function replaceVarInElement($a, attName) { let val = $a.attr(attName); if (val) { if (val.indexOf("PERSONALITY") !== -1) val = val.replace("PERSONALITY", getPersonalityName()); if (val.indexOf("TOKEN") !== -1) val = val.replace("TOKEN", gAccessToken); $a.attr(attName, val); } } function getPersonalityName() { var name = getPersonalityUrl(); return name.substr(name.lastIndexOf("/") + 1); } function getPersonalityUrl() { var url = $.url("path"); if (url.charAt(url.length - 1) === "/") url = url.substr(0, url.length - 1); var collections = ["/handlers", "/variables", "/intents", "/changelogs", "/search"]; for (var i = 0; i < collections.length; i++) if (url.indexOf(collections[i]) > -1) { url = url.substr(0, url.indexOf(collections[i])); return url; } if (url.charAt(url.length - 1) === "/") url = url.substr(0, url.length - 1); return url; } function getHandlerUrl(handlerName) { return getHandlerCollectionUrl() + "/" + handlerName; } function getIntentUrl(intentName) { return getIntentCollectionUrl() + "/" + intentName; } function getVarUrl(varName) { return getVariableCollectionUrl() + "/" + varName; } function getIntentCollectionUrl() { return getPersonalityUrl() + "/intents"; } function getHandlerCollectionUrl() { return getPersonalityUrl() + "/handlers"; } function getVariableCollectionUrl() { return getPersonalityUrl() + "/variables"; } //Add the jQuery center() method... function centerElement($el) { $el.css("position", "absolute"); $el.css("top", ($(window).height() - $el.height()) / 2 + $(window).scrollTop() + "px"); $el.css("left", ($(window).width() - $el.width()) / 2 + $(window).scrollLeft() + "px"); return $el; } // Set up a table with nice behaviour: // - Sorted columned // - Zebra striping // - Stickey headers // - Context menu on right click // - Select row on click // - Activate callback on double click var $niceTableCurrentTR = null; function setupNiceTable($table, options) { $table .find("tbody>tr") .hover( function() { if ( !$(this) .closest("table") .contextmenu("isOpen") ) $(this).addClass("ui-state-hover"); }, function() { if ( !$(this) .closest("table") .contextmenu("isOpen") ) $(this).removeClass("ui-state-hover"); } ) .click(function() { if ($niceTableCurrentTR) $niceTableCurrentTR.removeClass("ui-state-highlight").removeClass("outlined"); $niceTableCurrentTR = $(this); $niceTableCurrentTR.addClass("ui-state-highlight").addClass("outlined"); }) .dblclick(function() { $(this).click(); options.dblClick($niceTableCurrentTR); }); $table .contextmenu({ // create the context menu delegate: options.cmenuDelegate, preventSelect: true, open: function(event, ui) { if ($niceTableCurrentTR) $niceTableCurrentTR.removeClass("ui-state-highlight").removeClass("outlined"); $niceTableCurrentTR = ui.target.closest("tr"); $niceTableCurrentTR.addClass("ui-state-highlight").addClass("outlined"); setTimeout(function() { $niceTableCurrentTR.closest("table").contextmenu("close"); }, 4000); }, menu: options.cmenu }) .tablesorter({ theme: "jui", headerTemplate: "{content} {icon}", headers: options.headers, dateFormat: "ddmmyyyy", widgets: ["uitheme", "stickyHeaders", "resizable", "zebra"], widgetOptions: { zebra: ["ui-widget-content even", "ui-state-default odd"], resizable_addLastColumn: true } }); } function isValidEntityName(name) { var exp = new RegExp("^[a-zA-Z_][a-zA-Z0-9_.]*$"); var name = name.trim(); return name !== "" && exp.test(name); } function setupTTS() { // erez: disabled return; $('
') .appendTo("body") .jPlayer({supplied: "m4a"}); } function playTTS($el) { // erez: disabled return; if (!$el) return; var text = $el.text(); if (text) text = text.trim(); if (!text) return; text = encodeURIComponent(text); var cmd = "http://54.77.25.98/speech?text=" + text; $("#jplayer") .jPlayer("setMedia", { m4a: cmd }) .jPlayer("play"); } function formatEndpoint(endpoint, params) { if (gAccessToken) params = (params ? params + "&" : "") + "token=" + gAccessToken; return endpoint + (params ? "?" + params : ""); } function formatDateToMMDDYY(dt) { let mm = (dt.getMonth() + 1).toString(); let res = mm.length < 2 ? "0" + mm : mm; let dd = dt.getDate().toString(); res += dd.length < 2 ? "0" + dd : dd; res += dt .getFullYear() .toString() .slice(2); return res; }