MediaWiki:Lékařská kalkulačka/Generator.js
Z WikiSkript
Poznámka: Po zveřejnění musíte vyprázdnit cache vašeho prohlížeče, jinak změny neuvidíte.
- Firefox / Safari: Při kliknutí na Aktualizovat držte Shift nebo stiskněte Ctrl-F5 nebo Ctrl-R (na Macu ⌘-R)
- Google Chrome: Stiskněte Ctrl-Shift-R (na Macu ⌘-Shift-R)
- Internet Explorer / Edge: Při kliknutí na Aktualizovat držte Ctrl nebo stiskněte Ctrl-F5
- Opera: Stiskněte Ctrl-F5.
/**
* ReplaceAll by Fagner Brack (MIT Licensed)
* Replaces all occurrences of a substring in a string
*/
String.prototype.replaceAll = function(token, newToken, ignoreCase) {
var str, i = -1, _token;
if((str = this.toString()) && typeof token === "string") {
_token = ignoreCase === true? token.toLowerCase() : undefined;
while((i = (
_token !== undefined?
str.toLowerCase().indexOf(
_token,
i >= 0? i + newToken.length : 0
) : str.indexOf(
token,
i >= 0? i + newToken.length : 0
)
)) !== -1 ) {
str = str.substring(0, i)
.concat(newToken)
.concat(str.substring(i + token.length));
}
}
return str;
};
/**************** Funkce ****************/
function lekarska_kalkulacka_Generator_createHtml( gObject ) {
var html = "<div id='lekarska_kalkulacka_" + gObject.id + "' class='lekarska_kalkulacka'>\n\tTento prvek vyžaduje JavaScript.\n\t<div style='display: none' id='lekarska_kalkulacka_" + gObject.id + "-content'>";
html += "\n\t\t<paragraph>" + gObject.popis + "</paragraph>";
$.each( gObject.otazky, function ( index, value ) {
if (value.typ == 'radio') {
var questionId = 'lekarska_kalkulacka_' + gObject.id + '-' + value.otazka.id;
html += "\n\t\t<fieldset id='" + questionId + "'>";
html += "\n\t\t\t<legend>" + value.otazka.text + "</legend>";
for (var i = 0; i < value.otazka.pocet; i++) {
html += "\n\n\t\t\t<input type='radio' name='" + value.otazka.nazev + "' id='" + questionId + i + "' value='" + i + "'";
if (i == 0) {
html += " checked='checked'";
}
html += " />";
html += "\n\t\t\t<label for='" + questionId + i + "'>možnost" + i + "</label>";
}
html += "\n\t\t</fieldset>\n";
} else if (value.typ == 'slider') {
var questionId = 'lekarska_kalkulacka_' + gObject.id + '-' + value.otazka.id;
html += "\n\t\t<fieldset id='" + questionId + "'>";
html += "\n\t\t\t<legend>" + value.otazka.text + "</legend>";
html += "\n\n\t\t\t<input type='range' id='" + questionId + "-range' value='" + value.otazka.min + "' min='" + value.otazka.min + "' max='" + value.otazka.max + "' />";
html += "\n\n\t\t\t<input type='number' name='" + value.otazka.nazev + "' id='" + questionId + "-number' value='" + value.otazka.min + "' min='" + value.otazka.min + "' max='" + value.otazka.max + "' step='" + value.otazka.step + "' /> jednotka\n";
html += "\n\t\t</fieldset>\n";
}
});
html += "\n\t\t<paragraph>Výsledek: <resValue id='lekarska_kalkulacka_" + gObject.id + "-vysledek'></resValue></paragraph>";
html += "\n\t</div>";
html += "\n</div>";
html += "\n<noinclude>";
html += "\n== Odkazy ==";
html += "\n=== Reference ===";
html += "\n<references />";
html += "\n</noinclude>";
html += "\n[[Kategorie:Lékařská kalkulačka]]";
$( '#lekarska_kalkulacka_Generator-html' ).html( html );
};
function lekarska_kalkulacka_Generator_createJs( gObject ) {
var js = "Vlož funkci replaceAll\n";
js += "Převod do html podoby\n";
js += "var content = $( '#lekarska_kalkulacka_" + gObject.id + "-content' ).text();\n";
js += "$( '#lekarska_kalkulacka_" + gObject.id + "' ).html( content.replaceAll('paragraph', 'p' ).replaceAll( 'resValue', 'span' ).replaceAll('breakline', 'br' ).replaceAll('division', 'div').replaceAll('orderedlist', 'ol') );\n\n";
js += "$( 'input' ).change( function() {\n";
$.each( gObject.otazky, function ( index, value ) {
if (value.typ == 'radio') {
js += " var " + value.otazka.nazev + " = parseInt($('input[name=" + value.otazka.nazev + "]:checked').val());\n";
} else if (value.typ == 'slider') {
var questionId = 'lekarska_kalkulacka_' + gObject.id + '-' + value.otazka.id
js += " var " + value.otazka.nazev + " = $( '#" + questionId + "-number').val();\n";
//TODO PROVÁZANOST RANGE A NUMBER
}
});
js += " var result = 'result';\n";
js += " $( '#lekarska_kalkulacka_" + gObject.id + "-vysledek' ).html( result );\n";
js += "});\n";
$( '#lekarska_kalkulacka_Generator-js' ).html( js );
}
function lekarska_kalkulacka_Generator_format( i ) {
if ( i < 10 ) {
return '0' + i;
}
return i;
}
/**************** Vlastní provedení ****************/
var content = $( '#lekarska_kalkulacka_Generator-content' ).text();
$( '#lekarska_kalkulacka_Generator' ).html( content.replaceAll('breakline', 'br' ).replaceAll('division', 'div').replaceAll('orderedlist', 'ol') );
$( '#lekarska_kalkulacka_Generator-content' ).html('');
$( '#lekarska_kalkulacka_Generator-parametry-slider').hide();
$( 'input[type=radio][name=Generator-typ]').change(function() {
$( '#lekarska_kalkulacka_Generator-parametry-radio').toggle();
$( '#lekarska_kalkulacka_Generator-parametry-slider').toggle();
});
var sliderNo = 0;
var radioNo = 0;
var generatorObject = { name: "jmeno", id: "id", popis: "popis", otazky: [] };
$( '#lekarska_kalkulacka_Generator-pridej' ).click( function() {
if ( $('input[name=Generator-typ]:checked').val() == 'radio' ) {
var radioOtazka = $( '#lekarska_kalkulacka_Generator-radio-otazka' ).val();
var radioNazev = $( '#lekarska_kalkulacka_Generator-radio-nazev-promenne' ).val();
var radioId = $( '#lekarska_kalkulacka_Generator-radio-id-promenne' ).val();
var radioPocetMoznosti = $( '#lekarska_kalkulacka_Generator-radio-pocet-moznosti' ).val();
generatorObject.otazky.push({
typ: 'radio',
otazka: { text: radioOtazka, nazev: radioNazev, id: radioId, pocet: radioPocetMoznosti }
});
radioNo++;
var no = lekarska_kalkulacka_Generator_format( radioNo );
$( '#lekarska_kalkulacka_Generator-radio-otazka' ).val( 'otazka' + no);
$( '#lekarska_kalkulacka_Generator-radio-nazev-promenne' ).val('nazev-promenne' + no);
$( '#lekarska_kalkulacka_Generator-radio-id-promenne' ).val('id-promenne' + no);
} else if ( $('input[name=Generator-typ]:checked').val() == 'slider' ) {
var sliderOtazka = $( '#lekarska_kalkulacka_Generator-slider-otazka' ).val();
var sliderNazev = $( '#lekarska_kalkulacka_Generator-slider-nazev-promenne' ).val();
var sliderId = $( '#lekarska_kalkulacka_Generator-slider-id-promenne' ).val();
var sliderMin = $( '#lekarska_kalkulacka_Generator-slider-min' ).val();
var sliderMax = $( '#lekarska_kalkulacka_Generator-slider-max' ).val();
var sliderStep = $( '#lekarska_kalkulacka_Generator-slider-step' ).val();
generatorObject.otazky.push({
typ: 'slider',
otazka: { text: sliderOtazka, nazev: sliderNazev, id: sliderId, min: sliderMin, max: sliderMax, step: sliderStep }
});
sliderNo++;
var no = lekarska_kalkulacka_Generator_format( sliderNo );
$( '#lekarska_kalkulacka_Generator-slider-otazka' ).val('otazka'+no);
$( '#lekarska_kalkulacka_Generator-slider-nazev-promenne' ).val('nazev-promenne'+no);
$( '#lekarska_kalkulacka_Generator-slider-id-promenne' ).val('id-promenne'+no);
}
var ol = '';
$.each( generatorObject.otazky, function ( index, value ) {
if (value.typ == 'radio') {
ol += '<li>radio|' + value.otazka.text + '|' + value.otazka.nazev + '|' + value.otazka.id + '|' + value.otazka.pocet + '</li>';
} else if (value.typ == 'slider') {
ol += '<li>slider|' + value.otazka.text + '|' + value.otazka.nazev + '|' + value.otazka.id + '|' + value.otazka.min + '|' + value.otazka.max + '|' + value.otazka.step + '</li>';
}
});
$( '#lekarska_kalkulacka_Generator-fieldsets' ).html( ol) ;
});
$( '#lekarska_kalkulacka_Generator-vytvor' ).click( function() {
generatorObject.id = $( '#lekarska_kalkulacka_Generator-id' ).val();
generatorObject.id = generatorObject.id.charAt(0).toUpperCase() + generatorObject.id.slice(1); //první písmeno velké (kompatibilita s názvem stránek ve WS)
generatorObject.name = $( '#lekarska_kalkulacka_Generator-nazev' ).val();
generatorObject.popis = $( '#lekarska_kalkulacka_Generator-popis' ).val();
lekarska_kalkulacka_Generator_createHtml( generatorObject );
lekarska_kalkulacka_Generator_createJs( generatorObject );
});
lekarska_kalkulacka_Generator_createHtml( generatorObject );
lekarska_kalkulacka_Generator_createJs( generatorObject );