@@ -28,6 +28,33 @@ function(decoratorsProvider, sfBuilderProvider, sfPathProvider) {
28
28
}
29
29
} ;
30
30
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
+ */
40
+ option . setAttribute ( 'sf-field-model' , 'replaceAll' ) ;
41
+
42
+ /* https://github.com/angular/angular.js/issues/12190#issuecomment-115277040
43
+ * angular > 1.4 does a emptyOption.attr('selected', true)
44
+ * which does not like the ng-if comment.
45
+ */
46
+ if ( angular . version . major === 1 && angular . version . minor < 4 ) {
47
+ option . setAttribute ( 'ng-if' , '$$value$$ === undefined' ) ;
48
+ } else {
49
+ option . setAttribute ( 'ng-show' , '$$value$$ === undefined' ) ;
50
+ }
51
+
52
+ option . textContent = args . form . placeholder ;
53
+
54
+ selectBox . appendChild ( option ) ;
55
+ }
56
+ } ;
57
+
31
58
var defaults = [ sfField , ngModel , ngModelOptions , condition ] ;
32
59
decoratorsProvider . defineDecorator ( 'bootstrapDecorator' , {
33
60
textarea : { template : base + 'textarea.html' , builder : defaults } ,
@@ -38,7 +65,7 @@ function(decoratorsProvider, sfBuilderProvider, sfPathProvider) {
38
65
section : { template : base + 'section.html' , builder : [ sfField , simpleTransclusion , condition ] } ,
39
66
conditional : { template : base + 'section.html' , builder : [ sfField , simpleTransclusion , condition ] } ,
40
67
actions : { template : base + 'actions.html' , builder : defaults } ,
41
- select : { template : base + 'select.html' , builder : defaults } ,
68
+ select : { template : base + 'select.html' , builder : [ selectPlaceholder , sfField , ngModel , ngModelOptions , condition ] } ,
42
69
checkbox : { template : base + 'checkbox.html' , builder : defaults } ,
43
70
checkboxes : { template : base + 'checkboxes.html' , builder : [ sfField , ngModelOptions , ngModel , array , condition ] } ,
44
71
number : { template : base + 'default.html' , builder : defaults } ,
0 commit comments