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 );