88 lines
2.5 KiB
JavaScript
88 lines
2.5 KiB
JavaScript
/*! http://tinynav.viljamis.com v1.2 by @viljamis */
|
|
(function ($, window, i) {
|
|
$.fn.tinyNav = function (options) {
|
|
|
|
// Default settings
|
|
var settings = $.extend({
|
|
'active' : 'selected', // String: Set the "active" class
|
|
'header' : '', // String: Specify text for "header" and show header instead of the active item
|
|
'indent' : '- ', // String: Specify text for indenting sub-items
|
|
'label' : '' // String: sets the <label> text for the <select> (if not set, no label will be added)
|
|
}, options);
|
|
|
|
return this.each(function () {
|
|
|
|
// Used for namespacing
|
|
i++;
|
|
|
|
var $nav = $(this),
|
|
// Namespacing
|
|
namespace = 'tinynav',
|
|
namespace_i = namespace + i,
|
|
l_namespace_i = '.l_' + namespace_i,
|
|
$select = $('<select/>').attr("id", namespace_i).addClass(namespace + ' ' + namespace_i);
|
|
|
|
if ($nav.is('ul,ol')) {
|
|
|
|
if (settings.header !== '') {
|
|
$select.append(
|
|
$('<option/>').text(settings.header)
|
|
);
|
|
}
|
|
|
|
// Build options
|
|
var options = '';
|
|
|
|
$nav
|
|
.addClass('l_' + namespace_i)
|
|
.find('a')
|
|
.each(function () {
|
|
if ($(this).attr('href')) {
|
|
options += '<option value="' + $(this).attr('href') + '">';
|
|
} else {
|
|
options += '<option value="__NOT_A_PAGE__" disabled>';
|
|
}
|
|
var j;
|
|
for (j = 0; j < $(this).parents('ul, ol').length - 1; j++) {
|
|
options += settings.indent;
|
|
}
|
|
options += $(this).text() + '</option>';
|
|
});
|
|
|
|
// Append options into a select
|
|
$select.append(options);
|
|
|
|
// Select the active item
|
|
if (!settings.header) {
|
|
$select
|
|
.find(':eq(' + $(l_namespace_i + ' li')
|
|
.index($(l_namespace_i + ' li.' + settings.active)) + ')')
|
|
.attr('selected', true);
|
|
}
|
|
|
|
// Change window location
|
|
$select.change(function () {
|
|
if ($(this).val() == "__NOT_A_PAGE__") { return; }
|
|
window.location.href = $(this).val();
|
|
});
|
|
|
|
// Inject select
|
|
$(l_namespace_i).after($select);
|
|
|
|
// Inject label
|
|
if (settings.label) {
|
|
$select.before(
|
|
$("<label/>")
|
|
.attr("for", namespace_i)
|
|
.addClass(namespace + '_label ' + namespace_i + '_label')
|
|
.append(settings.label)
|
|
);
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|
|
})(jQuery, this, 0);
|