Sophie

Sophie

distrib > Mageia > 5 > x86_64 > media > core-release > by-pkgid > 172c1664c1b04f81ec554152c4e33250 > files > 13

php-pear-HTML_QuickForm2-2.0.2-5.mga5.noarch.rpm

/**
 * Javascript for dualselect element handling
 *
 * Contains methods for moving options between selects and also for selecting
 * all options of 'to' select on form submit. This is necessary since
 * unselected options obviously won't send any values.
 */

qf.elements.dualselect = (function() {

    function addOption(box, option, keepSorted)
    {
        if (!keepSorted || 0 == box.options.length
            || option.text > box.options[box.options.length-1].text
        ) {
            box.options[box.options.length] = option;

        } else if (option.text < box.options[0].text) {
            try {
                // IE way
                box.add(option, 0);
            } catch (e) {
                // Standards way
                box.add(option, box.options[0]);
            }

        } else {
            for (var i = box.options.length - 1; i >= 0; i--) {
                if (option.text >= box.options[i].text) {
                    try {
                        // IE way
                        box.add(option, i + 1);
                    } catch (e) {
                        // Standards way
                        box.add(option, box.options[i + 1]);
                    }
                    break;
                }
            }
        }
        return true;
    };
    
    return {
        init: function(baseId, keepSorted)
        {
            var dest = document.getElementById(baseId + '-to');
            qf.events.addListener(dest.form, 'submit', function() {
                for (var option, i = 0; option = dest.options[i]; i++) {
                    option.selected = true;
                }
            });
            qf.events.addListener(document.getElementById(baseId + '-fromto'), 'click', function(event) {
                qf.elements.dualselect.moveOptions(baseId + '-from', baseId + '-to', keepSorted);
                qf.Validator.liveHandler(event);
            });
            qf.events.addListener(document.getElementById(baseId + '-tofrom'), 'click', function(event) {
                qf.elements.dualselect.moveOptions(baseId + '-to', baseId + '-from', keepSorted);
                qf.Validator.liveHandler(event);
            });
        },

        moveOptions: function(srcId, destId, keepSorted)
        {
            var src  = document.getElementById(srcId);
            var dest = document.getElementById(destId);

            for (var i = src.options.length - 1; i >= 0; i--) {
                if (src.options[i].selected) {
                    var option = src.options[i];
                    src.remove(i);
                    option.selected = false;
                    addOption(dest, option, keepSorted);
                }
            }
        },

        getValue: function (destId)
        {
            var values = [], el = document.getElementById(destId);
            if (el.disabled) {
                return null;
            }
            for (var option, i = 0; option = el.options[i]; i++) {
                values.push(option.value);
            }
            return values;
        }
    };
})();