@@ -180,12 +180,18 @@ export default class ResumeSkillsTable {
180
180
private _initCategories ( $categories : JQuery , $xml : JQuery < Node > ) : ResumeSkillsTable {
181
181
$categories . html ( '' ) ;
182
182
const relevantKey : string = 'relevant' ;
183
- const $xmlCategories : JQuery < Node > = this . _xpath . evaluate ( $xml , 'r:meta/r:skill/r:categories/r:category' , 'nodeset' )
184
- . filter ( ( nodeIndex , node ) => {
183
+ const isVisibleFunc : ( ( this : Node , index : number , element : Node ) => boolean ) = ( nodeIndex , node ) => {
185
184
const $node : JQuery < Node > = $ ( node ) ;
186
- const isVisible : boolean = ! / ^ t r u e | y e s | o n | 1 $ / . test ( $ . trim ( $node . attr ( 'hidden' ) ) ) ;
185
+ const isVisible : boolean = ! / ^ ( t r u e | y e s | o n | 1 ) $ / . test ( $ . trim ( $node . attr ( 'hidden' ) ) ) ;
187
186
return isVisible ;
188
- } ) ;
187
+ } ;
188
+ const isRelevantNodeFunc : ( ( this : Node , index : number , element : Node ) => boolean ) = ( nodeIndex , node ) => {
189
+ const $node : JQuery < Node > = $ ( node ) ;
190
+ const isRelevantNode : boolean = ( $node . attr ( 'value' ) === relevantKey ) ;
191
+ return isRelevantNode ;
192
+ } ;
193
+
194
+ const $xmlCategories : JQuery < Node > = this . _xpath . evaluate ( $xml , 'r:meta/r:skill/r:categories/r:category' , 'nodeset' ) ;
189
195
// Array.prototype.sort.call($xmlCategories, function (a, b) {
190
196
// const $a: JQuery = $(a);
191
197
// const $b: JQuery = $(b);
@@ -204,80 +210,83 @@ export default class ResumeSkillsTable {
204
210
// return 0;
205
211
// });
206
212
207
- const relevantText : string = $ . trim ( this . _xpath . evaluate ( $xmlCategories , 'self::*[@value = "' + relevantKey + '"]' , 'node' ) . text ( ) ) ;
213
+ const $relevantNode : JQuery < Node > = this . _xpath . evaluate ( $xmlCategories , 'self::*[@value = "' + relevantKey + '"]' , 'node' ) . filter ( isVisibleFunc ) ;
214
+ if ( $relevantNode . length > 0 ) {
215
+ const relevantText : string = $ . trim ( $relevantNode . text ( ) ) ;
208
216
209
- const $isRelevantLabel : JQuery = $ ( '<label/>' ) . attr ( {
210
- 'for' : 'is-relevant-category'
211
- } )
212
- . addClass ( 'ui-shadow' )
213
- . text ( 'Relevant' )
214
- . appendTo ( $categories ) ;
215
- const $isRelevant : JQuery = $ ( '<input type="checkbox"/>' )
216
- . attr ( {
217
- 'data-wrapper-class' : 'relevant-checkbox' ,
218
- 'data-iconpos' : 'right' ,
219
- value : '1' ,
220
- id : 'is-relevant-category'
221
- } )
222
- . on ( 'change' , function ( event , options ) {
223
- let $this : JQuery = $ ( this ) ;
224
- if ( $ . isPlainObject ( options ) ) {
225
- if ( 'checked' in options ) {
226
- $this . prop ( 'checked' , options . checked === true ) ;
217
+ const $isRelevantLabel : JQuery = $ ( '<label/>' ) . attr ( {
218
+ 'for' : 'is-relevant-category'
219
+ } )
220
+ . addClass ( 'ui-shadow' )
221
+ . text ( 'Relevant' )
222
+ . appendTo ( $categories ) ;
223
+ const $isRelevant : JQuery = $ ( '<input type="checkbox"/>' )
224
+ . attr ( {
225
+ 'data-wrapper-class' : 'relevant-checkbox' ,
226
+ 'data-iconpos' : 'right' ,
227
+ value : '1' ,
228
+ id : 'is-relevant-category'
229
+ } )
230
+ . on ( 'change' , function ( event , options ) {
231
+ let $this : JQuery = $ ( this ) ;
232
+ if ( $ . isPlainObject ( options ) ) {
233
+ if ( 'checked' in options ) {
234
+ $this . prop ( 'checked' , options . checked === true ) ;
235
+ try {
236
+ $this . checkboxradio ( 'refresh' ) ;
237
+ } catch ( ex ) {
238
+ console . error ( ex ) ;
239
+ }
240
+ }
241
+ }
242
+ let $select : JQuery = $ ( 'select#categories' ) ;
243
+ let isChecked : boolean = $this . is ( ':checked' ) ;
244
+ if ( isChecked ) {
245
+ if ( ! $select . is ( '[data-last-value]' ) ) {
246
+ $select . attr ( 'data-last-value' , $ . trim ( ( '' + $select . find ( 'option:selected' ) . val ( ) ) ) ) ;
247
+ }
248
+ let $relevant : JQuery = $select . find ( 'option[value="' + relevantKey + '"]' ) ;
249
+ if ( $relevant . length === 0 ) {
250
+ $relevant = $ ( '<option/>' ) . attr ( 'value' , relevantKey )
251
+ . text ( relevantText )
252
+ . insertAfter ( $select . find ( 'option[value="*"]' ) ) ;
253
+ }
254
+ $relevant . prop ( 'selected' , true ) ;
255
+ $select . prop ( 'disabled' , true ) ;
227
256
try {
228
- $this . checkboxradio ( 'refresh' ) ;
257
+ $select . selectmenu ( 'disable' ) ;
258
+ } catch ( ex ) {
259
+ console . error ( ex ) ;
260
+ }
261
+ } else {
262
+ let lastValue : string = $ . trim ( $select . attr ( 'data-last-value' ) ) ;
263
+ $select . removeAttr ( 'data-last-value' ) ;
264
+ $select . prop ( 'disabled' , false ) ;
265
+ if ( lastValue . length === 0 || lastValue === 'relevant' ) {
266
+ lastValue = '*' ;
267
+ }
268
+ if ( lastValue . length > 0 ) {
269
+ $select . find ( 'option[value="' + lastValue + '"]' ) . prop ( 'selected' , true ) ;
270
+ }
271
+ $select . find ( 'option[value="' + relevantKey + '"]' ) . remove ( ) ;
272
+ try {
273
+ $select . selectmenu ( 'enable' ) ;
229
274
} catch ( ex ) {
230
275
console . error ( ex ) ;
231
276
}
232
277
}
233
- }
234
- let $select : JQuery = $ ( 'select#categories' ) ;
235
- let isChecked : boolean = $this . is ( ':checked' ) ;
236
- if ( isChecked ) {
237
- if ( ! $select . is ( '[data-last-value]' ) ) {
238
- $select . attr ( 'data-last-value' , $ . trim ( ( '' + $select . find ( 'option:selected' ) . val ( ) ) ) ) ;
239
- }
240
- let $relevant : JQuery = $select . find ( 'option[value="' + relevantKey + '"]' ) ;
241
- if ( $relevant . length === 0 ) {
242
- $relevant = $ ( '<option/>' ) . attr ( 'value' , relevantKey )
243
- . text ( relevantText )
244
- . insertAfter ( $select . find ( 'option[value="*"]' ) ) ;
245
- }
246
- $relevant . prop ( 'selected' , true ) ;
247
- $select . prop ( 'disabled' , true ) ;
248
- try {
249
- $select . selectmenu ( 'disable' ) ;
250
- } catch ( ex ) {
251
- console . error ( ex ) ;
252
- }
253
- } else {
254
- let lastValue : string = $ . trim ( $select . attr ( 'data-last-value' ) ) ;
255
- $select . removeAttr ( 'data-last-value' ) ;
256
- $select . prop ( 'disabled' , false ) ;
257
- if ( lastValue . length === 0 || lastValue === 'relevant' ) {
258
- lastValue = '*' ;
259
- }
260
- if ( lastValue . length > 0 ) {
261
- $select . find ( 'option[value="' + lastValue + '"]' ) . prop ( 'selected' , true ) ;
262
- }
263
- $select . find ( 'option[value="' + relevantKey + '"]' ) . remove ( ) ;
264
278
try {
265
- $select . selectmenu ( 'enable ' ) ;
279
+ $select . selectmenu ( 'refresh ' ) ;
266
280
} catch ( ex ) {
267
281
console . error ( ex ) ;
268
282
}
269
- }
270
- try {
271
- $select . selectmenu ( 'refresh' ) ;
272
- } catch ( ex ) {
273
- console . error ( ex ) ;
274
- }
275
- const selectChangeEventOptions : object = {
276
- simulated : ( options && options . simulated )
277
- } ;
278
- $select . trigger ( 'change' , selectChangeEventOptions ) ;
279
- } )
280
- . appendTo ( $categories ) ;
283
+ const selectChangeEventOptions : object = {
284
+ simulated : ( options && options . simulated )
285
+ } ;
286
+ $select . trigger ( 'change' , selectChangeEventOptions ) ;
287
+ } )
288
+ . appendTo ( $categories ) ;
289
+ }
281
290
282
291
const $categoriesSelectContainer : JQuery = $ ( '<div/>' )
283
292
. addClass ( 'select-category-container' )
@@ -295,7 +304,9 @@ export default class ResumeSkillsTable {
295
304
id : 'categories'
296
305
} ) ;
297
306
$ ( '<option/>' ) . val ( '*' ) . text ( 'All Categories' ) . prependTo ( $select ) ;
298
- $xmlCategories . each ( function ( ) {
307
+ $xmlCategories
308
+ . not ( isRelevantNodeFunc )
309
+ . each ( function ( ) {
299
310
const $category : JQuery < Node > = $ ( this ) ;
300
311
const id : string = $ . trim ( $category . attr ( 'value' ) ) ;
301
312
const name : string = $ . trim ( $category . text ( ) ) ;
0 commit comments