bump bootstrap to 3.4.1

This commit is contained in:
Britney Wright 2019-04-08 12:55:26 -04:00
parent 310a3d9204
commit 5e1e86bf3a
284 changed files with 75828 additions and 4283 deletions

View File

@ -24,7 +24,7 @@
],
"devDependencies": {
"jquery": "^2.2.3",
"bootstrap": "^3.3.7",
"bootstrap": "^3.4.1",
"font-awesome": "fontawesome#^4.6.1",
"fastclick": "^1.0.6",
"nprogress": "^0.2.0",
@ -33,7 +33,7 @@
"bootstrap-progressbar": "^0.9.0",
"iCheck": "icheck#^1.0.2",
"Flot": "flot#^0.8.3",
"bootstrap-daterangepicker": "git@github.com:christianesperar/bootstrap-daterangepicker.git#master",
"bootstrap-daterangepicker": "git@github.com:dangrossman/daterangepicker.git#master",
"skycons": "https://github.com/darkskyapp/skycons.git",
"jquery-sparkline": "^2.1.3",
"morris.js": "^0.5.1",

5929
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,5 @@
*.min.js
!excanvas.min.js
node_modules/
debug.log
coverage/**
dist/
.vscode

View File

@ -1,3 +1,40 @@
dist: trusty
language: node_js
node_js:
- 0.8
- '8'
addons:
firefox: latest
chrome: stable
cache:
directories:
- node_modules
before_install:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- npm install -g greenkeeper-lockfile@1
- npm config set //registry.npmjs.org/:_authToken=$NPM_TOKEN
before_script:
- greenkeeper-lockfile-update
- sudo chown root /opt/google/chrome/chrome-sandbox
- sudo chmod 4755 /opt/google/chrome/chrome-sandbox
after_script:
- greenkeeper-lockfile-upload
before_deploy:
- tar -tf $(npm pack)
install:
- npm install
script:
- npm test
- npm run build
- npm run coverage
env:
secure: mkyiKGXQ8wkx4kSi/x7kProXE76E2Ix5xP+xHAcTpMhsFJYsyFE8LR8wC7UWxg80nbww6P1mWpJkMPm2QnWW8OSuKh9pF2bluTU7VAf68JHROA55FZauO0NgLWxF1tog/RLaTXBzoqXBx5+Zlcp2jl4UdsDSIr/1TogSEC7hV3dMiqzTsiC09RnAgtGsUfzDjCGVgyz2yDBMCoi+kfzJiRz7f1dW5GxhUypuV4jjEXTt1V6XrIA0C/uD27LP+kswHadMT6HURPiWEJteKNFz6hnfXttF1XmTwW++kzahDoap607oLszz+g8ss/9F0ILyO3tffyKnoEOImJLogvLUm3slxfHvh9PYh7x8oyPHFtfs7QAJ5Q2Cr23VvwJNslkuNCphEsQJS/HQ70VuSF6MlGrhbsLGp8kEFZrXADqojkGQ/duPk3QykiXUaUxr0uPEllptOLh5TTKYarRM/IVv4kE5iC4egJXouKxwwL5LIglnyCTycEdTLv/IUfYap8ABqi20eBm+AJGk44Z72fl+G/xoPrzbtVosQfPbuLurVJHHDDExHM3bFqfUNnB9xIEwWTihSc6ycI7IhuMQlg1G1t5rRY5YyVQN/4oP4k6qNgYbJs9PrxfyMw7Z+dSg/L2SyJbc/ReNiFkvpTNDYGY/dULvx1uGM1NGdmC+z+nljfk=
deploy:
provider: npm
skip_cleanup: true
email: webapps.ops@ni.com
api_key:
secure: kJyDLyReYLVr01TidziatIzTk1GpTvGLQo7XLAQReDemRkN13905TaYPsrl5IMnkLfk6RaizbCscx7z1MGi3P/U+2DC10OE4pbnUVrcCZLX9RPqLmVgVWxX+pPH+Mu3Td/Ay7CYeNdo031Lufxbc+m0kGlVnMyPBwctU36ES+OI=
on:
tags: true
repo: flot/flot

28
vendors/Flot/API.md vendored
View File

@ -143,7 +143,7 @@ the plot, see below.
The rest of the options are all documented below as they are the same
as the default options passed in via the options parameter in the plot
commmand. When you specify them for a specific data series, they will
command. When you specify them for a specific data series, they will
override the default options for the plot for that data series.
Here's a complete example of a simple data specification:
@ -531,14 +531,18 @@ calendars don't follow a simple base 10 system. For many cases, Flot
abstracts most of this away, but it can still be a bit difficult to
get the data into Flot. So we'll first discuss the data format.
The time series support in Flot is based on Javascript timestamps,
i.e. everywhere a time value is expected or handed over, a Javascript
timestamp number is used. This is a number, not a Date object. A
Javascript timestamp is the number of milliseconds since January 1,
1970 00:00:00 UTC. This is almost the same as Unix timestamps, except it's
in milliseconds, so remember to multiply by 1000!
The time series support in Flot is based on Epoch timestamps, i.e.,
everywhere a time value is expected or handed over, a number is used.
This is a number, not a Date object. Flot supports three different time
bases in which the timestamps can be given: seconds, milliseconds and
microseconds. The timestamp is therefore the number of microseconds,
milliseconds or seconds since January 1, 1970 00:00:00 UTC.
You can see a timestamp like this
The time base in which the timestamps are given to Flot can be selected
by setting the "timeBase" option to "microseconds", "milliseconds"
or "seconds" in axis options. If not set, it defaults to "seconds".
You can see a native Javascript timestamp (in milliseconds) like this
```js
alert((new Date()).getTime())
@ -645,6 +649,7 @@ this:
```js
xaxis: {
mode: "time",
timeBase: "milliseconds",
timeformat: "%Y/%m/%d"
}
```
@ -663,6 +668,7 @@ standard strftime specifiers are supported (plus the nonstandard %q):
%M: minutes, zero-padded (00-59)
%q: quarter (1-4)
%S: seconds, zero-padded (00-59)
%s: sub-seconds, accuracy can be denoted with a number (e.g., %3s)
%y: year (two digits)
%Y: year (four digits)
%p: am/pm
@ -694,6 +700,12 @@ applies if you have not set "timeformat". Use the "%I" and "%p" or
"%P" options if you want to build your own format string with 12-hour
times.
If you want to have ticks with a fixed sub-second accuracy, you can add
a number in the subsecond specifier (e.g., "%3s" for millisecond
accuracy) in the "timeformat" string". If the accuracy for the sub-second
timestamps is not given, Flot will automatically determine the accuracy
depending on the timespan of the axis and the number of ticks, to create.
If the Date object has a strftime property (and it is a function), it
will be used instead of the built-in formatter. Thus you can include
a strftime library such as http://hacks.bluesmoon.info/strftime/ for

View File

@ -1,40 +1,20 @@
# Flot [![Build status](https://travis-ci.org/flot/flot.png)](https://travis-ci.org/flot/flot)
# flot [![Build Status](https://travis-ci.org/flot/flot.svg?branch=master)](https://travis-ci.org/flot/flot) [![CircleCI](https://circleci.com/gh/flot/flot.svg?style=svg)](https://circleci.com/gh/flot/flot) [![Coverage Status](https://coveralls.io/repos/github/flot/flot/badge.svg?branch=master)](https://coveralls.io/github/flot/flot?branch=master) [![Greenkeeper badge](https://badges.greenkeeper.io/flot/flot.svg)](https://greenkeeper.io/)
## About ##
Flot is a Javascript plotting library for jQuery.
Read more at the website: <http://www.flotcharts.org/>
flot is a JavaScript plotting library for engineering and scientific
applications derived from Flot: <http://www.flotcharts.org/>
Take a look at the the examples in examples/index.html; they should give a good
impression of what Flot can do, and the source code of the examples is probably
the fastest way to learn how to use Flot.
impression of what flot can do, and the source code of the examples is probably
the fastest way to learn how to use flot.
## Installation ##
Just include the Javascript file after you've included jQuery.
Just include the JavaScript file after you've included jQuery.
Generally, all browsers that support the HTML5 canvas tag are
supported.
For support for Internet Explorer < 9, you can use [Excanvas]
[excanvas], a canvas emulator; this is used in the examples bundled
with Flot. You just include the excanvas script like this:
```html
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="excanvas.min.js"></script><![endif]-->
```
If it's not working on your development IE 6.0, check that it has
support for VML which Excanvas is relying on. It appears that some
stripped down versions used for test environments on virtual machines
lack the VML support.
You can also try using [Flashcanvas][flashcanvas], which uses Flash to
do the emulation. Although Flash can be a bit slower to load than VML,
if you've got a lot of points, the Flash version can be much faster
overall. Flot contains some wrapper code for activating Excanvas which
Flashcanvas is compatible with.
Generally, all modern browsers are supported.
You need at least jQuery 1.2.6, but try at least 1.3.2 for interactive
charts because of performance improvements in event handling.
@ -71,8 +51,8 @@ $.plot($("#placeholder"), data, options);
Here, data is an array of data series and options is an object with
settings if you want to customize the plot. Take a look at the
examples for some ideas of what to put in or look at the
[API reference](API.md). Here's a quick example that'll draw a line
examples for some ideas of what to put in or look at the
[API reference](API.md). Here's a quick example that'll draw a line
from (0, 0) to (1, 1):
```js
@ -82,29 +62,17 @@ $.plot($("#placeholder"), [ [[0, 0], [1, 1]] ], { yaxis: { max: 1 } });
The plot function immediately draws the chart and then returns a plot
object with a couple of methods.
## Documentation and examples
## What's with the name? ##
API Documentation is available here: [API reference](docs/API.md)
First: it's pronounced with a short o, like "plot". Not like "flawed".
About how the plugins work: [Plugins](docs/PLUGINS.md)
So "Flot" rhymes with "plot".
High level overview on how interactions are handled internally: [Interactions](docs/interactions.md)
And if you look up "flot" in a Danish-to-English dictionary, some of
the words that come up are "good-looking", "attractive", "stylish",
"smart", "impressive", "extravagant". One of the main goals with Flot
is pretty looks.
Examples are included in the examples folder of this repository, but they can be tried out online as well: [Examples](https://rawgit.com/flot/flot/master/examples/index.html)
## CircleCI
## Notes about the examples ##
In order to have a useful, functional example of time-series plots using time
zones, date.js from [timezone-js][timezone-js] (released under the Apache 2.0
license) and the [Olson][olson] time zone database (released to the public
domain) have been included in the examples directory. They are used in
examples/axes-time-zones/index.html.
[excanvas]: http://code.google.com/p/explorercanvas/
[flashcanvas]: http://code.google.com/p/flashcanvas/
[timezone-js]: https://github.com/mde/timezone-js
[olson]: http://ftp.iana.org/time-zones
[CircleCI](https://circleci.com/) is used in this repo to run [dont-break](https://www.npmjs.com/package/dont-break),
which checks if the current version of flot breaks unit tests on specified dependent projects.

View File

@ -4,19 +4,42 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: AJAX</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {
var options = {
lines: {
show: true
},
points: {
show: true
series: {
lines: {
show: true,
lineWidth: 2
},
points: {
show: true
}
},
xaxis: {
tickDecimals: 0,

View File

@ -1,87 +1,109 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Adding Annotations</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script type="text/javascript">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Adding Annotations</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {
$(function() {
var d1 = [];
for (var i = 0; i < 20; ++i) {
d1.push([i, Math.sin(i)]);
}
var d1 = [];
for (var i = 0; i < 20; ++i) {
d1.push([i, Math.sin(i)]);
}
var data = [{ data: d1, label: "Pressure", color: "#333" }];
var data = [{ data: d1, label: "Pressure", color: "#333" }];
var markings = [
{ color: "#f6f6f6", yaxis: { from: 1 } },
{ color: "#f6f6f6", yaxis: { to: -1 } },
{ color: "#000", lineWidth: 1, xaxis: { from: 2, to: 2 } },
{ color: "#000", lineWidth: 1, xaxis: { from: 8, to: 8 } }
];
var markings = [
{ color: "#f6f6f6", yaxis: { from: 1 } },
{ color: "#f6f6f6", yaxis: { to: -1 } },
{ color: "#000", lineWidth: 1, xaxis: { from: 2, to: 2 } },
{ color: "#000", lineWidth: 1, xaxis: { from: 8, to: 8 } }
];
var placeholder = $("#placeholder");
var placeholder = $("#placeholder");
var plot = $.plot(placeholder, data, {
bars: { show: true, barWidth: 0.5, fill: 0.9 },
xaxis: { ticks: [], autoscaleMargin: 0.02 },
yaxis: { min: -2, max: 2 },
grid: { markings: markings }
});
var plot = $.plot(placeholder, data, {
series: {
bars: { show: true, barWidth: 0.5, fill: 0.9 }
},
xaxis: { show: false },
yaxis: { min: -2, max: 2, autoScale: "none" },
grid: { markings: markings }
});
var o = plot.pointOffset({ x: 2, y: -1.2});
var o = plot.pointOffset({ x: 2, y: -1.2});
// Append it to the placeholder that Flot already uses for positioning
// Append it to the placeholder that Flot already uses for positioning
placeholder.append("<div style='position:absolute;left:" + (o.left + 4) + "px;top:" + o.top + "px;color:#666;font-size:smaller'>Warming up</div>");
placeholder.append("<div style='position:absolute;left:" + (o.left + 4) + "px;top:" + o.top + "px;color:#666;font-size:smaller'>Warming up</div>");
o = plot.pointOffset({ x: 8, y: -1.2});
placeholder.append("<div style='position:absolute;left:" + (o.left + 4) + "px;top:" + o.top + "px;color:#666;font-size:smaller'>Actual measurements</div>");
o = plot.pointOffset({ x: 8, y: -1.2});
placeholder.append("<div style='position:absolute;left:" + (o.left + 4) + "px;top:" + o.top + "px;color:#666;font-size:smaller'>Actual measurements</div>");
// Draw a little arrow on top of the last label to demonstrate canvas
// drawing
// Draw a little arrow on top of the last label to demonstrate canvas
// drawing
var ctx = plot.getCanvas().getContext("2d");
ctx.beginPath();
o.left += 4;
ctx.moveTo(o.left, o.top);
ctx.lineTo(o.left, o.top - 10);
ctx.lineTo(o.left + 10, o.top - 5);
ctx.lineTo(o.left, o.top);
ctx.fillStyle = "#000";
ctx.fill();
var ctx = plot.getCanvas().getContext("2d");
ctx.beginPath();
o.left += 4;
ctx.moveTo(o.left, o.top);
ctx.lineTo(o.left, o.top - 10);
ctx.lineTo(o.left + 10, o.top - 5);
ctx.lineTo(o.left, o.top);
ctx.fillStyle = "#000";
ctx.fill();
// Add the Flot version string to the footer
// Add the Flot version string to the footer
$("#footer").prepend("Flot " + $.plot.version + " &ndash; ");
});
$("#footer").prepend("Flot " + $.plot.version + " &ndash; ");
});
</script>
</script>
</head>
<body>
<div id="header">
<h2>Adding Annotations</h2>
</div>
<div id="header">
<h2>Adding Annotations</h2>
</div>
<div id="content">
<div id="content">
<div class="demo-container">
<div id="placeholder" class="demo-placeholder"></div>
</div>
<div class="demo-container">
<div id="placeholder" class="demo-placeholder"></div>
</div>
<p>Flot has support for simple background decorations such as lines and rectangles. They can be useful for marking up certain areas. You can easily add any HTML you need with standard DOM manipulation, e.g. for labels. For drawing custom shapes there is also direct access to the canvas.</p>
<p>Flot has support for simple background decorations such as lines and rectangles. They can be useful for marking up certain areas. You can easily add any HTML you need with standard DOM manipulation, e.g. for labels. For drawing custom shapes there is also direct access to the canvas.</p>
</div>
</div>
<div id="footer">
Copyright &copy; 2007 - 2014 IOLA and Ole Laursen
</div>
<div id="footer">
Copyright &copy; 2007 - 2014 IOLA and Ole Laursen
</div>
</body>
</html>

View File

@ -4,39 +4,62 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Interacting with axes</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {
function generate(start, end, fn) {
var res = [];
for (var i = 0; i <= 100; ++i) {
var x = start + i / 100 * (end - start);
for (var i = 0; i <= 40; ++i) {
var x = start + i / 40 * (end - start);
res.push([x, fn(x)]);
}
return res;
}
var data = [
{ data: generate(0, 10, function (x) { return Math.sqrt(x);}), xaxis: 1, yaxis:1 },
{ data: generate(0, 10, function (x) { return Math.sin(x);}), xaxis: 1, yaxis:2 },
{ data: generate(0, 10, function (x) { return Math.cos(x);}), xaxis: 1, yaxis:3 },
{ data: generate(2, 10, function (x) { return Math.tan(x);}), xaxis: 2, yaxis: 4 }
{ data: generate(0, 10, function (x) { return Math.sqrt(x);}), xaxis: 1, yaxis:1, lines: { show: true, fill: true }},
{ data: generate(0, 10, function (x) { return Math.sin(x);}), xaxis: 1, yaxis:2, points: { show: true }},
{ data: generate(0, 10, function (x) { return (x < 3 || x > 5) ? Math.cos(x) : null;}), xaxis: 1, yaxis:3 },
{ data: generate(2, 10, function (x) { return Math.tan(x);}), xaxis: 2, yaxis: 4, lines: { show: true, steps: true }},
{ data: generate(5, 15, function (x) { return 30 * Math.sin(x/2+3);}), xaxis: 3, yaxis: 5, bars: {show: true, fill: true, barWidth:0.1, align: "center"}}
];
var plot = $.plot("#placeholder", data, {
xaxes: [
{ position: 'bottom' },
{ position: 'bottom'},
{ position: 'top'}
],
yaxes: [
{ position: 'left' },
{ position: 'left' },
{ position: 'right' },
{ position: 'left' }
{ position: 'left' },
{ position: 'right' }
]
});

View File

@ -4,10 +4,31 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Multiple Axes</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script language="javascript" type="text/javascript" src="../../lib/globalize.js"></script>
<script language="javascript" type="text/javascript" src="../../lib/globalize.culture.en-US.js"></script>
<script type="text/javascript">
$(function() {
@ -25,7 +46,10 @@
{ data: oilprices, label: "Oil price ($)" },
{ data: exchangerates, label: "USD/EUR exchange rate", yaxis: 2 }
], {
xaxes: [ { mode: "time" } ],
series: {
lines: {lineWidth: 2}
},
xaxes: [ { mode: "time", timeBase: "milliseconds" } ],
yaxes: [ { min: 0 }, {
// align if we are to the right
alignTicksWithAxis: position == "right" ? 1 : null,

View File

@ -1,3 +1,4 @@
/* eslint-disable */
// -----
// The `timezoneJS.Date` object gives you full-blown timezone support, independent from the timezone set on the end-user's machine running the browser. It uses the Olson zoneinfo files for its timezone data.
//

View File

@ -4,10 +4,30 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Time zones</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../lib/globalize.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script language="javascript" type="text/javascript" src="date.js"></script>
<script type="text/javascript">
@ -56,21 +76,24 @@
var plot = $.plot("#placeholderUTC", [d], {
xaxis: {
mode: "time"
mode: "time",
timeBase: "milliseconds"
}
});
var plot = $.plot("#placeholderLocal", [d], {
xaxis: {
mode: "time",
timezone: "browser"
timezone: "browser",
timeBase: "milliseconds"
}
});
var plot = $.plot("#placeholderChicago", [d], {
xaxis: {
mode: "time",
timezone: "America/Chicago"
timezone: "America/Chicago",
timeBase: "milliseconds"
}
});

File diff suppressed because one or more lines are too long

View File

@ -4,9 +4,29 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Basic Options</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function () {
@ -36,12 +56,14 @@
points: { show: true }
},
xaxis: {
autoScale: "exact",
ticks: [
0, [ Math.PI/2, "\u03c0/2" ], [ Math.PI, "\u03c0" ],
[ Math.PI * 3/2, "3\u03c0/2" ], [ Math.PI * 2, "2\u03c0" ]
]
},
yaxis: {
autoScale: "none",
ticks: 10,
min: -2,
max: 2,

View File

@ -4,9 +4,29 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Basic Usage</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {

View File

@ -4,10 +4,30 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Categories</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.categories.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.categories.js"></script>
<script type="text/javascript">
$(function() {
@ -24,7 +44,8 @@
},
xaxis: {
mode: "categories",
tickLength: 0
showTicks: false,
gridLines: false
}
});
@ -57,8 +78,3 @@
</body>
</html>

View File

@ -2,7 +2,8 @@
body {
background: url(background.png) repeat-x;
font: 18px/1.5em "proxima-nova", Helvetica, Arial, sans-serif;
font: 18px "proxima-nova", Helvetica, Arial, sans-serif;
line-height: 1.5;
}
a { color: #069; }
@ -83,15 +84,63 @@ input[type=checkbox] {
-ms-box-shadow: 0 3px 10px rgba(0,0,0,0.1);
-moz-box-shadow: 0 3px 10px rgba(0,0,0,0.1);
-webkit-box-shadow: 0 3px 10px rgba(0,0,0,0.1);
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.demo-placeholder {
width: 100%;
height: 100%;
font-size: 14px;
line-height: 1.2em;
}
.legend table {
border-spacing: 5px;
}
fieldset {
display: block;
-webkit-margin-start: 2px;
-webkit-margin-end: 2px;
-webkit-padding-before: 0.35em;
-webkit-padding-start: 0.75em;
-webkit-padding-end: 0.75em;
-webkit-padding-after: 0.625em;
min-width: -webkit-min-content;
border-width: 2px;
border-style: groove;
border-color: threedface;
border-image: initial;
padding: 10px;
}
.legend {
display: block;
-webkit-padding-start: 2px;
-webkit-padding-end: 2px;
border-width: initial;
border-style: none;
border-color: initial;
border-image: initial;
padding-left: 10px;
padding-right: 10px;
padding-top: 10px;
padding-bottom: 10px;
}
.legendLayer .background {
fill: rgba(255, 255, 255, 0.85);
stroke: rgba(0, 0, 0, 0.85);
stroke-width: 1;
}
input[type="radio"] {
margin-top: -1px;
vertical-align: middle;
}
.tickLabel {
line-height: 1.1;
}

View File

@ -4,10 +4,30 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Image Plots</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.image.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.image.js"></script>
<script type="text/javascript">
$(function() {
@ -21,12 +41,14 @@
}
},
xaxis: {
autoScale: "none",
min: -8,
max: 4
max: 8
},
yaxis: {
autoScale: "none",
min: -8,
max: 4
max: 8
}
};

View File

@ -1,80 +1,119 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples</title>
<link href="examples.css" rel="stylesheet" type="text/css">
<style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples</title>
<link href="examples.css" rel="stylesheet" type="text/css">
<style>
h3 {
margin-top: 30px;
margin-bottom: 5px;
}
h3 {
margin-top: 30px;
margin-bottom: 5px;
}
</style>
<script language="javascript" type="text/javascript" src="../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
<script type="text/javascript">
</style>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {
$(function() {
// Add the Flot version string to the footer
// Add the Flot version string to the footer
$("#footer").prepend("Flot " + $.plot.version + " &ndash; ");
});
$("#footer").prepend("Flot " + $.plot.version + " &ndash; ");
});
</script>
</script>
</head>
<body>
<div id="header">
<h2>Flot Examples</h2>
</div>
<div id="header">
<h2>Flot Examples</h2>
</div>
<div id="content">
<div id="content">
<p>Here are some examples for <a href="http://www.flotcharts.org">Flot</a>, the Javascript charting library for jQuery:</p>
<p>Here are some examples for <a href="http://www.flotcharts.org">Flot</a>, the Javascript charting library for jQuery:</p>
<h3>Basic Usage</h3>
<h3>Basic Usage</h3>
<ul>
<li><a href="basic-usage/index.html">Basic example</a></li>
<li><a href="series-types/index.html">Different graph types</a> and <a href="categories/index.html">simple categories/textual data</a></li>
<li><a href="basic-options/index.html">Setting various options</a> and <a href="annotating/index.html">annotating a chart</a></li>
<li><a href="ajax/index.html">Updating graphs with AJAX</a> and <a href="realtime/index.html">real-time updates</a></li>
</ul>
<ul>
<li><a href="basic-usage/index.html">Basic example</a></li>
<li><a href="series-types/index.html">Different graph types</a> and <a href="categories/index.html">simple categories/textual data</a></li>
<li><a href="basic-options/index.html">Setting various options</a> and <a href="annotating/index.html">annotating a chart</a></li>
<li><a href="ajax/index.html">Updating graphs with AJAX</a> and <a href="realtime/index.html">real-time updates</a></li>
</ul>
<h3>Interactivity</h3>
<h3>Interactivity</h3>
<ul>
<li><a href="series-toggle/index.html">Turning series on/off</a></li>
<li><a href="selection/index.html">Rectangular selection support and zooming</a> and <a href="zooming/index.html">zooming with overview</a> (both with selection plugin)</li>
<li><a href="interacting/index.html">Interacting with the data points</a></li>
<li><a href="navigate/index.html">Panning and zooming</a> (with navigation plugin)</li>
<li><a href="resize/index.html">Automatically redraw when window is resized</a> (with resize plugin)</li>
</ul>
<ul>
<li><a href="series-toggle/index.html">Turning series on/off</a></li>
<li><a href="selection/index.html">Rectangular selection support and zooming</a> and <a href="zooming/index.html">zooming with overview</a> (both with selection plugin)</li>
<li><a href="interacting/index.html">Interacting with the data points</a></li>
<li><a href="navigate/index.html">Panning and zooming</a> (with navigation plugin)</li>
<li><a href="navigateTouch/index.html">Panning and zooming simple and log-axis charts with Touch</a> (with touchNavigation plugin)</li>
<li><a href="resize/index.html">Automatically redraw when window is resized</a> (with resize plugin)</li>
</ul>
<h3>Additional Features</h3>
<h3>Axes</h3>
<ul>
<li><a href="symbols/index.html">Using other symbols than circles for points</a> (with symbol plugin)</li>
<li><a href="axes-time/index.html">Plotting time series</a>, <a href="visitors/index.html">visitors per day with zooming and weekends</a> (with selection plugin) and <a href="axes-time-zones/index.html">time zone support</a></li>
<li><a href="axes-multiple/index.html">Multiple axes</a> and <a href="axes-interacting/index.html">interacting with the axes</a></li>
<li><a href="threshold/index.html">Thresholding the data</a> (with threshold plugin)</li>
<li><a href="stacking/index.html">Stacked charts</a> (with stacking plugin)</li>
<li><a href="percentiles/index.html">Using filled areas to plot percentiles</a> (with fillbetween plugin)</li>
<li><a href="tracking/index.html">Tracking curves with crosshair</a> (with crosshair plugin)</li>
<li><a href="image/index.html">Plotting prerendered images</a> (with image plugin)</li>
<li><a href="series-errorbars/index.html">Plotting error bars</a> (with errorbars plugin)</li>
<li><a href="series-pie/index.html">Pie charts</a> (with pie plugin)</li>
<li><a href="canvas/index.html">Rendering text with canvas instead of HTML</a> (with canvas plugin)</li>
</ul>
<ul>
<li><a href="axes-time/index.html">Plotting time series</a>, <a href="visitors/index.html">visitors per day with zooming and weekends</a> (with selection plugin)</li>
<li><a href="axes-time-zones/index.html">Time zone support</a></li>
<li><a href="log-scale/index.html">Log scales</a></li>
<li><a href="axes-multiple/index.html">Multiple axes</a></li>
<li><a href="axes-interacting/index.html">Interacting with the axes</a></li>
<li><a href="axes-autoscaling/index.html">Autoscaling options</a></li>
<li><a href="axes-tickLabels/index.html">Tick labels options</a></li>
<li><a href="axes-labels/index.html">Axis labels</a></li>
</ul>
</div>
<h3>Additional Features</h3>
<div id="footer">
Copyright &copy; 2007 - 2013 IOLA and Ole Laursen
</div>
<ul>
<li><a href="symbols/index.html">Using other symbols than circles for points</a> (with symbol plugin)</li>
<li><a href="threshold/index.html">Thresholding the data</a> (with threshold plugin)</li>
<li><a href="stacking/index.html">Stacked charts</a> (with stacking plugin)</li>
<li><a href="percentiles/index.html">Using filled areas to plot percentiles</a> (with fillbetween plugin)</li>
<li><a href="tracking/index.html">Tracking curves with crosshair</a> (with crosshair plugin)</li>
<li><a href="image/index.html">Plotting prerendered images</a> (with image plugin)</li>
<li><a href="series-errorbars/index.html">Plotting error bars</a> (with errorbars plugin)</li>
<li><a href="plot-legend/index.html">Plot Legend</a> </li>
<li><a href="series-pie/index.html">Pie charts</a> (with pie plugin)</li>
</ul>
<br>
<p><i>
Note that these examples use the non-minified source, so they will not work on older browsers such as Internet Explorer.
Use the built source (which comes installed with the NPM package) if you need broader support.
</i></p>
</div>
<div id="footer">
Copyright &copy; 2007 - 2013 IOLA and Ole Laursen
</div>
</body>
</html>

View File

@ -4,9 +4,31 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Interactivity</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../lib/jquery.event.drag.js"></script>
<script language="javascript" type="text/javascript" src="../../lib/jquery.mousewheel.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {
@ -38,6 +60,13 @@
yaxis: {
min: -1.2,
max: 1.2
},
zoom: {
interactive: true
},
pan: {
interactive: true,
enableTouch: true
}
});
@ -71,6 +100,10 @@
}
});
$("#placeholder").bind("plothovercleanup", function (event, pos, item) {
$("#tooltip").hide();
});
$("#placeholder").bind("plotclick", function (event, pos, item) {
if (item) {
$("#clickdata").text(" - click point " + item.dataIndex + " in " + item.series.label);

View File

@ -22,11 +22,32 @@
font-size: smaller;
}
</style>
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.navigate.js"></script>
</style>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../lib/jquery.event.drag.js"></script>
<script language="javascript" type="text/javascript" src="../../lib/jquery.mousewheel.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {
@ -52,17 +73,20 @@
var plot = $.plot(placeholder, data, {
series: {
lines: {
show: true
},
show: true
},
shadowSize: 0
},
xaxis: {
zoomRange: [0.1, 10],
panRange: [-10, 10]
panRange: [-10, 10],
gridLines: true
},
yaxis: {
zoomRange: [0.1, 10],
panRange: [-10, 10]
panRange: [-10, 10],
gridLines: true,
autoScale: 'exact'
},
zoom: {
interactive: true
@ -72,7 +96,7 @@
}
});
// show pan/zoom messages to illustrate events
// show pan/zoom messages to illustrate events
placeholder.bind("plotpan", function (event, plot) {
var axes = plot.getAxes();
@ -90,7 +114,7 @@
+ " &ndash; " + axes.yaxis.max.toFixed(2));
});
// add zoom out button
// add zoom out button
$("<div class='button' style='right:20px;top:20px'>zoom out</div>")
.appendTo(placeholder)

View File

@ -4,10 +4,30 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Percentiles</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script type="text/javascript">
$(function() {

View File

@ -3,10 +3,30 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Real-time updates</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<link href="../examples.css" rel="stylesheet" type="text/css">
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {
@ -66,7 +86,7 @@
var plot = $.plot("#placeholder", [ getRandomData() ], {
series: {
shadowSize: 0 // Drawing is faster without shadows
shadowSize: 0 // Drawing is faster without shadows
},
yaxis: {
min: 0,

View File

@ -5,11 +5,32 @@
<title>Flot Examples: Resizing</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<link href="../shared/jquery-ui/jquery-ui.min.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../shared/jquery-ui/jquery-ui.min.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.resize.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../shared/jquery-ui/jquery-ui.min.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.resize.js"></script>
<script type="text/javascript">
$(function() {
@ -23,7 +44,7 @@
var d3 = [[0, 12], [7, 12], null, [7, 2.5], [12, 2.5]];
var placeholder = $("#placeholder");
var plot = $.plot(placeholder, [d1, d2, d3]);
var plot = $.plot(placeholder, [d1, d2, d3]);
// The plugin includes a jQuery plugin for adding resize events to any
// element. Add a callback so we can display the placeholder size.

View File

@ -4,10 +4,29 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Selection</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {
@ -25,7 +44,7 @@
label: "United States",
data: [[1990, 18.9], [1991, 18.7], [1992, 18.4], [1993, 19.3], [1994, 19.5], [1995, 19.3], [1996, 19.4], [1997, 20.2], [1998, 19.8], [1999, 19.9], [2000, 20.4], [2001, 20.1], [2002, 20.0], [2003, 19.8], [2004, 20.4]]
}, {
label: "Russia",
label: "Russia",
data: [[1992, 13.4], [1993, 12.2], [1994, 10.6], [1995, 10.2], [1996, 10.1], [1997, 9.7], [1998, 9.5], [1999, 9.7], [2000, 9.9], [2001, 9.9], [2002, 9.9], [2003, 10.3], [2004, 10.5]]
}, {
label: "United Kingdom",
@ -57,9 +76,12 @@
noColumns: 2
},
xaxis: {
autoScale: "exact",
tickDecimals: 0
},
yaxis: {
autoScale: "loose",
autoScaleMargin: 0.2,
min: 0
},
selection: {

View File

@ -5,10 +5,30 @@
<title>Flot Examples: Error Bars</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../lib/jquery.mousewheel.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {
@ -41,9 +61,9 @@
var data1_points = {
show: true,
radius: 5,
fillColor: "blue",
errorbars: "xy",
xerr: {show: true, asymmetric: true, upperCap: "-", lowerCap: "-"},
fillColor: "blue",
errorbars: "xy",
xerr: {show: true, asymmetric: true, upperCap: "-", lowerCap: "-"},
yerr: {show: true, color: "red", upperCap: "-"}
};
@ -56,7 +76,7 @@
var data2_points = {
show: true,
radius: 5,
errorbars: "y",
errorbars: "y",
yerr: {show:true, asymmetric:true, upperCap: drawArrow, lowerCap: drawSemiCircle}
};
@ -69,7 +89,7 @@
var data3_points = {
//do not show points
radius: 0,
errorbars: "y",
errorbars: "y",
yerr: {show:true, upperCap: "-", lowerCap: "-", radius: 5}
};
@ -85,7 +105,7 @@
}
var data = [
{color: "blue", points: data1_points, data: data1, label: "data1"},
{color: "blue", points: data1_points, data: data1, label: "data1"},
{color: "red", points: data2_points, data: data2, label: "data2"},
{color: "green", lines: {show: true}, points: data3_points, data: data3, label: "data3"},
// bars with errors
@ -104,10 +124,12 @@
}
},
xaxis: {
autoScale: 'none',
min: 0.6,
max: 3.1
},
yaxis: {
autoScale: 'none',
min: 0,
max: 3.5
},

View File

@ -75,10 +75,30 @@
}
</style>
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.pie.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.pie.js"></script>
<script type="text/javascript">
$(function() {
@ -131,7 +151,7 @@
$.plot(placeholder, data, {
series: {
pie: {
pie: {
show: true
}
}
@ -157,7 +177,7 @@
$.plot(placeholder, data, {
series: {
pie: {
pie: {
show: true
}
},
@ -189,7 +209,7 @@
$.plot(placeholder, data, {
series: {
pie: {
pie: {
show: true,
radius: 1,
label: {
@ -239,7 +259,7 @@
$.plot(placeholder, data, {
series: {
pie: {
pie: {
show: true,
radius: 1,
label: {
@ -289,14 +309,14 @@
$.plot(placeholder, data, {
series: {
pie: {
pie: {
show: true,
radius: 1,
label: {
show: true,
radius: 3/4,
formatter: labelFormatter,
background: {
background: {
opacity: 0.5,
color: "#000"
}
@ -341,14 +361,14 @@
$.plot(placeholder, data, {
series: {
pie: {
pie: {
show: true,
radius: 3/4,
label: {
show: true,
radius: 3/4,
formatter: labelFormatter,
background: {
background: {
opacity: 0.5,
color: "#000"
}
@ -393,7 +413,7 @@
$.plot(placeholder, data, {
series: {
pie: {
pie: {
show: true,
radius: 1,
label: {
@ -439,7 +459,7 @@
$.plot(placeholder, data, {
series: {
pie: {
pie: {
show: true,
combine: {
color: "#999",
@ -479,7 +499,7 @@
$.plot(placeholder, data, {
series: {
pie: {
pie: {
show: true,
radius: 500,
label: {
@ -523,7 +543,7 @@
$.plot(placeholder, data, {
series: {
pie: {
pie: {
show: true,
radius: 1,
tilt: 0.5,
@ -583,7 +603,7 @@
$.plot(placeholder, data, {
series: {
pie: {
pie: {
innerRadius: 0.5,
show: true
}
@ -611,7 +631,7 @@
$.plot(placeholder, data, {
series: {
pie: {
pie: {
show: true
}
},
@ -755,7 +775,7 @@
<li><b>opacity:</b> <i>0.5</i> - Opacity of the highlight overlay on top of the current pie slice. Currently this just uses a white overlay, but support for changing the color of the overlay will also be added at a later date.
</ul>
</ul>
<h2>Changes/Features</h2>
<ul>
<li style="list-style: none;"><i>v1.0 - November 20th, 2009 - Brian Medendorp</i></li>
@ -800,7 +820,7 @@
<li>Merged original pie modifications by Sergey Nosenko into the latest SVN version <i>(as of May 15th, 2009)</i> so that it will work with ie8.</li>
<li>Pie graph will now be centered in the canvas unless moved because of the legend or manually via the options. Additionally it prevents the pie from being moved beyond the edge of the canvas.</li>
<li>Modified the code related to the labelFormatter option to apply flot's legend labelFormatter first. This is so that the labels will be consistent, but still provide extra formatting for the positioned labels (such as adding the percentage value).</li>
<li>Positioned labels now have their backgrounds applied as a seperate element (much like the legend background) so that the opacity value can be set independently from the label itself (foreground). Additionally, the background color defaults to that of the matching slice.</li>
<li>Positioned labels now have their backgrounds applied as a separate element (much like the legend background) so that the opacity value can be set independently from the label itself (foreground). Additionally, the background color defaults to that of the matching slice.</li>
<li>As long as the labelOffset and radiusLimit are not set to hard values, the pie will be shrunk if the labels will extend outside the edge of the canvas</li>
<li>Added new options "radiusLimitFactor" and "radiusLimit" which limits how large the (visual) radius of the pie is in relation to the full radius (as calculated from the canvas dimensions) or a hard-pixel value (respectively). This allows for pushing the labels "outside" the pie.</li>
<li>Added a new option "labelHidePercent" that does not show the positioned labels of slices smaller than the specified percentage. This is to help prevent a bunch of overlapping labels from small slices.</li>

View File

@ -4,9 +4,29 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Toggling Series</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {
@ -15,7 +35,7 @@
"usa": {
label: "USA",
data: [[1988, 483994], [1989, 479060], [1990, 457648], [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995, 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999, 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003, 440813], [2004, 480451], [2005, 504638], [2006, 528692]]
},
},
"russia": {
label: "Russia",
data: [[1988, 218000], [1989, 203000], [1990, 171000], [1992, 42500], [1993, 37600], [1994, 36600], [1995, 21700], [1996, 19200], [1997, 21300], [1998, 13600], [1999, 14000], [2000, 19100], [2001, 21300], [2002, 23600], [2003, 25100], [2004, 26100], [2005, 31100], [2006, 34700]]
@ -51,7 +71,7 @@
++i;
});
// insert checkboxes
// insert checkboxes
var choiceContainer = $("#choices");
$.each(datasets, function(key, val) {
choiceContainer.append("<br/><input type='checkbox' name='" + key +
@ -75,6 +95,9 @@
if (data.length > 0) {
$.plot("#placeholder", data, {
legend: {
show: true
},
yaxis: {
min: 0
},

View File

@ -3,10 +3,30 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Series Types</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<link href="../examples.css" rel="stylesheet" type="text/css">
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {

View File

@ -4,10 +4,29 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Stacking</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {
@ -45,7 +64,10 @@
show: bars,
barWidth: 0.6
}
}
},
yaxis: {
autoScale:"exact"
}
});
}

View File

@ -3,11 +3,31 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Symbols</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.symbol.js"></script>
<link href="../examples.css" rel="stylesheet" type="text/css">
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {
@ -27,17 +47,20 @@
var data = [
{ data: generate(2, 1.8), points: { symbol: "circle" } },
{ data: generate(3, 1.5), points: { symbol: "square" } },
{ data: generate(4, 0.9), points: { symbol: "diamond" } },
{ data: generate(6, 1.4), points: { symbol: "triangle" } },
{ data: generate(7, 1.1), points: { symbol: "cross" } }
{ data: generate(3, 1.5), points: { symbol: "square" } },
{ data: generate(4, 0.9), points: { symbol: "diamond" } },
{ data: generate(6, 1.4), points: { symbol: "triangle" } },
{ data: generate(7, 1.1), points: { symbol: "cross" } },
{ data: generate(8, 1.0), points: { symbol: "ellipse" } },
{ data: generate(9, 1.3), points: { symbol: "plus" } }
];
$.plot("#placeholder", data, {
series: {
points: {
show: true,
radius: 3
radius: 3,
lineWidth: 2
}
},
grid: {

View File

@ -4,10 +4,30 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Thresholds</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.threshold.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.threshold.js"></script>
<script type="text/javascript">
$(function() {

View File

@ -4,10 +4,30 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Tracking</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.crosshair.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.crosshair.js"></script>
<script type="text/javascript">
$(function() {
@ -22,16 +42,21 @@
{ data: sin, label: "sin(x) = -0.00"},
{ data: cos, label: "cos(x) = -0.00" }
], {
legend: {
show: true
},
series: {
lines: {
show: true
show: true,
lineWidth: 2
}
},
crosshair: {
mode: "x"
mode: "xy"
},
grid: {
hoverable: true,
clickable: true,
autoHighlight: false
},
yaxis: {
@ -40,7 +65,7 @@
}
});
var legends = $("#placeholder .legendLabel");
var legends = $("#placeholder .legendLayer text tspan");
legends.each(function () {
// fix the widths so they don't jump around
@ -53,34 +78,28 @@
function updateLegend() {
updateLegendTimeout = null;
var pos = latestPosition;
var axes = plot.getAxes();
if (pos.x < axes.xaxis.min || pos.x > axes.xaxis.max ||
pos.y < axes.yaxis.min || pos.y > axes.yaxis.max) {
return;
}
var i, j, dataset = plot.getData();
for (i = 0; i < dataset.length; ++i) {
var series = dataset[i];
// Find the nearest points, x-wise
for (j = 0; j < series.data.length; ++j) {
if (series.data[j][0] > pos.x) {
break;
}
}
// Now Interpolate
var y,
p1 = series.data[j - 1],
p2 = series.data[j];
if (p1 == null) {
y = p2[1];
} else if (p2 == null) {
@ -88,17 +107,18 @@
} else {
y = p1[1] + (p2[1] - p1[1]) * (pos.x - p1[0]) / (p2[0] - p1[0]);
}
legends.eq(i).text(series.label.replace(/=.*/, "= " + y.toFixed(2)));
}
}
$("#placeholder").bind("plothover", function (event, pos, item) {
$("#placeholder").bind("plothover", function (event, pos, item) {
latestPosition = pos;
if (!updateLegendTimeout) {
updateLegendTimeout = setTimeout(updateLegend, 50);
}
});
}).bind("plotclick", function (event, pos, item) {
plot.lockCrosshair(pos);
});;
// Add the Flot version string to the footer

View File

@ -4,11 +4,30 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Visitors</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../lib/globalize.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {
@ -53,7 +72,9 @@
var options = {
xaxis: {
mode: "time",
tickLength: 5
timeBase: "milliseconds",
tickLength: 5,
gridLines: false
},
selection: {
mode: "x"
@ -80,7 +101,7 @@
yaxis: {
ticks: [],
min: 0,
autoscaleMargin: 0.1
autoScaleMargin: 0.1
},
selection: {
mode: "x"

View File

@ -4,10 +4,29 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples: Selection and zooming</title>
<link href="../examples.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.canvaswrapper.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.colorhelpers.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.saturated.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.browser.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.drawSeries.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.errorbars.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.uiConstants.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.logaxis.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.symbol.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.flatdata.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.navigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.fillbetween.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.stack.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touchNavigate.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.hover.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.touch.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.time.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.axislabels.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.selection.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.composeImages.js"></script>
<script language="javascript" type="text/javascript" src="../../source/jquery.flot.legend.js"></script>
<script type="text/javascript">
$(function() {
@ -39,7 +58,11 @@
show: true
}
},
xaxis: {
autoScale: "none"
},
yaxis: {
autoScale:"none",
ticks: 10
},
selection: {
@ -65,9 +88,11 @@
shadowSize: 0
},
xaxis: {
autoScale: "none",
ticks: 4
},
yaxis: {
autoScale: "none",
ticks: 3,
min: -2,
max: 2

View File

@ -1,11 +1,51 @@
{
"name": "Flot",
"version": "0.8.3",
"main": "jquery.flot.js",
"scripts": {
"test": "make test"
},
"devDependencies": {
"jshint": "0.9.1"
}
"name": "flot",
"version": "3.0.2",
"main": "dist/es5/jquery.flot.js",
"scripts": {
"test": "node node_modules/karma/bin/karma start --single-run --no-auto-watch --concurrency=1 --stopOnEsLintError",
"coverage": "node node_modules/karma/bin/karma start --single-run --coverage --no-auto-watch --concurrency=1",
"build": "node ./node_modules/gulp/bin/gulp.js build",
"dont-break": "dont-break --timeout 300",
"docs": "node ./update_docs.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/flot/flot.git"
},
"license": "MIT",
"bugs": {
"url": "https://github.com/flot/flot/issues"
},
"homepage": "https://github.com/flot/flot#readme",
"devDependencies": {
"@babel/cli": "^7.2.3",
"@babel/core": "^7.4.0",
"@babel/plugin-external-helpers": "^7.2.0",
"@babel/preset-env": "^7.2.3",
"concat": "^1.0.3",
"files-exist": "^1.1.0",
"gulp": "^4.0.0",
"gulp-babel": "^8.0.0",
"gulp-concat": "^2.6.1",
"gulp-sourcemaps": "^2.4.0",
"gulp-uglify": "^3.0.0",
"jasmine-core": "~2.7.0",
"karma": "^1.3.0",
"karma-chrome-launcher": "^2.0.0",
"karma-coverage": "^1.1.2",
"karma-coveralls": "^1.1.2",
"karma-edge-launcher": "^0.4.2",
"karma-eslint": "^2.2.0",
"karma-firefox-launcher": "^1.0.0",
"karma-jasmine": "^1.0.2",
"karma-jasmine-html-reporter": "^0.2.2",
"karma-jasmine-jquery": "^0.1.1",
"karma-safari-launcher": "^1.0.0",
"karma-spec-reporter": "0.0.32",
"ljs": "^0.3.2",
"tmp": "0.0.33",
"webcharts-development-settings": "^1.0.9"
},
"dependencies": {}
}

View File

@ -1,5 +1,5 @@
{
"name": "bootstrap-daterangepicker",
"name": "daterangepicker",
"main": [
"daterangepicker.js",
"daterangepicker.css"
@ -17,14 +17,14 @@
"jquery": "1.9.1 - 3",
"moment": ">=2.9.0"
},
"homepage": "https://github.com/christianesperar/bootstrap-daterangepicker",
"_release": "fc748970e8",
"homepage": "https://github.com/dangrossman/daterangepicker",
"_release": "bc645d93e8",
"_resolution": {
"type": "branch",
"branch": "master",
"commit": "fc748970e8228ab271ba9ca799f57d8f8c6a5013"
"commit": "bc645d93e837905dcd38b04b8d9123978ea9f571"
},
"_source": "git@github.com:christianesperar/bootstrap-daterangepicker.git",
"_source": "git@github.com:dangrossman/daterangepicker.git",
"_target": "master",
"_originalSource": "git@github.com:christianesperar/bootstrap-daterangepicker.git"
"_originalSource": "git@github.com:dangrossman/daterangepicker.git"
}

View File

@ -1,14 +1,13 @@
# Date Range Picker for Bootstrap
# Date Range Picker
![Improvely.com](http://i.imgur.com/LbAMf3D.png)
![Improvely.com](https://i.imgur.com/UTRlaar.png)
This date range picker component for Bootstrap creates a dropdown menu from which a user can
This date range picker component creates a dropdown menu from which a user can
select a range of dates. I created it while building the UI for [Improvely](http://www.improvely.com),
which needed a way to select date ranges for reports.
Features include limiting the selectable date range, localizable strings and date formats,
a single date picker mode, optional time picker (for e.g. making appointments or reservations),
and styles that match the default Bootstrap 3 theme.
a single date picker mode, a time picker, and predefined date ranges.
## [Documentation and Live Usage Examples](http://www.daterangepicker.com)
@ -16,14 +15,9 @@ and styles that match the default Bootstrap 3 theme.
## License
This code is made available under the same license as Bootstrap. Moment.js is included in this repository
for convenience. It is available under the [MIT license](http://www.opensource.org/licenses/mit-license.php).
--
The MIT License (MIT)
Copyright (c) 2012-2016 Dan Grossman
Copyright (c) 2012-2018 Dan Grossman
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,5 +1,5 @@
{
"name": "bootstrap-daterangepicker",
"name": "daterangepicker",
"main": [
"daterangepicker.js",
"daterangepicker.css"

View File

@ -1,261 +1,380 @@
.daterangepicker {
position: absolute;
color: inherit;
background: #fff;
background-color: #fff;
border-radius: 4px;
border: 1px solid #ddd;
width: 278px;
padding: 4px;
margin-top: 1px;
max-width: none;
padding: 0;
margin-top: 7px;
top: 100px;
left: 20px;
/* Calendars */ }
.daterangepicker:before, .daterangepicker:after {
position: absolute;
display: inline-block;
border-bottom-color: rgba(0, 0, 0, 0.2);
content: ''; }
.daterangepicker:before {
top: -7px;
border-right: 7px solid transparent;
border-left: 7px solid transparent;
border-bottom: 7px solid #ccc; }
.daterangepicker:after {
top: -6px;
border-right: 6px solid transparent;
border-bottom: 6px solid #fff;
border-left: 6px solid transparent; }
.daterangepicker.opensleft:before {
right: 9px; }
.daterangepicker.opensleft:after {
right: 10px; }
.daterangepicker.openscenter:before {
left: 0;
right: 0;
width: 0;
margin-left: auto;
margin-right: auto; }
.daterangepicker.openscenter:after {
left: 0;
right: 0;
width: 0;
margin-left: auto;
margin-right: auto; }
.daterangepicker.opensright:before {
left: 9px; }
.daterangepicker.opensright:after {
left: 10px; }
.daterangepicker.dropup {
margin-top: -5px; }
.daterangepicker.dropup:before {
top: initial;
bottom: -7px;
border-bottom: initial;
border-top: 7px solid #ccc; }
.daterangepicker.dropup:after {
top: initial;
bottom: -6px;
border-bottom: initial;
border-top: 6px solid #fff; }
.daterangepicker.dropdown-menu {
max-width: none;
z-index: 3001; }
.daterangepicker.single .ranges, .daterangepicker.single .calendar {
float: none; }
.daterangepicker.show-calendar .calendar {
display: block; }
.daterangepicker .calendar {
display: none;
max-width: 270px;
margin: 4px; }
.daterangepicker .calendar.single .calendar-table {
border: none; }
.daterangepicker .calendar th, .daterangepicker .calendar td {
white-space: nowrap;
text-align: center;
min-width: 32px; }
.daterangepicker .calendar-table {
border: 1px solid #fff;
padding: 4px;
border-radius: 4px;
background: #fff; }
.daterangepicker table {
width: 100%;
margin: 0; }
.daterangepicker td, .daterangepicker th {
text-align: center;
width: 20px;
height: 20px;
border-radius: 4px;
border: 1px solid transparent;
white-space: nowrap;
cursor: pointer; }
.daterangepicker td.available:hover, .daterangepicker th.available:hover {
background-color: #eee;
border-color: transparent;
color: inherit; }
.daterangepicker td.week, .daterangepicker th.week {
font-size: 80%;
color: #ccc; }
.daterangepicker td.off, .daterangepicker td.off.in-range, .daterangepicker td.off.start-date, .daterangepicker td.off.end-date {
background-color: #fff;
border-color: transparent;
color: #999; }
.daterangepicker td.in-range {
background-color: #ebf4f8;
border-color: transparent;
color: #000;
border-radius: 0; }
.daterangepicker td.start-date {
border-radius: 4px 0 0 4px; }
.daterangepicker td.end-date {
border-radius: 0 4px 4px 0; }
.daterangepicker td.start-date.end-date {
border-radius: 4px; }
.daterangepicker td.active, .daterangepicker td.active:hover {
background-color: #357ebd;
border-color: transparent;
color: #fff; }
.daterangepicker th.month {
width: auto; }
.daterangepicker td.disabled, .daterangepicker option.disabled {
color: #999;
cursor: not-allowed;
text-decoration: line-through; }
.daterangepicker select.monthselect, .daterangepicker select.yearselect {
font-size: 12px;
padding: 1px;
height: auto;
margin: 0;
cursor: default; }
.daterangepicker select.monthselect {
margin-right: 2%;
width: 56%; }
.daterangepicker select.yearselect {
width: 40%; }
.daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.secondselect, .daterangepicker select.ampmselect {
width: 50px;
margin-bottom: 0; }
.daterangepicker .input-mini {
border: 1px solid #ccc;
border-radius: 4px;
color: #555;
height: 30px;
line-height: 30px;
display: block;
vertical-align: middle;
margin: 0 0 5px 0;
padding: 0 6px 0 28px;
width: 100%; }
.daterangepicker .input-mini.active {
border: 1px solid #08c;
border-radius: 4px; }
.daterangepicker .daterangepicker_input {
position: relative; }
.daterangepicker .daterangepicker_input i {
position: absolute;
left: 8px;
top: 8px; }
.daterangepicker.rtl .input-mini {
padding-right: 28px;
padding-left: 6px; }
.daterangepicker.rtl .daterangepicker_input i {
left: auto;
right: 8px; }
.daterangepicker .calendar-time {
text-align: center;
margin: 5px auto;
line-height: 30px;
position: relative;
padding-left: 28px; }
.daterangepicker .calendar-time select.disabled {
color: #ccc;
cursor: not-allowed; }
z-index: 3001;
display: none;
font-family: arial;
font-size: 15px;
line-height: 1em;
}
.ranges {
font-size: 11px;
.daterangepicker:before, .daterangepicker:after {
position: absolute;
display: inline-block;
border-bottom-color: rgba(0, 0, 0, 0.2);
content: '';
}
.daterangepicker:before {
top: -7px;
border-right: 7px solid transparent;
border-left: 7px solid transparent;
border-bottom: 7px solid #ccc;
}
.daterangepicker:after {
top: -6px;
border-right: 6px solid transparent;
border-bottom: 6px solid #fff;
border-left: 6px solid transparent;
}
.daterangepicker.opensleft:before {
right: 9px;
}
.daterangepicker.opensleft:after {
right: 10px;
}
.daterangepicker.openscenter:before {
left: 0;
right: 0;
width: 0;
margin-left: auto;
margin-right: auto;
}
.daterangepicker.openscenter:after {
left: 0;
right: 0;
width: 0;
margin-left: auto;
margin-right: auto;
}
.daterangepicker.opensright:before {
left: 9px;
}
.daterangepicker.opensright:after {
left: 10px;
}
.daterangepicker.drop-up {
margin-top: -7px;
}
.daterangepicker.drop-up:before {
top: initial;
bottom: -7px;
border-bottom: initial;
border-top: 7px solid #ccc;
}
.daterangepicker.drop-up:after {
top: initial;
bottom: -6px;
border-bottom: initial;
border-top: 6px solid #fff;
}
.daterangepicker.single .daterangepicker .ranges, .daterangepicker.single .drp-calendar {
float: none;
margin: 4px;
text-align: left; }
.ranges ul {
list-style: none;
margin: 0 auto;
padding: 0;
width: 100%; }
.ranges li {
font-size: 13px;
background: #f5f5f5;
border: 1px solid #f5f5f5;
border-radius: 4px;
color: #08c;
padding: 3px 12px;
margin-bottom: 8px;
cursor: pointer; }
.ranges li:hover {
background: #08c;
border: 1px solid #08c;
color: #fff; }
.ranges li.active {
background: #08c;
border: 1px solid #08c;
color: #fff; }
}
.daterangepicker.single .drp-selected {
display: none;
}
.daterangepicker.show-calendar .drp-calendar {
display: block;
}
.daterangepicker.show-calendar .drp-buttons {
display: block;
}
.daterangepicker.auto-apply .drp-buttons {
display: none;
}
.daterangepicker .drp-calendar {
display: none;
max-width: 270px;
}
.daterangepicker .drp-calendar.left {
padding: 8px 0 8px 8px;
}
.daterangepicker .drp-calendar.right {
padding: 8px;
}
.daterangepicker .drp-calendar.single .calendar-table {
border: none;
}
.daterangepicker .calendar-table .next span, .daterangepicker .calendar-table .prev span {
color: #fff;
border: solid black;
border-width: 0 2px 2px 0;
border-radius: 0;
display: inline-block;
padding: 3px;
}
.daterangepicker .calendar-table .next span {
transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
}
.daterangepicker .calendar-table .prev span {
transform: rotate(135deg);
-webkit-transform: rotate(135deg);
}
.daterangepicker .calendar-table th, .daterangepicker .calendar-table td {
white-space: nowrap;
text-align: center;
vertical-align: middle;
min-width: 32px;
width: 32px;
height: 24px;
line-height: 24px;
font-size: 12px;
border-radius: 4px;
border: 1px solid transparent;
white-space: nowrap;
cursor: pointer;
}
.daterangepicker .calendar-table {
border: 1px solid #fff;
border-radius: 4px;
background-color: #fff;
}
.daterangepicker .calendar-table table {
width: 100%;
margin: 0;
border-spacing: 0;
border-collapse: collapse;
}
.daterangepicker td.available:hover, .daterangepicker th.available:hover {
background-color: #eee;
border-color: transparent;
color: inherit;
}
.daterangepicker td.week, .daterangepicker th.week {
font-size: 80%;
color: #ccc;
}
.daterangepicker td.off, .daterangepicker td.off.in-range, .daterangepicker td.off.start-date, .daterangepicker td.off.end-date {
background-color: #fff;
border-color: transparent;
color: #999;
}
.daterangepicker td.in-range {
background-color: #ebf4f8;
border-color: transparent;
color: #000;
border-radius: 0;
}
.daterangepicker td.start-date {
border-radius: 4px 0 0 4px;
}
.daterangepicker td.end-date {
border-radius: 0 4px 4px 0;
}
.daterangepicker td.start-date.end-date {
border-radius: 4px;
}
.daterangepicker td.active, .daterangepicker td.active:hover {
background-color: #357ebd;
border-color: transparent;
color: #fff;
}
.daterangepicker th.month {
width: auto;
}
.daterangepicker td.disabled, .daterangepicker option.disabled {
color: #999;
cursor: not-allowed;
text-decoration: line-through;
}
.daterangepicker select.monthselect, .daterangepicker select.yearselect {
font-size: 12px;
padding: 1px;
height: auto;
margin: 0;
cursor: default;
}
.daterangepicker select.monthselect {
margin-right: 2%;
width: 56%;
}
.daterangepicker select.yearselect {
width: 40%;
}
.daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.secondselect, .daterangepicker select.ampmselect {
width: 50px;
margin: 0 auto;
background: #eee;
border: 1px solid #eee;
padding: 2px;
outline: 0;
font-size: 12px;
}
.daterangepicker .calendar-time {
text-align: center;
margin: 4px auto 0 auto;
line-height: 30px;
position: relative;
}
.daterangepicker .calendar-time select.disabled {
color: #ccc;
cursor: not-allowed;
}
.daterangepicker .drp-buttons {
clear: both;
text-align: right;
padding: 8px;
border-top: 1px solid #ddd;
display: none;
line-height: 12px;
vertical-align: middle;
}
.daterangepicker .drp-selected {
display: inline-block;
font-size: 12px;
padding-right: 8px;
}
.daterangepicker .drp-buttons .btn {
margin-left: 8px;
font-size: 12px;
font-weight: bold;
padding: 4px 8px;
}
.daterangepicker.show-ranges .drp-calendar.left {
border-left: 1px solid #ddd;
}
.daterangepicker .ranges {
float: none;
text-align: left;
margin: 0;
}
.daterangepicker.show-calendar .ranges {
margin-top: 8px;
}
.daterangepicker .ranges ul {
list-style: none;
margin: 0 auto;
padding: 0;
width: 100%;
}
.daterangepicker .ranges li {
font-size: 12px;
padding: 8px 12px;
cursor: pointer;
}
.daterangepicker .ranges li:hover {
background-color: #eee;
}
.daterangepicker .ranges li.active {
background-color: #08c;
color: #fff;
}
/* Larger Screen Styling */
@media (min-width: 564px) {
.daterangepicker {
width: auto; }
.daterangepicker .ranges ul {
width: 160px; }
width: 140px; }
.daterangepicker.single .ranges ul {
width: 100%; }
.daterangepicker.single .calendar.left {
.daterangepicker.single .drp-calendar.left {
clear: none; }
.daterangepicker.single.ltr .ranges, .daterangepicker.single.ltr .calendar {
.daterangepicker.single.ltr .ranges, .daterangepicker.single.ltr .drp-calendar {
float: left; }
.daterangepicker.single.rtl .ranges, .daterangepicker.single.rtl .calendar {
.daterangepicker.single.rtl .ranges, .daterangepicker.single.rtl .drp-calendar {
float: right; }
.daterangepicker.ltr {
direction: ltr;
text-align: left; }
.daterangepicker.ltr .calendar.left {
.daterangepicker.ltr .drp-calendar.left {
clear: left;
margin-right: 0; }
.daterangepicker.ltr .calendar.left .calendar-table {
.daterangepicker.ltr .drp-calendar.left .calendar-table {
border-right: none;
border-top-right-radius: 0;
border-bottom-right-radius: 0; }
.daterangepicker.ltr .calendar.right {
.daterangepicker.ltr .drp-calendar.right {
margin-left: 0; }
.daterangepicker.ltr .calendar.right .calendar-table {
.daterangepicker.ltr .drp-calendar.right .calendar-table {
border-left: none;
border-top-left-radius: 0;
border-bottom-left-radius: 0; }
.daterangepicker.ltr .left .daterangepicker_input {
padding-right: 12px; }
.daterangepicker.ltr .calendar.left .calendar-table {
padding-right: 12px; }
.daterangepicker.ltr .ranges, .daterangepicker.ltr .calendar {
.daterangepicker.ltr .drp-calendar.left .calendar-table {
padding-right: 8px; }
.daterangepicker.ltr .ranges, .daterangepicker.ltr .drp-calendar {
float: left; }
.daterangepicker.rtl {
direction: rtl;
text-align: right; }
.daterangepicker.rtl .calendar.left {
.daterangepicker.rtl .drp-calendar.left {
clear: right;
margin-left: 0; }
.daterangepicker.rtl .calendar.left .calendar-table {
.daterangepicker.rtl .drp-calendar.left .calendar-table {
border-left: none;
border-top-left-radius: 0;
border-bottom-left-radius: 0; }
.daterangepicker.rtl .calendar.right {
.daterangepicker.rtl .drp-calendar.right {
margin-right: 0; }
.daterangepicker.rtl .calendar.right .calendar-table {
.daterangepicker.rtl .drp-calendar.right .calendar-table {
border-right: none;
border-top-right-radius: 0;
border-bottom-right-radius: 0; }
.daterangepicker.rtl .left .daterangepicker_input {
.daterangepicker.rtl .drp-calendar.left .calendar-table {
padding-left: 12px; }
.daterangepicker.rtl .calendar.left .calendar-table {
padding-left: 12px; }
.daterangepicker.rtl .ranges, .daterangepicker.rtl .calendar {
.daterangepicker.rtl .ranges, .daterangepicker.rtl .drp-calendar {
text-align: right;
float: right; } }
@media (min-width: 730px) {
@ -265,5 +384,5 @@
float: left; }
.daterangepicker.rtl .ranges {
float: right; }
.daterangepicker .calendar.left {
.daterangepicker .drp-calendar.left {
clear: none !important; } }

View File

@ -1,16 +1,18 @@
/**
* @version: 2.1.24
* @version: 3.0.3
* @author: Dan Grossman http://www.dangrossman.info/
* @copyright: Copyright (c) 2012-2016 Dan Grossman. All rights reserved.
* @copyright: Copyright (c) 2012-2018 Dan Grossman. All rights reserved.
* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php
* @website: https://www.improvely.com/
* @website: http://www.daterangepicker.com/
*/
// Follow the UMD template https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js
// Following the UMD template https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Make globaly available as well
define(['moment', 'jquery'], function (moment, jquery) {
return (root.daterangepicker = factory(moment, jquery));
if (!jquery.fn) jquery.fn = {}; // webpack server rendering
if (typeof moment !== 'function' && moment.default) moment = moment.default
return factory(moment, jquery);
});
} else if (typeof module === 'object' && module.exports) {
// Node / Browserify
@ -20,7 +22,8 @@
jQuery = require('jquery');
if (!jQuery.fn) jQuery.fn = {};
}
module.exports = factory(require('moment'), jQuery);
var moment = (typeof window != 'undefined' && typeof window.moment != 'undefined') ? window.moment : require('moment');
module.exports = factory(moment, jQuery);
} else {
// Browser globals
root.daterangepicker = factory(root.moment, root.jQuery);
@ -35,10 +38,12 @@
this.endDate = moment().endOf('day');
this.minDate = false;
this.maxDate = false;
this.dateLimit = false;
this.maxSpan = false;
this.autoApply = false;
this.singleDatePicker = false;
this.showDropdowns = false;
this.minYear = moment().subtract(100, 'year').format('YYYY');
this.maxYear = moment().add(100, 'year').format('YYYY');
this.showWeekNumbers = false;
this.showISOWeekNumbers = false;
this.showCustomRangeLabel = true;
@ -60,8 +65,8 @@
this.drops = 'up';
this.buttonClasses = 'btn btn-sm';
this.applyClass = 'btn-success';
this.cancelClass = 'btn-default';
this.applyButtonClasses = 'btn-primary';
this.cancelButtonClasses = 'btn-default';
this.locale = {
direction: 'ltr',
@ -93,34 +98,21 @@
//html template for the picker UI
if (typeof options.template !== 'string' && !(options.template instanceof $))
options.template = '<div class="daterangepicker dropdown-menu">' +
'<div class="calendar left">' +
'<div class="daterangepicker_input">' +
'<input class="input-mini form-control" type="text" name="daterangepicker_start" value="" />' +
'<i class="fa fa-calendar glyphicon glyphicon-calendar"></i>' +
'<div class="calendar-time">' +
'<div></div>' +
'<i class="fa fa-clock-o glyphicon glyphicon-time"></i>' +
'</div>' +
'</div>' +
options.template =
'<div class="daterangepicker">' +
'<div class="ranges"></div>' +
'<div class="drp-calendar left">' +
'<div class="calendar-table"></div>' +
'<div class="calendar-time"></div>' +
'</div>' +
'<div class="calendar right">' +
'<div class="daterangepicker_input">' +
'<input class="input-mini form-control" type="text" name="daterangepicker_end" value="" />' +
'<i class="fa fa-calendar glyphicon glyphicon-calendar"></i>' +
'<div class="calendar-time">' +
'<div></div>' +
'<i class="fa fa-clock-o glyphicon glyphicon-time"></i>' +
'</div>' +
'</div>' +
'<div class="drp-calendar right">' +
'<div class="calendar-table"></div>' +
'<div class="calendar-time"></div>' +
'</div>' +
'<div class="ranges">' +
'<div class="range_inputs">' +
'<button class="applyBtn" disabled="disabled" type="button"></button> ' +
'<button class="cancelBtn" type="button"></button>' +
'</div>' +
'<div class="drp-buttons">' +
'<span class="drp-selected"></span>' +
'<button class="cancelBtn" type="button"></button>' +
'<button class="applyBtn" disabled="disabled" type="button"></button> ' +
'</div>' +
'</div>';
@ -160,9 +152,13 @@
if (typeof options.locale.weekLabel === 'string')
this.locale.weekLabel = options.locale.weekLabel;
if (typeof options.locale.customRangeLabel === 'string')
this.locale.customRangeLabel = options.locale.customRangeLabel;
if (typeof options.locale.customRangeLabel === 'string'){
//Support unicode chars in the custom range name.
var elem = document.createElement('textarea');
elem.innerHTML = options.locale.customRangeLabel;
var rangeHtml = elem.value;
this.locale.customRangeLabel = rangeHtml;
}
}
this.container.addClass(this.locale.direction);
@ -198,14 +194,23 @@
if (this.maxDate && this.endDate.isAfter(this.maxDate))
this.endDate = this.maxDate.clone();
if (typeof options.applyClass === 'string')
this.applyClass = options.applyClass;
if (typeof options.applyButtonClasses === 'string')
this.applyButtonClasses = options.applyButtonClasses;
if (typeof options.cancelClass === 'string')
this.cancelClass = options.cancelClass;
if (typeof options.applyClass === 'string') //backwards compat
this.applyButtonClasses = options.applyClass;
if (typeof options.dateLimit === 'object')
this.dateLimit = options.dateLimit;
if (typeof options.cancelButtonClasses === 'string')
this.cancelButtonClasses = options.cancelButtonClasses;
if (typeof options.cancelClass === 'string') //backwards compat
this.cancelButtonClasses = options.cancelClass;
if (typeof options.maxSpan === 'object')
this.maxSpan = options.maxSpan;
if (typeof options.dateLimit === 'object') //backwards compat
this.maxSpan = options.dateLimit;
if (typeof options.opens === 'string')
this.opens = options.opens;
@ -225,16 +230,15 @@
if (typeof options.buttonClasses === 'object')
this.buttonClasses = options.buttonClasses.join(' ');
if (typeof options.singleClasses === 'string')
this.singleClasses = options.singleClasses;
if (typeof options.singleClasses === 'object')
this.singleClasses = options.singleClasses.join(' ');
if (typeof options.showDropdowns === 'boolean')
this.showDropdowns = options.showDropdowns;
if (typeof options.minYear === 'number')
this.minYear = options.minYear;
if (typeof options.maxYear === 'number')
this.maxYear = options.maxYear;
if (typeof options.showCustomRangeLabel === 'boolean')
this.showCustomRangeLabel = options.showCustomRangeLabel;
@ -287,7 +291,7 @@
//if no start/end dates set, check if an input element contains initial values
if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') {
if ($(this.element).is('input[type=text]')) {
if ($(this.element).is(':text')) {
var val = $(this.element).val(),
split = val.split(this.locale.separator);
@ -320,20 +324,20 @@
else
end = moment(options.ranges[range][1]);
// If the start or end date exceed those allowed by the minDate or dateLimit
// If the start or end date exceed those allowed by the minDate or maxSpan
// options, shorten the range to the allowable period.
if (this.minDate && start.isBefore(this.minDate))
start = this.minDate.clone();
var maxDate = this.maxDate;
if (this.dateLimit && maxDate && start.clone().add(this.dateLimit).isAfter(maxDate))
maxDate = start.clone().add(this.dateLimit);
if (this.maxSpan && maxDate && start.clone().add(this.maxSpan).isAfter(maxDate))
maxDate = start.clone().add(this.maxSpan);
if (maxDate && end.isAfter(maxDate))
end = maxDate.clone();
// If the end of the range is before the minimum or the start of the range is
// after the maximum, don't display this range option at all.
if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day'))
if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day'))
|| (maxDate && start.isAfter(maxDate, this.timepicker ? 'minute' : 'day')))
continue;
@ -370,25 +374,20 @@
if (this.timePicker && this.autoApply)
this.autoApply = false;
if (this.autoApply && typeof options.ranges !== 'object') {
this.container.find('.ranges').hide();
} else if (this.autoApply) {
this.container.find('.applyBtn, .cancelBtn').addClass('hide');
if (this.autoApply) {
this.container.addClass('auto-apply');
}
if (typeof options.ranges === 'object')
this.container.addClass('show-ranges');
if (this.singleDatePicker) {
this.container.addClass('single');
if (this.singleClasses) {
this.container.addClass(this.singleClasses);
}
this.container.find('.calendar.left').addClass('single');
this.container.find('.calendar.left').show();
this.container.find('.calendar.right').hide();
this.container.find('.daterangepicker_input input, .daterangepicker_input > i').hide();
if (this.timePicker) {
this.container.find('.ranges ul').hide();
} else {
this.container.find('.ranges').hide();
this.container.find('.drp-calendar.left').addClass('single');
this.container.find('.drp-calendar.left').show();
this.container.find('.drp-calendar.right').hide();
if (!this.timePicker) {
this.container.addClass('auto-apply');
}
}
@ -398,17 +397,12 @@
this.container.addClass('opens' + this.opens);
//swap the position of the predefined ranges if opens right
if (typeof options.ranges !== 'undefined' && this.opens == 'right') {
this.container.find('.ranges').prependTo( this.container.find('.calendar.left').parent() );
}
//apply CSS classes and labels to buttons
this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses);
if (this.applyClass.length)
this.container.find('.applyBtn').addClass(this.applyClass);
if (this.cancelClass.length)
this.container.find('.cancelBtn').addClass(this.cancelClass);
if (this.applyButtonClasses.length)
this.container.find('.applyBtn').addClass(this.applyButtonClasses);
if (this.cancelButtonClasses.length)
this.container.find('.cancelBtn').addClass(this.cancelButtonClasses);
this.container.find('.applyBtn').html(this.locale.applyLabel);
this.container.find('.cancelBtn').html(this.locale.cancelLabel);
@ -416,49 +410,39 @@
// event listeners
//
this.container.find('.calendar')
this.container.find('.drp-calendar')
.on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this))
.on('click.daterangepicker', '.next', $.proxy(this.clickNext, this))
.on('mousedown.daterangepicker', 'td.available', $.proxy(this.clickDate, this))
.on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this))
.on('mouseleave.daterangepicker', 'td.available', $.proxy(this.updateFormInputs, this))
.on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this))
.on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this))
.on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this))
.on('click.daterangepicker', '.daterangepicker_input input', $.proxy(this.showCalendars, this))
.on('focus.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsFocused, this))
.on('blur.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsBlurred, this))
.on('change.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsChanged, this));
this.container.find('.ranges')
.on('click.daterangepicker', 'li', $.proxy(this.clickRange, this))
this.container.find('.drp-buttons')
.on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this))
.on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this))
.on('click.daterangepicker', 'li', $.proxy(this.clickRange, this))
.on('mouseenter.daterangepicker', 'li', $.proxy(this.hoverRange, this))
.on('mouseleave.daterangepicker', 'li', $.proxy(this.updateFormInputs, this));
if (this.element.is('input') || this.element.is('button')) {
this.element.on({
'click.daterangepicker': $.proxy(this.show, this),
'focus.daterangepicker': $.proxy(this.show, this),
'keyup.daterangepicker': $.proxy(this.elementChanged, this),
'keydown.daterangepicker': $.proxy(this.keydown, this)
'keydown.daterangepicker': $.proxy(this.keydown, this) //IE 11 compatibility
});
} else {
this.element.on('click.daterangepicker', $.proxy(this.toggle, this));
this.element.on('keydown.daterangepicker', $.proxy(this.toggle, this));
}
//
// if attached to a text input, set the initial value
//
if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) {
this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));
this.element.trigger('change');
} else if (this.element.is('input') && this.autoUpdateInput) {
this.element.val(this.startDate.format(this.locale.format));
this.element.trigger('change');
}
this.updateElement();
};
@ -505,7 +489,7 @@
this.endDate = moment(endDate);
if (!this.timePicker)
this.endDate = this.endDate.endOf('day');
this.endDate = this.endDate.add(1,'d').startOf('day').subtract(1,'second');
if (this.timePicker && this.timePickerIncrement)
this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
@ -516,11 +500,13 @@
if (this.maxDate && this.endDate.isAfter(this.maxDate))
this.endDate = this.maxDate.clone();
if (this.dateLimit && this.startDate.clone().add(this.dateLimit).isBefore(this.endDate))
this.endDate = this.startDate.clone().add(this.dateLimit);
if (this.maxSpan && this.startDate.clone().add(this.maxSpan).isBefore(this.endDate))
this.endDate = this.startDate.clone().add(this.maxSpan);
this.previousRightTime = this.endDate.clone();
this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));
if (!this.isShowing)
this.updateElement();
@ -545,13 +531,8 @@
this.container.find('.right .calendar-time select').removeAttr('disabled').removeClass('disabled');
}
}
if (this.endDate) {
this.container.find('input[name="daterangepicker_end"]').removeClass('active');
this.container.find('input[name="daterangepicker_start"]').addClass('active');
} else {
this.container.find('input[name="daterangepicker_end"]').addClass('active');
this.container.find('input[name="daterangepicker_start"]').removeClass('active');
}
if (this.endDate)
this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));
this.updateMonthsInView();
this.updateCalendars();
this.updateFormInputs();
@ -712,7 +693,7 @@
html += '<th></th>';
if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) {
html += '<th class="prev available"><i class="fa fa-' + arrow.left + ' glyphicon glyphicon-' + arrow.left + '"></i></th>';
html += '<th class="prev available"><span></span></th>';
} else {
html += '<th></th>';
}
@ -722,8 +703,8 @@
if (this.showDropdowns) {
var currentMonth = calendar[1][1].month();
var currentYear = calendar[1][1].year();
var maxYear = (maxDate && maxDate.year()) || (currentYear + 5);
var minYear = (minDate && minDate.year()) || (currentYear - 50);
var maxYear = (maxDate && maxDate.year()) || (this.maxYear);
var minYear = (minDate && minDate.year()) || (this.minYear);
var inMinYear = currentYear == minYear;
var inMaxYear = currentYear == maxYear;
@ -754,7 +735,7 @@
html += '<th colspan="5" class="month">' + dateHtml + '</th>';
if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) {
html += '<th class="next available"><i class="fa fa-' + arrow.right + ' glyphicon glyphicon-' + arrow.right + '"></i></th>';
html += '<th class="next available"><span></span></th>';
} else {
html += '<th></th>';
}
@ -774,10 +755,10 @@
html += '</thead>';
html += '<tbody>';
//adjust maxDate to reflect the dateLimit setting in order to
//grey out end dates beyond the dateLimit
if (this.endDate == null && this.dateLimit) {
var maxLimit = this.startDate.clone().add(this.dateLimit).endOf('day');
//adjust maxDate to reflect the maxSpan setting in order to
//grey out end dates beyond the maxSpan
if (this.endDate == null && this.maxSpan) {
var maxLimit = this.startDate.clone().add(this.maxSpan).endOf('day');
if (!maxDate || maxLimit.isBefore(maxDate)) {
maxDate = maxLimit;
}
@ -859,7 +840,7 @@
html += '</tbody>';
html += '</table>';
this.container.find('.calendar.' + side + ' .calendar-table').html(html);
this.container.find('.drp-calendar.' + side + ' .calendar-table').html(html);
},
@ -871,8 +852,8 @@
var html, selected, minDate, maxDate = this.maxDate;
if (this.dateLimit && (!this.maxDate || this.startDate.clone().add(this.dateLimit).isAfter(this.maxDate)))
maxDate = this.startDate.clone().add(this.dateLimit);
if (this.maxSpan && (!this.maxDate || this.startDate.clone().add(this.maxSpan).isAfter(this.maxDate)))
maxDate = this.startDate.clone().add(this.maxSpan);
if (side == 'left') {
selected = this.startDate.clone();
@ -882,12 +863,12 @@
minDate = this.startDate;
//Preserve the time already selected
var timeSelector = this.container.find('.calendar.right .calendar-time div');
if (!this.endDate && timeSelector.html() != '') {
var timeSelector = this.container.find('.drp-calendar.right .calendar-time');
if (timeSelector.html() != '') {
selected.hour(timeSelector.find('.hourselect option:selected').val() || selected.hour());
selected.minute(timeSelector.find('.minuteselect option:selected').val() || selected.minute());
selected.second(timeSelector.find('.secondselect option:selected').val() || selected.second());
selected.hour(selected.hour() || timeSelector.find('.hourselect option:selected').val());
selected.minute(selected.minute() || timeSelector.find('.minuteselect option:selected').val());
selected.second(selected.second() || timeSelector.find('.secondselect option:selected').val());
if (!this.timePicker24Hour) {
var ampm = timeSelector.find('.ampmselect option:selected').val();
@ -1020,20 +1001,12 @@
html += '</select>';
}
this.container.find('.calendar.' + side + ' .calendar-time div').html(html);
this.container.find('.drp-calendar.' + side + ' .calendar-time').html(html);
},
updateFormInputs: function() {
//ignore mouse movements while an above-calendar text input has focus
if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus"))
return;
this.container.find('input[name=daterangepicker_start]').val(this.startDate.format(this.locale.format));
if (this.endDate)
this.container.find('input[name=daterangepicker_end]').val(this.endDate.format(this.locale.format));
if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) {
this.container.find('button.applyBtn').removeAttr('disabled');
} else {
@ -1058,7 +1031,7 @@
containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;
else
containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;
this.container[this.drops == 'up' ? 'addClass' : 'removeClass']('dropup');
this.container[this.drops == 'up' ? 'addClass' : 'removeClass']('drop-up');
if (this.opens == 'left') {
this.container.css({
@ -1141,7 +1114,7 @@
//if a new date range was selected, invoke the user callback function
if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate))
this.callback(this.startDate, this.endDate, this.chosenLabel);
this.callback(this.startDate.clone(), this.endDate.clone(), this.chosenLabel);
//if picker is attached to a text input, update it
this.updateElement();
@ -1187,24 +1160,6 @@
this.element.trigger('hideCalendar.daterangepicker', this);
},
hoverRange: function(e) {
//ignore mouse movements while an above-calendar text input has focus
if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus"))
return;
var label = e.target.getAttribute('data-range-key');
if (label == this.locale.customRangeLabel) {
this.updateView();
} else {
var dates = this.ranges[label];
this.container.find('input[name=daterangepicker_start]').val(dates[0].format(this.locale.format));
this.container.find('input[name=daterangepicker_end]').val(dates[1].format(this.locale.format));
}
},
clickRange: function(e) {
var label = e.target.getAttribute('data-range-key');
this.chosenLabel = label;
@ -1227,7 +1182,7 @@
},
clickPrev: function(e) {
var cal = $(e.target).parents('.calendar');
var cal = $(e.target).parents('.drp-calendar');
if (cal.hasClass('left')) {
this.leftCalendar.month.subtract(1, 'month');
if (this.linkedCalendars)
@ -1239,7 +1194,7 @@
},
clickNext: function(e) {
var cal = $(e.target).parents('.calendar');
var cal = $(e.target).parents('.drp-calendar');
if (cal.hasClass('left')) {
this.leftCalendar.month.add(1, 'month');
} else {
@ -1252,32 +1207,21 @@
hoverDate: function(e) {
//ignore mouse movements while an above-calendar text input has focus
//if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus"))
// return;
//ignore dates that can't be selected
if (!$(e.target).hasClass('available')) return;
//have the text inputs above calendars reflect the date being hovered over
var title = $(e.target).attr('data-title');
var row = title.substr(1, 1);
var col = title.substr(3, 1);
var cal = $(e.target).parents('.calendar');
var cal = $(e.target).parents('.drp-calendar');
var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];
if (this.endDate && !this.container.find('input[name=daterangepicker_start]').is(":focus")) {
this.container.find('input[name=daterangepicker_start]').val(date.format(this.locale.format));
} else if (!this.endDate && !this.container.find('input[name=daterangepicker_end]').is(":focus")) {
this.container.find('input[name=daterangepicker_end]').val(date.format(this.locale.format));
}
//highlight the dates between the start date and the date being hovered as a potential end date
var leftCalendar = this.leftCalendar;
var rightCalendar = this.rightCalendar;
var startDate = this.startDate;
if (!this.endDate) {
this.container.find('.calendar td').each(function(index, el) {
this.container.find('.drp-calendar tbody td').each(function(index, el) {
//skip week numbers, only look at dates
if ($(el).hasClass('week')) return;
@ -1285,7 +1229,7 @@
var title = $(el).attr('data-title');
var row = title.substr(1, 1);
var col = title.substr(3, 1);
var cal = $(el).parents('.calendar');
var cal = $(el).parents('.drp-calendar');
var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col];
if ((dt.isAfter(startDate) && dt.isBefore(date)) || dt.isSame(date, 'day')) {
@ -1306,7 +1250,7 @@
var title = $(e.target).attr('data-title');
var row = title.substr(1, 1);
var col = title.substr(3, 1);
var cal = $(e.target).parents('.calendar');
var cal = $(e.target).parents('.drp-calendar');
var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];
//
@ -1376,17 +1320,19 @@
var customRange = true;
var i = 0;
for (var range in this.ranges) {
if (this.timePicker) {
if (this.startDate.isSame(this.ranges[range][0]) && this.endDate.isSame(this.ranges[range][1])) {
if (this.timePicker) {
var format = this.timePickerSeconds ? "YYYY-MM-DD HH:mm:ss" : "YYYY-MM-DD HH:mm";
//ignore times when comparing dates if time picker seconds is not enabled
if (this.startDate.format(format) == this.ranges[range][0].format(format) && this.endDate.format(format) == this.ranges[range][1].format(format)) {
customRange = false;
this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html();
this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key');
break;
}
} else {
//ignore times when comparing dates if time picker is not enabled
if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) {
customRange = false;
this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html();
this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key');
break;
}
}
@ -1394,7 +1340,7 @@
}
if (customRange) {
if (this.showCustomRangeLabel) {
this.chosenLabel = this.container.find('.ranges li:last').addClass('active').html();
this.chosenLabel = this.container.find('.ranges li:last').addClass('active').attr('data-range-key');
} else {
this.chosenLabel = null;
}
@ -1415,9 +1361,9 @@
},
monthOrYearChanged: function(e) {
var isLeft = $(e.target).closest('.calendar').hasClass('left'),
var isLeft = $(e.target).closest('.drp-calendar').hasClass('left'),
leftOrRight = isLeft ? 'left' : 'right',
cal = this.container.find('.calendar.'+leftOrRight);
cal = this.container.find('.drp-calendar.'+leftOrRight);
// Month must be Number for new moment versions
var month = parseInt(cal.find('.monthselect').val(), 10);
@ -1458,7 +1404,7 @@
timeChanged: function(e) {
var cal = $(e.target).closest('.calendar'),
var cal = $(e.target).closest('.drp-calendar'),
isLeft = cal.hasClass('left');
var hour = parseInt(cal.find('.hourselect').val(), 10);
@ -1504,72 +1450,9 @@
},
formInputsChanged: function(e) {
var isRight = $(e.target).closest('.calendar').hasClass('right');
var start = moment(this.container.find('input[name="daterangepicker_start"]').val(), this.locale.format);
var end = moment(this.container.find('input[name="daterangepicker_end"]').val(), this.locale.format);
if (start.isValid() && end.isValid()) {
if (isRight && end.isBefore(start))
start = end.clone();
this.setStartDate(start);
this.setEndDate(end);
if (isRight) {
this.container.find('input[name="daterangepicker_start"]').val(this.startDate.format(this.locale.format));
} else {
this.container.find('input[name="daterangepicker_end"]').val(this.endDate.format(this.locale.format));
}
}
this.updateView();
},
formInputsFocused: function(e) {
// Highlight the focused input
this.container.find('input[name="daterangepicker_start"], input[name="daterangepicker_end"]').removeClass('active');
$(e.target).addClass('active');
// Set the state such that if the user goes back to using a mouse,
// the calendars are aware we're selecting the end of the range, not
// the start. This allows someone to edit the end of a date range without
// re-selecting the beginning, by clicking on the end date input then
// using the calendar.
var isRight = $(e.target).closest('.calendar').hasClass('right');
if (isRight) {
this.endDate = null;
this.setStartDate(this.startDate.clone());
this.updateView();
}
},
formInputsBlurred: function(e) {
// this function has one purpose right now: if you tab from the first
// text input to the second in the UI, the endDate is nulled so that
// you can click another, but if you tab out without clicking anything
// or changing the input value, the old endDate should be retained
if (!this.endDate) {
var val = this.container.find('input[name="daterangepicker_end"]').val();
var end = moment(val, this.locale.format);
if (end.isValid()) {
this.setEndDate(end);
this.updateView();
}
}
},
elementChanged: function() {
if (!this.element.is('input')) return;
if (!this.element.val().length) return;
if (this.element.val().length < this.locale.format.length) return;
var dateString = this.element.val().split(this.locale.separator),
start = null,
@ -1597,15 +1480,25 @@
if ((e.keyCode === 9) || (e.keyCode === 13)) {
this.hide();
}
//hide on esc and prevent propagation
if (e.keyCode === 27) {
e.preventDefault();
e.stopPropagation();
this.hide();
}
},
updateElement: function() {
if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) {
this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));
this.element.trigger('change');
} else if (this.element.is('input') && this.autoUpdateInput) {
this.element.val(this.startDate.format(this.locale.format));
this.element.trigger('change');
if (this.element.is('input') && this.autoUpdateInput) {
var newValue = this.startDate.format(this.locale.format);
if (!this.singleDatePicker) {
newValue += this.locale.separator + this.endDate.format(this.locale.format);
}
if (newValue !== this.element.val()) {
this.element.val(newValue).trigger('change');
}
}
},
@ -1618,11 +1511,12 @@
};
$.fn.daterangepicker = function(options, callback) {
var implementOptions = $.extend(true, {}, $.fn.daterangepicker.defaultOptions, options);
this.each(function() {
var el = $(this);
if (el.data('daterangepicker'))
el.data('daterangepicker').remove();
el.data('daterangepicker', new DateRangePicker(el, options, callback));
el.data('daterangepicker', new DateRangePicker(el, implementOptions, callback));
});
return this;
};

View File

@ -1,611 +0,0 @@
//
// A stylesheet for use with Bootstrap 3.x
// @author: Dan Grossman http://www.dangrossman.info/
// @copyright: Copyright (c) 2012-2015 Dan Grossman. All rights reserved.
// @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php
// @website: https://www.improvely.com/
//
//
// VARIABLES
//
//
// Settings
// The class name to contain everything within.
$prefix-class: daterangepicker;
$arrow-size: 7px !default;
//
// Colors
$daterangepicker-color: inherit !default;
$daterangepicker-bg-color: #fff !default;
$daterangepicker-cell-color: $daterangepicker-color !default;
$daterangepicker-cell-border-color: transparent !default;
$daterangepicker-cell-bg-color: $daterangepicker-bg-color !default;
$daterangepicker-cell-hover-color: $daterangepicker-color !default;
$daterangepicker-cell-hover-border-color: $daterangepicker-cell-border-color !default;
$daterangepicker-cell-hover-bg-color: #eee !default;
$daterangepicker-in-range-color: #000 !default;
$daterangepicker-in-range-border-color: transparent !default;
$daterangepicker-in-range-bg-color: #ebf4f8 !default;
$daterangepicker-active-color: #fff !default;
$daterangepicker-active-bg-color: #357ebd !default;
$daterangepicker-active-border-color: transparent !default;
$daterangepicker-unselected-color: #999 !default;
$daterangepicker-unselected-border-color: transparent !default;
$daterangepicker-unselected-bg-color: #fff !default;
//
// daterangepicker
$daterangepicker-width: 278px !default;
$daterangepicker-padding: 4px !default;
$daterangepicker-z-index: 3000 !default;
$daterangepicker-border-size: 1px !default;
$daterangepicker-border-color: #ccc !default;
$daterangepicker-border-radius: 4px !default;
//
// Calendar
$daterangepicker-calendar-margin: $daterangepicker-padding !default;
$daterangepicker-calendar-bg-color: $daterangepicker-bg-color !default;
$daterangepicker-calendar-border-size: 1px !default;
$daterangepicker-calendar-border-color: $daterangepicker-bg-color !default;
$daterangepicker-calendar-border-radius: $daterangepicker-border-radius !default;
//
// Calendar Cells
$daterangepicker-cell-size: 20px !default;
$daterangepicker-cell-width: $daterangepicker-cell-size !default;
$daterangepicker-cell-height: $daterangepicker-cell-size !default;
$daterangepicker-cell-border-radius: $daterangepicker-calendar-border-radius !default;
$daterangepicker-cell-border-size: 1px !default;
//
// Dropdowns
$daterangepicker-dropdown-z-index: $daterangepicker-z-index + 1 !default;
//
// Controls
$daterangepicker-control-height: 30px !default;
$daterangepicker-control-line-height: $daterangepicker-control-height !default;
$daterangepicker-control-color: #555 !default;
$daterangepicker-control-border-size: 1px !default;
$daterangepicker-control-border-color: #ccc !default;
$daterangepicker-control-border-radius: 4px !default;
$daterangepicker-control-active-border-size: 1px !default;
$daterangepicker-control-active-border-color: #08c !default;
$daterangepicker-control-active-border-radius: $daterangepicker-control-border-radius !default;
$daterangepicker-control-disabled-color: #ccc !default;
//
// Ranges
$daterangepicker-ranges-color: #08c !default;
$daterangepicker-ranges-bg-color: #f5f5f5 !default;
$daterangepicker-ranges-border-size: 1px !default;
$daterangepicker-ranges-border-color: $daterangepicker-ranges-bg-color !default;
$daterangepicker-ranges-border-radius: $daterangepicker-border-radius !default;
$daterangepicker-ranges-hover-color: #fff !default;
$daterangepicker-ranges-hover-bg-color: $daterangepicker-ranges-color !default;
$daterangepicker-ranges-hover-border-size: $daterangepicker-ranges-border-size !default;
$daterangepicker-ranges-hover-border-color: $daterangepicker-ranges-hover-bg-color !default;
$daterangepicker-ranges-hover-border-radius: $daterangepicker-border-radius !default;
$daterangepicker-ranges-active-border-size: $daterangepicker-ranges-border-size !default;
$daterangepicker-ranges-active-border-color: $daterangepicker-ranges-bg-color !default;
$daterangepicker-ranges-active-border-radius: $daterangepicker-border-radius !default;
//
// STYLESHEETS
//
.#{$prefix-class} {
position: absolute;
color: $daterangepicker-color;
background: $daterangepicker-bg-color;
border-radius: $daterangepicker-border-radius;
width: $daterangepicker-width;
padding: $daterangepicker-padding;
margin-top: $daterangepicker-border-size;
// TODO: Should these be parameterized??
top: 100px;
left: 20px;
$arrow-prefix-size: $arrow-size;
$arrow-suffix-size: ($arrow-size - $daterangepicker-border-size);
&:before, &:after {
position: absolute;
display: inline-block;
border-bottom-color: rgba(0, 0, 0, 0.2);
content: '';
}
&:before {
top: -$arrow-prefix-size;
border-right: $arrow-prefix-size solid transparent;
border-left: $arrow-prefix-size solid transparent;
border-bottom: $arrow-prefix-size solid $daterangepicker-border-color;
}
&:after {
top: -$arrow-suffix-size;
border-right: $arrow-suffix-size solid transparent;
border-bottom: $arrow-suffix-size solid $daterangepicker-bg-color;
border-left: $arrow-suffix-size solid transparent;
}
&.opensleft {
&:before {
// TODO: Make this relative to prefix size.
right: $arrow-prefix-size + 2px;
}
&:after {
// TODO: Make this relative to suffix size.
right: $arrow-suffix-size + 4px;
}
}
&.openscenter {
&:before {
left: 0;
right: 0;
width: 0;
margin-left: auto;
margin-right: auto;
}
&:after {
left: 0;
right: 0;
width: 0;
margin-left: auto;
margin-right: auto;
}
}
&.opensright {
&:before {
// TODO: Make this relative to prefix size.
left: $arrow-prefix-size + 2px;
}
&:after {
// TODO: Make this relative to suffix size.
left: $arrow-suffix-size + 4px;
}
}
&.dropup {
margin-top: -5px;
// NOTE: Note sure why these are special-cased.
&:before {
top: initial;
bottom: -$arrow-prefix-size;
border-bottom: initial;
border-top: $arrow-prefix-size solid $daterangepicker-border-color;
}
&:after {
top: initial;
bottom:-$arrow-suffix-size;
border-bottom: initial;
border-top: $arrow-suffix-size solid $daterangepicker-bg-color;
}
}
&.dropdown-menu {
max-width: none;
z-index: $daterangepicker-dropdown-z-index;
}
&.single {
.ranges, .calendar {
float: none;
}
}
/* Calendars */
&.show-calendar {
.calendar {
display: block;
}
}
.calendar {
display: none;
max-width: $daterangepicker-width - ($daterangepicker-calendar-margin * 2);
margin: $daterangepicker-calendar-margin;
&.single {
.calendar-table {
border: none;
}
}
th, td {
white-space: nowrap;
text-align: center;
// TODO: Should this actually be hard-coded?
min-width: 32px;
}
}
.calendar-table {
border: $daterangepicker-calendar-border-size solid $daterangepicker-calendar-border-color;
padding: $daterangepicker-calendar-margin;
border-radius: $daterangepicker-calendar-border-radius;
background: $daterangepicker-calendar-bg-color;
}
table {
width: 100%;
margin: 0;
}
td, th {
text-align: center;
width: $daterangepicker-cell-width;
height: $daterangepicker-cell-height;
border-radius: $daterangepicker-cell-border-radius;
border: $daterangepicker-cell-border-size solid $daterangepicker-cell-border-color;
white-space: nowrap;
cursor: pointer;
&.available {
&:hover {
background-color: $daterangepicker-cell-hover-bg-color;
border-color: $daterangepicker-cell-hover-border-color;
color: $daterangepicker-cell-hover-color;
}
}
&.week {
font-size: 80%;
color: #ccc;
}
}
td {
&.off {
&, &.in-range, &.start-date, &.end-date {
background-color: $daterangepicker-unselected-bg-color;
border-color: $daterangepicker-unselected-border-color;
color: $daterangepicker-unselected-color;
}
}
//
// Date Range
&.in-range {
background-color: $daterangepicker-in-range-bg-color;
border-color: $daterangepicker-in-range-border-color;
color: $daterangepicker-in-range-color;
// TODO: Should this be static or should it be parameterized?
border-radius: 0;
}
&.start-date {
border-radius: $daterangepicker-cell-border-radius 0 0 $daterangepicker-cell-border-radius;
}
&.end-date {
border-radius: 0 $daterangepicker-cell-border-radius $daterangepicker-cell-border-radius 0;
}
&.start-date.end-date {
border-radius: $daterangepicker-cell-border-radius;
}
&.active {
&, &:hover {
background-color: $daterangepicker-active-bg-color;
border-color: $daterangepicker-active-border-color;
color: $daterangepicker-active-color;
}
}
}
th {
&.month {
width: auto;
}
}
//
// Disabled Controls
//
td, option {
&.disabled {
color: #999;
cursor: not-allowed;
text-decoration: line-through;
}
}
select {
&.monthselect, &.yearselect {
font-size: 12px;
padding: 1px;
height: auto;
margin: 0;
cursor: default;
}
&.monthselect {
margin-right: 2%;
width: 56%;
}
&.yearselect {
width: 40%;
}
&.hourselect, &.minuteselect, &.secondselect, &.ampmselect {
width: 50px;
margin-bottom: 0;
}
}
//
// Text Input Controls (above calendar)
//
.input-mini {
border: $daterangepicker-control-border-size solid $daterangepicker-control-border-color;
border-radius: $daterangepicker-control-border-radius;
color: $daterangepicker-control-color;
height: $daterangepicker-control-line-height;
line-height: $daterangepicker-control-height;
display: block;
vertical-align: middle;
// TODO: Should these all be static, too??
margin: 0 0 5px 0;
padding: 0 6px 0 28px;
width: 100%;
&.active {
border: $daterangepicker-control-active-border-size solid $daterangepicker-control-active-border-color;
border-radius: $daterangepicker-control-active-border-radius;
}
}
.daterangepicker_input {
position: relative;
i {
position: absolute;
// NOTE: These appear to be eyeballed to me...
left: 8px;
top: 8px;
}
}
&.rtl {
.input-mini {
padding-right: 28px;
padding-left: 6px;
}
.daterangepicker_input i {
left: auto;
right: 8px;
}
}
//
// Time Picker
//
.calendar-time {
text-align: center;
margin: 5px auto;
line-height: $daterangepicker-control-line-height;
position: relative;
padding-left: 28px;
select {
&.disabled {
color: $daterangepicker-control-disabled-color;
cursor: not-allowed;
}
}
}
}
//
// Predefined Ranges
//
.ranges {
font-size: 11px;
float: none;
margin: 4px;
text-align: left;
ul {
list-style: none;
margin: 0 auto;
padding: 0;
width: 100%;
}
li {
font-size: 13px;
background: $daterangepicker-ranges-bg-color;
border: $daterangepicker-ranges-border-size solid $daterangepicker-ranges-border-color;
border-radius: $daterangepicker-ranges-border-radius;
color: $daterangepicker-ranges-color;
padding: 3px 12px;
margin-bottom: 8px;
cursor: pointer;
&:hover {
background: $daterangepicker-ranges-hover-bg-color;
border: $daterangepicker-ranges-hover-border-size solid $daterangepicker-ranges-hover-border-color;
color: $daterangepicker-ranges-hover-color;
}
&.active {
background: $daterangepicker-ranges-hover-bg-color;
border: $daterangepicker-ranges-hover-border-size solid $daterangepicker-ranges-hover-border-color;
color: $daterangepicker-ranges-hover-color;
}
}
}
/* Larger Screen Styling */
@media (min-width: 564px) {
.#{$prefix-class} {
width: auto;
.ranges {
ul {
width: 160px;
}
}
&.single {
.ranges {
ul {
width: 100%;
}
}
.calendar.left {
clear: none;
}
&.ltr {
.ranges, .calendar {
float:left;
}
}
&.rtl {
.ranges, .calendar {
float:right;
}
}
}
&.ltr {
direction: ltr;
text-align: left;
.calendar{
&.left {
clear: left;
margin-right: 0;
.calendar-table {
border-right: none;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
}
&.right {
margin-left: 0;
.calendar-table {
border-left: none;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
}
}
.left .daterangepicker_input {
padding-right: 12px;
}
.calendar.left .calendar-table {
padding-right: 12px;
}
.ranges, .calendar {
float: left;
}
}
&.rtl {
direction: rtl;
text-align: right;
.calendar{
&.left {
clear: right;
margin-left: 0;
.calendar-table {
border-left: none;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
}
&.right {
margin-right: 0;
.calendar-table {
border-right: none;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
}
}
.left .daterangepicker_input {
padding-left: 12px;
}
.calendar.left .calendar-table {
padding-left: 12px;
}
.ranges, .calendar {
text-align: right;
float: right;
}
}
}
}
@media (min-width: 730px) {
.#{$prefix-class} {
.ranges {
width: auto;
}
&.ltr {
.ranges {
float: left;
}
}
&.rtl {
.ranges {
float: right;
}
}
.calendar.left {
clear: none !important;
}
}
}

View File

@ -3,11 +3,15 @@
<head>
<meta charset="UTF-8" />
<title>A date range picker for Bootstrap</title>
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet">
<!--<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" />-->
<link rel="stylesheet" type="text/css" media="all" href="daterangepicker.css" />
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<script type="text/javascript" src="moment.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"></script>
<script type="text/javascript" src="daterangepicker.js"></script>
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
@ -89,7 +93,7 @@
<div class="checkbox">
<label>
<input type="checkbox" id="timePicker"> timePicker
<input type="checkbox" id="timePicker" checked="checked"> timePicker
</label>
</div>
@ -118,7 +122,7 @@
<div class="checkbox">
<label>
<input type="checkbox" id="ranges"> ranges (with example predefined ranges)
<input type="checkbox" id="ranges" checked="checked"> ranges (with example predefined ranges)
</label>
</div>
@ -201,8 +205,9 @@
<div class="col-md-4 col-md-offset-2 demo">
<h4>Your Date Range Picker</h4>
<input type="text" id="config-demo" class="form-control">
<i class="glyphicon glyphicon-calendar fa fa-calendar"></i>
<center>
<input type="text" id="config-demo" class="form-control">
</center>
</div>
<div class="col-md-6">
@ -358,7 +363,7 @@
$('#config-text').val("$('#demo').daterangepicker(" + JSON.stringify(options, null, ' ') + ", function(start, end, label) {\n console.log(\"New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')\");\n});");
$('#config-demo').daterangepicker(options, function(start, end, label) { console.log('New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')'); });
$('#config-demo').daterangepicker(options, function(start, end, label) { console.log('New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')'); }).click();;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 211 KiB

After

Width:  |  Height:  |  Size: 157 KiB

View File

@ -1,17 +1,16 @@
Package.describe({
name: 'dangrossman:bootstrap-daterangepicker',
version: '2.1.24',
summary: 'Date range picker component for Bootstrap',
git: 'https://github.com/dangrossman/bootstrap-daterangepicker',
version: '3.0.3',
summary: 'Date range picker component',
git: 'https://github.com/dangrossman/daterangepicker',
documentation: 'README.md'
});
Package.onUse(function(api) {
api.versionsFrom('METEOR@0.9.0.1');
api.use('twbs:bootstrap@3.3.4', ["client"], {weak: true});
api.use('momentjs:moment@2.10.3', ["client"]);
api.use('jquery@1.11.3_2', ["client"]);
api.use('momentjs:moment@2.22.1', ["client"]);
api.use('jquery@3.3.1', ["client"]);
api.addFiles('daterangepicker.js', ["client"]);
api.addFiles('daterangepicker.css', ["client"]);

View File

@ -1,6 +1,6 @@
{
"name": "bootstrap-daterangepicker",
"version": "2.1.24",
"name": "daterangepicker",
"version": "3.0.3",
"description": "Date range picker component for Bootstrap",
"main": "daterangepicker.js",
"style": "daterangepicker.css",
@ -10,7 +10,7 @@
},
"repository": {
"type": "git",
"url": "https://github.com/dangrossman/bootstrap-daterangepicker.git"
"url": "https://github.com/dangrossman/daterangepicker.git"
},
"author": {
"name": "Dan Grossman",
@ -19,9 +19,9 @@
},
"license": "MIT",
"bugs": {
"url": "https://github.com/dangrossman/bootstrap-daterangepicker/issues"
"url": "https://github.com/dangrossman/daterangepicker/issues"
},
"homepage": "https://github.com/dangrossman/bootstrap-daterangepicker",
"homepage": "https://github.com/dangrossman/daterangepicker",
"dependencies": {
"jquery": ">=1.10",
"moment": "^2.9.0"

File diff suppressed because it is too large Load Diff

View File

@ -4,90 +4,131 @@ body {
position: relative;
margin: 0;
}
.container {
width: 95%;
max-width: 1260px;
.navbar .nav-item {
padding: 8px 0 8px 20px;
}
.navbar .nav-link {
font-weight: bold;
font-size: 14px;
padding: 0;
}
.navbar-expand-sm .navbar-nav .nav-link {
padding: 0;
}
.well {
background: #f5f5f5;
border-radius: 4px;
padding: 20px;
}
h1 {
font-size: 20px;
margin-bottom: 1em;
padding-bottom: 5px;
border-bottom: 1px dotted #08c;
}
h1:before {
content: '#';
color: #666;
position: relative;
padding-right: 5px;
}
h2 {
padding: 0;
margin: 20px 0 0 0;
font-size: 18px;
}
h2 a {
color: #444;
display: block;
background: #eee;
padding: 8px 12px;
margin-bottom: 0;
cursor: default;
text-decoration: none;
}
input.form-control {
font-size: 14px;
}
.collapsable {
border: 1px solid #eee;
padding: 12px;
display: block;
}
label {
font-size: 13px;
font-weight: bold;
}
.gist {
overflow: auto;
}
.gist .blob-wrapper.data {
max-height: 350px;
overflow: auto;
}
.list-group-item {
padding: 4px 0;
border: 0;
font-size: 16px;
}
.leftcol {
position: absolute;
top: 180px;
}
.rightcol {
max-width: 950px;
}
.container {
max-width: 1300px;
}
@media (min-width: 980px) {
.rightcol {
margin-left: 320px;
}
}
p, pre {
margin-bottom: 2em;
}
.main h2 {
font-weight: bold;
margin: 60px 0 20px 0;
}
.main h3 {
margin: 60px 0 20px 0;
}
.main h4 {
margin: 0 0 10px 0;
font-weight: bold;
}
ul.nobullets {
margin: 0;
padding: 0;
list-style-position: inside;
list-style: none;
}
li {
ul.nobullets li {
padding-bottom: 1em;
margin-bottom: 1em;
border-bottom: 1px dotted #ddd;
}
#sidebar {
top: 20px;
width: 300px;
}
#sidebar ul {
margin-bottom: 5px;
}
#sidebar li {
margin-bottom: 0;
padding-bottom: 0;
}
#sidebar li ul {
display: none;
}
#sidebar li.active ul {
display: block;
}
#sidebar li li {
padding: 4px 0;
}
input[type="text"] {
padding: 6px;
width: 100%;
border-radius: 4px;
}
.navbar {
text-align: left;
margin: 0;
border: 0;
}
.navbar-inverse {
background: #222;
}
.navbar .container {
padding: 0 20px;
}
.navbar-nav li a:link, .navbar-nav li a:visited {
font-weight: bold;
color: #fff;
font-size: 16px;
}
.navbar-nav li {
background: #fff;
}
.navbar-nav li a:hover {
opacity: 0.8;
}
.navbar-nav li {
padding: 0;
}
.navbar-inverse .navbar-text {
margin: 18px 0 0 0;
color: #eee;
}
#footer {
background: #222;
margin-top: 80px;
padding: 30px;
padding: 10px;
color: #fff;
text-align: center;
}
@ -96,32 +137,16 @@ input[type="text"] {
border-bottom: 1px dotted #fff;
}
#jumbo {
background: #f5f5f5 linear-gradient(to bottom,#eee 0,#f5f5f5 100%);
background: #c1deef;
color: #000;
padding: 30px 0;
margin-bottom: 30px;
padding: 20px 0;
margin-bottom: 20px;
}
#jumbo h1 {
font-size: 28px;
}
#jumbo .btn {
border-radius: 0;
}
#config .demo { position: relative; }
#config .demo i { position: absolute; bottom: 10px; right: 24px; top: auto; cursor: pointer; }
#rightcol {
margin-left: 330px;
}
#nav-spy {
float: left;
width: 300px;
}
@media (max-width: 980px) {
#rightcol {
margin-left: 0;
}
#nav-spy {
float: none;
position: relative;
}
font-size: 16px;
}

View File

@ -22,7 +22,7 @@ $(document).ready(function() {
startDate: moment()
});
updateConfig();
//updateConfig();
function updateConfig() {
var options = {};
@ -33,6 +33,12 @@ $(document).ready(function() {
if ($('#showDropdowns').is(':checked'))
options.showDropdowns = true;
if ($('#minYear').val().length && $('#minYear').val() != 1)
options.minYear = parseInt($('#minYear').val(), 10);
if ($('#maxYear').val().length && $('#maxYear').val() != 1)
options.maxYear = parseInt($('#maxYear').val(), 10);
if ($('#showWeekNumbers').is(':checked'))
options.showWeekNumbers = true;
@ -54,8 +60,8 @@ $(document).ready(function() {
if ($('#autoApply').is(':checked'))
options.autoApply = true;
if ($('#dateLimit').is(':checked'))
options.dateLimit = { days: 7 };
if ($('#maxSpan').is(':checked'))
options.maxSpan = { days: 7 };
if ($('#ranges').is(':checked')) {
options.ranges = {
@ -120,27 +126,54 @@ $(document).ready(function() {
if ($('#buttonClasses').val().length && $('#buttonClasses').val() != 'btn btn-sm')
options.buttonClasses = $('#buttonClasses').val();
if ($('#applyClass').val().length && $('#applyClass').val() != 'btn-success')
options.applyClass = $('#applyClass').val();
if ($('#applyButtonClasses').val().length && $('#applyButtonClasses').val() != 'btn-primary')
options.applyButtonClasses = $('#applyButtonClasses').val();
if ($('#cancelClass').val().length && $('#cancelClass').val() != 'btn-default')
options.cancelClass = $('#cancelClass').val();
$('#config-text').val("$('#demo').daterangepicker(" + JSON.stringify(options, null, ' ') + ", function(start, end, label) {\n console.log(\"New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')\");\n});");
if ($('#cancelButtonClasses').val().length && $('#cancelButtonClasses').val() != 'btn-default')
options.cancelClass = $('#cancelButtonClasses').val();
$('#config-demo').daterangepicker(options, function(start, end, label) { console.log('New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')'); });
if (typeof options.ranges !== 'undefined') {
options.ranges = {};
}
var option_text = JSON.stringify(options, null, ' ');
var replacement = "ranges: {\n"
+ " 'Today': [moment(), moment()],\n"
+ " 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n"
+ " 'Last 7 Days': [moment().subtract(6, 'days'), moment()],\n"
+ " 'Last 30 Days': [moment().subtract(29, 'days'), moment()],\n"
+ " 'This Month': [moment().startOf('month'), moment().endOf('month')],\n"
+ " 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]\n"
+ " }";
option_text = option_text.replace(new RegExp('"ranges"\: \{\}', 'g'), replacement);
$('#config-text').val("$('#demo').daterangepicker(" + option_text + ", function(start, end, label) {\n console.log('New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')');\n});");
}
if ($(window).width() > 980) {
$('#sidebar').affix({
offset: {
top: 300,
bottom: function () {
return (this.bottom = $('.footer').outerHeight(true))
}
}
});
}
$('body').scrollspy({ target: '#nav-spy', offset: 20 });
$(window).scroll(function (event) {
var scroll = $(window).scrollTop();
if (scroll > 180) {
$('.leftcol').css('position', 'fixed');
$('.leftcol').css('top', '10px');
} else {
$('.leftcol').css('position', 'absolute');
$('.leftcol').css('top', '180px');
}
});
var bg = new Trianglify({
x_colors: ["#e1f3fd", "#eeeeee", "#407dbf"],
y_colors: 'match_x',
width: document.body.clientWidth,
height: 150,
stroke_width: 0,
cell_size: 20
});
$('#jumbo').css('background-image', 'url(' + bg.png() + ')');
});

View File

@ -11,7 +11,7 @@
"framework",
"web"
],
"homepage": "http://getbootstrap.com",
"homepage": "https://getbootstrap.com/",
"license": "MIT",
"moduleType": "globals",
"main": [
@ -29,16 +29,16 @@
"test-infra"
],
"dependencies": {
"jquery": "1.9.1 - 2"
"jquery": "1.9.1 - 3"
},
"version": "3.3.6",
"_release": "3.3.6",
"version": "3.4.1",
"_release": "3.4.1",
"_resolution": {
"type": "version",
"tag": "v3.3.6",
"commit": "81df608a40bf0629a1dc08e584849bb1e43e0b7a"
"tag": "v3.4.1",
"commit": "68b0d231a13201eb14acd3dc84e51543d16e5f7e"
},
"_source": "https://github.com/twbs/bootstrap.git",
"_target": "^3.3.6",
"_target": "^3.4.1",
"_originalSource": "bootstrap"
}

View File

@ -1,5 +1,5 @@
Bootstrap uses [GitHub's Releases feature](https://github.com/blog/1547-release-your-software) for its changelogs.
Bootstrap uses [GitHub's Releases feature](https://blog.github.com/2013-07-02-release-your-software/) for its changelogs.
See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap.
Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release.
Release announcement posts on [the official Bootstrap blog](https://blog.getbootstrap.com/) contain summaries of the most noteworthy changes made in each release.

8
vendors/bootstrap/Gemfile vendored Normal file
View File

@ -0,0 +1,8 @@
source 'https://rubygems.org'
group :development, :test do
gem 'jekyll', '~> 3.8.5'
gem 'jekyll-redirect-from', '~> 0.14.0'
gem 'jekyll-sitemap', '~> 1.2.0'
gem 'wdm', '~> 0.1.1', :install_if => Gem.win_platform?
end

74
vendors/bootstrap/Gemfile.lock vendored Normal file
View File

@ -0,0 +1,74 @@
GEM
remote: https://rubygems.org/
specs:
addressable (2.6.0)
public_suffix (>= 2.0.2, < 4.0)
colorator (1.1.0)
concurrent-ruby (1.1.4)
em-websocket (0.5.1)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
eventmachine (1.2.7)
eventmachine (1.2.7-x64-mingw32)
ffi (1.10.0)
ffi (1.10.0-x64-mingw32)
forwardable-extended (2.6.0)
http_parser.rb (0.6.0)
i18n (0.9.5)
concurrent-ruby (~> 1.0)
jekyll (3.8.5)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 0.7)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 2.0)
kramdown (~> 1.14)
liquid (~> 4.0)
mercenary (~> 0.3.3)
pathutil (~> 0.9)
rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
jekyll-redirect-from (0.14.0)
jekyll (~> 3.3)
jekyll-sass-converter (1.5.2)
sass (~> 3.4)
jekyll-sitemap (1.2.0)
jekyll (~> 3.3)
jekyll-watch (2.1.2)
listen (~> 3.0)
kramdown (1.17.0)
liquid (4.0.1)
listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
ruby_dep (~> 1.2)
mercenary (0.3.6)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (3.0.3)
rb-fsevent (0.10.3)
rb-inotify (0.10.0)
ffi (~> 1.0)
rouge (3.3.0)
ruby_dep (1.5.0)
safe_yaml (1.0.4)
sass (3.7.3)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
wdm (0.1.1)
PLATFORMS
ruby
x64-mingw32
DEPENDENCIES
jekyll (~> 3.8.5)
jekyll-redirect-from (~> 0.14.0)
jekyll-sitemap (~> 1.2.0)
wdm (~> 0.1.1)
BUNDLED WITH
1.17.3

View File

@ -1,7 +1,7 @@
/*!
* Bootstrap's Gruntfile
* http://getbootstrap.com
* Copyright 2013-2015 Twitter, Inc.
* https://getbootstrap.com/
* Copyright 2013-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
@ -17,7 +17,6 @@ module.exports = function (grunt) {
var fs = require('fs');
var path = require('path');
var npmShrinkwrap = require('npm-shrinkwrap');
var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js');
var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js');
var getLessVarsData = function () {
@ -105,7 +104,7 @@ module.exports = function (grunt) {
banner: '<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>',
stripBanners: false
},
bootstrap: {
core: {
src: [
'js/transition.js',
'js/alert.js',
@ -126,78 +125,90 @@ module.exports = function (grunt) {
uglify: {
options: {
compress: {
warnings: false
},
compress: true,
mangle: true,
preserveComments: 'some'
ie8: true,
output: {
comments: /^!|@preserve|@license|@cc_on/i
}
},
core: {
src: '<%= concat.bootstrap.dest %>',
src: '<%= concat.core.dest %>',
dest: 'dist/js/<%= pkg.name %>.min.js'
},
customize: {
src: configBridge.paths.customizerJs,
dest: 'docs/assets/js/customize.min.js'
},
docsJs: {
docs: {
src: configBridge.paths.docsJs,
dest: 'docs/assets/js/docs.min.js'
}
},
qunit: {
options: {
inject: 'js/tests/unit/phantom.js'
},
files: 'js/tests/index.html'
},
less: {
compileCore: {
options: {
ieCompat: true,
strictMath: true,
sourceMap: true,
outputSourceFiles: true
},
core: {
options: {
strictMath: true,
sourceMap: true,
outputSourceFiles: true,
sourceMapURL: '<%= pkg.name %>.css.map',
sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map'
},
src: 'less/bootstrap.less',
dest: 'dist/css/<%= pkg.name %>.css'
},
compileTheme: {
theme: {
options: {
strictMath: true,
sourceMap: true,
outputSourceFiles: true,
sourceMapURL: '<%= pkg.name %>-theme.css.map',
sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map'
},
src: 'less/theme.less',
dest: 'dist/css/<%= pkg.name %>-theme.css'
},
docs: {
options: {
sourceMapURL: 'docs.css.map',
sourceMapFilename: 'docs/assets/css/docs.css.map'
},
src: 'docs/assets/less/docs.less',
dest: 'docs/assets/css/docs.css'
},
docsIe: {
options: {
sourceMap: false
},
src: 'docs/assets/less/ie10-viewport-bug-workaround.less',
dest: 'docs/assets/css/ie10-viewport-bug-workaround.css'
}
},
autoprefixer: {
postcss: {
options: {
browsers: configBridge.config.autoprefixerBrowsers
map: {
inline: false,
sourcesContent: true
},
processors: [
require('autoprefixer')(configBridge.config.autoprefixer)
]
},
core: {
options: {
map: true
},
src: 'dist/css/<%= pkg.name %>.css'
},
theme: {
options: {
map: true
},
src: 'dist/css/<%= pkg.name %>-theme.css'
},
docs: {
src: ['docs/assets/css/src/docs.css']
src: 'docs/assets/css/docs.css'
},
examples: {
options: {
map: false
},
expand: true,
cwd: 'docs/examples/',
src: ['**/*.css'],
@ -205,79 +216,51 @@ module.exports = function (grunt) {
}
},
csslint: {
stylelint: {
options: {
csslintrc: 'less/.csslintrc'
configFile: 'grunt/.stylelintrc',
reportNeedlessDisables: false
},
dist: [
'dist/css/bootstrap.css',
'dist/css/bootstrap-theme.css'
'less/**/*.less'
],
docs: [
'docs/assets/less/**/*.less'
],
examples: [
'docs/examples/**/*.css'
],
docs: {
options: {
ids: false,
'overqualified-elements': false
},
src: 'docs/assets/css/src/docs.css'
}
]
},
cssmin: {
options: {
// TODO: disable `zeroUnits` optimization once clean-css 3.2 is released
// and then simplify the fix for https://github.com/twbs/bootstrap/issues/14837 accordingly
compatibility: 'ie8',
keepSpecialComments: '*',
sourceMap: true,
advanced: false
sourceMapInlineSources: true,
level: {
1: {
specialComments: 'all'
}
}
},
minifyCore: {
core: {
src: 'dist/css/<%= pkg.name %>.css',
dest: 'dist/css/<%= pkg.name %>.min.css'
},
minifyTheme: {
theme: {
src: 'dist/css/<%= pkg.name %>-theme.css',
dest: 'dist/css/<%= pkg.name %>-theme.min.css'
},
docs: {
src: [
'docs/assets/css/ie10-viewport-bug-workaround.css',
'docs/assets/css/src/pygments-manni.css',
'docs/assets/css/src/docs.css'
],
src: 'docs/assets/css/docs.css',
dest: 'docs/assets/css/docs.min.css'
}
},
csscomb: {
options: {
config: 'less/.csscomb.json'
},
dist: {
expand: true,
cwd: 'dist/css/',
src: ['*.css', '!*.min.css'],
dest: 'dist/css/'
},
examples: {
expand: true,
cwd: 'docs/examples/',
src: '**/*.css',
dest: 'docs/examples/'
},
docs: {
src: 'docs/assets/css/src/docs.css',
dest: 'docs/assets/css/src/docs.css'
}
},
copy: {
fonts: {
expand: true,
src: 'fonts/*',
src: 'fonts/**',
dest: 'dist/'
},
docs: {
@ -301,7 +284,9 @@ module.exports = function (grunt) {
jekyll: {
options: {
config: '_config.yml'
bundleExec: true,
config: '_config.yml',
incremental: false
},
docs: {},
github: {
@ -311,37 +296,17 @@ module.exports = function (grunt) {
}
},
htmlmin: {
dist: {
options: {
collapseWhitespace: true,
conservativeCollapse: true,
minifyCSS: true,
minifyJS: true,
removeAttributeQuotes: true,
removeComments: true
},
expand: true,
cwd: '_gh_pages',
dest: '_gh_pages',
src: [
'**/*.html',
'!examples/**/*.html'
]
}
},
jade: {
pug: {
options: {
pretty: true,
data: getLessVarsData
},
customizerVars: {
src: 'docs/_jade/customizer-variables.jade',
src: 'docs/_pug/customizer-variables.pug',
dest: 'docs/_includes/customizer-variables.html'
},
customizerNav: {
src: 'docs/_jade/customizer-nav.jade',
src: 'docs/_pug/customizer-nav.pug',
dest: 'docs/_includes/nav/customize.html'
}
},
@ -349,86 +314,40 @@ module.exports = function (grunt) {
htmllint: {
options: {
ignore: [
'Attribute "autocomplete" not allowed on element "button" at this point.',
'Attribute "autocomplete" is only allowed when the input type is "color", "date", "datetime", "datetime-local", "email", "month", "number", "password", "range", "search", "tel", "text", "time", "url", or "week".',
'Element "img" is missing required attribute "src".'
]
],
noLangDetect: true
},
src: '_gh_pages/**/*.html'
src: ['_gh_pages/**/*.html', 'js/tests/**/*.html']
},
watch: {
src: {
files: '<%= jshint.core.src %>',
tasks: ['jshint:core', 'qunit', 'concat']
tasks: ['jshint:core', 'exec:karma', 'concat']
},
test: {
files: '<%= jshint.test.src %>',
tasks: ['jshint:test', 'qunit']
tasks: ['jshint:test', 'exec:karma']
},
less: {
files: 'less/**/*.less',
tasks: 'less'
}
},
sed: {
versionNumber: {
pattern: (function () {
var old = grunt.option('oldver');
return old ? RegExp.quote(old) : old;
})(),
replacement: grunt.option('newver'),
exclude: [
'dist/fonts',
'docs/assets',
'fonts',
'js/tests/vendor',
'node_modules',
'test-infra'
],
recursive: true
}
},
'saucelabs-qunit': {
all: {
options: {
build: process.env.TRAVIS_JOB_ID,
throttled: 10,
maxRetries: 3,
maxPollRetries: 4,
urls: ['http://127.0.0.1:3000/js/tests/index.html?hidepassed'],
browsers: grunt.file.readYAML('grunt/sauce_browsers.yml')
}
tasks: ['less', 'copy']
},
docs: {
files: 'docs/assets/less/**/*.less',
tasks: ['less']
}
},
exec: {
npmUpdate: {
command: 'npm update'
}
},
compress: {
main: {
options: {
archive: 'bootstrap-<%= pkg.version %>-dist.zip',
mode: 'zip',
level: 9,
pretty: true
},
files: [
{
expand: true,
cwd: 'dist/',
src: ['**'],
dest: 'bootstrap-<%= pkg.version %>-dist'
}
]
browserstack: {
command: 'cross-env BROWSER=true karma start grunt/karma.conf.js'
},
karma: {
command: 'karma start grunt/karma.conf.js'
}
}
});
@ -443,16 +362,14 @@ module.exports = function (grunt) {
return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset;
};
var isUndefOrNonZero = function (val) {
return val === undefined || val !== '0';
return typeof val === 'undefined' || val !== '0';
};
// Test task.
var testSubtasks = [];
// Skip core tests if running a different subset of the test suite
if (runSubset('core') &&
// Skip core tests if this is a Savage build
process.env.TRAVIS_REPO_SLUG !== 'twbs-savage/bootstrap') {
testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'csslint:dist', 'test-js', 'docs']);
if (runSubset('core')) {
testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'stylelint:dist', 'test-js', 'docs']);
}
// Skip HTML validation if running a different subset of the test suite
if (runSubset('validate-html') &&
@ -460,24 +377,23 @@ module.exports = function (grunt) {
isUndefOrNonZero(process.env.TWBS_DO_VALIDATOR)) {
testSubtasks.push('validate-html');
}
// Only run Sauce Labs tests if there's a Sauce access key
if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' &&
// Skip Sauce if running a different subset of the test suite
runSubset('sauce-js-unit') &&
// Skip Sauce on Travis when [skip sauce] is in the commit message
isUndefOrNonZero(process.env.TWBS_DO_SAUCE)) {
testSubtasks.push('connect');
testSubtasks.push('saucelabs-qunit');
// Only run BrowserStack tests if there's a BrowserStack access key
if (typeof process.env.BROWSER_STACK_USERNAME !== 'undefined' &&
// Skip BrowserStack if running a different subset of the test suite
runSubset('browserstack') &&
// Skip BrowserStack on Travis when [skip browserstack] is in the commit message
isUndefOrNonZero(process.env.TWBS_DO_BROWSERSTACK)) {
testSubtasks.push('exec:browserstack');
}
grunt.registerTask('test', testSubtasks);
grunt.registerTask('test-js', ['jshint:core', 'jshint:test', 'jshint:grunt', 'jscs:core', 'jscs:test', 'jscs:grunt', 'qunit']);
grunt.registerTask('test-js', ['jshint:core', 'jshint:test', 'jshint:grunt', 'jscs:core', 'jscs:test', 'jscs:grunt', 'exec:karma']);
// JS distribution task.
grunt.registerTask('dist-js', ['concat', 'uglify:core', 'commonjs']);
// CSS distribution task.
grunt.registerTask('less-compile', ['less:compileCore', 'less:compileTheme']);
grunt.registerTask('dist-css', ['less-compile', 'autoprefixer:core', 'autoprefixer:theme', 'csscomb:dist', 'cssmin:minifyCore', 'cssmin:minifyTheme']);
grunt.registerTask('dist-css', ['less:core', 'less:theme', 'postcss:core', 'postcss:theme', 'cssmin:core', 'cssmin:theme']);
// Full distribution task.
grunt.registerTask('dist', ['clean:dist', 'dist-css', 'copy:fonts', 'dist-js']);
@ -485,49 +401,30 @@ module.exports = function (grunt) {
// Default task.
grunt.registerTask('default', ['clean:dist', 'copy:fonts', 'test']);
// Version numbering task.
// grunt change-version-number --oldver=A.B.C --newver=X.Y.Z
// This can be overzealous, so its changes should always be manually reviewed!
grunt.registerTask('change-version-number', 'sed');
grunt.registerTask('build-glyphicons-data', function () { generateGlyphiconsData.call(this, grunt); });
grunt.registerTask('build-glyphicons-data', function () {
generateGlyphiconsData.call(this, grunt);
});
// task for building customizer
grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']);
grunt.registerTask('build-customizer-html', 'jade');
grunt.registerTask('build-customizer-html', 'pug');
grunt.registerTask('build-raw-files', 'Add scripts/less files to customizer.', function () {
var banner = grunt.template.process('<%= banner %>');
generateRawFiles(grunt, banner);
});
grunt.registerTask('commonjs', 'Generate CommonJS entrypoint module in dist dir.', function () {
var srcFiles = grunt.config.get('concat.bootstrap.src');
var srcFiles = grunt.config.get('concat.core.src');
var destFilepath = 'dist/js/npm.js';
generateCommonJSModule(grunt, srcFiles, destFilepath);
});
// Docs task.
grunt.registerTask('docs-css', ['autoprefixer:docs', 'autoprefixer:examples', 'csscomb:docs', 'csscomb:examples', 'cssmin:docs']);
grunt.registerTask('lint-docs-css', ['csslint:docs', 'csslint:examples']);
grunt.registerTask('docs-js', ['uglify:docsJs', 'uglify:customize']);
grunt.registerTask('docs-css', ['less:docs', 'less:docsIe', 'postcss:docs', 'postcss:examples', 'cssmin:docs']);
grunt.registerTask('lint-docs-css', ['stylelint:docs', 'stylelint:examples']);
grunt.registerTask('docs-js', ['uglify:docs', 'uglify:customize']);
grunt.registerTask('lint-docs-js', ['jshint:assets', 'jscs:assets']);
grunt.registerTask('docs', ['docs-css', 'lint-docs-css', 'docs-js', 'lint-docs-js', 'clean:docs', 'copy:docs', 'build-glyphicons-data', 'build-customizer']);
grunt.registerTask('prep-release', ['dist', 'docs', 'jekyll:github', 'htmlmin', 'compress']);
// Task for updating the cached npm packages used by the Travis build (which are controlled by test-infra/npm-shrinkwrap.json).
// This task should be run and the updated file should be committed whenever Bootstrap's dependencies change.
grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', '_update-shrinkwrap']);
grunt.registerTask('_update-shrinkwrap', function () {
var done = this.async();
npmShrinkwrap({ dev: true, dirname: __dirname }, function (err) {
if (err) {
grunt.fail.warn(err);
}
var dest = 'test-infra/npm-shrinkwrap.json';
fs.renameSync('npm-shrinkwrap.json', dest);
grunt.log.writeln('File ' + dest.cyan + ' updated.');
done();
});
});
grunt.registerTask('prep-release', ['dist', 'docs', 'jekyll:github']);
};

22
vendors/bootstrap/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,22 @@
Before opening an issue:
- [Search for duplicate or closed issues](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue)
- [Validate](https://validator.w3.org/nu/) and [lint](https://github.com/twbs/bootlint#in-the-browser) any HTML to avoid common problems
- Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs
- Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md)
When asking general "how to" questions:
- Please do not open an issue here
- Instead, ask for help on [StackOverflow, IRC, or Slack](https://github.com/twbs/bootstrap/blob/master/README.md#community)
When reporting a bug, include:
- Operating system and version (Windows, Mac OS X, Android, iOS, Win10 Mobile)
- Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser)
- Reduced test cases and potential fixes using [JS Bin](https://jsbin.com/)
When suggesting a feature, include:
- As much detail as possible for what we should add and why it's important to Bootstrap
- Relevant links to prior art, screenshots, or live demos whenever possible

View File

@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2011-2015 Twitter, Inc
Copyright (c) 2011-2019 Twitter, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,16 +1,15 @@
# [Bootstrap](http://getbootstrap.com)
# [Bootstrap](https://getbootstrap.com/)
[![Slack](https://bootstrap-slack.herokuapp.com/badge.svg)](https://bootstrap-slack.herokuapp.com)
[![Slack](https://bootstrap-slack.herokuapp.com/badge.svg)](https://bootstrap-slack.herokuapp.com/)
![Bower version](https://img.shields.io/bower/v/bootstrap.svg)
[![npm version](https://img.shields.io/npm/v/bootstrap.svg)](https://www.npmjs.com/package/bootstrap)
[![Build Status](https://img.shields.io/travis/twbs/bootstrap/master.svg)](https://travis-ci.org/twbs/bootstrap)
[![devDependency Status](https://img.shields.io/david/dev/twbs/bootstrap.svg)](https://david-dm.org/twbs/bootstrap#info=devDependencies)
[![NuGet](https://img.shields.io/nuget/v/bootstrap.svg)](https://www.nuget.org/packages/Bootstrap)
[![Selenium Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](https://saucelabs.com/u/bootstrap)
Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](https://twitter.com/mdo) and [Jacob Thornton](https://twitter.com/fat), and maintained by the [core team](https://github.com/orgs/twbs/people) with the massive support and involvement of the community.
To get started, check out <http://getbootstrap.com>!
To get started, check out <https://getbootstrap.com/>!
## Table of contents
@ -22,6 +21,7 @@ To get started, check out <http://getbootstrap.com>!
* [Community](#community)
* [Versioning](#versioning)
* [Creators](#creators)
* [Thanks](#thanks)
* [Copyright and license](#copyright-and-license)
@ -29,14 +29,14 @@ To get started, check out <http://getbootstrap.com>!
Several quick start options are available:
* [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.3.6.zip).
* [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.4.1.zip).
* Clone the repo: `git clone https://github.com/twbs/bootstrap.git`.
* Install with [Bower](http://bower.io): `bower install bootstrap`.
* Install with [npm](https://www.npmjs.com): `npm install bootstrap`.
* Install with [Meteor](https://www.meteor.com): `meteor add twbs:bootstrap`.
* Install with [Composer](https://getcomposer.org): `composer require twbs/bootstrap`.
* Install with [Bower](https://bower.io/): `bower install bootstrap`.
* Install with [npm](https://www.npmjs.com/): `npm install bootstrap@3`.
* Install with [Meteor](https://www.meteor.com/): `meteor add twbs:bootstrap`.
* Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap`.
Read the [Getting started page](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more.
Read the [Getting started page](https://getbootstrap.com/docs/3.4/getting-started/) for information on the framework contents, templates and examples, and more.
### What's included
@ -64,31 +64,32 @@ bootstrap/
└── glyphicons-halflings-regular.woff2
```
We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). CSS [source maps](https://developer.chrome.com/devtools/docs/css-preprocessors) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. Fonts from Glyphicons are included, as is the optional Bootstrap theme.
We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). CSS [source maps](https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. Fonts from Glyphicons are included, as is the optional Bootstrap theme.
## Bugs and feature requests
Have a bug or a feature request? Please first read the [issue guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/twbs/bootstrap/issues/new).
Note that **feature requests must target [Bootstrap v4](https://github.com/twbs/bootstrap/tree/v4-dev),** because Bootstrap v3 is now in maintenance mode and is closed off to new features. This is so that we can focus our efforts on Bootstrap v4.
## Documentation
Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](http://jekyllrb.com) and publicly hosted on GitHub Pages at <http://getbootstrap.com>. The docs may also be run locally.
Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](https://jekyllrb.com/) and publicly hosted on GitHub Pages at <https://getbootstrap.com/>. The docs may also be run locally.
### Running documentation locally
1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) (requires v3.0.x).
**Note for Windows users:** Read [this unofficial guide](http://jekyll-windows.juthilo.com/) to get Jekyll up and running without problems.
2. Install the Ruby-based syntax highlighter, [Rouge](https://github.com/jneen/rouge), with `gem install rouge`.
3. From the root `/bootstrap` directory, run `jekyll serve` in the command line.
1. If necessary, [install Jekyll](https://jekyllrb.com/docs/installation/) and other Ruby dependencies with `bundle install`.
**Note for Windows users:** Read [this guide](https://jekyllrb.com/docs/installation/windows/) to get Jekyll up and running without problems.
2. From the root `/bootstrap` directory, run `bundle exec jekyll serve` in the command line.
4. Open `http://localhost:9001` in your browser, and voilà.
Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com/docs/home/).
Learn more about using Jekyll by reading its [documentation](https://jekyllrb.com/docs/).
### Documentation for previous releases
Documentation for v2.3.2 has been made available for the time being at <http://getbootstrap.com/2.3.2/> while folks transition to Bootstrap 3.
Documentation for v2.3.2 has been made available for the time being at <https://getbootstrap.com/2.3.2/> while folks transition to Bootstrap 3.
[Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download.
@ -99,7 +100,9 @@ Please read through our [contributing guidelines](https://github.com/twbs/bootst
Moreover, if your pull request contains JavaScript patches or features, you must include [relevant unit tests](https://github.com/twbs/bootstrap/tree/master/js/tests). All HTML and CSS should conform to the [Code Guide](https://github.com/mdo/code-guide), maintained by [Mark Otto](https://github.com/mdo).
Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at <http://editorconfig.org>.
**Bootstrap v3 is now closed off to new features.** It has gone into maintenance mode so that we can focus our efforts on [Bootstrap v4](https://github.com/twbs/bootstrap/tree/v4-dev), the future of the framework. Pull requests which add new features (rather than fix bugs) should target [Bootstrap v4 (the `v4-dev` git branch)](https://github.com/twbs/bootstrap/tree/v4-dev) instead.
Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at <https://editorconfig.org/>.
## Community
@ -107,18 +110,25 @@ Editor preferences are available in the [editor config](https://github.com/twbs/
Get updates on Bootstrap's development and chat with the project maintainers and community members.
* Follow [@getbootstrap on Twitter](https://twitter.com/getbootstrap).
* Read and subscribe to [The Official Bootstrap Blog](http://blog.getbootstrap.com).
* Join [the official Slack room](https://bootstrap-slack.herokuapp.com).
* Read and subscribe to [The Official Bootstrap Blog](https://blog.getbootstrap.com/).
* Join [the official Slack room](https://bootstrap-slack.herokuapp.com/).
* Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel.
* Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](https://stackoverflow.com/questions/tagged/twitter-bootstrap-3)).
* Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/browse/keyword/bootstrap) or similar delivery mechanisms for maximum discoverability.
* Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/search?q=keywords:bootstrap) or similar delivery mechanisms for maximum discoverability.
## Versioning
For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](http://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible.
For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](https://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible.
See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release.
See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. Release announcement posts on [the official Bootstrap blog](https://blog.getbootstrap.com/) contain summaries of the most noteworthy changes made in each release.
## Thanks
<img src="https://live.browserstack.com/images/opensource/browserstack-logo.svg" alt="BrowserStack Logo" width="490" height="106">
Thanks to [BrowserStack](https://www.browserstack.com/) for providing the infrastructure that allows us to test in real browsers!
## Creators
@ -136,4 +146,4 @@ See [the Releases section of our GitHub project](https://github.com/twbs/bootstr
## Copyright and license
Code and documentation copyright 2011-2015 Twitter, Inc. Code released under [the MIT license](https://github.com/twbs/bootstrap/blob/master/LICENSE). Docs released under [Creative Commons](https://github.com/twbs/bootstrap/blob/master/docs/LICENSE).
Code and documentation copyright 2011-2019 Twitter, Inc. Code released under [the MIT license](https://github.com/twbs/bootstrap/blob/master/LICENSE). Docs released under [Creative Commons](https://github.com/twbs/bootstrap/blob/master/docs/LICENSE).

View File

@ -11,7 +11,7 @@
"framework",
"web"
],
"homepage": "http://getbootstrap.com",
"homepage": "https://getbootstrap.com/",
"license": "MIT",
"moduleType": "globals",
"main": [
@ -29,6 +29,6 @@
"test-infra"
],
"dependencies": {
"jquery": "1.9.1 - 2"
"jquery": "1.9.1 - 3"
}
}

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Bootstrap v3.4.1 (https://getbootstrap.com/)
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
.btn-default,
@ -9,9 +9,9 @@
.btn-info,
.btn-warning,
.btn-danger {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
}
.btn-default:active,
.btn-primary:active,
@ -25,8 +25,8 @@
.btn-info.active,
.btn-warning.active,
.btn-danger.active {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn-default.disabled,
.btn-primary.disabled,
@ -47,7 +47,7 @@ fieldset[disabled] .btn-info,
fieldset[disabled] .btn-warning,
fieldset[disabled] .btn-danger {
-webkit-box-shadow: none;
box-shadow: none;
box-shadow: none;
}
.btn-default .badge,
.btn-primary .badge,
@ -62,15 +62,15 @@ fieldset[disabled] .btn-danger {
background-image: none;
}
.btn-default {
text-shadow: 0 1px 0 #fff;
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #dbdbdb;
text-shadow: 0 1px 0 #fff;
border-color: #ccc;
}
.btn-default:hover,
@ -106,9 +106,9 @@ fieldset[disabled] .btn-default.active {
}
.btn-primary {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
@ -147,9 +147,9 @@ fieldset[disabled] .btn-primary.active {
}
.btn-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
@ -188,9 +188,9 @@ fieldset[disabled] .btn-success.active {
}
.btn-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
@ -229,9 +229,9 @@ fieldset[disabled] .btn-info.active {
}
.btn-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
@ -270,9 +270,9 @@ fieldset[disabled] .btn-warning.active {
}
.btn-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
@ -311,81 +311,81 @@ fieldset[disabled] .btn-danger.active {
}
.thumbnail,
.img-thumbnail {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
background-color: #e8e8e8;
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
background-color: #e8e8e8;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
background-color: #2e6da4;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
background-color: #2e6da4;
}
.navbar-default {
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8));
background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
}
.navbar-brand,
.navbar-nav > li > a {
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
}
.navbar-inverse {
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
border-radius: 4px;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
}
.navbar-inverse .navbar-brand,
.navbar-inverse .navbar-nav > li > a {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.navbar-static-top,
.navbar-fixed-top,
@ -398,120 +398,120 @@ fieldset[disabled] .btn-danger.active {
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
}
.alert {
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
}
.alert-success {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
background-repeat: repeat-x;
border-color: #b2dba1;
}
.alert-info {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
background-repeat: repeat-x;
border-color: #9acfea;
}
.alert-warning {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
background-repeat: repeat-x;
border-color: #f5e79e;
}
.alert-danger {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
background-repeat: repeat-x;
border-color: #dca7a7;
}
.progress {
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-striped {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.list-group {
border-radius: 4px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
text-shadow: 0 -1px 0 #286090;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
background-repeat: repeat-x;
border-color: #2b669a;
@ -522,66 +522,66 @@ fieldset[disabled] .btn-danger.active {
text-shadow: none;
}
.panel {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
}
.panel-default > .panel-heading {
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.panel-primary > .panel-heading {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.panel-success > .panel-heading {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
background-repeat: repeat-x;
}
.panel-info > .panel-heading {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
background-repeat: repeat-x;
}
.panel-warning > .panel-heading {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
background-repeat: repeat-x;
}
.panel-danger > .panel-heading {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
background-repeat: repeat-x;
}
.well {
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
border-color: #dcdcdc;
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
}
/*# sourceMappingURL=bootstrap-theme.css.map */
/*# sourceMappingURL=bootstrap-theme.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap v3.3.6 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Bootstrap v3.4.1 (https://getbootstrap.com/)
* Copyright 2011-2019 Twitter, Inc.
* Licensed under the MIT license
*/
@ -11,16 +11,16 @@ if (typeof jQuery === 'undefined') {
+function ($) {
'use strict';
var version = $.fn.jquery.split(' ')[0].split('.')
if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 2)) {
throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3')
if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
}
}(jQuery);
/* ========================================================================
* Bootstrap: transition.js v3.3.6
* http://getbootstrap.com/javascript/#transitions
* Bootstrap: transition.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#transitions
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -28,7 +28,7 @@ if (typeof jQuery === 'undefined') {
+function ($) {
'use strict';
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
// CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)
// ============================================================
function transitionEnd() {
@ -50,7 +50,7 @@ if (typeof jQuery === 'undefined') {
return false // explicit for ie8 ( ._.)
}
// http://blog.alexmaccaw.com/css-transitions
// https://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) {
var called = false
var $el = this
@ -77,10 +77,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
* Bootstrap: alert.js v3.3.6
* http://getbootstrap.com/javascript/#alerts
* Bootstrap: alert.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#alerts
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -96,7 +96,7 @@ if (typeof jQuery === 'undefined') {
$(el).on('click', dismiss, this.close)
}
Alert.VERSION = '3.3.6'
Alert.VERSION = '3.4.1'
Alert.TRANSITION_DURATION = 150
@ -109,7 +109,8 @@ if (typeof jQuery === 'undefined') {
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
}
var $parent = $(selector)
selector = selector === '#' ? [] : selector
var $parent = $(document).find(selector)
if (e) e.preventDefault()
@ -172,10 +173,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
* Bootstrap: button.js v3.3.6
* http://getbootstrap.com/javascript/#buttons
* Bootstrap: button.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#buttons
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -192,7 +193,7 @@ if (typeof jQuery === 'undefined') {
this.isLoading = false
}
Button.VERSION = '3.3.6'
Button.VERSION = '3.4.1'
Button.DEFAULTS = {
loadingText: 'loading...'
@ -214,10 +215,10 @@ if (typeof jQuery === 'undefined') {
if (state == 'loadingText') {
this.isLoading = true
$el.addClass(d).attr(d, d)
$el.addClass(d).attr(d, d).prop(d, true)
} else if (this.isLoading) {
this.isLoading = false
$el.removeClass(d).removeAttr(d)
$el.removeClass(d).removeAttr(d).prop(d, false)
}
}, this), 0)
}
@ -281,10 +282,15 @@ if (typeof jQuery === 'undefined') {
$(document)
.on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
var $btn = $(e.target)
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
var $btn = $(e.target).closest('.btn')
Plugin.call($btn, 'toggle')
if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
// Prevent double click on radios, and the double selections (so cancellation) on checkboxes
e.preventDefault()
// The target component still receive the focus
if ($btn.is('input,button')) $btn.trigger('focus')
else $btn.find('input:visible,button:visible').first().trigger('focus')
}
})
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
$(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
@ -293,10 +299,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
* Bootstrap: carousel.js v3.3.6
* http://getbootstrap.com/javascript/#carousel
* Bootstrap: carousel.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#carousel
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -324,7 +330,7 @@ if (typeof jQuery === 'undefined') {
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
}
Carousel.VERSION = '3.3.6'
Carousel.VERSION = '3.4.1'
Carousel.TRANSITION_DURATION = 600
@ -438,7 +444,9 @@ if (typeof jQuery === 'undefined') {
var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
if ($.support.transition && this.$element.hasClass('slide')) {
$next.addClass(type)
$next[0].offsetWidth // force reflow
if (typeof $next === 'object' && $next.length) {
$next[0].offsetWidth // force reflow
}
$active.addClass(direction)
$next.addClass(direction)
$active
@ -500,10 +508,17 @@ if (typeof jQuery === 'undefined') {
// =================
var clickHandler = function (e) {
var href
var $this = $(this)
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
var href = $this.attr('href')
if (href) {
href = href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
}
var target = $this.attr('data-target') || href
var $target = $(document).find(target)
if (!$target.hasClass('carousel')) return
var options = $.extend({}, $target.data(), $this.data())
var slideIndex = $this.attr('data-slide-to')
if (slideIndex) options.interval = false
@ -531,13 +546,14 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
* Bootstrap: collapse.js v3.3.6
* http://getbootstrap.com/javascript/#collapse
* Bootstrap: collapse.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#collapse
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
/* jshint latedef: false */
+function ($) {
'use strict';
@ -561,7 +577,7 @@ if (typeof jQuery === 'undefined') {
if (this.options.toggle) this.toggle()
}
Collapse.VERSION = '3.3.6'
Collapse.VERSION = '3.4.1'
Collapse.TRANSITION_DURATION = 350
@ -668,7 +684,7 @@ if (typeof jQuery === 'undefined') {
}
Collapse.prototype.getParent = function () {
return $(this.options.parent)
return $(document).find(this.options.parent)
.find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
.each($.proxy(function (i, element) {
var $element = $(element)
@ -691,7 +707,7 @@ if (typeof jQuery === 'undefined') {
var target = $trigger.attr('data-target')
|| (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
return $(target)
return $(document).find(target)
}
@ -743,10 +759,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
* Bootstrap: dropdown.js v3.3.6
* http://getbootstrap.com/javascript/#dropdowns
* Bootstrap: dropdown.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#dropdowns
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -763,7 +779,7 @@ if (typeof jQuery === 'undefined') {
$(element).on('click.bs.dropdown', this.toggle)
}
Dropdown.VERSION = '3.3.6'
Dropdown.VERSION = '3.4.1'
function getParent($this) {
var selector = $this.attr('data-target')
@ -773,7 +789,7 @@ if (typeof jQuery === 'undefined') {
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
}
var $parent = selector && $(selector)
var $parent = selector !== '#' ? $(document).find(selector) : null
return $parent && $parent.length ? $parent : $this.parent()
}
@ -909,10 +925,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
* Bootstrap: modal.js v3.3.6
* http://getbootstrap.com/javascript/#modals
* Bootstrap: modal.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#modals
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -924,15 +940,16 @@ if (typeof jQuery === 'undefined') {
// ======================
var Modal = function (element, options) {
this.options = options
this.$body = $(document.body)
this.$element = $(element)
this.$dialog = this.$element.find('.modal-dialog')
this.$backdrop = null
this.isShown = null
this.originalBodyPad = null
this.scrollbarWidth = 0
this.options = options
this.$body = $(document.body)
this.$element = $(element)
this.$dialog = this.$element.find('.modal-dialog')
this.$backdrop = null
this.isShown = null
this.originalBodyPad = null
this.scrollbarWidth = 0
this.ignoreBackdropClick = false
this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'
if (this.options.remote) {
this.$element
@ -943,7 +960,7 @@ if (typeof jQuery === 'undefined') {
}
}
Modal.VERSION = '3.3.6'
Modal.VERSION = '3.4.1'
Modal.TRANSITION_DURATION = 300
Modal.BACKDROP_TRANSITION_DURATION = 150
@ -960,7 +977,7 @@ if (typeof jQuery === 'undefined') {
Modal.prototype.show = function (_relatedTarget) {
var that = this
var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
this.$element.trigger(e)
@ -1050,7 +1067,9 @@ if (typeof jQuery === 'undefined') {
$(document)
.off('focusin.bs.modal') // guard against infinite focus loop
.on('focusin.bs.modal', $.proxy(function (e) {
if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
if (document !== e.target &&
this.$element[0] !== e.target &&
!this.$element.has(e.target).length) {
this.$element.trigger('focus')
}
}, this))
@ -1152,7 +1171,7 @@ if (typeof jQuery === 'undefined') {
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
this.$element.css({
paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
})
}
@ -1177,11 +1196,26 @@ if (typeof jQuery === 'undefined') {
Modal.prototype.setScrollbar = function () {
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
this.originalBodyPad = document.body.style.paddingRight || ''
if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
var scrollbarWidth = this.scrollbarWidth
if (this.bodyIsOverflowing) {
this.$body.css('padding-right', bodyPad + scrollbarWidth)
$(this.fixedContent).each(function (index, element) {
var actualPadding = element.style.paddingRight
var calculatedPadding = $(element).css('padding-right')
$(element)
.data('padding-right', actualPadding)
.css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')
})
}
}
Modal.prototype.resetScrollbar = function () {
this.$body.css('padding-right', this.originalBodyPad)
$(this.fixedContent).each(function (index, element) {
var padding = $(element).data('padding-right')
$(element).removeData('padding-right')
element.style.paddingRight = padding ? padding : ''
})
}
Modal.prototype.measureScrollbar = function () { // thx walsh
@ -1199,8 +1233,8 @@ if (typeof jQuery === 'undefined') {
function Plugin(option, _relatedTarget) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.modal')
var $this = $(this)
var data = $this.data('bs.modal')
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
@ -1211,7 +1245,7 @@ if (typeof jQuery === 'undefined') {
var old = $.fn.modal
$.fn.modal = Plugin
$.fn.modal = Plugin
$.fn.modal.Constructor = Modal
@ -1228,10 +1262,13 @@ if (typeof jQuery === 'undefined') {
// ==============
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
var $this = $(this)
var href = $this.attr('href')
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
var $this = $(this)
var href = $this.attr('href')
var target = $this.attr('data-target') ||
(href && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
var $target = $(document).find(target)
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
if ($this.is('a')) e.preventDefault()
@ -1247,18 +1284,148 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
* Bootstrap: tooltip.js v3.3.6
* http://getbootstrap.com/javascript/#tooltip
* Bootstrap: tooltip.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#tooltip
* Inspired by the original jQuery.tipsy by Jason Frame
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']
var uriAttrs = [
'background',
'cite',
'href',
'itemtype',
'longdesc',
'poster',
'src',
'xlink:href'
]
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
var DefaultWhitelist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
}
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i
function allowedAttribute(attr, allowedAttributeList) {
var attrName = attr.nodeName.toLowerCase()
if ($.inArray(attrName, allowedAttributeList) !== -1) {
if ($.inArray(attrName, uriAttrs) !== -1) {
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))
}
return true
}
var regExp = $(allowedAttributeList).filter(function (index, value) {
return value instanceof RegExp
})
// Check if a regular expression validates the attribute.
for (var i = 0, l = regExp.length; i < l; i++) {
if (attrName.match(regExp[i])) {
return true
}
}
return false
}
function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
if (unsafeHtml.length === 0) {
return unsafeHtml
}
if (sanitizeFn && typeof sanitizeFn === 'function') {
return sanitizeFn(unsafeHtml)
}
// IE 8 and below don't support createHTMLDocument
if (!document.implementation || !document.implementation.createHTMLDocument) {
return unsafeHtml
}
var createdDocument = document.implementation.createHTMLDocument('sanitization')
createdDocument.body.innerHTML = unsafeHtml
var whitelistKeys = $.map(whiteList, function (el, i) { return i })
var elements = $(createdDocument.body).find('*')
for (var i = 0, len = elements.length; i < len; i++) {
var el = elements[i]
var elName = el.nodeName.toLowerCase()
if ($.inArray(elName, whitelistKeys) === -1) {
el.parentNode.removeChild(el)
continue
}
var attributeList = $.map(el.attributes, function (el) { return el })
var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])
for (var j = 0, len2 = attributeList.length; j < len2; j++) {
if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {
el.removeAttribute(attributeList[j].nodeName)
}
}
}
return createdDocument.body.innerHTML
}
// TOOLTIP PUBLIC CLASS DEFINITION
// ===============================
@ -1274,7 +1441,7 @@ if (typeof jQuery === 'undefined') {
this.init('tooltip', element, options)
}
Tooltip.VERSION = '3.3.6'
Tooltip.VERSION = '3.4.1'
Tooltip.TRANSITION_DURATION = 150
@ -1291,7 +1458,10 @@ if (typeof jQuery === 'undefined') {
viewport: {
selector: 'body',
padding: 0
}
},
sanitize : true,
sanitizeFn : null,
whiteList : DefaultWhitelist
}
Tooltip.prototype.init = function (type, element, options) {
@ -1299,7 +1469,7 @@ if (typeof jQuery === 'undefined') {
this.type = type
this.$element = $(element)
this.options = this.getOptions(options)
this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
this.inState = { click: false, hover: false, focus: false }
if (this.$element[0] instanceof document.constructor && !this.options.selector) {
@ -1332,7 +1502,15 @@ if (typeof jQuery === 'undefined') {
}
Tooltip.prototype.getOptions = function (options) {
options = $.extend({}, this.getDefaults(), this.$element.data(), options)
var dataAttributes = this.$element.data()
for (var dataAttr in dataAttributes) {
if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {
delete dataAttributes[dataAttr]
}
}
options = $.extend({}, this.getDefaults(), dataAttributes, options)
if (options.delay && typeof options.delay == 'number') {
options.delay = {
@ -1341,6 +1519,10 @@ if (typeof jQuery === 'undefined') {
}
}
if (options.sanitize) {
options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)
}
return options
}
@ -1452,7 +1634,7 @@ if (typeof jQuery === 'undefined') {
.addClass(placement)
.data('bs.' + this.type, this)
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)
this.$element.trigger('inserted.bs.' + this.type)
var pos = this.getPosition()
@ -1554,7 +1736,16 @@ if (typeof jQuery === 'undefined') {
var $tip = this.tip()
var title = this.getTitle()
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
if (this.options.html) {
if (this.options.sanitize) {
title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)
}
$tip.find('.tooltip-inner').html(title)
} else {
$tip.find('.tooltip-inner').text(title)
}
$tip.removeClass('fade in top bottom left right')
}
@ -1565,9 +1756,11 @@ if (typeof jQuery === 'undefined') {
function complete() {
if (that.hoverState != 'in') $tip.detach()
that.$element
.removeAttr('aria-describedby')
.trigger('hidden.bs.' + that.type)
if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
that.$element
.removeAttr('aria-describedby')
.trigger('hidden.bs.' + that.type)
}
callback && callback()
}
@ -1610,7 +1803,10 @@ if (typeof jQuery === 'undefined') {
// width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
}
var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
var isSvg = window.SVGElement && el instanceof window.SVGElement
// Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
// See https://github.com/twbs/bootstrap/issues/20280
var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
@ -1726,9 +1922,13 @@ if (typeof jQuery === 'undefined') {
that.$tip = null
that.$arrow = null
that.$viewport = null
that.$element = null
})
}
Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {
return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)
}
// TOOLTIP PLUGIN DEFINITION
// =========================
@ -1762,10 +1962,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
* Bootstrap: popover.js v3.3.6
* http://getbootstrap.com/javascript/#popovers
* Bootstrap: popover.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#popovers
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -1782,7 +1982,7 @@ if (typeof jQuery === 'undefined') {
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
Popover.VERSION = '3.3.6'
Popover.VERSION = '3.4.1'
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
placement: 'right',
@ -1808,10 +2008,25 @@ if (typeof jQuery === 'undefined') {
var title = this.getTitle()
var content = this.getContent()
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
$tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
](content)
if (this.options.html) {
var typeContent = typeof content
if (this.options.sanitize) {
title = this.sanitizeHtml(title)
if (typeContent === 'string') {
content = this.sanitizeHtml(content)
}
}
$tip.find('.popover-title').html(title)
$tip.find('.popover-content').children().detach().end()[
typeContent === 'string' ? 'html' : 'append'
](content)
} else {
$tip.find('.popover-title').text(title)
$tip.find('.popover-content').children().detach().end().text(content)
}
$tip.removeClass('fade top bottom left right in')
@ -1830,8 +2045,8 @@ if (typeof jQuery === 'undefined') {
return $e.attr('data-content')
|| (typeof o.content == 'function' ?
o.content.call($e[0]) :
o.content)
o.content.call($e[0]) :
o.content)
}
Popover.prototype.arrow = function () {
@ -1871,10 +2086,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
* Bootstrap: scrollspy.js v3.3.6
* http://getbootstrap.com/javascript/#scrollspy
* Bootstrap: scrollspy.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#scrollspy
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -1900,7 +2115,7 @@ if (typeof jQuery === 'undefined') {
this.process()
}
ScrollSpy.VERSION = '3.3.6'
ScrollSpy.VERSION = '3.4.1'
ScrollSpy.DEFAULTS = {
offset: 10
@ -2044,10 +2259,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
* Bootstrap: tab.js v3.3.6
* http://getbootstrap.com/javascript/#tabs
* Bootstrap: tab.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#tabs
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -2064,7 +2279,7 @@ if (typeof jQuery === 'undefined') {
// jscs:enable requireDollarBeforejQueryAssignment
}
Tab.VERSION = '3.3.6'
Tab.VERSION = '3.4.1'
Tab.TRANSITION_DURATION = 150
@ -2093,7 +2308,7 @@ if (typeof jQuery === 'undefined') {
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
var $target = $(selector)
var $target = $(document).find(selector)
this.activate($this.closest('li'), $ul)
this.activate($target, $target.parent(), function () {
@ -2118,15 +2333,15 @@ if (typeof jQuery === 'undefined') {
$active
.removeClass('active')
.find('> .dropdown-menu > .active')
.removeClass('active')
.removeClass('active')
.end()
.find('[data-toggle="tab"]')
.attr('aria-expanded', false)
.attr('aria-expanded', false)
element
.addClass('active')
.find('[data-toggle="tab"]')
.attr('aria-expanded', true)
.attr('aria-expanded', true)
if (transition) {
element[0].offsetWidth // reflow for transition
@ -2138,10 +2353,10 @@ if (typeof jQuery === 'undefined') {
if (element.parent('.dropdown-menu').length) {
element
.closest('li.dropdown')
.addClass('active')
.addClass('active')
.end()
.find('[data-toggle="tab"]')
.attr('aria-expanded', true)
.attr('aria-expanded', true)
}
callback && callback()
@ -2200,10 +2415,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
* Bootstrap: affix.js v3.3.6
* http://getbootstrap.com/javascript/#affix
* Bootstrap: affix.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#affix
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -2217,7 +2432,9 @@ if (typeof jQuery === 'undefined') {
var Affix = function (element, options) {
this.options = $.extend({}, Affix.DEFAULTS, options)
this.$target = $(this.options.target)
var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)
this.$target = target
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
@ -2229,7 +2446,7 @@ if (typeof jQuery === 'undefined') {
this.checkPosition()
}
Affix.VERSION = '3.3.6'
Affix.VERSION = '3.4.1'
Affix.RESET = 'affix affix-top affix-bottom'

File diff suppressed because one or more lines are too long

289
vendors/bootstrap/grunt/.stylelintrc vendored Normal file
View File

@ -0,0 +1,289 @@
{
"extends": [
"stylelint-config-standard"
],
"plugins": [
"stylelint-order"
],
"rules": {
"at-rule-empty-line-before": null,
"at-rule-name-space-after": "always",
"at-rule-no-vendor-prefix": true,
"at-rule-semicolon-space-before": "never",
"block-closing-brace-empty-line-before": null,
"block-closing-brace-newline-after": null,
"block-opening-brace-space-before": null,
"color-named": "never",
"declaration-block-semicolon-newline-after": "always-multi-line",
"declaration-block-semicolon-newline-before": "never-multi-line",
"declaration-block-semicolon-space-after": "always-single-line",
"declaration-empty-line-before": null,
"declaration-no-important": true,
"font-family-name-quotes": "always-where-recommended",
"font-weight-notation": [
"numeric",
{
"ignore": [
"relative"
]
}
],
"function-url-no-scheme-relative": true,
"function-url-quotes": "always",
"length-zero-no-unit": true,
"max-empty-lines": 2,
"max-line-length": null,
"media-feature-name-no-unknown": [
true,
{
"ignoreMediaFeatureNames": [
"prefers-reduced-motion"
]
}
],
"media-feature-name-no-vendor-prefix": true,
"media-feature-parentheses-space-inside": "never",
"media-feature-range-operator-space-after": "always",
"media-feature-range-operator-space-before": "never",
"no-descending-specificity": null,
"no-duplicate-selectors": true,
"number-leading-zero": "never",
"order/properties-order": [
"position",
"top",
"right",
"bottom",
"left",
"z-index",
"box-sizing",
"display",
"flex",
"flex-align",
"flex-basis",
"flex-direction",
"flex-wrap",
"flex-flow",
"flex-shrink",
"flex-grow",
"flex-order",
"flex-pack",
"align-content",
"align-items",
"align-self",
"justify-content",
"order",
"float",
"width",
"min-width",
"max-width",
"height",
"min-height",
"max-height",
"padding",
"padding-top",
"padding-right",
"padding-bottom",
"padding-left",
"margin",
"margin-top",
"margin-right",
"margin-bottom",
"margin-left",
"overflow",
"overflow-x",
"overflow-y",
"-webkit-overflow-scrolling",
"-ms-overflow-x",
"-ms-overflow-y",
"-ms-overflow-style",
"columns",
"column-count",
"column-fill",
"column-gap",
"column-rule",
"column-rule-width",
"column-rule-style",
"column-rule-color",
"column-span",
"column-width",
"orphans",
"widows",
"clip",
"clear",
"font",
"font-family",
"font-size",
"font-style",
"font-weight",
"font-variant",
"font-size-adjust",
"font-stretch",
"font-effect",
"font-emphasize",
"font-emphasize-position",
"font-emphasize-style",
"font-smooth",
"src",
"hyphens",
"line-height",
"color",
"text-align",
"text-align-last",
"text-emphasis",
"text-emphasis-color",
"text-emphasis-style",
"text-emphasis-position",
"text-decoration",
"text-indent",
"text-justify",
"text-outline",
"-ms-text-overflow",
"text-overflow",
"text-overflow-ellipsis",
"text-overflow-mode",
"text-shadow",
"text-transform",
"text-wrap",
"-webkit-text-size-adjust",
"-ms-text-size-adjust",
"letter-spacing",
"-ms-word-break",
"word-break",
"word-spacing",
"-ms-word-wrap",
"word-wrap",
"overflow-wrap",
"tab-size",
"white-space",
"vertical-align",
"direction",
"unicode-bidi",
"list-style",
"list-style-position",
"list-style-type",
"list-style-image",
"pointer-events",
"-ms-touch-action",
"touch-action",
"cursor",
"visibility",
"zoom",
"table-layout",
"empty-cells",
"caption-side",
"border-spacing",
"border-collapse",
"content",
"quotes",
"counter-reset",
"counter-increment",
"resize",
"user-select",
"nav-index",
"nav-up",
"nav-right",
"nav-down",
"nav-left",
"background",
"background-color",
"background-image",
"filter",
"background-repeat",
"background-attachment",
"background-position",
"background-position-x",
"background-position-y",
"background-clip",
"background-origin",
"background-size",
"border",
"border-color",
"border-style",
"border-width",
"border-top",
"border-top-color",
"border-top-style",
"border-top-width",
"border-right",
"border-right-color",
"border-right-style",
"border-right-width",
"border-bottom",
"border-bottom-color",
"border-bottom-style",
"border-bottom-width",
"border-left",
"border-left-color",
"border-left-style",
"border-left-width",
"border-radius",
"border-top-left-radius",
"border-top-right-radius",
"border-bottom-right-radius",
"border-bottom-left-radius",
"border-image",
"border-image-source",
"border-image-slice",
"border-image-width",
"border-image-outset",
"border-image-repeat",
"outline",
"outline-width",
"outline-style",
"outline-color",
"outline-offset",
"box-shadow",
"opacity",
"-ms-interpolation-mode",
"page-break-after",
"page-break-before",
"page-break-inside",
"transition",
"transition-delay",
"transition-timing-function",
"transition-duration",
"transition-property",
"transform",
"transform-origin",
"perspective",
"appearance",
"animation",
"animation-name",
"animation-duration",
"animation-play-state",
"animation-timing-function",
"animation-delay",
"animation-iteration-count",
"animation-direction",
"animation-fill-mode",
"fill",
"stroke"
],
"property-no-vendor-prefix": true,
"rule-empty-line-before": null,
"selector-attribute-quotes": "always",
"selector-pseudo-element-colon-notation": "single",
"selector-list-comma-newline-after": "always",
"selector-list-comma-newline-before": "never-multi-line",
"selector-list-comma-space-after": "always-single-line",
"selector-list-comma-space-before": "never-single-line",
"selector-max-attribute": 2,
"selector-max-class": 4,
"selector-max-combinators": 4,
"selector-max-compound-selectors": 4,
"selector-max-empty-lines": 1,
"selector-max-id": 0,
"selector-max-specificity": null,
"selector-max-type": 2,
"selector-max-universal": 1,
"selector-no-qualifying-type": true,
"selector-no-vendor-prefix": true,
"shorthand-property-no-redundant-values": true,
"string-quotes": "double",
"value-keyword-case": "lower",
"value-list-comma-newline-after": "never-multi-line",
"value-list-comma-newline-before": "never-multi-line",
"value-list-comma-space-after": "always",
"value-no-vendor-prefix": true
}
}

86
vendors/bootstrap/grunt/browsers.js vendored Normal file
View File

@ -0,0 +1,86 @@
// jscs:disable requireCamelCaseOrUpperCaseIdentifiers
var browsers = {
safariMac: {
base: 'BrowserStack',
os: 'OS X',
os_version: 'Yosemite',
browser: 'Safari',
browser_version: '8.0'
},
chromeMac: {
base: 'BrowserStack',
os: 'OS X',
os_version: 'Yosemite',
browser : 'Chrome',
browser_version : 'latest'
},
firefoxMac: {
base: 'BrowserStack',
os: 'OS X',
os_version: 'Yosemite',
browser: 'Firefox',
browser_version: 'latest'
},
'ie11Win8.1': {
base: 'BrowserStack',
os: 'Windows',
os_version: '8.1',
browser: 'IE',
browser_version: '11.0'
},
ie10Win8: {
base: 'BrowserStack',
os: 'Windows',
os_version: '8',
browser: 'IE',
browser_version: '10.0'
},
ie9Win7: {
base: 'BrowserStack',
os: 'Windows',
os_version: '7',
browser: 'IE',
browser_version: '9.0'
},
ie8Win7: {
base: 'BrowserStack',
os: 'Windows',
os_version: '7',
browser: 'IE',
browser_version: '8.0'
},
'chromeWin8.1': {
base: 'BrowserStack',
os: 'Windows',
os_version: '8.1',
browser: 'Chrome',
browser_version: 'latest'
},
'firefoxWin8.1': {
base: 'BrowserStack',
os: 'Windows',
os_version: '8.1',
browser: 'Firefox',
browser_version: 'latest'
},
iphone6: {
base: 'BrowserStack',
os: 'ios',
os_version: '11.2',
device: 'iPhone 6',
real_mobile: true
},
nexus5: {
base: 'BrowserStack',
os: 'android',
os_version: '4.4',
device: 'Google Nexus 5',
real_mobile: true
}
};
module.exports = {
list: browsers,
keys: Object.keys(browsers)
};

View File

@ -1,7 +1,7 @@
/*!
* Bootstrap Grunt task for the CommonJS module generation
* http://getbootstrap.com
* Copyright 2014-2015 Twitter, Inc.
* https://getbootstrap.com/
* Copyright 2014-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
@ -16,7 +16,7 @@ module.exports = function generateCommonJSModule(grunt, srcFiles, destFilepath)
var destDir = path.dirname(destFilepath);
function srcPathToDestRequire(srcFilepath) {
var requirePath = path.relative(destDir, srcFilepath).replace(/\\/g, '/');
var requirePath = path.posix.relative(destDir, srcFilepath);
return 'require(\'' + requirePath + '\')';
}

View File

@ -1,7 +1,7 @@
/*!
* Bootstrap Grunt task for Glyphicons data generation
* http://getbootstrap.com
* Copyright 2014-2015 Twitter, Inc.
* https://getbootstrap.com/
* Copyright 2014-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/

View File

@ -1,7 +1,7 @@
/*!
* Bootstrap Grunt task for parsing Less docstrings
* http://getbootstrap.com
* Copyright 2014-2015 Twitter, Inc.
* https://getbootstrap.com/
* Copyright 2014-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/

View File

@ -1,7 +1,7 @@
/*!
* Bootstrap Grunt task for generating raw-files.min.js for the Customizer
* http://getbootstrap.com
* Copyright 2014-2015 Twitter, Inc.
* https://getbootstrap.com/
* Copyright 2014-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/

109
vendors/bootstrap/grunt/change-version.js vendored Executable file
View File

@ -0,0 +1,109 @@
#!/usr/bin/env node
'use strict';
/* globals Set */
/*!
* Script to update version number references in the project.
* Copyright 2015-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
var fs = require('fs');
var path = require('path');
var sh = require('shelljs');
sh.config.fatal = true;
var sed = sh.sed;
// Blame TC39... https://github.com/benjamingr/RegExp.escape/issues/37
RegExp.quote = function (string) {
return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&');
};
RegExp.quoteReplacement = function (string) {
return string.replace(/[$]/g, '$$');
};
var DRY_RUN = false;
function walkAsync(directory, excludedDirectories, fileCallback, errback) {
if (excludedDirectories.has(path.parse(directory).base)) {
return;
}
fs.readdir(directory, function (err, names) {
if (err) {
errback(err);
return;
}
names.forEach(function (name) {
var filepath = path.join(directory, name);
fs.lstat(filepath, function (err, stats) {
if (err) {
process.nextTick(errback, err);
return;
}
if (stats.isSymbolicLink()) {
return;
}
else if (stats.isDirectory()) {
process.nextTick(walkAsync, filepath, excludedDirectories, fileCallback, errback);
}
else if (stats.isFile()) {
process.nextTick(fileCallback, filepath);
}
});
});
});
}
function replaceRecursively(directory, excludedDirectories, allowedExtensions, original, replacement) {
original = new RegExp(RegExp.quote(original), 'g');
replacement = RegExp.quoteReplacement(replacement);
var updateFile = !DRY_RUN ? function (filepath) {
if (allowedExtensions.has(path.parse(filepath).ext)) {
sed('-i', original, replacement, filepath);
}
} : function (filepath) {
if (allowedExtensions.has(path.parse(filepath).ext)) {
console.log('FILE: ' + filepath);
}
else {
console.log('EXCLUDED:' + filepath);
}
};
walkAsync(directory, excludedDirectories, updateFile, function (err) {
console.error('ERROR while traversing directory!:');
console.error(err);
process.exit(1);
});
}
function main(args) {
if (args.length !== 2) {
console.error('USAGE: change-version old_version new_version');
console.error('Got arguments:', args);
process.exit(1);
}
var oldVersion = args[0];
var newVersion = args[1];
var EXCLUDED_DIRS = new Set([
'.git',
'node_modules',
'vendor'
]);
var INCLUDED_EXTENSIONS = new Set([
// This extension whitelist is how we avoid modifying binary files
'',
'.css',
'.html',
'.js',
'.json',
'.less',
'.md',
'.nuspec',
'.ps1',
'.scss',
'.txt',
'.yml'
]);
replaceRecursively('.', EXCLUDED_DIRS, INCLUDED_EXTENSIONS, oldVersion, newVersion);
}
main(process.argv.slice(2));

View File

@ -11,23 +11,31 @@
"../assets/js/src/customizer.js"
],
"docsJs": [
"../assets/js/vendor/requestAnimationFrame-polyfill.js",
"../assets/js/vendor/base64.js",
"../assets/js/vendor/holder.min.js",
"../assets/js/vendor/ZeroClipboard.min.js",
"../assets/js/vendor/anchor.js",
"../assets/js/src/application.js"
"../assets/js/vendor/clipboard.min.js",
"../assets/js/vendor/anchor.min.js",
"../assets/js/src/application.js",
"../assets/js/src/search.js",
"../assets/js/ie10-viewport-bug-workaround.js",
"../assets/js/ie-emulation-modes-warning.js"
]
},
"config": {
"autoprefixerBrowsers": [
"Android 2.3",
"Android >= 4",
"Chrome >= 20",
"Firefox >= 24",
"Explorer >= 8",
"iOS >= 6",
"Opera >= 12",
"Safari >= 6"
],
"autoprefixer": {
"browsers": [
"Android 2.3",
"Android >= 4",
"Chrome >= 20",
"Firefox >= 24",
"Explorer >= 8",
"iOS >= 6",
"Opera >= 12",
"Safari >= 6"
],
"cascade": false
},
"jqueryCheck": [
"if (typeof jQuery === 'undefined') {",
" throw new Error('Bootstrap\\'s JavaScript requires jQuery')",
@ -37,8 +45,8 @@
"+function ($) {",
" 'use strict';",
" var version = $.fn.jquery.split(' ')[0].split('.')",
" if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 2)) {",
" throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3')",
" if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {",
" throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')",
" }",
"}(jQuery);\n\n"
]

62
vendors/bootstrap/grunt/generate-sri.js vendored Normal file
View File

@ -0,0 +1,62 @@
#!/usr/bin/env node
'use strict';
/*!
* Script to generate SRI hashes for use in our docs.
* Remember to use the same vendor files as the CDN ones,
* otherwise the hashes won't match!
*
* Copyright 2017-2019 The Bootstrap Authors
* Copyright 2017-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
var crypto = require('crypto');
var fs = require('fs');
var path = require('path');
var replace = require('replace-in-file');
var configFile = path.join(__dirname, '../_config.yml');
// Array of objects which holds the files to generate SRI hashes for.
// `file` is the path from the root folder
// `configPropertyName` is the _config.yml variable's name of the file
var files = [
{
file: 'dist/css/bootstrap.min.css',
configPropertyName: 'css_hash'
},
{
file: 'dist/css/bootstrap-theme.min.css',
configPropertyName: 'css_theme_hash'
},
{
file: 'dist/js/bootstrap.min.js',
configPropertyName: 'js_hash'
}
];
files.forEach(function (file) {
fs.readFile(file.file, 'utf8', function (err, data) {
if (err) {
throw err;
}
var algo = 'sha384';
var hash = crypto.createHash(algo).update(data, 'utf8').digest('base64');
var integrity = algo + '-' + hash;
console.log(file.configPropertyName + ': ' + integrity);
try {
replace.sync({
files: configFile,
from: new RegExp('(\\s' + file.configPropertyName + ':\\s+"|\')(\\S+)("|\')'),
to: '$1' + integrity + '$3'
});
} catch (error) {
console.error('Error occurred:', error);
}
});
});

79
vendors/bootstrap/grunt/karma.conf.js vendored Normal file
View File

@ -0,0 +1,79 @@
'use strict';
var ip = require('ip');
var browserConfig = require('./browsers');
var browserStack = process.env.BROWSER === 'true';
module.exports = function (config) {
var conf = {
basePath: '../',
frameworks: ['qunit'],
plugins: ['karma-qunit'],
// list of files / patterns to load in the browser
files: [
'js/tests/vendor/jquery.min.js',
'js/tooltip.js',
'js/!(tooltip).js',
'js/tests/unit/*.js'
],
reporters: ['dots'],
port: 9876,
colors: true,
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_ERROR || config.LOG_WARN,
autoWatch: false,
singleRun: true,
concurrency: Infinity,
client: {
qunit: {
showUI: true
}
}
};
if (browserStack) {
conf.hostname = ip.address();
conf.browserStack = {
username: process.env.BROWSER_STACK_USERNAME,
accessKey: process.env.BROWSER_STACK_ACCESS_KEY,
build: 'bootstrap-v3-' + new Date().toISOString(),
project: 'Bootstrap v3',
retryLimit: 1
};
conf.plugins.push('karma-browserstack-launcher');
conf.customLaunchers = browserConfig.list;
conf.browsers = browserConfig.keys;
conf.reporters.push('BrowserStack');
} else {
conf.frameworks.push('detectBrowsers');
conf.plugins.push(
'karma-chrome-launcher',
'karma-firefox-launcher',
'karma-detect-browsers'
);
conf.detectBrowsers = {
usePhantomJS: false,
postDetection: function (availableBrowser) {
if (typeof process.env.TRAVIS_JOB_ID !== 'undefined' || availableBrowser.includes('Chrome')) {
return ['ChromeHeadless'];
}
if (availableBrowser.includes('Firefox')) {
return ['FirefoxHeadless'];
}
throw new Error('Please install Firefox or Chrome');
}
};
conf.customLaunchers = {
FirefoxHeadless: {
base: 'Firefox',
flags: ['-headless']
}
};
}
config.set(conf);
};

View File

@ -1,82 +0,0 @@
[
# Docs: https://saucelabs.com/docs/platforms/webdriver
{
browserName: "safari",
platform: "OS X 10.10"
},
{
browserName: "chrome",
platform: "OS X 10.10"
},
{
browserName: "firefox",
platform: "OS X 10.10"
},
# Mac Opera not currently supported by Sauce Labs
{
browserName: "internet explorer",
version: "11",
platform: "Windows 8.1"
},
{
browserName: "internet explorer",
version: "10",
platform: "Windows 8"
},
{
browserName: "internet explorer",
version: "9",
platform: "Windows 7"
},
{
browserName: "internet explorer",
version: "8",
platform: "Windows 7"
},
# { # Unofficial
# browserName: "internet explorer",
# version: "7",
# platform: "Windows XP"
# },
{
browserName: "chrome",
platform: "Windows 8.1"
},
{
browserName: "firefox",
platform: "Windows 8.1"
},
# Win Opera 15+ not currently supported by Sauce Labs
{
browserName: "iphone",
platform: "OS X 10.10",
version: "8.2"
},
# iOS Chrome not currently supported by Sauce Labs
# Linux (unofficial)
{
browserName: "chrome",
platform: "Linux"
},
{
browserName: "firefox",
platform: "Linux"
}
# Android Chrome not currently supported by Sauce Labs
# { # Android Browser (super-unofficial)
# browserName: "android",
# version: "4.0",
# platform: "Linux"
# }
]

View File

@ -1,8 +1,8 @@
/* ========================================================================
* Bootstrap: affix.js v3.3.6
* http://getbootstrap.com/javascript/#affix
* Bootstrap: affix.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#affix
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -16,7 +16,9 @@
var Affix = function (element, options) {
this.options = $.extend({}, Affix.DEFAULTS, options)
this.$target = $(this.options.target)
var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)
this.$target = target
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
@ -28,7 +30,7 @@
this.checkPosition()
}
Affix.VERSION = '3.3.6'
Affix.VERSION = '3.4.1'
Affix.RESET = 'affix affix-top affix-bottom'

View File

@ -1,8 +1,8 @@
/* ========================================================================
* Bootstrap: alert.js v3.3.6
* http://getbootstrap.com/javascript/#alerts
* Bootstrap: alert.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#alerts
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -18,7 +18,7 @@
$(el).on('click', dismiss, this.close)
}
Alert.VERSION = '3.3.6'
Alert.VERSION = '3.4.1'
Alert.TRANSITION_DURATION = 150
@ -31,7 +31,8 @@
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
}
var $parent = $(selector)
selector = selector === '#' ? [] : selector
var $parent = $(document).find(selector)
if (e) e.preventDefault()

View File

@ -1,8 +1,8 @@
/* ========================================================================
* Bootstrap: button.js v3.3.6
* http://getbootstrap.com/javascript/#buttons
* Bootstrap: button.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#buttons
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -19,7 +19,7 @@
this.isLoading = false
}
Button.VERSION = '3.3.6'
Button.VERSION = '3.4.1'
Button.DEFAULTS = {
loadingText: 'loading...'
@ -41,10 +41,10 @@
if (state == 'loadingText') {
this.isLoading = true
$el.addClass(d).attr(d, d)
$el.addClass(d).attr(d, d).prop(d, true)
} else if (this.isLoading) {
this.isLoading = false
$el.removeClass(d).removeAttr(d)
$el.removeClass(d).removeAttr(d).prop(d, false)
}
}, this), 0)
}
@ -108,10 +108,15 @@
$(document)
.on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
var $btn = $(e.target)
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
var $btn = $(e.target).closest('.btn')
Plugin.call($btn, 'toggle')
if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
// Prevent double click on radios, and the double selections (so cancellation) on checkboxes
e.preventDefault()
// The target component still receive the focus
if ($btn.is('input,button')) $btn.trigger('focus')
else $btn.find('input:visible,button:visible').first().trigger('focus')
}
})
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
$(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))

View File

@ -1,8 +1,8 @@
/* ========================================================================
* Bootstrap: carousel.js v3.3.6
* http://getbootstrap.com/javascript/#carousel
* Bootstrap: carousel.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#carousel
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -30,7 +30,7 @@
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
}
Carousel.VERSION = '3.3.6'
Carousel.VERSION = '3.4.1'
Carousel.TRANSITION_DURATION = 600
@ -144,7 +144,9 @@
var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
if ($.support.transition && this.$element.hasClass('slide')) {
$next.addClass(type)
$next[0].offsetWidth // force reflow
if (typeof $next === 'object' && $next.length) {
$next[0].offsetWidth // force reflow
}
$active.addClass(direction)
$next.addClass(direction)
$active
@ -206,10 +208,17 @@
// =================
var clickHandler = function (e) {
var href
var $this = $(this)
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
var href = $this.attr('href')
if (href) {
href = href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
}
var target = $this.attr('data-target') || href
var $target = $(document).find(target)
if (!$target.hasClass('carousel')) return
var options = $.extend({}, $target.data(), $this.data())
var slideIndex = $this.attr('data-slide-to')
if (slideIndex) options.interval = false

View File

@ -1,11 +1,12 @@
/* ========================================================================
* Bootstrap: collapse.js v3.3.6
* http://getbootstrap.com/javascript/#collapse
* Bootstrap: collapse.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#collapse
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
/* jshint latedef: false */
+function ($) {
'use strict';
@ -29,7 +30,7 @@
if (this.options.toggle) this.toggle()
}
Collapse.VERSION = '3.3.6'
Collapse.VERSION = '3.4.1'
Collapse.TRANSITION_DURATION = 350
@ -136,7 +137,7 @@
}
Collapse.prototype.getParent = function () {
return $(this.options.parent)
return $(document).find(this.options.parent)
.find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
.each($.proxy(function (i, element) {
var $element = $(element)
@ -159,7 +160,7 @@
var target = $trigger.attr('data-target')
|| (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
return $(target)
return $(document).find(target)
}

View File

@ -1,8 +1,8 @@
/* ========================================================================
* Bootstrap: dropdown.js v3.3.6
* http://getbootstrap.com/javascript/#dropdowns
* Bootstrap: dropdown.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#dropdowns
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -19,7 +19,7 @@
$(element).on('click.bs.dropdown', this.toggle)
}
Dropdown.VERSION = '3.3.6'
Dropdown.VERSION = '3.4.1'
function getParent($this) {
var selector = $this.attr('data-target')
@ -29,7 +29,7 @@
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
}
var $parent = selector && $(selector)
var $parent = selector !== '#' ? $(document).find(selector) : null
return $parent && $parent.length ? $parent : $this.parent()
}

View File

@ -1,8 +1,8 @@
/* ========================================================================
* Bootstrap: modal.js v3.3.6
* http://getbootstrap.com/javascript/#modals
* Bootstrap: modal.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#modals
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -14,15 +14,16 @@
// ======================
var Modal = function (element, options) {
this.options = options
this.$body = $(document.body)
this.$element = $(element)
this.$dialog = this.$element.find('.modal-dialog')
this.$backdrop = null
this.isShown = null
this.originalBodyPad = null
this.scrollbarWidth = 0
this.options = options
this.$body = $(document.body)
this.$element = $(element)
this.$dialog = this.$element.find('.modal-dialog')
this.$backdrop = null
this.isShown = null
this.originalBodyPad = null
this.scrollbarWidth = 0
this.ignoreBackdropClick = false
this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'
if (this.options.remote) {
this.$element
@ -33,7 +34,7 @@
}
}
Modal.VERSION = '3.3.6'
Modal.VERSION = '3.4.1'
Modal.TRANSITION_DURATION = 300
Modal.BACKDROP_TRANSITION_DURATION = 150
@ -50,7 +51,7 @@
Modal.prototype.show = function (_relatedTarget) {
var that = this
var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
this.$element.trigger(e)
@ -140,7 +141,9 @@
$(document)
.off('focusin.bs.modal') // guard against infinite focus loop
.on('focusin.bs.modal', $.proxy(function (e) {
if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
if (document !== e.target &&
this.$element[0] !== e.target &&
!this.$element.has(e.target).length) {
this.$element.trigger('focus')
}
}, this))
@ -242,7 +245,7 @@
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
this.$element.css({
paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
})
}
@ -267,11 +270,26 @@
Modal.prototype.setScrollbar = function () {
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
this.originalBodyPad = document.body.style.paddingRight || ''
if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
var scrollbarWidth = this.scrollbarWidth
if (this.bodyIsOverflowing) {
this.$body.css('padding-right', bodyPad + scrollbarWidth)
$(this.fixedContent).each(function (index, element) {
var actualPadding = element.style.paddingRight
var calculatedPadding = $(element).css('padding-right')
$(element)
.data('padding-right', actualPadding)
.css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')
})
}
}
Modal.prototype.resetScrollbar = function () {
this.$body.css('padding-right', this.originalBodyPad)
$(this.fixedContent).each(function (index, element) {
var padding = $(element).data('padding-right')
$(element).removeData('padding-right')
element.style.paddingRight = padding ? padding : ''
})
}
Modal.prototype.measureScrollbar = function () { // thx walsh
@ -289,8 +307,8 @@
function Plugin(option, _relatedTarget) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.modal')
var $this = $(this)
var data = $this.data('bs.modal')
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
@ -301,7 +319,7 @@
var old = $.fn.modal
$.fn.modal = Plugin
$.fn.modal = Plugin
$.fn.modal.Constructor = Modal
@ -318,10 +336,13 @@
// ==============
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
var $this = $(this)
var href = $this.attr('href')
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
var $this = $(this)
var href = $this.attr('href')
var target = $this.attr('data-target') ||
(href && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
var $target = $(document).find(target)
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
if ($this.is('a')) e.preventDefault()

View File

@ -1,8 +1,8 @@
/* ========================================================================
* Bootstrap: popover.js v3.3.6
* http://getbootstrap.com/javascript/#popovers
* Bootstrap: popover.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#popovers
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -19,7 +19,7 @@
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
Popover.VERSION = '3.3.6'
Popover.VERSION = '3.4.1'
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
placement: 'right',
@ -45,10 +45,25 @@
var title = this.getTitle()
var content = this.getContent()
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
$tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
](content)
if (this.options.html) {
var typeContent = typeof content
if (this.options.sanitize) {
title = this.sanitizeHtml(title)
if (typeContent === 'string') {
content = this.sanitizeHtml(content)
}
}
$tip.find('.popover-title').html(title)
$tip.find('.popover-content').children().detach().end()[
typeContent === 'string' ? 'html' : 'append'
](content)
} else {
$tip.find('.popover-title').text(title)
$tip.find('.popover-content').children().detach().end().text(content)
}
$tip.removeClass('fade top bottom left right in')
@ -67,8 +82,8 @@
return $e.attr('data-content')
|| (typeof o.content == 'function' ?
o.content.call($e[0]) :
o.content)
o.content.call($e[0]) :
o.content)
}
Popover.prototype.arrow = function () {

View File

@ -1,8 +1,8 @@
/* ========================================================================
* Bootstrap: scrollspy.js v3.3.6
* http://getbootstrap.com/javascript/#scrollspy
* Bootstrap: scrollspy.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#scrollspy
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -28,7 +28,7 @@
this.process()
}
ScrollSpy.VERSION = '3.3.6'
ScrollSpy.VERSION = '3.4.1'
ScrollSpy.DEFAULTS = {
offset: 10

View File

@ -1,8 +1,8 @@
/* ========================================================================
* Bootstrap: tab.js v3.3.6
* http://getbootstrap.com/javascript/#tabs
* Bootstrap: tab.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#tabs
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -19,7 +19,7 @@
// jscs:enable requireDollarBeforejQueryAssignment
}
Tab.VERSION = '3.3.6'
Tab.VERSION = '3.4.1'
Tab.TRANSITION_DURATION = 150
@ -48,7 +48,7 @@
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
var $target = $(selector)
var $target = $(document).find(selector)
this.activate($this.closest('li'), $ul)
this.activate($target, $target.parent(), function () {
@ -73,15 +73,15 @@
$active
.removeClass('active')
.find('> .dropdown-menu > .active')
.removeClass('active')
.removeClass('active')
.end()
.find('[data-toggle="tab"]')
.attr('aria-expanded', false)
.attr('aria-expanded', false)
element
.addClass('active')
.find('[data-toggle="tab"]')
.attr('aria-expanded', true)
.attr('aria-expanded', true)
if (transition) {
element[0].offsetWidth // reflow for transition
@ -93,10 +93,10 @@
if (element.parent('.dropdown-menu').length) {
element
.closest('li.dropdown')
.addClass('active')
.addClass('active')
.end()
.find('[data-toggle="tab"]')
.attr('aria-expanded', true)
.attr('aria-expanded', true)
}
callback && callback()

View File

@ -1,16 +1,146 @@
/* ========================================================================
* Bootstrap: tooltip.js v3.3.6
* http://getbootstrap.com/javascript/#tooltip
* Bootstrap: tooltip.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#tooltip
* Inspired by the original jQuery.tipsy by Jason Frame
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']
var uriAttrs = [
'background',
'cite',
'href',
'itemtype',
'longdesc',
'poster',
'src',
'xlink:href'
]
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
var DefaultWhitelist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
}
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i
function allowedAttribute(attr, allowedAttributeList) {
var attrName = attr.nodeName.toLowerCase()
if ($.inArray(attrName, allowedAttributeList) !== -1) {
if ($.inArray(attrName, uriAttrs) !== -1) {
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))
}
return true
}
var regExp = $(allowedAttributeList).filter(function (index, value) {
return value instanceof RegExp
})
// Check if a regular expression validates the attribute.
for (var i = 0, l = regExp.length; i < l; i++) {
if (attrName.match(regExp[i])) {
return true
}
}
return false
}
function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
if (unsafeHtml.length === 0) {
return unsafeHtml
}
if (sanitizeFn && typeof sanitizeFn === 'function') {
return sanitizeFn(unsafeHtml)
}
// IE 8 and below don't support createHTMLDocument
if (!document.implementation || !document.implementation.createHTMLDocument) {
return unsafeHtml
}
var createdDocument = document.implementation.createHTMLDocument('sanitization')
createdDocument.body.innerHTML = unsafeHtml
var whitelistKeys = $.map(whiteList, function (el, i) { return i })
var elements = $(createdDocument.body).find('*')
for (var i = 0, len = elements.length; i < len; i++) {
var el = elements[i]
var elName = el.nodeName.toLowerCase()
if ($.inArray(elName, whitelistKeys) === -1) {
el.parentNode.removeChild(el)
continue
}
var attributeList = $.map(el.attributes, function (el) { return el })
var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])
for (var j = 0, len2 = attributeList.length; j < len2; j++) {
if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {
el.removeAttribute(attributeList[j].nodeName)
}
}
}
return createdDocument.body.innerHTML
}
// TOOLTIP PUBLIC CLASS DEFINITION
// ===============================
@ -26,7 +156,7 @@
this.init('tooltip', element, options)
}
Tooltip.VERSION = '3.3.6'
Tooltip.VERSION = '3.4.1'
Tooltip.TRANSITION_DURATION = 150
@ -43,7 +173,10 @@
viewport: {
selector: 'body',
padding: 0
}
},
sanitize : true,
sanitizeFn : null,
whiteList : DefaultWhitelist
}
Tooltip.prototype.init = function (type, element, options) {
@ -51,7 +184,7 @@
this.type = type
this.$element = $(element)
this.options = this.getOptions(options)
this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
this.inState = { click: false, hover: false, focus: false }
if (this.$element[0] instanceof document.constructor && !this.options.selector) {
@ -84,7 +217,15 @@
}
Tooltip.prototype.getOptions = function (options) {
options = $.extend({}, this.getDefaults(), this.$element.data(), options)
var dataAttributes = this.$element.data()
for (var dataAttr in dataAttributes) {
if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {
delete dataAttributes[dataAttr]
}
}
options = $.extend({}, this.getDefaults(), dataAttributes, options)
if (options.delay && typeof options.delay == 'number') {
options.delay = {
@ -93,6 +234,10 @@
}
}
if (options.sanitize) {
options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)
}
return options
}
@ -204,7 +349,7 @@
.addClass(placement)
.data('bs.' + this.type, this)
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)
this.$element.trigger('inserted.bs.' + this.type)
var pos = this.getPosition()
@ -306,7 +451,16 @@
var $tip = this.tip()
var title = this.getTitle()
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
if (this.options.html) {
if (this.options.sanitize) {
title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)
}
$tip.find('.tooltip-inner').html(title)
} else {
$tip.find('.tooltip-inner').text(title)
}
$tip.removeClass('fade in top bottom left right')
}
@ -317,9 +471,11 @@
function complete() {
if (that.hoverState != 'in') $tip.detach()
that.$element
.removeAttr('aria-describedby')
.trigger('hidden.bs.' + that.type)
if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
that.$element
.removeAttr('aria-describedby')
.trigger('hidden.bs.' + that.type)
}
callback && callback()
}
@ -362,7 +518,10 @@
// width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
}
var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
var isSvg = window.SVGElement && el instanceof window.SVGElement
// Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
// See https://github.com/twbs/bootstrap/issues/20280
var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
@ -478,9 +637,13 @@
that.$tip = null
that.$arrow = null
that.$viewport = null
that.$element = null
})
}
Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {
return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)
}
// TOOLTIP PLUGIN DEFINITION
// =========================

View File

@ -1,8 +1,8 @@
/* ========================================================================
* Bootstrap: transition.js v3.3.6
* http://getbootstrap.com/javascript/#transitions
* Bootstrap: transition.js v3.4.1
* https://getbootstrap.com/docs/3.4/javascript/#transitions
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@ -10,7 +10,7 @@
+function ($) {
'use strict';
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
// CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)
// ============================================================
function transitionEnd() {
@ -32,7 +32,7 @@
return false // explicit for ie8 ( ._.)
}
// http://blog.alexmaccaw.com/css-transitions
// https://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) {
var called = false
var $el = this

View File

@ -1,304 +0,0 @@
{
"always-semicolon": true,
"block-indent": 2,
"color-case": "lower",
"color-shorthand": true,
"element-case": "lower",
"eof-newline": true,
"leading-zero": false,
"remove-empty-rulesets": true,
"space-after-colon": 1,
"space-after-combinator": 1,
"space-before-selector-delimiter": 0,
"space-between-declarations": "\n",
"space-after-opening-brace": "\n",
"space-before-closing-brace": "\n",
"space-before-colon": 0,
"space-before-combinator": 1,
"space-before-opening-brace": 1,
"strip-spaces": true,
"unitless-zero": true,
"vendor-prefix-align": true,
"sort-order": [
[
"position",
"top",
"right",
"bottom",
"left",
"z-index",
"display",
"float",
"width",
"min-width",
"max-width",
"height",
"min-height",
"max-height",
"-webkit-box-sizing",
"-moz-box-sizing",
"box-sizing",
"-webkit-appearance",
"padding",
"padding-top",
"padding-right",
"padding-bottom",
"padding-left",
"margin",
"margin-top",
"margin-right",
"margin-bottom",
"margin-left",
"overflow",
"overflow-x",
"overflow-y",
"-webkit-overflow-scrolling",
"-ms-overflow-x",
"-ms-overflow-y",
"-ms-overflow-style",
"clip",
"clear",
"font",
"font-family",
"font-size",
"font-style",
"font-weight",
"font-variant",
"font-size-adjust",
"font-stretch",
"font-effect",
"font-emphasize",
"font-emphasize-position",
"font-emphasize-style",
"font-smooth",
"-webkit-hyphens",
"-moz-hyphens",
"hyphens",
"line-height",
"color",
"text-align",
"-webkit-text-align-last",
"-moz-text-align-last",
"-ms-text-align-last",
"text-align-last",
"text-emphasis",
"text-emphasis-color",
"text-emphasis-style",
"text-emphasis-position",
"text-decoration",
"text-indent",
"text-justify",
"text-outline",
"-ms-text-overflow",
"text-overflow",
"text-overflow-ellipsis",
"text-overflow-mode",
"text-shadow",
"text-transform",
"text-wrap",
"-webkit-text-size-adjust",
"-ms-text-size-adjust",
"letter-spacing",
"-ms-word-break",
"word-break",
"word-spacing",
"-ms-word-wrap",
"word-wrap",
"-moz-tab-size",
"-o-tab-size",
"tab-size",
"white-space",
"vertical-align",
"list-style",
"list-style-position",
"list-style-type",
"list-style-image",
"pointer-events",
"-ms-touch-action",
"touch-action",
"cursor",
"visibility",
"zoom",
"flex-direction",
"flex-order",
"flex-pack",
"flex-align",
"table-layout",
"empty-cells",
"caption-side",
"border-spacing",
"border-collapse",
"content",
"quotes",
"counter-reset",
"counter-increment",
"resize",
"-webkit-user-select",
"-moz-user-select",
"-ms-user-select",
"-o-user-select",
"user-select",
"nav-index",
"nav-up",
"nav-right",
"nav-down",
"nav-left",
"background",
"background-color",
"background-image",
"-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient",
"filter:progid:DXImageTransform.Microsoft.gradient",
"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
"filter",
"background-repeat",
"background-attachment",
"background-position",
"background-position-x",
"background-position-y",
"-webkit-background-clip",
"-moz-background-clip",
"background-clip",
"background-origin",
"-webkit-background-size",
"-moz-background-size",
"-o-background-size",
"background-size",
"border",
"border-color",
"border-style",
"border-width",
"border-top",
"border-top-color",
"border-top-style",
"border-top-width",
"border-right",
"border-right-color",
"border-right-style",
"border-right-width",
"border-bottom",
"border-bottom-color",
"border-bottom-style",
"border-bottom-width",
"border-left",
"border-left-color",
"border-left-style",
"border-left-width",
"border-radius",
"border-top-left-radius",
"border-top-right-radius",
"border-bottom-right-radius",
"border-bottom-left-radius",
"-webkit-border-image",
"-moz-border-image",
"-o-border-image",
"border-image",
"-webkit-border-image-source",
"-moz-border-image-source",
"-o-border-image-source",
"border-image-source",
"-webkit-border-image-slice",
"-moz-border-image-slice",
"-o-border-image-slice",
"border-image-slice",
"-webkit-border-image-width",
"-moz-border-image-width",
"-o-border-image-width",
"border-image-width",
"-webkit-border-image-outset",
"-moz-border-image-outset",
"-o-border-image-outset",
"border-image-outset",
"-webkit-border-image-repeat",
"-moz-border-image-repeat",
"-o-border-image-repeat",
"border-image-repeat",
"outline",
"outline-width",
"outline-style",
"outline-color",
"outline-offset",
"-webkit-box-shadow",
"-moz-box-shadow",
"box-shadow",
"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
"-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha",
"opacity",
"-ms-interpolation-mode",
"-webkit-transition",
"-moz-transition",
"-ms-transition",
"-o-transition",
"transition",
"-webkit-transition-delay",
"-moz-transition-delay",
"-ms-transition-delay",
"-o-transition-delay",
"transition-delay",
"-webkit-transition-timing-function",
"-moz-transition-timing-function",
"-ms-transition-timing-function",
"-o-transition-timing-function",
"transition-timing-function",
"-webkit-transition-duration",
"-moz-transition-duration",
"-ms-transition-duration",
"-o-transition-duration",
"transition-duration",
"-webkit-transition-property",
"-moz-transition-property",
"-ms-transition-property",
"-o-transition-property",
"transition-property",
"-webkit-transform",
"-moz-transform",
"-ms-transform",
"-o-transform",
"transform",
"-webkit-transform-origin",
"-moz-transform-origin",
"-ms-transform-origin",
"-o-transform-origin",
"transform-origin",
"-webkit-animation",
"-moz-animation",
"-ms-animation",
"-o-animation",
"animation",
"-webkit-animation-name",
"-moz-animation-name",
"-ms-animation-name",
"-o-animation-name",
"animation-name",
"-webkit-animation-duration",
"-moz-animation-duration",
"-ms-animation-duration",
"-o-animation-duration",
"animation-duration",
"-webkit-animation-play-state",
"-moz-animation-play-state",
"-ms-animation-play-state",
"-o-animation-play-state",
"animation-play-state",
"-webkit-animation-timing-function",
"-moz-animation-timing-function",
"-ms-animation-timing-function",
"-o-animation-timing-function",
"animation-timing-function",
"-webkit-animation-delay",
"-moz-animation-delay",
"-ms-animation-delay",
"-o-animation-delay",
"animation-delay",
"-webkit-animation-iteration-count",
"-moz-animation-iteration-count",
"-ms-animation-iteration-count",
"-o-animation-iteration-count",
"animation-iteration-count",
"-webkit-animation-direction",
"-moz-animation-direction",
"-ms-animation-direction",
"-o-animation-direction",
"animation-direction"
]
]
}

View File

@ -1,19 +0,0 @@
{
"adjoining-classes": false,
"box-sizing": false,
"box-model": false,
"compatible-vendor-prefixes": false,
"floats": false,
"font-sizes": false,
"gradients": false,
"important": false,
"known-properties": false,
"outline-none": false,
"qualified-headings": false,
"regex-selectors": false,
"shorthand": false,
"text-indent": false,
"unique-headings": false,
"universal-selector": false,
"unqualified-attributes": false
}

View File

@ -15,8 +15,7 @@
// Headings for larger alerts
h4 {
margin-top: 0;
// Specified for the h4 to prevent conflicts of changing @headings-color
color: inherit;
color: inherit; // Specified for the h4 to prevent conflicts of changing @headings-color
}
// Provide class for links that match alerts
@ -39,7 +38,8 @@
//
// Expand the right padding and account for the close button's positioning.
.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.
// The misspelled .alert-dismissable was deprecated in 3.2.0.
.alert-dismissable,
.alert-dismissible {
padding-right: (@alert-padding + 20);

View File

@ -10,11 +10,11 @@
padding: 3px 7px;
font-size: @font-size-small;
font-weight: @badge-font-weight;
color: @badge-color;
line-height: @badge-line-height;
vertical-align: middle;
white-space: nowrap;
color: @badge-color;
text-align: center;
white-space: nowrap;
vertical-align: middle;
background-color: @badge-bg;
border-radius: @badge-border-radius;

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap v3.3.6 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Bootstrap v3.4.1 (https://getbootstrap.com/)
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/

View File

@ -14,9 +14,9 @@
display: inline-block;
+ li:before {
content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
padding: 0 5px;
color: @breadcrumb-color;
content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
}
}

View File

@ -1,3 +1,5 @@
// stylelint-disable selector-no-qualifying-type */
//
// Button groups
// --------------------------------------------------
@ -59,7 +61,7 @@
.border-right-radius(0);
}
}
// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it
.btn-group > .btn:last-child:not(:first-child),
.btn-group > .dropdown-toggle:not(:first-child) {
.border-left-radius(0);
@ -103,18 +105,18 @@
// Give the line between buttons some depth
.btn-group > .btn + .dropdown-toggle {
padding-left: 8px;
padding-right: 8px;
padding-left: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle {
padding-left: 12px;
padding-right: 12px;
padding-left: 12px;
}
// The clickable button for toggling the menu
// Remove the gradient and set the same inset shadow as the :active state
.btn-group.open .dropdown-toggle {
.box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
.box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));
// Show no shadow for `.btn-link` since it has no other button styles.
&.btn-link {
@ -205,8 +207,8 @@
border-collapse: separate;
> .btn,
> .btn-group {
float: none;
display: table-cell;
float: none;
width: 1%;
}
> .btn-group .btn {
@ -237,7 +239,7 @@
input[type="radio"],
input[type="checkbox"] {
position: absolute;
clip: rect(0,0,0,0);
clip: rect(0, 0, 0, 0);
pointer-events: none;
}
}

View File

@ -1,3 +1,5 @@
// stylelint-disable selector-no-qualifying-type
//
// Buttons
// --------------------------------------------------
@ -11,12 +13,12 @@
margin-bottom: 0; // For input.btn
font-weight: @btn-font-weight;
text-align: center;
white-space: nowrap;
vertical-align: middle;
touch-action: manipulation;
cursor: pointer;
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
border: 1px solid transparent;
white-space: nowrap;
.button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);
.user-select(none);
@ -38,9 +40,9 @@
&:active,
&.active {
outline: 0;
background-image: none;
.box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
outline: 0;
.box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));
}
&.disabled,
@ -92,8 +94,8 @@
// Make a button look and behave like a link
.btn-link {
font-weight: 400;
color: @link-color;
font-weight: normal;
border-radius: 0;
&,

View File

@ -1,3 +1,5 @@
// stylelint-disable media-feature-name-no-unknown
//
// Carousel
// --------------------------------------------------
@ -10,12 +12,12 @@
.carousel-inner {
position: relative;
overflow: hidden;
width: 100%;
overflow: hidden;
> .item {
display: none;
position: relative;
display: none;
.transition(.6s ease-in-out left);
// Account for jankitude on images
@ -27,8 +29,8 @@
// WebKit CSS3 transforms for supported devices
@media all and (transform-3d), (-webkit-transform-3d) {
.transition-transform(~'0.6s ease-in-out');
.backface-visibility(~'hidden');
.transition-transform(~"0.6s ease-in-out");
.backface-visibility(~"hidden");
.perspective(1000px);
&.next,
@ -93,34 +95,34 @@
.carousel-control {
position: absolute;
top: 0;
left: 0;
bottom: 0;
left: 0;
width: @carousel-control-width;
.opacity(@carousel-control-opacity);
font-size: @carousel-control-font-size;
color: @carousel-control-color;
text-align: center;
text-shadow: @carousel-text-shadow;
background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug
.opacity(@carousel-control-opacity);
// We can't have this transition here because WebKit cancels the carousel
// animation if you trip this while in the middle of another animation.
// Set gradients for backgrounds
&.left {
#gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));
#gradient > .horizontal(@start-color: rgba(0, 0, 0, .5); @end-color: rgba(0, 0, 0, .0001));
}
&.right {
left: auto;
right: 0;
#gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));
left: auto;
#gradient > .horizontal(@start-color: rgba(0, 0, 0, .0001); @end-color: rgba(0, 0, 0, .5));
}
// Hover/focus state
&:hover,
&:focus {
outline: 0;
color: @carousel-control-color;
text-decoration: none;
outline: 0;
.opacity(.9);
}
@ -131,9 +133,9 @@
.glyphicon-chevron-right {
position: absolute;
top: 50%;
margin-top: -10px;
z-index: 5;
display: inline-block;
margin-top: -10px;
}
.icon-prev,
.glyphicon-chevron-left {
@ -147,21 +149,20 @@
}
.icon-prev,
.icon-next {
width: 20px;
width: 20px;
height: 20px;
line-height: 1;
font-family: serif;
line-height: 1;
}
.icon-prev {
&:before {
content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
content: "\2039";// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
}
}
.icon-next {
&:before {
content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
content: "\203a";// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
}
}
}
@ -177,21 +178,18 @@
left: 50%;
z-index: 15;
width: 60%;
margin-left: -30%;
padding-left: 0;
list-style: none;
margin-left: -30%;
text-align: center;
list-style: none;
li {
display: inline-block;
width: 10px;
width: 10px;
height: 10px;
margin: 1px;
text-indent: -999px;
border: 1px solid @carousel-indicator-border-color;
border-radius: 10px;
cursor: pointer;
// IE8-9 hack for event handling
//
// Internet Explorer 8-9 does not support clicks on elements without a set
@ -202,12 +200,16 @@
// For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
// set alpha transparency for the best results possible.
background-color: #000 \9; // IE8
background-color: rgba(0,0,0,0); // IE9
background-color: rgba(0, 0, 0, 0); // IE9
border: 1px solid @carousel-indicator-border-color;
border-radius: 10px;
}
.active {
margin: 0;
width: 12px;
width: 12px;
height: 12px;
margin: 0;
background-color: @carousel-indicator-active-bg;
}
}
@ -217,15 +219,16 @@
// Hidden by default for smaller viewports
.carousel-caption {
position: absolute;
left: 15%;
right: 15%;
bottom: 20px;
left: 15%;
z-index: 10;
padding-top: 20px;
padding-bottom: 20px;
color: @carousel-caption-color;
text-align: center;
text-shadow: @carousel-text-shadow;
& .btn {
text-shadow: none; // No shadow for button elements in carousel-caption
}
@ -258,8 +261,8 @@
// Show and left align the captions
.carousel-caption {
left: 20%;
right: 20%;
left: 20%;
padding-bottom: 30px;
}

Some files were not shown because too many files have changed in this diff Show More