@@ -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