mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2026-07-29 21:44:12 -04:00
Squashed 'boost/' content from commit b4feb19f2
git-subtree-dir: boost git-subtree-split: b4feb19f287ee92d87a9624b5d36b7cf46aeadeb
This commit is contained in:
+19
File diff suppressed because one or more lines are too long
@@ -0,0 +1,166 @@
|
||||
/*!
|
||||
* jQuery TOC Plugin v1.1.x based on
|
||||
* samaxesJS JavaScript Library
|
||||
* http://code.google.com/p/samaxesjs/
|
||||
*
|
||||
* Copyright (c) 2008 samaxes.com
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* 2009-10-04, guwi17: modified and extended to meet uBLAS' needs
|
||||
*/
|
||||
|
||||
(function($) {
|
||||
/*
|
||||
* The TOC plugin dynamically builds a table of contents from the headings in
|
||||
* a document and prepends legal-style section numbers to each of the headings.
|
||||
*/
|
||||
$.fn.toc = function(options) {
|
||||
var opts = $.extend({}, $.fn.toc.defaults, options);
|
||||
|
||||
return this.each(function() {
|
||||
var toc = $(this).append('<ul></ul>').children('ul');
|
||||
var headers = {h1: 0, h2: 0, h3: 0, h4: 0, h5: 0, h6: 0};
|
||||
var index = 0;
|
||||
var indexes = {
|
||||
h1: (opts.exclude.match('h1') == null && $('h1').length > 0) ? ++index : 0,
|
||||
h2: (opts.exclude.match('h2') == null && $('h2').length > 0) ? ++index : 0,
|
||||
h3: (opts.exclude.match('h3') == null && $('h3').length > 0) ? ++index : 0,
|
||||
h4: (opts.exclude.match('h4') == null && $('h4').length > 0) ? ++index : 0,
|
||||
h5: (opts.exclude.match('h5') == null && $('h5').length > 0) ? ++index : 0,
|
||||
h6: (opts.exclude.match('h6') == null && $('h6').length > 0) ? ++index : 0
|
||||
};
|
||||
|
||||
$(':header').not(opts.exclude).each(function() {
|
||||
var linkId = "";
|
||||
if ($(this).is('h6')) {
|
||||
checkContainer(headers.h6, toc);
|
||||
updateNumeration(headers, 'h6');
|
||||
$(this).text(addNumeration(headers, 'h6', $(this).text()));
|
||||
linkId = fixAnchor($(this));
|
||||
appendToTOC(toc, indexes.h6, linkId, $(this).text(), headers);
|
||||
} else if ($(this).is('h5')) {
|
||||
checkContainer(headers.h5, toc);
|
||||
updateNumeration(headers, 'h5');
|
||||
$(this).text(addNumeration(headers, 'h5', $(this).text()));
|
||||
linkId = fixAnchor($(this));
|
||||
appendToTOC(toc, indexes.h5, linkId, $(this).text(), headers);
|
||||
} else if ($(this).is('h4')) {
|
||||
checkContainer(headers.h4, toc);
|
||||
updateNumeration(headers, 'h4');
|
||||
$(this).text(addNumeration(headers, 'h4', $(this).text()));
|
||||
linkId = fixAnchor($(this));
|
||||
appendToTOC(toc, indexes.h4, linkId, $(this).text(), headers);
|
||||
} else if ($(this).is('h3')) {
|
||||
checkContainer(headers.h3, toc);
|
||||
updateNumeration(headers, 'h3');
|
||||
$(this).text(addNumeration(headers, 'h3', $(this).text()));
|
||||
linkId = fixAnchor($(this));
|
||||
appendToTOC(toc, indexes.h3, linkId, $(this).text(), headers);
|
||||
} else if ($(this).is('h2')) {
|
||||
checkContainer(headers.h2, toc);
|
||||
updateNumeration(headers, 'h2');
|
||||
$(this).text(addNumeration(headers, 'h2', $(this).text()));
|
||||
linkId = fixAnchor($(this));
|
||||
appendToTOC(toc, indexes.h2, linkId, $(this).text(), headers);
|
||||
} else if ($(this).is('h1')) {
|
||||
updateNumeration(headers, 'h1');
|
||||
$(this).text(addNumeration(headers, 'h1', $(this).text()));
|
||||
linkId = fixAnchor($(this));
|
||||
appendToTOC(toc, indexes.h1, linkId, $(this).text(), headers);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/*
|
||||
* Checks if the last node is an 'ul' element.
|
||||
* If not, a new one is created.
|
||||
*/
|
||||
function checkContainer(header, toc) {
|
||||
if (header == 0 && !toc.find(':last').is('ul')) {
|
||||
toc.find('li:last').append('<ul></ul>');
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* Updates headers numeration.
|
||||
*/
|
||||
function updateNumeration(headers, header) {
|
||||
$.each(headers, function(i, val) {
|
||||
if (i == header) {
|
||||
++headers[i];
|
||||
} else if (i > header) {
|
||||
headers[i] = 0;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/*
|
||||
* Prepends the numeration to a heading.
|
||||
*/
|
||||
function addNumeration(headers, header, text) {
|
||||
var numeration = '';
|
||||
|
||||
$.each(headers, function(i, val) {
|
||||
if (i <= header && headers[i] > 0) {
|
||||
numeration += headers[i] + '.';
|
||||
}
|
||||
});
|
||||
|
||||
return removeFinalDot(numeration) + ' ' + text;
|
||||
};
|
||||
|
||||
function removeFinalDot(text) {
|
||||
return (text||"").replace(/\.$/g, "" )
|
||||
}
|
||||
|
||||
function fixAnchor(element) {
|
||||
// use existing id by default
|
||||
var linkId = element.attr('id');
|
||||
// next, look for an anchor and use its id or name
|
||||
if ( !linkId ) {
|
||||
element.find('> a:first').each( function() {
|
||||
linkId = $(this).attr('id') || $(this).attr('name');
|
||||
});
|
||||
}
|
||||
// next, use the text content as last resort
|
||||
if ( !linkId ) {
|
||||
linkId = (element.text()||"unknown").replace(/[^a-zA-Z0-9]/g,"");
|
||||
}
|
||||
|
||||
element.attr('id',linkId);
|
||||
return linkId;
|
||||
}
|
||||
|
||||
/*
|
||||
* Appends a new node to the TOC.
|
||||
*/
|
||||
function appendToTOC(toc, index, id, text, headers) {
|
||||
var parent = toc;
|
||||
|
||||
for (var i = 1; i < index; i++) {
|
||||
if (parent.find('> li:last > ul').length == 0) {
|
||||
parent = parent.append('<li><ul></ul></li>');
|
||||
}
|
||||
parent = parent.find('> li:last > ul');
|
||||
}
|
||||
if (id) {
|
||||
parent.append('<li><a href="#' + id + '">' + text + '</a></li>');
|
||||
} else {
|
||||
parent.append('<li>' + text + '</li>');
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.toc.defaults = {exclude: 'h1, h5, h6'}
|
||||
})(jQuery);
|
||||
Reference in New Issue
Block a user