dist
src
test
libs
unit
api.js
checklist.js
combodate.js
common.js
date.js
datefield.js
datetime.js
datetimefield.js
dateui.js
dateuifield.js
select.js
select2.js
text.js
textarea.js
typeahead.js
typeaheadjs.js
wysihtml5.js
coverage
index.html
loader.js
main.js
mocks.js
require.js
style.css
.gitignore
CHANGELOG.txt
Gruntfile.js
LICENSE-MIT
Package.nuspec
README.md
bower.json
composer.json
package.json
843 lines
33 KiB
JavaScript
843 lines
33 KiB
JavaScript
$(function () {
|
|
|
|
module("select", {
|
|
setup: function(){
|
|
sfx = $('#qunit-fixture'),
|
|
fx = $('#async-fixture');
|
|
$.support.transition = false;
|
|
}
|
|
});
|
|
|
|
test("popover should contain SELECT even if value & source not defined", function () {
|
|
var e = $('<a href="#" data-type="select">w</a>').appendTo('#qunit-fixture').editable();
|
|
|
|
e.click();
|
|
var p = tip(e);
|
|
ok(p.find('select').length, 'select exists')
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
})
|
|
|
|
asyncTest("load options from server", function () {
|
|
var e = $('<a href="#" data-type="select" data-name="load-srv" data-value="2" data-source="groups.php">customer</a>').appendTo(fx).editable({
|
|
//need to disable cache to force request
|
|
sourceCache: false
|
|
});
|
|
|
|
e.click();
|
|
var p = tip(e);
|
|
ok(p.find('.editableform-loading').length, 'loading class exists');
|
|
ok(p.find('.editableform-loading').is(':visible'), 'loading class is visible');
|
|
|
|
setTimeout(function() {
|
|
ok(p.is(':visible'), 'popover visible');
|
|
ok(p.find('.editableform-loading').length, 'loading class exists');
|
|
ok(!p.find('.editableform-loading').is(':visible'), 'loading class is hidden');
|
|
ok(p.find('select').length, 'select exists');
|
|
equal(p.find('select').find('option').length, size, 'options loaded');
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct') ;
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
|
|
//open second time: items should not dublicate
|
|
e.click();
|
|
p = tip(e);
|
|
setTimeout(function() {
|
|
ok(p.find('select').length, 'select exists');
|
|
equal(p.find('select').find('option').length, size, 'options loaded');
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct') ;
|
|
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
}, timeout);
|
|
});
|
|
|
|
test("load options from json", function () {
|
|
var e = $('<a href="#" data-type="select" data-value="2" data-url="post.php">customer</a>').appendTo('#qunit-fixture').editable({
|
|
pk: 1,
|
|
source: groups
|
|
});
|
|
|
|
e.click()
|
|
var p = tip(e);
|
|
ok(p.is(':visible'), 'popover visible')
|
|
ok(p.find('.editableform-loading').length, 'loading class exists')
|
|
ok(!p.find('.editableform-loading').is(':visible'), 'loading class is hidden')
|
|
ok(p.find('select').length, 'select exists')
|
|
equal(p.find('select').find('option').length, size, 'options loaded')
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct')
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
});
|
|
|
|
test("load options from normal array", function () {
|
|
var e = $('<a href="#" data-type="select" data-value="2" data-url="post.php">customer</a>').appendTo('#qunit-fixture').editable({
|
|
pk: 1,
|
|
source: groupsArr,
|
|
placement: 'right'
|
|
});
|
|
|
|
e.click()
|
|
var p = tip(e);
|
|
ok(p.is(':visible'), 'popover visible');
|
|
ok(p.find('select').length, 'select exists');
|
|
equal(p.find('select').find('option').length, groupsArr.length, 'options loaded');
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct');
|
|
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
});
|
|
|
|
test("load options from simple array", function () {
|
|
var arr = ['q', 'w', 'x'],
|
|
e = $('<a href="#" data-type="select" data-value="x" data-url="post.php">customer</a>').appendTo('#qunit-fixture').editable({
|
|
pk: 1,
|
|
autotext: true,
|
|
source: arr
|
|
});
|
|
|
|
e.click()
|
|
var p = tip(e);
|
|
ok(p.is(':visible'), 'popover visible')
|
|
ok(p.find('select').length, 'select exists')
|
|
equal(p.find('select').find('option').length, arr.length, 'options loaded')
|
|
equal(p.find('select').val(), 'x', 'selected value correct')
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
});
|
|
|
|
test("load options from function returning array", function () {
|
|
var counter = 0,
|
|
e = $('<a href="#" data-type="select" data-value="2" data-url="post.php">customer</a>').appendTo('#qunit-fixture').editable({
|
|
pk: 1,
|
|
prepend: function() {
|
|
equal(this, e[0], 'prepend scope is element');
|
|
return 'prepend';
|
|
},
|
|
source: function() {
|
|
equal(this, e[0], 'source scope is element');
|
|
return counter ? groupsArr.concat([{10: 'test'}]) : groupsArr;
|
|
}
|
|
});
|
|
|
|
function t() {
|
|
e.click()
|
|
var p = tip(e);
|
|
ok(p.is(':visible'), 'popover visible');
|
|
ok(p.find('select').length, 'select exists');
|
|
equal(p.find('select').find('option').length, size+1+counter, 'options loaded');
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct') ;
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
}
|
|
|
|
//first run
|
|
t();
|
|
//second time
|
|
counter = 1;
|
|
t();
|
|
});
|
|
|
|
asyncTest("load options from function returning URL", function () {
|
|
var e = $('<a href="#" data-type="select" data-value="2" data-url="post.php">customer</a>').appendTo(fx).editable({
|
|
pk: 1,
|
|
//need to disable cache to force request
|
|
sourceCache: false,
|
|
source: function() {
|
|
equal(this, e[0], 'source scope is element');
|
|
return 'groups.php';
|
|
}
|
|
});
|
|
|
|
e.click();
|
|
var p = tip(e);
|
|
|
|
setTimeout(function() {
|
|
ok(p.is(':visible'), 'popover visible');
|
|
ok(p.find('select').length, 'select exists');
|
|
equal(p.find('select').find('option').length, size, 'options loaded');
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct') ;
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
|
|
//open second time: items should not dublicate
|
|
e.click();
|
|
p = tip(e);
|
|
setTimeout(function() {
|
|
ok(p.find('select').length, 'select exists');
|
|
equal(p.find('select option').length, size, 'options loaded');
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct') ;
|
|
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
}, timeout);
|
|
});
|
|
|
|
test("load options from html (single quotes)", function () {
|
|
var e = $('<a href="#" data-type="select" data-value="M" data-source=\'{"L":"Low", "": "None", "M": "Medium", "H": "High"}\'>customer</a>').appendTo('#qunit-fixture').editable({
|
|
pk: 1
|
|
}),
|
|
size = 4;
|
|
|
|
e.click()
|
|
var p = tip(e);
|
|
ok(p.is(':visible'), 'popover visible');
|
|
ok(p.find('select').length, 'select exists');
|
|
equal(p.find('select').find('option').length, size, 'options loaded');
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct') ;
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
})
|
|
|
|
test("load options from html (double quotes)", function () {
|
|
var e = $('<a href="#" data-type="select" data-value="M" data-source="{\'L\':\'Low\', \'\': \'None\', \'M\': \'Medium\', \'H\': \'High\'}">customer</a>').appendTo('#qunit-fixture').editable({
|
|
pk: 1
|
|
}),
|
|
size = 4;
|
|
|
|
e.click()
|
|
var p = tip(e);
|
|
ok(p.is(':visible'), 'popover visible');
|
|
ok(p.find('select').length, 'select exists');
|
|
equal(p.find('select').find('option').length, size, 'options loaded');
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct') ;
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
})
|
|
|
|
test("load options from html (json syntax error)", function () {
|
|
var e = $('<a href="#" data-type="select" data-value="M" data-source=\'{L :Low, "": "None", "M": "Medium", "H": "High"}\'>customer</a>').appendTo('#qunit-fixture').editable({
|
|
pk: 1,
|
|
sourceError: 'error'
|
|
}),
|
|
size = 4;
|
|
|
|
e.click()
|
|
var p = tip(e);
|
|
ok(p.is(':visible'), 'popover visible');
|
|
ok(p.find('select').length, 'select exists');
|
|
equal(p.find('select').find('option').length, 0, 'options not loaded');
|
|
equal(p.find('.editable-error-block').text(), 'error', 'sourceError message shown');
|
|
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
})
|
|
|
|
|
|
asyncTest("should show error if options cant be loaded", function () {
|
|
var e = $('<a href="#" data-type="select" data-value="2" data-source="groups-error.php">customer</a>').appendTo(fx).editable();
|
|
|
|
e.click();
|
|
var p = tip(e);
|
|
|
|
setTimeout(function() {
|
|
ok(p.is(':visible'), 'popover visible')
|
|
ok(p.find('select:disabled').length, 'select disabled')
|
|
ok(!p.find('select').find('option').length, 'options not loaded')
|
|
ok(p.find('button[type=submit]:disabled').length, 'submit-btn disabled')
|
|
ok(p.find('.editable-error-block').text().length, 'error shown')
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
})
|
|
|
|
asyncTest("should save new selected value", function () {
|
|
var e = $('<a href="#" data-type="select" data-value="2" data-url="post.php">customer</a>').appendTo(fx).editable({
|
|
pk: 1,
|
|
source: groups
|
|
}),
|
|
selected = 3;
|
|
|
|
e.click()
|
|
var p = tip(e);
|
|
ok(p.is(':visible'), 'popover visible');
|
|
ok(p.find('select').length, 'select exists');
|
|
equal(p.find('select').find('option').length, size, 'options loaded');
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct');
|
|
|
|
p.find('select').val(selected);
|
|
p.find('form').submit();
|
|
ok(p.find('.editableform-loading').is(':visible'), 'loading class is visible');
|
|
|
|
setTimeout(function() {
|
|
ok(!p.is(':visible'), 'popover closed')
|
|
equal(e.data('editable').value, selected, 'new value saved')
|
|
equal(e.text(), groups[selected], 'new text shown')
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
});
|
|
|
|
asyncTest("if new text is empty --> show emptytext on save", function () {
|
|
var e = $('<a href="#" data-type="select" data-value="2" data-url="post.php">customer</a>').appendTo(fx).editable({
|
|
pk: 1,
|
|
source: groups
|
|
}),
|
|
selected = 6;
|
|
|
|
e.click()
|
|
var p = tip(e);
|
|
ok(p.is(':visible'), 'popover visible')
|
|
ok(p.find('select').length, 'select exists')
|
|
equal(p.find('select').find('option').length, size, 'options loaded')
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct')
|
|
|
|
p.find('select').val(selected);
|
|
p.find('form').submit();
|
|
|
|
setTimeout(function() {
|
|
ok(!p.is(':visible'), 'popover closed')
|
|
equal(e.data('editable').value, selected, 'new value saved')
|
|
equal(e.text(), e.data('editable').options.emptytext, 'emptytext shown')
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
})
|
|
|
|
|
|
asyncTest("if new value is empty --> show work correct", function () {
|
|
var e = $('<a href="#" data-type="select" data-value="2" data-url="post.php">customer</a>').appendTo(fx).editable({
|
|
pk: 1,
|
|
source: groups
|
|
}),
|
|
selected = '';
|
|
|
|
e.click()
|
|
var p = tip(e);
|
|
ok(p.is(':visible'), 'popover visible')
|
|
ok(p.find('select').length, 'select exists')
|
|
equal(p.find('select').find('option').length, size, 'options loaded')
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct')
|
|
|
|
p.find('select').val(selected);
|
|
p.find('form').submit();
|
|
|
|
setTimeout(function() {
|
|
ok(!p.is(':visible'), 'popover closed')
|
|
equal(e.data('editable').value, selected, 'new value saved')
|
|
equal(e.text(), groups[selected], 'text shown correctly')
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
});
|
|
|
|
asyncTest("cache request for same selects", function () {
|
|
//clear cache
|
|
$(document).removeData('groups.php');
|
|
|
|
var e = $('<a href="#" data-type="select" data-pk="1" data-name="name1" data-value="2" data-url="post.php" data-source="groups-cache.php">customer</a>').appendTo(fx).editable(),
|
|
e1 = $('<a href="#" data-type="select" data-pk="1" id="name1" data-value="2" data-url="post.php" data-source="groups-cache.php">customer</a>').appendTo(fx).editable(),
|
|
req = 0;
|
|
|
|
$.mockjax({
|
|
url: 'groups-cache.php',
|
|
response: function() {
|
|
req++;
|
|
this.responseText = groups;
|
|
}
|
|
});
|
|
|
|
e.click();
|
|
var p = tip(e);
|
|
|
|
setTimeout(function() {
|
|
ok(p.is(':visible'), 'popover visible');
|
|
equal(p.find('select').find('option').length, size, 'options loaded');
|
|
equal(req, 1, 'one request performed');
|
|
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
|
|
//click second
|
|
e1.click();
|
|
p = tip(e1);
|
|
|
|
setTimeout(function() {
|
|
ok(p.is(':visible'), 'popover2 visible');
|
|
equal(p.find('select').find('option').length, size, 'options loaded');
|
|
equal(req, 1, 'no extra request, options taken from cache');
|
|
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
|
|
e.remove();
|
|
e1.remove();
|
|
start();
|
|
}, timeout);
|
|
}, timeout);
|
|
|
|
});
|
|
|
|
asyncTest("cache simultaneous requests", function () {
|
|
expect(4);
|
|
|
|
//clear cache
|
|
$(document).removeData('groups-cache-sim.php');
|
|
|
|
var req = 0;
|
|
$.mockjax({
|
|
url: 'groups-cache-sim.php',
|
|
responseTime: 50,
|
|
response: function() {
|
|
req++;
|
|
this.responseText = groups;
|
|
}
|
|
});
|
|
|
|
var e = $('<a href="#" data-type="select" data-pk="1" data-name="name1" data-value="1" data-url="post.php" data-source="groups-cache-sim.php"></a>').appendTo(fx).editable(),
|
|
e1 = $('<a href="#" data-type="select" data-pk="1" data-name="name1" data-value="2" data-url="post.php" data-source="groups-cache-sim.php"></a>').appendTo(fx).editable(),
|
|
e2 = $('<a href="#" data-type="select" data-pk="1" data-name="name1" data-value="3" data-url="post.php" data-source="groups-cache-sim.php"></a>').appendTo(fx).editable();
|
|
|
|
setTimeout(function() {
|
|
equal(req, 1, 'one request');
|
|
equal(e.text(), groups[1], 'text1 correct');
|
|
equal(e1.text(), groups[2], 'text2 correct');
|
|
equal(e2.text(), groups[3], 'text3 correct');
|
|
|
|
e.remove();
|
|
e1.remove();
|
|
e2.remove();
|
|
start();
|
|
}, 300);
|
|
|
|
});
|
|
|
|
asyncTest("cache simultaneous requests (loading error)", function () {
|
|
expect(4);
|
|
|
|
//clear cache
|
|
$(document).removeData('groups-cache-sim-err.php');
|
|
|
|
var req = 0;
|
|
$.mockjax({
|
|
url: 'groups-cache-sim-err.php',
|
|
responseTime: 200,
|
|
status: 500,
|
|
response: function() {
|
|
req++;
|
|
}
|
|
});
|
|
|
|
var e = $('<a href="#" data-type="select" data-pk="1" data-name="name1" data-value="1" data-autotext="always" data-url="post.php" data-source="groups-cache-sim-err.php">11</a>').appendTo(fx).editable(),
|
|
e1 = $('<a href="#" data-type="select" data-pk="1" data-name="name1" data-value="2" data-autotext="always" data-url="post.php" data-source="groups-cache-sim-err.php">22</a>').appendTo(fx).editable(),
|
|
e2 = $('<a href="#" data-type="select" data-pk="1" data-name="name1" data-value="3" data-autotext="always" data-url="post.php" data-source="groups-cache-sim-err.php"></a>').appendTo(fx).editable();
|
|
|
|
setTimeout(function() {
|
|
|
|
equal(req, 1, 'one request');
|
|
equal(e.text(), '11', 'text1 correct');
|
|
equal(e1.text(), '22', 'text2 correct');
|
|
equal(e2.text(), $.fn.editable.defaults.emptytext, 'text3 correct');
|
|
|
|
e.remove();
|
|
e1.remove();
|
|
e2.remove();
|
|
start();
|
|
}, 300);
|
|
|
|
});
|
|
|
|
//since 1.4.5 sourceCache is more strong: it forces load sourceData on every click
|
|
asyncTest("sourceCache: false", function () {
|
|
|
|
$.mockjax({
|
|
url: 'groups-cache-false.php',
|
|
response: function() {
|
|
req++;
|
|
this.responseText = groups;
|
|
}
|
|
});
|
|
|
|
var req = 0,
|
|
e = $('<a href="#" data-type="select" data-pk="1" data-name="name1" data-value="2" data-url="post.php" data-source="groups-cache-false.php"></a>').appendTo(fx).editable({
|
|
sourceCache: false
|
|
}),
|
|
e1 = $('<a href="#" data-type="select" data-pk="1" id="name1" data-value="2" data-url="post.php" data-source="groups-cache-false.php">customer</a>').appendTo(fx).editable({
|
|
sourceCache: false
|
|
});
|
|
|
|
setTimeout(function() {
|
|
//autotext for first only!
|
|
equal(req, 1, 'autotext request performed');
|
|
|
|
//click first
|
|
e.click();
|
|
|
|
setTimeout(function() {
|
|
|
|
var p = tip(e);
|
|
|
|
ok(p.is(':visible'), 'popover visible');
|
|
equal(p.find('select').find('option').length, size, 'options loaded');
|
|
equal(req, 2, 'additional request performed (allthough loaded on autotext)');
|
|
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
|
|
//click second
|
|
e1.click();
|
|
p = tip(e1);
|
|
|
|
setTimeout(function() {
|
|
ok(p.is(':visible'), 'popover2 visible');
|
|
equal(p.find('select').find('option').length, size, 'options loaded');
|
|
equal(req, 3, 'second request performed');
|
|
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
|
|
e.remove();
|
|
e1.remove();
|
|
start();
|
|
|
|
}, timeout);
|
|
}, timeout);
|
|
}, timeout);
|
|
|
|
});
|
|
|
|
|
|
asyncTest("autotext: auto", function () {
|
|
expect(3);
|
|
|
|
//auto, text->empty, source->array
|
|
var e = $('<a href="#" data-type="select" data-value="3"> </a>').appendTo(sfx).editable({
|
|
source: groups,
|
|
autotext: 'auto'
|
|
}),
|
|
//auto, text->not empty, source->array
|
|
e1 = $('<a href="#" data-type="select" data-value="3">blabla</a>').appendTo(sfx).editable({
|
|
source: groups,
|
|
autotext: 'auto'
|
|
}),
|
|
//auto, text->empty, source->url
|
|
e2 = $('<a href="#" data-type="select" data-value="3" data-source="groups.php"></a>').appendTo(fx).editable({
|
|
autotext: 'auto'
|
|
});
|
|
|
|
equal(e.text(), groups[3], 'text set ok');
|
|
equal(e1.text(), 'blabla', 'text1 not changed');
|
|
|
|
setTimeout(function() {
|
|
equal(e2.text(), groups[3], 'text2 set ok');
|
|
e2.remove();
|
|
start();
|
|
}, timeout);
|
|
});
|
|
|
|
asyncTest("autotext: always (source = url)", function () {
|
|
expect(1);
|
|
var e = $('<a href="#" data-type="select" data-value="3" data-source="groups.php">blabla</a>').appendTo(fx).editable({
|
|
autotext: 'always'
|
|
});
|
|
|
|
setTimeout(function() {
|
|
equal(e.text(), groups[3], 'text setup ok');
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
});
|
|
|
|
test("autotext: never", function () {
|
|
var e = $('<a href="#" data-type="select" data-value="3"></a>').appendTo(sfx).editable({
|
|
source: groups,
|
|
autotext: 'never'
|
|
});
|
|
|
|
equal(e.text(), e.data('editable').options.emptytext, 'text set to emptytext');
|
|
});
|
|
|
|
asyncTest("test prepend option (sync & async)", function () {
|
|
//sync
|
|
var e = $('<a href="#" data-type="select" data-name="prepend-test-sync" data-value="" data-url="post.php">customer</a>').appendTo('#qunit-fixture').editable({
|
|
pk: 1,
|
|
source: {q: 'qq', w: 'ww'},
|
|
prepend: 'empty'
|
|
});
|
|
|
|
e.click()
|
|
var p = tip(e);
|
|
ok(p.is(':visible'), 'popover visible');
|
|
equal(p.find('select').find('option').length, 3, 'options prepended (sync)');
|
|
equal(p.find('select').val(), '', 'selected value correct');
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
|
|
//async
|
|
e = $('<a href="#" data-type="select" data-name="prepend-test-async" data-value="r" data-url="post.php">customer</a>').appendTo(fx).editable({
|
|
pk: 1,
|
|
source: 'groups.php',
|
|
prepend: {r: 'abc'}
|
|
});
|
|
|
|
e.click()
|
|
p = tip(e);
|
|
|
|
setTimeout(function() {
|
|
ok(p.is(':visible'), 'popover visible');
|
|
equal(p.find('select').find('option').length, size+1, 'options prepended (async)');
|
|
equal(p.find('select').val(), 'r', 'selected value correct');
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was removed');
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
});
|
|
|
|
asyncTest("autosubmit when showbuttons=false", function () {
|
|
expect(4);
|
|
var e = $('<a href="#" data-type="select" data-value="2" data-url="post.php">customer</a>').appendTo(fx).editable({
|
|
pk: 1,
|
|
source: groups,
|
|
showbuttons: false
|
|
}),
|
|
selected = 3;
|
|
|
|
e.click();
|
|
var p = tip(e);
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct');
|
|
|
|
p.find('select').val(selected);
|
|
p.find('select').trigger('change');
|
|
|
|
setTimeout(function() {
|
|
ok(!p.is(':visible'), 'popover closed');
|
|
equal(e.data('editable').value, selected, 'new value saved')
|
|
equal(e.text(), groups[selected], 'text shown correctly')
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
});
|
|
|
|
asyncTest("'display' callback", function () {
|
|
var req = 0,
|
|
e = $('<a href="#" data-type="select" data-value="2" data-url="post.php">123</a>').appendTo(fx).editable({
|
|
pk: 1,
|
|
source: groups,
|
|
ajaxOptions: {
|
|
dataType: 'json'
|
|
},
|
|
display: function(value, sourceData, response) {
|
|
var els = $.grep(sourceData, function(o) {return o.value == value;});
|
|
$(this).text('qq' + els[0].text);
|
|
if(req == 0) {
|
|
ok(response === undefined, 'response param undefined on first request');
|
|
req++;
|
|
} else {
|
|
ok(response.success, 'response param ok on second request');
|
|
}
|
|
}
|
|
}),
|
|
selected = 3;
|
|
|
|
equal(e.text(), 'qq'+groups[2], 'autotext display ok');
|
|
|
|
e.click();
|
|
var p = tip(e);
|
|
|
|
p.find('select').val(selected);
|
|
p.find('form').submit();
|
|
|
|
setTimeout(function() {
|
|
ok(!p.is(':visible'), 'popover closed');
|
|
equal(e.data('editable').value, selected, 'new value saved')
|
|
equal(e.text(), 'qq'+groups[selected], 'text shown correctly')
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
});
|
|
|
|
asyncTest("submit by enter", function () {
|
|
var e = $('<a href="#" data-type="select" data-value="2" data-url="post.php"></a>').appendTo(fx).editable({
|
|
pk: 1,
|
|
source: groups
|
|
}),
|
|
selected = 3;
|
|
|
|
e.click();
|
|
var p = tip(e);
|
|
p.find('select').val(selected);
|
|
|
|
var event = jQuery.Event("keydown");
|
|
event.which = 13;
|
|
|
|
p.find('select').trigger(event);
|
|
|
|
setTimeout(function() {
|
|
ok(!p.is(':visible'), 'popover closed');
|
|
equal(e.data('editable').value, selected, 'new value saved')
|
|
equal(e.text(), groups[selected], 'text shown correctly')
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
});
|
|
|
|
|
|
asyncTest("set value to null should not trigger source load", function () {
|
|
var req = 0;
|
|
$.mockjax({
|
|
url: 'groups-null.php',
|
|
response: function() {
|
|
req++;
|
|
}
|
|
});
|
|
|
|
var e = $('<a href="#" data-type="select" data-pk="1" data-name="name1" data-value="1" data-url="post.php" data-source="groups-null.php">11</a>').appendTo(fx).editable(),
|
|
d = e.data('editable');
|
|
|
|
e.editable('setValue', null);
|
|
|
|
setTimeout(function() {
|
|
equal(req, 0, 'no request');
|
|
equal(e.text(), d.options.emptytext, 'text correct');
|
|
equal(d.value, null, 'value correct');
|
|
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
|
|
});
|
|
|
|
|
|
asyncTest("change source", function () {
|
|
var e = $('<a href="#" data-type="select" data-name="load-srv" data-value="2" data-source="groups.php">customer</a>').appendTo(fx).editable({
|
|
sourceCache: true
|
|
});
|
|
|
|
e.click();
|
|
var p = tip(e);
|
|
|
|
setTimeout(function() {
|
|
equal(p.find('select').find('option').length, size, 'options loaded');
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct') ;
|
|
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was closed');
|
|
|
|
$.mockjax({
|
|
url: 'groups-changed.php',
|
|
responseText: [{value: 'a', text: 1}, {value: 'b', text: 2}]
|
|
});
|
|
|
|
//set new source
|
|
e.editable('option', 'source', 'groups-changed.php');
|
|
e.click();
|
|
|
|
setTimeout(function() {
|
|
p = tip(e);
|
|
ok(p.find('select').length, 'select exists');
|
|
equal(p.find('select').find('option').length, 2, 'new options loaded');
|
|
|
|
//disable below test as in ie select.val() return null
|
|
// equal(p.find('select').val(), 'a', 'selected value correct') ;
|
|
p.find('.editable-cancel').click();
|
|
ok(!p.is(':visible'), 'popover was closed');
|
|
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
}, timeout);
|
|
});
|
|
|
|
asyncTest("optgroup", function () {
|
|
var
|
|
selected = 2,
|
|
e = $('<a href="#" data-type="select" data-value="'+selected+'" data-url="post.php"></a>').appendTo(fx).editable({
|
|
pk: 1,
|
|
source: [
|
|
{text: 'groups', children: groups},
|
|
{value: 'v1', text: 't1', children: ['a', 'b', 'c']},
|
|
{value: 'v2', text: 't2'}
|
|
]
|
|
});
|
|
|
|
equal(e.text(), groups[selected], 'text shown');
|
|
|
|
e.click();
|
|
var p = tip(e);
|
|
ok(p.is(':visible'), 'container visible');
|
|
ok(p.find('select').length, 'select exists');
|
|
equal(p.find('select').find('option').length, size + 3 + 1, 'options loaded');
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct');
|
|
|
|
equal(p.find('select').find('optgroup').length, 2, 'optgroup loaded');
|
|
equal(p.find('select').find('optgroup').eq(0).children().length, size, 'optgroup items ok');
|
|
|
|
selected = 'a';
|
|
p.find('select').val(selected);
|
|
p.find('form').submit();
|
|
|
|
setTimeout(function() {
|
|
ok(!p.is(':visible'), 'popover closed')
|
|
equal(e.data('editable').value, selected, 'new value saved')
|
|
equal(e.text(), 'a', 'new text shown')
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
});
|
|
|
|
test("defaultValue", function () {
|
|
var e = $('<a href="#" data-type="select"></a>').appendTo('#qunit-fixture').editable({
|
|
source: groups,
|
|
defaultValue: 3
|
|
});
|
|
|
|
e.click();
|
|
var p = tip(e);
|
|
ok(p.find('select').length, 'select exists')
|
|
equal(p.find('select').val(), 3, 'selected value correct');
|
|
});
|
|
|
|
test("`escape` option", function () {
|
|
var e = $('<a href="#" data-type="select"></a>').appendTo('#qunit-fixture').editable({
|
|
source: [{value: 'a', text: '<b>hello</b>'}],
|
|
value: 'a',
|
|
escape: true
|
|
}),
|
|
e1 = $('<a href="#" data-type="select"></a>').appendTo('#qunit-fixture').editable({
|
|
source: [{value: 'a', text: '<b>hello</b>'}],
|
|
value: 'a',
|
|
escape: false
|
|
});
|
|
|
|
equal(e.html(), '<b>hello</b>', 'html escaped');
|
|
equal(e1.html(), '<b>hello</b>', 'html not escaped');
|
|
});
|
|
|
|
asyncTest("sourceOptions", function () {
|
|
expect(3);
|
|
var e = $('<a href="#" data-type="select" data-value="2" data-source="sourceOptions">customer</a>').appendTo(fx).editable({
|
|
sourceOptions: {
|
|
type: 'post',
|
|
data: {
|
|
a: 1
|
|
}
|
|
}
|
|
});
|
|
|
|
$.mockjax({
|
|
url: 'sourceOptions',
|
|
type: 'post',
|
|
response: function(settings) {
|
|
equal(settings.data.a, 1, 'params sent!');
|
|
this.responseText = groups;
|
|
}
|
|
});
|
|
|
|
e.click();
|
|
var p = tip(e);
|
|
|
|
setTimeout(function() {
|
|
equal(p.find('select').find('option').length, size, 'options loaded');
|
|
equal(p.find('select').val(), e.data('editable').value, 'selected value correct') ;
|
|
|
|
e.remove();
|
|
start();
|
|
}, timeout);
|
|
});
|
|
});
|