jq_radio.anubis 3.38 KB
/*
 * Created by PyramIDE.
 * User: フランスのトトロ
 * Date: 28/06/2015
 * Time: 02:22
 * © Calexium
 */

transmit xlib/web/CXM_making_a_web_site.anubis
transmit xlib/web/CXM_jquery.anubis
transmit xlib/web/jQuery/CXM_jquery_button.anubis
transmit xlib/web/jQuery/CXM_jquery_icons.anubis
transmit xlib/web/js_tools.anubis
transmit tools/basis.anubis
transmit system/string.anubis
transmit tools/random.anubis

public type RadioGroup:
    group(String name),
    none.

define String
  radio_init_script
  (
    String radio_id,
    RadioGroup radio_group,
    Bool   initial_state
  ) =
    "var radio = $('#" + radio_id + "');" +

    if radio_group is
    {
        group(name) then
            "radio.addClass('radio-group-" + name + "');",

        none then
            ""
    } +

    if initial_state then
      "radio.addClass('checked');"
    else
      "radio.addClass('unchecked');".

define String
    multi_select_script
    (
        Bool multi_select_with_shift,
        String script
    ) =
        if multi_select_with_shift then
            "if (!e.shiftKey) {" + script + "} else { window.getSelection().removeAllRanges(); radio.toggleClass('checked').toggleClass('unchecked'); }"
        else
            script.

define String
  radio_onclick_script
  (
    String radio_id,
    RadioGroup radio_group,
    Bool multi_select_with_shift,
    String on_script
  ) =
    "
     var radio = $('#" + radio_id + "');
    " +
    multi_select_script(multi_select_with_shift,
        " if (radio.hasClass('checked')) return;" +

            if radio_group is
            {
                group(name) then
                    with jq_selector = "$('.radio-group-" + name + ":not(#" + radio_id + ")')",
                    jq_selector + ".addClass('unchecked').removeClass('checked');",

                none then
                    ""
            } +

        "radio.removeClass('unchecked').addClass('checked');"
    ) + on_script.

public define HTML_Partial_Content
  jq_img_radio
  (
    String              radio_id,
    RadioGroup          radio_group,
    Bool                initial_state,
    Bool                multi_select_with_shift,
    String              image_url,
    String              checkbox_label,
    String              on_script,
    Icon_orientation    orientation
  ) =
    partial_content(
      [
        js_inline(jquery_ready(radio_init_script(radio_id, radio_group, initial_state)))
      ],
      jquery_button(jquery_img_button(image_url, checkbox_label, radio_id, jQuery_actioner(same, jqscript(radio_onclick_script(radio_id, radio_group, multi_select_with_shift, on_script))), orientation))
    ).

public define HTML_Partial_Content
  jq_img_radio
  (
    String              radio_id,
    RadioGroup          radio_group,
    Bool                initial_state,
    String              image_url,
    String              checkbox_label,
    String              script,
    Icon_orientation    orientation
  ) =
    jq_img_radio(radio_id, none, initial_state, false, image_url, checkbox_label, script, orientation).

public define HTML_Partial_Content
  jq_img_radio
  (
    String              radio_id,
    Bool                initial_state,
    String              image_url,
    String              checkbox_label,
    String              script,
    Icon_orientation    orientation
  ) =
    jq_img_radio(radio_id, none, initial_state, false, image_url, checkbox_label, script, orientation).