Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SELECT2] Allow initialization JS overrides #666

Open
andruhon opened this issue Jun 19, 2019 · 9 comments
Open

[SELECT2] Allow initialization JS overrides #666

andruhon opened this issue Jun 19, 2019 · 9 comments
Assignees

Comments

@andruhon
Copy link
Contributor

The JS initialization script was moved from renderHead to Select2Behavior which is burned into the
AbstractSelect2Choice as a private final added in the constructor.

I would add a protected method, something like getSelect2Behavior which would return the select2Behavior, but will allow us to override it (maybe restrict to the Select2Behavior).

The JS inside could also be made customisable. Alternatively the string can be amended without overrides, though Select2Behavior settings.

Currently we have to do some hacking to get rid of default behavior, to add our slightly customized JS:

Optional<? extends Behavior> select2Behavour = getBehaviors().stream().filter(behaviour -> behaviour instanceof Select2Behavior).findFirst();
       if (select2Behavour.isPresent()) {
           remove(select2Behavour.get());
       }
@solomax
Copy link
Contributor

solomax commented Jun 19, 2019

The functionality you are requesting is already implemented :)

You can override JS/CSS scripts
Please take a look at ApplicationSettings class

:)

@solomax solomax self-assigned this Jun 19, 2019
@andruhon
Copy link
Contributor Author

Thank you @solomax ! The intent is not to replace the JS file reference, but to change this string: "$('#%s').select2(%s);"

@solomax
Copy link
Contributor

solomax commented Jun 19, 2019

So you would like select2 drop-down will not be select2?
Maybe you can provide sort of real-life-example?

@andruhon
Copy link
Contributor Author

@solomax Kind of. Unfortunately some things are not available through options and it's needed to "override" the constructor like this:

    $.fn.select2.amd.define("select2/myMagicSelect2",
            ['select2/core'],
            function (Select2) {
                return function ($el, options) {
                    // my magic stuff
                    var select = new Select2($el, options);
                    // more magic stuff
                }
            }
    );

and later call something like

$.fn.select2.amd.require('select2/myMagicSelect2')($select, options);

So the $.fn.select2.amd.require('select2/myMagicSelect2')($('#%s'), %s) would replace $('#%s').select2(%s);

@solomax
Copy link
Contributor

solomax commented Jun 19, 2019

I believe you can create PR :)

@andruhon
Copy link
Contributor Author

I will

@andruhon
Copy link
Contributor Author

@solomax is JIRA also needed?

@solomax
Copy link
Contributor

solomax commented Jun 19, 2019

@andruhon no JIRA is required, this is not part of Apache Wicket :)

@solomax
Copy link
Contributor

solomax commented Jun 20, 2019

@andruhon I believe the easiest way to implement this will be one more setting in ApplicationSettings class :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants