2015-03-18 21:57:03 +07:00
|
|
|
(function () {
|
|
|
|
document.addEventListener('DOMContentLoaded', function () {
|
2015-04-16 18:19:26 +07:00
|
|
|
alternatives();
|
|
|
|
highlight();
|
2015-04-16 16:57:02 +07:00
|
|
|
checks_handling();
|
|
|
|
});
|
|
|
|
|
2015-04-16 18:19:26 +07:00
|
|
|
function highlight() {
|
|
|
|
$('.highlighter-list').each(function () {
|
|
|
|
var $this = $(this),
|
|
|
|
$target = $($this.data('target'));
|
|
|
|
$this.on('mouseout', 'li', function (e) {
|
|
|
|
$(e.currentTarget).removeClass('secondary');
|
|
|
|
$target.find('.related').removeClass('related');
|
|
|
|
}).on('mouseover', 'li', function (e) {
|
|
|
|
if (!e.currentTarget.contains(e.target)) { return; }
|
|
|
|
|
|
|
|
var $li = $(e.currentTarget);
|
|
|
|
console.log($li, $li.data('highlight'), $target.find($li.data('highlight')));
|
|
|
|
$li.addClass('secondary');
|
|
|
|
$target.find($li.data('highlight')).addClass('related');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
2015-04-16 16:57:02 +07:00
|
|
|
/** alternatives display:
|
|
|
|
* - prepend control for each <dt>
|
|
|
|
* - radio input with link to following dd
|
|
|
|
* - label is <dt> content
|
|
|
|
* - hide all first-level dt and dd (CSS)
|
|
|
|
* - on change
|
|
|
|
* - hide all dds
|
|
|
|
* - show dd corresponding to the selected radio
|
|
|
|
* - automatically select first control on startup
|
|
|
|
*/
|
|
|
|
function alternatives() {
|
|
|
|
$('dl.alternatives').each(function (index) {
|
|
|
|
var $list = $(this),
|
|
|
|
$contents = $list.children('dd');
|
|
|
|
var $controls = $('<div class="alternatives-controls">').append(
|
|
|
|
$list.children('dt').map(function () {
|
|
|
|
var label = document.createElement('label'),
|
|
|
|
input = document.createElement('input');
|
|
|
|
input.setAttribute('type', 'radio');
|
|
|
|
input.setAttribute('name', 'alternatives-' + index);
|
|
|
|
|
|
|
|
var sibling = this;
|
|
|
|
while ((sibling = sibling.nextSibling) && sibling.nodeType !== 1);
|
|
|
|
input.content = sibling;
|
|
|
|
|
|
|
|
label.appendChild(input);
|
|
|
|
label.appendChild(document.createTextNode(' '));
|
|
|
|
label.appendChild(document.createTextNode(this.textContent));
|
|
|
|
|
|
|
|
return label;
|
|
|
|
}))
|
|
|
|
.insertBefore($list)
|
|
|
|
.on('change', 'input', function (e) {
|
|
|
|
// change event triggers only on newly selected input, not
|
|
|
|
// on the one being deselected
|
|
|
|
$contents.css('display', '');
|
|
|
|
var content = e.target.content;
|
|
|
|
content && (content.style.display = 'block');
|
|
|
|
})
|
|
|
|
.find('input:first').click();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
function checks_handling() {
|
2015-03-18 21:57:03 +07:00
|
|
|
var $section = $('.checks-handling');
|
|
|
|
if (!$section.length) { return; }
|
|
|
|
|
|
|
|
var $ul = $section.find('ul')
|
|
|
|
.find('li').each(function () {
|
|
|
|
var txt = this.textContent;
|
|
|
|
while (this.firstChild) {
|
|
|
|
this.removeChild(this.firstChild)
|
|
|
|
}
|
2015-04-16 16:57:02 +07:00
|
|
|
|
2015-03-18 21:57:03 +07:00
|
|
|
$('<label style="display: block;">')
|
|
|
|
.append('<input type="radio" name="checks-handling">')
|
|
|
|
.append(' ')
|
|
|
|
.append(txt)
|
|
|
|
.appendTo(this);
|
|
|
|
}).end()
|
|
|
|
.on('change', 'input', update);
|
|
|
|
update();
|
|
|
|
function update() {
|
|
|
|
var $inputs = $ul.find('input');
|
|
|
|
var idx = 0;
|
|
|
|
$inputs.each(function (index) {
|
|
|
|
if (this.checked) {
|
|
|
|
idx = index;
|
|
|
|
}
|
|
|
|
}).eq(idx).prop('checked', true);
|
|
|
|
$ul.nextAll('div').hide().eq(idx).show();
|
|
|
|
}
|
2015-04-16 16:57:02 +07:00
|
|
|
|
|
|
|
}
|
2015-03-18 21:57:03 +07:00
|
|
|
})();
|