123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400 |
- module('Selection containers - Placeholders - Allow clear');
-
- var Placeholder = require('select2/selection/placeholder');
- var AllowClear = require('select2/selection/allowClear');
-
- var SingleSelection = require('select2/selection/single');
- var MultipleSelection = require('select2/selection/multiple');
-
- var $ = require('jquery');
- var Options = require('select2/options');
- var Utils = require('select2/utils');
-
- var AllowClearPlaceholder = Utils.Decorate(
- Utils.Decorate(SingleSelection, Placeholder),
- AllowClear
- );
-
- var allowClearOptions = new Options({
- placeholder: {
- id: 'placeholder',
- text: 'This is the placeholder'
- },
- allowClear: true
- });
-
- test('clear is not displayed for single placeholder', function (assert) {
- var selection = new AllowClearPlaceholder(
- $('#qunit-fixture .single-with-placeholder'),
- allowClearOptions
- );
-
- var $selection = selection.render();
-
- selection.update([{
- id: 'placeholder'
- }]);
-
- assert.equal(
- $selection.find('.select2-selection__clear').length,
- 0,
- 'The clear icon should not be displayed'
- );
- });
-
- test('clear is not displayed for multiple placeholder', function (assert) {
- var selection = new AllowClearPlaceholder(
- $('#qunit-fixture .multiple'),
- allowClearOptions
- );
-
- var $selection = selection.render();
-
- selection.update([]);
-
- assert.equal(
- $selection.find('.select2-selection__clear').length,
- 0,
- 'The clear icon should not be displayed'
- );
- });
-
-
- test('clear is displayed for placeholder', function (assert) {
- var selection = new AllowClearPlaceholder(
- $('#qunit-fixture .single-with-placeholder'),
- allowClearOptions
- );
-
- var $selection = selection.render();
-
- selection.update([{
- id: 'one',
- test: 'one'
- }]);
-
- assert.equal(
- $selection.find('.select2-selection__clear').length,
- 1,
- 'The clear icon should be displayed'
- );
- });
-
- test('clear icon should have title displayed', function (assert) {
- var selection = new AllowClearPlaceholder(
- $('#qunit-fixture .single-with-placeholder'),
- allowClearOptions
- );
-
- var $selection = selection.render();
-
- selection.update([{
- id: 'one',
- test: 'one'
- }]);
-
- assert.equal(
- $selection.find('.select2-selection__clear').attr('title'),
- 'Remove all items',
- 'The clear icon should have title displayed'
- );
- });
-
- test('clicking clear will set the placeholder value', function (assert) {
- var $element = $('#qunit-fixture .single-with-placeholder');
-
- var selection = new AllowClearPlaceholder(
- $element,
- allowClearOptions
- );
- var container = new MockContainer();
-
- var $selection = selection.render();
-
- selection.bind(container, $('<div></div>'));
-
- $element.val('One');
- selection.update([{
- id: 'One',
- text: 'One'
- }]);
-
- var $remove = $selection.find('.select2-selection__clear');
- $remove.trigger('mousedown');
-
- assert.equal(
- $element.val(),
- 'placeholder',
- 'The value should have been reset to the placeholder'
- );
- });
-
- test('clicking clear will trigger the unselect event', function (assert) {
- assert.expect(4);
-
- var $element = $('#qunit-fixture .single-with-placeholder');
-
- var selection = new AllowClearPlaceholder(
- $element,
- allowClearOptions
- );
- var container = new MockContainer();
-
- var $selection = selection.render();
-
- selection.bind(container, $('<div></div>'));
-
- $element.val('One');
- selection.update([{
- id: 'One',
- text: 'One'
- }]);
-
- selection.on('unselect', function (ev) {
- assert.ok(
- 'data' in ev && ev.data,
- 'The event should have been triggered with the data property'
- );
-
- assert.ok(
- $.isPlainObject(ev.data),
- 'The data should be an object'
- );
-
- assert.equal(
- ev.data.id,
- 'One',
- 'The data should be the unselected object'
- );
-
- assert.equal(
- $element.val(),
- 'placeholder',
- 'The previous value should be unselected'
- );
- });
-
- var $remove = $selection.find('.select2-selection__clear');
- $remove.trigger('mousedown');
- });
-
- test('preventing the unselect event cancels the clearing', function (assert) {
- var $element = $('#qunit-fixture .single-with-placeholder');
-
- var selection = new AllowClearPlaceholder(
- $element,
- allowClearOptions
- );
- var container = new MockContainer();
-
- var $selection = selection.render();
-
- selection.bind(container, $('<div></div>'));
-
- $element.val('One');
- selection.update([{
- id: 'One',
- text: 'One'
- }]);
-
- selection.on('unselect', function (ev) {
- ev.prevented = true;
- });
-
- var $remove = $selection.find('.select2-selection__clear');
- $remove.trigger('mousedown');
-
- assert.equal(
- $element.val(),
- 'One',
- 'The placeholder should not have been set'
- );
- });
-
- test('clicking clear will trigger the clear event', function (assert) {
- assert.expect(5);
-
- var $element = $('#qunit-fixture .single-with-placeholder');
-
- var selection = new AllowClearPlaceholder(
- $element,
- allowClearOptions
- );
- var container = new MockContainer();
-
- var $selection = selection.render();
-
- selection.bind(container, $('<div></div>'));
-
- $element.val('One');
- selection.update([{
- id: 'One',
- text: 'One'
- }]);
-
- selection.on('clear', function (ev) {
- assert.ok(
- 'data' in ev && ev.data,
- 'The event should have been triggered with the data property'
- );
-
- assert.ok(
- $.isArray(ev.data),
- 'The data should be an array'
- );
-
- assert.equal(
- ev.data.length,
- 1,
- 'The data should contain one item for each value'
- );
-
- assert.equal(
- ev.data[0].id,
- 'One',
- 'The data should contain unselected objects'
- );
-
- assert.equal(
- $element.val(),
- 'placeholder',
- 'The previous value should be unselected'
- );
- });
-
- var $remove = $selection.find('.select2-selection__clear');
- $remove.trigger('mousedown');
- });
-
- test('preventing the clear event cancels the clearing', function (assert) {
- var $element = $('#qunit-fixture .single-with-placeholder');
-
- var selection = new AllowClearPlaceholder(
- $element,
- allowClearOptions
- );
- var container = new MockContainer();
-
- var $selection = selection.render();
-
- selection.bind(container, $('<div></div>'));
-
- $element.val('One');
- selection.update([{
- id: 'One',
- text: 'One'
- }]);
-
- selection.on('clear', function (ev) {
- ev.prevented = true;
- });
-
- var $remove = $selection.find('.select2-selection__clear');
- $remove.trigger('mousedown');
-
- assert.equal(
- $element.val(),
- 'One',
- 'The placeholder should not have been set'
- );
- });
-
- test('clear does not work when disabled', function (assert) {
- var $element = $('#qunit-fixture .single-with-placeholder');
-
- var selection = new AllowClearPlaceholder(
- $element,
- allowClearOptions
- );
- var container = new MockContainer();
-
- var $selection = selection.render();
-
- selection.bind(container, $('<div></div>'));
-
- selection.update([{
- id: 'One',
- text: 'One'
- }]);
-
- $element.val('One');
- selection.options.set('disabled', true);
-
- var $remove = $selection.find('.select2-selection__clear');
- $remove.trigger('mousedown');
-
- assert.equal(
- $element.val(),
- 'One',
- 'The placeholder should not have been set'
- );
- });
-
- test('clear button doesnt visually break selected options', function (assert) {
- var $element = $('<select></select>');
-
- var Selection = Utils.Decorate(
- Utils.Decorate(MultipleSelection, Placeholder),
- AllowClear
- );
-
- var selection = new Selection(
- $element,
- allowClearOptions
- );
- var container = new MockContainer();
-
- var $container = $(
- '<span class="select2-container select2-container--default"></span>'
- );
- $('#qunit-fixture').append($container);
-
- var $selection = selection.render();
- $container.append($selection);
- $container.css('width', '100px');
-
- selection.bind(container, $container);
-
- selection.update([{
- id: '1',
- text: '1'
- }]);
-
- var singleHeight = $container.height();
-
- selection.update([
- {
- id: '10',
- text: '10'
- },
- {
- id: '20',
- text: '20'
- }
- ]);
-
- var doubleHeight = $container.height();
-
- selection.update([
- {
- id: '1',
- text: '1'
- },
- {
- id: '2',
- text: '2'
- }
- ]);
-
- assert.notEqual(
- singleHeight,
- doubleHeight,
- 'The height of the two different rows should be different'
- );
-
- assert.equal(
- $container.height(),
- doubleHeight,
- 'There should be two full lines of selections'
- );
- });
|