This commit is contained in:
kindlm
2017-09-15 12:51:57 +02:00
209 changed files with 5019 additions and 12997 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-314
View File
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
-221
View File
@@ -1,221 +0,0 @@
/*
Author : Tomaz Dragar
Mail : <tomaz@dragar.net>
Homepage : http://www.dragar.net
*/
(function($) {
$.fn.simpleCropper = function() {
var image_dimension_x = 600;
var image_dimension_y = 600;
var scaled_width = 0;
var scaled_height = 0;
var x1 = 0;
var y1 = 0;
var x2 = 0;
var y2 = 0;
var current_image = null;
var aspX = 1;
var aspY = 1;
var file_display_area = null;
var ias = null;
var jcrop_api;
var bottom_html = "<input type='file' id='fileInput' name='files[]'/><canvas id='myCanvas' style='display:none;'></canvas><div id='modal'></div><div id='preview'><div class='buttons'><div class='cancel' style='background-image:url(../../skin/images/false-27.png);'></div><div class='ok' style='background-image:url(../../skin/images/true-27.png);'></div></div></div>";
$('body').append(bottom_html);
//add click to element
this.click(function() {
aspX = $(this).width();
aspY = $(this).height();
file_display_area = $(this);
$('#fileInput').click();
});
$(document).ready(function() {
//capture selected filename
$('#fileInput').change(function(click) {
imageUpload($('#preview').get(0));
// Reset input value
$(this).val("");
});
//ok listener
$('.ok').click(function() {
preview();
$('#preview').delay(100).hide();
$('#modal').hide();
jcrop_api.destroy();
reset();
});
//cancel listener
$('.cancel').click(function(event) {
$('#preview').delay(100).hide();
$('#modal').hide();
jcrop_api.destroy();
reset();
});
});
function reset() {
scaled_width = 0;
scaled_height = 0;
x1 = 0;
y1 = 0;
x2 = 0;
y2 = 0;
current_image = null;
aspX = 1;
aspY = 1;
file_display_area = null;
}
function imageUpload(dropbox) {
var file = $("#fileInput").get(0).files[0];
//var file = document.getElementById('fileInput').files[0];
var imageType = /image.*/;
if (file.type.match(imageType)) {
var reader = new FileReader();
reader.onload = function(e) {
// Clear the current image.
$('#photo').remove();
// Create a new image with image crop functionality
current_image = new Image();
current_image.src = reader.result;
current_image.id = "photo";
current_image.style['maxWidth'] = image_dimension_x + 'px';
current_image.style['maxHeight'] = image_dimension_y + 'px';
current_image.onload = function() {
// Calculate scaled image dimensions
if (current_image.width > image_dimension_x || current_image.height > image_dimension_y) {
if (current_image.width > current_image.height) {
scaled_width = image_dimension_x;
scaled_height = image_dimension_x * current_image.height / current_image.width;
}
if (current_image.width < current_image.height) {
scaled_height = image_dimension_y;
scaled_width = image_dimension_y * current_image.width / current_image.height;
}
if (current_image.width == current_image.height) {
scaled_width = image_dimension_x;
scaled_height = image_dimension_y;
}
}
else {
scaled_width = current_image.width;
scaled_height = current_image.height;
}
// Position the modal div to the center of the screen
$('#modal').css('display', 'block');
var window_width = $(window).width() / 2 - scaled_width / 2 + "px";
var window_height = $(window).height() / 2 - scaled_height / 2 + "px";
// Show image in modal view
$("#preview").css("top", window_height);
$("#preview").css("left", window_width);
$('#preview').show(500);
// Calculate selection rect
var selection_width = 0;
var selection_height = 0;
var max_x = Math.floor(scaled_height * aspX / aspY);
var max_y = Math.floor(scaled_width * aspY / aspX);
if (max_x > scaled_width) {
selection_width = scaled_width;
selection_height = max_y;
}
else {
selection_width = max_x;
selection_height = scaled_height;
}
ias = $(this).Jcrop({
onSelect: showCoords,
onChange: showCoords,
bgColor: '#747474',
bgOpacity: .4,
aspectRatio: aspX / aspY,
setSelect: [0, 0, selection_width, selection_height]
}, function() {
jcrop_api = this;
});
}
// Add image to dropbox element
dropbox.appendChild(current_image);
}
reader.readAsDataURL(file);
} else {
dropbox.innerHTML = "File not supported!";
}
}
function showCoords(c) {
x1 = c.x;
y1 = c.y;
x2 = c.x2;
y2 = c.y2;
}
function preview() {
// Set canvas
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
// Delete previous image on canvas
context.clearRect(0, 0, canvas.width, canvas.height);
// Set selection width and height
var sw = x2 - x1;
var sh = y2 - y1;
// Set image original width and height
var imgWidth = current_image.naturalWidth;
var imgHeight = current_image.naturalHeight;
// Set selection koeficient
var kw = imgWidth / $("#preview").width();
var kh = imgHeight / $("#preview").height();
// Set canvas width and height and draw selection on it
canvas.width = aspX;
canvas.height = aspY;
context.drawImage(current_image, (x1 * kw), (y1 * kh), (sw * kw), (sh * kh), 0, 0, aspX, aspY);
// Convert canvas image to normal img
var dataUrl = canvas.toDataURL();
var imageFoo = document.createElement('img');
imageFoo.src = dataUrl;
// Append it to the body element
$('#preview').delay(100).hide();
$('#modal').hide();
file_display_area.html('');
file_display_area.append(imageFoo);
}
$(window).resize(function() {
// Position the modal div to the center of the screen
var window_width = $(window).width() / 2 - scaled_width / 2 + "px";
var window_height = $(window).height() / 2 - scaled_height / 2 + "px";
// Show image in modal view
$("#preview").css("top", window_height);
$("#preview").css("left", window_width);
});
}
}(jQuery));
-502
View File
@@ -1,502 +0,0 @@
jQuery.autocomplete = function(input, options) {
// Create a link to self
var me = this;
// Create jQuery object for input element
var $input = $(input).attr("autocomplete", "off");
// Apply inputClass if necessary
if (options.inputClass) $input.addClass(options.inputClass);
// Create results
var results = document.createElement("div");
// Create jQuery object for results
var $results = $(results);
$results.hide().addClass(options.resultsClass).css("position", "absolute");
if( options.width > 0 ) $results.css("width", options.width);
// Add to body element
$("body").append(results);
input.autocompleter = me;
var timeout = null;
var prev = "";
var active = -1;
var cache = {};
var keyb = false;
var hasFocus = false;
var lastKeyPressCode = null;
// flush cache
function flushCache(){
cache = {};
cache.data = {};
cache.length = 0;
};
// flush cache
flushCache();
// if there is a data array supplied
if( options.data != null ){
var sFirstChar = "", stMatchSets = {}, row = [];
// no url was specified, we need to adjust the cache length to make sure it fits the local data store
if( typeof options.url != "string" ) options.cacheLength = 1;
// loop through the array and create a lookup structure
for( var i=0; i < options.data.length; i++ ){
// if row is a string, make an array otherwise just reference the array
row = ((typeof options.data[i] == "string") ? [options.data[i]] : options.data[i]);
// if the length is zero, don't add to list
if( row[0].length > 0 ){
// get the first character
sFirstChar = row[0].substring(0, 1).toLowerCase();
// if no lookup array for this character exists, look it up now
if( !stMatchSets[sFirstChar] ) stMatchSets[sFirstChar] = [];
// if the match is a string
stMatchSets[sFirstChar].push(row);
}
}
// add the data items to the cache
for( var k in stMatchSets ){
// increase the cache size
options.cacheLength++;
// add to the cache
addToCache(k, stMatchSets[k]);
}
}
$input
.keydown(function(e) {
// track last key pressed
lastKeyPressCode = e.keyCode;
switch(e.keyCode) {
case 38: // up
e.preventDefault();
moveSelect(-1);
break;
case 40: // down
e.preventDefault();
moveSelect(1);
break;
case 9: // tab
case 13: // return
if( selectCurrent() ){
// make sure to blur off the current field
$input.get(0).blur();
e.preventDefault();
}
break;
default:
active = -1;
if (timeout) clearTimeout(timeout);
timeout = setTimeout(function(){onChange();}, options.delay);
break;
}
})
.focus(function(){
// track whether the field has focus, we shouldn't process any results if the field no longer has focus
hasFocus = true;
})
.blur(function() {
// track whether the field has focus
hasFocus = false;
hideResults();
});
hideResultsNow();
function onChange() {
// ignore if the following keys are pressed: [del] [shift] [capslock]
if( lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32) ) return $results.hide();
var v = $input.val();
if (v == prev) return;
prev = v;
if (v.length >= options.minChars) {
$input.addClass(options.loadingClass);
requestData(v);
} else {
$input.removeClass(options.loadingClass);
$results.hide();
}
};
function moveSelect(step) {
var lis = $("li", results);
if (!lis) return;
active += step;
if (active < 0) {
active = 0;
} else if (active >= lis.size()) {
active = lis.size() - 1;
}
lis.removeClass("ac_over");
$(lis[active]).addClass("ac_over");
// Weird behaviour in IE
// if (lis[active] && lis[active].scrollIntoView) {
// lis[active].scrollIntoView(false);
// }
};
function selectCurrent() {
var li = $("li.ac_over", results)[0];
if (!li) {
var $li = $("li", results);
if (options.selectOnly) {
if ($li.length == 1) li = $li[0];
} else if (options.selectFirst) {
li = $li[0];
}
}
if (li) {
selectItem(li);
return true;
} else {
return false;
}
};
function selectItem(li) {
if (!li) {
li = document.createElement("li");
li.extra = [];
li.selectValue = "";
}
var v = $.trim(li.selectValue ? li.selectValue : li.innerHTML);
input.lastSelected = v;
prev = v;
$results.html("");
$input.val(v);
hideResultsNow();
if (options.onItemSelect) setTimeout(function() { options.onItemSelect(li) }, 1);
};
// selects a portion of the input string
function createSelection(start, end){
// get a reference to the input element
var field = $input.get(0);
if( field.createTextRange ){
var selRange = field.createTextRange();
selRange.collapse(true);
selRange.moveStart("character", start);
selRange.moveEnd("character", end);
selRange.select();
} else if( field.setSelectionRange ){
field.setSelectionRange(start, end);
} else {
if( field.selectionStart ){
field.selectionStart = start;
field.selectionEnd = end;
}
}
field.focus();
};
// fills in the input box w/the first match (assumed to be the best match)
function autoFill(sValue){
// if the last user key pressed was backspace, don't autofill
if( lastKeyPressCode != 8 ){
// fill in the value (keep the case the user has typed)
$input.val($input.val() + sValue.substring(prev.length));
// select the portion of the value not typed by the user (so the next character will erase)
createSelection(prev.length, sValue.length);
}
};
function showResults() {
// get the position of the input field right now (in case the DOM is shifted)
var pos = findPos(input);
// either use the specified width, or autocalculate based on form element
var iWidth = (options.width > 0) ? options.width : $input.width();
// reposition
$results.css({
width: parseInt(iWidth) + "px",
top: (pos.y + input.offsetHeight) + "px",
left: pos.x + "px"
}).show();
};
function hideResults() {
if (timeout) clearTimeout(timeout);
timeout = setTimeout(hideResultsNow, 200);
};
function hideResultsNow() {
if (timeout) clearTimeout(timeout);
$input.removeClass(options.loadingClass);
if ($results.is(":visible")) {
$results.hide();
}
if (options.mustMatch) {
var v = $input.val();
if (v != input.lastSelected) {
selectItem(null);
}
}
};
function receiveData(q, data) {
if (data) {
$input.removeClass(options.loadingClass);
results.innerHTML = "";
// if the field no longer has focus or if there are no matches, do not display the drop down
if( !hasFocus || data.length == 0 ) return hideResultsNow();
if ($.browser.msie) {
// we put a styled iframe behind the calendar so HTML SELECT elements don't show through
$results.append(document.createElement('iframe'));
}
results.appendChild(dataToDom(data));
// autofill in the complete box w/the first match as long as the user hasn't entered in more data
if( options.autoFill && ($input.val().toLowerCase() == q.toLowerCase()) ) autoFill(data[0][0]);
showResults();
} else {
hideResultsNow();
}
};
function parseData(data) {
if (!data) return null;
var parsed = [];
var rows = data.split(options.lineSeparator);
for (var i=0; i < rows.length; i++) {
var row = $.trim(rows[i]);
if (row) {
parsed[parsed.length] = row.split(options.cellSeparator);
}
}
return parsed;
};
function dataToDom(data) {
var ul = document.createElement("ul");
var num = data.length;
// limited results to a max number
if( (options.maxItemsToShow > 0) && (options.maxItemsToShow < num) ) num = options.maxItemsToShow;
for (var i=0; i < num; i++) {
var row = data[i];
if (!row) continue;
var li = document.createElement("li");
if (options.formatItem) {
li.innerHTML = options.formatItem(row, i, num);
li.selectValue = row[0];
} else {
li.innerHTML = row[0];
li.selectValue = row[0];
}
var extra = null;
if (row.length > 1) {
extra = [];
for (var j=1; j < row.length; j++) {
extra[extra.length] = row[j];
}
}
li.extra = extra;
ul.appendChild(li);
$(li).hover(
function() { $("li", ul).removeClass("ac_over"); $(this).addClass("ac_over"); active = $("li", ul).indexOf($(this).get(0)); },
function() { $(this).removeClass("ac_over"); }
).click(function(e) { e.preventDefault(); e.stopPropagation(); selectItem(this) });
}
return ul;
};
function requestData(q) {
if (!options.matchCase) q = q.toLowerCase();
var data = options.cacheLength ? loadFromCache(q) : null;
// recieve the cached data
if (data) {
receiveData(q, data);
// if an AJAX url has been supplied, try loading the data now
} else if( (typeof options.url == "string") && (options.url.length > 0) ){
$.get(makeUrl(q), function(data) {
data = parseData(data);
addToCache(q, data);
receiveData(q, data);
});
// if there's been no data found, remove the loading class
} else {
$input.removeClass(options.loadingClass);
}
};
function makeUrl(q) {
var url = options.url + "?q=" + encodeURI(q);
for (var i in options.extraParams) {
url += "&" + i + "=" + encodeURI(options.extraParams[i]);
}
return url;
};
function loadFromCache(q) {
if (!q) return null;
if (cache.data[q]) return cache.data[q];
if (options.matchSubset) {
for (var i = q.length - 1; i >= options.minChars; i--) {
var qs = q.substr(0, i);
var c = cache.data[qs];
if (c) {
var csub = [];
for (var j = 0; j < c.length; j++) {
var x = c[j];
var x0 = x[0];
if (matchSubset(x0, q)) {
csub[csub.length] = x;
}
}
return csub;
}
}
}
return null;
};
function matchSubset(s, sub) {
if (!options.matchCase) s = s.toLowerCase();
var i = s.indexOf(sub);
if (i == -1) return false;
return i == 0 || options.matchContains;
};
this.flushCache = function() {
flushCache();
};
this.setExtraParams = function(p) {
options.extraParams = p;
};
this.findValue = function(){
var q = $input.val();
if (!options.matchCase) q = q.toLowerCase();
var data = options.cacheLength ? loadFromCache(q) : null;
if (data) {
findValueCallback(q, data);
} else if( (typeof options.url == "string") && (options.url.length > 0) ){
$.get(makeUrl(q), function(data) {
data = parseData(data)
addToCache(q, data);
findValueCallback(q, data);
});
} else {
// no matches
findValueCallback(q, null);
}
}
function findValueCallback(q, data){
if (data) $input.removeClass(options.loadingClass);
var num = (data) ? data.length : 0;
var li = null;
for (var i=0; i < num; i++) {
var row = data[i];
if( row[0].toLowerCase() == q.toLowerCase() ){
li = document.createElement("li");
if (options.formatItem) {
li.innerHTML = options.formatItem(row, i, num);
li.selectValue = row[0];
} else {
li.innerHTML = row[0];
li.selectValue = row[0];
}
var extra = null;
if( row.length > 1 ){
extra = [];
for (var j=1; j < row.length; j++) {
extra[extra.length] = row[j];
}
}
li.extra = extra;
}
}
if( options.onFindValue ) setTimeout(function() { options.onFindValue(li) }, 1);
}
function addToCache(q, data) {
if (!data || !q || !options.cacheLength) return;
if (!cache.length || cache.length > options.cacheLength) {
flushCache();
cache.length++;
} else if (!cache[q]) {
cache.length++;
}
cache.data[q] = data;
};
function findPos(obj) {
var curleft = obj.offsetLeft || 0;
var curtop = obj.offsetTop || 0;
while (obj = obj.offsetParent) {
curleft += obj.offsetLeft
curtop += obj.offsetTop
}
return {x:curleft,y:curtop};
}
}
jQuery.fn.autocomplete = function(url, options, data) {
// Make sure options exists
options = options || {};
// Set url as option
options.url = url;
// set some bulk local data
options.data = ((typeof data == "object") && (data.constructor == Array)) ? data : null;
// Set default values for required options
options.inputClass = options.inputClass || "ac_input";
options.resultsClass = options.resultsClass || "ac_results";
options.lineSeparator = options.lineSeparator || "\n";
options.cellSeparator = options.cellSeparator || "|";
options.minChars = options.minChars || 1;
options.delay = options.delay || 400;
options.matchCase = options.matchCase || 0;
options.matchSubset = options.matchSubset || 1;
options.matchContains = options.matchContains || 0;
options.cacheLength = options.cacheLength || 1;
options.mustMatch = options.mustMatch || 0;
options.extraParams = options.extraParams || {};
options.loadingClass = options.loadingClass || "ac_loading";
options.selectFirst = options.selectFirst || false;
options.selectOnly = options.selectOnly || false;
options.maxItemsToShow = options.maxItemsToShow || -1;
options.autoFill = options.autoFill || false;
options.width = parseInt(options.width, 10) || 0;
this.each(function() {
var input = this;
new jQuery.autocomplete(input, options);
});
// Don't break the chain
return this;
}
jQuery.fn.autocompleteArray = function(data, options) {
return this.autocomplete(null, options, data);
}
jQuery.fn.indexOf = function(e){
for( var i=0; i<this.length; i++ ){
if( this[i] == e ) return i;
}
return -1;
};
File diff suppressed because one or more lines are too long
-118
View File
@@ -1,118 +0,0 @@
/*!
* jQuery Cookie Plugin v1.4.0
* https://github.com/carhartl/jquery-cookie
*
* Copyright 2013 Klaus Hartl
* Released under the MIT license
*/
(function(factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as anonymous module.
define(['jquery'], factory);
} else {
// Browser globals.
factory(jQuery);
}
}(function($) {
var pluses = /\+/g;
function encode(s) {
return config.raw ? s : encodeURIComponent(s);
}
function decode(s) {
return config.raw ? s : decodeURIComponent(s);
}
function stringifyCookieValue(value) {
return encode(config.json ? JSON.stringify(value) : String(value));
}
function parseCookieValue(s) {
if (s.indexOf('"') === 0) {
// This is a quoted cookie as according to RFC2068, unescape...
s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
}
try {
// Replace server-side written pluses with spaces.
// If we can't decode the cookie, ignore it, it's unusable.
s = decodeURIComponent(s.replace(pluses, ' '));
} catch (e) {
return;
}
try {
// If we can't parse the cookie, ignore it, it's unusable.
return config.json ? JSON.parse(s) : s;
} catch (e) {
}
}
function read(s, converter) {
var value = config.raw ? s : parseCookieValue(s);
return $.isFunction(converter) ? converter(value) : value;
}
var config = $.cookie = function(key, value, options) {
// Write
if (value !== undefined && !$.isFunction(value)) {
options = $.extend({}, config.defaults, options);
if (typeof options.expires === 'number') {
var days = options.expires, t = options.expires = new Date();
t.setDate(t.getDate() + days);
}
return (document.cookie = [
encode(key), '=', stringifyCookieValue(value),
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path ? '; path=' + options.path : '',
options.domain ? '; domain=' + options.domain : '',
options.secure ? '; secure' : ''
].join(''));
}
// Read
var result = key ? undefined : {};
// To prevent the for loop in the first place assign an empty array
// in case there are no cookies at all. Also prevents odd result when
// calling $.cookie().
var cookies = document.cookie ? document.cookie.split('; ') : [];
for (var i = 0, l = cookies.length; i < l; i++) {
var parts = cookies[i].split('=');
var name = decode(parts.shift());
var cookie = parts.join('=');
if (key && key === name) {
// If second argument (value) is a function it's a converter...
result = read(cookie, value);
break;
}
// Prevent storing a cookie that we couldn't decode.
if (!key && (cookie = read(cookie)) !== undefined) {
result[name] = cookie;
}
}
return result;
};
config.defaults = {};
$.removeCookie = function(key, options) {
if ($.cookie(key) !== undefined) {
// Must not alter options, thus extending a fresh object...
$.cookie(key, '', $.extend({}, options, {expires: -1}));
return true;
}
return false;
};
}));
-122
View File
@@ -1,122 +0,0 @@
/*
* Metadata - jQuery plugin for parsing metadata from elements
*
* Copyright (c) 2006 John Resig, Yehuda Katz, Jörn Zaefferer, Paul McLanahan
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* Revision: $Id$
*
*/
/**
* Sets the type of metadata to use. Metadata is encoded in JSON, and each property
* in the JSON will become a property of the element itself.
*
* There are three supported types of metadata storage:
*
* attr: Inside an attribute. The name parameter indicates *which* attribute.
*
* class: Inside the class attribute, wrapped in curly braces: { }
*
* elem: Inside a child element (e.g. a script tag). The
* name parameter indicates *which* element.
*
* The metadata for an element is loaded the first time the element is accessed via jQuery.
*
* As a result, you can define the metadata type, use $(expr) to load the metadata into the elements
* matched by expr, then redefine the metadata type and run another $(expr) for other elements.
*
* @name $.metadata.setType
*
* @example <p id="one" class="some_class {item_id: 1, item_label: 'Label'}">This is a p</p>
* @before $.metadata.setType("class")
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
* @desc Reads metadata from the class attribute
*
* @example <p id="one" class="some_class" data="{item_id: 1, item_label: 'Label'}">This is a p</p>
* @before $.metadata.setType("attr", "data")
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
* @desc Reads metadata from a "data" attribute
*
* @example <p id="one" class="some_class"><script>{item_id: 1, item_label: 'Label'}</script>This is a p</p>
* @before $.metadata.setType("elem", "script")
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
* @desc Reads metadata from a nested script element
*
* @param String type The encoding type
* @param String name The name of the attribute to be used to get metadata (optional)
* @cat Plugins/Metadata
* @descr Sets the type of encoding to be used when loading metadata for the first time
* @type undefined
* @see metadata()
*/
(function($) {
$.extend({
metadata : {
defaults : {
type: 'class',
name: 'metadata',
cre: /({.*})/,
single: 'metadata'
},
setType: function( type, name ){
this.defaults.type = type;
this.defaults.name = name;
},
get: function( elem, opts ){
var settings = $.extend({},this.defaults,opts);
// check for empty string in single property
if ( !settings.single.length ) settings.single = 'metadata';
var data = $.data(elem, settings.single);
// returned cached data if it already exists
if ( data ) return data;
data = "{}";
if ( settings.type == "class" ) {
var m = settings.cre.exec( elem.className );
if ( m )
data = m[1];
} else if ( settings.type == "elem" ) {
if( !elem.getElementsByTagName )
return undefined;
var e = elem.getElementsByTagName(settings.name);
if ( e.length )
data = $.trim(e[0].innerHTML);
} else if ( elem.getAttribute != undefined ) {
var attr = elem.getAttribute( settings.name );
if ( attr )
data = attr;
}
if ( data.indexOf( '{' ) <0 )
data = "{" + data + "}";
data = eval("(" + data + ")");
$.data( elem, settings.single, data );
return data;
}
}
});
/**
* Returns the metadata object for the first member of the jQuery object.
*
* @name metadata
* @descr Returns element's metadata object
* @param Object opts An object contianing settings to override the defaults
* @type jQuery
* @cat Plugins/Metadata
*/
$.fn.metadata = function( opts ){
return $.metadata.get( this[0], opts );
};
})(jQuery);
File diff suppressed because one or more lines are too long
-916
View File
@@ -1,916 +0,0 @@
/*
*
* TableSorter 2.0 - Client-side table sorting with ease!
* Version 2.0.3
* @requires jQuery v1.2.3
*
* Copyright (c) 2007 Christian Bach
* Examples and docs at: http://tablesorter.com
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
*/
/**
*
* @description Create a sortable table with multi-column sorting capabilitys
*
* @example $('table').tablesorter();
* @desc Create a simple tablesorter interface.
*
* @example $('table').tablesorter({ sortList:[[0,0],[1,0]] });
* @desc Create a tablesorter interface and sort on the first and secound column in ascending order.
*
* @example $('table').tablesorter({ headers: { 0: { sorter: false}, 1: {sorter: false} } });
* @desc Create a tablesorter interface and disableing the first and secound column headers.
*
* @example $('table').tablesorter({ 0: {sorter:"integer"}, 1: {sorter:"currency"} });
* @desc Create a tablesorter interface and set a column parser for the first and secound column.
*
*
* @param Object settings An object literal containing key/value pairs to provide optional settings.
*
* @option String cssHeader (optional) A string of the class name to be appended to sortable tr elements in the thead of the table.
* Default value: "header"
*
* @option String cssAsc (optional) A string of the class name to be appended to sortable tr elements in the thead on a ascending sort.
* Default value: "headerSortUp"
*
* @option String cssDesc (optional) A string of the class name to be appended to sortable tr elements in the thead on a descending sort.
* Default value: "headerSortDown"
*
* @option String sortInitialOrder (optional) A string of the inital sorting order can be asc or desc.
* Default value: "asc"
*
* @option String sortMultisortKey (optional) A string of the multi-column sort key.
* Default value: "shiftKey"
*
* @option String textExtraction (optional) A string of the text-extraction method to use.
* For complex html structures inside td cell set this option to "complex",
* on large tables the complex option can be slow.
* Default value: "simple"
*
* @option Object headers (optional) An array containing the forces sorting rules.
* This option let's you specify a default sorting rule.
* Default value: null
*
* @option Array sortList (optional) An array containing the forces sorting rules.
* This option let's you specify a default sorting rule.
* Default value: null
*
* @option Array sortForce (optional) An array containing forced sorting rules.
* This option let's you specify a default sorting rule, which is prepended to user-selected rules.
* Default value: null
*
* @option Array sortAppend (optional) An array containing forced sorting rules.
* This option let's you specify a default sorting rule, which is appended to user-selected rules.
* Default value: null
*
* @option Boolean widthFixed (optional) Boolean flag indicating if tablesorter should apply fixed widths to the table columns.
* This is usefull when using the pager companion plugin.
* This options requires the dimension jquery plugin.
* Default value: false
*
* @option Boolean cancelSelection (optional) Boolean flag indicating if tablesorter should cancel selection of the table headers text.
* Default value: true
*
* @option Boolean debug (optional) Boolean flag indicating if tablesorter should display debuging information usefull for development.
*
* @type jQuery
*
* @name tablesorter
*
* @cat Plugins/Tablesorter
*
* @author Christian Bach/christian.bach@polyester.se
*/
(function($) {
$.extend({
tablesorter: new function() {
var parsers = [], widgets = [];
this.defaults = {
cssHeader: "header",
cssAsc: "headerSortUp",
cssDesc: "headerSortDown",
sortInitialOrder: "asc",
sortMultiSortKey: "shiftKey",
sortForce: null,
sortAppend: null,
textExtraction: "simple",
parsers: {},
widgets: [],
widgetZebra: {css: ["even","odd"]},
headers: {},
widthFixed: false,
cancelSelection: true,
sortList: [],
headerList: [],
dateFormat: "us",
decimal: '.',
debug: false
};
/* debuging utils */
function benchmark(s,d) {
log(s + "," + (new Date().getTime() - d.getTime()) + "ms");
}
this.benchmark = benchmark;
function log(s) {
if (typeof console != "undefined" && typeof console.debug != "undefined") {
console.log(s);
} else {
alert(s);
}
}
/* parsers utils */
function buildParserCache(table,$headers) {
if(table.config.debug) { var parsersDebug = ""; }
var rows = table.tBodies[0].rows;
if(table.tBodies[0].rows[0]) {
var list = [], cells = rows[0].cells, l = cells.length;
for (var i=0;i < l; i++) {
var p = false;
if($.metadata && ($($headers[i]).metadata() && $($headers[i]).metadata().sorter) ) {
p = getParserById($($headers[i]).metadata().sorter);
} else if((table.config.headers[i] && table.config.headers[i].sorter)) {
p = getParserById(table.config.headers[i].sorter);
}
if(!p) {
p = detectParserForColumn(table,cells[i]);
}
if(table.config.debug) { parsersDebug += "column:" + i + " parser:" +p.id + "\n"; }
list.push(p);
}
}
if(table.config.debug) { log(parsersDebug); }
return list;
};
function detectParserForColumn(table,node) {
var l = parsers.length;
for(var i=1; i < l; i++) {
if(parsers[i].is($.trim(getElementText(table.config,node)),table,node)) {
return parsers[i];
}
}
// 0 is always the generic parser (text)
return parsers[0];
}
function getParserById(name) {
var l = parsers.length;
for(var i=0; i < l; i++) {
if(parsers[i].id.toLowerCase() == name.toLowerCase()) {
return parsers[i];
}
}
return false;
}
/* utils */
function buildCache(table) {
if(table.config.debug) { var cacheTime = new Date(); }
var totalRows = (table.tBodies[0] && table.tBodies[0].rows.length) || 0,
totalCells = (table.tBodies[0].rows[0] && table.tBodies[0].rows[0].cells.length) || 0,
parsers = table.config.parsers,
cache = {row: [], normalized: []};
for (var i=0;i < totalRows; ++i) {
/** Add the table data to main data array */
var c = table.tBodies[0].rows[i], cols = [];
cache.row.push($(c));
for(var j=0; j < totalCells; ++j) {
cols.push(parsers[j].format(getElementText(table.config,c.cells[j]),table,c.cells[j]));
}
cols.push(i); // add position for rowCache
cache.normalized.push(cols);
cols = null;
};
if(table.config.debug) { benchmark("Building cache for " + totalRows + " rows:", cacheTime); }
return cache;
};
function getElementText(config,node) {
if(!node) return "";
var t = "";
if(config.textExtraction == "simple") {
if(node.childNodes[0] && node.childNodes[0].hasChildNodes()) {
t = node.childNodes[0].innerHTML;
} else {
t = node.innerHTML;
}
} else {
if(typeof(config.textExtraction) == "function") {
t = config.textExtraction(node);
} else {
t = $(node).text();
}
}
t=t.replace('ö','o');
t=t.replace('Ö','O');
t=t.replace('ü','u');
t=t.replace('Ü','U');
t=t.replace('ä','a');
t=t.replace('Ä','A');
return t;
}
function appendToTable(table,cache) {
if(table.config.debug) {var appendTime = new Date()}
var c = cache,
r = c.row,
n= c.normalized,
totalRows = n.length,
checkCell = (n[0].length-1),
tableBody = $(table.tBodies[0]),
rows = [];
for (var i=0;i < totalRows; i++) {
rows.push(r[n[i][checkCell]]);
if(!table.config.appender) {
var o = r[n[i][checkCell]];
var l = o.length;
for(var j=0; j < l; j++) {
tableBody[0].appendChild(o[j]);
}
//tableBody.append(r[n[i][checkCell]]);
}
}
if(table.config.appender) {
table.config.appender(table,rows);
}
rows = null;
if(table.config.debug) { benchmark("Rebuilt table:", appendTime); }
//apply table widgets
applyWidget(table);
// trigger sortend
setTimeout(function() {
$(table).trigger("sortEnd");
},0);
};
function buildHeaders(table) {
if(table.config.debug) { var time = new Date(); }
var meta = ($.metadata) ? true : false, tableHeadersRows = [];
for(var i = 0; i < table.tHead.rows.length; i++) { tableHeadersRows[i]=0; };
$tableHeaders = $("thead th",table);
$tableHeaders.each(function(index) {
this.count = 0;
this.column = index;
this.order = formatSortingOrder(table.config.sortInitialOrder);
if(checkHeaderMetadata(this) || checkHeaderOptions(table,index)) this.sortDisabled = true;
if(!this.sortDisabled) {
$(this).addClass(table.config.cssHeader);
}
// add cell to headerList
table.config.headerList[index]= this;
});
if(table.config.debug) { benchmark("Built headers:", time); log($tableHeaders); }
return $tableHeaders;
};
function checkCellColSpan(table, rows, row) {
var arr = [], r = table.tHead.rows, c = r[row].cells;
for(var i=0; i < c.length; i++) {
var cell = c[i];
if ( cell.colSpan > 1) {
arr = arr.concat(checkCellColSpan(table, headerArr,row++));
} else {
if(table.tHead.length == 1 || (cell.rowSpan > 1 || !r[row+1])) {
arr.push(cell);
}
//headerArr[row] = (i+row);
}
}
return arr;
};
function checkHeaderMetadata(cell) {
if(($.metadata) && ($(cell).metadata().sorter === false)) { return true; };
return false;
}
function checkHeaderOptions(table,i) {
if((table.config.headers[i]) && (table.config.headers[i].sorter === false)) { return true; };
return false;
}
function applyWidget(table) {
var c = table.config.widgets;
var l = c.length;
for(var i=0; i < l; i++) {
getWidgetById(c[i]).format(table);
}
}
function getWidgetById(name) {
var l = widgets.length;
for(var i=0; i < l; i++) {
if(widgets[i].id.toLowerCase() == name.toLowerCase() ) {
return widgets[i];
}
}
};
function formatSortingOrder(v) {
if(typeof(v) != "Number") {
i = (v.toLowerCase() == "desc") ? 1 : 0;
} else {
i = (v == (0 || 1)) ? v : 0;
}
return i;
}
function isValueInArray(v, a) {
var l = a.length;
for(var i=0; i < l; i++) {
if(a[i][0] == v) {
return true;
}
}
return false;
}
function setHeadersCss(table,$headers, list, css) {
// remove all header information
$headers.removeClass(css[0]).removeClass(css[1]);
var h = [];
$headers.each(function(offset) {
if(!this.sortDisabled) {
h[this.column] = $(this);
}
});
var l = list.length;
for(var i=0; i < l; i++) {
h[list[i][0]].addClass(css[list[i][1]]);
}
}
function fixColumnWidth(table,$headers) {
var c = table.config;
if(c.widthFixed) {
var colgroup = $('<colgroup>');
$("tr:first td",table.tBodies[0]).each(function() {
colgroup.append($('<col>').css('width',$(this).width()));
});
$(table).prepend(colgroup);
};
}
function updateHeaderSortCount(table,sortList) {
var c = table.config, l = sortList.length;
for(var i=0; i < l; i++) {
var s = sortList[i], o = c.headerList[s[0]];
o.count = s[1];
o.count++;
}
}
/* sorting methods */
function multisort(table,sortList,cache) {
if(table.config.debug) { var sortTime = new Date(); }
var dynamicExp = "var sortWrapper = function(a,b) {", l = sortList.length;
for(var i=0; i < l; i++) {
var c = sortList[i][0];
var order = sortList[i][1];
var s = (getCachedSortType(table.config.parsers,c) == "text") ? ((order == 0) ? "sortText" : "sortTextDesc") : ((order == 0) ? "sortNumeric" : "sortNumericDesc");
var e = "e" + i;
dynamicExp += "var " + e + " = " + s + "(a[" + c + "],b[" + c + "]); ";
dynamicExp += "if(" + e + ") { return " + e + "; } ";
dynamicExp += "else { ";
}
// if value is the same keep orignal order
var orgOrderCol = cache.normalized[0].length - 1;
dynamicExp += "return a[" + orgOrderCol + "]-b[" + orgOrderCol + "];";
for(var i=0; i < l; i++) {
dynamicExp += "}; ";
}
dynamicExp += "return 0; ";
dynamicExp += "}; ";
eval(dynamicExp);
cache.normalized.sort(sortWrapper);
if(table.config.debug) { benchmark("Sorting on " + sortList.toString() + " and dir " + order+ " time:", sortTime); }
return cache;
};
function sortText(a,b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
};
function sortTextDesc(a,b) {
return ((b < a) ? -1 : ((b > a) ? 1 : 0));
};
function sortNumeric(a,b) {
return a-b;
};
function sortNumericDesc(a,b) {
return b-a;
};
function getCachedSortType(parsers,i) {
return parsers[i].type;
};
/* public methods */
this.construct = function(settings) {
return this.each(function() {
if(!this.tHead || !this.tBodies) return;
var $this, $document,$headers, cache, config, shiftDown = 0, sortOrder;
this.config = {};
config = $.extend(this.config, $.tablesorter.defaults, settings);
// store common expression for speed
$this = $(this);
// build headers
$headers = buildHeaders(this);
// try to auto detect column type, and store in tables config
this.config.parsers = buildParserCache(this,$headers);
// build the cache for the tbody cells
cache = buildCache(this);
// get the css class names, could be done else where.
var sortCSS = [config.cssDesc,config.cssAsc];
// fixate columns if the users supplies the fixedWidth option
fixColumnWidth(this);
// apply event handling to headers
// this is to big, perhaps break it out?
$headers.click(function(e) {
$this.trigger("sortStart");
var totalRows = ($this[0].tBodies[0] && $this[0].tBodies[0].rows.length) || 0;
if(!this.sortDisabled && totalRows > 0) {
// store exp, for speed
var $cell = $(this);
// get current column index
var i = this.column;
// get current column sort order
this.order = this.count++ % 2;
// user only whants to sort on one column
if(!e[config.sortMultiSortKey]) {
// flush the sort list
config.sortList = [];
if(config.sortForce != null) {
var a = config.sortForce;
for(var j=0; j < a.length; j++) {
if(a[j][0] != i) {
config.sortList.push(a[j]);
}
}
}
// add column to sort list
config.sortList.push([i,this.order]);
// multi column sorting
} else {
// the user has clicked on an all ready sortet column.
if(isValueInArray(i,config.sortList)) {
// revers the sorting direction for all tables.
for(var j=0; j < config.sortList.length; j++) {
var s = config.sortList[j], o = config.headerList[s[0]];
if(s[0] == i) {
o.count = s[1];
o.count++;
s[1] = o.count % 2;
}
}
} else {
// add column to sort list array
config.sortList.push([i,this.order]);
}
};
setTimeout(function() {
//set css for headers
setHeadersCss($this[0],$headers,config.sortList,sortCSS);
appendToTable($this[0],multisort($this[0],config.sortList,cache));
},1);
// stop normal event by returning false
return false;
}
// cancel selection
}).mousedown(function() {
if(config.cancelSelection) {
this.onselectstart = function() {return false};
return false;
}
});
// apply easy methods that trigger binded events
$this.bind("update",function() {
// rebuild parsers.
this.config.parsers = buildParserCache(this,$headers);
// rebuild the cache map
cache = buildCache(this);
}).bind("sorton",function(e,list) {
$(this).trigger("sortStart");
config.sortList = list;
// update and store the sortlist
var sortList = config.sortList;
// update header count index
updateHeaderSortCount(this,sortList);
//set css for headers
setHeadersCss(this,$headers,sortList,sortCSS);
// sort the table and append it to the dom
appendToTable(this,multisort(this,sortList,cache));
}).bind("appendCache",function() {
appendToTable(this,cache);
}).bind("applyWidgetId",function(e,id) {
getWidgetById(id).format(this);
}).bind("applyWidgets",function() {
// apply widgets
applyWidget(this);
});
if($.metadata && ($(this).metadata() && $(this).metadata().sortlist)) {
config.sortList = $(this).metadata().sortlist;
}
// if user has supplied a sort list to constructor.
if(config.sortList.length > 0) {
$this.trigger("sorton",[config.sortList]);
}
// apply widgets
applyWidget(this);
});
};
this.addParser = function(parser) {
var l = parsers.length, a = true;
for(var i=0; i < l; i++) {
if(parsers[i].id.toLowerCase() == parser.id.toLowerCase()) {
a = false;
}
}
if(a) { parsers.push(parser); };
};
this.addWidget = function(widget) {
widgets.push(widget);
};
this.formatFloat = function(s) {
var i = parseFloat(s);
return (isNaN(i)) ? 0 : i;
};
this.formatInt = function(s) {
var i = parseInt(s);
return (isNaN(i)) ? 0 : i;
};
this.isDigit = function(s,config) {
var DECIMAL = '\\' + config.decimal;
var exp = '/(^[+]?0(' + DECIMAL +'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)' + DECIMAL +'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*' + DECIMAL +'0+$)/';
return RegExp(exp).test($.trim(s));
};
this.isInt = function(s,config) {
if(isNaN(parseInt(s)))
return false;
else
return true;
};
this.clearTableBody = function(table) {
if($.browser.msie) {
function empty() {
while ( this.firstChild ) this.removeChild( this.firstChild );
}
empty.apply(table.tBodies[0]);
} else {
table.tBodies[0].innerHTML = "";
}
};
}
});
// extend plugin scope
$.fn.extend({
tablesorter: $.tablesorter.construct
});
var ts = $.tablesorter;
// add default parsers
ts.addParser({
id: "text",
is: function(s) {
return true;
},
format: function(s) {
return $.trim(s.toLowerCase());
},
type: "text"
});
ts.addParser({
id: "digit",
is: function(s,table) {
var c = table.config;
return $.tablesorter.isDigit(s,c);
},
format: function(s) {
return $.tablesorter.formatFloat(s);
},
type: "numeric"
});
ts.addParser({
id: "digitmittausenderpunkt",
is: function(s) {
return /^[0-9.,]/.test(s);
},
format: function(s) {
return $.tablesorter.formatFloat(s.replace('.',""));
},
type: "numeric"
});
ts.addParser({
id: "DatummitUhrzeit",
is: function(s) {
return s.match(new RegExp(/^[0-9]{1,2}.[0-9]{1,2}.[0-9]{4} (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]))$/));
},
format: function(s) {
return $.tablesorter.formatFloat(new Date(s).getTime());
},
type: "numeric"
});
ts.addParser({
id: "integer",
is: function(s,table) {
var c = table.config;
return $.tablesorter.isInt(s,c);
},
format: function(s) {
return $.tablesorter.formatInt(s);
},
type: "numeric"
});
ts.addParser({
id: "currency",
is: function(s) {
return /^[£$€?.]/.test(s);
},
format: function(s) {
return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9.]/g),""));
},
type: "numeric"
});
ts.addParser({
id: "ipAddress",
is: function(s) {
return /^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s);
},
format: function(s) {
var a = s.split("."), r = "", l = a.length;
for(var i = 0; i < l; i++) {
var item = a[i];
if(item.length == 2) {
r += "0" + item;
} else {
r += item;
}
}
return $.tablesorter.formatFloat(r);
},
type: "numeric"
});
ts.addParser({
id: "url",
is: function(s) {
return /^(https?|ftp|file):\/\/$/.test(s);
},
format: function(s) {
return jQuery.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//),''));
},
type: "text"
});
ts.addParser({
id: "isoDate",
is: function(s) {
return /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(s);
},
format: function(s) {
return $.tablesorter.formatFloat((s != "") ? new Date(s.replace(new RegExp(/-/g),"/")).getTime() : "0");
},
type: "numeric"
});
ts.addParser({
id: "percent",
is: function(s) {
return /\%$/.test($.trim(s));
},
format: function(s) {
return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g),""));
},
type: "numeric"
});
ts.addParser({
id: "usLongDate",
is: function(s) {
return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/));
},
format: function(s) {
return $.tablesorter.formatFloat(new Date(s).getTime());
},
type: "numeric"
});
ts.addParser({
id: "shortDate",
is: function(s) {
return /\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s);
},
format: function(s,table) {
var c = table.config;
s = s.replace(/\-/g,"/");
if(c.dateFormat == "us") {
// reformat the string in ISO format
s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$1/$2");
} else if(c.dateFormat == "uk") {
//reformat the string in ISO format
s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$2/$1");
} else if(c.dateFormat == "dd/mm/yy" || c.dateFormat == "dd-mm-yy") {
s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/, "$1/$2/$3");
}
return $.tablesorter.formatFloat(new Date(s).getTime());
},
type: "numeric"
});
ts.addParser({
id: "dedate",
is: function(s) {
return /\d{1,2}.\d{1,2}.\d{2,4}/.test(s);
},
format: function(s) {
s = s.replace(/(\d{1,2}).(\d{1,2}).(\d{2,4})/, "$2/$1/$3");
return $.tablesorter.formatFloat(new Date(s).getTime());
},
type: "numeric"
});
ts.addParser({
id: "time",
is: function(s) {
return /^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s);
},
format: function(s) {
return $.tablesorter.formatFloat(new Date("2000/01/01 " + s).getTime());
},
type: "numeric"
});
ts.addParser({
id: "metadata",
is: function(s) {
return false;
},
format: function(s,table,cell) {
var c = table.config, p = (!c.parserMetadataName) ? 'sortValue' : c.parserMetadataName;
return $(cell).metadata()[p];
},
type: "numeric"
});
// add default widgets
ts.addWidget({
id: "zebra",
format: function(table) {
if(table.config.debug) { var time = new Date(); }
$("tr:visible",table.tBodies[0])
.filter(':even')
.removeClass(table.config.widgetZebra.css[1]).addClass(table.config.widgetZebra.css[0])
.end().filter(':odd')
.removeClass(table.config.widgetZebra.css[0]).addClass(table.config.widgetZebra.css[1]);
if(table.config.debug) { $.tablesorter.benchmark("Applying Zebra widget", time); }
}
});
})(jQuery);
-752
View File
@@ -1,752 +0,0 @@
/*!
* TableSorter 2.15.11 min - Client-side table sorting with ease!
* Copyright (c) 2007 Christian Bach
*/
!function(g) {
g.extend({tablesorter: new function() {
function d() {
var a = arguments[0], b = 1 < arguments.length ? Array.prototype.slice.call(arguments) : a;
if ("undefined" !== typeof console && "undefined" !== typeof console.log)
console[/error/i.test(a) ? "error" : /warn/i.test(a) ? "warn" : "log"](b);
else
alert(b)
}
function t(a, b) {
d(a + " (" + ((new Date).getTime() - b.getTime()) + "ms)")
}
function m(a) {
for (var b in a)
return!1;
return!0
}
function q(a, b, c) {
if (!b)
return"";
var h = a.config, e = h.textExtraction, f = "", f = "simple" === e ? h.supportsTextContent ? b.textContent : g(b).text() : "function" === typeof e ? e(b, a, c) : "object" === typeof e && e.hasOwnProperty(c) ? e[c](b, a, c) : h.supportsTextContent ? b.textContent : g(b).text();
return g.trim(f)
}
function s(a) {
var b = a.config, c = b.$tbodies = b.$table.children("tbody:not(." + b.cssInfoBlock + ")"), h, e, w, k, n, g, l, z = "";
if (0 === c.length)
return b.debug ? d("Warning: *Empty table!* Not building a parser cache") : "";
b.debug && (l = new Date, d("Detecting parsers for each column"));
c = c[0].rows;
if (c[0])
for (h = [], e = c[0].cells.length, w = 0; w < e; w++) {
k = b.$headers.filter(":not([colspan])");
k = k.add(b.$headers.filter('[colspan="1"]')).filter('[data-column="' + w + '"]:last');
n = b.headers[w];
g = f.getParserById(f.getData(k, n, "sorter"));
b.empties[w] = f.getData(k, n, "empty") || b.emptyTo || (b.emptyToBottom ? "bottom" : "top");
b.strings[w] = f.getData(k, n, "string") || b.stringTo || "max";
if (!g)
a:{
k = a;
n = c;
g = -1;
for (var m = w, y = void 0, x = f.parsers.length, r = !1, s = "", y = !0; "" === s && y; )
g++, n[g] ? (r = n[g].cells[m], s = q(k, r, m), k.config.debug && d("Checking if value was empty on row " + g + ", column: " + m + ': "' + s + '"')) : y = !1;
for (; 0 <= --x; )
if ((y = f.parsers[x]) && "text" !== y.id && y.is && y.is(s, k, r)) {
g = y;
break a
}
g = f.getParserById("text")
}
b.debug && (z += "column:" + w + "; parser:" + g.id + "; string:" + b.strings[w] + "; empty: " + b.empties[w] + "\n");
h.push(g)
}
b.debug && (d(z), t("Completed detecting parsers", l));
b.parsers = h
}
function v(a) {
var b = a.tBodies, c = a.config, h, e, w = c.parsers, k, n, p, l, z, m, y, x = [];
c.cache = {};
if (!w)
return c.debug ? d("Warning: *Empty table!* Not building a cache") : "";
c.debug && (y = new Date);
c.showProcessing && f.isProcessing(a, !0);
for (l = 0; l < b.length; l++)
if (c.cache[l] = {row: [], normalized: []}, !g(b[l]).hasClass(c.cssInfoBlock)) {
h = b[l] && b[l].rows.length || 0;
e = b[l].rows[0] && b[l].rows[0].cells.length || 0;
for (n = 0; n < h; ++n)
if (z = g(b[l].rows[n]), m = [], z.hasClass(c.cssChildRow))
c.cache[l].row[c.cache[l].row.length - 1] = c.cache[l].row[c.cache[l].row.length - 1].add(z);
else {
c.cache[l].row.push(z);
for (p = 0; p < e; ++p)
"undefined" === typeof w[p] ? c.debug && d("No parser found for cell:", z[0].cells[p], "does it have a header?") : (k = q(a, z[0].cells[p], p), k = w[p].format(k, a, z[0].cells[p], p), m.push(k), "numeric" === (w[p].type || "").toLowerCase() && (x[p] = Math.max(Math.abs(k) || 0, x[p] || 0)));
m.push(c.cache[l].normalized.length);
c.cache[l].normalized.push(m)
}
c.cache[l].colMax = x
}
c.showProcessing && f.isProcessing(a);
c.debug && t("Building cache for " + h + " rows", y)
}
function A(a, b) {
var c = a.config, h = c.widgetOptions, e = a.tBodies, w = [], k = c.cache, d, p, l, z, q, y, x, r, s, u, v;
if (m(k))
return c.appender ? c.appender(a, w) : a.isUpdating ? c.$table.trigger("updateComplete", a) : "";
c.debug && (v = new Date);
for (r = 0; r < e.length; r++)
if (d = g(e[r]), d.length && !d.hasClass(c.cssInfoBlock)) {
q = f.processTbody(a, d, !0);
d = k[r].row;
p = k[r].normalized;
z = (l = p.length) ? p[0].length - 1 : 0;
for (y = 0; y < l; y++)
if (u = p[y][z], w.push(d[u]), !c.appender || c.pager && !(c.pager.removeRows && h.pager_removeRows || c.pager.ajax))
for (s = d[u].length, x = 0; x < s; x++)
q.append(d[u][x]);
f.processTbody(a, q, !1)
}
c.appender && c.appender(a, w);
c.debug && t("Rebuilt table", v);
b || c.appender || f.applyWidget(a);
a.isUpdating && c.$table.trigger("updateComplete", a)
}
function D(a) {
var b = [], c = {}, h = 0, e = g(a).children("thead, tfoot").children("tr"), f, d, n, p, l, m, t, q, s, r;
for (f = 0; f < e.length; f++)
for (l = e[f].cells, d = 0; d < l.length; d++) {
p = l[d];
m = p.parentNode.rowIndex;
t = m + "-" + p.cellIndex;
q = p.rowSpan || 1;
s = p.colSpan || 1;
"undefined" === typeof b[m] && (b[m] = []);
for (n = 0; n < b[m].length + 1; n++)
if ("undefined" === typeof b[m][n]) {
r = n;
break
}
c[t] = r;
h = Math.max(r, h);
g(p).attr({"data-column": r});
for (n = m; n < m + q; n++)
for ("undefined" === typeof b[n] && (b[n] = []), t = b[n], p = r; p < r + s; p++)
t[p] = "x"
}
a.config.columns = h + 1;
return c
}
function C(a) {
return/^d/i.test(a) || 1 === a
}
function E(a) {
var b = D(a), c, h, e, w, k, n, p, l = a.config;
l.headerList = [];
l.headerContent = [];
l.debug && (p = new Date);
w = l.cssIcon ? '<i class="' + (l.cssIcon === f.css.icon ? f.css.icon : l.cssIcon + " " + f.css.icon) + '"></i>' : "";
l.$headers = g(a).find(l.selectorHeaders).each(function(a) {
h = g(this);
c = l.headers[a];
l.headerContent[a] = g(this).html();
k = l.headerTemplate.replace(/\{content\}/g, g(this).html()).replace(/\{icon\}/g, w);
l.onRenderTemplate && (e = l.onRenderTemplate.apply(h, [a, k])) && "string" === typeof e && (k = e);
g(this).html('<div class="' + f.css.headerIn + '">' + k + "</div>");
l.onRenderHeader && l.onRenderHeader.apply(h, [a]);
this.column = b[this.parentNode.rowIndex + "-" + this.cellIndex];
this.order = C(f.getData(h, c, "sortInitialOrder") || l.sortInitialOrder) ? [1, 0, 2] : [0, 1, 2];
this.count = -1;
this.lockedOrder = !1;
n = f.getData(h, c, "lockedOrder") || !1;
"undefined" !== typeof n && !1 !== n && (this.order = this.lockedOrder = C(n) ? [1, 1, 1] : [0, 0, 0]);
h.addClass(f.css.header + " " + l.cssHeader);
l.headerList[a] = this;
h.parent().addClass(f.css.headerRow + " " + l.cssHeaderRow).attr("role", "row");
l.tabIndex && h.attr("tabindex", 0)
}).attr({scope: "col", role: "columnheader"});
G(a);
l.debug && (t("Built headers:", p), d(l.$headers))
}
function B(a, b, c) {
var h = a.config;
h.$table.find(h.selectorRemove).remove();
s(a);
v(a);
H(h.$table, b, c)
}
function G(a) {
var b, c, h = a.config;
h.$headers.each(function(e, d) {
c = g(d);
b = "false" === f.getData(d, h.headers[e], "sorter");
d.sortDisabled = b;
c[b ? "addClass" : "removeClass"]("sorter-false").attr("aria-disabled", "" + b);
a.id && (b ? c.removeAttr("aria-controls") : c.attr("aria-controls", a.id))
})
}
function F(a) {
var b, c, h, e = a.config, d = e.sortList, k = f.css.sortNone + " " + e.cssNone, n = [f.css.sortAsc + " " + e.cssAsc, f.css.sortDesc + " " + e.cssDesc], p = ["ascending", "descending"], l = g(a).find("tfoot tr").children().removeClass(n.join(" "));
e.$headers.removeClass(n.join(" ")).addClass(k).attr("aria-sort", "none");
h = d.length;
for (b = 0; b < h; b++)
if (2 !== d[b][1] && (a = e.$headers.not(".sorter-false").filter('[data-column="' + d[b][0] + '"]' + (1 === h ? ":last" : "")), a.length))
for (c = 0; c < a.length; c++)
a[c].sortDisabled || (a.eq(c).removeClass(k).addClass(n[d[b][1]]).attr("aria-sort", p[d[b][1]]), l.length && l.filter('[data-column="' + d[b][0] + '"]').eq(c).addClass(n[d[b][1]]));
e.$headers.not(".sorter-false").each(function() {
var a = g(this), b = this.order[(this.count + 1) % (e.sortReset ? 3 : 2)], b = a.text() + ": " + f.language[a.hasClass(f.css.sortAsc) ? "sortAsc" : a.hasClass(f.css.sortDesc) ? "sortDesc" : "sortNone"] + f.language[0 === b ? "nextAsc" : 1 === b ? "nextDesc" : "nextNone"];
a.attr("aria-label", b)
})
}
function L(a) {
if (a.config.widthFixed && 0 === g(a).find("colgroup").length) {
var b = g("<colgroup>"), c = g(a).width();
g(a.tBodies[0]).find("tr:first").children("td:visible").each(function() {
b.append(g("<col>").css("width", parseInt(g(this).width() / c * 1E3, 10) / 10 + "%"))
});
g(a).prepend(b)
}
}
function M(a, b) {
var c, h, e, d = a.config, f = b || d.sortList;
d.sortList = [];
g.each(f, function(a, b) {
c = [parseInt(b[0], 10), parseInt(b[1], 10)];
if (e = d.$headers[c[0]])
d.sortList.push(c), h = g.inArray(c[1], e.order), e.count = 0 <= h ? h : c[1] % (d.sortReset ? 3 : 2)
})
}
function N(a, b) {
return a && a[b] ? a[b].type || "" : ""
}
function O(a, b, c) {
var h, e, d, k = a.config, n = !c[k.sortMultiSortKey], p = k.$table;
p.trigger("sortStart", a);
b.count = c[k.sortResetKey] ? 2 : (b.count + 1) % (k.sortReset ? 3 : 2);
k.sortRestart && (e = b, k.$headers.each(function() {
this === e || !n && g(this).is("." + f.css.sortDesc + ",." + f.css.sortAsc) || (this.count = -1)
}));
e = b.column;
if (n) {
k.sortList = [];
if (null !== k.sortForce)
for (h = k.sortForce, c = 0; c < h.length; c++)
h[c][0] !== e && k.sortList.push(h[c]);
h = b.order[b.count];
if (2 > h && (k.sortList.push([e, h]), 1 < b.colSpan))
for (c = 1; c < b.colSpan; c++)
k.sortList.push([e + c, h])
} else {
if (k.sortAppend && 1 < k.sortList.length)
for (c = 0; c < k.sortAppend.length; c++)
d = f.isValueInArray(k.sortAppend[c][0], k.sortList), 0 <= d && k.sortList.splice(d, 1);
if (0 <= f.isValueInArray(e, k.sortList))
for (c = 0; c < k.sortList.length; c++)
d = k.sortList[c], h = k.$headers[d[0]], d[0] === e && (d[1] = h.order[b.count], 2 === d[1] && (k.sortList.splice(c, 1), h.count = -1));
else if (h = b.order[b.count], 2 > h && (k.sortList.push([e, h]), 1 < b.colSpan))
for (c = 1; c < b.colSpan; c++)
k.sortList.push([e + c, h])
}
if (null !== k.sortAppend)
for (h = k.sortAppend, c = 0; c < h.length; c++)
h[c][0] !== e && k.sortList.push(h[c]);
p.trigger("sortBegin", a);
setTimeout(function() {
F(a);
I(a);
A(a);
p.trigger("sortEnd", a)
}, 1)
}
function I(a) {
var b, c, h, e, d, k, g, p, l, q, s, u, x = 0, r = a.config, v = r.textSorter || "", A = r.sortList, B = A.length, C = a.tBodies.length;
if (!r.serverSideSorting && !m(r.cache)) {
r.debug && (l = new Date);
for (c = 0; c < C; c++)
d = r.cache[c].colMax, p = (k = r.cache[c].normalized) && k[0] ? k[0].length - 1 : 0, k.sort(function(c, k) {
for (b = 0; b < B; b++) {
e = A[b][0];
g = A[b][1];
x = 0 === g;
if (r.sortStable && c[e] === k[e] && 1 === B)
break;
(h = /n/i.test(N(r.parsers, e))) && r.strings[e] ? (h = "boolean" === typeof r.string[r.strings[e]] ? (x ? 1 : -1) * (r.string[r.strings[e]] ? -1 : 1) : r.strings[e] ? r.string[r.strings[e]] || 0 : 0, q = r.numberSorter ? r.numberSorter(c[e], k[e], x, d[e], a) : f["sortNumeric" + (x ? "Asc" : "Desc")](c[e], k[e], h, d[e], e, a)) : (s = x ? c : k, u = x ? k : c, q = "function" === typeof v ? v(s[e], u[e], x, e, a) : "object" === typeof v && v.hasOwnProperty(e) ? v[e](s[e], u[e], x, e, a) : f["sortNatural" + (x ? "Asc" : "Desc")](c[e], k[e], e, a, r));
if (q)
return q
}
return c[p] - k[p]
});
r.debug && t("Sorting on " + A.toString() + " and dir " + g + " time", l)
}
}
function J(a, b) {
a[0].isUpdating && a.trigger("updateComplete");
"function" === typeof b && b(a[0])
}
function H(a, b, c) {
var h = a[0].config.sortList;
!1 !== b && !a[0].isProcessing && h.length ? a.trigger("sorton", [h, function() {
J(a, c)
}, !0]) : J(a, c)
}
function K(a) {
var b = a.config, c = b.$table;
c.unbind("sortReset update updateRows updateCell updateAll addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(b.namespace + " ")).bind("sortReset" + b.namespace, function(c) {
c.stopPropagation();
b.sortList = [];
F(a);
I(a);
A(a)
}).bind("updateAll" + b.namespace, function(c, e, d) {
c.stopPropagation();
a.isUpdating = !0;
f.refreshWidgets(a, !0, !0);
f.restoreHeaders(a);
E(a);
f.bindEvents(a, b.$headers);
K(a);
B(a, e, d)
}).bind("update" + b.namespace + " updateRows" + b.namespace, function(b, c, d) {
b.stopPropagation();
a.isUpdating = !0;
G(a);
B(a, c, d)
}).bind("updateCell" + b.namespace, function(h, e, d, f) {
h.stopPropagation();
a.isUpdating = !0;
c.find(b.selectorRemove).remove();
var n, p, l;
n = c.find("tbody");
h = n.index(g(e).parents("tbody").filter(":first"));
var m = g(e).parents("tr").filter(":first");
e = g(e)[0];
n.length && 0 <= h && (p = n.eq(h).find("tr").index(m), l = e.cellIndex, n = b.cache[h].normalized[p].length - 1, b.cache[h].row[a.config.cache[h].normalized[p][n]] = m, b.cache[h].normalized[p][l] = b.parsers[l].format(q(a, e, l), a, e, l), H(c, d, f))
}).bind("addRows" + b.namespace, function(h, e, d, f) {
h.stopPropagation();
a.isUpdating = !0;
if (m(b.cache))
G(a), B(a, d, f);
else {
var g, p = e.filter("tr").length, l = [], t = e[0].cells.length, v = c.find("tbody").index(e.parents("tbody").filter(":first"));
b.parsers || s(a);
for (h = 0; h < p; h++) {
for (g = 0; g < t; g++)
l[g] = b.parsers[g].format(q(a, e[h].cells[g], g), a, e[h].cells[g], g);
l.push(b.cache[v].row.length);
b.cache[v].row.push([e[h]]);
b.cache[v].normalized.push(l);
l = []
}
H(c, d, f)
}
}).bind("updateComplete" + b.namespace, function() {
a.isUpdating = !1
}).bind("sorton" + b.namespace, function(b, e, d, f) {
var g = a.config;
b.stopPropagation();
c.trigger("sortStart", this);
M(a, e);
F(a);
g.delayInit && m(g.cache) && v(a);
c.trigger("sortBegin", this);
I(a);
A(a, f);
c.trigger("sortEnd", this);
"function" === typeof d && d(a)
}).bind("appendCache" + b.namespace, function(b, c, d) {
b.stopPropagation();
A(a, d);
"function" === typeof c && c(a)
}).bind("updateCache" + b.namespace, function(c, e) {
b.parsers || s(a);
v(a);
"function" === typeof e && e(a)
}).bind("applyWidgetId" + b.namespace, function(c, e) {
c.stopPropagation();
f.getWidgetById(e).format(a, b, b.widgetOptions)
}).bind("applyWidgets" + b.namespace, function(b, c) {
b.stopPropagation();
f.applyWidget(a, c)
}).bind("refreshWidgets" + b.namespace, function(b, c, d) {
b.stopPropagation();
f.refreshWidgets(a, c, d)
}).bind("destroy" + b.namespace, function(b, c, d) {
b.stopPropagation();
f.destroy(a, c, d)
})
}
var f = this;
f.version = "2.15.11";
f.parsers = [];
f.widgets = [];
f.defaults = {theme: "default", widthFixed: !1, showProcessing: !1, headerTemplate: "{content}", onRenderTemplate: null, onRenderHeader: null, cancelSelection: !0, tabIndex: !0, dateFormat: "mmddyyyy", sortMultiSortKey: "shiftKey", sortResetKey: "ctrlKey", usNumberFormat: !0, delayInit: !1, serverSideSorting: !1, headers: {}, ignoreCase: !0, sortForce: null, sortList: [], sortAppend: null, sortStable: !1, sortInitialOrder: "asc", sortLocaleCompare: !1, sortReset: !1, sortRestart: !1, emptyTo: "bottom", stringTo: "max", textExtraction: "simple", textSorter: null, numberSorter: null, widgets: [], widgetOptions: {zebra: ["even", "odd"]}, initWidgets: !0, initialized: null, tableClass: "", cssAsc: "", cssDesc: "", cssNone: "", cssHeader: "", cssHeaderRow: "", cssProcessing: "", cssChildRow: "tablesorter-childRow", cssIcon: "tablesorter-icon", cssInfoBlock: "tablesorter-infoOnly", selectorHeaders: "> thead th, > thead td", selectorSort: "th, td", selectorRemove: ".remove-me", debug: !1, headerList: [], empties: {}, strings: {}, parsers: []};
f.css = {table: "tablesorter", childRow: "tablesorter-childRow", header: "tablesorter-header", headerRow: "tablesorter-headerRow", headerIn: "tablesorter-header-inner", icon: "tablesorter-icon", info: "tablesorter-infoOnly", processing: "tablesorter-processing", sortAsc: "tablesorter-headerAsc", sortDesc: "tablesorter-headerDesc", sortNone: "tablesorter-headerUnSorted"};
f.language = {sortAsc: "Ascending sort applied, ", sortDesc: "Descending sort applied, ", sortNone: "No sort applied, ", nextAsc: "activate to apply an ascending sort", nextDesc: "activate to apply a descending sort", nextNone: "activate to remove the sort"};
f.log = d;
f.benchmark = t;
f.construct = function(a) {
return this.each(function() {
var b = g.extend(!0, {}, f.defaults, a);
!this.hasInitialized && f.buildTable && "TABLE" !== this.tagName ? f.buildTable(this, b) : f.setup(this, b)
})
};
f.setup = function(a, b) {
if (!a || !a.tHead || 0 === a.tBodies.length || !0 === a.hasInitialized)
return b.debug ? d("ERROR: stopping initialization! No table, thead, tbody or tablesorter has already been initialized") : "";
var c = "", h = g(a), e = g.metadata;
a.hasInitialized = !1;
a.isProcessing = !0;
a.config = b;
g.data(a, "tablesorter", b);
b.debug && g.data(a, "startoveralltimer", new Date);
b.supportsTextContent = "x" === g("<span>x</span>")[0].textContent;
b.supportsDataObject = function(a) {
a[0] = parseInt(a[0], 10);
return 1 < a[0] || 1 === a[0] && 4 <= parseInt(a[1], 10)
}(g.fn.jquery.split("."));
b.string = {max: 1, min: -1, "max+": 1, "max-": -1, zero: 0, none: 0, "null": 0, top: !0, bottom: !1};
/tablesorter\-/.test(h.attr("class")) || (c = "" !== b.theme ? " tablesorter-" + b.theme : "");
b.$table = h.addClass(f.css.table + " " + b.tableClass + c).attr({role: "grid"});
b.namespace = b.namespace ? "." + b.namespace.replace(/\W/g, "") : ".tablesorter" + Math.random().toString(16).slice(2);
b.$tbodies = h.children("tbody:not(." + b.cssInfoBlock + ")").attr({"aria-live": "polite", "aria-relevant": "all"});
b.$table.find("caption").length && b.$table.attr("aria-labelledby", "theCaption");
b.widgetInit = {};
E(a);
L(a);
s(a);
b.delayInit || v(a);
f.bindEvents(a, b.$headers);
K(a);
b.supportsDataObject && "undefined" !== typeof h.data().sortlist ? b.sortList = h.data().sortlist : e && h.metadata() && h.metadata().sortlist && (b.sortList = h.metadata().sortlist);
f.applyWidget(a, !0);
0 < b.sortList.length ? h.trigger("sorton", [b.sortList, {}, !b.initWidgets, !0]) : (F(a), b.initWidgets && f.applyWidget(a));
b.showProcessing && h.unbind("sortBegin" + b.namespace + " sortEnd" + b.namespace).bind("sortBegin" + b.namespace + " sortEnd" + b.namespace, function(b) {
f.isProcessing(a, "sortBegin" === b.type)
});
a.hasInitialized = !0;
a.isProcessing = !1;
b.debug && f.benchmark("Overall initialization time", g.data(a, "startoveralltimer"));
h.trigger("tablesorter-initialized", a);
"function" === typeof b.initialized && b.initialized(a)
};
f.isProcessing = function(a, b, c) {
a = g(a);
var h = a[0].config;
a = c || a.find("." + f.css.header);
b ? ("undefined" !== typeof c && 0 < h.sortList.length && (a = a.filter(function() {
return this.sortDisabled ? !1 : 0 <= f.isValueInArray(parseFloat(g(this).attr("data-column")), h.sortList)
})), a.addClass(f.css.processing + " " + h.cssProcessing)) : a.removeClass(f.css.processing + " " + h.cssProcessing)
};
f.processTbody = function(a, b, c) {
a = g(a)[0];
if (c)
return a.isProcessing = !0, b.before('<span class="tablesorter-savemyplace"/>'), c = g.fn.detach ? b.detach() : b.remove();
c = g(a).find("span.tablesorter-savemyplace");
b.insertAfter(c);
c.remove();
a.isProcessing = !1
};
f.clearTableBody = function(a) {
g(a)[0].config.$tbodies.empty()
};
f.bindEvents = function(a, b) {
a = g(a)[0];
var c, h = a.config;
b.find(h.selectorSort).add(b.filter(h.selectorSort)).unbind(["mousedown", "mouseup", "sort", "keyup", ""].join(h.namespace + " ")).bind(["mousedown", "mouseup", "sort", "keyup", ""].join(h.namespace + " "), function(e, d) {
var f;
f = e.type;
if (!(1 !== (e.which || e.button) && !/sort|keyup/.test(f) || "keyup" === f && 13 !== e.which || "mouseup" === f && !0 !== d && 250 < (new Date).getTime() - c)) {
if ("mousedown" === f)
return c = (new Date).getTime(), "INPUT" === e.target.tagName ? "" : !h.cancelSelection;
h.delayInit && m(h.cache) && v(a);
f = /TH|TD/.test(this.tagName) ? this : g(this).parents("th, td")[0];
f = h.$headers[b.index(f)];
f.sortDisabled || O(a, f, e)
}
});
h.cancelSelection && b.attr("unselectable", "on").bind("selectstart", !1).css({"user-select": "none", MozUserSelect: "none"})
};
f.restoreHeaders = function(a) {
var b = g(a)[0].config;
b.$table.find(b.selectorHeaders).each(function(a) {
g(this).find("." + f.css.headerIn).length && g(this).html(b.headerContent[a])
})
};
f.destroy = function(a, b, c) {
a = g(a)[0];
if (a.hasInitialized) {
f.refreshWidgets(a, !0, !0);
var h = g(a), e = a.config, d = h.find("thead:first"), k = d.find("tr." + f.css.headerRow).removeClass(f.css.headerRow + " " + e.cssHeaderRow), n = h.find("tfoot:first > tr").children("th, td");
d.find("tr").not(k).remove();
h.removeData("tablesorter").unbind("sortReset update updateAll updateRows updateCell addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave keypress sortBegin sortEnd ".split(" ").join(e.namespace + " "));
e.$headers.add(n).removeClass([f.css.header, e.cssHeader, e.cssAsc, e.cssDesc, f.css.sortAsc, f.css.sortDesc, f.css.sortNone].join(" ")).removeAttr("data-column");
k.find(e.selectorSort).unbind(["mousedown", "mouseup", "keypress", ""].join(e.namespace + " "));
f.restoreHeaders(a);
!1 !== b && h.removeClass(f.css.table + " " + e.tableClass + " tablesorter-" + e.theme);
a.hasInitialized = !1;
"function" === typeof c && c(a)
}
};
f.regex = {chunk: /(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi, chunks: /(^\\0|\\0$)/, hex: /^0x[0-9a-f]+$/i};
f.sortNatural = function(a, b) {
if (a === b)
return 0;
var c, d, e, g, k, n;
d = f.regex;
if (d.hex.test(b)) {
c = parseInt(a.match(d.hex), 16);
e = parseInt(b.match(d.hex), 16);
if (c < e)
return-1;
if (c > e)
return 1
}
c = a.replace(d.chunk, "\\0$1\\0").replace(d.chunks, "").split("\\0");
d = b.replace(d.chunk, "\\0$1\\0").replace(d.chunks, "").split("\\0");
n = Math.max(c.length, d.length);
for (k = 0; k < n; k++) {
e = isNaN(c[k]) ? c[k] || 0 : parseFloat(c[k]) || 0;
g = isNaN(d[k]) ? d[k] || 0 : parseFloat(d[k]) || 0;
if (isNaN(e) !== isNaN(g))
return isNaN(e) ? 1 : -1;
typeof e !== typeof g && (e += "", g += "");
if (e < g)
return-1;
if (e > g)
return 1
}
return 0
};
f.sortNaturalAsc = function(a, b, c, d, e) {
if (a === b)
return 0;
c = e.string[e.empties[c] || e.emptyTo];
return"" === a && 0 !== c ? "boolean" === typeof c ? c ? -1 : 1 : -c || -1 : "" === b && 0 !== c ? "boolean" === typeof c ? c ? 1 : -1 : c || 1 : f.sortNatural(a, b)
};
f.sortNaturalDesc = function(a, b, c, d, e) {
if (a === b)
return 0;
c = e.string[e.empties[c] || e.emptyTo];
return"" === a && 0 !== c ? "boolean" === typeof c ? c ? -1 : 1 : c || 1 : "" === b && 0 !== c ? "boolean" === typeof c ? c ? 1 : -1 : -c || -1 : f.sortNatural(b, a)
};
f.sortText = function(a, b) {
return a > b ? 1 : a < b ? -1 : 0
};
f.getTextValue = function(a, b, c) {
if (c) {
var d = a ? a.length : 0, e = c + b;
for (c = 0; c < d; c++)
e += a.charCodeAt(c);
return b * e
}
return 0
};
f.sortNumericAsc = function(a, b, c, d, e, g) {
if (a === b)
return 0;
g = g.config;
e = g.string[g.empties[e] || g.emptyTo];
if ("" === a && 0 !== e)
return"boolean" === typeof e ? e ? -1 : 1 : -e || -1;
if ("" === b && 0 !== e)
return"boolean" === typeof e ? e ? 1 : -1 : e || 1;
isNaN(a) && (a = f.getTextValue(a, c, d));
isNaN(b) && (b = f.getTextValue(b, c, d));
return a - b
};
f.sortNumericDesc = function(a, b, c, d, e, g) {
if (a === b)
return 0;
g = g.config;
e = g.string[g.empties[e] || g.emptyTo];
if ("" === a && 0 !== e)
return"boolean" === typeof e ? e ? -1 : 1 : e || 1;
if ("" === b && 0 !== e)
return"boolean" === typeof e ? e ? 1 : -1 : -e || -1;
isNaN(a) && (a = f.getTextValue(a, c, d));
isNaN(b) && (b = f.getTextValue(b, c, d));
return b - a
};
f.sortNumeric = function(a, b) {
return a - b
};
f.characterEquivalents = {a: "\u00e1\u00e0\u00e2\u00e3\u00e4\u0105\u00e5", A: "\u00c1\u00c0\u00c2\u00c3\u00c4\u0104\u00c5", c: "\u00e7\u0107\u010d", C: "\u00c7\u0106\u010c", e: "\u00e9\u00e8\u00ea\u00eb\u011b\u0119", E: "\u00c9\u00c8\u00ca\u00cb\u011a\u0118", i: "\u00ed\u00ec\u0130\u00ee\u00ef\u0131", I: "\u00cd\u00cc\u0130\u00ce\u00cf", o: "\u00f3\u00f2\u00f4\u00f5\u00f6", O: "\u00d3\u00d2\u00d4\u00d5\u00d6", ss: "\u00df", SS: "\u1e9e", u: "\u00fa\u00f9\u00fb\u00fc\u016f", U: "\u00da\u00d9\u00db\u00dc\u016e"};
f.replaceAccents = function(a) {
var b, c = "[", d = f.characterEquivalents;
if (!f.characterRegex) {
f.characterRegexArray = {};
for (b in d)
"string" === typeof b && (c += d[b], f.characterRegexArray[b] = RegExp("[" + d[b] + "]", "g"));
f.characterRegex = RegExp(c + "]")
}
if (f.characterRegex.test(a))
for (b in d)
"string" === typeof b && (a = a.replace(f.characterRegexArray[b], b));
return a
};
f.isValueInArray = function(a, b) {
var c, d = b.length;
for (c = 0; c < d; c++)
if (b[c][0] === a)
return c;
return-1
};
f.addParser = function(a) {
var b, c = f.parsers.length, d = !0;
for (b = 0; b < c; b++)
f.parsers[b].id.toLowerCase() === a.id.toLowerCase() && (d = !1);
d && f.parsers.push(a)
};
f.getParserById = function(a) {
var b, c = f.parsers.length;
for (b = 0; b < c; b++)
if (f.parsers[b].id.toLowerCase() === a.toString().toLowerCase())
return f.parsers[b];
return!1
};
f.addWidget = function(a) {
f.widgets.push(a)
};
f.getWidgetById = function(a) {
var b, c, d = f.widgets.length;
for (b = 0; b < d; b++)
if ((c = f.widgets[b]) && c.hasOwnProperty("id") && c.id.toLowerCase() === a.toLowerCase())
return c
};
f.applyWidget = function(a, b) {
a = g(a)[0];
var c = a.config, d = c.widgetOptions, e = [], m, k, n;
c.debug && (m = new Date);
c.widgets.length && (c.widgets = g.grep(c.widgets, function(a, b) {
return g.inArray(a, c.widgets) === b
}), g.each(c.widgets || [], function(a, b) {
(n = f.getWidgetById(b)) && n.id && (n.priority || (n.priority = 10), e[a] = n)
}), e.sort(function(a, b) {
return a.priority < b.priority ? -1 : a.priority === b.priority ? 0 : 1
}), g.each(e, function(e, f) {
if (f) {
if (b || !c.widgetInit[f.id])
f.hasOwnProperty("options") && (d = a.config.widgetOptions = g.extend(!0, {}, f.options, d)), f.hasOwnProperty("init") && f.init(a, f, c, d), c.widgetInit[f.id] = !0;
!b && f.hasOwnProperty("format") && f.format(a, c, d, !1)
}
}));
c.debug && (k = c.widgets.length, t("Completed " + (!0 === b ? "initializing " : "applying ") + k + " widget" + (1 !== k ? "s" : ""), m))
};
f.refreshWidgets = function(a, b, c) {
a = g(a)[0];
var h, e = a.config, m = e.widgets, k = f.widgets, n = k.length;
for (h = 0; h < n; h++)
k[h] && k[h].id && (b || 0 > g.inArray(k[h].id, m)) && (e.debug && d('Refeshing widgets: Removing "' + k[h].id + '"'), k[h].hasOwnProperty("remove") && e.widgetInit[k[h].id] && (k[h].remove(a, e, e.widgetOptions), e.widgetInit[k[h].id] = !1));
!0 !== c && f.applyWidget(a, b)
};
f.getData = function(a, b, c) {
var d = "";
a = g(a);
var e, f;
if (!a.length)
return"";
e = g.metadata ? a.metadata() : !1;
f = " " + (a.attr("class") || "");
"undefined" !== typeof a.data(c) || "undefined" !== typeof a.data(c.toLowerCase()) ? d += a.data(c) || a.data(c.toLowerCase()) : e && "undefined" !== typeof e[c] ? d += e[c] : b && "undefined" !== typeof b[c] ? d += b[c] : " " !== f && f.match(" " + c + "-") && (d = f.match(RegExp("\\s" + c + "-([\\w-]+)"))[1] || "");
return g.trim(d)
};
f.formatFloat = function(a, b) {
if ("string" !== typeof a || "" === a)
return a;
var c;
a = (b && b.config ? !1 !== b.config.usNumberFormat : "undefined" !== typeof b ? b : 1) ? a.replace(/,/g, "") : a.replace(/[\s|\.]/g, "").replace(/,/g, ".");
/^\s*\([.\d]+\)/.test(a) && (a = a.replace(/^\s*\(([.\d]+)\)/, "-$1"));
c = parseFloat(a);
return isNaN(c) ? g.trim(a) : c
};
f.isDigit = function(a) {
return isNaN(a) ? /^[\-+(]?\d+[)]?$/.test(a.toString().replace(/[,.'"\s]/g, "")) : !0
}
}});
var q = g.tablesorter;
g.fn.extend({tablesorter: q.construct});
q.addParser({id: "text", is: function() {
return!0
}, format: function(d, t) {
var m = t.config;
d && (d = g.trim(m.ignoreCase ? d.toLocaleLowerCase() : d), d = m.sortLocaleCompare ? q.replaceAccents(d) : d);
return d
}, type: "text"});
q.addParser({id: "digit", is: function(d) {
return q.isDigit(d)
}, format: function(d, t) {
var m = q.formatFloat((d || "").replace(/[^\w,. \-()]/g, ""), t);
return d && "number" === typeof m ? m : d ? g.trim(d && t.config.ignoreCase ? d.toLocaleLowerCase() : d) : d
}, type: "numeric"});
q.addParser({id: "currency", is: function(d) {
return/^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/.test((d || "").replace(/[+\-,. ]/g, ""))
}, format: function(d, t) {
var m = q.formatFloat((d || "").replace(/[^\w,. \-()]/g, ""), t);
return d && "number" === typeof m ? m : d ? g.trim(d && t.config.ignoreCase ? d.toLocaleLowerCase() : d) : d
}, type: "numeric"});
q.addParser({id: "ipAddress", is: function(d) {
return/^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$/.test(d)
}, format: function(d, g) {
var m, u = d ? d.split(".") : "", s = "", v = u.length;
for (m = 0; m < v; m++)
s += ("00" + u[m]).slice(-3);
return d ? q.formatFloat(s, g) : d
}, type: "numeric"});
q.addParser({id: "url", is: function(d) {
return/^(https?|ftp|file):\/\//.test(d)
}, format: function(d) {
return d ? g.trim(d.replace(/(https?|ftp|file):\/\//, "")) : d
}, type: "text"});
q.addParser({id: "isoDate", is: function(d) {
return/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/.test(d)
}, format: function(d, g) {
return d ? q.formatFloat("" !== d ? (new Date(d.replace(/-/g, "/"))).getTime() || d : "", g) : d
}, type: "numeric"});
q.addParser({id: "percent", is: function(d) {
return/(\d\s*?%|%\s*?\d)/.test(d) && 15 > d.length
}, format: function(d, g) {
return d ? q.formatFloat(d.replace(/%/g, ""), g) : d
}, type: "numeric"});
q.addParser({id: "usLongDate", is: function(d) {
return/^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i.test(d) || /^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i.test(d)
}, format: function(d, g) {
return d ? q.formatFloat((new Date(d.replace(/(\S)([AP]M)$/i, "$1 $2"))).getTime() || d, g) : d
}, type: "numeric"});
q.addParser({id: "shortDate", is: function(d) {
return/(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})|(^\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2})/.test((d || "").replace(/\s+/g, " ").replace(/[\-.,]/g, "/"))
}, format: function(d, g, m, u) {
if (d) {
m = g.config;
var s = m.$headers.filter("[data-column=" + u + "]:last");
u = s.length && s[0].dateFormat || q.getData(s, m.headers[u], "dateFormat") || m.dateFormat;
d = d.replace(/\s+/g, " ").replace(/[\-.,]/g, "/");
"mmddyyyy" === u ? d = d.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/, "$3/$1/$2") : "ddmmyyyy" === u ? d = d.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/, "$3/$2/$1") : "yyyymmdd" === u && (d = d.replace(/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/, "$1/$2/$3"))
}
return d ? q.formatFloat((new Date(d)).getTime() || d, g) : d
}, type: "numeric"});
q.addParser({id: "time", is: function(d) {
return/^(([0-2]?\d:[0-5]\d)|([0-1]?\d:[0-5]\d\s?([AP]M)))$/i.test(d)
}, format: function(d, g) {
return d ? q.formatFloat((new Date("2000/01/01 " + d.replace(/(\S)([AP]M)$/i, "$1 $2"))).getTime() || d, g) : d
}, type: "numeric"});
q.addParser({id: "metadata", is: function() {
return!1
}, format: function(d, q, m) {
d = q.config;
d = d.parserMetadataName ? d.parserMetadataName : "sortValue";
return g(m).metadata()[d]
}, type: "numeric"});
q.addWidget({id: "zebra", priority: 90, format: function(d, t, m) {
var u, s, v, A, D, C, E = RegExp(t.cssChildRow, "i"), B = t.$tbodies;
t.debug && (D = new Date);
for (d = 0; d < B.length; d++)
u = B.eq(d), C = u.children("tr").length, 1 < C && (v = 0, u = u.children("tr:visible").not(t.selectorRemove), u.each(function() {
s = g(this);
E.test(this.className) || v++;
A = 0 === v % 2;
s.removeClass(m.zebra[A ? 1 : 0]).addClass(m.zebra[A ? 0 : 1])
}));
t.debug && q.benchmark("Applying Zebra widget", D)
}, remove: function(d, q, m) {
var u;
q = q.$tbodies;
var s = (m.zebra || ["even", "odd"]).join(" ");
for (m = 0; m < q.length; m++)
u = g.tablesorter.processTbody(d, q.eq(m), !0), u.children().removeClass(s), g.tablesorter.processTbody(d, u, !1)
}})
}(jQuery);
@@ -0,0 +1,28 @@
/* German initialisation for the jQuery UI date picker plugin. */
/* Written by Milian Wolff (mail@milianw.de). */
jQuery(function($) {
if ($.datepicker != null)
{
$.datepicker.regional['de'] = {
closeText: 'schließen',
prevText: '&#x3c;zurück',
nextText: 'Vor&#x3e;',
currentText: 'heute',
monthNames: [
'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'
],
monthNamesShort: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
dayNames: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
dayNamesShort: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
weekHeader: 'Wo',
dateFormat: 'dd.mm.yy',
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ''
};
$.datepicker.setDefaults($.datepicker.regional['de']);
}
});
-1496
View File
File diff suppressed because it is too large Load Diff
-952
View File
File diff suppressed because one or more lines are too long
-121
View File
@@ -1,121 +0,0 @@
/*
* Superfish v1.4.8 - jQuery menu widget
* Copyright (c) 2008 Joel Birch
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
*/
;(function($){
$.fn.superfish = function(op){
var sf = $.fn.superfish,
c = sf.c,
$arrow = $(['<span class="',c.arrowClass,'"> &#187;</span>'].join('')),
over = function(){
var $$ = $(this), menu = getMenu($$);
clearTimeout(menu.sfTimer);
$$.showSuperfishUl().siblings().hideSuperfishUl();
},
out = function(){
var $$ = $(this), menu = getMenu($$), o = sf.op;
clearTimeout(menu.sfTimer);
menu.sfTimer=setTimeout(function(){
o.retainPath=($.inArray($$[0],o.$path)>-1);
$$.hideSuperfishUl();
if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
},o.delay);
},
getMenu = function($menu){
var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
sf.op = sf.o[menu.serial];
return menu;
},
addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };
return this.each(function() {
var s = this.serial = sf.o.length;
var o = $.extend({},sf.defaults,op);
o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
$(this).addClass([o.hoverClass,c.bcClass].join(' '))
.filter('li:has(ul)').removeClass(o.pathClass);
});
sf.o[s] = sf.op = o;
$('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
if (o.autoArrows) addArrow( $('>a:first-child',this) );
})
.not('.'+c.bcClass)
.hideSuperfishUl();
var $a = $('a',this);
$a.each(function(i){
var $li = $a.eq(i).parents('li');
$a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
});
o.onInit.call(this);
}).each(function() {
var menuClasses = [c.menuClass];
if (sf.op.dropShadows && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
$(this).addClass(menuClasses.join(' '));
});
};
var sf = $.fn.superfish;
sf.o = [];
sf.op = {};
sf.IE7fix = function(){
var o = sf.op;
if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined)
this.toggleClass(sf.c.shadowClass+'-off');
};
sf.c = {
bcClass : 'sf-breadcrumb',
menuClass : 'sf-js-enabled',
anchorClass : 'sf-with-ul',
arrowClass : 'sf-sub-indicator',
shadowClass : 'sf-shadow'
};
sf.defaults = {
hoverClass : 'sfHover',
pathClass : 'overideThisToUse',
pathLevels : 1,
delay : 800,
animation : {opacity:'show'},
speed : 'normal',
autoArrows : true,
dropShadows : true,
disableHI : false, // true disables hoverIntent detection
onInit : function(){}, // callback functions
onBeforeShow: function(){},
onShow : function(){},
onHide : function(){}
};
$.fn.extend({
hideSuperfishUl : function(){
var o = sf.op,
not = (o.retainPath===true) ? o.$path : '';
o.retainPath = false;
var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
.find('>ul').hide().css('visibility','hidden');
o.onHide.call($ul);
return this;
},
showSuperfishUl : function(){
var o = sf.op,
sh = sf.c.shadowClass+'-off',
$ul = this.addClass(o.hoverClass)
.find('>ul:hidden').css('visibility','visible');
sf.IE7fix.call($ul);
o.onBeforeShow.call($ul);
$ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); });
return this;
}
});
})(jQuery);