mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
minify
This commit is contained in:
parent
82bcca376f
commit
8a6884abef
494 changed files with 256 additions and 120180 deletions
|
@ -1,41 +0,0 @@
|
|||
{
|
||||
"name": "headroom.js",
|
||||
"version": "0.7.0",
|
||||
"main": [
|
||||
"dist/headroom.js",
|
||||
"dist/jQuery.headroom.js",
|
||||
"dist/angular.headroom.js"
|
||||
],
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"components",
|
||||
"spec",
|
||||
"Gruntfile.js",
|
||||
"src",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
],
|
||||
"homepage": "http://wicky.nillia.ms/headroom.js/",
|
||||
"authors": [
|
||||
"WickyNilliams"
|
||||
],
|
||||
"description": "Hide your header until you need it",
|
||||
"keywords": [
|
||||
"header",
|
||||
"js",
|
||||
"scroll"
|
||||
],
|
||||
"license": "MIT",
|
||||
"_release": "0.7.0",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v0.7.0",
|
||||
"commit": "d08c6be31172d0ba821e7bbe6b20892377d8c363"
|
||||
},
|
||||
"_source": "git://github.com/WickyNilliams/headroom.js.git",
|
||||
"_target": "~0.7.0",
|
||||
"_originalSource": "headroom.js",
|
||||
"_direct": true
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
{
|
||||
"name": "headroom.js",
|
||||
"version": "0.7.0",
|
||||
"main": ["dist/headroom.js", "dist/jQuery.headroom.js", "dist/angular.headroom.js"],
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"components",
|
||||
"spec",
|
||||
"Gruntfile.js",
|
||||
"src",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
],
|
||||
"homepage": "http://wicky.nillia.ms/headroom.js/",
|
||||
"authors": [
|
||||
"WickyNilliams"
|
||||
],
|
||||
"description": "Hide your header until you need it",
|
||||
"keywords": [
|
||||
"header",
|
||||
"js",
|
||||
"scroll"
|
||||
],
|
||||
"license": "MIT"
|
||||
}
|
|
@ -1,43 +1 @@
|
|||
/*!
|
||||
* headroom.js v0.7.0 - Give your page some headroom. Hide your header until you need it
|
||||
* Copyright (c) 2014 Nick Williams - http://wicky.nillia.ms/headroom.js
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
(function(angular) {
|
||||
|
||||
if(!angular) {
|
||||
return;
|
||||
}
|
||||
|
||||
///////////////
|
||||
// Directive //
|
||||
///////////////
|
||||
|
||||
angular.module('headroom', []).directive('headroom', function() {
|
||||
return {
|
||||
restrict: 'EA',
|
||||
scope: {
|
||||
tolerance: '=',
|
||||
offset: '=',
|
||||
classes: '=',
|
||||
scroller: '@'
|
||||
},
|
||||
link: function(scope, element) {
|
||||
var options = {};
|
||||
angular.forEach(Headroom.options, function(value, key) {
|
||||
options[key] = scope[key] || Headroom.options[key];
|
||||
});
|
||||
if (options.scroller) {
|
||||
options.scroller = angular.element(options.scroller)[0];
|
||||
}
|
||||
var headroom = new Headroom(element[0], options);
|
||||
headroom.init();
|
||||
scope.$on('destroy', function() {
|
||||
headroom.destroy();
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
}(window.angular));
|
||||
!function(angular){angular&&angular.module("headroom",[]).directive("headroom",function(){return{restrict:"EA",scope:{tolerance:"=",offset:"=",classes:"=",scroller:"@"},link:function(scope,element){var options={};angular.forEach(Headroom.options,function(value,key){options[key]=scope[key]||Headroom.options[key]}),options.scroller&&(options.scroller=angular.element(options.scroller)[0]);var headroom=new Headroom(element[0],options);headroom.init(),scope.$on("destroy",function(){headroom.destroy()})}}})}(window.angular);
|
|
@ -1,348 +1 @@
|
|||
/*!
|
||||
* headroom.js v0.7.0 - Give your page some headroom. Hide your header until you need it
|
||||
* Copyright (c) 2014 Nick Williams - http://wicky.nillia.ms/headroom.js
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
(function (window, document) {
|
||||
|
||||
'use strict';
|
||||
|
||||
/* exported features */
|
||||
|
||||
var requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;
|
||||
|
||||
/**
|
||||
* Handles debouncing of events via requestAnimationFrame
|
||||
* @see http://www.html5rocks.com/en/tutorials/speed/animations/
|
||||
* @param {Function} callback The callback to handle whichever event
|
||||
*/
|
||||
function Debouncer(callback) {
|
||||
this.callback = callback;
|
||||
this.ticking = false;
|
||||
}
|
||||
Debouncer.prototype = {
|
||||
constructor: Debouncer,
|
||||
|
||||
/**
|
||||
* dispatches the event to the supplied callback
|
||||
* @private
|
||||
*/
|
||||
update: function () {
|
||||
this.callback && this.callback();
|
||||
this.ticking = false;
|
||||
},
|
||||
|
||||
/**
|
||||
* ensures events don't get stacked
|
||||
* @private
|
||||
*/
|
||||
requestTick: function () {
|
||||
if (!this.ticking) {
|
||||
requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this)));
|
||||
this.ticking = true;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Attach this as the event listeners
|
||||
*/
|
||||
handleEvent: function () {
|
||||
this.requestTick();
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Check if object is part of the DOM
|
||||
* @constructor
|
||||
* @param {Object} obj element to check
|
||||
*/
|
||||
function isDOMElement(obj) {
|
||||
return obj && typeof window !== 'undefined' && (obj === window || obj.nodeType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for extending objects
|
||||
*/
|
||||
function extend(object /*, objectN ... */) {
|
||||
if (arguments.length <= 0) {
|
||||
throw new Error('Missing arguments in extend function');
|
||||
}
|
||||
|
||||
var result = object || {},
|
||||
key,
|
||||
i;
|
||||
|
||||
for (i = 1; i < arguments.length; i++) {
|
||||
var replacement = arguments[i] || {};
|
||||
|
||||
for (key in replacement) {
|
||||
// Recurse into object except if the object is a DOM element
|
||||
if (typeof result[key] === 'object' && !isDOMElement(result[key])) {
|
||||
result[key] = extend(result[key], replacement[key]);
|
||||
}
|
||||
else {
|
||||
result[key] = result[key] || replacement[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for normalizing tolerance option to object format
|
||||
*/
|
||||
function normalizeTolerance(t) {
|
||||
return t === Object(t) ? t : { down: t, up: t };
|
||||
}
|
||||
|
||||
var supportsCaptureOption = false;
|
||||
try {
|
||||
var opts = Object.defineProperty({}, 'capture', {
|
||||
get: function () {
|
||||
supportsCaptureOption = true;
|
||||
}
|
||||
});
|
||||
window.addEventListener("test", null, opts);
|
||||
} catch (e) { }
|
||||
|
||||
function addEventListenerWithOptions(target, type, handler, options) {
|
||||
var optionsOrCapture = options;
|
||||
if (!supportsCaptureOption) {
|
||||
optionsOrCapture = options.capture;
|
||||
}
|
||||
target.addEventListener(type, handler, optionsOrCapture);
|
||||
}
|
||||
|
||||
function removeEventListenerWithOptions(target, type, handler, options) {
|
||||
var optionsOrCapture = options;
|
||||
if (!supportsCaptureOption) {
|
||||
optionsOrCapture = options.capture;
|
||||
}
|
||||
target.removeEventListener(type, handler, optionsOrCapture);
|
||||
}
|
||||
|
||||
/**
|
||||
* UI enhancement for fixed headers.
|
||||
* Hides header when scrolling down
|
||||
* Shows header when scrolling up
|
||||
* @constructor
|
||||
* @param {DOMElement} elem the header element
|
||||
* @param {Object} options options for the widget
|
||||
*/
|
||||
function Headroom(elems, options) {
|
||||
options = extend(options, Headroom.options);
|
||||
|
||||
this.lastKnownScrollY = 0;
|
||||
this.elems = elems;
|
||||
this.debouncer = new Debouncer(this.update.bind(this));
|
||||
this.tolerance = normalizeTolerance(options.tolerance);
|
||||
this.classes = options.classes;
|
||||
this.offset = options.offset;
|
||||
this.scroller = options.scroller;
|
||||
this.initialised = false;
|
||||
this.onPin = options.onPin;
|
||||
this.onUnpin = options.onUnpin;
|
||||
}
|
||||
Headroom.prototype = {
|
||||
constructor: Headroom,
|
||||
|
||||
/**
|
||||
* Initialises the widget
|
||||
*/
|
||||
init: function () {
|
||||
|
||||
for (var i = 0, length = this.elems.length; i < length; i++) {
|
||||
this.elems[i].classList.add(this.classes.initial);
|
||||
}
|
||||
|
||||
this.attachEvent();
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
add: function (elem) {
|
||||
elem.classList.add(this.classes.initial);
|
||||
this.elems.push(elem);
|
||||
},
|
||||
|
||||
remove: function (elem) {
|
||||
|
||||
var classes = this.classes;
|
||||
elem.classList.remove(classes.unpinned, classes.pinned, classes.initial);
|
||||
var i = this.elems.indexOf(elem);
|
||||
if (i != -1) {
|
||||
this.elems.splice(i, 1);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Unattaches events and removes any classes that were added
|
||||
*/
|
||||
destroy: function () {
|
||||
var classes = this.classes;
|
||||
|
||||
this.initialised = false;
|
||||
|
||||
for (var i = 0, length = this.elems.length; i < length; i++) {
|
||||
this.elems[i].classList.remove(classes.unpinned, classes.pinned, classes.initial);
|
||||
}
|
||||
|
||||
removeEventListenerWithOptions(this.scroller, 'scroll', this.debouncer, {
|
||||
capture: false,
|
||||
passive: true
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Attaches the scroll event
|
||||
* @private
|
||||
*/
|
||||
attachEvent: function () {
|
||||
if (!this.initialised) {
|
||||
this.lastKnownScrollY = this.getScrollY();
|
||||
this.initialised = true;
|
||||
addEventListenerWithOptions(this.scroller, 'scroll', this.debouncer, {
|
||||
capture: false,
|
||||
passive: true
|
||||
});
|
||||
|
||||
this.debouncer.handleEvent();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Unpins the header if it's currently pinned
|
||||
*/
|
||||
unpin: function () {
|
||||
|
||||
var classes = this.classes;
|
||||
|
||||
for (var i = 0, length = this.elems.length; i < length; i++) {
|
||||
var classList = this.elems[i].classList;
|
||||
|
||||
if (classList.contains(classes.pinned) || !classList.contains(classes.unpinned)) {
|
||||
classList.add(classes.unpinned);
|
||||
classList.remove(classes.pinned);
|
||||
this.onUnpin && this.onUnpin.call(this);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Pins the header if it's currently unpinned
|
||||
*/
|
||||
pin: function () {
|
||||
|
||||
var classes = this.classes;
|
||||
|
||||
for (var i = 0, length = this.elems.length; i < length; i++) {
|
||||
var classList = this.elems[i].classList;
|
||||
|
||||
if (classList.contains(classes.unpinned)) {
|
||||
classList.remove(classes.unpinned);
|
||||
classList.add(classes.pinned);
|
||||
this.onPin && this.onPin.call(this);
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Gets the Y scroll position
|
||||
* @see https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY
|
||||
* @return {Number} pixels the page has scrolled along the Y-axis
|
||||
*/
|
||||
getScrollY: function () {
|
||||
|
||||
var pageYOffset = this.scroller.pageYOffset;
|
||||
if (pageYOffset !== undefined) {
|
||||
return pageYOffset;
|
||||
}
|
||||
|
||||
var scrollTop = this.scroller.scrollTop;
|
||||
if (scrollTop !== undefined) {
|
||||
return scrollTop;
|
||||
}
|
||||
|
||||
return (document.documentElement || document.body).scrollTop;
|
||||
},
|
||||
|
||||
/**
|
||||
* determines if the tolerance has been exceeded
|
||||
* @param {int} currentScrollY the current scroll y position
|
||||
* @return {bool} true if tolerance exceeded, false otherwise
|
||||
*/
|
||||
toleranceExceeded: function (currentScrollY, direction) {
|
||||
return Math.abs(currentScrollY - this.lastKnownScrollY) >= this.tolerance[direction];
|
||||
},
|
||||
|
||||
/**
|
||||
* determine if it is appropriate to unpin
|
||||
* @param {int} currentScrollY the current y scroll position
|
||||
* @param {bool} toleranceExceeded has the tolerance been exceeded?
|
||||
* @return {bool} true if should unpin, false otherwise
|
||||
*/
|
||||
shouldUnpin: function (currentScrollY, toleranceExceeded) {
|
||||
var scrollingDown = currentScrollY > this.lastKnownScrollY,
|
||||
pastOffset = currentScrollY >= this.offset;
|
||||
|
||||
return scrollingDown && pastOffset && toleranceExceeded;
|
||||
},
|
||||
|
||||
/**
|
||||
* determine if it is appropriate to pin
|
||||
* @param {int} currentScrollY the current y scroll position
|
||||
* @param {bool} toleranceExceeded has the tolerance been exceeded?
|
||||
* @return {bool} true if should pin, false otherwise
|
||||
*/
|
||||
shouldPin: function (currentScrollY, toleranceExceeded) {
|
||||
var scrollingUp = currentScrollY < this.lastKnownScrollY,
|
||||
pastOffset = currentScrollY <= this.offset;
|
||||
|
||||
return (scrollingUp && toleranceExceeded) || pastOffset;
|
||||
},
|
||||
|
||||
/**
|
||||
* Handles updating the state of the widget
|
||||
*/
|
||||
update: function () {
|
||||
var currentScrollY = this.getScrollY(),
|
||||
scrollDirection = currentScrollY > this.lastKnownScrollY ? 'down' : 'up',
|
||||
toleranceExceeded = this.toleranceExceeded(currentScrollY, scrollDirection);
|
||||
|
||||
if (currentScrollY < 0) { // Ignore bouncy scrolling in OSX
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.shouldUnpin(currentScrollY, toleranceExceeded)) {
|
||||
this.unpin();
|
||||
}
|
||||
else if (this.shouldPin(currentScrollY, toleranceExceeded)) {
|
||||
this.pin();
|
||||
}
|
||||
|
||||
this.lastKnownScrollY = currentScrollY;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Default options
|
||||
* @type {Object}
|
||||
*/
|
||||
Headroom.options = {
|
||||
tolerance: {
|
||||
up: 0,
|
||||
down: 0
|
||||
},
|
||||
offset: 0,
|
||||
scroller: window,
|
||||
classes: {
|
||||
pinned: 'headroom--pinned',
|
||||
unpinned: 'headroom--unpinned',
|
||||
initial: 'headroom'
|
||||
}
|
||||
};
|
||||
|
||||
window.Headroom = Headroom;
|
||||
|
||||
}(window, document));
|
||||
!function(window,document){"use strict";function Debouncer(callback){this.callback=callback,this.ticking=!1}function isDOMElement(obj){return obj&&"undefined"!=typeof window&&(obj===window||obj.nodeType)}function extend(object){if(arguments.length<=0)throw new Error("Missing arguments in extend function");var key,i,result=object||{};for(i=1;i<arguments.length;i++){var replacement=arguments[i]||{};for(key in replacement)"object"!=typeof result[key]||isDOMElement(result[key])?result[key]=result[key]||replacement[key]:result[key]=extend(result[key],replacement[key])}return result}function normalizeTolerance(t){return t===Object(t)?t:{down:t,up:t}}function addEventListenerWithOptions(target,type,handler,options){var optionsOrCapture=options;supportsCaptureOption||(optionsOrCapture=options.capture),target.addEventListener(type,handler,optionsOrCapture)}function removeEventListenerWithOptions(target,type,handler,options){var optionsOrCapture=options;supportsCaptureOption||(optionsOrCapture=options.capture),target.removeEventListener(type,handler,optionsOrCapture)}function Headroom(elems,options){options=extend(options,Headroom.options),this.lastKnownScrollY=0,this.elems=elems,this.debouncer=new Debouncer(this.update.bind(this)),this.tolerance=normalizeTolerance(options.tolerance),this.classes=options.classes,this.offset=options.offset,this.scroller=options.scroller,this.initialised=!1,this.onPin=options.onPin,this.onUnpin=options.onUnpin}var requestAnimationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame;Debouncer.prototype={constructor:Debouncer,update:function(){this.callback&&this.callback(),this.ticking=!1},requestTick:function(){this.ticking||(requestAnimationFrame(this.rafCallback||(this.rafCallback=this.update.bind(this))),this.ticking=!0)},handleEvent:function(){this.requestTick()}};var supportsCaptureOption=!1;try{var opts=Object.defineProperty({},"capture",{get:function(){supportsCaptureOption=!0}});window.addEventListener("test",null,opts)}catch(e){}Headroom.prototype={constructor:Headroom,init:function(){for(var i=0,length=this.elems.length;i<length;i++)this.elems[i].classList.add(this.classes.initial);return this.attachEvent(),this},add:function(elem){elem.classList.add(this.classes.initial),this.elems.push(elem)},remove:function(elem){var classes=this.classes;elem.classList.remove(classes.unpinned,classes.pinned,classes.initial);var i=this.elems.indexOf(elem);i!=-1&&this.elems.splice(i,1)},destroy:function(){var classes=this.classes;this.initialised=!1;for(var i=0,length=this.elems.length;i<length;i++)this.elems[i].classList.remove(classes.unpinned,classes.pinned,classes.initial);removeEventListenerWithOptions(this.scroller,"scroll",this.debouncer,{capture:!1,passive:!0})},attachEvent:function(){this.initialised||(this.lastKnownScrollY=this.getScrollY(),this.initialised=!0,addEventListenerWithOptions(this.scroller,"scroll",this.debouncer,{capture:!1,passive:!0}),this.debouncer.handleEvent())},unpin:function(){for(var classes=this.classes,i=0,length=this.elems.length;i<length;i++){var classList=this.elems[i].classList;!classList.contains(classes.pinned)&&classList.contains(classes.unpinned)||(classList.add(classes.unpinned),classList.remove(classes.pinned),this.onUnpin&&this.onUnpin.call(this))}},pin:function(){for(var classes=this.classes,i=0,length=this.elems.length;i<length;i++){var classList=this.elems[i].classList;classList.contains(classes.unpinned)&&(classList.remove(classes.unpinned),classList.add(classes.pinned),this.onPin&&this.onPin.call(this))}},getScrollY:function(){var pageYOffset=this.scroller.pageYOffset;if(void 0!==pageYOffset)return pageYOffset;var scrollTop=this.scroller.scrollTop;return void 0!==scrollTop?scrollTop:(document.documentElement||document.body).scrollTop},toleranceExceeded:function(currentScrollY,direction){return Math.abs(currentScrollY-this.lastKnownScrollY)>=this.tolerance[direction]},shouldUnpin:function(currentScrollY,toleranceExceeded){var scrollingDown=currentScrollY>this.lastKnownScrollY,pastOffset=currentScrollY>=this.offset;return scrollingDown&&pastOffset&&toleranceExceeded},shouldPin:function(currentScrollY,toleranceExceeded){var scrollingUp=currentScrollY<this.lastKnownScrollY,pastOffset=currentScrollY<=this.offset;return scrollingUp&&toleranceExceeded||pastOffset},update:function(){var currentScrollY=this.getScrollY(),scrollDirection=currentScrollY>this.lastKnownScrollY?"down":"up",toleranceExceeded=this.toleranceExceeded(currentScrollY,scrollDirection);currentScrollY<0||(this.shouldUnpin(currentScrollY,toleranceExceeded)?this.unpin():this.shouldPin(currentScrollY,toleranceExceeded)&&this.pin(),this.lastKnownScrollY=currentScrollY)}},Headroom.options={tolerance:{up:0,down:0},offset:0,scroller:window,classes:{pinned:"headroom--pinned",unpinned:"headroom--unpinned",initial:"headroom"}},window.Headroom=Headroom}(window,document);
|
|
@ -1,45 +1 @@
|
|||
/*!
|
||||
* headroom.js v0.7.0 - Give your page some headroom. Hide your header until you need it
|
||||
* Copyright (c) 2014 Nick Williams - http://wicky.nillia.ms/headroom.js
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
(function($) {
|
||||
|
||||
if(!$) {
|
||||
return;
|
||||
}
|
||||
|
||||
////////////
|
||||
// Plugin //
|
||||
////////////
|
||||
|
||||
$.fn.headroom = function(option) {
|
||||
return this.each(function() {
|
||||
var $this = $(this),
|
||||
data = $this.data('headroom'),
|
||||
options = typeof option === 'object' && option;
|
||||
|
||||
options = $.extend(true, {}, Headroom.options, options);
|
||||
|
||||
if (!data) {
|
||||
data = new Headroom(this, options);
|
||||
data.init();
|
||||
$this.data('headroom', data);
|
||||
}
|
||||
if (typeof option === 'string') {
|
||||
data[option]();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
//////////////
|
||||
// Data API //
|
||||
//////////////
|
||||
|
||||
$('[data-headroom]').each(function() {
|
||||
var $this = $(this);
|
||||
$this.headroom($this.data());
|
||||
});
|
||||
|
||||
}(window.Zepto || window.jQuery));
|
||||
!function($){$&&($.fn.headroom=function(option){return this.each(function(){var $this=$(this),data=$this.data("headroom"),options="object"==typeof option&&option;options=$.extend(!0,{},Headroom.options,options),data||(data=new Headroom(this,options),data.init(),$this.data("headroom",data)),"string"==typeof option&&data[option]()})},$("[data-headroom]").each(function(){var $this=$(this);$this.headroom($this.data())}))}(window.Zepto||window.jQuery);
|
|
@ -1,40 +0,0 @@
|
|||
{
|
||||
"name": "headroom.js",
|
||||
"version": "0.7.0",
|
||||
"description": "Give your page some headroom. Hide your header until you need it",
|
||||
"main": "dist/headroom.js",
|
||||
"scripts": {
|
||||
"test": "grunt test --verbose"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/WickyNilliams/headroom.js"
|
||||
},
|
||||
"keywords": [
|
||||
"header",
|
||||
"fixed",
|
||||
"scroll",
|
||||
"menu"
|
||||
],
|
||||
"author": "Nick Williams",
|
||||
"homepage": "http://wicky.nillia.ms/headroom.js",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/WickyNilliams/headroom.js/issues"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "grunt dist --verbose"
|
||||
},
|
||||
"devDependencies": {
|
||||
"grunt": "~0.4.1",
|
||||
"grunt-contrib-uglify": "~0.2.2",
|
||||
"grunt-rigger": "~0.5.0",
|
||||
"grunt-contrib-jshint": "~0.6.2",
|
||||
"grunt-contrib-watch": "~0.5.1",
|
||||
"karma": "~0.10.8",
|
||||
"grunt-karma": "~0.6.2",
|
||||
"karma-firefox-launcher": "~0.1.2",
|
||||
"karma-safari-launcher": "~0.1.1",
|
||||
"karma-opera-launcher": "~0.1.0"
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue