132 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
export const TemariosEnPDF = (function(){
 | 
						|
 | 
						|
    /** 
 | 
						|
     * @callback temarios_en_pdf_preload_callback
 | 
						|
     * @param {?HTMLElement} item 
 | 
						|
     * @returns {void}
 | 
						|
     */
 | 
						|
 | 
						|
    /**
 | 
						|
     * @constructs TemariosEnPDF
 | 
						|
     * @returns {void}
 | 
						|
     * @access private
 | 
						|
     * @static
 | 
						|
     */
 | 
						|
    const TemariosEnPDF = function(){};
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param {!string} selector 
 | 
						|
     * @param {!temarios_en_pdf_preload_callback} callback 
 | 
						|
     * @returns {void}
 | 
						|
     * @access public
 | 
						|
     * @static
 | 
						|
     */
 | 
						|
    TemariosEnPDF.preload = (selector, callback) => {
 | 
						|
 | 
						|
        /** @type {number} */
 | 
						|
        let interval = setInterval(() => {
 | 
						|
 | 
						|
            /** @type {?HTMLElement} */
 | 
						|
            const item = document.querySelector(selector);
 | 
						|
 | 
						|
            if(item){
 | 
						|
                clearInterval(interval);
 | 
						|
                callback(item);
 | 
						|
            };
 | 
						|
        }, 100);
 | 
						|
        
 | 
						|
    };
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param {!string} html 
 | 
						|
     * @returns {string}
 | 
						|
     * @access public
 | 
						|
     * @static
 | 
						|
     */
 | 
						|
    TemariosEnPDF.load_tests_from_txt_body = () => {
 | 
						|
        TemariosEnPDF.preload("body", body => {
 | 
						|
 | 
						|
            /** @type {[string, string]} */
 | 
						|
            const [questions_box, results_box] = body.innerHTML.split(/[\r\n](?:PREGUNTAS TIPO TEST|PLANTILLA DE CONTESTACIÓN|CLAVES DE CONTESTACIÓN)[\r\n]/ig).filter((_, i) => i % 2), 
 | 
						|
                  /** @type {string[]} */
 | 
						|
                  results = results_box.split(/[\r\n]+/).filter(line => /^[0-9]+[\s.-]*[A-Z]$/i.test(line)).map(line => line.replace(/^[0-9]+[\s.-]*/i, "").trim()), 
 | 
						|
                  /** @type {Array<{origin: string, sources: string[], title: string, queries: Array<{question: string, rights: string[], wrongs: string[]}>}>} */
 | 
						|
                  data = [];
 | 
						|
            /** @type {string} */
 | 
						|
            let subject, 
 | 
						|
                /** @type {string} */
 | 
						|
                group, 
 | 
						|
                /** @type {number} */
 | 
						|
                i = -1, 
 | 
						|
                /** @type {number} */
 | 
						|
                j, 
 | 
						|
                /** @type {number|null} */
 | 
						|
                k = null, 
 | 
						|
                /** @type {number} */
 | 
						|
                m;
 | 
						|
 | 
						|
            questions_box.replace(/(?:(?:(?!(?:página\s+[0-9]+))(?:.|[\r\n]+))+)página\s+[0-9]\s*[\r\n]+/i, "").replace(/^www\.[^\r\n]+[\r\n]+©[^\r\n]+[\r\n]+/igm, "").replace(/^(?:[0-9]+\.\-\s*([^\r\n]+)|([a-z])\)\s*([^\r\n]+)|([^\r\n]+))/img, (_, question, identifier, answer, subtitle) => {
 | 
						|
                if(subtitle){
 | 
						|
                    if(subtitle.toUpperCase() == subtitle){
 | 
						|
                        if(subject){
 | 
						|
                            if(j == -1)
 | 
						|
                                data[i].title += " " + subtitle.trim();
 | 
						|
                            else{
 | 
						|
                                group = subtitle.trim();
 | 
						|
                                data.push({
 | 
						|
                                    /** @type {string} */
 | 
						|
                                    origin : "temariosenpdf.es",
 | 
						|
                                    /** @type {Array.<string>} */
 | 
						|
                                    sources : ["https://temariosenpdf.es/archivos/50_Test_LOPD_3.pdf"],
 | 
						|
                                    /** @type {string} */
 | 
						|
                                    title : subject + " - " + group,
 | 
						|
                                    /** @type {Array.<Object.<string, string|Array.<string>>>} */
 | 
						|
                                    queries : []
 | 
						|
                                });
 | 
						|
                                i ++;
 | 
						|
                                j = -1;
 | 
						|
                            };
 | 
						|
                        }else 
 | 
						|
                            subject = subtitle.trim();
 | 
						|
                    }else{
 | 
						|
                        if(k)
 | 
						|
                            data[i].queries[j][k][m] = (data[i].queries[j][k][m] + " " + subtitle.trim()).replace(/\- /g, "");
 | 
						|
                        else 
 | 
						|
                            data[i].queries[j].question = (data[i].queries[j].question + " " + subtitle.trim()).replace(/\- /g, "");
 | 
						|
                    };
 | 
						|
                }else if(question){
 | 
						|
                    k = null;
 | 
						|
                    data[i].queries.push({
 | 
						|
                        /** @type {string} */
 | 
						|
                        question: question.trim(),
 | 
						|
                        /** @type {Array.<string>} */
 | 
						|
                        rights : [], 
 | 
						|
                        /** @type {Array.<string>} */
 | 
						|
                        wrongs : []
 | 
						|
                    });
 | 
						|
                    j ++;
 | 
						|
                }else if(answer){
 | 
						|
                    m = data[i].queries[j][k = results[j] == identifier ? "rights" : "wrongs"].length;
 | 
						|
                    data[i].queries[j][k].push(answer.trim());
 | 
						|
                };
 | 
						|
            });
 | 
						|
 | 
						|
            console.log(JSON.stringify(data));
 | 
						|
 | 
						|
        });
 | 
						|
    };
 | 
						|
 | 
						|
    TemariosEnPDF.load_direct_tests_from_html = () => {
 | 
						|
        TemariosEnPDF.preload("body", body => {
 | 
						|
 | 
						|
            const data = [];
 | 
						|
 | 
						|
            body.innerHTML.split(/[\r\n]CLAVES DE RESPUESTAS[\r\n]/i)[1].split(/[\r\n]+/).forEach(line => {});
 | 
						|
            
 | 
						|
        });
 | 
						|
    };
 | 
						|
 | 
						|
    return TemariosEnPDF;
 | 
						|
}()); |