/** * Registers JS code to help initialize Select2 widgets * with access to netis\crud\crud\ActiveController API. * @param \yii\web\View $view */ public static function registerSelect($view) { $script = <<<JavaScript (function (s2helper, \$, undefined) { "use strict"; s2helper.formatResult = function (result, container, query, escapeMarkup, depth) { if (typeof depth == 'undefined') { depth = 0; } var markup = []; window.Select2.util.markMatch(result._label, query.term, markup, escapeMarkup); return markup.join(""); }; s2helper.formatSelection = function (item) { return item._label; }; // generates query params s2helper.data = function (term, page) { return { search: term, page: page }; }; // builds query results from ajax response s2helper.results = function (data, page) { return { results: data.items, more: page < data._meta.pageCount }; }; s2helper.getParams = function (element) { var primaryKey = element.data('relation-pk'); if (typeof primaryKey === 'undefined' || primaryKey === null) { primaryKey = 'id'; } var params = {search: {}}; params.search[primaryKey] = element.val(); return params; }; s2helper.initSingle = function (element, callback) { \$.getJSON(element.data('select2').opts.ajax.url, s2helper.getParams(element), function (data) { if (typeof data.items[0] != 'undefined') { callback(data.items[0]); } }); }; s2helper.initMulti = function (element, callback) { \$.getJSON(element.data('select2').opts.ajax.url, s2helper.getParams(element), function (data) {callback(data.items);}); }; }( window.s2helper = window.s2helper || {}, jQuery )); JavaScript; $view->registerJs($script, \yii\web\View::POS_END, 'netis.s2helper'); \maddoger\widgets\Select2BootstrapAsset::register($view); }
/** * @inheritdoc */ protected function registerClientScript() { $clientOptions = Json::encode($this->clientOptions); $selector = $this->options['id']; $view = $this->getView(); if ($this->registerBootstrapAsset === true) { Select2BootstrapAsset::register($view); } else { Select2Asset::register($view); } $this->getView()->registerJs("\$('#{$selector}').select2({$clientOptions});"); if (!empty($this->clientEvents)) { $js = []; foreach ($this->clientEvents as $event => $handler) { $js[] = "\$('#{$selector}').on('{$event}', {$handler});"; } $js = implode("\n", $js); $view->registerJs($js); } }