From b789c147c447ca3f1b9e7c7f4b671cd2d84092c7 Mon Sep 17 00:00:00 2001 From: bigeagle Date: Mon, 20 Oct 2014 16:17:56 +0800 Subject: [PATCH] brand new TUNA --- 404.html | 14 - CRAN/css/style.css | 70 - CRAN/css/style.styl | 65 - CRAN/index.tuna.html | 3 - CRAN/index.tuna.jade | 56 - CRAN/js/highlight.pack.js | 1 - README.md | 6 - demo.php | 88 - files/asc.gif | Bin 54 -> 0 bytes files/desc.gif | Bin 54 -> 0 bytes files/fancyindex.css | 1 - files/favicon.png | Bin 1446 -> 0 bytes files/fonts/Bold/OpenSans-Bold.eot | Bin 110106 -> 0 bytes files/fonts/Bold/OpenSans-Bold.svg | 958 - files/fonts/Bold/OpenSans-Bold.ttf | Bin 109928 -> 0 bytes files/fonts/Bold/OpenSans-Bold.woff | Bin 63564 -> 0 bytes .../fonts/BoldItalic/OpenSans-BoldItalic.eot | Bin 128050 -> 0 bytes .../fonts/BoldItalic/OpenSans-BoldItalic.svg | 958 - .../fonts/BoldItalic/OpenSans-BoldItalic.ttf | Bin 127844 -> 0 bytes .../fonts/BoldItalic/OpenSans-BoldItalic.woff | Bin 73624 -> 0 bytes files/fonts/ExtraBold/OpenSans-ExtraBold.eot | Bin 106770 -> 0 bytes files/fonts/ExtraBold/OpenSans-ExtraBold.svg | 958 - files/fonts/ExtraBold/OpenSans-ExtraBold.ttf | Bin 106572 -> 0 bytes files/fonts/ExtraBold/OpenSans-ExtraBold.woff | Bin 62508 -> 0 bytes .../OpenSans-ExtraBoldItalic.eot | Bin 123774 -> 0 bytes .../OpenSans-ExtraBoldItalic.svg | 958 - .../OpenSans-ExtraBoldItalic.ttf | Bin 123548 -> 0 bytes .../OpenSans-ExtraBoldItalic.woff | Bin 71720 -> 0 bytes files/fonts/Italic/OpenSans-Italic.eot | Bin 131338 -> 0 bytes files/fonts/Italic/OpenSans-Italic.svg | 958 - files/fonts/Italic/OpenSans-Italic.ttf | Bin 131152 -> 0 bytes files/fonts/Italic/OpenSans-Italic.woff | Bin 76104 -> 0 bytes files/fonts/Light/OpenSans-Light.eot | Bin 107642 -> 0 bytes files/fonts/Light/OpenSans-Light.svg | 958 - files/fonts/Light/OpenSans-Light.ttf | Bin 107460 -> 0 bytes files/fonts/Light/OpenSans-Light.woff | Bin 62844 -> 0 bytes .../LightItalic/OpenSans-LightItalic.eot | Bin 133006 -> 0 bytes .../LightItalic/OpenSans-LightItalic.svg | 958 - .../LightItalic/OpenSans-LightItalic.ttf | Bin 132796 -> 0 bytes .../LightItalic/OpenSans-LightItalic.woff | Bin 76408 -> 0 bytes files/fonts/Regular/OpenSans-Regular.eot | Bin 106442 -> 0 bytes files/fonts/Regular/OpenSans-Regular.svg | 958 - files/fonts/Regular/OpenSans-Regular.ttf | Bin 106252 -> 0 bytes files/fonts/Regular/OpenSans-Regular.woff | Bin 63712 -> 0 bytes files/fonts/Semibold/OpenSans-Semibold.eot | Bin 108414 -> 0 bytes files/fonts/Semibold/OpenSans-Semibold.svg | 958 - files/fonts/Semibold/OpenSans-Semibold.ttf | Bin 108220 -> 0 bytes files/fonts/Semibold/OpenSans-Semibold.woff | Bin 64388 -> 0 bytes .../OpenSans-SemiboldItalic.eot | Bin 130914 -> 0 bytes .../OpenSans-SemiboldItalic.svg | 958 - .../OpenSans-SemiboldItalic.ttf | Bin 130692 -> 0 bytes .../OpenSans-SemiboldItalic.woff | Bin 75620 -> 0 bytes files/foundation-5.0.2/css/foundation.css | 5331 ------ files/foundation-5.0.2/css/foundation.min.css | 1 - files/foundation-5.0.2/css/normalize.css | 410 - files/foundation-5.0.2/img/.gitkeep | 1 - files/foundation-5.0.2/index.html | 166 - files/foundation-5.0.2/js/foundation.min.js | 10 - .../js/foundation/foundation.abide.js | 201 - .../js/foundation/foundation.accordion.js | 41 - .../js/foundation/foundation.alert.js | 34 - .../js/foundation/foundation.clearing.js | 450 - .../js/foundation/foundation.dropdown.js | 184 - .../js/foundation/foundation.interchange.js | 304 - .../js/foundation/foundation.joyride.js | 839 - .../js/foundation/foundation.js | 416 - .../js/foundation/foundation.magellan.js | 118 - .../js/foundation/foundation.offcanvas.js | 37 - .../js/foundation/foundation.orbit.js | 434 - .../js/foundation/foundation.reveal.js | 347 - .../js/foundation/foundation.tab.js | 37 - .../js/foundation/foundation.tooltip.js | 202 - .../js/foundation/foundation.topbar.js | 380 - files/foundation-5.0.2/js/jquery.js | 8829 --------- files/foundation-5.0.2/js/modernizr.js | 4 - .../js/vendor/custom.modernizr.js | 4 - files/foundation-5.0.2/js/vendor/fastclick.js | 761 - .../js/vendor/jquery.autocomplete.js | 645 - .../js/vendor/jquery.cookie.js | 107 - files/foundation-5.0.2/js/vendor/jquery.js | 8829 --------- .../foundation-5.0.2/js/vendor/placeholder.js | 426 - files/humane/bigbox.css | 125 - files/humane/humane.js | 221 - files/jquery-latest.js | 4 - files/jquery-ui.css | 473 - files/jquery-ui.js | 14856 ---------------- files/jquery.tablesorter.min.js | 4 - files/logo-01.png | Bin 16061 -> 0 bytes files/logo-w.png | Bin 8073 -> 0 bytes files/logo-w.xcf | Bin 27651 -> 0 bytes files/logo.png | Bin 15314 -> 0 bytes files/mirrors.tuna.css | 117 - files/non-official.png | Bin 689 -> 0 bytes files/official-header.png | Bin 579 -> 0 bytes files/official.png | Bin 786 -> 0 bytes files/pure-0.3.0.min.css | 11 - files/sort-status-table.js | 57 - files/tuna.css | 143 - files/unknown.png | Bin 9022 -> 0 bytes includes/after.php | 25 - includes/before.php | 89 - includes/bydistro.php | 44 - includes/colors.php | 11 - includes/index.php | 3 - includes/tuna.css.php | 225 - index.php | 343 - notice.404.html | 4 - npm/css/style.css | 340 - npm/css/style.styl | 143 - npm/grunt.js | 56 - npm/img/nodejs.png | Bin 5678 -> 0 bytes npm/img/nodejs_files/ga.js | 59 - npm/img/nodejs_files/logo.png | Bin 5081 -> 0 bytes npm/img/nodejs_files/monitor.png | Bin 130547 -> 0 bytes npm/img/nodejs_files/nodejs-black.png | Bin 2630 -> 0 bytes npm/img/nodejs_files/nodejs-dark.png | Bin 3501 -> 0 bytes npm/img/nodejs_files/nodejs-green.png | Bin 3452 -> 0 bytes npm/img/nodejs_files/nodejs.png | Bin 3026 -> 0 bytes npm/img/npm.png | Bin 1708 -> 0 bytes npm/img/ribbon.svg | 139 - npm/index.html | 1 - npm/index.jade | 83 - 122 files changed, 57008 deletions(-) delete mode 100644 404.html delete mode 100644 CRAN/css/style.css delete mode 100644 CRAN/css/style.styl delete mode 100644 CRAN/index.tuna.html delete mode 100644 CRAN/index.tuna.jade delete mode 100644 CRAN/js/highlight.pack.js delete mode 100644 README.md delete mode 100644 demo.php delete mode 100644 files/asc.gif delete mode 100644 files/desc.gif delete mode 100644 files/fancyindex.css delete mode 100644 files/favicon.png delete mode 100644 files/fonts/Bold/OpenSans-Bold.eot delete mode 100644 files/fonts/Bold/OpenSans-Bold.svg delete mode 100644 files/fonts/Bold/OpenSans-Bold.ttf delete mode 100644 files/fonts/Bold/OpenSans-Bold.woff delete mode 100644 files/fonts/BoldItalic/OpenSans-BoldItalic.eot delete mode 100644 files/fonts/BoldItalic/OpenSans-BoldItalic.svg delete mode 100644 files/fonts/BoldItalic/OpenSans-BoldItalic.ttf delete mode 100644 files/fonts/BoldItalic/OpenSans-BoldItalic.woff delete mode 100644 files/fonts/ExtraBold/OpenSans-ExtraBold.eot delete mode 100644 files/fonts/ExtraBold/OpenSans-ExtraBold.svg delete mode 100644 files/fonts/ExtraBold/OpenSans-ExtraBold.ttf delete mode 100644 files/fonts/ExtraBold/OpenSans-ExtraBold.woff delete mode 100644 files/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.eot delete mode 100644 files/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.svg delete mode 100644 files/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.ttf delete mode 100644 files/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.woff delete mode 100644 files/fonts/Italic/OpenSans-Italic.eot delete mode 100644 files/fonts/Italic/OpenSans-Italic.svg delete mode 100644 files/fonts/Italic/OpenSans-Italic.ttf delete mode 100644 files/fonts/Italic/OpenSans-Italic.woff delete mode 100644 files/fonts/Light/OpenSans-Light.eot delete mode 100644 files/fonts/Light/OpenSans-Light.svg delete mode 100644 files/fonts/Light/OpenSans-Light.ttf delete mode 100644 files/fonts/Light/OpenSans-Light.woff delete mode 100644 files/fonts/LightItalic/OpenSans-LightItalic.eot delete mode 100644 files/fonts/LightItalic/OpenSans-LightItalic.svg delete mode 100644 files/fonts/LightItalic/OpenSans-LightItalic.ttf delete mode 100644 files/fonts/LightItalic/OpenSans-LightItalic.woff delete mode 100644 files/fonts/Regular/OpenSans-Regular.eot delete mode 100644 files/fonts/Regular/OpenSans-Regular.svg delete mode 100644 files/fonts/Regular/OpenSans-Regular.ttf delete mode 100644 files/fonts/Regular/OpenSans-Regular.woff delete mode 100644 files/fonts/Semibold/OpenSans-Semibold.eot delete mode 100644 files/fonts/Semibold/OpenSans-Semibold.svg delete mode 100644 files/fonts/Semibold/OpenSans-Semibold.ttf delete mode 100644 files/fonts/Semibold/OpenSans-Semibold.woff delete mode 100644 files/fonts/SemiboldItalic/OpenSans-SemiboldItalic.eot delete mode 100644 files/fonts/SemiboldItalic/OpenSans-SemiboldItalic.svg delete mode 100644 files/fonts/SemiboldItalic/OpenSans-SemiboldItalic.ttf delete mode 100644 files/fonts/SemiboldItalic/OpenSans-SemiboldItalic.woff delete mode 100644 files/foundation-5.0.2/css/foundation.css delete mode 100644 files/foundation-5.0.2/css/foundation.min.css delete mode 100644 files/foundation-5.0.2/css/normalize.css delete mode 100644 files/foundation-5.0.2/img/.gitkeep delete mode 100644 files/foundation-5.0.2/index.html delete mode 100644 files/foundation-5.0.2/js/foundation.min.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.abide.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.accordion.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.alert.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.clearing.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.dropdown.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.interchange.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.joyride.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.magellan.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.offcanvas.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.orbit.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.reveal.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.tab.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.tooltip.js delete mode 100644 files/foundation-5.0.2/js/foundation/foundation.topbar.js delete mode 100644 files/foundation-5.0.2/js/jquery.js delete mode 100644 files/foundation-5.0.2/js/modernizr.js delete mode 100644 files/foundation-5.0.2/js/vendor/custom.modernizr.js delete mode 100644 files/foundation-5.0.2/js/vendor/fastclick.js delete mode 100644 files/foundation-5.0.2/js/vendor/jquery.autocomplete.js delete mode 100644 files/foundation-5.0.2/js/vendor/jquery.cookie.js delete mode 100644 files/foundation-5.0.2/js/vendor/jquery.js delete mode 100644 files/foundation-5.0.2/js/vendor/placeholder.js delete mode 100644 files/humane/bigbox.css delete mode 100644 files/humane/humane.js delete mode 100644 files/jquery-latest.js delete mode 100644 files/jquery-ui.css delete mode 100644 files/jquery-ui.js delete mode 100644 files/jquery.tablesorter.min.js delete mode 100644 files/logo-01.png delete mode 100644 files/logo-w.png delete mode 100644 files/logo-w.xcf delete mode 100644 files/logo.png delete mode 100644 files/mirrors.tuna.css delete mode 100644 files/non-official.png delete mode 100644 files/official-header.png delete mode 100644 files/official.png delete mode 100644 files/pure-0.3.0.min.css delete mode 100644 files/sort-status-table.js delete mode 100644 files/tuna.css delete mode 100644 files/unknown.png delete mode 100644 includes/after.php delete mode 100644 includes/before.php delete mode 100644 includes/bydistro.php delete mode 100644 includes/colors.php delete mode 100644 includes/index.php delete mode 100644 includes/tuna.css.php delete mode 100644 index.php delete mode 100644 notice.404.html delete mode 100644 npm/css/style.css delete mode 100644 npm/css/style.styl delete mode 100644 npm/grunt.js delete mode 100644 npm/img/nodejs.png delete mode 100644 npm/img/nodejs_files/ga.js delete mode 100644 npm/img/nodejs_files/logo.png delete mode 100644 npm/img/nodejs_files/monitor.png delete mode 100644 npm/img/nodejs_files/nodejs-black.png delete mode 100644 npm/img/nodejs_files/nodejs-dark.png delete mode 100644 npm/img/nodejs_files/nodejs-green.png delete mode 100644 npm/img/nodejs_files/nodejs.png delete mode 100644 npm/img/npm.png delete mode 100644 npm/img/ribbon.svg delete mode 100644 npm/index.html delete mode 100644 npm/index.jade diff --git a/404.html b/404.html deleted file mode 100644 index e4e2d2e..0000000 --- a/404.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - 404 NOT FOUND - - -
-		你要访问的内容暂时没有找到。
-		The file you requested is not available at this time.
-		
- ' : ''); - inst._keyEvent = false; - return html; - }, - - /* Generate the month and year header. */ - _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, - secondary, monthNames, monthNamesShort) { - var changeMonth = this._get(inst, 'changeMonth'); - var changeYear = this._get(inst, 'changeYear'); - var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); - var html = '
'; - var monthHtml = ''; - // month selection - if (secondary || !changeMonth) - monthHtml += '' + monthNames[drawMonth] + ''; - else { - var inMinYear = (minDate && minDate.getFullYear() == drawYear); - var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); - monthHtml += ''; - } - if (!showMonthAfterYear) - html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); - // year selection - if ( !inst.yearshtml ) { - inst.yearshtml = ''; - if (secondary || !changeYear) - html += '' + drawYear + ''; - else { - // determine range of years to display - var years = this._get(inst, 'yearRange').split(':'); - var thisYear = new Date().getFullYear(); - var determineYear = function(value) { - var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : - (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : - parseInt(value, 10))); - return (isNaN(year) ? thisYear : year); - }; - var year = determineYear(years[0]); - var endYear = Math.max(year, determineYear(years[1] || '')); - year = (minDate ? Math.max(year, minDate.getFullYear()) : year); - endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); - inst.yearshtml += ''; - - html += inst.yearshtml; - inst.yearshtml = null; - } - } - html += this._get(inst, 'yearSuffix'); - if (showMonthAfterYear) - html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; - html += '
'; // Close datepicker_header - return html; - }, - - /* Adjust one of the date sub-fields. */ - _adjustInstDate: function(inst, offset, period) { - var year = inst.drawYear + (period == 'Y' ? offset : 0); - var month = inst.drawMonth + (period == 'M' ? offset : 0); - var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + - (period == 'D' ? offset : 0); - var date = this._restrictMinMax(inst, - this._daylightSavingAdjust(new Date(year, month, day))); - inst.selectedDay = date.getDate(); - inst.drawMonth = inst.selectedMonth = date.getMonth(); - inst.drawYear = inst.selectedYear = date.getFullYear(); - if (period == 'M' || period == 'Y') - this._notifyChange(inst); - }, - - /* Ensure a date is within any min/max bounds. */ - _restrictMinMax: function(inst, date) { - var minDate = this._getMinMaxDate(inst, 'min'); - var maxDate = this._getMinMaxDate(inst, 'max'); - var newDate = (minDate && date < minDate ? minDate : date); - newDate = (maxDate && newDate > maxDate ? maxDate : newDate); - return newDate; - }, - - /* Notify change of month/year. */ - _notifyChange: function(inst) { - var onChange = this._get(inst, 'onChangeMonthYear'); - if (onChange) - onChange.apply((inst.input ? inst.input[0] : null), - [inst.selectedYear, inst.selectedMonth + 1, inst]); - }, - - /* Determine the number of months to show. */ - _getNumberOfMonths: function(inst) { - var numMonths = this._get(inst, 'numberOfMonths'); - return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); - }, - - /* Determine the current maximum date - ensure no time components are set. */ - _getMinMaxDate: function(inst, minMax) { - return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); - }, - - /* Find the number of days in a given month. */ - _getDaysInMonth: function(year, month) { - return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); - }, - - /* Find the day of the week of the first of a month. */ - _getFirstDayOfMonth: function(year, month) { - return new Date(year, month, 1).getDay(); - }, - - /* Determines if we should allow a "next/prev" month display change. */ - _canAdjustMonth: function(inst, offset, curYear, curMonth) { - var numMonths = this._getNumberOfMonths(inst); - var date = this._daylightSavingAdjust(new Date(curYear, - curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); - if (offset < 0) - date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); - return this._isInRange(inst, date); - }, - - /* Is the given date in the accepted range? */ - _isInRange: function(inst, date) { - var minDate = this._getMinMaxDate(inst, 'min'); - var maxDate = this._getMinMaxDate(inst, 'max'); - return ((!minDate || date.getTime() >= minDate.getTime()) && - (!maxDate || date.getTime() <= maxDate.getTime())); - }, - - /* Provide the configuration settings for formatting/parsing. */ - _getFormatConfig: function(inst) { - var shortYearCutoff = this._get(inst, 'shortYearCutoff'); - shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : - new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); - return {shortYearCutoff: shortYearCutoff, - dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), - monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')}; - }, - - /* Format the given date for display. */ - _formatDate: function(inst, day, month, year) { - if (!day) { - inst.currentDay = inst.selectedDay; - inst.currentMonth = inst.selectedMonth; - inst.currentYear = inst.selectedYear; - } - var date = (day ? (typeof day == 'object' ? day : - this._daylightSavingAdjust(new Date(year, month, day))) : - this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); - return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); - } -}); - -/* - * Bind hover events for datepicker elements. - * Done via delegate so the binding only occurs once in the lifetime of the parent div. - * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. - */ -function bindHover(dpDiv) { - var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a'; - return dpDiv.delegate(selector, 'mouseout', function() { - $(this).removeClass('ui-state-hover'); - if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover'); - if (this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover'); - }) - .delegate(selector, 'mouseover', function(){ - if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) { - $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); - $(this).addClass('ui-state-hover'); - if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover'); - if (this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover'); - } - }); -} - -/* jQuery extend now ignores nulls! */ -function extendRemove(target, props) { - $.extend(target, props); - for (var name in props) - if (props[name] == null || props[name] == undefined) - target[name] = props[name]; - return target; -}; - -/* Invoke the datepicker functionality. - @param options string - a command, optionally followed by additional parameters or - Object - settings for attaching new datepicker functionality - @return jQuery object */ -$.fn.datepicker = function(options){ - - /* Verify an empty collection wasn't passed - Fixes #6976 */ - if ( !this.length ) { - return this; - } - - /* Initialise the date picker. */ - if (!$.datepicker.initialized) { - $(document).mousedown($.datepicker._checkExternalClick). - find(document.body).append($.datepicker.dpDiv); - $.datepicker.initialized = true; - } - - var otherArgs = Array.prototype.slice.call(arguments, 1); - if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) - return $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this[0]].concat(otherArgs)); - if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') - return $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this[0]].concat(otherArgs)); - return this.each(function() { - typeof options == 'string' ? - $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this].concat(otherArgs)) : - $.datepicker._attachDatepicker(this, options); - }); -}; - -$.datepicker = new Datepicker(); // singleton instance -$.datepicker.initialized = false; -$.datepicker.uuid = new Date().getTime(); -$.datepicker.version = "1.9.1"; - -// Workaround for #4055 -// Add another global to avoid noConflict issues with inline event handlers -window['DP_jQuery_' + dpuuid] = $; - -})(jQuery); - -(function( $, undefined ) { - -var uiDialogClasses = "ui-dialog ui-widget ui-widget-content ui-corner-all ", - sizeRelatedOptions = { - buttons: true, - height: true, - maxHeight: true, - maxWidth: true, - minHeight: true, - minWidth: true, - width: true - }, - resizableRelatedOptions = { - maxHeight: true, - maxWidth: true, - minHeight: true, - minWidth: true - }; - -$.widget("ui.dialog", { - version: "1.9.1", - options: { - autoOpen: true, - buttons: {}, - closeOnEscape: true, - closeText: "close", - dialogClass: "", - draggable: true, - hide: null, - height: "auto", - maxHeight: false, - maxWidth: false, - minHeight: 150, - minWidth: 150, - modal: false, - position: { - my: "center", - at: "center", - of: window, - collision: "fit", - // ensure that the titlebar is never outside the document - using: function( pos ) { - var topOffset = $( this ).css( pos ).offset().top; - if ( topOffset < 0 ) { - $( this ).css( "top", pos.top - topOffset ); - } - } - }, - resizable: true, - show: null, - stack: true, - title: "", - width: 300, - zIndex: 1000 - }, - - _create: function() { - this.originalTitle = this.element.attr( "title" ); - // #5742 - .attr() might return a DOMElement - if ( typeof this.originalTitle !== "string" ) { - this.originalTitle = ""; - } - this.oldPosition = { - parent: this.element.parent(), - index: this.element.parent().children().index( this.element ) - }; - this.options.title = this.options.title || this.originalTitle; - var that = this, - options = this.options, - - title = options.title || " ", - uiDialog, - uiDialogTitlebar, - uiDialogTitlebarClose, - uiDialogTitle, - uiDialogButtonPane; - - uiDialog = ( this.uiDialog = $( "
" ) ) - .addClass( uiDialogClasses + options.dialogClass ) - .css({ - display: "none", - outline: 0, // TODO: move to stylesheet - zIndex: options.zIndex - }) - // setting tabIndex makes the div focusable - .attr( "tabIndex", -1) - .keydown(function( event ) { - if ( options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && - event.keyCode === $.ui.keyCode.ESCAPE ) { - that.close( event ); - event.preventDefault(); - } - }) - .mousedown(function( event ) { - that.moveToTop( false, event ); - }) - .appendTo( "body" ); - - this.element - .show() - .removeAttr( "title" ) - .addClass( "ui-dialog-content ui-widget-content" ) - .appendTo( uiDialog ); - - uiDialogTitlebar = ( this.uiDialogTitlebar = $( "
" ) ) - .addClass( "ui-dialog-titlebar ui-widget-header " + - "ui-corner-all ui-helper-clearfix" ) - .bind( "mousedown", function() { - // Dialog isn't getting focus when dragging (#8063) - uiDialog.focus(); - }) - .prependTo( uiDialog ); - - uiDialogTitlebarClose = $( "" ) - .addClass( "ui-dialog-titlebar-close ui-corner-all" ) - .attr( "role", "button" ) - .click(function( event ) { - event.preventDefault(); - that.close( event ); - }) - .appendTo( uiDialogTitlebar ); - - ( this.uiDialogTitlebarCloseText = $( "" ) ) - .addClass( "ui-icon ui-icon-closethick" ) - .text( options.closeText ) - .appendTo( uiDialogTitlebarClose ); - - uiDialogTitle = $( "" ) - .uniqueId() - .addClass( "ui-dialog-title" ) - .html( title ) - .prependTo( uiDialogTitlebar ); - - uiDialogButtonPane = ( this.uiDialogButtonPane = $( "
" ) ) - .addClass( "ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" ); - - ( this.uiButtonSet = $( "
" ) ) - .addClass( "ui-dialog-buttonset" ) - .appendTo( uiDialogButtonPane ); - - uiDialog.attr({ - role: "dialog", - "aria-labelledby": uiDialogTitle.attr( "id" ) - }); - - uiDialogTitlebar.find( "*" ).add( uiDialogTitlebar ).disableSelection(); - this._hoverable( uiDialogTitlebarClose ); - this._focusable( uiDialogTitlebarClose ); - - if ( options.draggable && $.fn.draggable ) { - this._makeDraggable(); - } - if ( options.resizable && $.fn.resizable ) { - this._makeResizable(); - } - - this._createButtons( options.buttons ); - this._isOpen = false; - - if ( $.fn.bgiframe ) { - uiDialog.bgiframe(); - } - - // prevent tabbing out of modal dialogs - this._on( uiDialog, { keydown: function( event ) { - if ( !options.modal || event.keyCode !== $.ui.keyCode.TAB ) { - return; - } - - var tabbables = $( ":tabbable", uiDialog ), - first = tabbables.filter( ":first" ), - last = tabbables.filter( ":last" ); - - if ( event.target === last[0] && !event.shiftKey ) { - first.focus( 1 ); - return false; - } else if ( event.target === first[0] && event.shiftKey ) { - last.focus( 1 ); - return false; - } - }}); - }, - - _init: function() { - if ( this.options.autoOpen ) { - this.open(); - } - }, - - _destroy: function() { - var next, - oldPosition = this.oldPosition; - - if ( this.overlay ) { - this.overlay.destroy(); - } - this.uiDialog.hide(); - this.element - .removeClass( "ui-dialog-content ui-widget-content" ) - .hide() - .appendTo( "body" ); - this.uiDialog.remove(); - - if ( this.originalTitle ) { - this.element.attr( "title", this.originalTitle ); - } - - next = oldPosition.parent.children().eq( oldPosition.index ); - // Don't try to place the dialog next to itself (#8613) - if ( next.length && next[ 0 ] !== this.element[ 0 ] ) { - next.before( this.element ); - } else { - oldPosition.parent.append( this.element ); - } - }, - - widget: function() { - return this.uiDialog; - }, - - close: function( event ) { - var that = this, - maxZ, thisZ; - - if ( !this._isOpen ) { - return; - } - - if ( false === this._trigger( "beforeClose", event ) ) { - return; - } - - this._isOpen = false; - - if ( this.overlay ) { - this.overlay.destroy(); - } - - if ( this.options.hide ) { - this._hide( this.uiDialog, this.options.hide, function() { - that._trigger( "close", event ); - }); - } else { - this.uiDialog.hide(); - this._trigger( "close", event ); - } - - $.ui.dialog.overlay.resize(); - - // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) - if ( this.options.modal ) { - maxZ = 0; - $( ".ui-dialog" ).each(function() { - if ( this !== that.uiDialog[0] ) { - thisZ = $( this ).css( "z-index" ); - if ( !isNaN( thisZ ) ) { - maxZ = Math.max( maxZ, thisZ ); - } - } - }); - $.ui.dialog.maxZ = maxZ; - } - - return this; - }, - - isOpen: function() { - return this._isOpen; - }, - - // the force parameter allows us to move modal dialogs to their correct - // position on open - moveToTop: function( force, event ) { - var options = this.options, - saveScroll; - - if ( ( options.modal && !force ) || - ( !options.stack && !options.modal ) ) { - return this._trigger( "focus", event ); - } - - if ( options.zIndex > $.ui.dialog.maxZ ) { - $.ui.dialog.maxZ = options.zIndex; - } - if ( this.overlay ) { - $.ui.dialog.maxZ += 1; - $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ; - this.overlay.$el.css( "z-index", $.ui.dialog.overlay.maxZ ); - } - - // Save and then restore scroll - // Opera 9.5+ resets when parent z-index is changed. - // http://bugs.jqueryui.com/ticket/3193 - saveScroll = { - scrollTop: this.element.scrollTop(), - scrollLeft: this.element.scrollLeft() - }; - $.ui.dialog.maxZ += 1; - this.uiDialog.css( "z-index", $.ui.dialog.maxZ ); - this.element.attr( saveScroll ); - this._trigger( "focus", event ); - - return this; - }, - - open: function() { - if ( this._isOpen ) { - return; - } - - var hasFocus, - options = this.options, - uiDialog = this.uiDialog; - - this._size(); - this._position( options.position ); - uiDialog.show( options.show ); - this.overlay = options.modal ? new $.ui.dialog.overlay( this ) : null; - this.moveToTop( true ); - - // set focus to the first tabbable element in the content area or the first button - // if there are no tabbable elements, set focus on the dialog itself - hasFocus = this.element.find( ":tabbable" ); - if ( !hasFocus.length ) { - hasFocus = this.uiDialogButtonPane.find( ":tabbable" ); - if ( !hasFocus.length ) { - hasFocus = uiDialog; - } - } - hasFocus.eq( 0 ).focus(); - - this._isOpen = true; - this._trigger( "open" ); - - return this; - }, - - _createButtons: function( buttons ) { - var that = this, - hasButtons = false; - - // if we already have a button pane, remove it - this.uiDialogButtonPane.remove(); - this.uiButtonSet.empty(); - - if ( typeof buttons === "object" && buttons !== null ) { - $.each( buttons, function() { - return !(hasButtons = true); - }); - } - if ( hasButtons ) { - $.each( buttons, function( name, props ) { - props = $.isFunction( props ) ? - { click: props, text: name } : - props; - var button = $( "" ) - .attr( props, true ) - .unbind( "click" ) - .click(function() { - props.click.apply( that.element[0], arguments ); - }) - .appendTo( that.uiButtonSet ); - if ( $.fn.button ) { - button.button(); - } - }); - this.uiDialog.addClass( "ui-dialog-buttons" ); - this.uiDialogButtonPane.appendTo( this.uiDialog ); - } else { - this.uiDialog.removeClass( "ui-dialog-buttons" ); - } - }, - - _makeDraggable: function() { - var that = this, - options = this.options; - - function filteredUi( ui ) { - return { - position: ui.position, - offset: ui.offset - }; - } - - this.uiDialog.draggable({ - cancel: ".ui-dialog-content, .ui-dialog-titlebar-close", - handle: ".ui-dialog-titlebar", - containment: "document", - start: function( event, ui ) { - $( this ) - .addClass( "ui-dialog-dragging" ); - that._trigger( "dragStart", event, filteredUi( ui ) ); - }, - drag: function( event, ui ) { - that._trigger( "drag", event, filteredUi( ui ) ); - }, - stop: function( event, ui ) { - options.position = [ - ui.position.left - that.document.scrollLeft(), - ui.position.top - that.document.scrollTop() - ]; - $( this ) - .removeClass( "ui-dialog-dragging" ); - that._trigger( "dragStop", event, filteredUi( ui ) ); - $.ui.dialog.overlay.resize(); - } - }); - }, - - _makeResizable: function( handles ) { - handles = (handles === undefined ? this.options.resizable : handles); - var that = this, - options = this.options, - // .ui-resizable has position: relative defined in the stylesheet - // but dialogs have to use absolute or fixed positioning - position = this.uiDialog.css( "position" ), - resizeHandles = typeof handles === 'string' ? - handles : - "n,e,s,w,se,sw,ne,nw"; - - function filteredUi( ui ) { - return { - originalPosition: ui.originalPosition, - originalSize: ui.originalSize, - position: ui.position, - size: ui.size - }; - } - - this.uiDialog.resizable({ - cancel: ".ui-dialog-content", - containment: "document", - alsoResize: this.element, - maxWidth: options.maxWidth, - maxHeight: options.maxHeight, - minWidth: options.minWidth, - minHeight: this._minHeight(), - handles: resizeHandles, - start: function( event, ui ) { - $( this ).addClass( "ui-dialog-resizing" ); - that._trigger( "resizeStart", event, filteredUi( ui ) ); - }, - resize: function( event, ui ) { - that._trigger( "resize", event, filteredUi( ui ) ); - }, - stop: function( event, ui ) { - $( this ).removeClass( "ui-dialog-resizing" ); - options.height = $( this ).height(); - options.width = $( this ).width(); - that._trigger( "resizeStop", event, filteredUi( ui ) ); - $.ui.dialog.overlay.resize(); - } - }) - .css( "position", position ) - .find( ".ui-resizable-se" ) - .addClass( "ui-icon ui-icon-grip-diagonal-se" ); - }, - - _minHeight: function() { - var options = this.options; - - if ( options.height === "auto" ) { - return options.minHeight; - } else { - return Math.min( options.minHeight, options.height ); - } - }, - - _position: function( position ) { - var myAt = [], - offset = [ 0, 0 ], - isVisible; - - if ( position ) { - // deep extending converts arrays to objects in jQuery <= 1.3.2 :-( - // if (typeof position == 'string' || $.isArray(position)) { - // myAt = $.isArray(position) ? position : position.split(' '); - - if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) { - myAt = position.split ? position.split( " " ) : [ position[ 0 ], position[ 1 ] ]; - if ( myAt.length === 1 ) { - myAt[ 1 ] = myAt[ 0 ]; - } - - $.each( [ "left", "top" ], function( i, offsetPosition ) { - if ( +myAt[ i ] === myAt[ i ] ) { - offset[ i ] = myAt[ i ]; - myAt[ i ] = offsetPosition; - } - }); - - position = { - my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " + - myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]), - at: myAt.join( " " ) - }; - } - - position = $.extend( {}, $.ui.dialog.prototype.options.position, position ); - } else { - position = $.ui.dialog.prototype.options.position; - } - - // need to show the dialog to get the actual offset in the position plugin - isVisible = this.uiDialog.is( ":visible" ); - if ( !isVisible ) { - this.uiDialog.show(); - } - this.uiDialog.position( position ); - if ( !isVisible ) { - this.uiDialog.hide(); - } - }, - - _setOptions: function( options ) { - var that = this, - resizableOptions = {}, - resize = false; - - $.each( options, function( key, value ) { - that._setOption( key, value ); - - if ( key in sizeRelatedOptions ) { - resize = true; - } - if ( key in resizableRelatedOptions ) { - resizableOptions[ key ] = value; - } - }); - - if ( resize ) { - this._size(); - } - if ( this.uiDialog.is( ":data(resizable)" ) ) { - this.uiDialog.resizable( "option", resizableOptions ); - } - }, - - _setOption: function( key, value ) { - var isDraggable, isResizable, - uiDialog = this.uiDialog; - - switch ( key ) { - case "buttons": - this._createButtons( value ); - break; - case "closeText": - // ensure that we always pass a string - this.uiDialogTitlebarCloseText.text( "" + value ); - break; - case "dialogClass": - uiDialog - .removeClass( this.options.dialogClass ) - .addClass( uiDialogClasses + value ); - break; - case "disabled": - if ( value ) { - uiDialog.addClass( "ui-dialog-disabled" ); - } else { - uiDialog.removeClass( "ui-dialog-disabled" ); - } - break; - case "draggable": - isDraggable = uiDialog.is( ":data(draggable)" ); - if ( isDraggable && !value ) { - uiDialog.draggable( "destroy" ); - } - - if ( !isDraggable && value ) { - this._makeDraggable(); - } - break; - case "position": - this._position( value ); - break; - case "resizable": - // currently resizable, becoming non-resizable - isResizable = uiDialog.is( ":data(resizable)" ); - if ( isResizable && !value ) { - uiDialog.resizable( "destroy" ); - } - - // currently resizable, changing handles - if ( isResizable && typeof value === "string" ) { - uiDialog.resizable( "option", "handles", value ); - } - - // currently non-resizable, becoming resizable - if ( !isResizable && value !== false ) { - this._makeResizable( value ); - } - break; - case "title": - // convert whatever was passed in o a string, for html() to not throw up - $( ".ui-dialog-title", this.uiDialogTitlebar ) - .html( "" + ( value || " " ) ); - break; - } - - this._super( key, value ); - }, - - _size: function() { - /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content - * divs will both have width and height set, so we need to reset them - */ - var nonContentHeight, minContentHeight, autoHeight, - options = this.options, - isVisible = this.uiDialog.is( ":visible" ); - - // reset content sizing - this.element.show().css({ - width: "auto", - minHeight: 0, - height: 0 - }); - - if ( options.minWidth > options.width ) { - options.width = options.minWidth; - } - - // reset wrapper sizing - // determine the height of all the non-content elements - nonContentHeight = this.uiDialog.css({ - height: "auto", - width: options.width - }) - .outerHeight(); - minContentHeight = Math.max( 0, options.minHeight - nonContentHeight ); - - if ( options.height === "auto" ) { - // only needed for IE6 support - if ( $.support.minHeight ) { - this.element.css({ - minHeight: minContentHeight, - height: "auto" - }); - } else { - this.uiDialog.show(); - autoHeight = this.element.css( "height", "auto" ).height(); - if ( !isVisible ) { - this.uiDialog.hide(); - } - this.element.height( Math.max( autoHeight, minContentHeight ) ); - } - } else { - this.element.height( Math.max( options.height - nonContentHeight, 0 ) ); - } - - if (this.uiDialog.is( ":data(resizable)" ) ) { - this.uiDialog.resizable( "option", "minHeight", this._minHeight() ); - } - } -}); - -$.extend($.ui.dialog, { - uuid: 0, - maxZ: 0, - - getTitleId: function($el) { - var id = $el.attr( "id" ); - if ( !id ) { - this.uuid += 1; - id = this.uuid; - } - return "ui-dialog-title-" + id; - }, - - overlay: function( dialog ) { - this.$el = $.ui.dialog.overlay.create( dialog ); - } -}); - -$.extend( $.ui.dialog.overlay, { - instances: [], - // reuse old instances due to IE memory leak with alpha transparency (see #5185) - oldInstances: [], - maxZ: 0, - events: $.map( - "focus,mousedown,mouseup,keydown,keypress,click".split( "," ), - function( event ) { - return event + ".dialog-overlay"; - } - ).join( " " ), - create: function( dialog ) { - if ( this.instances.length === 0 ) { - // prevent use of anchors and inputs - // we use a setTimeout in case the overlay is created from an - // event that we're going to be cancelling (see #2804) - setTimeout(function() { - // handle $(el).dialog().dialog('close') (see #4065) - if ( $.ui.dialog.overlay.instances.length ) { - $( document ).bind( $.ui.dialog.overlay.events, function( event ) { - // stop events if the z-index of the target is < the z-index of the overlay - // we cannot return true when we don't want to cancel the event (#3523) - if ( $( event.target ).zIndex() < $.ui.dialog.overlay.maxZ ) { - return false; - } - }); - } - }, 1 ); - - // handle window resize - $( window ).bind( "resize.dialog-overlay", $.ui.dialog.overlay.resize ); - } - - var $el = ( this.oldInstances.pop() || $( "
" ).addClass( "ui-widget-overlay" ) ); - - // allow closing by pressing the escape key - $( document ).bind( "keydown.dialog-overlay", function( event ) { - var instances = $.ui.dialog.overlay.instances; - // only react to the event if we're the top overlay - if ( instances.length !== 0 && instances[ instances.length - 1 ] === $el && - dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && - event.keyCode === $.ui.keyCode.ESCAPE ) { - - dialog.close( event ); - event.preventDefault(); - } - }); - - $el.appendTo( document.body ).css({ - width: this.width(), - height: this.height() - }); - - if ( $.fn.bgiframe ) { - $el.bgiframe(); - } - - this.instances.push( $el ); - return $el; - }, - - destroy: function( $el ) { - var indexOf = $.inArray( $el, this.instances ), - maxZ = 0; - - if ( indexOf !== -1 ) { - this.oldInstances.push( this.instances.splice( indexOf, 1 )[ 0 ] ); - } - - if ( this.instances.length === 0 ) { - $( [ document, window ] ).unbind( ".dialog-overlay" ); - } - - $el.height( 0 ).width( 0 ).remove(); - - // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) - $.each( this.instances, function() { - maxZ = Math.max( maxZ, this.css( "z-index" ) ); - }); - this.maxZ = maxZ; - }, - - height: function() { - var scrollHeight, - offsetHeight; - // handle IE - if ( $.ui.ie ) { - scrollHeight = Math.max( - document.documentElement.scrollHeight, - document.body.scrollHeight - ); - offsetHeight = Math.max( - document.documentElement.offsetHeight, - document.body.offsetHeight - ); - - if ( scrollHeight < offsetHeight ) { - return $( window ).height() + "px"; - } else { - return scrollHeight + "px"; - } - // handle "good" browsers - } else { - return $( document ).height() + "px"; - } - }, - - width: function() { - var scrollWidth, - offsetWidth; - // handle IE - if ( $.ui.ie ) { - scrollWidth = Math.max( - document.documentElement.scrollWidth, - document.body.scrollWidth - ); - offsetWidth = Math.max( - document.documentElement.offsetWidth, - document.body.offsetWidth - ); - - if ( scrollWidth < offsetWidth ) { - return $( window ).width() + "px"; - } else { - return scrollWidth + "px"; - } - // handle "good" browsers - } else { - return $( document ).width() + "px"; - } - }, - - resize: function() { - /* If the dialog is draggable and the user drags it past the - * right edge of the window, the document becomes wider so we - * need to stretch the overlay. If the user then drags the - * dialog back to the left, the document will become narrower, - * so we need to shrink the overlay to the appropriate size. - * This is handled by shrinking the overlay before setting it - * to the full document size. - */ - var $overlays = $( [] ); - $.each( $.ui.dialog.overlay.instances, function() { - $overlays = $overlays.add( this ); - }); - - $overlays.css({ - width: 0, - height: 0 - }).css({ - width: $.ui.dialog.overlay.width(), - height: $.ui.dialog.overlay.height() - }); - } -}); - -$.extend( $.ui.dialog.overlay.prototype, { - destroy: function() { - $.ui.dialog.overlay.destroy( this.$el ); - } -}); - -}( jQuery ) ); - -(function( $, undefined ) { - -var rvertical = /up|down|vertical/, - rpositivemotion = /up|left|vertical|horizontal/; - -$.effects.effect.blind = function( o, done ) { - // Create element - var el = $( this ), - props = [ "position", "top", "bottom", "left", "right", "height", "width" ], - mode = $.effects.setMode( el, o.mode || "hide" ), - direction = o.direction || "up", - vertical = rvertical.test( direction ), - ref = vertical ? "height" : "width", - ref2 = vertical ? "top" : "left", - motion = rpositivemotion.test( direction ), - animation = {}, - show = mode === "show", - wrapper, distance, margin; - - // if already wrapped, the wrapper's properties are my property. #6245 - if ( el.parent().is( ".ui-effects-wrapper" ) ) { - $.effects.save( el.parent(), props ); - } else { - $.effects.save( el, props ); - } - el.show(); - wrapper = $.effects.createWrapper( el ).css({ - overflow: "hidden" - }); - - distance = wrapper[ ref ](); - margin = parseFloat( wrapper.css( ref2 ) ) || 0; - - animation[ ref ] = show ? distance : 0; - if ( !motion ) { - el - .css( vertical ? "bottom" : "right", 0 ) - .css( vertical ? "top" : "left", "auto" ) - .css({ position: "absolute" }); - - animation[ ref2 ] = show ? margin : distance + margin; - } - - // start at 0 if we are showing - if ( show ) { - wrapper.css( ref, 0 ); - if ( ! motion ) { - wrapper.css( ref2, margin + distance ); - } - } - - // Animate - wrapper.animate( animation, { - duration: o.duration, - easing: o.easing, - queue: false, - complete: function() { - if ( mode === "hide" ) { - el.hide(); - } - $.effects.restore( el, props ); - $.effects.removeWrapper( el ); - done(); - } - }); - -}; - -})(jQuery); - -(function( $, undefined ) { - -$.effects.effect.bounce = function( o, done ) { - var el = $( this ), - props = [ "position", "top", "bottom", "left", "right", "height", "width" ], - - // defaults: - mode = $.effects.setMode( el, o.mode || "effect" ), - hide = mode === "hide", - show = mode === "show", - direction = o.direction || "up", - distance = o.distance, - times = o.times || 5, - - // number of internal animations - anims = times * 2 + ( show || hide ? 1 : 0 ), - speed = o.duration / anims, - easing = o.easing, - - // utility: - ref = ( direction === "up" || direction === "down" ) ? "top" : "left", - motion = ( direction === "up" || direction === "left" ), - i, - upAnim, - downAnim, - - // we will need to re-assemble the queue to stack our animations in place - queue = el.queue(), - queuelen = queue.length; - - // Avoid touching opacity to prevent clearType and PNG issues in IE - if ( show || hide ) { - props.push( "opacity" ); - } - - $.effects.save( el, props ); - el.show(); - $.effects.createWrapper( el ); // Create Wrapper - - // default distance for the BIGGEST bounce is the outer Distance / 3 - if ( !distance ) { - distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3; - } - - if ( show ) { - downAnim = { opacity: 1 }; - downAnim[ ref ] = 0; - - // if we are showing, force opacity 0 and set the initial position - // then do the "first" animation - el.css( "opacity", 0 ) - .css( ref, motion ? -distance * 2 : distance * 2 ) - .animate( downAnim, speed, easing ); - } - - // start at the smallest distance if we are hiding - if ( hide ) { - distance = distance / Math.pow( 2, times - 1 ); - } - - downAnim = {}; - downAnim[ ref ] = 0; - // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here - for ( i = 0; i < times; i++ ) { - upAnim = {}; - upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; - - el.animate( upAnim, speed, easing ) - .animate( downAnim, speed, easing ); - - distance = hide ? distance * 2 : distance / 2; - } - - // Last Bounce when Hiding - if ( hide ) { - upAnim = { opacity: 0 }; - upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; - - el.animate( upAnim, speed, easing ); - } - - el.queue(function() { - if ( hide ) { - el.hide(); - } - $.effects.restore( el, props ); - $.effects.removeWrapper( el ); - done(); - }); - - // inject all the animations we just queued to be first in line (after "inprogress") - if ( queuelen > 1) { - queue.splice.apply( queue, - [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) ); - } - el.dequeue(); - -}; - -})(jQuery); - -(function( $, undefined ) { - -$.effects.effect.clip = function( o, done ) { - // Create element - var el = $( this ), - props = [ "position", "top", "bottom", "left", "right", "height", "width" ], - mode = $.effects.setMode( el, o.mode || "hide" ), - show = mode === "show", - direction = o.direction || "vertical", - vert = direction === "vertical", - size = vert ? "height" : "width", - position = vert ? "top" : "left", - animation = {}, - wrapper, animate, distance; - - // Save & Show - $.effects.save( el, props ); - el.show(); - - // Create Wrapper - wrapper = $.effects.createWrapper( el ).css({ - overflow: "hidden" - }); - animate = ( el[0].tagName === "IMG" ) ? wrapper : el; - distance = animate[ size ](); - - // Shift - if ( show ) { - animate.css( size, 0 ); - animate.css( position, distance / 2 ); - } - - // Create Animation Object: - animation[ size ] = show ? distance : 0; - animation[ position ] = show ? 0 : distance / 2; - - // Animate - animate.animate( animation, { - queue: false, - duration: o.duration, - easing: o.easing, - complete: function() { - if ( !show ) { - el.hide(); - } - $.effects.restore( el, props ); - $.effects.removeWrapper( el ); - done(); - } - }); - -}; - -})(jQuery); - -(function( $, undefined ) { - -$.effects.effect.drop = function( o, done ) { - - var el = $( this ), - props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ], - mode = $.effects.setMode( el, o.mode || "hide" ), - show = mode === "show", - direction = o.direction || "left", - ref = ( direction === "up" || direction === "down" ) ? "top" : "left", - motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg", - animation = { - opacity: show ? 1 : 0 - }, - distance; - - // Adjust - $.effects.save( el, props ); - el.show(); - $.effects.createWrapper( el ); - - distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2; - - if ( show ) { - el - .css( "opacity", 0 ) - .css( ref, motion === "pos" ? -distance : distance ); - } - - // Animation - animation[ ref ] = ( show ? - ( motion === "pos" ? "+=" : "-=" ) : - ( motion === "pos" ? "-=" : "+=" ) ) + - distance; - - // Animate - el.animate( animation, { - queue: false, - duration: o.duration, - easing: o.easing, - complete: function() { - if ( mode === "hide" ) { - el.hide(); - } - $.effects.restore( el, props ); - $.effects.removeWrapper( el ); - done(); - } - }); -}; - -})(jQuery); - -(function( $, undefined ) { - -$.effects.effect.explode = function( o, done ) { - - var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3, - cells = rows, - el = $( this ), - mode = $.effects.setMode( el, o.mode || "hide" ), - show = mode === "show", - - // show and then visibility:hidden the element before calculating offset - offset = el.show().css( "visibility", "hidden" ).offset(), - - // width and height of a piece - width = Math.ceil( el.outerWidth() / cells ), - height = Math.ceil( el.outerHeight() / rows ), - pieces = [], - - // loop - i, j, left, top, mx, my; - - // children animate complete: - function childComplete() { - pieces.push( this ); - if ( pieces.length === rows * cells ) { - animComplete(); - } - } - - // clone the element for each row and cell. - for( i = 0; i < rows ; i++ ) { // ===> - top = offset.top + i * height; - my = i - ( rows - 1 ) / 2 ; - - for( j = 0; j < cells ; j++ ) { // ||| - left = offset.left + j * width; - mx = j - ( cells - 1 ) / 2 ; - - // Create a clone of the now hidden main element that will be absolute positioned - // within a wrapper div off the -left and -top equal to size of our pieces - el - .clone() - .appendTo( "body" ) - .wrap( "
" ) - .css({ - position: "absolute", - visibility: "visible", - left: -j * width, - top: -i * height - }) - - // select the wrapper - make it overflow: hidden and absolute positioned based on - // where the original was located +left and +top equal to the size of pieces - .parent() - .addClass( "ui-effects-explode" ) - .css({ - position: "absolute", - overflow: "hidden", - width: width, - height: height, - left: left + ( show ? mx * width : 0 ), - top: top + ( show ? my * height : 0 ), - opacity: show ? 0 : 1 - }).animate({ - left: left + ( show ? 0 : mx * width ), - top: top + ( show ? 0 : my * height ), - opacity: show ? 1 : 0 - }, o.duration || 500, o.easing, childComplete ); - } - } - - function animComplete() { - el.css({ - visibility: "visible" - }); - $( pieces ).remove(); - if ( !show ) { - el.hide(); - } - done(); - } -}; - -})(jQuery); - -(function( $, undefined ) { - -$.effects.effect.fade = function( o, done ) { - var el = $( this ), - mode = $.effects.setMode( el, o.mode || "toggle" ); - - el.animate({ - opacity: mode - }, { - queue: false, - duration: o.duration, - easing: o.easing, - complete: done - }); -}; - -})( jQuery ); - -(function( $, undefined ) { - -$.effects.effect.fold = function( o, done ) { - - // Create element - var el = $( this ), - props = [ "position", "top", "bottom", "left", "right", "height", "width" ], - mode = $.effects.setMode( el, o.mode || "hide" ), - show = mode === "show", - hide = mode === "hide", - size = o.size || 15, - percent = /([0-9]+)%/.exec( size ), - horizFirst = !!o.horizFirst, - widthFirst = show !== horizFirst, - ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ], - duration = o.duration / 2, - wrapper, distance, - animation1 = {}, - animation2 = {}; - - $.effects.save( el, props ); - el.show(); - - // Create Wrapper - wrapper = $.effects.createWrapper( el ).css({ - overflow: "hidden" - }); - distance = widthFirst ? - [ wrapper.width(), wrapper.height() ] : - [ wrapper.height(), wrapper.width() ]; - - if ( percent ) { - size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ]; - } - if ( show ) { - wrapper.css( horizFirst ? { - height: 0, - width: size - } : { - height: size, - width: 0 - }); - } - - // Animation - animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size; - animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0; - - // Animate - wrapper - .animate( animation1, duration, o.easing ) - .animate( animation2, duration, o.easing, function() { - if ( hide ) { - el.hide(); - } - $.effects.restore( el, props ); - $.effects.removeWrapper( el ); - done(); - }); - -}; - -})(jQuery); - -(function( $, undefined ) { - -$.effects.effect.highlight = function( o, done ) { - var elem = $( this ), - props = [ "backgroundImage", "backgroundColor", "opacity" ], - mode = $.effects.setMode( elem, o.mode || "show" ), - animation = { - backgroundColor: elem.css( "backgroundColor" ) - }; - - if (mode === "hide") { - animation.opacity = 0; - } - - $.effects.save( elem, props ); - - elem - .show() - .css({ - backgroundImage: "none", - backgroundColor: o.color || "#ffff99" - }) - .animate( animation, { - queue: false, - duration: o.duration, - easing: o.easing, - complete: function() { - if ( mode === "hide" ) { - elem.hide(); - } - $.effects.restore( elem, props ); - done(); - } - }); -}; - -})(jQuery); - -(function( $, undefined ) { - -$.effects.effect.pulsate = function( o, done ) { - var elem = $( this ), - mode = $.effects.setMode( elem, o.mode || "show" ), - show = mode === "show", - hide = mode === "hide", - showhide = ( show || mode === "hide" ), - - // showing or hiding leaves of the "last" animation - anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ), - duration = o.duration / anims, - animateTo = 0, - queue = elem.queue(), - queuelen = queue.length, - i; - - if ( show || !elem.is(":visible")) { - elem.css( "opacity", 0 ).show(); - animateTo = 1; - } - - // anims - 1 opacity "toggles" - for ( i = 1; i < anims; i++ ) { - elem.animate({ - opacity: animateTo - }, duration, o.easing ); - animateTo = 1 - animateTo; - } - - elem.animate({ - opacity: animateTo - }, duration, o.easing); - - elem.queue(function() { - if ( hide ) { - elem.hide(); - } - done(); - }); - - // We just queued up "anims" animations, we need to put them next in the queue - if ( queuelen > 1 ) { - queue.splice.apply( queue, - [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) ); - } - elem.dequeue(); -}; - -})(jQuery); - -(function( $, undefined ) { - -$.effects.effect.puff = function( o, done ) { - var elem = $( this ), - mode = $.effects.setMode( elem, o.mode || "hide" ), - hide = mode === "hide", - percent = parseInt( o.percent, 10 ) || 150, - factor = percent / 100, - original = { - height: elem.height(), - width: elem.width() - }; - - $.extend( o, { - effect: "scale", - queue: false, - fade: true, - mode: mode, - complete: done, - percent: hide ? percent : 100, - from: hide ? - original : - { - height: original.height * factor, - width: original.width * factor - } - }); - - elem.effect( o ); -}; - -$.effects.effect.scale = function( o, done ) { - - // Create element - var el = $( this ), - options = $.extend( true, {}, o ), - mode = $.effects.setMode( el, o.mode || "effect" ), - percent = parseInt( o.percent, 10 ) || - ( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ), - direction = o.direction || "both", - origin = o.origin, - original = { - height: el.height(), - width: el.width(), - outerHeight: el.outerHeight(), - outerWidth: el.outerWidth() - }, - factor = { - y: direction !== "horizontal" ? (percent / 100) : 1, - x: direction !== "vertical" ? (percent / 100) : 1 - }; - - // We are going to pass this effect to the size effect: - options.effect = "size"; - options.queue = false; - options.complete = done; - - // Set default origin and restore for show/hide - if ( mode !== "effect" ) { - options.origin = origin || ["middle","center"]; - options.restore = true; - } - - options.from = o.from || ( mode === "show" ? { height: 0, width: 0 } : original ); - options.to = { - height: original.height * factor.y, - width: original.width * factor.x, - outerHeight: original.outerHeight * factor.y, - outerWidth: original.outerWidth * factor.x - }; - - // Fade option to support puff - if ( options.fade ) { - if ( mode === "show" ) { - options.from.opacity = 0; - options.to.opacity = 1; - } - if ( mode === "hide" ) { - options.from.opacity = 1; - options.to.opacity = 0; - } - } - - // Animate - el.effect( options ); - -}; - -$.effects.effect.size = function( o, done ) { - - // Create element - var original, baseline, factor, - el = $( this ), - props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ], - - // Always restore - props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ], - - // Copy for children - props2 = [ "width", "height", "overflow" ], - cProps = [ "fontSize" ], - vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ], - hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ], - - // Set options - mode = $.effects.setMode( el, o.mode || "effect" ), - restore = o.restore || mode !== "effect", - scale = o.scale || "both", - origin = o.origin || [ "middle", "center" ], - position = el.css( "position" ), - props = restore ? props0 : props1, - zero = { - height: 0, - width: 0 - }; - - if ( mode === "show" ) { - el.show(); - } - original = { - height: el.height(), - width: el.width(), - outerHeight: el.outerHeight(), - outerWidth: el.outerWidth() - }; - - if ( o.mode === "toggle" && mode === "show" ) { - el.from = o.to || zero; - el.to = o.from || original; - } else { - el.from = o.from || ( mode === "show" ? zero : original ); - el.to = o.to || ( mode === "hide" ? zero : original ); - } - - // Set scaling factor - factor = { - from: { - y: el.from.height / original.height, - x: el.from.width / original.width - }, - to: { - y: el.to.height / original.height, - x: el.to.width / original.width - } - }; - - // Scale the css box - if ( scale === "box" || scale === "both" ) { - - // Vertical props scaling - if ( factor.from.y !== factor.to.y ) { - props = props.concat( vProps ); - el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from ); - el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to ); - } - - // Horizontal props scaling - if ( factor.from.x !== factor.to.x ) { - props = props.concat( hProps ); - el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from ); - el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to ); - } - } - - // Scale the content - if ( scale === "content" || scale === "both" ) { - - // Vertical props scaling - if ( factor.from.y !== factor.to.y ) { - props = props.concat( cProps ).concat( props2 ); - el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from ); - el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to ); - } - } - - $.effects.save( el, props ); - el.show(); - $.effects.createWrapper( el ); - el.css( "overflow", "hidden" ).css( el.from ); - - // Adjust - if (origin) { // Calculate baseline shifts - baseline = $.effects.getBaseline( origin, original ); - el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y; - el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x; - el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y; - el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x; - } - el.css( el.from ); // set top & left - - // Animate - if ( scale === "content" || scale === "both" ) { // Scale the children - - // Add margins/font-size - vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps); - hProps = hProps.concat([ "marginLeft", "marginRight" ]); - props2 = props0.concat(vProps).concat(hProps); - - el.find( "*[width]" ).each( function(){ - var child = $( this ), - c_original = { - height: child.height(), - width: child.width() - }; - if (restore) { - $.effects.save(child, props2); - } - - child.from = { - height: c_original.height * factor.from.y, - width: c_original.width * factor.from.x - }; - child.to = { - height: c_original.height * factor.to.y, - width: c_original.width * factor.to.x - }; - - // Vertical props scaling - if ( factor.from.y !== factor.to.y ) { - child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from ); - child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to ); - } - - // Horizontal props scaling - if ( factor.from.x !== factor.to.x ) { - child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from ); - child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to ); - } - - // Animate children - child.css( child.from ); - child.animate( child.to, o.duration, o.easing, function() { - - // Restore children - if ( restore ) { - $.effects.restore( child, props2 ); - } - }); - }); - } - - // Animate - el.animate( el.to, { - queue: false, - duration: o.duration, - easing: o.easing, - complete: function() { - if ( el.to.opacity === 0 ) { - el.css( "opacity", el.from.opacity ); - } - if( mode === "hide" ) { - el.hide(); - } - $.effects.restore( el, props ); - if ( !restore ) { - - // we need to calculate our new positioning based on the scaling - if ( position === "static" ) { - el.css({ - position: "relative", - top: el.to.top, - left: el.to.left - }); - } else { - $.each([ "top", "left" ], function( idx, pos ) { - el.css( pos, function( _, str ) { - var val = parseInt( str, 10 ), - toRef = idx ? el.to.left : el.to.top; - - // if original was "auto", recalculate the new value from wrapper - if ( str === "auto" ) { - return toRef + "px"; - } - - return val + toRef + "px"; - }); - }); - } - } - - $.effects.removeWrapper( el ); - done(); - } - }); - -}; - -})(jQuery); - -(function( $, undefined ) { - -$.effects.effect.shake = function( o, done ) { - - var el = $( this ), - props = [ "position", "top", "bottom", "left", "right", "height", "width" ], - mode = $.effects.setMode( el, o.mode || "effect" ), - direction = o.direction || "left", - distance = o.distance || 20, - times = o.times || 3, - anims = times * 2 + 1, - speed = Math.round(o.duration/anims), - ref = (direction === "up" || direction === "down") ? "top" : "left", - positiveMotion = (direction === "up" || direction === "left"), - animation = {}, - animation1 = {}, - animation2 = {}, - i, - - // we will need to re-assemble the queue to stack our animations in place - queue = el.queue(), - queuelen = queue.length; - - $.effects.save( el, props ); - el.show(); - $.effects.createWrapper( el ); - - // Animation - animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance; - animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2; - animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2; - - // Animate - el.animate( animation, speed, o.easing ); - - // Shakes - for ( i = 1; i < times; i++ ) { - el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing ); - } - el - .animate( animation1, speed, o.easing ) - .animate( animation, speed / 2, o.easing ) - .queue(function() { - if ( mode === "hide" ) { - el.hide(); - } - $.effects.restore( el, props ); - $.effects.removeWrapper( el ); - done(); - }); - - // inject all the animations we just queued to be first in line (after "inprogress") - if ( queuelen > 1) { - queue.splice.apply( queue, - [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) ); - } - el.dequeue(); - -}; - -})(jQuery); - -(function( $, undefined ) { - -$.effects.effect.slide = function( o, done ) { - - // Create element - var el = $( this ), - props = [ "position", "top", "bottom", "left", "right", "width", "height" ], - mode = $.effects.setMode( el, o.mode || "show" ), - show = mode === "show", - direction = o.direction || "left", - ref = (direction === "up" || direction === "down") ? "top" : "left", - positiveMotion = (direction === "up" || direction === "left"), - distance, - animation = {}; - - // Adjust - $.effects.save( el, props ); - el.show(); - distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ); - - $.effects.createWrapper( el ).css({ - overflow: "hidden" - }); - - if ( show ) { - el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance ); - } - - // Animation - animation[ ref ] = ( show ? - ( positiveMotion ? "+=" : "-=") : - ( positiveMotion ? "-=" : "+=")) + - distance; - - // Animate - el.animate( animation, { - queue: false, - duration: o.duration, - easing: o.easing, - complete: function() { - if ( mode === "hide" ) { - el.hide(); - } - $.effects.restore( el, props ); - $.effects.removeWrapper( el ); - done(); - } - }); -}; - -})(jQuery); - -(function( $, undefined ) { - -$.effects.effect.transfer = function( o, done ) { - var elem = $( this ), - target = $( o.to ), - targetFixed = target.css( "position" ) === "fixed", - body = $("body"), - fixTop = targetFixed ? body.scrollTop() : 0, - fixLeft = targetFixed ? body.scrollLeft() : 0, - endPosition = target.offset(), - animation = { - top: endPosition.top - fixTop , - left: endPosition.left - fixLeft , - height: target.innerHeight(), - width: target.innerWidth() - }, - startPosition = elem.offset(), - transfer = $( '
' ) - .appendTo( document.body ) - .addClass( o.className ) - .css({ - top: startPosition.top - fixTop , - left: startPosition.left - fixLeft , - height: elem.innerHeight(), - width: elem.innerWidth(), - position: targetFixed ? "fixed" : "absolute" - }) - .animate( animation, o.duration, o.easing, function() { - transfer.remove(); - done(); - }); -}; - -})(jQuery); - -(function( $, undefined ) { - -var mouseHandled = false; - -$.widget( "ui.menu", { - version: "1.9.1", - defaultElement: "
    ", - delay: 300, - options: { - icons: { - submenu: "ui-icon-carat-1-e" - }, - menus: "ul", - position: { - my: "left top", - at: "right top" - }, - role: "menu", - - // callbacks - blur: null, - focus: null, - select: null - }, - - _create: function() { - this.activeMenu = this.element; - this.element - .uniqueId() - .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" ) - .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length ) - .attr({ - role: this.options.role, - tabIndex: 0 - }) - // need to catch all clicks on disabled menu - // not possible through _on - .bind( "click" + this.eventNamespace, $.proxy(function( event ) { - if ( this.options.disabled ) { - event.preventDefault(); - } - }, this )); - - if ( this.options.disabled ) { - this.element - .addClass( "ui-state-disabled" ) - .attr( "aria-disabled", "true" ); - } - - this._on({ - // Prevent focus from sticking to links inside menu after clicking - // them (focus should always stay on UL during navigation). - "mousedown .ui-menu-item > a": function( event ) { - event.preventDefault(); - }, - "click .ui-state-disabled > a": function( event ) { - event.preventDefault(); - }, - "click .ui-menu-item:has(a)": function( event ) { - var target = $( event.target ).closest( ".ui-menu-item" ); - if ( !mouseHandled && target.not( ".ui-state-disabled" ).length ) { - mouseHandled = true; - - this.select( event ); - // Open submenu on click - if ( target.has( ".ui-menu" ).length ) { - this.expand( event ); - } else if ( !this.element.is( ":focus" ) ) { - // Redirect focus to the menu - this.element.trigger( "focus", [ true ] ); - - // If the active item is on the top level, let it stay active. - // Otherwise, blur the active item since it is no longer visible. - if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) { - clearTimeout( this.timer ); - } - } - } - }, - "mouseenter .ui-menu-item": function( event ) { - var target = $( event.currentTarget ); - // Remove ui-state-active class from siblings of the newly focused menu item - // to avoid a jump caused by adjacent elements both having a class with a border - target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" ); - this.focus( event, target ); - }, - mouseleave: "collapseAll", - "mouseleave .ui-menu": "collapseAll", - focus: function( event, keepActiveItem ) { - // If there's already an active item, keep it active - // If not, activate the first item - var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 ); - - if ( !keepActiveItem ) { - this.focus( event, item ); - } - }, - blur: function( event ) { - this._delay(function() { - if ( !$.contains( this.element[0], this.document[0].activeElement ) ) { - this.collapseAll( event ); - } - }); - }, - keydown: "_keydown" - }); - - this.refresh(); - - // Clicks outside of a menu collapse any open menus - this._on( this.document, { - click: function( event ) { - if ( !$( event.target ).closest( ".ui-menu" ).length ) { - this.collapseAll( event ); - } - - // Reset the mouseHandled flag - mouseHandled = false; - } - }); - }, - - _destroy: function() { - // Destroy (sub)menus - this.element - .removeAttr( "aria-activedescendant" ) - .find( ".ui-menu" ).andSelf() - .removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" ) - .removeAttr( "role" ) - .removeAttr( "tabIndex" ) - .removeAttr( "aria-labelledby" ) - .removeAttr( "aria-expanded" ) - .removeAttr( "aria-hidden" ) - .removeAttr( "aria-disabled" ) - .removeUniqueId() - .show(); - - // Destroy menu items - this.element.find( ".ui-menu-item" ) - .removeClass( "ui-menu-item" ) - .removeAttr( "role" ) - .removeAttr( "aria-disabled" ) - .children( "a" ) - .removeUniqueId() - .removeClass( "ui-corner-all ui-state-hover" ) - .removeAttr( "tabIndex" ) - .removeAttr( "role" ) - .removeAttr( "aria-haspopup" ) - .children().each( function() { - var elem = $( this ); - if ( elem.data( "ui-menu-submenu-carat" ) ) { - elem.remove(); - } - }); - - // Destroy menu dividers - this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" ); - }, - - _keydown: function( event ) { - var match, prev, character, skip, regex, - preventDefault = true; - - function escape( value ) { - return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ); - } - - switch ( event.keyCode ) { - case $.ui.keyCode.PAGE_UP: - this.previousPage( event ); - break; - case $.ui.keyCode.PAGE_DOWN: - this.nextPage( event ); - break; - case $.ui.keyCode.HOME: - this._move( "first", "first", event ); - break; - case $.ui.keyCode.END: - this._move( "last", "last", event ); - break; - case $.ui.keyCode.UP: - this.previous( event ); - break; - case $.ui.keyCode.DOWN: - this.next( event ); - break; - case $.ui.keyCode.LEFT: - this.collapse( event ); - break; - case $.ui.keyCode.RIGHT: - if ( this.active && !this.active.is( ".ui-state-disabled" ) ) { - this.expand( event ); - } - break; - case $.ui.keyCode.ENTER: - case $.ui.keyCode.SPACE: - this._activate( event ); - break; - case $.ui.keyCode.ESCAPE: - this.collapse( event ); - break; - default: - preventDefault = false; - prev = this.previousFilter || ""; - character = String.fromCharCode( event.keyCode ); - skip = false; - - clearTimeout( this.filterTimer ); - - if ( character === prev ) { - skip = true; - } else { - character = prev + character; - } - - regex = new RegExp( "^" + escape( character ), "i" ); - match = this.activeMenu.children( ".ui-menu-item" ).filter(function() { - return regex.test( $( this ).children( "a" ).text() ); - }); - match = skip && match.index( this.active.next() ) !== -1 ? - this.active.nextAll( ".ui-menu-item" ) : - match; - - // If no matches on the current filter, reset to the last character pressed - // to move down the menu to the first item that starts with that character - if ( !match.length ) { - character = String.fromCharCode( event.keyCode ); - regex = new RegExp( "^" + escape( character ), "i" ); - match = this.activeMenu.children( ".ui-menu-item" ).filter(function() { - return regex.test( $( this ).children( "a" ).text() ); - }); - } - - if ( match.length ) { - this.focus( event, match ); - if ( match.length > 1 ) { - this.previousFilter = character; - this.filterTimer = this._delay(function() { - delete this.previousFilter; - }, 1000 ); - } else { - delete this.previousFilter; - } - } else { - delete this.previousFilter; - } - } - - if ( preventDefault ) { - event.preventDefault(); - } - }, - - _activate: function( event ) { - if ( !this.active.is( ".ui-state-disabled" ) ) { - if ( this.active.children( "a[aria-haspopup='true']" ).length ) { - this.expand( event ); - } else { - this.select( event ); - } - } - }, - - refresh: function() { - // Initialize nested menus - var menus, - icon = this.options.icons.submenu, - submenus = this.element.find( this.options.menus + ":not(.ui-menu)" ) - .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" ) - .hide() - .attr({ - role: this.options.role, - "aria-hidden": "true", - "aria-expanded": "false" - }); - - // Don't refresh list items that are already adapted - menus = submenus.add( this.element ); - - menus.children( ":not(.ui-menu-item):has(a)" ) - .addClass( "ui-menu-item" ) - .attr( "role", "presentation" ) - .children( "a" ) - .uniqueId() - .addClass( "ui-corner-all" ) - .attr({ - tabIndex: -1, - role: this._itemRole() - }); - - // Initialize unlinked menu-items containing spaces and/or dashes only as dividers - menus.children( ":not(.ui-menu-item)" ).each(function() { - var item = $( this ); - // hyphen, em dash, en dash - if ( !/[^\-—–\s]/.test( item.text() ) ) { - item.addClass( "ui-widget-content ui-menu-divider" ); - } - }); - - // Add aria-disabled attribute to any disabled menu item - menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" ); - - submenus.each(function() { - var menu = $( this ), - item = menu.prev( "a" ), - submenuCarat = $( "" ) - .addClass( "ui-menu-icon ui-icon " + icon ) - .data( "ui-menu-submenu-carat", true ); - - item - .attr( "aria-haspopup", "true" ) - .prepend( submenuCarat ); - menu.attr( "aria-labelledby", item.attr( "id" ) ); - }); - - // If the active item has been removed, blur the menu - if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { - this.blur(); - } - }, - - _itemRole: function() { - return { - menu: "menuitem", - listbox: "option" - }[ this.options.role ]; - }, - - focus: function( event, item ) { - var nested, focused; - this.blur( event, event && event.type === "focus" ); - - this._scrollIntoView( item ); - - this.active = item.first(); - focused = this.active.children( "a" ).addClass( "ui-state-focus" ); - // Only update aria-activedescendant if there's a role - // otherwise we assume focus is managed elsewhere - if ( this.options.role ) { - this.element.attr( "aria-activedescendant", focused.attr( "id" ) ); - } - - // Highlight active parent menu item, if any - this.active - .parent() - .closest( ".ui-menu-item" ) - .children( "a:first" ) - .addClass( "ui-state-active" ); - - if ( event && event.type === "keydown" ) { - this._close(); - } else { - this.timer = this._delay(function() { - this._close(); - }, this.delay ); - } - - nested = item.children( ".ui-menu" ); - if ( nested.length && ( /^mouse/.test( event.type ) ) ) { - this._startOpening(nested); - } - this.activeMenu = item.parent(); - - this._trigger( "focus", event, { item: item } ); - }, - - _scrollIntoView: function( item ) { - var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; - if ( this._hasScroll() ) { - borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0; - paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0; - offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; - scroll = this.activeMenu.scrollTop(); - elementHeight = this.activeMenu.height(); - itemHeight = item.height(); - - if ( offset < 0 ) { - this.activeMenu.scrollTop( scroll + offset ); - } else if ( offset + itemHeight > elementHeight ) { - this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); - } - } - }, - - blur: function( event, fromFocus ) { - if ( !fromFocus ) { - clearTimeout( this.timer ); - } - - if ( !this.active ) { - return; - } - - this.active.children( "a" ).removeClass( "ui-state-focus" ); - this.active = null; - - this._trigger( "blur", event, { item: this.active } ); - }, - - _startOpening: function( submenu ) { - clearTimeout( this.timer ); - - // Don't open if already open fixes a Firefox bug that caused a .5 pixel - // shift in the submenu position when mousing over the carat icon - if ( submenu.attr( "aria-hidden" ) !== "true" ) { - return; - } - - this.timer = this._delay(function() { - this._close(); - this._open( submenu ); - }, this.delay ); - }, - - _open: function( submenu ) { - var position = $.extend({ - of: this.active - }, this.options.position ); - - clearTimeout( this.timer ); - this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) ) - .hide() - .attr( "aria-hidden", "true" ); - - submenu - .show() - .removeAttr( "aria-hidden" ) - .attr( "aria-expanded", "true" ) - .position( position ); - }, - - collapseAll: function( event, all ) { - clearTimeout( this.timer ); - this.timer = this._delay(function() { - // If we were passed an event, look for the submenu that contains the event - var currentMenu = all ? this.element : - $( event && event.target ).closest( this.element.find( ".ui-menu" ) ); - - // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway - if ( !currentMenu.length ) { - currentMenu = this.element; - } - - this._close( currentMenu ); - - this.blur( event ); - this.activeMenu = currentMenu; - }, this.delay ); - }, - - // With no arguments, closes the currently active menu - if nothing is active - // it closes all menus. If passed an argument, it will search for menus BELOW - _close: function( startMenu ) { - if ( !startMenu ) { - startMenu = this.active ? this.active.parent() : this.element; - } - - startMenu - .find( ".ui-menu" ) - .hide() - .attr( "aria-hidden", "true" ) - .attr( "aria-expanded", "false" ) - .end() - .find( "a.ui-state-active" ) - .removeClass( "ui-state-active" ); - }, - - collapse: function( event ) { - var newItem = this.active && - this.active.parent().closest( ".ui-menu-item", this.element ); - if ( newItem && newItem.length ) { - this._close(); - this.focus( event, newItem ); - } - }, - - expand: function( event ) { - var newItem = this.active && - this.active - .children( ".ui-menu " ) - .children( ".ui-menu-item" ) - .first(); - - if ( newItem && newItem.length ) { - this._open( newItem.parent() ); - - // Delay so Firefox will not hide activedescendant change in expanding submenu from AT - this._delay(function() { - this.focus( event, newItem ); - }); - } - }, - - next: function( event ) { - this._move( "next", "first", event ); - }, - - previous: function( event ) { - this._move( "prev", "last", event ); - }, - - isFirstItem: function() { - return this.active && !this.active.prevAll( ".ui-menu-item" ).length; - }, - - isLastItem: function() { - return this.active && !this.active.nextAll( ".ui-menu-item" ).length; - }, - - _move: function( direction, filter, event ) { - var next; - if ( this.active ) { - if ( direction === "first" || direction === "last" ) { - next = this.active - [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" ) - .eq( -1 ); - } else { - next = this.active - [ direction + "All" ]( ".ui-menu-item" ) - .eq( 0 ); - } - } - if ( !next || !next.length || !this.active ) { - next = this.activeMenu.children( ".ui-menu-item" )[ filter ](); - } - - this.focus( event, next ); - }, - - nextPage: function( event ) { - var item, base, height; - - if ( !this.active ) { - this.next( event ); - return; - } - if ( this.isLastItem() ) { - return; - } - if ( this._hasScroll() ) { - base = this.active.offset().top; - height = this.element.height(); - this.active.nextAll( ".ui-menu-item" ).each(function() { - item = $( this ); - return item.offset().top - base - height < 0; - }); - - this.focus( event, item ); - } else { - this.focus( event, this.activeMenu.children( ".ui-menu-item" ) - [ !this.active ? "first" : "last" ]() ); - } - }, - - previousPage: function( event ) { - var item, base, height; - if ( !this.active ) { - this.next( event ); - return; - } - if ( this.isFirstItem() ) { - return; - } - if ( this._hasScroll() ) { - base = this.active.offset().top; - height = this.element.height(); - this.active.prevAll( ".ui-menu-item" ).each(function() { - item = $( this ); - return item.offset().top - base + height > 0; - }); - - this.focus( event, item ); - } else { - this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() ); - } - }, - - _hasScroll: function() { - return this.element.outerHeight() < this.element.prop( "scrollHeight" ); - }, - - select: function( event ) { - // TODO: It should never be possible to not have an active item at this - // point, but the tests don't trigger mouseenter before click. - this.active = this.active || $( event.target ).closest( ".ui-menu-item" ); - var ui = { item: this.active }; - if ( !this.active.has( ".ui-menu" ).length ) { - this.collapseAll( event, true ); - } - this._trigger( "select", event, ui ); - } -}); - -}( jQuery )); - -(function( $, undefined ) { - -$.ui = $.ui || {}; - -var cachedScrollbarWidth, - max = Math.max, - abs = Math.abs, - round = Math.round, - rhorizontal = /left|center|right/, - rvertical = /top|center|bottom/, - roffset = /[\+\-]\d+%?/, - rposition = /^\w+/, - rpercent = /%$/, - _position = $.fn.position; - -function getOffsets( offsets, width, height ) { - return [ - parseInt( offsets[ 0 ], 10 ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), - parseInt( offsets[ 1 ], 10 ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) - ]; -} -function parseCss( element, property ) { - return parseInt( $.css( element, property ), 10 ) || 0; -} - -$.position = { - scrollbarWidth: function() { - if ( cachedScrollbarWidth !== undefined ) { - return cachedScrollbarWidth; - } - var w1, w2, - div = $( "
    " ), - innerDiv = div.children()[0]; - - $( "body" ).append( div ); - w1 = innerDiv.offsetWidth; - div.css( "overflow", "scroll" ); - - w2 = innerDiv.offsetWidth; - - if ( w1 === w2 ) { - w2 = div[0].clientWidth; - } - - div.remove(); - - return (cachedScrollbarWidth = w1 - w2); - }, - getScrollInfo: function( within ) { - var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ), - overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ), - hasOverflowX = overflowX === "scroll" || - ( overflowX === "auto" && within.width < within.element[0].scrollWidth ), - hasOverflowY = overflowY === "scroll" || - ( overflowY === "auto" && within.height < within.element[0].scrollHeight ); - return { - width: hasOverflowX ? $.position.scrollbarWidth() : 0, - height: hasOverflowY ? $.position.scrollbarWidth() : 0 - }; - }, - getWithinInfo: function( element ) { - var withinElement = $( element || window ), - isWindow = $.isWindow( withinElement[0] ); - return { - element: withinElement, - isWindow: isWindow, - offset: withinElement.offset() || { left: 0, top: 0 }, - scrollLeft: withinElement.scrollLeft(), - scrollTop: withinElement.scrollTop(), - width: isWindow ? withinElement.width() : withinElement.outerWidth(), - height: isWindow ? withinElement.height() : withinElement.outerHeight() - }; - } -}; - -$.fn.position = function( options ) { - if ( !options || !options.of ) { - return _position.apply( this, arguments ); - } - - // make a copy, we don't want to modify arguments - options = $.extend( {}, options ); - - var atOffset, targetWidth, targetHeight, targetOffset, basePosition, - target = $( options.of ), - within = $.position.getWithinInfo( options.within ), - scrollInfo = $.position.getScrollInfo( within ), - targetElem = target[0], - collision = ( options.collision || "flip" ).split( " " ), - offsets = {}; - - if ( targetElem.nodeType === 9 ) { - targetWidth = target.width(); - targetHeight = target.height(); - targetOffset = { top: 0, left: 0 }; - } else if ( $.isWindow( targetElem ) ) { - targetWidth = target.width(); - targetHeight = target.height(); - targetOffset = { top: target.scrollTop(), left: target.scrollLeft() }; - } else if ( targetElem.preventDefault ) { - // force left top to allow flipping - options.at = "left top"; - targetWidth = targetHeight = 0; - targetOffset = { top: targetElem.pageY, left: targetElem.pageX }; - } else { - targetWidth = target.outerWidth(); - targetHeight = target.outerHeight(); - targetOffset = target.offset(); - } - // clone to reuse original targetOffset later - basePosition = $.extend( {}, targetOffset ); - - // force my and at to have valid horizontal and vertical positions - // if a value is missing or invalid, it will be converted to center - $.each( [ "my", "at" ], function() { - var pos = ( options[ this ] || "" ).split( " " ), - horizontalOffset, - verticalOffset; - - if ( pos.length === 1) { - pos = rhorizontal.test( pos[ 0 ] ) ? - pos.concat( [ "center" ] ) : - rvertical.test( pos[ 0 ] ) ? - [ "center" ].concat( pos ) : - [ "center", "center" ]; - } - pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; - pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; - - // calculate offsets - horizontalOffset = roffset.exec( pos[ 0 ] ); - verticalOffset = roffset.exec( pos[ 1 ] ); - offsets[ this ] = [ - horizontalOffset ? horizontalOffset[ 0 ] : 0, - verticalOffset ? verticalOffset[ 0 ] : 0 - ]; - - // reduce to just the positions without the offsets - options[ this ] = [ - rposition.exec( pos[ 0 ] )[ 0 ], - rposition.exec( pos[ 1 ] )[ 0 ] - ]; - }); - - // normalize collision option - if ( collision.length === 1 ) { - collision[ 1 ] = collision[ 0 ]; - } - - if ( options.at[ 0 ] === "right" ) { - basePosition.left += targetWidth; - } else if ( options.at[ 0 ] === "center" ) { - basePosition.left += targetWidth / 2; - } - - if ( options.at[ 1 ] === "bottom" ) { - basePosition.top += targetHeight; - } else if ( options.at[ 1 ] === "center" ) { - basePosition.top += targetHeight / 2; - } - - atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); - basePosition.left += atOffset[ 0 ]; - basePosition.top += atOffset[ 1 ]; - - return this.each(function() { - var collisionPosition, using, - elem = $( this ), - elemWidth = elem.outerWidth(), - elemHeight = elem.outerHeight(), - marginLeft = parseCss( this, "marginLeft" ), - marginTop = parseCss( this, "marginTop" ), - collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width, - collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height, - position = $.extend( {}, basePosition ), - myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); - - if ( options.my[ 0 ] === "right" ) { - position.left -= elemWidth; - } else if ( options.my[ 0 ] === "center" ) { - position.left -= elemWidth / 2; - } - - if ( options.my[ 1 ] === "bottom" ) { - position.top -= elemHeight; - } else if ( options.my[ 1 ] === "center" ) { - position.top -= elemHeight / 2; - } - - position.left += myOffset[ 0 ]; - position.top += myOffset[ 1 ]; - - // if the browser doesn't support fractions, then round for consistent results - if ( !$.support.offsetFractions ) { - position.left = round( position.left ); - position.top = round( position.top ); - } - - collisionPosition = { - marginLeft: marginLeft, - marginTop: marginTop - }; - - $.each( [ "left", "top" ], function( i, dir ) { - if ( $.ui.position[ collision[ i ] ] ) { - $.ui.position[ collision[ i ] ][ dir ]( position, { - targetWidth: targetWidth, - targetHeight: targetHeight, - elemWidth: elemWidth, - elemHeight: elemHeight, - collisionPosition: collisionPosition, - collisionWidth: collisionWidth, - collisionHeight: collisionHeight, - offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], - my: options.my, - at: options.at, - within: within, - elem : elem - }); - } - }); - - if ( $.fn.bgiframe ) { - elem.bgiframe(); - } - - if ( options.using ) { - // adds feedback as second argument to using callback, if present - using = function( props ) { - var left = targetOffset.left - position.left, - right = left + targetWidth - elemWidth, - top = targetOffset.top - position.top, - bottom = top + targetHeight - elemHeight, - feedback = { - target: { - element: target, - left: targetOffset.left, - top: targetOffset.top, - width: targetWidth, - height: targetHeight - }, - element: { - element: elem, - left: position.left, - top: position.top, - width: elemWidth, - height: elemHeight - }, - horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", - vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" - }; - if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { - feedback.horizontal = "center"; - } - if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { - feedback.vertical = "middle"; - } - if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { - feedback.important = "horizontal"; - } else { - feedback.important = "vertical"; - } - options.using.call( this, props, feedback ); - }; - } - - elem.offset( $.extend( position, { using: using } ) ); - }); -}; - -$.ui.position = { - fit: { - left: function( position, data ) { - var within = data.within, - withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, - outerWidth = within.width, - collisionPosLeft = position.left - data.collisionPosition.marginLeft, - overLeft = withinOffset - collisionPosLeft, - overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, - newOverRight; - - // element is wider than within - if ( data.collisionWidth > outerWidth ) { - // element is initially over the left side of within - if ( overLeft > 0 && overRight <= 0 ) { - newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset; - position.left += overLeft - newOverRight; - // element is initially over right side of within - } else if ( overRight > 0 && overLeft <= 0 ) { - position.left = withinOffset; - // element is initially over both left and right sides of within - } else { - if ( overLeft > overRight ) { - position.left = withinOffset + outerWidth - data.collisionWidth; - } else { - position.left = withinOffset; - } - } - // too far left -> align with left edge - } else if ( overLeft > 0 ) { - position.left += overLeft; - // too far right -> align with right edge - } else if ( overRight > 0 ) { - position.left -= overRight; - // adjust based on position and margin - } else { - position.left = max( position.left - collisionPosLeft, position.left ); - } - }, - top: function( position, data ) { - var within = data.within, - withinOffset = within.isWindow ? within.scrollTop : within.offset.top, - outerHeight = data.within.height, - collisionPosTop = position.top - data.collisionPosition.marginTop, - overTop = withinOffset - collisionPosTop, - overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, - newOverBottom; - - // element is taller than within - if ( data.collisionHeight > outerHeight ) { - // element is initially over the top of within - if ( overTop > 0 && overBottom <= 0 ) { - newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset; - position.top += overTop - newOverBottom; - // element is initially over bottom of within - } else if ( overBottom > 0 && overTop <= 0 ) { - position.top = withinOffset; - // element is initially over both top and bottom of within - } else { - if ( overTop > overBottom ) { - position.top = withinOffset + outerHeight - data.collisionHeight; - } else { - position.top = withinOffset; - } - } - // too far up -> align with top - } else if ( overTop > 0 ) { - position.top += overTop; - // too far down -> align with bottom edge - } else if ( overBottom > 0 ) { - position.top -= overBottom; - // adjust based on position and margin - } else { - position.top = max( position.top - collisionPosTop, position.top ); - } - } - }, - flip: { - left: function( position, data ) { - var within = data.within, - withinOffset = within.offset.left + within.scrollLeft, - outerWidth = within.width, - offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, - collisionPosLeft = position.left - data.collisionPosition.marginLeft, - overLeft = collisionPosLeft - offsetLeft, - overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, - myOffset = data.my[ 0 ] === "left" ? - -data.elemWidth : - data.my[ 0 ] === "right" ? - data.elemWidth : - 0, - atOffset = data.at[ 0 ] === "left" ? - data.targetWidth : - data.at[ 0 ] === "right" ? - -data.targetWidth : - 0, - offset = -2 * data.offset[ 0 ], - newOverRight, - newOverLeft; - - if ( overLeft < 0 ) { - newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset; - if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { - position.left += myOffset + atOffset + offset; - } - } - else if ( overRight > 0 ) { - newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft; - if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { - position.left += myOffset + atOffset + offset; - } - } - }, - top: function( position, data ) { - var within = data.within, - withinOffset = within.offset.top + within.scrollTop, - outerHeight = within.height, - offsetTop = within.isWindow ? within.scrollTop : within.offset.top, - collisionPosTop = position.top - data.collisionPosition.marginTop, - overTop = collisionPosTop - offsetTop, - overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, - top = data.my[ 1 ] === "top", - myOffset = top ? - -data.elemHeight : - data.my[ 1 ] === "bottom" ? - data.elemHeight : - 0, - atOffset = data.at[ 1 ] === "top" ? - data.targetHeight : - data.at[ 1 ] === "bottom" ? - -data.targetHeight : - 0, - offset = -2 * data.offset[ 1 ], - newOverTop, - newOverBottom; - if ( overTop < 0 ) { - newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset; - if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) { - position.top += myOffset + atOffset + offset; - } - } - else if ( overBottom > 0 ) { - newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop; - if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) { - position.top += myOffset + atOffset + offset; - } - } - } - }, - flipfit: { - left: function() { - $.ui.position.flip.left.apply( this, arguments ); - $.ui.position.fit.left.apply( this, arguments ); - }, - top: function() { - $.ui.position.flip.top.apply( this, arguments ); - $.ui.position.fit.top.apply( this, arguments ); - } - } -}; - -// fraction support test -(function () { - var testElement, testElementParent, testElementStyle, offsetLeft, i, - body = document.getElementsByTagName( "body" )[ 0 ], - div = document.createElement( "div" ); - - //Create a "fake body" for testing based on method used in jQuery.support - testElement = document.createElement( body ? "div" : "body" ); - testElementStyle = { - visibility: "hidden", - width: 0, - height: 0, - border: 0, - margin: 0, - background: "none" - }; - if ( body ) { - $.extend( testElementStyle, { - position: "absolute", - left: "-1000px", - top: "-1000px" - }); - } - for ( i in testElementStyle ) { - testElement.style[ i ] = testElementStyle[ i ]; - } - testElement.appendChild( div ); - testElementParent = body || document.documentElement; - testElementParent.insertBefore( testElement, testElementParent.firstChild ); - - div.style.cssText = "position: absolute; left: 10.7432222px;"; - - offsetLeft = $( div ).offset().left; - $.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11; - - testElement.innerHTML = ""; - testElementParent.removeChild( testElement ); -})(); - -// DEPRECATED -if ( $.uiBackCompat !== false ) { - // offset option - (function( $ ) { - var _position = $.fn.position; - $.fn.position = function( options ) { - if ( !options || !options.offset ) { - return _position.call( this, options ); - } - var offset = options.offset.split( " " ), - at = options.at.split( " " ); - if ( offset.length === 1 ) { - offset[ 1 ] = offset[ 0 ]; - } - if ( /^\d/.test( offset[ 0 ] ) ) { - offset[ 0 ] = "+" + offset[ 0 ]; - } - if ( /^\d/.test( offset[ 1 ] ) ) { - offset[ 1 ] = "+" + offset[ 1 ]; - } - if ( at.length === 1 ) { - if ( /left|center|right/.test( at[ 0 ] ) ) { - at[ 1 ] = "center"; - } else { - at[ 1 ] = at[ 0 ]; - at[ 0 ] = "center"; - } - } - return _position.call( this, $.extend( options, { - at: at[ 0 ] + offset[ 0 ] + " " + at[ 1 ] + offset[ 1 ], - offset: undefined - } ) ); - }; - }( jQuery ) ); -} - -}( jQuery ) ); - -(function( $, undefined ) { - -$.widget( "ui.progressbar", { - version: "1.9.1", - options: { - value: 0, - max: 100 - }, - - min: 0, - - _create: function() { - this.element - .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) - .attr({ - role: "progressbar", - "aria-valuemin": this.min, - "aria-valuemax": this.options.max, - "aria-valuenow": this._value() - }); - - this.valueDiv = $( "
    " ) - .appendTo( this.element ); - - this.oldValue = this._value(); - this._refreshValue(); - }, - - _destroy: function() { - this.element - .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) - .removeAttr( "role" ) - .removeAttr( "aria-valuemin" ) - .removeAttr( "aria-valuemax" ) - .removeAttr( "aria-valuenow" ); - - this.valueDiv.remove(); - }, - - value: function( newValue ) { - if ( newValue === undefined ) { - return this._value(); - } - - this._setOption( "value", newValue ); - return this; - }, - - _setOption: function( key, value ) { - if ( key === "value" ) { - this.options.value = value; - this._refreshValue(); - if ( this._value() === this.options.max ) { - this._trigger( "complete" ); - } - } - - this._super( key, value ); - }, - - _value: function() { - var val = this.options.value; - // normalize invalid value - if ( typeof val !== "number" ) { - val = 0; - } - return Math.min( this.options.max, Math.max( this.min, val ) ); - }, - - _percentage: function() { - return 100 * this._value() / this.options.max; - }, - - _refreshValue: function() { - var value = this.value(), - percentage = this._percentage(); - - if ( this.oldValue !== value ) { - this.oldValue = value; - this._trigger( "change" ); - } - - this.valueDiv - .toggle( value > this.min ) - .toggleClass( "ui-corner-right", value === this.options.max ) - .width( percentage.toFixed(0) + "%" ); - this.element.attr( "aria-valuenow", value ); - } -}); - -})( jQuery ); - -(function( $, undefined ) { - -// number of pages in a slider -// (how many times can you page up/down to go through the whole range) -var numPages = 5; - -$.widget( "ui.slider", $.ui.mouse, { - version: "1.9.1", - widgetEventPrefix: "slide", - - options: { - animate: false, - distance: 0, - max: 100, - min: 0, - orientation: "horizontal", - range: false, - step: 1, - value: 0, - values: null - }, - - _create: function() { - var i, handleCount, - o = this.options, - existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ), - handle = "", - handles = []; - - this._keySliding = false; - this._mouseSliding = false; - this._animateOff = true; - this._handleIndex = null; - this._detectOrientation(); - this._mouseInit(); - - this.element - .addClass( "ui-slider" + - " ui-slider-" + this.orientation + - " ui-widget" + - " ui-widget-content" + - " ui-corner-all" + - ( o.disabled ? " ui-slider-disabled ui-disabled" : "" ) ); - - this.range = $([]); - - if ( o.range ) { - if ( o.range === true ) { - if ( !o.values ) { - o.values = [ this._valueMin(), this._valueMin() ]; - } - if ( o.values.length && o.values.length !== 2 ) { - o.values = [ o.values[0], o.values[0] ]; - } - } - - this.range = $( "
    " ) - .appendTo( this.element ) - .addClass( "ui-slider-range" + - // note: this isn't the most fittingly semantic framework class for this element, - // but worked best visually with a variety of themes - " ui-widget-header" + - ( ( o.range === "min" || o.range === "max" ) ? " ui-slider-range-" + o.range : "" ) ); - } - - handleCount = ( o.values && o.values.length ) || 1; - - for ( i = existingHandles.length; i < handleCount; i++ ) { - handles.push( handle ); - } - - this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) ); - - this.handle = this.handles.eq( 0 ); - - this.handles.add( this.range ).filter( "a" ) - .click(function( event ) { - event.preventDefault(); - }) - .mouseenter(function() { - if ( !o.disabled ) { - $( this ).addClass( "ui-state-hover" ); - } - }) - .mouseleave(function() { - $( this ).removeClass( "ui-state-hover" ); - }) - .focus(function() { - if ( !o.disabled ) { - $( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" ); - $( this ).addClass( "ui-state-focus" ); - } else { - $( this ).blur(); - } - }) - .blur(function() { - $( this ).removeClass( "ui-state-focus" ); - }); - - this.handles.each(function( i ) { - $( this ).data( "ui-slider-handle-index", i ); - }); - - this._on( this.handles, { - keydown: function( event ) { - var allowed, curVal, newVal, step, - index = $( event.target ).data( "ui-slider-handle-index" ); - - switch ( event.keyCode ) { - case $.ui.keyCode.HOME: - case $.ui.keyCode.END: - case $.ui.keyCode.PAGE_UP: - case $.ui.keyCode.PAGE_DOWN: - case $.ui.keyCode.UP: - case $.ui.keyCode.RIGHT: - case $.ui.keyCode.DOWN: - case $.ui.keyCode.LEFT: - event.preventDefault(); - if ( !this._keySliding ) { - this._keySliding = true; - $( event.target ).addClass( "ui-state-active" ); - allowed = this._start( event, index ); - if ( allowed === false ) { - return; - } - } - break; - } - - step = this.options.step; - if ( this.options.values && this.options.values.length ) { - curVal = newVal = this.values( index ); - } else { - curVal = newVal = this.value(); - } - - switch ( event.keyCode ) { - case $.ui.keyCode.HOME: - newVal = this._valueMin(); - break; - case $.ui.keyCode.END: - newVal = this._valueMax(); - break; - case $.ui.keyCode.PAGE_UP: - newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) ); - break; - case $.ui.keyCode.PAGE_DOWN: - newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) ); - break; - case $.ui.keyCode.UP: - case $.ui.keyCode.RIGHT: - if ( curVal === this._valueMax() ) { - return; - } - newVal = this._trimAlignValue( curVal + step ); - break; - case $.ui.keyCode.DOWN: - case $.ui.keyCode.LEFT: - if ( curVal === this._valueMin() ) { - return; - } - newVal = this._trimAlignValue( curVal - step ); - break; - } - - this._slide( event, index, newVal ); - }, - keyup: function( event ) { - var index = $( event.target ).data( "ui-slider-handle-index" ); - - if ( this._keySliding ) { - this._keySliding = false; - this._stop( event, index ); - this._change( event, index ); - $( event.target ).removeClass( "ui-state-active" ); - } - } - }); - - this._refreshValue(); - - this._animateOff = false; - }, - - _destroy: function() { - this.handles.remove(); - this.range.remove(); - - this.element - .removeClass( "ui-slider" + - " ui-slider-horizontal" + - " ui-slider-vertical" + - " ui-slider-disabled" + - " ui-widget" + - " ui-widget-content" + - " ui-corner-all" ); - - this._mouseDestroy(); - }, - - _mouseCapture: function( event ) { - var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle, - that = this, - o = this.options; - - if ( o.disabled ) { - return false; - } - - this.elementSize = { - width: this.element.outerWidth(), - height: this.element.outerHeight() - }; - this.elementOffset = this.element.offset(); - - position = { x: event.pageX, y: event.pageY }; - normValue = this._normValueFromMouse( position ); - distance = this._valueMax() - this._valueMin() + 1; - this.handles.each(function( i ) { - var thisDistance = Math.abs( normValue - that.values(i) ); - if ( distance > thisDistance ) { - distance = thisDistance; - closestHandle = $( this ); - index = i; - } - }); - - // workaround for bug #3736 (if both handles of a range are at 0, - // the first is always used as the one with least distance, - // and moving it is obviously prevented by preventing negative ranges) - if( o.range === true && this.values(1) === o.min ) { - index += 1; - closestHandle = $( this.handles[index] ); - } - - allowed = this._start( event, index ); - if ( allowed === false ) { - return false; - } - this._mouseSliding = true; - - this._handleIndex = index; - - closestHandle - .addClass( "ui-state-active" ) - .focus(); - - offset = closestHandle.offset(); - mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" ); - this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { - left: event.pageX - offset.left - ( closestHandle.width() / 2 ), - top: event.pageY - offset.top - - ( closestHandle.height() / 2 ) - - ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) - - ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) + - ( parseInt( closestHandle.css("marginTop"), 10 ) || 0) - }; - - if ( !this.handles.hasClass( "ui-state-hover" ) ) { - this._slide( event, index, normValue ); - } - this._animateOff = true; - return true; - }, - - _mouseStart: function() { - return true; - }, - - _mouseDrag: function( event ) { - var position = { x: event.pageX, y: event.pageY }, - normValue = this._normValueFromMouse( position ); - - this._slide( event, this._handleIndex, normValue ); - - return false; - }, - - _mouseStop: function( event ) { - this.handles.removeClass( "ui-state-active" ); - this._mouseSliding = false; - - this._stop( event, this._handleIndex ); - this._change( event, this._handleIndex ); - - this._handleIndex = null; - this._clickOffset = null; - this._animateOff = false; - - return false; - }, - - _detectOrientation: function() { - this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; - }, - - _normValueFromMouse: function( position ) { - var pixelTotal, - pixelMouse, - percentMouse, - valueTotal, - valueMouse; - - if ( this.orientation === "horizontal" ) { - pixelTotal = this.elementSize.width; - pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 ); - } else { - pixelTotal = this.elementSize.height; - pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 ); - } - - percentMouse = ( pixelMouse / pixelTotal ); - if ( percentMouse > 1 ) { - percentMouse = 1; - } - if ( percentMouse < 0 ) { - percentMouse = 0; - } - if ( this.orientation === "vertical" ) { - percentMouse = 1 - percentMouse; - } - - valueTotal = this._valueMax() - this._valueMin(); - valueMouse = this._valueMin() + percentMouse * valueTotal; - - return this._trimAlignValue( valueMouse ); - }, - - _start: function( event, index ) { - var uiHash = { - handle: this.handles[ index ], - value: this.value() - }; - if ( this.options.values && this.options.values.length ) { - uiHash.value = this.values( index ); - uiHash.values = this.values(); - } - return this._trigger( "start", event, uiHash ); - }, - - _slide: function( event, index, newVal ) { - var otherVal, - newValues, - allowed; - - if ( this.options.values && this.options.values.length ) { - otherVal = this.values( index ? 0 : 1 ); - - if ( ( this.options.values.length === 2 && this.options.range === true ) && - ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) ) - ) { - newVal = otherVal; - } - - if ( newVal !== this.values( index ) ) { - newValues = this.values(); - newValues[ index ] = newVal; - // A slide can be canceled by returning false from the slide callback - allowed = this._trigger( "slide", event, { - handle: this.handles[ index ], - value: newVal, - values: newValues - } ); - otherVal = this.values( index ? 0 : 1 ); - if ( allowed !== false ) { - this.values( index, newVal, true ); - } - } - } else { - if ( newVal !== this.value() ) { - // A slide can be canceled by returning false from the slide callback - allowed = this._trigger( "slide", event, { - handle: this.handles[ index ], - value: newVal - } ); - if ( allowed !== false ) { - this.value( newVal ); - } - } - } - }, - - _stop: function( event, index ) { - var uiHash = { - handle: this.handles[ index ], - value: this.value() - }; - if ( this.options.values && this.options.values.length ) { - uiHash.value = this.values( index ); - uiHash.values = this.values(); - } - - this._trigger( "stop", event, uiHash ); - }, - - _change: function( event, index ) { - if ( !this._keySliding && !this._mouseSliding ) { - var uiHash = { - handle: this.handles[ index ], - value: this.value() - }; - if ( this.options.values && this.options.values.length ) { - uiHash.value = this.values( index ); - uiHash.values = this.values(); - } - - this._trigger( "change", event, uiHash ); - } - }, - - value: function( newValue ) { - if ( arguments.length ) { - this.options.value = this._trimAlignValue( newValue ); - this._refreshValue(); - this._change( null, 0 ); - return; - } - - return this._value(); - }, - - values: function( index, newValue ) { - var vals, - newValues, - i; - - if ( arguments.length > 1 ) { - this.options.values[ index ] = this._trimAlignValue( newValue ); - this._refreshValue(); - this._change( null, index ); - return; - } - - if ( arguments.length ) { - if ( $.isArray( arguments[ 0 ] ) ) { - vals = this.options.values; - newValues = arguments[ 0 ]; - for ( i = 0; i < vals.length; i += 1 ) { - vals[ i ] = this._trimAlignValue( newValues[ i ] ); - this._change( null, i ); - } - this._refreshValue(); - } else { - if ( this.options.values && this.options.values.length ) { - return this._values( index ); - } else { - return this.value(); - } - } - } else { - return this._values(); - } - }, - - _setOption: function( key, value ) { - var i, - valsLength = 0; - - if ( $.isArray( this.options.values ) ) { - valsLength = this.options.values.length; - } - - $.Widget.prototype._setOption.apply( this, arguments ); - - switch ( key ) { - case "disabled": - if ( value ) { - this.handles.filter( ".ui-state-focus" ).blur(); - this.handles.removeClass( "ui-state-hover" ); - this.handles.prop( "disabled", true ); - this.element.addClass( "ui-disabled" ); - } else { - this.handles.prop( "disabled", false ); - this.element.removeClass( "ui-disabled" ); - } - break; - case "orientation": - this._detectOrientation(); - this.element - .removeClass( "ui-slider-horizontal ui-slider-vertical" ) - .addClass( "ui-slider-" + this.orientation ); - this._refreshValue(); - break; - case "value": - this._animateOff = true; - this._refreshValue(); - this._change( null, 0 ); - this._animateOff = false; - break; - case "values": - this._animateOff = true; - this._refreshValue(); - for ( i = 0; i < valsLength; i += 1 ) { - this._change( null, i ); - } - this._animateOff = false; - break; - case "min": - case "max": - this._animateOff = true; - this._refreshValue(); - this._animateOff = false; - break; - } - }, - - //internal value getter - // _value() returns value trimmed by min and max, aligned by step - _value: function() { - var val = this.options.value; - val = this._trimAlignValue( val ); - - return val; - }, - - //internal values getter - // _values() returns array of values trimmed by min and max, aligned by step - // _values( index ) returns single value trimmed by min and max, aligned by step - _values: function( index ) { - var val, - vals, - i; - - if ( arguments.length ) { - val = this.options.values[ index ]; - val = this._trimAlignValue( val ); - - return val; - } else { - // .slice() creates a copy of the array - // this copy gets trimmed by min and max and then returned - vals = this.options.values.slice(); - for ( i = 0; i < vals.length; i+= 1) { - vals[ i ] = this._trimAlignValue( vals[ i ] ); - } - - return vals; - } - }, - - // returns the step-aligned value that val is closest to, between (inclusive) min and max - _trimAlignValue: function( val ) { - if ( val <= this._valueMin() ) { - return this._valueMin(); - } - if ( val >= this._valueMax() ) { - return this._valueMax(); - } - var step = ( this.options.step > 0 ) ? this.options.step : 1, - valModStep = (val - this._valueMin()) % step, - alignValue = val - valModStep; - - if ( Math.abs(valModStep) * 2 >= step ) { - alignValue += ( valModStep > 0 ) ? step : ( -step ); - } - - // Since JavaScript has problems with large floats, round - // the final value to 5 digits after the decimal point (see #4124) - return parseFloat( alignValue.toFixed(5) ); - }, - - _valueMin: function() { - return this.options.min; - }, - - _valueMax: function() { - return this.options.max; - }, - - _refreshValue: function() { - var lastValPercent, valPercent, value, valueMin, valueMax, - oRange = this.options.range, - o = this.options, - that = this, - animate = ( !this._animateOff ) ? o.animate : false, - _set = {}; - - if ( this.options.values && this.options.values.length ) { - this.handles.each(function( i ) { - valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100; - _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; - $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); - if ( that.options.range === true ) { - if ( that.orientation === "horizontal" ) { - if ( i === 0 ) { - that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate ); - } - if ( i === 1 ) { - that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); - } - } else { - if ( i === 0 ) { - that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate ); - } - if ( i === 1 ) { - that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); - } - } - } - lastValPercent = valPercent; - }); - } else { - value = this.value(); - valueMin = this._valueMin(); - valueMax = this._valueMax(); - valPercent = ( valueMax !== valueMin ) ? - ( value - valueMin ) / ( valueMax - valueMin ) * 100 : - 0; - _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; - this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); - - if ( oRange === "min" && this.orientation === "horizontal" ) { - this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate ); - } - if ( oRange === "max" && this.orientation === "horizontal" ) { - this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); - } - if ( oRange === "min" && this.orientation === "vertical" ) { - this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate ); - } - if ( oRange === "max" && this.orientation === "vertical" ) { - this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); - } - } - } - -}); - -}(jQuery)); - -(function( $ ) { - -function modifier( fn ) { - return function() { - var previous = this.element.val(); - fn.apply( this, arguments ); - this._refresh(); - if ( previous !== this.element.val() ) { - this._trigger( "change" ); - } - }; -} - -$.widget( "ui.spinner", { - version: "1.9.1", - defaultElement: "", - widgetEventPrefix: "spin", - options: { - culture: null, - icons: { - down: "ui-icon-triangle-1-s", - up: "ui-icon-triangle-1-n" - }, - incremental: true, - max: null, - min: null, - numberFormat: null, - page: 10, - step: 1, - - change: null, - spin: null, - start: null, - stop: null - }, - - _create: function() { - // handle string values that need to be parsed - this._setOption( "max", this.options.max ); - this._setOption( "min", this.options.min ); - this._setOption( "step", this.options.step ); - - // format the value, but don't constrain - this._value( this.element.val(), true ); - - this._draw(); - this._on( this._events ); - this._refresh(); - - // turning off autocomplete prevents the browser from remembering the - // value when navigating through history, so we re-enable autocomplete - // if the page is unloaded before the widget is destroyed. #7790 - this._on( this.window, { - beforeunload: function() { - this.element.removeAttr( "autocomplete" ); - } - }); - }, - - _getCreateOptions: function() { - var options = {}, - element = this.element; - - $.each( [ "min", "max", "step" ], function( i, option ) { - var value = element.attr( option ); - if ( value !== undefined && value.length ) { - options[ option ] = value; - } - }); - - return options; - }, - - _events: { - keydown: function( event ) { - if ( this._start( event ) && this._keydown( event ) ) { - event.preventDefault(); - } - }, - keyup: "_stop", - focus: function() { - this.previous = this.element.val(); - }, - blur: function( event ) { - if ( this.cancelBlur ) { - delete this.cancelBlur; - return; - } - - this._refresh(); - if ( this.previous !== this.element.val() ) { - this._trigger( "change", event ); - } - }, - mousewheel: function( event, delta ) { - if ( !delta ) { - return; - } - if ( !this.spinning && !this._start( event ) ) { - return false; - } - - this._spin( (delta > 0 ? 1 : -1) * this.options.step, event ); - clearTimeout( this.mousewheelTimer ); - this.mousewheelTimer = this._delay(function() { - if ( this.spinning ) { - this._stop( event ); - } - }, 100 ); - event.preventDefault(); - }, - "mousedown .ui-spinner-button": function( event ) { - var previous; - - // We never want the buttons to have focus; whenever the user is - // interacting with the spinner, the focus should be on the input. - // If the input is focused then this.previous is properly set from - // when the input first received focus. If the input is not focused - // then we need to set this.previous based on the value before spinning. - previous = this.element[0] === this.document[0].activeElement ? - this.previous : this.element.val(); - function checkFocus() { - var isActive = this.element[0] === this.document[0].activeElement; - if ( !isActive ) { - this.element.focus(); - this.previous = previous; - // support: IE - // IE sets focus asynchronously, so we need to check if focus - // moved off of the input because the user clicked on the button. - this._delay(function() { - this.previous = previous; - }); - } - } - - // ensure focus is on (or stays on) the text field - event.preventDefault(); - checkFocus.call( this ); - - // support: IE - // IE doesn't prevent moving focus even with event.preventDefault() - // so we set a flag to know when we should ignore the blur event - // and check (again) if focus moved off of the input. - this.cancelBlur = true; - this._delay(function() { - delete this.cancelBlur; - checkFocus.call( this ); - }); - - if ( this._start( event ) === false ) { - return; - } - - this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event ); - }, - "mouseup .ui-spinner-button": "_stop", - "mouseenter .ui-spinner-button": function( event ) { - // button will add ui-state-active if mouse was down while mouseleave and kept down - if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) { - return; - } - - if ( this._start( event ) === false ) { - return false; - } - this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event ); - }, - // TODO: do we really want to consider this a stop? - // shouldn't we just stop the repeater and wait until mouseup before - // we trigger the stop event? - "mouseleave .ui-spinner-button": "_stop" - }, - - _draw: function() { - var uiSpinner = this.uiSpinner = this.element - .addClass( "ui-spinner-input" ) - .attr( "autocomplete", "off" ) - .wrap( this._uiSpinnerHtml() ) - .parent() - // add buttons - .append( this._buttonHtml() ); - - this.element.attr( "role", "spinbutton" ); - - // button bindings - this.buttons = uiSpinner.find( ".ui-spinner-button" ) - .attr( "tabIndex", -1 ) - .button() - .removeClass( "ui-corner-all" ); - - // IE 6 doesn't understand height: 50% for the buttons - // unless the wrapper has an explicit height - if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) && - uiSpinner.height() > 0 ) { - uiSpinner.height( uiSpinner.height() ); - } - - // disable spinner if element was already disabled - if ( this.options.disabled ) { - this.disable(); - } - }, - - _keydown: function( event ) { - var options = this.options, - keyCode = $.ui.keyCode; - - switch ( event.keyCode ) { - case keyCode.UP: - this._repeat( null, 1, event ); - return true; - case keyCode.DOWN: - this._repeat( null, -1, event ); - return true; - case keyCode.PAGE_UP: - this._repeat( null, options.page, event ); - return true; - case keyCode.PAGE_DOWN: - this._repeat( null, -options.page, event ); - return true; - } - - return false; - }, - - _uiSpinnerHtml: function() { - return ""; - }, - - _buttonHtml: function() { - return "" + - "" + - "" + - "" + - "" + - "" + - ""; - }, - - _start: function( event ) { - if ( !this.spinning && this._trigger( "start", event ) === false ) { - return false; - } - - if ( !this.counter ) { - this.counter = 1; - } - this.spinning = true; - return true; - }, - - _repeat: function( i, steps, event ) { - i = i || 500; - - clearTimeout( this.timer ); - this.timer = this._delay(function() { - this._repeat( 40, steps, event ); - }, i ); - - this._spin( steps * this.options.step, event ); - }, - - _spin: function( step, event ) { - var value = this.value() || 0; - - if ( !this.counter ) { - this.counter = 1; - } - - value = this._adjustValue( value + step * this._increment( this.counter ) ); - - if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) { - this._value( value ); - this.counter++; - } - }, - - _increment: function( i ) { - var incremental = this.options.incremental; - - if ( incremental ) { - return $.isFunction( incremental ) ? - incremental( i ) : - Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 ); - } - - return 1; - }, - - _precision: function() { - var precision = this._precisionOf( this.options.step ); - if ( this.options.min !== null ) { - precision = Math.max( precision, this._precisionOf( this.options.min ) ); - } - return precision; - }, - - _precisionOf: function( num ) { - var str = num.toString(), - decimal = str.indexOf( "." ); - return decimal === -1 ? 0 : str.length - decimal - 1; - }, - - _adjustValue: function( value ) { - var base, aboveMin, - options = this.options; - - // make sure we're at a valid step - // - find out where we are relative to the base (min or 0) - base = options.min !== null ? options.min : 0; - aboveMin = value - base; - // - round to the nearest step - aboveMin = Math.round(aboveMin / options.step) * options.step; - // - rounding is based on 0, so adjust back to our base - value = base + aboveMin; - - // fix precision from bad JS floating point math - value = parseFloat( value.toFixed( this._precision() ) ); - - // clamp the value - if ( options.max !== null && value > options.max) { - return options.max; - } - if ( options.min !== null && value < options.min ) { - return options.min; - } - - return value; - }, - - _stop: function( event ) { - if ( !this.spinning ) { - return; - } - - clearTimeout( this.timer ); - clearTimeout( this.mousewheelTimer ); - this.counter = 0; - this.spinning = false; - this._trigger( "stop", event ); - }, - - _setOption: function( key, value ) { - if ( key === "culture" || key === "numberFormat" ) { - var prevValue = this._parse( this.element.val() ); - this.options[ key ] = value; - this.element.val( this._format( prevValue ) ); - return; - } - - if ( key === "max" || key === "min" || key === "step" ) { - if ( typeof value === "string" ) { - value = this._parse( value ); - } - } - - this._super( key, value ); - - if ( key === "disabled" ) { - if ( value ) { - this.element.prop( "disabled", true ); - this.buttons.button( "disable" ); - } else { - this.element.prop( "disabled", false ); - this.buttons.button( "enable" ); - } - } - }, - - _setOptions: modifier(function( options ) { - this._super( options ); - this._value( this.element.val() ); - }), - - _parse: function( val ) { - if ( typeof val === "string" && val !== "" ) { - val = window.Globalize && this.options.numberFormat ? - Globalize.parseFloat( val, 10, this.options.culture ) : +val; - } - return val === "" || isNaN( val ) ? null : val; - }, - - _format: function( value ) { - if ( value === "" ) { - return ""; - } - return window.Globalize && this.options.numberFormat ? - Globalize.format( value, this.options.numberFormat, this.options.culture ) : - value; - }, - - _refresh: function() { - this.element.attr({ - "aria-valuemin": this.options.min, - "aria-valuemax": this.options.max, - // TODO: what should we do with values that can't be parsed? - "aria-valuenow": this._parse( this.element.val() ) - }); - }, - - // update the value without triggering change - _value: function( value, allowAny ) { - var parsed; - if ( value !== "" ) { - parsed = this._parse( value ); - if ( parsed !== null ) { - if ( !allowAny ) { - parsed = this._adjustValue( parsed ); - } - value = this._format( parsed ); - } - } - this.element.val( value ); - this._refresh(); - }, - - _destroy: function() { - this.element - .removeClass( "ui-spinner-input" ) - .prop( "disabled", false ) - .removeAttr( "autocomplete" ) - .removeAttr( "role" ) - .removeAttr( "aria-valuemin" ) - .removeAttr( "aria-valuemax" ) - .removeAttr( "aria-valuenow" ); - this.uiSpinner.replaceWith( this.element ); - }, - - stepUp: modifier(function( steps ) { - this._stepUp( steps ); - }), - _stepUp: function( steps ) { - this._spin( (steps || 1) * this.options.step ); - }, - - stepDown: modifier(function( steps ) { - this._stepDown( steps ); - }), - _stepDown: function( steps ) { - this._spin( (steps || 1) * -this.options.step ); - }, - - pageUp: modifier(function( pages ) { - this._stepUp( (pages || 1) * this.options.page ); - }), - - pageDown: modifier(function( pages ) { - this._stepDown( (pages || 1) * this.options.page ); - }), - - value: function( newVal ) { - if ( !arguments.length ) { - return this._parse( this.element.val() ); - } - modifier( this._value ).call( this, newVal ); - }, - - widget: function() { - return this.uiSpinner; - } -}); - -}( jQuery ) ); - -(function( $, undefined ) { - -var tabId = 0, - rhash = /#.*$/; - -function getNextTabId() { - return ++tabId; -} - -function isLocal( anchor ) { - return anchor.hash.length > 1 && - anchor.href.replace( rhash, "" ) === location.href.replace( rhash, "" ); -} - -$.widget( "ui.tabs", { - version: "1.9.1", - delay: 300, - options: { - active: null, - collapsible: false, - event: "click", - heightStyle: "content", - hide: null, - show: null, - - // callbacks - activate: null, - beforeActivate: null, - beforeLoad: null, - load: null - }, - - _create: function() { - var that = this, - options = this.options, - active = options.active, - locationHash = location.hash.substring( 1 ); - - this.running = false; - - this.element - .addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" ) - .toggleClass( "ui-tabs-collapsible", options.collapsible ) - // Prevent users from focusing disabled tabs via click - .delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) { - if ( $( this ).is( ".ui-state-disabled" ) ) { - event.preventDefault(); - } - }) - // support: IE <9 - // Preventing the default action in mousedown doesn't prevent IE - // from focusing the element, so if the anchor gets focused, blur. - // We don't have to worry about focusing the previously focused - // element since clicking on a non-focusable element should focus - // the body anyway. - .delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() { - if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) { - this.blur(); - } - }); - - this._processTabs(); - - if ( active === null ) { - // check the fragment identifier in the URL - if ( locationHash ) { - this.tabs.each(function( i, tab ) { - if ( $( tab ).attr( "aria-controls" ) === locationHash ) { - active = i; - return false; - } - }); - } - - // check for a tab marked active via a class - if ( active === null ) { - active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) ); - } - - // no active tab, set to false - if ( active === null || active === -1 ) { - active = this.tabs.length ? 0 : false; - } - } - - // handle numbers: negative, out of range - if ( active !== false ) { - active = this.tabs.index( this.tabs.eq( active ) ); - if ( active === -1 ) { - active = options.collapsible ? false : 0; - } - } - options.active = active; - - // don't allow collapsible: false and active: false - if ( !options.collapsible && options.active === false && this.anchors.length ) { - options.active = 0; - } - - // Take disabling tabs via class attribute from HTML - // into account and update option properly. - if ( $.isArray( options.disabled ) ) { - options.disabled = $.unique( options.disabled.concat( - $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) { - return that.tabs.index( li ); - }) - ) ).sort(); - } - - // check for length avoids error when initializing empty list - if ( this.options.active !== false && this.anchors.length ) { - this.active = this._findActive( this.options.active ); - } else { - this.active = $(); - } - - this._refresh(); - - if ( this.active.length ) { - this.load( options.active ); - } - }, - - _getCreateEventData: function() { - return { - tab: this.active, - panel: !this.active.length ? $() : this._getPanelForTab( this.active ) - }; - }, - - _tabKeydown: function( event ) { - var focusedTab = $( this.document[0].activeElement ).closest( "li" ), - selectedIndex = this.tabs.index( focusedTab ), - goingForward = true; - - if ( this._handlePageNav( event ) ) { - return; - } - - switch ( event.keyCode ) { - case $.ui.keyCode.RIGHT: - case $.ui.keyCode.DOWN: - selectedIndex++; - break; - case $.ui.keyCode.UP: - case $.ui.keyCode.LEFT: - goingForward = false; - selectedIndex--; - break; - case $.ui.keyCode.END: - selectedIndex = this.anchors.length - 1; - break; - case $.ui.keyCode.HOME: - selectedIndex = 0; - break; - case $.ui.keyCode.SPACE: - // Activate only, no collapsing - event.preventDefault(); - clearTimeout( this.activating ); - this._activate( selectedIndex ); - return; - case $.ui.keyCode.ENTER: - // Toggle (cancel delayed activation, allow collapsing) - event.preventDefault(); - clearTimeout( this.activating ); - // Determine if we should collapse or activate - this._activate( selectedIndex === this.options.active ? false : selectedIndex ); - return; - default: - return; - } - - // Focus the appropriate tab, based on which key was pressed - event.preventDefault(); - clearTimeout( this.activating ); - selectedIndex = this._focusNextTab( selectedIndex, goingForward ); - - // Navigating with control key will prevent automatic activation - if ( !event.ctrlKey ) { - // Update aria-selected immediately so that AT think the tab is already selected. - // Otherwise AT may confuse the user by stating that they need to activate the tab, - // but the tab will already be activated by the time the announcement finishes. - focusedTab.attr( "aria-selected", "false" ); - this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" ); - - this.activating = this._delay(function() { - this.option( "active", selectedIndex ); - }, this.delay ); - } - }, - - _panelKeydown: function( event ) { - if ( this._handlePageNav( event ) ) { - return; - } - - // Ctrl+up moves focus to the current tab - if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) { - event.preventDefault(); - this.active.focus(); - } - }, - - // Alt+page up/down moves focus to the previous/next tab (and activates) - _handlePageNav: function( event ) { - if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) { - this._activate( this._focusNextTab( this.options.active - 1, false ) ); - return true; - } - if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) { - this._activate( this._focusNextTab( this.options.active + 1, true ) ); - return true; - } - }, - - _findNextTab: function( index, goingForward ) { - var lastTabIndex = this.tabs.length - 1; - - function constrain() { - if ( index > lastTabIndex ) { - index = 0; - } - if ( index < 0 ) { - index = lastTabIndex; - } - return index; - } - - while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) { - index = goingForward ? index + 1 : index - 1; - } - - return index; - }, - - _focusNextTab: function( index, goingForward ) { - index = this._findNextTab( index, goingForward ); - this.tabs.eq( index ).focus(); - return index; - }, - - _setOption: function( key, value ) { - if ( key === "active" ) { - // _activate() will handle invalid values and update this.options - this._activate( value ); - return; - } - - if ( key === "disabled" ) { - // don't use the widget factory's disabled handling - this._setupDisabled( value ); - return; - } - - this._super( key, value); - - if ( key === "collapsible" ) { - this.element.toggleClass( "ui-tabs-collapsible", value ); - // Setting collapsible: false while collapsed; open first panel - if ( !value && this.options.active === false ) { - this._activate( 0 ); - } - } - - if ( key === "event" ) { - this._setupEvents( value ); - } - - if ( key === "heightStyle" ) { - this._setupHeightStyle( value ); - } - }, - - _tabId: function( tab ) { - return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId(); - }, - - _sanitizeSelector: function( hash ) { - return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : ""; - }, - - refresh: function() { - var options = this.options, - lis = this.tablist.children( ":has(a[href])" ); - - // get disabled tabs from class attribute from HTML - // this will get converted to a boolean if needed in _refresh() - options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) { - return lis.index( tab ); - }); - - this._processTabs(); - - // was collapsed or no tabs - if ( options.active === false || !this.anchors.length ) { - options.active = false; - this.active = $(); - // was active, but active tab is gone - } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) { - // all remaining tabs are disabled - if ( this.tabs.length === options.disabled.length ) { - options.active = false; - this.active = $(); - // activate previous tab - } else { - this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) ); - } - // was active, active tab still exists - } else { - // make sure active index is correct - options.active = this.tabs.index( this.active ); - } - - this._refresh(); - }, - - _refresh: function() { - this._setupDisabled( this.options.disabled ); - this._setupEvents( this.options.event ); - this._setupHeightStyle( this.options.heightStyle ); - - this.tabs.not( this.active ).attr({ - "aria-selected": "false", - tabIndex: -1 - }); - this.panels.not( this._getPanelForTab( this.active ) ) - .hide() - .attr({ - "aria-expanded": "false", - "aria-hidden": "true" - }); - - // Make sure one tab is in the tab order - if ( !this.active.length ) { - this.tabs.eq( 0 ).attr( "tabIndex", 0 ); - } else { - this.active - .addClass( "ui-tabs-active ui-state-active" ) - .attr({ - "aria-selected": "true", - tabIndex: 0 - }); - this._getPanelForTab( this.active ) - .show() - .attr({ - "aria-expanded": "true", - "aria-hidden": "false" - }); - } - }, - - _processTabs: function() { - var that = this; - - this.tablist = this._getList() - .addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ) - .attr( "role", "tablist" ); - - this.tabs = this.tablist.find( "> li:has(a[href])" ) - .addClass( "ui-state-default ui-corner-top" ) - .attr({ - role: "tab", - tabIndex: -1 - }); - - this.anchors = this.tabs.map(function() { - return $( "a", this )[ 0 ]; - }) - .addClass( "ui-tabs-anchor" ) - .attr({ - role: "presentation", - tabIndex: -1 - }); - - this.panels = $(); - - this.anchors.each(function( i, anchor ) { - var selector, panel, panelId, - anchorId = $( anchor ).uniqueId().attr( "id" ), - tab = $( anchor ).closest( "li" ), - originalAriaControls = tab.attr( "aria-controls" ); - - // inline tab - if ( isLocal( anchor ) ) { - selector = anchor.hash; - panel = that.element.find( that._sanitizeSelector( selector ) ); - // remote tab - } else { - panelId = that._tabId( tab ); - selector = "#" + panelId; - panel = that.element.find( selector ); - if ( !panel.length ) { - panel = that._createPanel( panelId ); - panel.insertAfter( that.panels[ i - 1 ] || that.tablist ); - } - panel.attr( "aria-live", "polite" ); - } - - if ( panel.length) { - that.panels = that.panels.add( panel ); - } - if ( originalAriaControls ) { - tab.data( "ui-tabs-aria-controls", originalAriaControls ); - } - tab.attr({ - "aria-controls": selector.substring( 1 ), - "aria-labelledby": anchorId - }); - panel.attr( "aria-labelledby", anchorId ); - }); - - this.panels - .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) - .attr( "role", "tabpanel" ); - }, - - // allow overriding how to find the list for rare usage scenarios (#7715) - _getList: function() { - return this.element.find( "ol,ul" ).eq( 0 ); - }, - - _createPanel: function( id ) { - return $( "
    " ) - .attr( "id", id ) - .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) - .data( "ui-tabs-destroy", true ); - }, - - _setupDisabled: function( disabled ) { - if ( $.isArray( disabled ) ) { - if ( !disabled.length ) { - disabled = false; - } else if ( disabled.length === this.anchors.length ) { - disabled = true; - } - } - - // disable tabs - for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) { - if ( disabled === true || $.inArray( i, disabled ) !== -1 ) { - $( li ) - .addClass( "ui-state-disabled" ) - .attr( "aria-disabled", "true" ); - } else { - $( li ) - .removeClass( "ui-state-disabled" ) - .removeAttr( "aria-disabled" ); - } - } - - this.options.disabled = disabled; - }, - - _setupEvents: function( event ) { - var events = { - click: function( event ) { - event.preventDefault(); - } - }; - if ( event ) { - $.each( event.split(" "), function( index, eventName ) { - events[ eventName ] = "_eventHandler"; - }); - } - - this._off( this.anchors.add( this.tabs ).add( this.panels ) ); - this._on( this.anchors, events ); - this._on( this.tabs, { keydown: "_tabKeydown" } ); - this._on( this.panels, { keydown: "_panelKeydown" } ); - - this._focusable( this.tabs ); - this._hoverable( this.tabs ); - }, - - _setupHeightStyle: function( heightStyle ) { - var maxHeight, overflow, - parent = this.element.parent(); - - if ( heightStyle === "fill" ) { - // IE 6 treats height like minHeight, so we need to turn off overflow - // in order to get a reliable height - // we use the minHeight support test because we assume that only - // browsers that don't support minHeight will treat height as minHeight - if ( !$.support.minHeight ) { - overflow = parent.css( "overflow" ); - parent.css( "overflow", "hidden"); - } - maxHeight = parent.height(); - this.element.siblings( ":visible" ).each(function() { - var elem = $( this ), - position = elem.css( "position" ); - - if ( position === "absolute" || position === "fixed" ) { - return; - } - maxHeight -= elem.outerHeight( true ); - }); - if ( overflow ) { - parent.css( "overflow", overflow ); - } - - this.element.children().not( this.panels ).each(function() { - maxHeight -= $( this ).outerHeight( true ); - }); - - this.panels.each(function() { - $( this ).height( Math.max( 0, maxHeight - - $( this ).innerHeight() + $( this ).height() ) ); - }) - .css( "overflow", "auto" ); - } else if ( heightStyle === "auto" ) { - maxHeight = 0; - this.panels.each(function() { - maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() ); - }).height( maxHeight ); - } - }, - - _eventHandler: function( event ) { - var options = this.options, - active = this.active, - anchor = $( event.currentTarget ), - tab = anchor.closest( "li" ), - clickedIsActive = tab[ 0 ] === active[ 0 ], - collapsing = clickedIsActive && options.collapsible, - toShow = collapsing ? $() : this._getPanelForTab( tab ), - toHide = !active.length ? $() : this._getPanelForTab( active ), - eventData = { - oldTab: active, - oldPanel: toHide, - newTab: collapsing ? $() : tab, - newPanel: toShow - }; - - event.preventDefault(); - - if ( tab.hasClass( "ui-state-disabled" ) || - // tab is already loading - tab.hasClass( "ui-tabs-loading" ) || - // can't switch durning an animation - this.running || - // click on active header, but not collapsible - ( clickedIsActive && !options.collapsible ) || - // allow canceling activation - ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { - return; - } - - options.active = collapsing ? false : this.tabs.index( tab ); - - this.active = clickedIsActive ? $() : tab; - if ( this.xhr ) { - this.xhr.abort(); - } - - if ( !toHide.length && !toShow.length ) { - $.error( "jQuery UI Tabs: Mismatching fragment identifier." ); - } - - if ( toShow.length ) { - this.load( this.tabs.index( tab ), event ); - } - this._toggle( event, eventData ); - }, - - // handles show/hide for selecting tabs - _toggle: function( event, eventData ) { - var that = this, - toShow = eventData.newPanel, - toHide = eventData.oldPanel; - - this.running = true; - - function complete() { - that.running = false; - that._trigger( "activate", event, eventData ); - } - - function show() { - eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" ); - - if ( toShow.length && that.options.show ) { - that._show( toShow, that.options.show, complete ); - } else { - toShow.show(); - complete(); - } - } - - // start out by hiding, then showing, then completing - if ( toHide.length && this.options.hide ) { - this._hide( toHide, this.options.hide, function() { - eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" ); - show(); - }); - } else { - eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" ); - toHide.hide(); - show(); - } - - toHide.attr({ - "aria-expanded": "false", - "aria-hidden": "true" - }); - eventData.oldTab.attr( "aria-selected", "false" ); - // If we're switching tabs, remove the old tab from the tab order. - // If we're opening from collapsed state, remove the previous tab from the tab order. - // If we're collapsing, then keep the collapsing tab in the tab order. - if ( toShow.length && toHide.length ) { - eventData.oldTab.attr( "tabIndex", -1 ); - } else if ( toShow.length ) { - this.tabs.filter(function() { - return $( this ).attr( "tabIndex" ) === 0; - }) - .attr( "tabIndex", -1 ); - } - - toShow.attr({ - "aria-expanded": "true", - "aria-hidden": "false" - }); - eventData.newTab.attr({ - "aria-selected": "true", - tabIndex: 0 - }); - }, - - _activate: function( index ) { - var anchor, - active = this._findActive( index ); - - // trying to activate the already active panel - if ( active[ 0 ] === this.active[ 0 ] ) { - return; - } - - // trying to collapse, simulate a click on the current active header - if ( !active.length ) { - active = this.active; - } - - anchor = active.find( ".ui-tabs-anchor" )[ 0 ]; - this._eventHandler({ - target: anchor, - currentTarget: anchor, - preventDefault: $.noop - }); - }, - - _findActive: function( index ) { - return index === false ? $() : this.tabs.eq( index ); - }, - - _getIndex: function( index ) { - // meta-function to give users option to provide a href string instead of a numerical index. - if ( typeof index === "string" ) { - index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) ); - } - - return index; - }, - - _destroy: function() { - if ( this.xhr ) { - this.xhr.abort(); - } - - this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" ); - - this.tablist - .removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ) - .removeAttr( "role" ); - - this.anchors - .removeClass( "ui-tabs-anchor" ) - .removeAttr( "role" ) - .removeAttr( "tabIndex" ) - .removeData( "href.tabs" ) - .removeData( "load.tabs" ) - .removeUniqueId(); - - this.tabs.add( this.panels ).each(function() { - if ( $.data( this, "ui-tabs-destroy" ) ) { - $( this ).remove(); - } else { - $( this ) - .removeClass( "ui-state-default ui-state-active ui-state-disabled " + - "ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" ) - .removeAttr( "tabIndex" ) - .removeAttr( "aria-live" ) - .removeAttr( "aria-busy" ) - .removeAttr( "aria-selected" ) - .removeAttr( "aria-labelledby" ) - .removeAttr( "aria-hidden" ) - .removeAttr( "aria-expanded" ) - .removeAttr( "role" ); - } - }); - - this.tabs.each(function() { - var li = $( this ), - prev = li.data( "ui-tabs-aria-controls" ); - if ( prev ) { - li.attr( "aria-controls", prev ); - } else { - li.removeAttr( "aria-controls" ); - } - }); - - if ( this.options.heightStyle !== "content" ) { - this.panels.css( "height", "" ); - } - }, - - enable: function( index ) { - var disabled = this.options.disabled; - if ( disabled === false ) { - return; - } - - if ( index === undefined ) { - disabled = false; - } else { - index = this._getIndex( index ); - if ( $.isArray( disabled ) ) { - disabled = $.map( disabled, function( num ) { - return num !== index ? num : null; - }); - } else { - disabled = $.map( this.tabs, function( li, num ) { - return num !== index ? num : null; - }); - } - } - this._setupDisabled( disabled ); - }, - - disable: function( index ) { - var disabled = this.options.disabled; - if ( disabled === true ) { - return; - } - - if ( index === undefined ) { - disabled = true; - } else { - index = this._getIndex( index ); - if ( $.inArray( index, disabled ) !== -1 ) { - return; - } - if ( $.isArray( disabled ) ) { - disabled = $.merge( [ index ], disabled ).sort(); - } else { - disabled = [ index ]; - } - } - this._setupDisabled( disabled ); - }, - - load: function( index, event ) { - index = this._getIndex( index ); - var that = this, - tab = this.tabs.eq( index ), - anchor = tab.find( ".ui-tabs-anchor" ), - panel = this._getPanelForTab( tab ), - eventData = { - tab: tab, - panel: panel - }; - - // not remote - if ( isLocal( anchor[ 0 ] ) ) { - return; - } - - this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) ); - - // support: jQuery <1.8 - // jQuery <1.8 returns false if the request is canceled in beforeSend, - // but as of 1.8, $.ajax() always returns a jqXHR object. - if ( this.xhr && this.xhr.statusText !== "canceled" ) { - tab.addClass( "ui-tabs-loading" ); - panel.attr( "aria-busy", "true" ); - - this.xhr - .success(function( response ) { - // support: jQuery <1.8 - // http://bugs.jquery.com/ticket/11778 - setTimeout(function() { - panel.html( response ); - that._trigger( "load", event, eventData ); - }, 1 ); - }) - .complete(function( jqXHR, status ) { - // support: jQuery <1.8 - // http://bugs.jquery.com/ticket/11778 - setTimeout(function() { - if ( status === "abort" ) { - that.panels.stop( false, true ); - } - - tab.removeClass( "ui-tabs-loading" ); - panel.removeAttr( "aria-busy" ); - - if ( jqXHR === that.xhr ) { - delete that.xhr; - } - }, 1 ); - }); - } - }, - - // TODO: Remove this function in 1.10 when ajaxOptions is removed - _ajaxSettings: function( anchor, event, eventData ) { - var that = this; - return { - url: anchor.attr( "href" ), - beforeSend: function( jqXHR, settings ) { - return that._trigger( "beforeLoad", event, - $.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) ); - } - }; - }, - - _getPanelForTab: function( tab ) { - var id = $( tab ).attr( "aria-controls" ); - return this.element.find( this._sanitizeSelector( "#" + id ) ); - } -}); - -// DEPRECATED -if ( $.uiBackCompat !== false ) { - - // helper method for a lot of the back compat extensions - $.ui.tabs.prototype._ui = function( tab, panel ) { - return { - tab: tab, - panel: panel, - index: this.anchors.index( tab ) - }; - }; - - // url method - $.widget( "ui.tabs", $.ui.tabs, { - url: function( index, url ) { - this.anchors.eq( index ).attr( "href", url ); - } - }); - - // TODO: Remove _ajaxSettings() method when removing this extension - // ajaxOptions and cache options - $.widget( "ui.tabs", $.ui.tabs, { - options: { - ajaxOptions: null, - cache: false - }, - - _create: function() { - this._super(); - - var that = this; - - this._on({ tabsbeforeload: function( event, ui ) { - // tab is already cached - if ( $.data( ui.tab[ 0 ], "cache.tabs" ) ) { - event.preventDefault(); - return; - } - - ui.jqXHR.success(function() { - if ( that.options.cache ) { - $.data( ui.tab[ 0 ], "cache.tabs", true ); - } - }); - }}); - }, - - _ajaxSettings: function( anchor, event, ui ) { - var ajaxOptions = this.options.ajaxOptions; - return $.extend( {}, ajaxOptions, { - error: function( xhr, status ) { - try { - // Passing index avoid a race condition when this method is - // called after the user has selected another tab. - // Pass the anchor that initiated this request allows - // loadError to manipulate the tab content panel via $(a.hash) - ajaxOptions.error( - xhr, status, ui.tab.closest( "li" ).index(), ui.tab[ 0 ] ); - } - catch ( error ) {} - } - }, this._superApply( arguments ) ); - }, - - _setOption: function( key, value ) { - // reset cache if switching from cached to not cached - if ( key === "cache" && value === false ) { - this.anchors.removeData( "cache.tabs" ); - } - this._super( key, value ); - }, - - _destroy: function() { - this.anchors.removeData( "cache.tabs" ); - this._super(); - }, - - url: function( index ){ - this.anchors.eq( index ).removeData( "cache.tabs" ); - this._superApply( arguments ); - } - }); - - // abort method - $.widget( "ui.tabs", $.ui.tabs, { - abort: function() { - if ( this.xhr ) { - this.xhr.abort(); - } - } - }); - - // spinner - $.widget( "ui.tabs", $.ui.tabs, { - options: { - spinner: "Loading…" - }, - _create: function() { - this._super(); - this._on({ - tabsbeforeload: function( event, ui ) { - // Don't react to nested tabs or tabs that don't use a spinner - if ( event.target !== this.element[ 0 ] || - !this.options.spinner ) { - return; - } - - var span = ui.tab.find( "span" ), - html = span.html(); - span.html( this.options.spinner ); - ui.jqXHR.complete(function() { - span.html( html ); - }); - } - }); - } - }); - - // enable/disable events - $.widget( "ui.tabs", $.ui.tabs, { - options: { - enable: null, - disable: null - }, - - enable: function( index ) { - var options = this.options, - trigger; - - if ( index && options.disabled === true || - ( $.isArray( options.disabled ) && $.inArray( index, options.disabled ) !== -1 ) ) { - trigger = true; - } - - this._superApply( arguments ); - - if ( trigger ) { - this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); - } - }, - - disable: function( index ) { - var options = this.options, - trigger; - - if ( index && options.disabled === false || - ( $.isArray( options.disabled ) && $.inArray( index, options.disabled ) === -1 ) ) { - trigger = true; - } - - this._superApply( arguments ); - - if ( trigger ) { - this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); - } - } - }); - - // add/remove methods and events - $.widget( "ui.tabs", $.ui.tabs, { - options: { - add: null, - remove: null, - tabTemplate: "
  • #{label}
  • " - }, - - add: function( url, label, index ) { - if ( index === undefined ) { - index = this.anchors.length; - } - - var doInsertAfter, panel, - options = this.options, - li = $( options.tabTemplate - .replace( /#\{href\}/g, url ) - .replace( /#\{label\}/g, label ) ), - id = !url.indexOf( "#" ) ? - url.replace( "#", "" ) : - this._tabId( li ); - - li.addClass( "ui-state-default ui-corner-top" ).data( "ui-tabs-destroy", true ); - li.attr( "aria-controls", id ); - - doInsertAfter = index >= this.tabs.length; - - // try to find an existing element before creating a new one - panel = this.element.find( "#" + id ); - if ( !panel.length ) { - panel = this._createPanel( id ); - if ( doInsertAfter ) { - if ( index > 0 ) { - panel.insertAfter( this.panels.eq( -1 ) ); - } else { - panel.appendTo( this.element ); - } - } else { - panel.insertBefore( this.panels[ index ] ); - } - } - panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ).hide(); - - if ( doInsertAfter ) { - li.appendTo( this.tablist ); - } else { - li.insertBefore( this.tabs[ index ] ); - } - - options.disabled = $.map( options.disabled, function( n ) { - return n >= index ? ++n : n; - }); - - this.refresh(); - if ( this.tabs.length === 1 && options.active === false ) { - this.option( "active", 0 ); - } - - this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); - return this; - }, - - remove: function( index ) { - index = this._getIndex( index ); - var options = this.options, - tab = this.tabs.eq( index ).remove(), - panel = this._getPanelForTab( tab ).remove(); - - // If selected tab was removed focus tab to the right or - // in case the last tab was removed the tab to the left. - // We check for more than 2 tabs, because if there are only 2, - // then when we remove this tab, there will only be one tab left - // so we don't need to detect which tab to activate. - if ( tab.hasClass( "ui-tabs-active" ) && this.anchors.length > 2 ) { - this._activate( index + ( index + 1 < this.anchors.length ? 1 : -1 ) ); - } - - options.disabled = $.map( - $.grep( options.disabled, function( n ) { - return n !== index; - }), - function( n ) { - return n >= index ? --n : n; - }); - - this.refresh(); - - this._trigger( "remove", null, this._ui( tab.find( "a" )[ 0 ], panel[ 0 ] ) ); - return this; - } - }); - - // length method - $.widget( "ui.tabs", $.ui.tabs, { - length: function() { - return this.anchors.length; - } - }); - - // panel ids (idPrefix option + title attribute) - $.widget( "ui.tabs", $.ui.tabs, { - options: { - idPrefix: "ui-tabs-" - }, - - _tabId: function( tab ) { - var a = tab.is( "li" ) ? tab.find( "a[href]" ) : tab; - a = a[0]; - return $( a ).closest( "li" ).attr( "aria-controls" ) || - a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF\-]/g, "" ) || - this.options.idPrefix + getNextTabId(); - } - }); - - // _createPanel method - $.widget( "ui.tabs", $.ui.tabs, { - options: { - panelTemplate: "
    " - }, - - _createPanel: function( id ) { - return $( this.options.panelTemplate ) - .attr( "id", id ) - .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) - .data( "ui-tabs-destroy", true ); - } - }); - - // selected option - $.widget( "ui.tabs", $.ui.tabs, { - _create: function() { - var options = this.options; - if ( options.active === null && options.selected !== undefined ) { - options.active = options.selected === -1 ? false : options.selected; - } - this._super(); - options.selected = options.active; - if ( options.selected === false ) { - options.selected = -1; - } - }, - - _setOption: function( key, value ) { - if ( key !== "selected" ) { - return this._super( key, value ); - } - - var options = this.options; - this._super( "active", value === -1 ? false : value ); - options.selected = options.active; - if ( options.selected === false ) { - options.selected = -1; - } - }, - - _eventHandler: function() { - this._superApply( arguments ); - this.options.selected = this.options.active; - if ( this.options.selected === false ) { - this.options.selected = -1; - } - } - }); - - // show and select event - $.widget( "ui.tabs", $.ui.tabs, { - options: { - show: null, - select: null - }, - _create: function() { - this._super(); - if ( this.options.active !== false ) { - this._trigger( "show", null, this._ui( - this.active.find( ".ui-tabs-anchor" )[ 0 ], - this._getPanelForTab( this.active )[ 0 ] ) ); - } - }, - _trigger: function( type, event, data ) { - var ret = this._superApply( arguments ); - if ( !ret ) { - return false; - } - if ( type === "beforeActivate" && data.newTab.length ) { - ret = this._super( "select", event, { - tab: data.newTab.find( ".ui-tabs-anchor" )[ 0], - panel: data.newPanel[ 0 ], - index: data.newTab.closest( "li" ).index() - }); - } else if ( type === "activate" && data.newTab.length ) { - ret = this._super( "show", event, { - tab: data.newTab.find( ".ui-tabs-anchor" )[ 0 ], - panel: data.newPanel[ 0 ], - index: data.newTab.closest( "li" ).index() - }); - } - return ret; - } - }); - - // select method - $.widget( "ui.tabs", $.ui.tabs, { - select: function( index ) { - index = this._getIndex( index ); - if ( index === -1 ) { - if ( this.options.collapsible && this.options.selected !== -1 ) { - index = this.options.selected; - } else { - return; - } - } - this.anchors.eq( index ).trigger( this.options.event + this.eventNamespace ); - } - }); - - // cookie option - (function() { - - var listId = 0; - - $.widget( "ui.tabs", $.ui.tabs, { - options: { - cookie: null // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true } - }, - _create: function() { - var options = this.options, - active; - if ( options.active == null && options.cookie ) { - active = parseInt( this._cookie(), 10 ); - if ( active === -1 ) { - active = false; - } - options.active = active; - } - this._super(); - }, - _cookie: function( active ) { - var cookie = [ this.cookie || - ( this.cookie = this.options.cookie.name || "ui-tabs-" + (++listId) ) ]; - if ( arguments.length ) { - cookie.push( active === false ? -1 : active ); - cookie.push( this.options.cookie ); - } - return $.cookie.apply( null, cookie ); - }, - _refresh: function() { - this._super(); - if ( this.options.cookie ) { - this._cookie( this.options.active, this.options.cookie ); - } - }, - _eventHandler: function() { - this._superApply( arguments ); - if ( this.options.cookie ) { - this._cookie( this.options.active, this.options.cookie ); - } - }, - _destroy: function() { - this._super(); - if ( this.options.cookie ) { - this._cookie( null, this.options.cookie ); - } - } - }); - - })(); - - // load event - $.widget( "ui.tabs", $.ui.tabs, { - _trigger: function( type, event, data ) { - var _data = $.extend( {}, data ); - if ( type === "load" ) { - _data.panel = _data.panel[ 0 ]; - _data.tab = _data.tab.find( ".ui-tabs-anchor" )[ 0 ]; - } - return this._super( type, event, _data ); - } - }); - - // fx option - // The new animation options (show, hide) conflict with the old show callback. - // The old fx option wins over show/hide anyway (always favor back-compat). - // If a user wants to use the new animation API, they must give up the old API. - $.widget( "ui.tabs", $.ui.tabs, { - options: { - fx: null // e.g. { height: "toggle", opacity: "toggle", duration: 200 } - }, - - _getFx: function() { - var hide, show, - fx = this.options.fx; - - if ( fx ) { - if ( $.isArray( fx ) ) { - hide = fx[ 0 ]; - show = fx[ 1 ]; - } else { - hide = show = fx; - } - } - - return fx ? { show: show, hide: hide } : null; - }, - - _toggle: function( event, eventData ) { - var that = this, - toShow = eventData.newPanel, - toHide = eventData.oldPanel, - fx = this._getFx(); - - if ( !fx ) { - return this._super( event, eventData ); - } - - that.running = true; - - function complete() { - that.running = false; - that._trigger( "activate", event, eventData ); - } - - function show() { - eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" ); - - if ( toShow.length && fx.show ) { - toShow - .animate( fx.show, fx.show.duration, function() { - complete(); - }); - } else { - toShow.show(); - complete(); - } - } - - // start out by hiding, then showing, then completing - if ( toHide.length && fx.hide ) { - toHide.animate( fx.hide, fx.hide.duration, function() { - eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" ); - show(); - }); - } else { - eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" ); - toHide.hide(); - show(); - } - } - }); -} - -})( jQuery ); - -(function( $ ) { - -var increments = 0; - -function addDescribedBy( elem, id ) { - var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ); - describedby.push( id ); - elem - .data( "ui-tooltip-id", id ) - .attr( "aria-describedby", $.trim( describedby.join( " " ) ) ); -} - -function removeDescribedBy( elem ) { - var id = elem.data( "ui-tooltip-id" ), - describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ), - index = $.inArray( id, describedby ); - if ( index !== -1 ) { - describedby.splice( index, 1 ); - } - - elem.removeData( "ui-tooltip-id" ); - describedby = $.trim( describedby.join( " " ) ); - if ( describedby ) { - elem.attr( "aria-describedby", describedby ); - } else { - elem.removeAttr( "aria-describedby" ); - } -} - -$.widget( "ui.tooltip", { - version: "1.9.1", - options: { - content: function() { - return $( this ).attr( "title" ); - }, - hide: true, - // Disabled elements have inconsistent behavior across browsers (#8661) - items: "[title]:not([disabled])", - position: { - my: "left top+15", - at: "left bottom", - collision: "flipfit flipfit" - }, - show: true, - tooltipClass: null, - track: false, - - // callbacks - close: null, - open: null - }, - - _create: function() { - this._on({ - mouseover: "open", - focusin: "open" - }); - - // IDs of generated tooltips, needed for destroy - this.tooltips = {}; - // IDs of parent tooltips where we removed the title attribute - this.parents = {}; - - if ( this.options.disabled ) { - this._disable(); - } - }, - - _setOption: function( key, value ) { - var that = this; - - if ( key === "disabled" ) { - this[ value ? "_disable" : "_enable" ](); - this.options[ key ] = value; - // disable element style changes - return; - } - - this._super( key, value ); - - if ( key === "content" ) { - $.each( this.tooltips, function( id, element ) { - that._updateContent( element ); - }); - } - }, - - _disable: function() { - var that = this; - - // close open tooltips - $.each( this.tooltips, function( id, element ) { - var event = $.Event( "blur" ); - event.target = event.currentTarget = element[0]; - that.close( event, true ); - }); - - // remove title attributes to prevent native tooltips - this.element.find( this.options.items ).andSelf().each(function() { - var element = $( this ); - if ( element.is( "[title]" ) ) { - element - .data( "ui-tooltip-title", element.attr( "title" ) ) - .attr( "title", "" ); - } - }); - }, - - _enable: function() { - // restore title attributes - this.element.find( this.options.items ).andSelf().each(function() { - var element = $( this ); - if ( element.data( "ui-tooltip-title" ) ) { - element.attr( "title", element.data( "ui-tooltip-title" ) ); - } - }); - }, - - open: function( event ) { - var that = this, - target = $( event ? event.target : this.element ) - // we need closest here due to mouseover bubbling, - // but always pointing at the same event target - .closest( this.options.items ); - - // No element to show a tooltip for - if ( !target.length ) { - return; - } - - // If the tooltip is open and we're tracking then reposition the tooltip. - // This makes sure that a tracking tooltip doesn't obscure a focused element - // if the user was hovering when the element gained focused. - if ( this.options.track && target.data( "ui-tooltip-id" ) ) { - this._find( target ).position( $.extend({ - of: target - }, this.options.position ) ); - // Stop tracking (#8622) - this._off( this.document, "mousemove" ); - return; - } - - if ( target.attr( "title" ) ) { - target.data( "ui-tooltip-title", target.attr( "title" ) ); - } - - target.data( "tooltip-open", true ); - - // kill parent tooltips, custom or native, for hover - if ( event && event.type === "mouseover" ) { - target.parents().each(function() { - var blurEvent; - if ( $( this ).data( "tooltip-open" ) ) { - blurEvent = $.Event( "blur" ); - blurEvent.target = blurEvent.currentTarget = this; - that.close( blurEvent, true ); - } - if ( this.title ) { - $( this ).uniqueId(); - that.parents[ this.id ] = { - element: this, - title: this.title - }; - this.title = ""; - } - }); - } - - this._updateContent( target, event ); - }, - - _updateContent: function( target, event ) { - var content, - contentOption = this.options.content, - that = this; - - if ( typeof contentOption === "string" ) { - return this._open( event, target, contentOption ); - } - - content = contentOption.call( target[0], function( response ) { - // ignore async response if tooltip was closed already - if ( !target.data( "tooltip-open" ) ) { - return; - } - // IE may instantly serve a cached response for ajax requests - // delay this call to _open so the other call to _open runs first - that._delay(function() { - this._open( event, target, response ); - }); - }); - if ( content ) { - this._open( event, target, content ); - } - }, - - _open: function( event, target, content ) { - var tooltip, events, delayedShow, - positionOption = $.extend( {}, this.options.position ); - - if ( !content ) { - return; - } - - // Content can be updated multiple times. If the tooltip already - // exists, then just update the content and bail. - tooltip = this._find( target ); - if ( tooltip.length ) { - tooltip.find( ".ui-tooltip-content" ).html( content ); - return; - } - - // if we have a title, clear it to prevent the native tooltip - // we have to check first to avoid defining a title if none exists - // (we don't want to cause an element to start matching [title]) - // - // We use removeAttr only for key events, to allow IE to export the correct - // accessible attributes. For mouse events, set to empty string to avoid - // native tooltip showing up (happens only when removing inside mouseover). - if ( target.is( "[title]" ) ) { - if ( event && event.type === "mouseover" ) { - target.attr( "title", "" ); - } else { - target.removeAttr( "title" ); - } - } - - tooltip = this._tooltip( target ); - addDescribedBy( target, tooltip.attr( "id" ) ); - tooltip.find( ".ui-tooltip-content" ).html( content ); - - function position( event ) { - positionOption.of = event; - if ( tooltip.is( ":hidden" ) ) { - return; - } - tooltip.position( positionOption ); - } - if ( this.options.track && event && /^mouse/.test( event.originalEvent.type ) ) { - this._on( this.document, { - mousemove: position - }); - // trigger once to override element-relative positioning - position( event ); - } else { - tooltip.position( $.extend({ - of: target - }, this.options.position ) ); - } - - tooltip.hide(); - - this._show( tooltip, this.options.show ); - // Handle tracking tooltips that are shown with a delay (#8644). As soon - // as the tooltip is visible, position the tooltip using the most recent - // event. - if ( this.options.show && this.options.show.delay ) { - delayedShow = setInterval(function() { - if ( tooltip.is( ":visible" ) ) { - position( positionOption.of ); - clearInterval( delayedShow ); - } - }, $.fx.interval ); - } - - this._trigger( "open", event, { tooltip: tooltip } ); - - events = { - keyup: function( event ) { - if ( event.keyCode === $.ui.keyCode.ESCAPE ) { - var fakeEvent = $.Event(event); - fakeEvent.currentTarget = target[0]; - this.close( fakeEvent, true ); - } - }, - remove: function() { - this._removeTooltip( tooltip ); - } - }; - if ( !event || event.type === "mouseover" ) { - events.mouseleave = "close"; - } - if ( !event || event.type === "focusin" ) { - events.focusout = "close"; - } - this._on( target, events ); - }, - - close: function( event ) { - var that = this, - target = $( event ? event.currentTarget : this.element ), - tooltip = this._find( target ); - - // disabling closes the tooltip, so we need to track when we're closing - // to avoid an infinite loop in case the tooltip becomes disabled on close - if ( this.closing ) { - return; - } - - // only set title if we had one before (see comment in _open()) - if ( target.data( "ui-tooltip-title" ) ) { - target.attr( "title", target.data( "ui-tooltip-title" ) ); - } - - removeDescribedBy( target ); - - tooltip.stop( true ); - this._hide( tooltip, this.options.hide, function() { - that._removeTooltip( $( this ) ); - }); - - target.removeData( "tooltip-open" ); - this._off( target, "mouseleave focusout keyup" ); - // Remove 'remove' binding only on delegated targets - if ( target[0] !== this.element[0] ) { - this._off( target, "remove" ); - } - this._off( this.document, "mousemove" ); - - if ( event && event.type === "mouseleave" ) { - $.each( this.parents, function( id, parent ) { - parent.element.title = parent.title; - delete that.parents[ id ]; - }); - } - - this.closing = true; - this._trigger( "close", event, { tooltip: tooltip } ); - this.closing = false; - }, - - _tooltip: function( element ) { - var id = "ui-tooltip-" + increments++, - tooltip = $( "
    " ) - .attr({ - id: id, - role: "tooltip" - }) - .addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " + - ( this.options.tooltipClass || "" ) ); - $( "
    " ) - .addClass( "ui-tooltip-content" ) - .appendTo( tooltip ); - tooltip.appendTo( this.document[0].body ); - if ( $.fn.bgiframe ) { - tooltip.bgiframe(); - } - this.tooltips[ id ] = element; - return tooltip; - }, - - _find: function( target ) { - var id = target.data( "ui-tooltip-id" ); - return id ? $( "#" + id ) : $(); - }, - - _removeTooltip: function( tooltip ) { - tooltip.remove(); - delete this.tooltips[ tooltip.attr( "id" ) ]; - }, - - _destroy: function() { - var that = this; - - // close open tooltips - $.each( this.tooltips, function( id, element ) { - // Delegate to close method to handle common cleanup - var event = $.Event( "blur" ); - event.target = event.currentTarget = element[0]; - that.close( event, true ); - - // Remove immediately; destroying an open tooltip doesn't use the - // hide animation - $( "#" + id ).remove(); - - // Restore the title - if ( element.data( "ui-tooltip-title" ) ) { - element.attr( "title", element.data( "ui-tooltip-title" ) ); - element.removeData( "ui-tooltip-title" ); - } - }); - } -}); - -}( jQuery ) ); diff --git a/files/jquery.tablesorter.min.js b/files/jquery.tablesorter.min.js deleted file mode 100644 index b8605df..0000000 --- a/files/jquery.tablesorter.min.js +++ /dev/null @@ -1,4 +0,0 @@ - -(function($){$.extend({tablesorter:new -function(){var parsers=[],widgets=[];this.defaults={cssHeader:"header",cssAsc:"headerSortUp",cssDesc:"headerSortDown",cssChildRow:"expand-child",sortInitialOrder:"asc",sortMultiSortKey:"shiftKey",sortForce:null,sortAppend:null,sortLocaleCompare:true,textExtraction:"simple",parsers:{},widgets:[],widgetZebra:{css:["even","odd"]},headers:{},widthFixed:false,cancelSelection:true,sortList:[],headerList:[],dateFormat:"us",decimal:'/\.|\,/g',onRenderHeader:null,selectorHeaders:'thead th',debug:false};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);}}function buildParserCache(table,$headers){if(table.config.debug){var parsersDebug="";}if(table.tBodies.length==0)return;var rows=table.tBodies[0].rows;if(rows[0]){var list=[],cells=rows[0].cells,l=cells.length;for(var i=0;i1){arr=arr.concat(checkCellColSpan(table,headerArr,row++));}else{if(table.tHead.length==1||(cell.rowSpan>1||!r[row+1])){arr.push(cell);}}}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 checkHeaderOptionsSortingLocked(table,i){if((table.config.headers[i])&&(table.config.headers[i].lockedOrder))return table.config.headers[i].lockedOrder;return false;}function applyWidget(table){var c=table.config.widgets;var l=c.length;for(var i=0;i');$("tr:first td",table.tBodies[0]).each(function(){colgroup.append($('').css('width',$(this).width()));});$(table).prepend(colgroup);};}function updateHeaderSortCount(table,sortList){var c=table.config,l=sortList.length;for(var i=0;i b["+i+"]) ? 1 : 0));";};function makeSortTextDesc(i){return"((b["+i+"] < a["+i+"]) ? -1 : ((b["+i+"] > a["+i+"]) ? 1 : 0));";};function makeSortNumeric(i){return"a["+i+"]-b["+i+"];";};function makeSortNumericDesc(i){return"b["+i+"]-a["+i+"];";};function sortText(a,b){if(table.config.sortLocaleCompare)return a.localeCompare(b);return((ab)?1:0));};function sortTextDesc(a,b){if(table.config.sortLocaleCompare)return b.localeCompare(a);return((ba)?1:0));};function sortNumeric(a,b){return a-b;};function sortNumericDesc(a,b){return b-a;};function getCachedSortType(parsers,i){return parsers[i].type;};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);$this=$(this);$.data(this,"tablesorter",config);$headers=buildHeaders(this);this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);var sortCSS=[config.cssDesc,config.cssAsc];fixColumnWidth(this);$headers.click(function(e){var totalRows=($this[0].tBodies[0]&&$this[0].tBodies[0].rows.length)||0;if(!this.sortDisabled&&totalRows>0){$this.trigger("sortStart");var $cell=$(this);var i=this.column;this.order=this.count++%2;if(this.lockedOrder)this.order=this.lockedOrder;if(!e[config.sortMultiSortKey]){config.sortList=[];if(config.sortForce!=null){var a=config.sortForce;for(var j=0;j0){$this.trigger("sorton",[config.sortList]);}applyWidget(this);});};this.addParser=function(parser){var l=parsers.length,a=true;for(var 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≶aXY7b2F5-A$eIEl8p&h`zj{7lzVex< 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 diff --git a/files/logo-w.png b/files/logo-w.png deleted file mode 100644 index b72c93c8a6bc2e156f7585b857fe107ab7118893..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8073 zcmaiZcQ_l~7k3hyTGiU4HH#t@djvH@QB+ZsR>fYmXJWLpRt2@kSEFiEdnVPEB50#U z%&5K9Cdlje$NTU5p8MSK+~=I<-1E8Tp7Y#$-#j$YXQbz*2LJ$!FasTP004M31iYiA zzG_#Tn$oU1>gPuKIso$jN^w_N`qd1buYrv}03a>&zX}W~)d;$pqzQl->(b0zW1v(~ zT+iku0RRH*FdeN&A(LALp%IyXnvOA&bSx}7*B^eXNZ5}P|x?sHX#bIC~AlR>$Bg=Ns|14VdBPbo1A;3@Df) z6^KZ^e_OC5oGU60Jz^MUxbX{hy8S@TsNE2MGQq>jYX9{>TbNJCt$cvOP0PO$?N^^A zC}=ox;v}M8QW!fb!kDbi!TRf7uf`+%x|)!;vXJ-+AFBDSI@d4u5>{XBUh>^tN1sn` zkGIGGu{=V_LBOhvAPVeToPZJXIQ>U>MIn^Y$~I(6?U{MQkdDFN9}o7O6|b)7(oKi(A0t z$5;)LrhvC6T;Rnzl>fvwJP)Tal1l)l$)8bIgo*F((5cN0yH?T}y%?lh*&hc`oI`$K zBq8KM;85tgInL1$8-;obZcrBt*8%=y%Rw*`VZuo5_SumoQdxDaa zDG3lnN!@}PdMkS!&_+b?<8ul8>>;A5?DJ}&QCk_=nkcWxpFwkD{iuk zs+Iag;Y;0wVnWYd@5~f#%`EUGJJy17qw5YvTSXBlb|A8xngA-6~;j(JcWW>8I{=haeN?p=Z%A2T~v%w1O?@y_NnLHu?<5DRb6TbJJ&i=N ze~-$^VI=C--*XLjfC&83o^IT>oCZubjgF6=J2nezz4KY;H^A`w3H3B6qLijlo6Yw% zLq#8L$Hm`O0ake=)2H(tAkQJv3mE1{I6v3C5`wl%9hdT(lSz?_0<>yO zo-;IVn$VNJUl`_+l5aTj5`WLR52!DfAl&oz8zeI0G+m4M=?A?TARyyZMmSKq>p?y5 z3IDT>e>14zqcp?|0lrgU4Y+|uNb;MwrhYcrkcgKp+`+(FDHquxw&HHro>e0-(8(Q` zM%Qz=s-D6XJRgL}%mW#xWGy9QB?4}&RUkT@mPFD&c(zRAdat442k1&!z%U{_=N{Re zI6^7Lb(~|9i2g#UXtM&eJ(|C~TrI@99we^51H5Zw0M|ZPzgJWjMW)>~csZJk?m~_t z7sQiQ>t>OnkPVK!+a(`B#U0WFYc1=BB3<9ei`Ja3C1=@Urfi*7TH#?INDLkq^md3P zt+>Kq+2J?L9icKL8Y4Cr=5l0%y$cCfwRryp)lC~QrXgQ%>)*U4Gql+_!OO~b9f0z_ z9Wp5;zpu!8zNf*E?*f;BRe&4bKe+sZoyA^afmj_!>&=13^_U#v)FGB%|A`~fAELum zmCni*q-mZ~nO3<@sW5`$hLCITJRBQ(5^hV(Dv<+@ZXK)M?nqCU_st-!|ab5-7R%}>!o~{${ zirUwdU(^f8@7X`;4{MAfc9ZCSz0oLR4*&A*36uh=SU5t4OMZT>ar`JacNYG^8kHf^_V{e&Q6E!Ld%JJ@4JQ;Ke8&q5CPT?*cuMaAS8 zi%UckH*Sr$lm8waSm@~7wm>ouZN>z#tk8vKW4J;nTEF4Onj0P@cj*j~Il$63J(5rE z=gmm1wenhgP@+n>Qw;z&?6kz59t&?0Oe;?SS$TwMrVKY+i4L( zhSk7Enzhm%D(oxxpb zl8K3~YIEq}Y~kw?=vORJq(@=` zAPZ%F9$fb{u)L1(u51abLm*+0ZquH8nvx^`Kh&y0j#`S4C(3i>Exowm1T@dDJSyyv z{X2cA_ScM;+h7RETzD$ssT2TL)y60)MHN-JaylnuqjQy{FHTqsT5f-OuQnS$#D4 z@UNDuN)Tqf%3r6%5s^n^nISa~;(}gpnM%F1v3jzSaB_xRuTQvyWiEyK(4=?O_=&9N z#??_t5nNkf6oN^u-+GBAQNfNsYHZyZ7592Ej_)N$oES-@E}_^$ZA(Px`gHf&rtS8D&jV#lb$+oe++RkMkfEm&Tf zlyC>|{C#~r=`w36KNo4q8iG8N&EE!-% zl>}lp%EeP_32dxgei^M2JpSxm+A@+k3>v#GiouUg=V6=8dzEvdn zjVm?bH!!@}c78$5OtG3{q}{2=haK*e%m4gn?z(G#;_|IR5ALJGCE8>X}b{l-Y}p{m+4ThGUF7AO{igJ3ryd~p6+q}<5Q~lr!v?Acu=I(s3w5{fU#bj zeg1)sX@2qR@83ICq{-j(obTh?FbhIKvM-tUe#uI5N)LX}6I&B`qKhcTgY8 z+}!X{|NN*kg_jO9iD4ethjLxh%OQkTqy3v(MlUE^HWkB8O?^Jt%VY+?RL|zU9XX0^ zQwonWc;GU?w})-y^vAPZx!kWNKLF)e^8FW8P*eA}(~}sYOTEyf)SCAc%8ixt%1qqV z)YMDLWs$dib(aa(i;HsPn{H3%MRy2$<>ao@fngjugeKid32RK};<4QORMVc#utJsg}9Prd0zRz)WVun7@446VoPl&UG+JZ&{Q zBN^mkmV1t;3`n1O{c=^yhxjF*Av%}bF0&9CvxXBZ=FTB@_&+FqKkcPO(8j$_na2(L z-%cOmHPnkX1p5%3X-9Wn9ct*ei?sukROkU)<9d^9Z`~F^8>HCZ?l2>Le5Rb-y=f6i z?n|<~DMrDxGgf#@x?k3-u@Zrq(CelNZLLQQzx8FF=+jIF|NLZewCW6HNh3~Qm`3!y( zfo`5IP(>GPtPj#ZIL<>|`uqkoI;1VBG*Ws6X{7|D-VrRw;Xj_=d|7~Qy4*gdLi^Xm zcU3&}`gZKS_~)%K{ZldE2+k5mx(;QrjKzI4Iz)t?1kB!!ynN0iI?Ee^{~GmOK#}4Q`xPGaNHoH0;Heoym3)Kxlm8m#Kyv{812O~h zCJGMJ2WsrBFRWUsXAq$)$rEFY_it{o-1QI?;E>5u6(4$z_k#WUZc%<|zw#lJI) z+y%WMmtaVTxNg^usMdU>uya8EgBJJ{T1foMHs8lRLrcbtp?dW z*6gf>ooV88gYru{OA?w9-$wgu0Qo{|M`)(dzbToG9pu@$L9jf59V!mOxFP33JnAsE!rwS)iH`V zi}La2&o5c1GGxQ5b!V@fav1l3ZK^yB@)q9kE%)c0oVR4qk` zd*Md$Mi~IrohP!JfcpeaGOv!#-oO*qcp*b)rNRikGHqitgzzA z$;p;YO-(~-=IyUJvz)KRss@;KM~>01O4om$_=pS;%lttb62$5)bY1cJg94R6Ay{%~ zPx45XrndIi-Nyp~+7he%OW%ZUcKy#A9>#3c=+^!fI@N;l`eT{u-~s86BV9>$qoB1-yGS*Kv9r zj_SU>=4zMeF)it=45m_BQ{(M}Hdnpu?Po5y z=H=%w`V<^5X1g{uiuxBX*kUNmfgQPo#v4-5Ynvt$;!37?dqzga*b>&d{a4t?ZsiwL zyKFGYA7Zd8xL{taC5hRSDJ94 zM6!M7K873%5yw%lvk8bSH@~^R3${9nGUkB0YrrQS}wcb6gXq z3+b@}G1rq=u?>brTNv$X0F`C7;t6Jf`_~NXD>lW9@VtHg9F0y ziu=ErCfT25S4wpmc8!aUyQJJYO<4!DB25>d#416(e!FLvKVKP7Yx;#x`G>CCTgB|% zr4I6Pb)9HzZa(7cu|Zb$xpPvpR-1$?H=^+ zHmLvR@QE8lMqUJAYoJf&=p)z-wxO+Wd~fS}v;t3V_5EN5Q-_GrIFV6~|9n!r{#wC< z+=F+us3JMxV}GS{UmKnkpm#FwtaTXv9JBBTkG4^LQ-#oI53lyXrH*$0B=BDB8|c%U zTUj035*cGuYex)J_)g?}`Ra1eY?B7h>3#hRM_y3|&+<54xw(TF=e6{a$ABwL z6|h-!Ci?oMhFZ2?7w_ck@alYrIEl4AUNN>>X~BY2<^DV1l*x9-4{TY$vgHsA;@%oN z;mCz_bGb~+DDqOR?VVFD88c)0t~-A#?r9Gt_20YZA-nKpo48HtF$c|oI6AiX6ocs=-}W4Ro;W<7=_%v1S)Ti^ zrbhaoft)?w9{U(O?Abc$_YN)4UP(%j9jA8}iTtSELR|a_>UPlS?pykor)Y}*j_MX$ z`>qB(ly+Y+cuLPm%mzhVlrv(GsR6}B&`G+9l&}cVRO;OlbeZj`+zK9G9!x2!dI>jZ z*T(CjQVh051Eef0%1o-0c*p!Hquam}_IM8ewznp)wpPZ?O8-o~(OnF^ADxsDg@|HJ zvb&zDsSA#5KQ~gvYaAXPeh}fa&{Pjf52#X==|8+Y0O2R@<4yR)eXgQt!VgPz+gp!} zxJBI>JDScuqa*jgzA^E_UMoA)Czlttvg=U_MbA+DxUZXQb0Y?mjRty!)-O5*Ui4hc z`28pjp!7WpF4XSc&XZSc5qDn%97i;%cvVMmN=B!}F>1vk|BLI`c+AFYDt%yV=v6vX zR43#M-caP|(pSp6Y|e?a*4wIU%lbvj6PfW}*D+mQ`#lu5*|PSF&`hut|6)@e;nY z`=G2_L@b+FgOD8q6}#lTWsj^B&J$rqAQOzQq`!O4#N0S#CH&`EG8Wc4BjS~@5Socr z7d{*uZMk7UVFow=CsC&ed)6qkPnh5x$&ap^bb9^02FB7I2;Dz6)`_L-#ZpAG=79f{ z&&A6A`<(ash>B@HLJ`;5Wa-Fjfc6EuN`S@nq3S1G{_PMBRw8*iQXGy^*(M zy)W_PH~s#wn}x?FagoQcNE*Y*A5&hw=D{)PBe#_&8*_cDCy>I%rcNxrpU`HPof6_L zE9vM%v(`ri@#yuLxdqWf0hH;FK46Y0lt4cb?JGa_Fh-*_5Vg#*9Y^X!_u0{s1z^Vj8ekD<%;2mvM{4i$qwCwhjlfE8 zR{XA6i>_hlREN%h`i5cAbsO9JsM)^Awt7&f!VH zF=AyBJ<>h&JMkj`1l4ti*bbH;vPjR4I`M|f`aNs|N@0KRU|;Ti80IcT)Dni|GIgW% z>zpN!JVG@fI6`_!RH&VTVkKavZ0C%gEAz`D^XI%hE1mfa7ll1vX%$&8+cAi6$8xko zo{jczKs#Nxa8|y)kKnYEVgm6QJepklF9q?&w{J?x<@{e9w&(OsrWThssJXz9xO_f+giijLpwHRx-X=T!I;8n*ZIvwsCrvDYW9LML)Gz68{62$zXdFdeEbhe2Oz?dkWRh|*7Yx}s<7tocoR@uzVN zmDQaEa8N@*sOg?r=ri{x_r6TEe5d+7e5pzxI zA{2j18i}q=&qb+PN#oI}7p4N6t3@ z1#y_`V^d;nXGNcicf#XGj*sl-DFe`{-3)fLxLxqF(3$?{-UUX=lz*(g5Ct{WpWj}u zETwnm73?|y-a)8JIJ^WiAA_Ozom9>Sxb;{HsDk3T)0}xyxqxyZu1zi0Z zJ6a=7qzqr~g{0QW9Pd)dVn@wd=lY0P$kgwU$in@0&&^ZlhF|c}8BV@Ibi^e)%cGN_ zUi;jpp=B^)M4;#Nf>5}eR~3A84?FdHudzH716?>gYm6uT%&~f!MUak5eL1fnVR4C zo8suoU@XL$e+}eZlIq%aG&vId@ic?s-MAg3J>B=-kLxlUANjozGNYuz6(fFl6(ZOE zVX3|IkWh%B%EZb=EA_q6Kbw-B(%SjWEq+7K9V?RQmErl7#zXr>>lY3ip-Bh9{Q<73 zJA-2ONV&2esee(^y;R@B3-ueOq}f^QP+q1Sr$I>yNQG;yQ10qOR=9xJz@qiqOR>MA zS$q5WSpAM%m3{U9AnZN62ZO-RjN*YbmAiLWpG)pr)uipr&L%mz@SR{lL( zC&*gqx9siBt}LCRJcLHVZ5E$=S&94>`F($T=l9oBOVRHen^gNok+-}F#N=>e9{hlVq%Wz*wJ zC!HM4U!$4UGAVuHFA1_Ar{p@$h|U#1x=ow@E1j&AxT!FcMR2jKZge9*;IV|C4a#~w zEU-QvotO2K7!5_QL&4)Hr!qpjU}Bb?V^V;TPtypQU$J34ETlk>^rI8J5r0eY|3M{H byO;q8hvn(Re&MT6a{x@&M5pGyW6b{niI}Oi diff --git a/files/logo-w.xcf b/files/logo-w.xcf deleted file mode 100644 index a61fde05a8cbc4f85cdd5f30bce94dad9ee5b0e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27651 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 diff --git a/files/logo.png b/files/logo.png deleted file mode 100644 index bea7f27c8a91be1716762b9d9450a8f2aad300c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15314 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 QIy<27Mpd><+W5==089fgt^fc4 diff --git a/files/mirrors.tuna.css b/files/mirrors.tuna.css deleted file mode 100644 index b6ad780..0000000 --- a/files/mirrors.tuna.css +++ /dev/null @@ -1,117 +0,0 @@ - -.nospam { - display: none; -} - -.mirrors-stat table th, -.mirrors-stat table td { - border: 1px solid gray; - border-width: 1px 0 0 1px; -} -.mirrors-stat table { - border: 1px solid gray; - border-width: 1px 1px 1px 0; - border-collapse: separate; - border-spacing: 0; - border-radius: 4px; -} -.mirrors-stat table thead:first-child tr:first-child th { - border-top-width: 0; -} -.mirrors-stat table thead:first-child tr:first-child th:first-child, -.mirrors-stat table tbody:first-child tr:first-child td:first-child { - border-top-left-radius: 4px; -} -.mirrors-stat table thead:first-child tr:first-child th:last-child, -.mirrors-stat table tbody:first-child tr:first-child td:last-child { - border-top-right-radius: 4px; -} -.mirrors-stat table thead:last-child tr:last-child th:first-child, -.mirrors-stat table tbody:last-child tr:last-child td:first-child { - border-bottom-left-radius: 4px; -} -.mirrors-stat table thead:last-child tr:last-child th:last-child, -.mirrors-stat table tbody:last-child tr:last-child td:last-child { - border-bottom-right-radius: 4px; -} -.mirrors-stat table tbody tr:nth-child(10n) td, -.mirrors-stat table tbody tr:nth-child(10n) th { - border-bottom-width: 1px; -} -.mirrors-stat td { - padding: 3px; -} -.mirrors-stat td.official { - text-align: center; -} -.mirrors-stat td.size, .mirrors-stat td.files_count { - text-align: right; -} -.mirrors-stat td.req_size, .mirrors-stat td.req_files_count { - text-align: right; -} -.mirrors-stat thead { - text-align: center; - font-weight: bolder; -} -.description { - font-size: smaller; - width: auto; -} - -.tuna-logo img { - vertical-align: middle; - border-style: none; -} - -.sync-state { - white-space: nowrap; -} - -.sync-ed { - background-color: #00ff00; -} -.sync-ing { - background-color: #ffff00; -} -.sync-unknown { - background-color: #00ffff; -} -.sync-fail { - background-color: #ff0000; -} - - -/* tables */ - -table.tablesorter thead tr th, table.tablesorter tfoot tr th { - font-size: 8pt; - padding: 4px; -} -table.tablesorter thead tr .header { - background-repeat: no-repeat; - background-position: center right; - cursor: pointer; -} - -table.tablesorter thead tr .headerSortUp { - background-image: url(asc.gif); -} - -table.tablesorter thead tr .headerSortDown { - background-image: url(desc.gif); -} - -table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp { - background-color: #8dbdd8; -} - -#status-table-footnote { - font-size: smaller; -} - -#status-table h3 a { - text-decoration: none; -} - -/* vi: se noet ts=8 sw=8: */ diff --git a/files/non-official.png b/files/non-official.png deleted file mode 100644 index 03c35ebfcf273daf1070a36c2dcda4948eb4cc48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 689 zcmV;i0#5yjP)bY*F7Wpd{G_b&hd0uD(;K~y-6 zosvyRR8bg)pL1s%NfKsCiz|`YBE!VOA_-}vqChICHW3vBg{KIrT~M|PB5*6g30$;G zY1bzDff6Evz#tW}vMC`#o&3A^o;!N)J*|uxZG!xE-`~UczI;L{MX@+pFAwz$s;5N< z0IOJ|y>Lo zE))X@(@X60YSu7MB^H$iDum&LoGd(H$9TLuebBS3mz{ zT3w0kKyXe(93BePN3r+^)q%VPoEH{HGL{-#x|mAIMEN-PEkSJ<(l%DACJIda7FV}j zpX+ljuTnW#xy!lJUgcuc3f=N=i$__d@$|v z$?@2edM;zd0X}Khi!Ql7SG3R3<00000NkvXXu0mjf@cbl4 diff --git a/files/official-header.png b/files/official-header.png deleted file mode 100644 index 5a43e11e85a5adeb2e75e71e83a6290467066232..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 579 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6n3BBRT^Rni_n+Ah2>8 zUk71ECym(^3=E78o-U3d8t0Q|oNVAJkAAbwK{V0f>ATq7>AZ5RyIuSLSbRus=kR0Q zy=vb7oqyBIS@~Em&otZn>*xQ&|9#iX87gT;ByKyD@A{}~($re*?XmxVKL7vwzj)o+ zTRXEpb#*;Gsr@%R!r;vJIsbEC&)@w&j`8ciU;m%}@BM$ju`BNH{?GZZ=l{I_tdfy; z<|^~wUnLhb?fx(Sr~c=EvkCjY{lEDC^8d8`^Oo_KI&Tm8f0nsE@Be+~D?dN|&s)%R zc)$9cSCid}QiRKYZ{7X>{Qv!5{$KgO+`;v&d35E)nu`VB^#Xo9`M>wSKEvG$A0*Ds zR{e9<{yl@}n?HLWe*gHN|Nr;@8Y0et6JDBrzx}V?^nTH=qN>yT^Z#xCRPDym)wE<^ zPyNd0LR%f*u$;YOEct&@`T~uP`?DsTX%MOV`0-hE zxvr5}h>@|Ck*Sq|p|*jAm4Si84B1&I8glbfGSez?YsfshR1K&>5@bVgep*R+Vo@qX jd3m{BW?pu2a$-TMUVc&f>~}U&Kt&9mu6{1-oD!M<%sdC^ diff --git a/files/official.png b/files/official.png deleted file mode 100644 index 3be364a811e1294ff3e80e875cc93bb15ac594ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 786 zcmV+t1MU2YP)bY*F7Wpd{G_b&hd0&ht~K~y-6 zl~PMcRACrB_rLQ{Q%4&|O=rTu(rjTqF(Nm)$yyp^k42DPXj23&tDURbxQKpek%eJU z7+49l5JF85rIF0ku%T&YbY`6Aow?V!_x^vYKw<8}v;4ku4xI0N0;LpYxO_tD0)Vk) zI%meQn5qE?1oyzf0rZ)1h}q)Gamht&?(>4B^g{nJsbb#-1~6c&duS1Bu34BBH}_>Q z7?Mb4hupC^dPQsbMKPn0yMu$0kdG^@j-!(kRD;9G0Vg4-0nk|4bpLGGk=r(1SwPDF zO50u^nc@Q0U?9LbA`lT}z?LvShI0bP+Y(oct-9eVDJZTJh_xJ|y$LXWBO7^)!pb4A zoDWP-KuP;}c10+$S2XxNF30`QnFDHa3VLh^hU$e#?9gJ5Acx;W zQADI;Aw)vUaV3jWi!%L40APjDrD#%XUYZ_W53N2oG_49@-zXRy5DI&-<(q`YY7zBM z=s&&=|BA^wCx7VFyXT0THX4j%c?+17qFQL@wfp_M`hMHn+ zK|%w0TTn`ACac135n=$VM=qlxozM{53c_XwlpPdpmeI6%jT@4KTZ-LafML`ino#tV zoX}d||B(_#fM-O%x?1^A7G-Oq6 z;K38L{TBm(r-QCkHPiO2lDnbls5gyZRnUK^o2F<7^5SqO9SMDr#&^&D0h0kA9d4=b QOaK4?07*qoM6N<$f+%WL+yDRo diff --git a/files/pure-0.3.0.min.css b/files/pure-0.3.0.min.css deleted file mode 100644 index 39212bf..0000000 --- a/files/pure-0.3.0.min.css +++ /dev/null @@ -1,11 +0,0 @@ -/*! -Pure v0.3.0 -Copyright 2013 Yahoo! Inc. All rights reserved. -Licensed under the BSD License. -https://github.com/yui/pure/blob/master/LICENSE.md -*/ -/*! -normalize.css v1.1.2 | MIT License | git.io/normalize -Copyright (c) Nicolas Gallagher and Jonathan Neal -*/ -/*! normalize.css v1.1.2 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}html,button,input,select,textarea{font-family:sans-serif}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:1em 40px}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}p,pre{margin:1em 0}code,kbd,pre,samp{font-family:monospace,serif;_font-family:'courier new',monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:'';content:none}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,menu,ol,ul{margin:1em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ul,nav ol{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0;white-space:normal;*margin-left:-7px}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;*overflow:visible}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0;*height:13px;*width:13px}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}.pure-button{display:inline-block;*display:inline;zoom:1;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button{font-size:100%;*font-size:90%;*overflow:visible;padding:.5em 1.5em;color:#444;color:rgba(0,0,0,.8);*color:#444;border:1px solid #999;border:0 rgba(0,0,0,0);background-color:#E6E6E6;text-decoration:none;border-radius:2px;-webkit-transition:.1s linear -webkit-box-shadow;-moz-transition:.1s linear -moz-box-shadow;-ms-transition:.1s linear box-shadow;-o-transition:.1s linear box-shadow;transition:.1s linear box-shadow}.pure-button-hover,.pure-button:hover,.pure-button:focus{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#1a000000', GradientType=0);background-image:-webkit-gradient(linear,0 0,0 100%,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:-webkit-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:-moz-linear-gradient(top,rgba(0,0,0,.05) 0,rgba(0,0,0,.1));background-image:-ms-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:-o-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset}.pure-button[disabled],.pure-button-disabled,.pure-button-disabled:hover,.pure-button-disabled:focus,.pure-button-disabled:active{border:0;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);filter:alpha(opacity=40);-khtml-opacity:.4;-moz-opacity:.4;opacity:.4;cursor:not-allowed;box-shadow:none}.pure-button-hidden{display:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-form input[type=text],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;font-size:.8em;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-transition:.3s linear border;-moz-transition:.3s linear border;-ms-transition:.3s linear border;-o-transition:.3s linear border;transition:.3s linear border;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.pure-form input[type=text]:focus,.pure-form input[type=password]:focus,.pure-form input[type=email]:focus,.pure-form input[type=url]:focus,.pure-form input[type=date]:focus,.pure-form input[type=month]:focus,.pure-form input[type=time]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=week]:focus,.pure-form input[type=number]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=color]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;outline:thin dotted \9;border-color:#129FEA}.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus,.pure-form input[type=checkbox]:focus{outline:thin dotted #333;outline:1px auto #129FEA}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input[type=text][disabled],.pure-form input[type=password][disabled],.pure-form input[type=email][disabled],.pure-form input[type=url][disabled],.pure-form input[type=date][disabled],.pure-form input[type=month][disabled],.pure-form input[type=time][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=week][disabled],.pure-form input[type=number][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=color][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form textarea:focus:invalid,.pure-form select:focus:invalid{color:#b94a48;border:1px solid #ee5f5b}.pure-form input:focus:invalid:focus,.pure-form textarea:focus:invalid:focus,.pure-form select:focus:invalid:focus{border-color:#e9322d}.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus,.pure-form input[type=checkbox]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em;font-size:90%}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;font-size:125%;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input[type=text],.pure-form-stacked input[type=password],.pure-form-stacked input[type=email],.pure-form-stacked input[type=url],.pure-form-stacked input[type=date],.pure-form-stacked input[type=month],.pure-form-stacked input[type=time],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=week],.pure-form-stacked input[type=number],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=color],.pure-form-stacked select,.pure-form-stacked label,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-aligned input,.pure-form-aligned textarea,.pure-form-aligned select,.pure-form-aligned .pure-help-inline,.pure-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 10em}.pure-form input.pure-input-rounded,.pure-form .pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input{display:block;padding:10px;margin:0;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus{z-index:2}.pure-form .pure-group input:first-child{top:1px;border-radius:4px 4px 0 0}.pure-form .pure-group input:last-child{top:-2px;border-radius:0 0 4px 4px}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form .pure-help-inline,.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:90%}.pure-form-message{display:block;color:#666;font-size:90%}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input[type=text],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form label{margin-bottom:.3em;display:block}.pure-group input[type=text],.pure-group input[type=password],.pure-group input[type=email],.pure-group input[type=url],.pure-group input[type=date],.pure-group input[type=month],.pure-group input[type=time],.pure-group input[type=datetime],.pure-group input[type=datetime-local],.pure-group input[type=week],.pure-group input[type=number],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=color]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0}.pure-form .pure-help-inline,.pure-form-message-inline,.pure-form-message{display:block;font-size:80%;padding:.2em 0 .8em}}.pure-g{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-flex;-webkit-flex-flow:row wrap;display:-ms-flexbox;-ms-flex-flow:row wrap}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class *="pure-u"]{font-family:sans-serif}.pure-u-1,.pure-u-1-2,.pure-u-1-3,.pure-u-2-3,.pure-u-1-4,.pure-u-3-4,.pure-u-1-5,.pure-u-2-5,.pure-u-3-5,.pure-u-4-5,.pure-u-1-6,.pure-u-5-6,.pure-u-1-8,.pure-u-3-8,.pure-u-5-8,.pure-u-7-8,.pure-u-1-12,.pure-u-5-12,.pure-u-7-12,.pure-u-11-12,.pure-u-1-24,.pure-u-5-24,.pure-u-7-24,.pure-u-11-24,.pure-u-13-24,.pure-u-17-24,.pure-u-19-24,.pure-u-23-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1{width:100%}.pure-u-1-2{width:50%;*width:49.969%}.pure-u-1-3{width:33.3333%;*width:33.3023%}.pure-u-2-3{width:66.6667%;*width:66.6357%}.pure-u-1-4{width:25%;*width:24.969%}.pure-u-3-4{width:75%;*width:74.969%}.pure-u-1-5{width:20%;*width:19.969%}.pure-u-2-5{width:40%;*width:39.969%}.pure-u-3-5{width:60%;*width:59.969%}.pure-u-4-5{width:80%;*width:79.969%}.pure-u-1-6{width:16.6667%;*width:16.6357%}.pure-u-5-6{width:83.3333%;*width:83.3023%}.pure-u-1-8{width:12.5%;*width:12.469%}.pure-u-3-8{width:37.5%;*width:37.469%}.pure-u-5-8{width:62.5%;*width:62.469%}.pure-u-7-8{width:87.5%;*width:87.469%}.pure-u-1-12{width:8.3333%;*width:8.3023%}.pure-u-5-12{width:41.6667%;*width:41.6357%}.pure-u-7-12{width:58.3333%;*width:58.3023%}.pure-u-11-12{width:91.6667%;*width:91.6357%}.pure-u-1-24{width:4.1667%;*width:4.1357%}.pure-u-5-24{width:20.8333%;*width:20.8023%}.pure-u-7-24{width:29.1667%;*width:29.1357%}.pure-u-11-24{width:45.8333%;*width:45.8023%}.pure-u-13-24{width:54.1667%;*width:54.1357%}.pure-u-17-24{width:70.8333%;*width:70.8023%}.pure-u-19-24{width:79.1667%;*width:79.1357%}.pure-u-23-24{width:95.8333%;*width:95.8023%}.pure-g-r{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-flex;-webkit-flex-flow:row wrap;display:-ms-flexbox;-ms-flex-flow:row wrap}.opera-only :-o-prefocus,.pure-g-r{word-spacing:-.43em}.pure-g-r [class *="pure-u"]{font-family:sans-serif}.pure-g-r img{max-width:100%;height:auto}@media (min-width:980px){.pure-visible-phone{display:none}.pure-visible-tablet{display:none}.pure-hidden-desktop{display:none}}@media (max-width:480px){.pure-g-r>.pure-u,.pure-g-r>[class *="pure-u-"]{width:100%}}@media (max-width:767px){.pure-g-r>.pure-u,.pure-g-r>[class *="pure-u-"]{width:100%}.pure-hidden-phone{display:none}.pure-visible-desktop{display:none}}@media (min-width:768px) and (max-width:979px){.pure-hidden-tablet{display:none}.pure-visible-desktop{display:none}}.pure-menu ul{position:absolute;visibility:hidden}.pure-menu.pure-menu-open{visibility:visible;z-index:2;width:100%}.pure-menu ul{left:-10000px;list-style:none;margin:0;padding:0;top:-10000px;z-index:1}.pure-menu>ul{position:relative}.pure-menu-open>ul{left:0;top:0;visibility:visible}.pure-menu-open>ul:focus{outline:0}.pure-menu li{position:relative}.pure-menu a,.pure-menu .pure-menu-heading{display:block;color:inherit;line-height:1.5em;padding:5px 20px;text-decoration:none;white-space:nowrap}.pure-menu.pure-menu-horizontal>.pure-menu-heading{display:inline-block;*display:inline;zoom:1;margin:0;vertical-align:middle}.pure-menu.pure-menu-horizontal>ul{display:inline-block;*display:inline;zoom:1;vertical-align:middle;height:2.4em}.pure-menu li a{padding:5px 20px}.pure-menu-can-have-children>.pure-menu-label:after{content:'\25B8';float:right;font-family:'Lucida Grande','Lucida Sans Unicode','DejaVu Sans',sans-serif;margin-right:-20px;margin-top:-1px}.pure-menu-can-have-children>.pure-menu-label{padding-right:30px}.pure-menu-separator{background-color:#dfdfdf;display:block;height:1px;font-size:0;margin:7px 2px;overflow:hidden}.pure-menu-hidden{display:none}.pure-menu-fixed{position:fixed;top:0;left:0;width:100%}.pure-menu-horizontal li{display:inline-block;*display:inline;zoom:1;vertical-align:middle}.pure-menu-horizontal li li{display:block}.pure-menu-horizontal>.pure-menu-children>.pure-menu-can-have-children>.pure-menu-label:after{content:"\25BE"}.pure-menu-horizontal>.pure-menu-children>.pure-menu-can-have-children>.pure-menu-label{padding-right:30px}.pure-menu-horizontal li.pure-menu-separator{height:50%;width:1px;margin:0 7px}.pure-menu-horizontal li li.pure-menu-separator{height:1px;width:auto;margin:7px 2px}.pure-menu.pure-menu-open,.pure-menu.pure-menu-horizontal li .pure-menu-children{background:#fff;border:1px solid #b7b7b7}.pure-menu.pure-menu-horizontal,.pure-menu.pure-menu-horizontal .pure-menu-heading{border:0}.pure-menu a{border:1px solid transparent;border-left:0;border-right:0}.pure-menu a,.pure-menu .pure-menu-can-have-children>li:after{color:#777}.pure-menu .pure-menu-can-have-children>li:hover:after{color:#fff}.pure-menu .pure-menu-open{background:#dedede}.pure-menu li a:hover,.pure-menu li a:focus{background:#eee}.pure-menu li.pure-menu-disabled a:hover,.pure-menu li.pure-menu-disabled a:focus{background:#fff;color:#bfbfbf}.pure-menu .pure-menu-disabled>a{background-image:none;border-color:transparent;cursor:default}.pure-menu .pure-menu-disabled>a,.pure-menu .pure-menu-can-have-children.pure-menu-disabled>a:after{color:#bfbfbf}.pure-menu .pure-menu-heading{color:#565d64;text-transform:uppercase;font-size:90%;margin-top:.5em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#dfdfdf}.pure-menu .pure-menu-selected a{color:#000}.pure-menu.pure-menu-open.pure-menu-fixed{border:0;border-bottom:1px solid #b7b7b7}.pure-paginator{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;list-style:none;margin:0;padding:0}.opera-only :-o-prefocus,.pure-paginator{word-spacing:-.43em}.pure-paginator li{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-paginator .pure-button{border-radius:0;padding:.8em 1.4em;vertical-align:top;height:1.1em}.pure-paginator .pure-button:focus,.pure-paginator .pure-button:active{outline-style:none}.pure-paginator .prev,.pure-paginator .next{color:#C0C1C3;text-shadow:0 -1px 0 rgba(0,0,0,.45)}.pure-paginator .prev{border-radius:2px 0 0 2px}.pure-paginator .next{border-radius:0 2px 2px 0}@media (max-width:480px){.pure-menu-horizontal{width:100%}.pure-menu-children li{display:block;border-bottom:1px solid #000}}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:6px 12px}.pure-table td:first-child,.pure-table th:first-child{border-left-width:0}.pure-table thead{background:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child td,.pure-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child td{border-bottom-width:0} \ No newline at end of file diff --git a/files/sort-status-table.js b/files/sort-status-table.js deleted file mode 100644 index 7cde9e3..0000000 --- a/files/sort-status-table.js +++ /dev/null @@ -1,57 +0,0 @@ -$(document).ready(function () { - 'use strict'; - $.tablesorter.addParser({ - id : 'status', - is : function (s) { - return false; - }, - format: function (s) { - return s.replace('未知', 0).replace('人工维护', 1).replace('同步失败', 2).replace('正在同步', 3).replace('同步完成', 4); - }, - type: 'numeric' - }); - $.tablesorter.addParser({ - id : 'size', - is : function (s) { - return false; - }, - format: function (s) { - // Assume unknown size as zero. - var the_number = (s !== '-') ? parseFloat(s) : 0; - if (s.indexOf('K') >= 0) { - the_number = the_number * 1000; - } - if (s.indexOf('M') >= 0) { - the_number = the_number * 1000 * 1000; - } - if (s.indexOf('G') >= 0) { - the_number = the_number * 1000 * 1000 * 1000; - } - if (s.indexOf('T') >= 0) { - the_number = the_number * 1000 * 1000 * 1000 * 1000; - } - return the_number; - }, - type: 'numeric' - }); - $('#status-main-table').tablesorter({ - sortList: [[1, 0]], - textExtraction: function (s) { - var $el = $(s), - $img = $el.find('img'); - return $img.length ? $img.attr('alt') : $el.text(); - }, - headers : { - 3: { - 'sorter' : 'status' - }, - 4: { - 'sorter' : 'size' - }, - 8: { - 'sorter' : 'size' - } - } - }); -}); -// vi: set et sw=4 sts=4: diff --git a/files/tuna.css b/files/tuna.css deleted file mode 100644 index 3bf3e77..0000000 --- a/files/tuna.css +++ /dev/null @@ -1,143 +0,0 @@ -@charset "UTF-8"; -@font-face { - font-family: 'Open Sans'; - src: url("fonts/Regular/OpenSans-Regular.eot"); - src: url("fonts/Regular/OpenSans-Regular.eot?#iefix") format("embedded-opentype"), url("fonts/Regular/OpenSans-Regular.woff") format("woff"), url("fonts/Regular/OpenSans-Regular.ttf") format("truetype"), url("fonts/Regular/OpenSans-Regular.svg#OpenSansLight") format("svg"); - font-weight: 300; - font-style: normal; } - -@font-face { - font-family: 'Open Sans'; - src: url("fonts/Semibold/OpenSans-Semibold.eot"); - src: url("fonts/Semibold/OpenSans-Semibold.eot?#iefix") format("embedded-opentype"), url("fonts/Semibold/OpenSans-Semibold.woff") format("woff"), url("fonts/Semibold/OpenSans-Semibold.ttf") format("truetype"), url("fonts/Semibold/OpenSans-Semibold.svg#OpenSansSemibold") format("svg"); - font-weight: 600; - font-style: normal; } - -body { - font-size: 16px; - color: #444; } - -a, a:visited { - color: #2c7edf; - text-decoration: none; } - -a:hover { - color: #7cb2d7; } - -h1, h2, h3, h4 { - color: #71337f; } - -.aside { - border: 1px solid #777777; - background-color: #e6e6e6; } - -.placeholder { - height: 1em; - width: 100%; - display: none; } - @media screen and (min-width: 1130px) { - .placeholder { - display: block; } } - -@media screen and (min-width: 1130px) { - .padding-1-lr { - padding-left: 1em; - padding-right: 1em; } } -@media screen and (max-width: 1129px) { - .padding-1-lr { - padding-left: 1%; - padding-right: 1%; } } - -@media screen and (min-width: 1130px) { - .padding-2-lr { - padding-left: 2em; - padding-right: 2em; } } -@media screen and (max-width: 1129px) { - .padding-2-lr { - padding-left: 2%; - padding-right: 2%; } } - -.pull-right { - float: right; } - -.pull-left { - float: left; } - -.nospam { - display: none; } - -.pure-g-r [class*="pure-u"] { - font-family: "Open Sans", "Ubuntu", "Hiragino Sans GB", "WenQuanYi Micro Hei", "WenQuanYi Zen Hei", "STHeiti", "微软雅黑", sans-serif; } - -#wrapper { - background-color: #FFFFFF; } - @media screen and (min-width: 1130px) { - #wrapper { - margin: 0 5% 0 5%; - width: auto; } } - @media screen and (max-width: 1129px) { - #wrapper { - width: 100%; } } - -#header { - margin-bottom: 1em; - background-color: #71337f; } - #header h1 { - color: white; - font-weight: normal; } - #header .tagline { - margin-bottom: 1.2em; - color: #e3c8e9; } - #header .pure-menu { - background-color: transparent; } - #header .pure-menu li { - background-color: #71337f; - height: 100%; } - #header .pure-menu li.pure-menu-selected, #header .pure-menu li.pure-menu-selected:hover { - background-color: white; } - #header .pure-menu li.pure-menu-selected a, #header .pure-menu li.pure-menu-selected a:hover, #header .pure-menu li.pure-menu-selected:hover a, #header .pure-menu li.pure-menu-selected:hover a:hover { - font-weight: bold; - color: #71337f; } - #header .pure-menu li a { - color: white; } - #header .pure-menu li a:hover { - background-color: transparent !important; - color: #71337f; } - #header .pure-menu li:hover { - background-color: white; } - -#mirrorlist { - width: 100%; - border-spacing: 0; } - #mirrorlist thead, #mirrorlist tbody, #mirrorlist tr { - width: 100%; } - #mirrorlist th { - color: #71337f; } - #mirrorlist th, #mirrorlist td { - text-align: left; - padding: 4px 0; - background-color: transparent; } - #mirrorlist thead > tr { - border-bottom: 1px solid #DDD; } - #mirrorlist tbody > tr:nth-child(even) { - background-color: #f6ecf8; } - #mirrorlist .distribution { - width: 20%; } - @media screen and (max-width: 768px) { - #mirrorlist .distribution { - width: 60%; } } - #mirrorlist .description { - width: 40%; } - @media screen and (max-width: 768px) { - #mirrorlist .description { - display: none; } } - #mirrorlist .update { - width: 20%; } - @media screen and (max-width: 768px) { - #mirrorlist .update { - display: none; } } - #mirrorlist .help { - width: 20%; } - @media screen and (max-width: 768px) { - #mirrorlist .help { - width: 40%; } } diff --git a/files/unknown.png b/files/unknown.png deleted file mode 100644 index 5124ae81057c851825a0ebf9c0e9280842d24d19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9022 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 diff --git a/includes/after.php b/includes/after.php deleted file mode 100644 index abf7571..0000000 --- a/includes/after.php +++ /dev/null @@ -1,25 +0,0 @@ -

    - - - -
    - - - - - diff --git a/includes/before.php b/includes/before.php deleted file mode 100644 index 3cd5319..0000000 --- a/includes/before.php +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - -清华大学开源镜像站 - - - -
    - - - - diff --git a/includes/bydistro.php b/includes/bydistro.php deleted file mode 100644 index fc0fcb9..0000000 --- a/includes/bydistro.php +++ /dev/null @@ -1,44 +0,0 @@ - array(), - '7days' => array(), -); -function stat_by_distro_init($filename, $mark) { - global $statbydistro; - $f = fopen($filename, 'r'); - if ($f) { - while (!feof($f)) { - $line = fgets($f); - $t = explode(',', $line); - if (count($t) == 2) { - list($distro, $c) = $t; - $d = 0; - } else if (count($t) == 3) { - list($distro, $c, $d) = $t; - } - $statbydistro[$mark][$distro] = array($c, $d); - } - } -} - - -function stat_by_distro_get($distro, $mark) { - global $statbydistro; - return (isset($statbydistro[$mark][$distro]) ? $statbydistro[$mark][$distro] : 0); -} - - -function convert_byte_to_text($byte) { - $dw = array('B', 'KB', 'MB', 'GB', 'TB'); - $cur = 0; - $num = (double)$byte; - while ($num > 1000) { - $num /= 1000; - $cur++; - } - return sprintf("%0.2lf%s", $num, $dw[$cur]); -} - - -stat_by_distro_init('/home/mirror/log/_http/bydistro/yesterday.csv', 'yesterday'); -stat_by_distro_init('/home/mirror/log/_http/bydistro/week.csv', 'week'); diff --git a/includes/colors.php b/includes/colors.php deleted file mode 100644 index a1aded4..0000000 --- a/includes/colors.php +++ /dev/null @@ -1,11 +0,0 @@ - diff --git a/includes/index.php b/includes/index.php deleted file mode 100644 index 2c3ea2e..0000000 --- a/includes/index.php +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/includes/tuna.css.php b/includes/tuna.css.php deleted file mode 100644 index 82bfa1f..0000000 --- a/includes/tuna.css.php +++ /dev/null @@ -1,225 +0,0 @@ -@charset "UTF-8"; -@font-face { - font-family: 'Open Sans'; - src: url("files/fonts/Regular/OpenSans-Regular.eot"); - src: url("files/fonts/Regular/OpenSans-Regular.eot?#iefix") format("embedded-opentype"), - url("files/fonts/Regular/OpenSans-Regular.woff") format("woff"), - url("files/fonts/Regular/OpenSans-Regular.ttf") format("truetype"), - url("files/fonts/Regular/OpenSans-Regular.svg#OpenSansLight") format("svg"); - font-weight: normal; - font-style: normal; -} -@font-face { - font-family: 'Open Sans'; - src: url("files/fonts/Semibold/OpenSans-Semibold.eot"); - src: url("files/fonts/Semibold/OpenSans-Semibold.eot?#iefix") format("embedded-opentype"), - url("files/fonts/Semibold/OpenSans-Semibold.woff") format("woff"), - url("files/fonts/Semibold/OpenSans-Semibold.ttf") format("truetype"), - url("files/fonts/Semibold/OpenSans-Semibold.svg#OpenSansSemibold") format("svg"); - font-weight: 600; - font-style: normal; -} -body { - font-size: 16px; - color: ; -} -a, a:visited { - color: ; - text-decoration: none; -} -a:hover { - color: ; -} -h1, h2, h3, h4 { - color: ; -} -ul { - padding: 0 0 0 20px; -} -.placeholder { - height: 1em; - width: 100%; - display: none; -} - -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.nospam { - display: none; -} -.pure-g-r [class*="pure-u"] { - font-family: "Open Sans", "Ubuntu", "Hiragino Sans GB", "WenQuanYi Micro Hei", "WenQuanYi Zen Hei", "STHeiti", "微软雅黑", sans-serif; -} - -#wrapper { - background-color: ; - width: 100%; -} - - -@media screen and (min-width: 1130px) { - - .container { - margin: 0 5% 0 5%; - width: auto; - } - - .placeholder { - display: block; - } - - .padding-1-lr { - padding-left: 1em; - padding-right: 1em; - } - - .padding-2-lr { - padding-left: 2em; - padding-right: 2em; - } - - #mirrorlist-container { - margin: 0 1em; - width: auto; - } - - -} - - -@media screen and (max-width: 1129px) { - .container { - margin: 0; - width: 100%; - } - - #mirrorlist-container { - margin: 0 2%; - width: auto; - } - - .padding-1-lr { - padding-left: 1%; - padding-right: 1%; - } - - .padding-2-lr { - padding-left: 2%; - padding-right: 2%; - } -} - -#header { - margin-bottom: 1em; - background-color: ; -} - -#header h1 { - color: ; - font-weight: normal; -} - -#header .tagline { - margin-bottom: 1.2em; - color: ; -} - -#header .pure-menu { - background-color: transparent; -} - -#header .pure-menu li { - background-color: ; - height: 100%; -} - -#header .pure-menu li.pure-menu-selected, #header .pure-menu li.pure-menu-selected:hover { - background-color: ; -} - -#header .pure-menu li.pure-menu-selected a, #header .pure-menu li.pure-menu-selected a:hover, #header .pure-menu li.pure-menu-selected:hover a, #header .pure-menu li.pure-menu-selected:hover a:hover { - font-weight: bold; - color: ; -} - -#header .pure-menu li a { - color: ; -} - -#header .pure-menu li a:hover { - background-color: transparent !important; - color: ; -} - -#header .pure-menu li:hover { - background-color: ; -} - -#mirrorlist { - width: 100%; - border-spacing: 0; -} - -#mirrorlist thead, #mirrorlist tbody, #mirrorlist tr { - width: 100%; -} - -#mirrorlist th { - color: ; -} - -#mirrorlist th, #mirrorlist td { - text-align: left; - padding: 4px 0; - background-color: transparent; -} - -#mirrorlist thead > tr { - border-bottom: 1px solid ; -} - -#mirrorlist tbody > tr:nth-child(even) { - background-color: ; -} - -#mirrorlist .distribution { - width: 20%; -} -#mirrorlist .description { - width: 50%; -} -#mirrorlist .update { - width: 20%; -} -#mirrorlist .help { - width: 10%; -} - -@media screen and (max-width: 768px) { - #mirrorlist .distribution { - width: 50%; - } - #mirrorlist .description { - display: none; - } - #mirrorlist .update { - width: 30%; - } - #mirrorlist .help { - width: 20%; - } -} - - -#footer { - border-top: 1px solid ; - background-color: ; -} - -#foot-logo { - height: 96px; -} diff --git a/index.php b/index.php deleted file mode 100644 index 44c6aa2..0000000 --- a/index.php +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - - - - - - - - - 清华大学开源镜像站 - - - - -
    - - - - -
    -

    简介

    -

    -欢迎来到清华大学开源镜像网站,它由清华大学开源镜像站管理团队维护管理。 -

    - -

    本站可以在校内外通过 IPv4/IPv6 使用。本站域名有:

    - - -

    镜像使用所需配置参见 Wiki

    - -

    如果您有任何问题或建议,请在我们的 issue tracker - 上提交 bug,或者访问我们的Google -Groups,或直接向 Google Groups 的邮件列表 thu-opensource-mirror-admin [SPAM] AT googlegroups [SPAM] DOT com 寄信。 -

    - - 'cn.mirror.archlinuxarm.org')), - array('centos', '由社区维护的与 RHEL 完全兼容的发行版。', 'alick', array('B')), - array('chakra', '基于 KDE SC、无 Gtk 的桌面环境。前身是 Archlinux 的 [kde-mod]。', 'xiaq', array('N')), - array('CPAN', 'Comprehensive Perl Archive Network', 'fqj1994', array('N')), - array('CRAN', 'The Comprehensive R Archive Network', 'ray', array('N')), - array('CTAN', 'Comprehensive TeX Archive Network', 'MichaelChou', array('N')), - array('cygwin', 'Windows 平台下的类 Unix环境.', 'BYVoid', array('N')), - array('debian', '一个完全由社区维护的 Linux 发行版。', 'heroxbd', array('N')), - array('debian-backports', 'Debian Stable 上用的 Testing/Unstable 扩展包。', 'heroxbd', array('N')), - array('debian-cd', 'Debian CD 镜像。', 'fqj1994', array('N')), - array('debian-firmware', 'Debian 的闭源 firmware 和含有闭源 firmware 的 netinst CD。', 'fqj1994', array('N')), - array('debian-multimedia', 'Debian 非官方多媒体套件。', 'heroxbd', array('N')), - array('debian-security', 'Debian 安全情报', 'heroxbd', array('N')), - array('debian-weekly-builds', 'Debian CD 镜像每周构建。', 'fqj1994', array('N')), - array('deepin', '基于 Ubuntu 的面向中文桌面用户的发行版。', 'xiaq', array('B')), - array('deepin-releases', 'Deepin 稳定版的 CD 镜像。', 'xiaq', array('B')), - array('elrepo', 'RHEL 及其衍生版的一个社区仓库,软件包主要和硬件相关。', 'alick', array('N')), - array('epel', 'Fedora 社区为 RHEL 等提供的额外软件包。', 'BYVoid', array('N')), - array('fedora', '自由友爱杰出前卫的 Linux 发行版,Red Hat 公司赞助的社区项目。', 'alick', array('N')), - array('freebsd', '拥有辉煌历史的 BSD 的一个重要分支。', 'xiaq', array('N')), - array('gentoo', '一个快速的元发行版,软件包系统使用源代码。', 'cuckoo', array('N')), - array('gentoo-portage', 'Gentoo 的 ports collection。', 'cuckoo', array('N')), - array('gentoo-portage-prefix', 'Gentoo on a different level', 'heroxbd', array('A', 'url' => 'rsync.cn.prefix.freens.org')), - array('gnu', 'GNU/Linux 的基础软件。', 'MichaelChou', array('N')), - array('kernel', 'Linux 内核。', 'BYVoid', array('N')), - array('linuxmint', '基于Ubuntu的发行版', 'fqj1994', array('B')), - array('linuxmint-cd', 'LinuxMint的CD/DVD镜像', 'fqj1994', array('B')), - array('macports', 'Mac OS X 与 Darwin 的包管理软件,GUI与CLI的结合。', 'VuryLeo', array('N')), - array('npm', 'Node Packaged Modules', 'ray', array('N')), - array('opensuse', '由 Novell 支持的 Linux 发行版。', 'xiaq', array('N')), - array('pypi', 'Python Package Index', 'fqj1994', array('A', 'url' => 'e.pypi.python.org/')), - array('rpmfusion', '一个用于 Fedora 和 RHEL 等的第三方软件仓库。', 'alick', array('N')), - array('rubygems', 'Ruby Gems的仓库', 'fqj1994', array('N')), - array('scientific', '由美国费米实验室维护的与 RHEL 兼容的发行版。', 'BYVoid', array('N')), - array('sagemath', '一个整合了多个开源数学工具的开源数学工具。', 'fqj1994', array('B')), - array('slackware', '最有资历的 Linux 发行版。', 'BYVoid', array('N')), - array('tldp', 'The Linux Documentation Project 镜像', 'aron', array('N')), - array('ubuntu', '基于 Debian 的以桌面应用为主的 Linux 发行版。', 'BYVoid', array('B')), - array('ubuntu-ppa', 'Ubuntu PPA 精选镜像', 'aron', array('N')), - array('ubuntu-releases', 'Ubuntu CD 镜像。', 'MichaelChou', array('B')), - array('ubuntukylin-releases', 'Ubuntu Kylin CD 镜像。', 'xiaq', array('B')), - array('raspbian', 'raspberry-pi debian镜像 剑桥大学发起的25美元的微小型廉价电脑', 'scateu', array('B')), -); - -function maintainer($name) -{ - $mters = array( - 'BYVoid' => 'http://www.byvoid.com/', - 'xiaq' => 'http://wiki.tuna.tsinghua.edu.cn/xiaq', - 'MichaelChou' => 'http://michael.yuespot.org/', - 'heroxbd' => 'http://www.awa.tohoku.ac.jp/~benda/', - 'alick' => 'http://wiki.tuna.tsinghua.edu.cn/alick', - 'ray' => 'http://maskray.me', - 'VuryLeo' => 'http://www.vuryleo.com/', - 'fqj1994' => 'http://fqj.me/', - 'scateu' => 'http://wiki.tuna.tsinghua.edu.cn/scateu', - ); - if (isset($mters[$name])) - return "{$name}"; - else - return $name; -} - -function format_bytes($bytes, $precision = 2) { - $units = array('B', 'KB', 'MB', 'GB', 'TB'); - $bytes = max($bytes, 0); - $pow = floor(($bytes ? log($bytes) : 0) / log(1024)); - $pow = min($pow, count($units) - 1); - $bytes /= (1 << (10 * $pow)); - return round($bytes, $precision) . ' '. $units[$pow]; -} - -function get_disk_usage($file) { - $usage = array('total' => 0, 'used' => 0, 'free' => 0); - $lines = file($file, FILE_IGNORE_NEW_LINES); - if ($lines) { - foreach ($lines as $line) { - $sec = explode(" ", $line); - $usage['total'] += (int)($sec[0]); - $usage['used'] += (int)($sec[1]); - $usage['free'] += (int)($sec[2]); - } - $percent = $usage['used'] * 100.0 / $usage['total']; - foreach ($usage as $key => $value) { - $usage[$key] = format_bytes($value * 1024); - } - $usage['percent'] = (string)(round($percent, 2)); - $usage['percent_int'] = (string)(round($percent)); - } else { - $usage['total'] = $usage['used'] = $usage['free'] = $usage['percent'] = '未知'; - $usage['percent_int'] = '0'; - } - return $usage; -} - -function initialize_status($status_files) -{ - $status = array(); - $context = stream_context_create(array( - 'http' => array( - 'timeout' => 3 - ) - )); - foreach ($status_files as $file_idx => $status_file) - { - $lines = file($status_file, FILE_IGNORE_NEW_LINES, $context); - foreach ($lines as $line) - { - $sec = explode(",", $line); - if (count($sec) < 2) - continue; - $mirror = array(); - $fields = array( - 'name', 'current', - 'stamp', 'files_count', 'files_transferred_count', - 'size', 'size_transferred', 'literal', 'matched', - 'file_list_size', 'file_list_generate_time', - 'file_list_transfer_time', 'bytes_sent', 'bytes_received' - ); - for ($i = 0; $i < count($sec); $i++) - { - $mirror[$fields[$i]] = $sec[$i]; - } - $status[$mirror['name']] = $mirror; - } - } - return $status; -} - -function format_size($size) -{ - return str_replace(' bytes', 'B', $size); -} -?> - -
    -

    状态统计

    -
    -

    各镜像状态表

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Is an official mirror?名称维护者状态大小文件总数同步完成时间请求次数请求数据量
    official'; - break; -case 'B': - echo 'official'; - break; -case 'N': - echo 'non-official'; - break; -case 'U': - echo 'unknown'; - break; -} -?> - - - - 同步完成正在同步同步失败人工维护未知
    -
    -
      -
    • 第一列显示是否为发行版/项目的官方软件源。
    • -
    • 对于正在同步和同步失败的镜像,大小、文件总数、同步完成时间等信息取自最近一次成功同步时的日志。
    • -
    • 请求次数/数据量取自最近七日的 HTTP 请求。
    • -
    -
    -
    -

    磁盘使用:
    -
    -

    -

    -

    HTTP统计

    -
    -

    流量统计

    -

    最近24小时流量图

    -eth0-day -eth1-day - -', PHP_EOL; - foreach ($ip4 as $key => $value) { - $up = $value ? "连接正常" : "无法连接"; - echo "\n"; - } - echo "\n"; - foreach ($ip6 as $key => $value) { - $up = $value ? "连接正常" : "无法连接"; - echo "\n"; - } - - } -?> -
    -
    -
    - - - - - -
    - - - diff --git a/notice.404.html b/notice.404.html deleted file mode 100644 index f670571..0000000 --- a/notice.404.html +++ /dev/null @@ -1,4 +0,0 @@ -

    -因为存储故障,部分镜像无法使用,且未在主页上正确标识出其状态。如果您使用镜像时 -遇到 HTTP 404,请暂时使用其他镜像站。带来不便,敬请谅解。 -

    diff --git a/npm/css/style.css b/npm/css/style.css deleted file mode 100644 index 4cea479..0000000 --- a/npm/css/style.css +++ /dev/null @@ -1,340 +0,0 @@ -html, -body, -div, -span, -applet, -object, -iframe, -h1, -h2, -h3, -h4, -h5, -h6, -p, -blockquote, -pre, -a, -abbr, -acronym, -address, -big, -cite, -code, -del, -dfn, -em, -img, -ins, -kbd, -q, -s, -samp, -small, -strike, -strong, -sub, -sup, -tt, -var, -dl, -dt, -dd, -ol, -ul, -li, -fieldset, -form, -label, -legend, -table, -caption, -tbody, -tfoot, -thead, -tr, -th, -td { - margin: 0; - padding: 0; - border: 0; - outline: 0; - font-weight: inherit; - font-style: inherit; - font-family: inherit; - font-size: 100%; - vertical-align: baseline; -} -body { - line-height: 1; - color: #000; - background: #fff; -} -ol, -ul { - list-style: none; -} -table { - border-collapse: separate; - border-spacing: 0; - vertical-align: middle; -} -caption, -th, -td { - text-align: left; - font-weight: normal; - vertical-align: middle; -} -a img { - border: none; -} -.row { - margin-left: -10px; - zoom: 1; -} -.row:before, -.row:after { - content: ""; - display: table; -} -.row:after { - clear: both; -} -[class*='span'] { - margin-left: 20px; -} -.span1 { - display: inline; - overflow: hidden; - float: left; - width: 60px; - min-height: 30px; -} -.offset1 { - margin-left: 100px; -} -.span2 { - display: inline; - overflow: hidden; - float: left; - width: 140px; - min-height: 30px; -} -.offset2 { - margin-left: 180px; -} -.span3 { - display: inline; - overflow: hidden; - float: left; - width: 220px; - min-height: 30px; -} -.offset3 { - margin-left: 260px; -} -.span4 { - display: inline; - overflow: hidden; - float: left; - width: 300px; - min-height: 30px; -} -.offset4 { - margin-left: 340px; -} -.span5 { - display: inline; - overflow: hidden; - float: left; - width: 380px; - min-height: 30px; -} -.offset5 { - margin-left: 420px; -} -.span6 { - display: inline; - overflow: hidden; - float: left; - width: 460px; - min-height: 30px; -} -.offset6 { - margin-left: 500px; -} -.span7 { - display: inline; - overflow: hidden; - float: left; - width: 540px; - min-height: 30px; -} -.offset7 { - margin-left: 580px; -} -.span8 { - display: inline; - overflow: hidden; - float: left; - width: 620px; - min-height: 30px; -} -.offset8 { - margin-left: 660px; -} -.span9 { - display: inline; - overflow: hidden; - float: left; - width: 700px; - min-height: 30px; -} -.offset9 { - margin-left: 740px; -} -.span10 { - display: inline; - overflow: hidden; - float: left; - width: 780px; - min-height: 30px; -} -.offset10 { - margin-left: 820px; -} -.span11 { - display: inline; - overflow: hidden; - float: left; - width: 860px; - min-height: 30px; -} -.offset11 { - margin-left: 900px; -} -.span12 { - display: inline; - overflow: hidden; - float: left; - width: 940px; - min-height: 30px; -} -.offset12 { - margin-left: 980px; -} -::selection { - background: #adf; -} -body { - font-family: '微软雅黑', '文泉驿微米黑', '黑体', Georgia, Arial, sans-serif; - background: #dedede; -} -a { - text-decoration: none; -} -p { - margin-top: 1em; - margin-bottom: 1em; -} -pre { - font-family: Inconsolata, Consolas, Monaco, Courier, monospace; - font-size: 0.8rem; - white-space: pre-wrap; - border: 1px solid #bbb; - background: #faf8f0; - padding: 4px; -} -ul { - list-style-type: none; - padding: 0; -} -li { - margin: 0; -} -h1, -h2, -h3 { - text-align: center; - line-height: 2em; -} -h1 { - font-size: 2em; - font-weight: bold; - color: #640; -} -h2 { - font-size: 1.3em; - font-weight: bold; - color: #8a0f8a; - margin-bottom: 20px; -} -h3 { - color: #056105; - border-bottom: 1px solid; - margin-bottom: 15px; -} -section { - margin-bottom: 40px; - -webkit-border-radius: 10px; - border-radius: 10px; - padding: 10px 0px; - background: #f2f2f2; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.container { - width: 960px; - margin: 0 auto; -} -.scheme { - -webkit-box-shadow: 0 0 5px -1px #000; - box-shadow: 0 0 5px -1px #000; - -webkit-border-radius: 10px; - border-radius: 10px; - background: #e6f4e6; - padding: 8px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.alert { - margin-bottom: 40px; - -webkit-border-radius: 10px; - border-radius: 10px; - padding: 10px; - background: #faf3d1; - color: #b98f46; - text-align: center; -} -#masthead { - margin-bottom: 36px; -} -#logo-container { - position: absolute; - top: 20px; -} -#nodejs { - display: block; -} -#ribbon { - display: inline-block; - width: 50px; -} -#npm { - display: inline-block; - width: 100px; - vertical-align: top; - padding-top: 20px; -} -#logo { - padding-top: 25px; - margin-left: 200px; -} -footer { - border-top: 3px double #1a1a1a; - font-size: small; - text-align: center; -} diff --git a/npm/css/style.styl b/npm/css/style.styl deleted file mode 100644 index 3679bcd..0000000 --- a/npm/css/style.styl +++ /dev/null @@ -1,143 +0,0 @@ -@import 'nib' - -global-reset() - -// grid system - -gutter-width = 20px -column-width = 60px -columns = 12 -total-width = (gutter-width + column-width) * columns - -.row - margin-left gutter-width * -0.5 - clearfix() - -span(x) - display inline - overflow hidden - float left - width (column-width + gutter-width) * x - gutter-width - min-height 30px - -[class*='span'] - margin-left gutter-width - -offset(x) - margin-left (column-width + gutter-width) * x + gutter-width - -for x in 1..12 - .span{x} - span(x) - .offset{x} - offset(x) - -// components - -::selection - background #adf - -body - font-family '微软雅黑', '文泉驿微米黑', '黑体', Georgia, Arial, sans-serif - background darken(white, 13%) - -a - text-decoration none - -p - margin-top 1em - margin-bottom 1em - -pre - font-family Inconsolata, Consolas, Monaco, Courier, monospace - font-size 0.8rem - white-space pre-wrap - border 1px solid #bbb - background #faf8f0 - padding 4px - -ul - list-style-type none - padding 0 - -li - margin 0 - -h1, h2, h3 - text-align center - line-height 2em - -h1 - font-size 2em - font-weight bold - color #640 - -h2 - font-size 1.3em - font-weight bold - color hsl(300, 80%, 30%) - margin-bottom 20px - -h3 - color hsl(120, 90%, 20%) - border-bottom 1px solid - margin-bottom 15px - -section - margin-bottom 40px - border-radius 10px - padding 10px 0px - background darken(white, 5px) - box-sizing border-box - -.container - width total-width - margin 0 auto - -.scheme - box-shadow 0 0 5px -1px black - border-radius 10px - background hsl(120, 40%, 93%) - padding 8px - box-sizing border-box - -.alert - margin-bottom 40px - border-radius 10px - padding 10px - background hsl(50, 80%, 90%) - color hsl(38, 45%, 50%) - text-align center - -// masthead - -#masthead - margin-bottom 36px - -#logo-container - position absolute - top 20px - -#nodejs - display block - -#ribbon - display inline-block - width 50px - -#npm - display inline-block - width 100px - vertical-align top - padding-top 20px - -#logo - padding-top 25px - margin-left 200px - -// footer - -footer - border-top 3px double lighten(black, 10%) - font-size small - text-align center diff --git a/npm/grunt.js b/npm/grunt.js deleted file mode 100644 index b4a6106..0000000 --- a/npm/grunt.js +++ /dev/null @@ -1,56 +0,0 @@ -/*global module:false*/ -module.exports = function(grunt) { - - // Project configuration. - grunt.initConfig({ - watch: { - files: '', - tasks: 'lint test' - }, - watch: { - coffee: { - files: 'js/**/*.coffee', - tasks: 'coffee' - }, - stylus: { - files: 'css/**/*.styl', - tasks: 'stylus' - }, - jade: { - files: '*.jade', - tasks: 'jade' - }, - }, - coffee: { - compile: { - files: { - 'js/*.js': 'js/*.coffee', // 1:1 compile - } - }, - }, - stylus: { - compile: { - files: { - 'css/*.css': 'css/*.styl' - } - }, - }, - jade: { - compile: { - files: { - 'index.html': 'index.jade' - } - }, - }, - }); - - grunt.utils.hooker.hook(grunt.fail, 'warn', function(opt) { - var cmd = "notify-send Grunt 'Task failed'"; - require('child_process').exec(cmd); - }); - - grunt.loadNpmTasks('grunt-contrib-coffee'); - grunt.loadNpmTasks('grunt-contrib-stylus'); - grunt.loadNpmTasks('grunt-contrib-jade'); - grunt.registerTask('default', 'lint test'); -}; diff --git a/npm/img/nodejs.png b/npm/img/nodejs.png deleted file mode 100644 index cbea50846e21d48377dbf7efde6fb8fe08748818..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5678 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[y]("/")[0][q](":")&&(a=k+f[2][B](0,f[2].lastIndexOf("/"))+"/"+a);d.href=a;e=c(d);return{protocol:(d[A]||"")[D](),host:e[0], -port:e[1],path:e[2],Oa:d[va]||"",url:a||""}}function Na(a,b){function c(b,c){a.contains(b)||a.set(b,[]);a.get(b)[n](c)}for(var d=Da(b)[y]("&"),e=0;ef?c(d[e],"1"):c(d[e][B](0,f),d[e][B](f+1))}}function Pa(a,b){if(F(a)||"["==a[ma](0)&&"]"==a[ma](a[w]-1))return"-";var c=J.domain;return a[q](c+(b&&"/"!=b?b:""))==(0==a[q]("http://")?7:0==a[q]("https://")?8:0)?"0":a};var Qa=0;function Ra(a,b,c){!(1<=Qa)&&!(1<=100*m.random())&&(a=["utmt=error","utmerr="+a,"utmwv=5.3.9","utmn="+Ea(),"utmsp=1"],b&&a[n]("api="+b),c&&a[n]("msg="+G(c[B](0,100))),M.w&&a[n]("aip=1"),Sa(a[C]("&")),Qa++)};var Ta=0,Ua={};function N(a){return Va("x"+Ta++,a)}function Va(a,b){Ua[a]=!!b;return a} -var Wa=N(),Xa=Va("anonymizeIp"),Ya=N(),$a=N(),ab=N(),bb=N(),O=N(),P=N(),cb=N(),db=N(),eb=N(),fb=N(),gb=N(),hb=N(),ib=N(),jb=N(),kb=N(),lb=N(),nb=N(),ob=N(),pb=N(),qb=N(),rb=N(),sb=N(),tb=N(),ub=N(),vb=N(),wb=N(),xb=N(),yb=N(),zb=N(),Ab=N(),Bb=N(),Cb=N(),Db=N(),Eb=N(),Fb=N(h),Gb=Va("currencyCode"),Hb=Va("page"),Ib=Va("title"),Jb=N(),Kb=N(),Lb=N(),Mb=N(),Nb=N(),Ob=N(),Pb=N(),Qb=N(),Rb=N(),Q=N(h),Sb=N(h),Tb=N(h),Ub=N(h),Vb=N(h),Wb=N(h),Zb=N(h),$b=N(h),ac=N(h),bc=N(h),cc=N(h),R=N(h),dc=N(h),ec=N(h),fc= -N(h),gc=N(h),hc=N(h),ic=N(h),jc=N(h),S=N(h),kc=N(h),lc=N(h),mc=N(h),nc=N(h),oc=N(h),pc=N(h),qc=N(h),rc=Va("campaignParams"),sc=N(),tc=Va("hitCallback"),uc=N();N();var vc=N(),wc=N(),xc=N(),yc=N(),zc=N(),Ac=N(),Bc=N(),Cc=N(),Dc=N(),Ec=N(),Fc=N(),Gc=N(),Hc=N(),Ic=N();N();var Mc=N(),Nc=N(),Oc=N();function Pc(a){var b=this.plugins_;if(b)return b.get(a)}var T=function(a,b,c,d){a[b]=function(){try{return d!=g&&H(d),c[ya](this,arguments)}catch(a){throw Ra("exc",b,a&&a[r]),a;}}},Qc=function(a,b,c,d){U[x][a]=function(){try{return H(c),Aa(this.a.get(b),d)}catch(e){throw Ra("exc",a,e&&e[r]),e;}}},V=function(a,b,c,d,e){U[x][a]=function(f){try{H(c),e==g?this.a.set(b,Aa(f,d)):this.a.set(b,e)}catch(j){throw Ra("exc",a,j&&j[r]),j;}}};var Rc=RegExp(/(^|\.)doubleclick\.net$/i),Sc=function(a,b){return Rc[ia](J[z].hostname)?h:"/"!==b?l:(0==a[q]("www.google.")||0==a[q](".google.")||0==a[q]("google."))&&!(-1b[w]||ad(b[0],c))return l;b=b[ja](1)[C](".")[y]("|");0=b[w])return h;b=b[1][y](-1==b[1][q](",")? -"^":",");for(c=0;cb[w]||ad(b[0],c))return a.set(ec,g),a.set(fc,g),a.set(gc,g),a.set(ic,g),a.set(jc,g),a.set(nc,g),a.set(oc,g),a.set(pc,g),a.set(qc,g),a.set(S,g),a.set(kc,g),a.set(lc,g),a.set(mc,g),l;a.set(ec,1*b[1]);a.set(fc,1*b[2]);a.set(gc,1*b[3]);var d=b[ja](4)[C](".");b=function(a){return(a=d[oa](a+"=(.*?)(?:\\|utm|$)"))&&2==a[w]?a[1]:g};c=function(b,c){c?(c=e?I(c):c[y]("%20")[C](" "),a.set(b,c)):a.set(b,g)};-1==d[q]("=")&&(d=I(d));var e="2"==b("utmcvr"); -c(ic,b("utmcid"));c(jc,b("utmccn"));c(nc,b("utmcsr"));c(oc,b("utmcmd"));c(pc,b("utmctr"));c(qc,b("utmcct"));c(S,b("utmgclid"));c(kc,b("utmgclsrc"));c(lc,b("utmdclid"));c(mc,b("utmdsid"));return h},ad=function(a,b){return b?a!=b:!/^\d+$/[ia](a)};var Uc=function(){this.filters=[]};Uc[x].add=function(a,b){this.filters[n]({name:a,s:b})};Uc[x].execute=function(a){try{for(var b=0;b=100*a.get(vb)&&a[ta]()}function kd(a){ld(a.get(Wa))&&a[ta]()}function md(a){"file:"==J[z][A]&&a[ta]()}function nd(a){a.get(Ib)||a.set(Ib,J.title,h);a.get(Hb)||a.set(Hb,J[z].pathname+J[z][va],h)};var od=new function(){var a=[];this.set=function(b){a[b]=h};this.Xa=function(){for(var b=[],c=0;c=b[0]||0>=b[1]?"":b[C]("x");a.Wa=d}catch(k){H(135)}qd=a}},td=function(){sd();for(var a= -qd,b=W[za],a=b.appName+b.version+a.language+b.platform+b.userAgent+a.javaEnabled+a.Q+a.P+(J.cookie?J.cookie:"")+(J.referrer?J.referrer:""),b=a[w],c=W.history[w];0d?(this.i=b[B](0,d),this.l=b[B](d+1,c),this.h=b[B](c+1)):(this.i=b[B](0,d),this.h=b[B](d+1));this.k=a[ja](1);this.Ma=!this.l&&"_require"==this.h;this.J=!this.i&&!this.l&&"_provide"==this.h}},Y=function(){T(Y[x],"push",Y[x][n],5);T(Y[x],"_getPlugin",Pc,121);T(Y[x], -"_createAsyncTracker",Y[x].Sa,33);T(Y[x],"_getAsyncTracker",Y[x].Ta,34);this.I=new Ja;this.p=[]};E=Y[x];E.Na=function(a,b,c){var d=this.I.get(a);if(!Ba(d))return l;b.plugins_=b.plugins_||new Ja;b.plugins_.set(a,new d(b,c||{}));return h};E.push=function(a){var b=Z.Va[ya](this,arguments),b=Z.p.concat(b);for(Z.p=[];0e?b+"#"+d:b+"&"+d;c="";f=b[q]("?");0f?b+"?"+d+c:b+"&"+d+c},$d=function(a,b,c,d){for(var e=0;3>e;e++){for(var f=0;3>f;f++){if(d==Yc(a+b+c))return H(127),[b,c];var j=b[p](/ /g,"%20"), -k=c[p](/ /g,"%20");if(d==Yc(a+j+k))return H(128),[j,k];j=j[p](/\+/g,"%20");k=k[p](/\+/g,"%20");if(d==Yc(a+j+k))return H(129),[j,k];try{var s=b[oa]("utmctr=(.*?)(?:\\|utm|$)");if(s&&2==s[w]&&(j=b[p](s[1],G(I(s[1]))),d==Yc(a+j+c)))return H(139),[j,c]}catch(t){}b=I(b)}c=I(c)}};var de="|",fe=function(a,b,c,d,e,f,j,k,s){var t=ee(a,b);t||(t={},a.get(Cb)[n](t));t.id_=b;t.affiliation_=c;t.total_=d;t.tax_=e;t.shipping_=f;t.city_=j;t.state_=k;t.country_=s;t.items_=t.items_||[];return t},ge=function(a,b,c,d,e,f,j){a=ee(a,b)||fe(a,b,"",0,0,0,"","","");var k;a:{if(a&&a.items_){k=a.items_;for(var s=0;sb[w])&&/^\d+$/[ia](b[0])&&(b[0]=""+c,Fd(a,"__utmx",b[C]("."),g))},be=function(a,b){var c=$c(a.get(O),pd("__utmx"));"-"==c&&(c="");return b?G(c):c};var ke=function(a,b){var c=m.min(a.b(Dc,0),100);if(a.b(Q,0)%100>=c)return l;a:{if(c=(c=W.performance||W.webkitPerformance)&&c.timing){var d=c.navigationStart;if(0==d)H(133);else{c=[c.loadEventStart-d,c.domainLookupEnd-c.domainLookupStart,c.connectEnd-c.connectStart,c.responseStart-c.requestStart,c.responseEnd-c.responseStart,c.fetchStart-d,c.domInteractive-d,c.domContentLoadedEventStart-d];break a}}c=g}c||(W.top!=W?c=g:(d=(c=W.external)&&c.onloadT,c&&!c.isValidLoadTime&&(d=g),2147483648c[d]){d=l;break a}d=h}d?b(je(c)):b(je(c[ja](0,1)))}else Ga(W,"load",function(){ke(a,b)},l);return h},me=function(a,b,c,d){var e=new yd;e.f(14,90,b[B](0,500));e.f(14,91,a[B](0,150));e.f(14,92,""+le(c));d!=g&&e.f(14,93,d[B](0,500));e.o(14,90,c);return e},le=function(a){return da(a)||0>a?0:5E3>a?10*m[la](a/10):5E4>a?100*m[la](a/100):41E5>a?1E3*m[la](a/ -1E3):41E5},je=function(a){for(var b=new yd,c=0;c=f)return l;c=1*(""+c);if(""==a||(!wd(a)||""==b||!wd(b)||!xd(c)||da(c)||0>c||0>f||100=a||a>e.get(yb))a=l;else if(!b||!c||128=a&&Ca(b)&&""!=b){var c=this.get(Fc)||[];c[a]=b;this.set(Fc,c)}};E.V=function(a){a=""+a;if(a[oa](/^[A-Za-z0-9]{1,5}$/)){var b=this.get(Ic)||[];b[n](a);this.set(Ic,b)}};E.v=function(){this.a[ka]()};E.Ba=function(a){a&&""!=a&&(this.set(Tb,a),this.a.j("var"))};var ne=function(a){"trans"!==a.get(sc)&&500<=a.b(cc,0)&&a[ta]();if("event"===a.get(sc)){var b=(new Date).getTime(),c=a.b(dc,0),d=a.b(Zb,0),c=m[la](1*((b-(c!=d?c:1E3*c))/1E3));0=a.b(R,0)&&a[ta]()}},pe=function(a){"event"===a.get(sc)&&a.set(R,m.max(0,a.b(R,10)-1))};var qe=function(){var a=[];this.add=function(b,c,d){d&&(c=G(""+c));a[n](b+"="+c)};this.toString=function(){return a[C]("&")}},re=function(a,b){(b||2!=a.get(xb))&&a.z(cc)},se=function(a,b){b.add("utmwv","5.3.9");b.add("utms",a.get(cc));b.add("utmn",Ea());var c=J[z].hostname;F(c)||b.add("utmhn",c,h);c=a.get(vb);100!=c&&b.add("utmsp",c,h)},te=function(a,b){b.add("utmac",Da(a.get(Wa)));a.get(Oc)&&b.add("utmxkey",a.get(Oc),h);a.get(vc)&&b.add("utmni",1);var c=a.get(Ic);c&&0=a[w]){var e=b;b=c||Be()+"/__utm.gif?";var f=new Image(1,1);f.src=b+a;f.onload=function(){f.onload=i;f.onerror=i;e()};f.onerror=function(){f.onload=i;f.onerror=i;e()}}else if(8192>=a[w]){var j=b;if(0<=W[za].userAgent[q]("Firefox")&& -![].reduce)throw new De(a[w]);var k;b=Be()+"/p/__utm.gif";if(c=W.XDomainRequest)k=new c,k.open("POST",b);else if(c=W.XMLHttpRequest)c=new c,"withCredentials"in c&&(k=c,k.open("POST",b,h),k.setRequestHeader("Content-Type","text/plain"));k?(k.onreadystatechange=function(){4==k.readyState&&(j(),k=i)},k.send(a),b=h):b=g;b||Ee(a,j)}else throw new Ce(a[w]);},Ee=function(a,b){if(J.body){a=aa(a);try{var c=J[qa]('')}catch(d){c=J[qa]("iframe"),ha(c,a)}c.height="0";c.width="0"; -c.style.display="none";c.style.visibility="hidden";var e=J[z],e=Be()+"/u/post_iframe.html#"+aa(e[A]+"//"+e[u]+"/favicon.ico"),f=function(){c.src="";c.parentNode&&c.parentNode.removeChild(c)};Ga(W,"beforeunload",f);var j=l,k=0,s=function(){if(!j){try{if(9>21:b}return b};})(); diff --git a/npm/img/nodejs_files/logo.png b/npm/img/nodejs_files/logo.png deleted file mode 100644 index ef3494efa88911b2988c7922fe3e3b825e31d6aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5081 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 diff --git a/npm/img/nodejs_files/nodejs-black.png b/npm/img/nodejs_files/nodejs-black.png deleted file mode 100644 index a7c6d63db4e383c1b68e5c1a334b44d96a6eceda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2630 zcma)83pCW*8lNa9q#T7p8G|0mJeV;I!pxwdi5Tz5nE7Kck7mXhk3`~l9qFDlh?HC+ zF}D$&JnJ+kiBglt%Jbwz*SlQfk#L4mcb#>+_x{(~``i0lzwh_`zP-P-*FVMin7xvM zh5`r#QX(9|yGU)jbg(zeN#}#PD`Qf#i)-u2b!7%}d1N*KvY|2q05E}04gy>NGBxs4 zGhhJ%$wFu(Pp&8ND2BqML&>WcXat=ljRt`%tRh%sN+`eu2LM4dh9zXGwh;oRQ7s`J zC?cH5!U4gwBT;O?HR>3N5*11@qe83>gDoO3QUW@_C4(dAVGIr?!VM6dSI{!G7E-)!dFXL2NH?@ z9ZIKvL36k+z*oKhk(fh@WC1W2fWr)DQ=}IcsJohqg~71_GMC9FF_~fOr|2Ba5vg-1S)M*I4v7V^>>&&XQ)v18mw40M(Aoq=VN=#?Zd4 z1^G?B&#}~RYe9W87A6$~TfNwSyXbY7w0l;UU)ol>`O^3RL)z_ZXX|^M-YS*&WjdMk^(h;w#+FKlNz3GsuwLx4Ns6xhEHJcPCkg1h@hRK%$ zg1Y*(ox}kROgr2lbv(#x;9`H2zA!6GT^58neO(cxtN~UgpT)BE8Vn|M=9`uD#e-&Yx=(GSl6YT3I$p32PMcPC)dZ` zo)5;pLWfNyRQo8YiRE3d83}x}#~ZG*A&94X&>p9^+tZq7FZH4FoWOh0#qMH{Hr>Ut z%(tFLT88RPS}q4$Wh&mJZF73E`^H;wq$FGIfY5gW*M}6n5x#Rwa<@%xu0NLA2Ftqr za&}o=H-Q&32ac_7^FU&hy-IS_pEp#?!$DgOx2f$OtVzpDT-sGvUJg<0&@ax`)Lils z$1W){e|S%+-32~9v~-$3clAU`^-tA;^eYv$r+4x!Dc$(Tzb*#8D=2qRerfQowcj?o zSZ^|6>|gzTZTCLr6{+0(=ihASh+W+hH-G>Pto#Im&f02ZqqY})Ufd*aB29$Mx_VbI-suyafF6d#5LoH|GDGrGpyE*eTO8J;K!;yw61SJW|7zqI+pcgta3 zs=i$tNxE)I;rlD0r$%D)x6UN)&Rof!Z#o2f+Ow3w0I7=`p0u)pf2iGZN9BDJf2rmT zEM@NGNLv-Ur7Qylb-16M4y%QFDdcbB zH=jBn2p^b^GWkAJNU}`T*VeL+xl7M3%CCz>yX@<`9HD-hO$!w~JpP&6}ZMv+;4S6n&}j#ZK@ zhumD)_y^nZrG05(=UKmfQ}ew}E>>nK%NKT*;~QIh=AwNjq9l69~-o@+E8u5s3>z;_r&p$6|kTjwdFJ8fIqci!*z=tVxu*^E-_wN2`c4y(2or3VT# zbV#(VQC^6|mVV xwDy)tr@z_+8R;9l=3KY`7f1?zK4i5)4s@&7Uv8#S_rmI*9l`b(z5?qX|0h5}P;3AI diff --git a/npm/img/nodejs_files/nodejs-dark.png b/npm/img/nodejs_files/nodejs-dark.png deleted file mode 100644 index 56094a9b41a7142dcf761905948c4f565e22a968..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3501 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 TV53`?f1t2v7l#tNqY?iCK6D`z diff --git a/npm/img/nodejs_files/nodejs-green.png b/npm/img/nodejs_files/nodejs-green.png deleted file mode 100644 index ee8a2fb550f33a09804795c612f47c4f74fb5539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3452 zcmaJ^dpy%^A6`Wvou5%uW>492*bH-64RfB_8s>bq%`h`|q<)uq_zw>;P9L1%M$l+$bO{-IYo)r?`@XPBc@F000}n zo0B}Sn(ASkjqp(446so5W8a!E34+eRX(O_#NP8sK` zPx0_H31(6(g7HLBFpZ=|2J2{pjs&6v1au196%&Gz(4h$aX>I+A}lvlU37Kp?B zdnld$Gn&OVr~Iw={}Qu^LB15YIfcdWW0C|H=l=U@DPNR6lj6!|Fo_I?_u45EJQ!>S z%Y)$y(zif@aIPdzpVj&IcpMIe^v0f|WLt~O+bNe{i^iCVeUBOInk{ZGC7jj49)^>%=@ zv64$J4d=B*W@O{R+BPvew?}+=B&4XA;4zhJTb`m@ona!CQ2FHEp@Hf#xteyl6I`ll z6{K)(B8$~=g+uM`+=QRV85}~lwFR84=e03TRz0?vJ^rDeB(t@b)&gc0=D88J! zb#8EHw~WWGQ%^(R!fuMjj2#8q!KXChR zKUde_sjGk=u>8Zl(5Z7lZ$`GY)x0n3-i^#lm9xn{mStBSk)grpeLud*I&G8DQak@r zTbvCP+J5J*`QvaT%}M77wTv5ZW@CdMMr1i`*p4|gXOh#W!mJwmIGJl!P9R8dBErLb z)OSdNpd$Al4B{Mgg@kj{Lnh@e{V1L%x~2iJCI=uSEP#BRbu42vsaPd1GFGZo+QBTQ zDKK!_>2}bJ|Mcug;=AOkZO@0Zlimiuw(6NLc)hr{SyQJX&~9FJHe1TRCS1$|$17}m zm^qt4m)?(@enD-gNyeqsue>+;Tr0xsz18V$gG@T|Vp8+-&7AZnxd_#hv$|nI*V^7U zKV&tZ)_nY>L7_RSn;x>*-V#znQl50yaFhPDsnSBKdAzf%&!;ksS-8-;;GC&CiD%Q} zN9QABIW-rjG$8Drv2618fX!LIX`{7ywUD}rcTumozzy$Ob6(Q@Z4lRZ-Q(xgCo03{ zBhqWxYIBp%JJGX|)b^N_(EhLUwD4n17aIGq1oRTb-!eP4)YfW){_TEq?>!vI9_0%6 z*XOcM@2^n3Ec7h4${nAPN`HfQ)RG>GI9^pOnY%8uy|S2Z${xOcyi{y>-6$h#e-16= zxSk#l)h~HtrIOy8ZnIPLPejm|jS8Y*i5OO>O>}VBTSMRWuv85}@h ziB8%@AH}0ghfA1NiH1)vzKKDZN?b46{F>JA+)8%a#uQ-E;>V=BCfvFFW!5f|rHNvO zh;)^MipJEXoUo3zww0=dJsgjY@$H}0$w7nEP$7l!0^>{RN3GJb3~bY{sJnY}Xp1Het zWQg||zE>XTYzQP?*DMy#9lq{;g}Bkrt!Q3eI`M45g{yimEiNq6fDo*BMz31K!q?hN zlWrYnHEuK*%F`@{8op7;5e$@Jg`Bhll~+q@3-i9ckjFEf^qe;TzF7nHg&aR$VvcF9 zPs!QW@8~&_qcA#SJ0iam0z7y;G+9F~O18*mE(xM-wSt~~L`}Vz*wX0IH*X3~ek6Z% z%n#2Ij!rI-NE{F3)gP3UJ(ngyePX<8YLW2R%fPF9_gwzT!ygYh*vdiVIK6iCZcD3U z_%!&H`IBIfhG@&aBw+=#XVN#}A?SMWi+osSgG}|VERw3yv&OW*Xz?#;4l}z|ztwHP zrG5y2geM(-=Or#aH2ZR;6nfh&$da)$g z9_1jRae!J7mw8CRdnm^38rv$;K0dzuEkCj&R+q579aoBaqV=(-*|Y`tyov5Ft$)+6 z`9VwGJI82a0zs5TPpP=wI#3ZetZBxXHXW;jiXJ;JJd;+N(`bHJp@JwPR(sE%wyyEu zAJyVMshbOpIc!rueti{W(bX)=F~Q}|1Be;c0jAT5E|@Fp*=Ul$B?HXfHvq-p9ymT$K0MgdBNd}hHI&zdT z%Jos&6S0_*=zEqhis-HGU$8BXlr^!)LWW{NtmF+@Mxb*CAsOuXN5S zKho6KfnlSv*_4u!&?G#9-#C1_ffO}R$hWk;LoQQLDgZ;OXtG5wmz8sh6)bx)ifTfF zhv%%%SZgz{N7d_Hn$?)r!1e_q#bYU3n?GfjqP`GQZ@gu;%B94Uwh7!}2opJ%_B*Zd)pe zQX{2`!AbR@Gc}Qq&!|9?Or*Vzm+ZtudJwkMPVahQXEihhBnBI`^z4Kl?F$aejp@s; zJFQ}9rdM`=zn{BIUf6xm5vU&HfRRCvuggRh!K4idw~R9O=yTL>cs(Bh5__ny+cGd(%&m=c-ehjAXV{AokUXF1`^Clf9?P_mfTIKQTj zE4;7G5YumER(JbD-{hBgWxrPv$(Y?((vr$@(tBAtn^$)7vZ(pN+Z4{NvVet{y zS_u$tv>CF}BowIN+)eGW3=T zdcHnbavbo0%s};r8qdam-Z22CPT;#o`O6dtpupyQ_Xq!g-_6gd5v3xQ zn!puxU32E6hQg&3xx#*DSbmThpw3O;2RkbnsqIoA z5J<+x8s{WjyM!-Oa+C0@!(DqVTvXT=?(Cy6o= zJJ1yJS(H280gR%$Rn7+fEQ(APsCQ3m=bI2`=t zfe5oP$-XEjoaL8X!ksC^pUq~VV6f28P-v(Dl+N^nAxun6);aX`^@JXJEDnuL4AY~r z_G~cV02YZ!VX!H58hD+N=tB=?n?i(2KbJsde5Iwaz8sVAz+hoS1`Gj(ua~sph{ykb zS1R?ZH;e5A{H^z2iCNAZ1^{ycSoB~fNqBL-d)8AiP*^5FWYd|>bb8RnDLVMm*>sja zodL!kH3Z{{BnoYP|H&VZN7>L=Y$A;W*x*bdLIx;>LPnWm_G68Vkop(|28Tdcz|AoR z7M2Faxc$aPMuwJ1_(m*_P70<1H1 ztp)x~zAv%lZ)-t(GZrQk16#k?e_Zs2N!UH>@N3%&H(whcpb5L3DQs)(dE6ohBxz}b z!#IZxOz|*wd#n`CCCU$4XQ=ie;YDOa61^Em5VL~|zCV6tiYmAa*SOD$+3f_esBB1f z2{G2#HZDfdk^nD^ax^`jPrsR*oZJ_g*(G`&@hW_wH=^{;BLkeIk!>gpvJ|MqRGB+IdxwxW#H*#__Uy5Xpm z)g+m^t+B=Sw;HgfQRf8P`(HPEXO`TDx{wbwONgWul#NMBV=&ur)&@#FXWkrgkh62& zDmpw`BByw!tnIp2(h6$@D7Y8Gs#nQc7RLzi! zT%_CB$KNLIeAk#Z2-6t*s5sScKeECPs>R>&^fLPO9>4eO^e;tQswaLcAIS#>Ye=@y zR|R(~jqc7y*2UKxl&Xw6b~I{LI_gPMUn{Ed_2K?KGd*%q)Go)y($s*oTyfG4O6^kN zu@YzZqN|(U;0C)7S5NTFLVo-MXb;M4SEW6BzE<7~;jb1?FQH~MOzbazyzZe&LwiTi z)@ZbP+rm@z^K0i%t}OMs6zzI+t;1K`K6#5t#gjTo6Hv%m36$}yxfmysoO#=sNQEr) z=JXro;E@6kD?ZVYdwxLho0UD~%=cWdyXw0%z3!sxxOS%(a&N71UQOh5e(N#E8z4aPCtydcdd zgewct`tdiFrzS=;da!#t#9e$Wb+9ulk6Mx=?JH>J<8FoN>hs@w!Z0c4wL?xQ>DPCn zDOVFTU9anuNSi;HKU3BLe|mU^FhDutAk$V+J*Q*X2v}w~AD-fzD^5#(EXpt9XQ6Wv zcp1-oqfIzYc^0wrH!OH7+6h^rZT<&jjs`Od5K!saT(D2+_Dwe>G7bA~J&KW1bWsc! zXn%0QWUzN9iW@%oeV**7RUhExFcQ5OUZ7)#kcx>TUTi&cia*zmProh|pAbOsdAjtH zenCo`$+eAr*AtD@IuU{Q7B}bR&E7k4t@oniU(6qDj#y%Ia<=k*s61q2Uw2#ux+kGf zH#v^Fy|773;fBmk`CWYtW-{eq_0sHJv@A|W$J#4i{uC0Pb;r`J)vv=%Y0l!n`zG<^ z{HmyFDZJXjM{z-}w0pTDYJ=k=OI1ZS7?G-mHlyO|UN3BotObYCw(M9_RhMe-d#?OK z4#1h|LkGS6DIIOSOzFNXP`}Qdz80%m_~Yn+{Lve$)%r>FW}^y*;D!a(+8ot4JfF0H*21lf5fbBnqyRTn&o zyqm~~*_f?Z@^GH(!yP%mo@?)jbPawsG z{G!JZwf@GkD_1VZQrVqG?GPN?qa{1!IYPNK`2Cm?v%-MV!QWYf30R&`R;YPgQDtL# zDk2eQuG{}MOczNA?W0q!4}zvImaqmhZcn~gbA3{ES!L=pRO-0{ z=5FzJ`S@u|H`yxdYO8(eEFOq_dg|asD8X$vje%fcv-!Qi%MGT@@!c+eXd|OZOAJFQZTOI z8oY(8CIc9h?aZxsU-rCM`^8Wy{(qkho29QU%^Aa@U!-_l_$1 zrM#lrjf}@7_dC&3wy7@nlCSuO7oJUC)U`$1s~7+LzAvJIZ7j(K`0h`QaA+>o*x!l)5EM-3MOAU{xGj_Vu5VdVS0P{Ft5F7;(Ah zzUh^10Zlm7-N*XV3=uEv63lm~BQJ{{*sY^hQ@Xo#C{I@D<{}|Q?q=8;Ykc?Hyj5kr zxWXy^4RAy^yIZSAke+KE^U=(wUL${KSMAyFE8m6WznD-jTP4Tv2qKZL@^RbjqBQJH z0`p>(VZ4@z3D1Z2l2Jar&tGwk{vr&2tV7!>>S;w4*Ctwx0w4MnQ(@8=fG+>*J&Q|^ ztW3@lIyXP+IxFc?wzpCKy)H(NJsMHF7L(KOx2t-uWj@KmV`{lor;HFgka8}lc5I)Q zc>Za*T6Lyvtcub@X46OyRI4XHi=2hWUL9*o>!=HCqZBxdH-BvG(tI~K3fkf!4Rhed zkCGZp@*@1COSs6cx5+W+mRiljsxd!Xw(>6~<|nA443^>x34eO}6<;gld)B&E^EOG$ z2+sFcWQTk>^NZ@U6S8=YyF+Ehv~bYUlh8vdp+~a zTMo#ZmUQjgiuusSCVX(2Mi*v_>_A_+`SjM^OEoF7(hke77E(ep&SX8<=F4qmPy87) zv=WeG?omCIpP>*?(yc@F;PYzr?_SVuzaFP8*QH=3F;hm}jZw#lphNpwB{pX1=RqbM ws~c19AMo#i2ikyNN4MC&PI1ZBlcJkJrbLM`N7Jeg>wnoc7IwH>=Er0H0}DnFkpKVy diff --git a/npm/img/npm.png b/npm/img/npm.png deleted file mode 100644 index 57fca76f0aca3d73f3189d1a5c7c4abf2d48cae7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1708 zcmcgtO-K|`9DgR*CW=BAji|?{P~`4>tUJ1ct8F{3E;J_VLR)ljcILTGIv>tF+tou! zby&MZ2pt0t9t!HvDd?coA@ULhg%n8uf<>IYHEl&8;}^uil8B_ zXTnDP6TJy#Vps{PRA&cl&kBS3+870B8>rYX2(f`>!Ywo^%|4@OKI z!GO>2RT!3qJnv&$0zA()LyloNnjtsuWm|**FL13ee^EruRtJT+7|m;uU5FaO*b-Y|*TbaYHH?O48p=b-ifq;5gdx_m9L*V%$P>969Egt&qYEHn>uj5V4Vr zO*>(lBZVyX4Vl<Kx4~}mkBuR)F4welC#l#RrIDDF>3S5v0GYsPw z{Xsv=cCq20pNp`O)<8HK;M+L1fE7(;Oh*PTVAUOLOG&KT47x>>MPzH2kQ%j39c~3J zXr+B&OY-HhYH44%l31EJL%XH@t<;4h(m(F9*tldhNI3KG{Y<0ota@v0c5PI9qjZuvyhFy&Qw~nn0q_KX+6pkq z0C2qwz$yUb-GA~lU->jMTQfa3_4?lWwe|AWjWZ+vhPjlhw@^ddvy0!?(ziRRmg?=x z9%u7W`h~3QK9*97+j-lQ^yMW}3sEq4_nYjQ|Gd}Pn>}|^ulhOtsyp}N!u^fK{~=h@ o|KZ>}&x&)ju54g$%amJgng>Zl?Qb&1zqtR8SXZz3;MBm?Uq?uwUH||9 diff --git a/npm/img/ribbon.svg b/npm/img/ribbon.svg deleted file mode 100644 index ef8b505..0000000 --- a/npm/img/ribbon.svg +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/npm/index.html b/npm/index.html deleted file mode 100644 index 7924b75..0000000 --- a/npm/index.html +++ /dev/null @@ -1 +0,0 @@ -清华大学Node Packaged Modules镜像

    把我们设置为默认 npm 源

    修改 ~/.npmrc

    添加

    registry = http://npm.tuna.tsinghua.edu.cn/registry

    使用 npm config

    在 shell 里输入:

    npm config set registry http://npm.tuna.tsinghua.edu.cn/registry

    测试是否配置成功

    把我们设置为了默认源

    在 shell 里输入

    npm install <packagename>

    未把我们设置为默认源

    在 shell 里输入

    npm --registry http://npm.tuna.tsinghua.edu.cn/registry install <packagename>

    强制使用 ipv4 或 ipv6

    强制使用ipv4

    把上面提到的registry url修改成

    http://npm.4.tuna.tsinghua.edu.cn/registry

    强制使用ipv6

    把上面提到的registry url修改成

    http://npm.6.tuna.tsinghua.edu.cn/registry

    注意,不支持上传包。

    \ No newline at end of file diff --git a/npm/index.jade b/npm/index.jade deleted file mode 100644 index 1c3b450..0000000 --- a/npm/index.jade +++ /dev/null @@ -1,83 +0,0 @@ -!!! 5 -html - head - meta(charset='utf-8') - meta(http-equiv='X-UA-Compatible', content='IE=edge,chrome=1') - - title = '清华大学Node Packaged Modules镜像' - title= title - meta(name='keywords', content='tuna, mirror, npm, node.js') - link(rel='stylesheet', href='css/style.css') - body - header#masthead.container - #logo-container - img#nodejs(src='img/nodejs.png') - img#ribbon(src='img/ribbon.svg') - img#npm(src='img/npm.png') - #logo - h1= title - - .container - section - h2 把我们设置为默认 npm 源 - .row - .scheme.span6 - h3 修改 ~/.npmrc - p - | 添加 - pre - | registry = http://npm.tuna.tsinghua.edu.cn/registry - .scheme.span6 - h3 使用 npm config - p - | 在 shell 里输入: - pre - | npm config set registry http://npm.tuna.tsinghua.edu.cn/registry - - section - h2 测试是否配置成功 - .row - .scheme.span6 - h3 把我们设置为了默认源 - p - | 在 shell 里输入 - pre - | npm install <packagename> - .scheme.span6 - h3 未把我们设置为默认源 - p - | 在 shell 里输入 - pre - | npm --registry http://npm.tuna.tsinghua.edu.cn/registry install <packagename> - - section - h2 强制使用 ipv4 或 ipv6 - .row - .scheme.span6 - h3 强制使用ipv4 - p - | 把上面提到的registry url修改成 - pre http://npm.4.tuna.tsinghua.edu.cn/registry - .scheme.span6 - h3 强制使用ipv6 - p - | 把上面提到的registry url修改成 - pre http://npm.6.tuna.tsinghua.edu.cn/registry - - .alert - p - strong 注意 - | ,不支持上传包。 - - footer.container - p - | 服务由 - a(href='http://tuna.tsinghua.edu.cn/about') 清华大学学生网管会 - | 提供,欢迎使用我们提供的其他 - a(href='http://mirrors.tuna.tsinghua.edu.cn/') 软件镜像。 - p - | 如有问题和建议,请写信到 - a(href='mailto:thu-opensource-mirror-admin@googlegroups.com') thu-opensource-mirror-admin@googlegroups.com - | 。 - p - = '© 2012, 2013 ' - a(href='http://maskray.me') Ray Song