Skip to content

Commit 4375ffe

Browse files
committed
Added support for hiding 'Relevant Skill' checkbox
1 parent adbbd3d commit 4375ffe

File tree

1 file changed

+80
-69
lines changed

1 file changed

+80
-69
lines changed

src/app/iResume/ResumeSkillsTable/ResumeSkillsTable.ts

+80-69
Original file line numberDiff line numberDiff line change
@@ -180,12 +180,18 @@ export default class ResumeSkillsTable {
180180
private _initCategories($categories: JQuery, $xml: JQuery<Node>): ResumeSkillsTable {
181181
$categories.html('');
182182
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) => {
185184
const $node: JQuery<Node> = $(node);
186-
const isVisible: boolean = !/^true|yes|on|1$/.test($.trim($node.attr('hidden')));
185+
const isVisible: boolean = !/^(true|yes|on|1)$/.test($.trim($node.attr('hidden')));
187186
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');
189195
// Array.prototype.sort.call($xmlCategories, function (a, b) {
190196
// const $a: JQuery = $(a);
191197
// const $b: JQuery = $(b);
@@ -204,80 +210,83 @@ export default class ResumeSkillsTable {
204210
// return 0;
205211
// });
206212

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());
208216

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);
227256
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');
229274
} catch (ex) {
230275
console.error(ex);
231276
}
232277
}
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();
264278
try {
265-
$select.selectmenu('enable');
279+
$select.selectmenu('refresh');
266280
} catch (ex) {
267281
console.error(ex);
268282
}
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+
}
281290

282291
const $categoriesSelectContainer: JQuery = $('<div/>')
283292
.addClass('select-category-container')
@@ -295,7 +304,9 @@ export default class ResumeSkillsTable {
295304
id: 'categories'
296305
});
297306
$('<option/>').val('*').text('All Categories').prependTo($select);
298-
$xmlCategories.each(function () {
307+
$xmlCategories
308+
.not(isRelevantNodeFunc)
309+
.each(function () {
299310
const $category: JQuery<Node> = $(this);
300311
const id: string = $.trim($category.attr('value'));
301312
const name: string = $.trim($category.text());

0 commit comments

Comments
 (0)