Skip to content

Commit 468a580

Browse files
author
kornosaurus
committed
Support for placeholder key on select type
1 parent ccfe626 commit 468a580

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

examples/data/titlemaps.json

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
{
5252
"key": "select2",
5353
"type": "select",
54+
"placeholder": "Please choose",
5455
"titleMap": {
5556
"a": "A",
5657
"b": "B",
@@ -60,6 +61,7 @@
6061
{
6162
"key": "noenum",
6263
"type": "select",
64+
"placeholder": "Please choose",
6365
"titleMap": [
6466
{ "value":"a", "name": "A" },
6567
{ "value":"b", "name":"B" },

src/bootstrap-decorator.js

+25-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,30 @@ function(decoratorsProvider, sfBuilderProvider, sfPathProvider) {
2828
}
2929
};
3030

31+
var selectPlaceholder = function(args) {
32+
if (args.form.placeholder) {
33+
var selectBox = args.fieldFrag.querySelector('select');
34+
var option = document.createElement('option');
35+
option.setAttribute('value', '');
36+
37+
// We only want the placeholder to show when we do not have a value on the model.
38+
// We make ngModel builder replace all so we can use $$value$$.
39+
option.setAttribute('sf-field-model', 'replaceAll');
40+
41+
// https://github.com/angular/angular.js/issues/12190#issuecomment-115277040
42+
// emptyOption.attr('selected', true) does not like the ng-if comment.
43+
if (angular.version.major === 1 && angular.version.minor < 4) {
44+
option.setAttribute('ng-if', '!$$value$$');
45+
} else {
46+
option.setAttribute('ng-show', '!$$value$$');
47+
}
48+
49+
option.textContent = args.form.placeholder;
50+
51+
selectBox.appendChild(option);
52+
}
53+
};
54+
3155
var defaults = [sfField, ngModel, ngModelOptions, condition];
3256
decoratorsProvider.defineDecorator('bootstrapDecorator', {
3357
textarea: {template: base + 'textarea.html', builder: defaults},
@@ -38,7 +62,7 @@ function(decoratorsProvider, sfBuilderProvider, sfPathProvider) {
3862
section: {template: base + 'section.html', builder: [sfField, simpleTransclusion, condition]},
3963
conditional: {template: base + 'section.html', builder: [sfField, simpleTransclusion, condition]},
4064
actions: {template: base + 'actions.html', builder: defaults},
41-
select: {template: base + 'select.html', builder: defaults},
65+
select: {template: base + 'select.html', builder: [selectPlaceholder, sfField, ngModel, ngModelOptions, condition]},
4266
checkbox: {template: base + 'checkbox.html', builder: defaults},
4367
checkboxes: {template: base + 'checkboxes.html', builder: [sfField, ngModelOptions, ngModel, array, condition]},
4468
number: {template: base + 'default.html', builder: defaults},

0 commit comments

Comments
 (0)