javascript Obtiene los textos de las opciones otra

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript Obtiene los textos de las opciones otra相关的知识,希望对你有一定的参考价值。

// start
importPackage(com.liquidsoft.msurvey.api);

/**
 * Crea un array a partir del rango indicado:
 * 
 * Array.range(1,3) -> [1,2,3]
 * Array.range(0,10,2)) -> [0,2,4,6,8,10]
 *  Array.range('a','d')) -> ['a','b','c','d']
 *  Array.range('R','V')) -> ['R','S','T','U', 'V']
 * 
 * @param {Number} init (inclusive)
 * @param {Number} end (inclusive)
 * @param {Number} step indica el incremento, 1 por defecto
 * @returns {Array}
 */
Array.range = function (init, end, step) {
    var A = [];
    if (typeof init === 'number') {
        A[0] = init;
        step = step || 1;
        while (init + step <= end) {
            A[A.length] = init += step;
        }
    } else {
        var s = 'abcdefghijklmnopqrstuvwxyz';
        if (init === init.toUpperCase()) {
            end = end.toUpperCase();
            s = s.toUpperCase();
        }
        s = s.substring(s.indexOf(init), s.indexOf(end) + 1);
        A = s.split('');
    }
    return A;
};

/**
 * Agrega el método contains a la clase Array, el método retorna true si contiene el valor, false en caso contrario.
 *
 * Ej:
 * Array.range(1,9).contains(1) -> true
 * Array.range(1,9).contains("1") -> true
 * Array.range(1,9).contains(10) -> false
 * 
 * @param {type} value
 * @returns {Boolean}
 */
Array.prototype.contains = function (value) {
    return this.indexOf(value) > -1 || this.indexOf(""+value) > -1 || this.indexOf(parseFloat(value)) > -1;
};

/**
 * Retorna true si este array contiene alguno de los elementos de "valuesArray"
 * 
 * @param {type} value
 * @returns {Boolean}
 */
Array.prototype.containsOr = function (valuesArray) {
    for (var i = 0; i < valuesArray.length; i++) {
        if (this.contains(valuesArray[i])) {
            return true;
        }
    }
    return false;
};

/**
 * Retorna true si este array contiene todos los elementos de "valuesArray"
 * 
 * @param {type} value
 * @returns {Boolean}
 */
Array.prototype.containsAnd = function (valuesArray) {
    for (var i = 0; i < valuesArray.length; i++) {
        if (!this.contains(valuesArray[i])) {
            return false;
        }
    }
    return true;
};


Utils = {

    // Obtiene el valor de las opciones seleccionadas en una pregunta de opciones múltiples
   enterOptsValues: function (alias) {
        var answer = ApiClient.findAnswerOptions(alias);
        return Utils.enterOptsValuesByAnswer(answer);
   },

   enterOptsValuesByAnswer: function (answer) {
        if (answer==null) {
            return [];
        }

        var enterOptions = answer.getEnterOptions();
        var valuesSel = [];
        for (var i = 0; i < enterOptions.length(); i++) {
            var optAlias = enterOptions.get(i);
            var opt = ApiClient.findItem(optAlias);
            valuesSel.push(""+opt.getValue());
        }   
        return valuesSel;
   },

   enterOptValue: function (alias) {
        var answer = ApiClient.findAnswer(alias);
        return Utils.enterOptValueByAnswer(answer);
   },

   // Obtiene el valor de la opción seleccionada en una pregunta de opciones simples
   enterOptValueByAnswer: function (answer) {
        var valuesSel = Utils.enterOptsValuesByAnswer(answer);
        if (valuesSel.length>1) {
            throw "La pregunta " + answer.getQAlias() +" tiene más de una respuesta";
        }
        if (valuesSel.length==0) { // respuesta nula
            return -1;
        }

        return valuesSel[0];
   },

   enterColumnValByAnswer: function(answer, rowValue) {
        if (answer!=null) {
            var matrixJsonObj = answer.getEnterMatrix(); // matrix single format: jsonobject {"aliasOpt1":"aliasCol1", "aliasOpt2":"aliasCol1"}
            var options = matrixJsonObj.names();
            for (var i = 0; i < options.length(); i++) {
                var optionAlias = options.get(i);
                var opt = ApiClient.findItem(optionAlias);
                if (opt.getValue() == rowValue) {
                    var colAlias = matrixJsonObj.get(optionAlias);
                    var col = ApiClient.findItem(colAlias);
                    return col.getValue(); 
                }
            }
        }
        return -1;
   }, 

   // Obtiene el valor de la columna que se capturó en la fila con valor "rowValue" dentro de la pregunta con alias "alias"
   enterColumnVal: function(alias, rowValue) {
        var answer = ApiClient.findAnswer(alias);
        return Utils.enterColumnValByAnswer(answer, rowValue);
    },

    // Obtiene el texto capturado en la pregunta de texto abierto
    enterTextByAnswer: function(answer) {
        return answer!=null ? answer.getEnterText() : "";
    },

    enterTextFloatByAnswer: function(answer) {
        return parseFloat(Utils.enterTextByAnswer(answer));
    },

    enterTextIntByAnswer: function(answer) {
        return parseInt(Utils.enterTextByAnswer(answer), 10); // radix 10
    },

    enterTextInt: function(alias) {
        var answer = ApiClient.findAnswer(alias);
        return Utils.enterTextIntByAnswer(answer);
    },

    enterTextFloat: function(alias) {
        var answer = ApiClient.findAnswer(alias);
        return Utils.enterTextFloatByAnswer(answer);
    },

    // Obtiene el texto capturado en una opción de una pregunta de opciones abiertas
    // alias: alias del nodo 
    // optAlias: alias de la opción de la cual se desea obtener el texto
    enterOptText: function(alias, optAlias) {
        var answer = ApiClient.findAnswerOptions(alias);
        if (answer!=null) {
            var optionsText = answer.getOptionsText(); // jsonObject {"aliasopt":"text", "aliasopt2":"text2"}
            var text = optionsText.get(optAlias);
            return text!=null && text.trim()!="" ? text : null;
        } else {
            return null;
        }
    },

    // Obtiene el texto capturado en una opción de una pregunta de opciones abiertas
    // alias: alias del nodo 
    // optValue: valor de la opción de la cual se desea obtener el texto
    enterOptTextByValue: function(alias, optValue) {
        var opt = Utils.findItemByValue(alias, optValue);
        return Utils.enterOptText(alias, opt.getAlias());
    },

    // Obtiene el texto de la opción seleccionada en una pregunta de opciones simples o simples con otra.
    // Esta función se puede invocar con un solo argumento si no se trata de una pregunta de opciones con otra: Utils.enterOptSingleText("P10")
    enterOptSingleText: function(alias, otherValue) {
        var answer = ApiClient.findAnswerOptions(alias); // opc simples
        if (answer==null) {
            return null;
        }
        if (otherValue==null) {// no se envió el argumento, -1 por defecto
            otherValue = -1;
        }

        var enterOptAlias = answer.getEnterOption();
        var enterOpt = ApiClient.findItem(enterOptAlias);
        var enterVal = enterOpt.getValue();
        return enterVal != otherValue ? enterOpt.getText() : answer.getEnterOtherText(); // 997 (otra)
    }, 

    // Pone visibles todas las opciones del nodo "alias" a excepción de "skip" (opcional, por defecto [])
    setVisibleAllOptions: function(alias, skip) {
        if (skip==undefined) {
            skip=[];
        }
        
        var node=ApiClient.findQuestionOptions(alias);
        var nodeOpts = node.getOptions();
        for (var i = 0; i < nodeOpts.length; i++) {
            var opt = nodeOpts[i];
            if (!skip.contains(opt.getValue())) {
                opt.setVisible(true);    
            }
        }
    },
    
    // alias: alias del nodo sobre el que se va incluir las opciones, debe ser de tipo opciones/matriz
    // includeAliasNodesArray: includeAliasNodes array con los alias de los nodos de los cuales se van a incluir los valores de las opciones contestadas, pueden no traer respuesta.
    // skipValues array que contiene los valores de las opciones del nodo a omitir, las opciones con estos valores no las toca y las deja con su propiedad setVisible intacta (parámetro opcional, por defecto []).
    // resetAllOptions true: hace visibles todas las opciones antes de hacer el include, false: deja intactas las opciones en su propiedad visible (parámetro opcional, por defecto true)
    // Ejemplo:
    // includeOptionsValues("P2B", ["P2", "P2A"], [99]) : Muestra en P2B las opciones capturadas en P2/P2A, la opción con código 99 se queda visible (intacta)
    includeOptionsValues: function(alias, includeAliasNodesArray, skipValuesArray, resetAllOptions) {
        if (resetAllOptions == undefined) {
            resetAllOptions = true;
        }
        if (resetAllOptions) {
            Utils.setVisibleAllOptions(alias, skipValuesArray);
        }
        
        if (skipValuesArray==undefined) {
            skipValuesArray=[];
        }

        var valuesSel = [];
        for (var i = 0; i < includeAliasNodesArray.length; i++) {
            var aliasNode = includeAliasNodesArray[i];
            var answerOpts = ApiClient.findAnswerOptions(aliasNode);
            if (answerOpts!=null) {
                var valuesSel2 = Utils.enterOptsValuesByAnswer(answerOpts);
                for (var j = 0; j < valuesSel2.length; j++) {
                    valuesSel.push(""+valuesSel2[j]);
                }
            }
        }

        var node=ApiClient.findQuestionOptions(alias);
        var nodeOpts = node.getOptions();
        for (var i = 0; i < nodeOpts.length; i++) {
            var opt = nodeOpts[i];
            var value = opt.getValue();

            if (!skipValuesArray.contains(value) && opt.isVisible()) {
                if (valuesSel.contains(value)) { // la opción fue seleccionada
                    opt.setVisible(true);
                } else {
                    opt.setVisible(false);
                }
            }
        }
    },

    // Utils.excludeOptionsValues("P48A", ["P48"]);
    // Utils.excludeOptionsValues("P48B", ["P48", "P48A"]);
    excludeOptionsValues: function(alias, excludeAliasNodesArray, skipValuesArray, resetAllOptions) {
        if (resetAllOptions == undefined) {
            resetAllOptions = true;
        }
        if (resetAllOptions) {
            Utils.setVisibleAllOptions(alias, skipValuesArray);
        }
        
        if (skipValuesArray==undefined) {
            skipValuesArray=[];
        }

        var valuesSel = [];
        for (var i = 0; i < excludeAliasNodesArray.length; i++) {
            var aliasNode = excludeAliasNodesArray[i];
            var answerOpts = ApiClient.findAnswerOptions(aliasNode);
            if (answerOpts!=null) {
                var valuesSel2 = Utils.enterOptsValuesByAnswer(answerOpts);
                for (var j = 0; j < valuesSel2.length; j++) {
                    valuesSel.push(""+valuesSel2[j]);
                }
            }
        }

        var node=ApiClient.findQuestionOptions(alias);
        var nodeOpts = node.getOptions();
        for (var i = 0; i < nodeOpts.length; i++) {
            var opt = nodeOpts[i];
            var value = opt.getValue();

            if (!skipValuesArray.contains(value) && opt.isVisible()) {
                if (valuesSel.contains(value)) { // la opción fue seleccionada
                    opt.setVisible(false);
                } else {
                    opt.setVisible(true);
                }
            }
        }
    },

    // Ej. Utils.replaceNodeTextVars("P59", {"P12_TEXT": P12_TEXT, "P2_TEXT": P2_TEXT});
    replaceNodeTextVars: function (alias, mapVars) {
        var data = new JSONObject();
        for (var key in mapVars) {
            data.put(""+key, mapVars[key]);
        }
        var node = ApiClient.findNode(alias);
        node.expandText(data);
    },

    // valida si está capturada al menos la primer opción de la pregunta de opciones de texto abierto
    isEnterFirstMentionOptsText: function (answer) {
        if (answer==null){
            return false;
        }

        var alias = answer.getQAlias();
        var node = ApiClient.findNode(alias);
        var nodeOpts = node.getOptions();
        var firstOptAlias = nodeOpts[0].getAlias();
        var optionsText = answer.getOptionsText(); // jsonObject {"aliasopt":"text", "aliasopt2":"text2"}
        var options = optionsText.names();//jsonarray
        var firstMention = optionsText.get(firstOptAlias);
        return firstMention != null ? firstMention.trim()!="": false;
    },

    isBlank: function(text) {
        return text==null || text.trim()=="";
    },

    isInt:function(text) {
        return !isNaN(text) && (function(x) { return (x | 0) === x; })(parseFloat(text));
    },

    isEnterAllOptsText: function (answer) {
        if (answer==null){
            return false;
        }

        var firstOptAlias = nodeOpts[0].getAlias();
        var optionsText = answer.getOptionsText(); // jsonObject {"aliasopt":"text", "aliasopt2":"text2"}
        var alias = answer.getQAlias();
        var node = ApiClient.findNode(alias);   
        var nodeOpts = node.getOptions();
        for (var i = 0; i < nodeOpts.length; i++) {
            var opt = nodeOpts[i];
            var text = optionsText.get(opt.getAlias());
            if (Utils.isBlank(text)) {
                return false;
            }
        }
        return true;
    },

    // Todos lo valores de las casillas (visibles) deben ser enteros mayores o iguales a 0
    isEnterAllOptsTextAsPosInt: function (answer) {
        if (answer==null){
            return false;
        }

        var optionsText = answer.getOptionsText(); // jsonObject {"aliasopt":"text", "aliasopt2":"text2"}
        var alias = answer.getQAlias();
        var node = ApiClient.findNode(alias);   
        var nodeOpts = node.getOptions();
        for (var i = 0; i < nodeOpts.length; i++) {
            var opt = nodeOpts[i];
            if (!opt.isVisible()){
                continue;
            }

            if (optionsText.has(opt.getAlias())) {
                var text = optionsText.get(opt.getAlias());
                if (!Utils.isInt(text) || text<0) {
                    return false;
                }   
            } else {
                return false;
            }
        }
        return true;
    },

    // retorna true si ninguna columna o solo 1 tiene el valor de la columna indicada
    isTwoOrMoreRowsWithColValue: function(answer, colValue) {
        var matrixJsonObj = answer.getEnterMatrix(); // jsonobject {"aliasOpt1":"aliasCol1", "aliasOpt2":"aliasCol1"}
        var options = matrixJsonObj.names();
        var countCol = 0;
        for (var i = 0; i < options.length(); i++) {
            var optionAlias = options.get(i);
            var colAlias = matrixJsonObj.get(optionAlias);
            var col = ApiClient.findItem(colAlias);
            var colVal = col.getValue();
            if (colVal==colValue) {
                countCol++;
            }
        }

        return countCol>=2;
    },

    // oculta el item con valor "itemValue" que se encuentra dentro del nodo "alias"
    hideItemWithValue: function(alias, itemValue) {
        var node = ApiClient.findNode(alias);
        var item = Utils.findItemByValue(alias, itemValue);
        item.setVisible(false);
    },

    // muestra el item con valor "itemValue" que se encuentra dentro del nodo "alias"
    showItemWithValue: function(alias, itemValue) {
        var node = ApiClient.findNode(alias);
        var item = Utils.findItemByValue(alias, itemValue);
        item.setVisible(true);
    },

    // Busca dentro del nodo "alias" el item con valor itemValue
    findItemByValue: function(alias, itemValue) {
        var node = ApiClient.findNode(alias);
        var items = node.getItems();
        for (var i = 0; i < items.length; i++) {
            var item = items[i];
            if (item.getValue() == itemValue) {
                return item;
            }
        }
        throw "no existe el item " + itemValue + " dentro del nodo " + alias;
    },

    // Si eligen el código que se encuentra en la llave del mapa dentro de "aliasValues", mostrará "aliasShows" con el valor del código del mapa.
    // 
    // Ejemplo:
    // ThisUtils.showAndWaitByMapRules("P12", "F8", {1:"A", 2:"B", 3:"C", 4:"D"});
    // Muestra P12A si eligen F8(cod1)
    // Muestra P12B si eligen F8(cod2)
    // Muestra P12C si eligen F8(cod3)
    // Muestra P12D si eligen F8(cod4)
    showAndWaitByMapRules: function(aliasShows, aliasValues, map) {
        var enterValues = Utils.enterOptsValues(aliasValues);
        for (var key in map) {
            if (enterValues.contains(key)) {
                var letter = map[key];
                ApiClient.showAndWait(aliasShows+letter);
            }
        }

    },

    // muestra el nodo "alias" sustituyendo previamente las variables de "mapVars"
    showAndWaitWithReplace: function(alias, mapVars) {
        Utils.replaceNodeTextVars(alias, mapVars);
        ApiClient.showAndWait(alias);
    },

    onlyShowItemWithValue: function(alias, itemValue, skipValuesArray) {
        if (skipValuesArray==null) {
            skipValuesArray=[];
        }

        var node = ApiClient.findNode(alias);
        var items = node.getItems();
        for (var i = 0; i < items.length; i++) {
            var item = items[i];
            var val = item.getValue();
            if(!skipValuesArray.contains(val)) {
                item.setVisible(val == itemValue);
            }
        }
    },

   // Obtiene los valores de las opciones seleccionadas en los nodos "nodesArray"
   // nodesArray: array con los alias de los nodos 
   enterNodesOptsValues: function (nodesArray) {
        var valuesSelAll = [];
        for (var i = 0; i < nodesArray.length; i++) {
            var nodeValuesSel = Utils.enterOptsValues(nodesArray[i]);
            valuesSelAll = valuesSelAll.concat(nodeValuesSel);
        }
        return valuesSelAll;
   },
}

ThisUtils = {
    // obtiene los textos de las opciones OTRA1/OTRA2/OTRA3
    getP2OtherTexts123: function() {
        var text1=null;
        var text2=null;
        var text3=null;
        var enterValP2 = Utils.enterOptValue("P2");
        if (enterValP2 == 997) {
            // Si contestan algo en P2/OTRA:
            // T1: P2/OTRA
            // T2: P2T_1
            // T3: P2T_2
            text1 = Utils.enterOptSingleText("P2", 997);
            text2 = Utils.enterOptTextByValue("P2T", 9971);
            text3 = Utils.enterOptTextByValue("P2T", 9972);
        } else {
            // Si NO contestan algo en P2/OTRA:
            // T1: P2T_1
            // T2: P2T_2
            // T3: P2T_3    
            text1 = Utils.enterOptTextByValue("P2T", 9971);
            text2 = Utils.enterOptTextByValue("P2T", 9972);
            text3 = Utils.enterOptTextByValue("P2T", 9973);
        }

        return [text1,text2,text3];
    },
}

 
function onNavigate(params) {
    ApiClient.showAndWait($node);
    var next = ApiClient.findNext($node);
    return next;
}

以上是关于javascript Obtiene los textos de las opciones otra的主要内容,如果未能解决你的问题,请参考以下文章

LOS MAS VISTOS,功能WORDPRESS

javascript Los productos mas vendidos

javascript Ciclo de vida de los componentes

javascript Estado de los componentes en ReactJs

markdown Obtiene子阵列de un array

markdown Obtiene子阵列de un array