@@ -74,19 +74,19 @@ var Features = function (config) {
7474
7575 self . _features = features ;
7676 self . _featureMask = 0 ;
77- }
77+ } ;
7878
7979Features . prototype . getMask = function ( ) {
8080 var self = this ;
8181
8282 return self . _featureMask ;
83- }
83+ } ;
8484
8585Features . prototype . setMask = function ( featureMask ) {
8686 var self = this ;
8787
8888 self . _featureMask = featureMask ;
89- }
89+ } ;
9090
9191Features . prototype . isEnabled = function ( featureName ) {
9292 var self = this ;
@@ -97,33 +97,39 @@ Features.prototype.isEnabled = function (featureName) {
9797 }
9898 }
9999 return false ;
100- }
100+ } ;
101101
102102Features . prototype . generateElements = function ( featuresElements ) {
103103 var self = this ;
104104
105105 var listElements = [ ] ;
106106
107107 for ( var i = 0 ; i < self . _features . length ; i ++ ) {
108- var row_e ;
109-
110108 var feature_tip_html = '' ;
111109 if ( self . _features [ i ] . haveTip ) {
112110 feature_tip_html = '<div class="helpicon cf_tip" i18n_title="feature' + self . _features [ i ] . name + 'Tip"></div>' ;
113111 }
114112
113+ var newElements = [ ] ;
115114 if ( self . _features [ i ] . mode === 'select' ) {
116- row_e = $ ( '<option class="feature" id="feature-'
115+ if ( listElements . length === 0 ) {
116+ newElements . push ( $ ( '<option class="feature" '
117+ + 'value="-1" '
118+ + 'i18n="featureNone" />' ) ) ;
119+ }
120+
121+ var newElement = $ ( '<option class="feature" id="feature-'
117122 + i
118123 + '" name="'
119124 + self . _features [ i ] . name
120125 + '" value="'
121126 + self . _features [ i ] . bit
122127 + '" i18n="feature' + self . _features [ i ] . name + '" />' ) ;
123128
124- listElements . push ( row_e ) ;
129+ newElements . push ( newElement ) ;
130+ listElements . push ( newElement ) ;
125131 } else {
126- row_e = $ ( '<tr><td><input class="feature toggle" id="feature-'
132+ var newElement = $ ( '<tr><td><input class="feature toggle" id="feature-'
127133 + i
128134 + '" name="'
129135 + self . _features [ i ] . name
@@ -136,15 +142,17 @@ Features.prototype.generateElements = function (featuresElements) {
136142 + '</label></td><td><span i18n="feature' + self . _features [ i ] . name + '"></span>'
137143 + feature_tip_html + '</td></tr>' ) ;
138144
139- var feature_e = row_e . find ( 'input.feature' ) ;
145+ var feature_e = newElement . find ( 'input.feature' ) ;
140146
141147 feature_e . prop ( 'checked' , bit_check ( self . _featureMask , self . _features [ i ] . bit ) ) ;
142148 feature_e . data ( 'bit' , self . _features [ i ] . bit ) ;
149+
150+ newElements . push ( newElement ) ;
143151 }
144152
145153 featuresElements . each ( function ( ) {
146154 if ( $ ( this ) . hasClass ( self . _features [ i ] . group ) ) {
147- $ ( this ) . append ( row_e ) ;
155+ $ ( this ) . append ( newElements ) ;
148156 }
149157 } ) ;
150158 }
@@ -156,7 +164,7 @@ Features.prototype.generateElements = function (featuresElements) {
156164
157165 element . prop ( 'selected' , state ) ;
158166 }
159- }
167+ } ;
160168
161169Features . prototype . updateData = function ( featureElement ) {
162170 var self = this ;
@@ -172,13 +180,15 @@ Features.prototype.updateData = function (featureElement) {
172180 } else if ( featureElement . prop ( 'localName' ) === 'select' ) {
173181 var controlElements = featureElement . children ( ) ;
174182 var selectedBit = featureElement . val ( ) ;
175- for ( var i = 0 ; i < controlElements . length ; i ++ ) {
176- var bit = controlElements [ i ] . value ;
177- if ( selectedBit === bit ) {
178- self . _featureMask = bit_set ( self . _featureMask , bit ) ;
179- } else {
180- self . _featureMask = bit_clear ( self . _featureMask , bit ) ;
183+ if ( selectedBit !== - 1 ) {
184+ for ( var i = 0 ; i < controlElements . length ; i ++ ) {
185+ var bit = controlElements [ i ] . value ;
186+ if ( selectedBit === bit ) {
187+ self . _featureMask = bit_set ( self . _featureMask , bit ) ;
188+ } else {
189+ self . _featureMask = bit_clear ( self . _featureMask , bit ) ;
190+ }
181191 }
182192 }
183193 }
184- }
194+ } ;
0 commit comments