Update jquery and related libraries (#3069)

* Update jquery, jquery ui, jquery validate and flot to current versions

update jquery to 3.3.1
update jqueryui to 1.12.1
update jquery validate to 1.17.0
update jquery flot to 0.8.3

* Replace deprecated removed jquery functions

* Fix initial tab content loading in detailView

* Fix logout for new jquery version

* Fix tooltip detail displaying for new JQuery version

* Fix view all trigger in detailView for new JQuery version

* Fix breadcrumb click event handler for JQuery update

* Fix displaying of preselected zone in instanceWizard for new jQuery verion
This commit is contained in:
Philipp Bankonier 2019-01-16 17:22:22 +01:00 committed by Gabriel Beims Bräscher
parent ac73e7e671
commit 093ab722b3
45 changed files with 26767 additions and 22124 deletions

View File

@ -102,7 +102,7 @@
<p><translate key="message.select.a.zone"/></p>
<div class="select-area">
<div class="desc"></div>
<select name="zoneid" class="required">
<select name="zoneid" class="required" required>
</select>
</div>
</div>

View File

@ -74,14 +74,15 @@
// if it's "transparent"
$.color.extract = function (elem, css) {
var c;
do {
c = elem.css(css).toLowerCase();
// keep going until we find an element that has color, or
// we hit the body
// we hit the body or root (have no parent)
if (c != '' && c != 'transparent')
break;
elem = elem.parent();
} while (!$.nodeName(elem.get(0), "body"));
} while (elem.length && !$.nodeName(elem.get(0), "body"));
// catch Safari's way of signalling transparent
if (c == "rgba(0, 0, 0, 0)")

View File

@ -1,6 +1,9 @@
/*
Flot plugin for showing crosshairs, thin lines, when the mouse hovers
over the plot.
/* Flot plugin for showing crosshairs when the mouse hovers over the plot.
Copyright (c) 2007-2014 IOLA and Ole Laursen.
Licensed under the MIT license.
The plugin supports these options:
crosshair: {
mode: null or "x" or "y" or "xy"
@ -8,22 +11,21 @@ over the plot.
lineWidth: number
}
Set the mode to one of "x", "y" or "xy". The "x" mode enables a
vertical crosshair that lets you trace the values on the x axis, "y"
enables a horizontal crosshair and "xy" enables them both. "color" is
the color of the crosshair (default is "rgba(170, 0, 0, 0.80)"),
"lineWidth" is the width of the drawn lines (default is 1).
Set the mode to one of "x", "y" or "xy". The "x" mode enables a vertical
crosshair that lets you trace the values on the x axis, "y" enables a
horizontal crosshair and "xy" enables them both. "color" is the color of the
crosshair (default is "rgba(170, 0, 0, 0.80)"), "lineWidth" is the width of
the drawn lines (default is 1).
The plugin also adds four public methods:
- setCrosshair( pos )
Set the position of the crosshair. Note that this is cleared if
the user moves the mouse. "pos" is in coordinates of the plot and
should be on the form { x: xpos, y: ypos } (you can use x2/x3/...
if you're using multiple axes), which is coincidentally the same
format as what you get from a "plothover" event. If "pos" is null,
the crosshair is cleared.
Set the position of the crosshair. Note that this is cleared if the user
moves the mouse. "pos" is in coordinates of the plot and should be on the
form { x: xpos, y: ypos } (you can use x2/x3/... if you're using multiple
axes), which is coincidentally the same format as what you get from a
"plothover" event. If "pos" is null, the crosshair is cleared.
- clearCrosshair()
@ -31,18 +33,21 @@ The plugin also adds four public methods:
- lockCrosshair(pos)
Cause the crosshair to lock to the current location, no longer
updating if the user moves the mouse. Optionally supply a position
(passed on to setCrosshair()) to move it to.
Cause the crosshair to lock to the current location, no longer updating if
the user moves the mouse. Optionally supply a position (passed on to
setCrosshair()) to move it to.
Example usage:
var myFlot = $.plot( $("#graph"), ..., { crosshair: { mode: "x" } } };
$("#graph").bind( "plothover", function ( evt, position, item ) {
if ( item ) {
// Lock the crosshair to the data point being hovered
myFlot.lockCrosshair({ x: item.datapoint[0], y: item.datapoint[1] });
}
else {
myFlot.lockCrosshair({
x: item.datapoint[ 0 ],
y: item.datapoint[ 1 ]
});
} else {
// Return normal crosshair operation
myFlot.unlockCrosshair();
}
@ -84,11 +89,11 @@ The plugin also adds four public methods:
if (pos)
plot.setCrosshair(pos);
crosshair.locked = true;
}
};
plot.unlockCrosshair = function unlockCrosshair() {
crosshair.locked = false;
}
};
function onMouseOut(e) {
if (crosshair.locked)
@ -134,18 +139,22 @@ The plugin also adds four public methods:
ctx.translate(plotOffset.left, plotOffset.top);
if (crosshair.x != -1) {
var adj = plot.getOptions().crosshair.lineWidth % 2 ? 0.5 : 0;
ctx.strokeStyle = c.color;
ctx.lineWidth = c.lineWidth;
ctx.lineJoin = "round";
ctx.beginPath();
if (c.mode.indexOf("x") != -1) {
ctx.moveTo(crosshair.x, 0);
ctx.lineTo(crosshair.x, plot.height());
var drawX = Math.floor(crosshair.x) + adj;
ctx.moveTo(drawX, 0);
ctx.lineTo(drawX, plot.height());
}
if (c.mode.indexOf("y") != -1) {
ctx.moveTo(0, crosshair.y);
ctx.lineTo(plot.width(), crosshair.y);
var drawY = Math.floor(crosshair.y) + adj;
ctx.moveTo(0, drawY);
ctx.lineTo(plot.width(), drawY);
}
ctx.stroke();
}

View File

@ -1,64 +1,75 @@
/*
Flot plugin for computing bottoms for filled line and bar charts.
/* Flot plugin for computing bottoms for filled line and bar charts.
The case: you've got two series that you want to fill the area
between. In Flot terms, you need to use one as the fill bottom of the
other. You can specify the bottom of each data point as the third
coordinate manually, or you can use this plugin to compute it for you.
Copyright (c) 2007-2014 IOLA and Ole Laursen.
Licensed under the MIT license.
In order to name the other series, you need to give it an id, like this
The case: you've got two series that you want to fill the area between. In Flot
terms, you need to use one as the fill bottom of the other. You can specify the
bottom of each data point as the third coordinate manually, or you can use this
plugin to compute it for you.
In order to name the other series, you need to give it an id, like this:
var dataset = [
{ data: [ ... ], id: "foo" } , // use default bottom
{ data: [ ... ], fillBetween: "foo" }, // use first dataset as bottom
];
$.plot($("#placeholder"), dataset, { line: { show: true, fill: true }});
$.plot($("#placeholder"), dataset, { lines: { show: true, fill: true }});
As a convenience, if the id given is a number that doesn't appear as
an id in the series, it is interpreted as the index in the array
instead (so fillBetween: 0 can also mean the first series).
As a convenience, if the id given is a number that doesn't appear as an id in
the series, it is interpreted as the index in the array instead (so fillBetween:
0 can also mean the first series).
Internally, the plugin modifies the datapoints in each series. For line series,
extra data points might be inserted through interpolation. Note that at points
where the bottom line is not defined (due to a null point or start/end of line),
the current line will show a gap too. The algorithm comes from the
jquery.flot.stack.js plugin, possibly some code could be shared.
Internally, the plugin modifies the datapoints in each series. For
line series, extra data points might be inserted through
interpolation. Note that at points where the bottom line is not
defined (due to a null point or start/end of line), the current line
will show a gap too. The algorithm comes from the jquery.flot.stack.js
plugin, possibly some code could be shared.
*/
(function ( $ ) {
var options = {
series: { fillBetween: null } // or number
series: {
fillBetween: null // or number
}
};
function init( plot ) {
function findBottomSeries( s, allseries ) {
var i;
for ( i = 0; i < allseries.length; ++i ) {
if (allseries[i].id == s.fillBetween)
if ( allseries[ i ].id === s.fillBetween ) {
return allseries[ i ];
}
}
if (typeof s.fillBetween == "number") {
i = s.fillBetween;
if (i < 0 || i >= allseries.length)
if ( typeof s.fillBetween === "number" ) {
if ( s.fillBetween < 0 || s.fillBetween >= allseries.length ) {
return null;
return allseries[i];
}
return allseries[ s.fillBetween ];
}
return null;
}
function computeFillBottoms( plot, s, datapoints ) {
if (s.fillBetween == null)
if ( s.fillBetween == null ) {
return;
}
var other = findBottomSeries( s, plot.getData() );
if (!other)
if ( !other ) {
return;
}
var ps = datapoints.pointsize,
points = datapoints.points,
@ -70,81 +81,109 @@ plugin, possibly some code could be shared.
withbottom = ps > 2 && datapoints.format[2].y,
withsteps = withlines && s.lines.steps,
fromgap = true,
i = 0, j = 0, l;
i = 0,
j = 0,
l, m;
while ( true ) {
if (i >= points.length)
if ( i >= points.length ) {
break;
}
l = newpoints.length;
if ( points[ i ] == null ) {
// copy gaps
for (m = 0; m < ps; ++m)
for ( m = 0; m < ps; ++m ) {
newpoints.push( points[ i + m ] );
i += ps;
}
else if (j >= otherpoints.length) {
i += ps;
} else if ( j >= otherpoints.length ) {
// for lines, we can't use the rest of the points
if ( !withlines ) {
for (m = 0; m < ps; ++m)
for ( m = 0; m < ps; ++m ) {
newpoints.push( points[ i + m ] );
}
i += ps;
}
else if (otherpoints[j] == null) {
i += ps;
} else if ( otherpoints[ j ] == null ) {
// oops, got a gap
for (m = 0; m < ps; ++m)
for ( m = 0; m < ps; ++m ) {
newpoints.push( null );
}
fromgap = true;
j += otherps;
}
else {
} else {
// cases where we actually got two points
px = points[ i ];
py = points[ i + 1 ];
qx = otherpoints[ j ];
qy = otherpoints[ j + 1 ];
bottom = 0;
if (px == qx) {
for (m = 0; m < ps; ++m)
if ( px === qx ) {
for ( m = 0; m < ps; ++m ) {
newpoints.push( points[ i + m ] );
}
//newpoints[ l + 1 ] += qy;
bottom = qy;
i += ps;
j += otherps;
}
else if (px > qx) {
} else if ( px > qx ) {
// we got past point below, might need to
// insert interpolated extra point
if ( withlines && i > 0 && points[ i - ps ] != null ) {
intery = py + ( points[ i - ps + 1 ] - py ) * ( qx - px ) / ( points[ i - ps ] - px );
newpoints.push( qx );
newpoints.push(intery)
for (m = 2; m < ps; ++m)
newpoints.push( intery );
for ( m = 2; m < ps; ++m ) {
newpoints.push( points[ i + m ] );
}
bottom = qy;
}
j += otherps;
}
else { // px < qx
if (fromgap && withlines) {
} else { // px < qx
// if we come from a gap, we just skip this point
if ( fromgap && withlines ) {
i += ps;
continue;
}
for (m = 0; m < ps; ++m)
for ( m = 0; m < ps; ++m ) {
newpoints.push( points[ i + m ] );
}
// we might be able to interpolate a point below,
// this can give us a better y
if (withlines && j > 0 && otherpoints[j - otherps] != null)
if ( withlines && j > 0 && otherpoints[ j - otherps ] != null ) {
bottom = qy + ( otherpoints[ j - otherps + 1 ] - qy ) * ( px - qx ) / ( otherpoints[ j - otherps ] - qx );
}
//newpoints[l + 1] += bottom;
@ -153,17 +192,20 @@ plugin, possibly some code could be shared.
fromgap = false;
if (l != newpoints.length && withbottom)
if ( l !== newpoints.length && withbottom ) {
newpoints[ l + 2 ] = bottom;
}
}
// maintain the line steps invariant
if (withsteps && l != newpoints.length && l > 0
&& newpoints[l] != null
&& newpoints[l] != newpoints[l - ps]
&& newpoints[l + 1] != newpoints[l - ps + 1]) {
for (m = 0; m < ps; ++m)
if ( withsteps && l !== newpoints.length && l > 0 &&
newpoints[ l ] !== null &&
newpoints[ l ] !== newpoints[ l - ps ] &&
newpoints[ l + 1 ] !== newpoints[ l - ps + 1 ] ) {
for (m = 0; m < ps; ++m) {
newpoints[ l + ps + m ] = newpoints[ l + m ];
}
newpoints[ l + 1 ] = newpoints[ l - ps + 1 ];
}
}
@ -177,7 +219,8 @@ plugin, possibly some code could be shared.
$.plot.plugins.push({
init: init,
options: options,
name: 'fillbetween',
version: '1.0'
name: "fillbetween",
version: "1.0"
});
})(jQuery);

View File

@ -1,28 +1,29 @@
/*
Flot plugin for plotting images, e.g. useful for putting ticks on a
prerendered complex visualization.
/* Flot plugin for plotting images.
Copyright (c) 2007-2014 IOLA and Ole Laursen.
Licensed under the MIT license.
The data syntax is [ [ image, x1, y1, x2, y2 ], ... ] where (x1, y1) and
(x2, y2) are where you intend the two opposite corners of the image to
end up in the plot. Image must be a fully loaded Javascript image (you
can make one with new Image()). If the image is not complete, it's
skipped when plotting.
(x2, y2) are where you intend the two opposite corners of the image to end up
in the plot. Image must be a fully loaded Javascript image (you can make one
with new Image()). If the image is not complete, it's skipped when plotting.
There are two helpers included for retrieving images. The easiest work
the way that you put in URLs instead of images in the data (like
["myimage.png", 0, 0, 10, 10]), then call $.plot.image.loadData(data,
options, callback) where data and options are the same as you pass in
to $.plot. This loads the images, replaces the URLs in the data with
the corresponding images and calls "callback" when all images are
loaded (or failed loading). In the callback, you can then call $.plot
with the data set. See the included example.
There are two helpers included for retrieving images. The easiest work the way
that you put in URLs instead of images in the data, like this:
A more low-level helper, $.plot.image.load(urls, callback) is also
included. Given a list of URLs, it calls callback with an object
mapping from URL to Image object when all images are loaded or have
failed loading.
[ "myimage.png", 0, 0, 10, 10 ]
Options for the plugin are
Then call $.plot.image.loadData( data, options, callback ) where data and
options are the same as you pass in to $.plot. This loads the images, replaces
the URLs in the data with the corresponding images and calls "callback" when
all images are loaded (or failed loading). In the callback, you can then call
$.plot with the data set. See the included example.
A more low-level helper, $.plot.image.load(urls, callback) is also included.
Given a list of URLs, it calls callback with an object mapping from URL to
Image object when all images are loaded or have failed loading.
The plugin supports these options:
series: {
images: {
@ -32,20 +33,22 @@ Options for the plugin are
}
}
which can be specified for a specific series
They can be specified for a specific series:
$.plot($("#placeholder"), [{ data: [ ... ], images: { ... } ])
$.plot( $("#placeholder"), [{
data: [ ... ],
images: { ... }
])
Note that because the data format is different from usual data points,
you can't use images with anything else in a specific data series.
Note that because the data format is different from usual data points, you
can't use images with anything else in a specific data series.
Setting "anchor" to "center" causes the pixels in the image to be
anchored at the corner pixel centers inside of at the pixel corners,
effectively letting half a pixel stick out to each side in the plot.
Setting "anchor" to "center" causes the pixels in the image to be anchored at
the corner pixel centers inside of at the pixel corners, effectively letting
half a pixel stick out to each side in the plot.
A possible future direction could be support for tiling for large
images (like Google Maps).
A possible future direction could be support for tiling for large images (like
Google Maps).
*/
@ -110,7 +113,7 @@ images (like Google Maps).
$('<img />').load(handler).error(handler).attr('src', url);
});
}
};
function drawSeries(plot, ctx, series) {
var plotOffset = plot.getPlotOffset();

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,14 @@
/*
Flot plugin for adding panning and zooming capabilities to a plot.
/* Flot plugin for adding the ability to pan and zoom the plot.
The default behaviour is double click and scrollwheel up/down to zoom
in, drag to pan. The plugin defines plot.zoom({ center }),
plot.zoomOut() and plot.pan(offset) so you easily can add custom
controls. It also fires a "plotpan" and "plotzoom" event when
something happens, useful for synchronizing plots.
Copyright (c) 2007-2014 IOLA and Ole Laursen.
Licensed under the MIT license.
Options:
The default behaviour is double click and scrollwheel up/down to zoom in, drag
to pan. The plugin defines plot.zoom({ center }), plot.zoomOut() and
plot.pan( offset ) so you easily can add custom controls. It also fires
"plotpan" and "plotzoom" events, useful for synchronizing plots.
The plugin supports these options:
zoom: {
interactive: false
@ -27,30 +28,30 @@ Options:
}
"interactive" enables the built-in drag/click behaviour. If you enable
interactive for pan, then you'll have a basic plot that supports
moving around; the same for zoom.
interactive for pan, then you'll have a basic plot that supports moving
around; the same for zoom.
"amount" specifies the default amount to zoom in (so 1.5 = 150%)
relative to the current viewport.
"amount" specifies the default amount to zoom in (so 1.5 = 150%) relative to
the current viewport.
"cursor" is a standard CSS mouse cursor string used for visual
feedback to the user when dragging.
"cursor" is a standard CSS mouse cursor string used for visual feedback to the
user when dragging.
"frameRate" specifies the maximum number of times per second the plot
will update itself while the user is panning around on it (set to null
to disable intermediate pans, the plot will then not update until the
mouse button is released).
"frameRate" specifies the maximum number of times per second the plot will
update itself while the user is panning around on it (set to null to disable
intermediate pans, the plot will then not update until the mouse button is
released).
"zoomRange" is the interval in which zooming can happen, e.g. with
zoomRange: [1, 100] the zoom will never scale the axis so that the
difference between min and max is smaller than 1 or larger than 100.
You can set either end to null to ignore, e.g. [1, null]. If you set
zoomRange to false, zooming on that axis will be disabled.
"zoomRange" is the interval in which zooming can happen, e.g. with zoomRange:
[1, 100] the zoom will never scale the axis so that the difference between min
and max is smaller than 1 or larger than 100. You can set either end to null
to ignore, e.g. [1, null]. If you set zoomRange to false, zooming on that axis
will be disabled.
"panRange" confines the panning to stay within a range, e.g. with
panRange: [-10, 20] panning stops at -10 in one end and at 20 in the
other. Either can be null, e.g. [-10, null]. If you set
panRange to false, panning on that axis will be disabled.
"panRange" confines the panning to stay within a range, e.g. with panRange:
[-10, 20] panning stops at -10 in one end and at 20 in the other. Either can
be null, e.g. [-10, null]. If you set panRange to false, panning on that axis
will be disabled.
Example API usage:
@ -68,18 +69,16 @@ Example API usage:
// pan 100 pixels to the left and 20 down
plot.pan({ left: -100, top: 20 })
Here, "center" specifies where the center of the zooming should
happen. Note that this is defined in pixel space, not the space of the
data points (you can use the p2c helpers on the axes in Flot to help
you convert between these).
Here, "center" specifies where the center of the zooming should happen. Note
that this is defined in pixel space, not the space of the data points (you can
use the p2c helpers on the axes in Flot to help you convert between these).
"amount" is the amount to zoom the viewport relative to the current
range, so 1 is 100% (i.e. no change), 1.5 is 150% (zoom in), 0.7 is
70% (zoom out). You can set the default in the options.
"amount" is the amount to zoom the viewport relative to the current range, so
1 is 100% (i.e. no change), 1.5 is 150% (zoom in), 0.7 is 70% (zoom out). You
can set the default in the options.
*/
// First two dependencies, jquery.event.drag.js and
// jquery.mousewheel.js, we put them inline here to save people the
// effort of downloading them.
@ -88,21 +87,20 @@ range, so 1 is 100% (i.e. no change), 1.5 is 150% (zoom in), 0.7 is
jquery.event.drag.js ~ v1.5 ~ Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)
Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-LICENSE.txt
*/
(function(E){E.fn.drag=function(L,K,J){if(K){this.bind("dragstart",L)}if(J){this.bind("dragend",J)}return !L?this.trigger("drag"):this.bind("drag",K?K:L)};var A=E.event,B=A.special,F=B.drag={not:":input",distance:0,which:1,dragging:false,setup:function(J){J=E.extend({distance:F.distance,which:F.which,not:F.not},J||{});J.distance=I(J.distance);A.add(this,"mousedown",H,J);if(this.attachEvent){this.attachEvent("ondragstart",D)}},teardown:function(){A.remove(this,"mousedown",H);if(this===F.dragging){F.dragging=F.proxy=false}G(this,true);if(this.detachEvent){this.detachEvent("ondragstart",D)}}};B.dragstart=B.dragend={setup:function(){},teardown:function(){}};function H(L){var K=this,J,M=L.data||{};if(M.elem){K=L.dragTarget=M.elem;L.dragProxy=F.proxy||K;L.cursorOffsetX=M.pageX-M.left;L.cursorOffsetY=M.pageY-M.top;L.offsetX=L.pageX-L.cursorOffsetX;L.offsetY=L.pageY-L.cursorOffsetY}else{if(F.dragging||(M.which>0&&L.which!=M.which)||E(L.target).is(M.not)){return }}switch(L.type){case"mousedown":E.extend(M,E(K).offset(),{elem:K,target:L.target,pageX:L.pageX,pageY:L.pageY});A.add(document,"mousemove mouseup",H,M);G(K,false);F.dragging=null;return false;case !F.dragging&&"mousemove":if(I(L.pageX-M.pageX)+I(L.pageY-M.pageY)<M.distance){break}L.target=M.target;J=C(L,"dragstart",K);if(J!==false){F.dragging=K;F.proxy=L.dragProxy=E(J||K)[0]}case"mousemove":if(F.dragging){J=C(L,"drag",K);if(B.drop){B.drop.allowed=(J!==false);B.drop.handler(L)}if(J!==false){break}L.type="mouseup"}case"mouseup":A.remove(document,"mousemove mouseup",H);if(F.dragging){if(B.drop){B.drop.handler(L)}C(L,"dragend",K)}G(K,true);F.dragging=F.proxy=M.elem=false;break}return true}function C(M,K,L){M.type=K;var J=E.event.handle.call(L,M);return J===false?false:J||M.result}function I(J){return Math.pow(J,2)}function D(){return(F.dragging===false)}function G(K,J){if(!K){return }K.unselectable=J?"off":"on";K.onselectstart=function(){return J};if(K.style){K.style.MozUserSelect=J?"":"none"}}})(jQuery);
(function(a){function e(h){var k,j=this,l=h.data||{};if(l.elem)j=h.dragTarget=l.elem,h.dragProxy=d.proxy||j,h.cursorOffsetX=l.pageX-l.left,h.cursorOffsetY=l.pageY-l.top,h.offsetX=h.pageX-h.cursorOffsetX,h.offsetY=h.pageY-h.cursorOffsetY;else if(d.dragging||l.which>0&&h.which!=l.which||a(h.target).is(l.not))return;switch(h.type){case"mousedown":return a.extend(l,a(j).offset(),{elem:j,target:h.target,pageX:h.pageX,pageY:h.pageY}),b.add(document,"mousemove mouseup",e,l),i(j,!1),d.dragging=null,!1;case!d.dragging&&"mousemove":if(g(h.pageX-l.pageX)+g(h.pageY-l.pageY)<l.distance)break;h.target=l.target,k=f(h,"dragstart",j),k!==!1&&(d.dragging=j,d.proxy=h.dragProxy=a(k||j)[0]);case"mousemove":if(d.dragging){if(k=f(h,"drag",j),c.drop&&(c.drop.allowed=k!==!1,c.drop.handler(h)),k!==!1)break;h.type="mouseup"}case"mouseup":b.remove(document,"mousemove mouseup",e),d.dragging&&(c.drop&&c.drop.handler(h),f(h,"dragend",j)),i(j,!0),d.dragging=d.proxy=l.elem=!1}return!0}function f(b,c,d){b.type=c;var e=a.event.dispatch.call(d,b);return e===!1?!1:e||b.result}function g(a){return Math.pow(a,2)}function h(){return d.dragging===!1}function i(a,b){a&&(a.unselectable=b?"off":"on",a.onselectstart=function(){return b},a.style&&(a.style.MozUserSelect=b?"":"none"))}a.fn.drag=function(a,b,c){return b&&this.bind("dragstart",a),c&&this.bind("dragend",c),a?this.bind("drag",b?b:a):this.trigger("drag")};var b=a.event,c=b.special,d=c.drag={not:":input",distance:0,which:1,dragging:!1,setup:function(c){c=a.extend({distance:d.distance,which:d.which,not:d.not},c||{}),c.distance=g(c.distance),b.add(this,"mousedown",e,c),this.attachEvent&&this.attachEvent("ondragstart",h)},teardown:function(){b.remove(this,"mousedown",e),this===d.dragging&&(d.dragging=d.proxy=!1),i(this,!0),this.detachEvent&&this.detachEvent("ondragstart",h)}};c.dragstart=c.dragend={setup:function(){},teardown:function(){}}})(jQuery);
/* jquery.mousewheel.min.js
* Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net)
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
* Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net)
* Licensed under the MIT License (LICENSE.txt).
* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
* Thanks to: Seamus Leahy for adding deltaX and deltaY
*
* Version: 3.0.2
* Version: 3.0.6
*
* Requires: 1.2.2+
*/
(function(c){var a=["DOMMouseScroll","mousewheel"];c.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var d=a.length;d;){this.addEventListener(a[--d],b,false)}}else{this.onmousewheel=b}},teardown:function(){if(this.removeEventListener){for(var d=a.length;d;){this.removeEventListener(a[--d],b,false)}}else{this.onmousewheel=null}}};c.fn.extend({mousewheel:function(d){return d?this.bind("mousewheel",d):this.trigger("mousewheel")},unmousewheel:function(d){return this.unbind("mousewheel",d)}});function b(f){var d=[].slice.call(arguments,1),g=0,e=true;f=c.event.fix(f||window.event);f.type="mousewheel";if(f.wheelDelta){g=f.wheelDelta/120}if(f.detail){g=-f.detail/3}d.unshift(f,g);return c.event.handle.apply(this,d)}})(jQuery);
(function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type="mousewheel";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;void 0!==b.axis&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);void 0!==b.wheelDeltaY&&(g=b.wheelDeltaY/120);void 0!==b.wheelDeltaX&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=["DOMMouseScroll","mousewheel"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]=d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,!1);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,!1);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);
@ -137,6 +135,7 @@ Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-L
}
function onMouseWheel(e, delta) {
e.preventDefault();
onZoomClick(e, delta < 0);
return false;
}
@ -200,11 +199,11 @@ Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-L
args = {};
if (!args.amount)
args.amount = plot.getOptions().zoom.amount
args.amount = plot.getOptions().zoom.amount;
args.amount = 1 / args.amount;
plot.zoom(args);
}
};
plot.zoom = function (args) {
if (!args)
@ -234,7 +233,8 @@ Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-L
var opts = axis.options,
min = minmax[axis.direction].min,
max = minmax[axis.direction].max,
zr = opts.zoomRange;
zr = opts.zoomRange,
pr = opts.panRange;
if (zr === false) // no zooming on this axis
return;
@ -248,10 +248,20 @@ Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-L
max = tmp;
}
//Check that we are in panRange
if (pr) {
if (pr[0] != null && min < pr[0]) {
min = pr[0];
}
if (pr[1] != null && max > pr[1]) {
max = pr[1];
}
}
var range = max - min;
if (zr &&
((zr[0] != null && range < zr[0]) ||
(zr[1] != null && range > zr[1])))
((zr[0] != null && range < zr[0] && amount >1) ||
(zr[1] != null && range > zr[1] && amount <1)))
return;
opts.min = min;
@ -262,8 +272,8 @@ Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-L
plot.draw();
if (!args.preventEvent)
plot.getPlaceholder().trigger("plotzoom", [ plot ]);
}
plot.getPlaceholder().trigger("plotzoom", [ plot, args ]);
};
plot.pan = function (args) {
var delta = {
@ -310,8 +320,8 @@ Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-L
plot.draw();
if (!args.preventEvent)
plot.getPlaceholder().trigger("plotpan", [ plot ]);
}
plot.getPlaceholder().trigger("plotpan", [ plot, args ]);
};
function shutdown(plot, eventHolder) {
eventHolder.unbind(plot.getOptions().zoom.trigger, onZoomClick);

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +1,16 @@
/*
Flot plugin for automatically redrawing plots when the placeholder
size changes, e.g. on window resizes.
/* Flot plugin for automatically redrawing plots as the placeholder resizes.
It works by listening for changes on the placeholder div (through the
jQuery resize event plugin) - if the size changes, it will redraw the
plot.
Copyright (c) 2007-2014 IOLA and Ole Laursen.
Licensed under the MIT license.
It works by listening for changes on the placeholder div (through the jQuery
resize event plugin) - if the size changes, it will redraw the plot.
There are no options. If you need to disable the plugin for some plots, you
can just fix the size of their placeholders.
There are no options. If you need to disable the plugin for some
plots, you can just fix the size of their placeholders.
*/
/* Inline dependency:
* jQuery resize event - v1.1 - 3/14/2010
* http://benalman.com/projects/jquery-resize-plugin/
@ -19,8 +19,7 @@ plots, you can just fix the size of their placeholders.
* Dual licensed under the MIT and GPL licenses.
* http://benalman.com/about/license/
*/
(function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k="setTimeout",j="resize",d=j+"-special-event",b="delay",f="throttleWindow";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this);
(function($,e,t){"$:nomunge";var i=[],n=$.resize=$.extend($.resize,{}),a,r=false,s="setTimeout",u="resize",m=u+"-special-event",o="pendingDelay",l="activeDelay",f="throttleWindow";n[o]=200;n[l]=20;n[f]=true;$.event.special[u]={setup:function(){if(!n[f]&&this[s]){return false}var e=$(this);i.push(this);e.data(m,{w:e.width(),h:e.height()});if(i.length===1){a=t;h()}},teardown:function(){if(!n[f]&&this[s]){return false}var e=$(this);for(var t=i.length-1;t>=0;t--){if(i[t]==this){i.splice(t,1);break}}e.removeData(m);if(!i.length){if(r){cancelAnimationFrame(a)}else{clearTimeout(a)}a=null}},add:function(e){if(!n[f]&&this[s]){return false}var i;function a(e,n,a){var r=$(this),s=r.data(m)||{};s.w=n!==t?n:r.width();s.h=a!==t?a:r.height();i.apply(this,arguments)}if($.isFunction(e)){i=e;return a}else{i=e.handler;e.handler=a}}};function h(t){if(r===true){r=t||1}for(var s=i.length-1;s>=0;s--){var l=$(i[s]);if(l[0]==e||l.is(":visible")){var f=l.width(),c=l.height(),d=l.data(m);if(d&&(f!==d.w||c!==d.h)){l.trigger(u,[d.w=f,d.h=c]);r=t||true}}else{d=l.data(m);d.w=0;d.h=0}}if(a!==null){if(r&&(t==null||t-r<1e3)){a=e.requestAnimationFrame(h)}else{a=setTimeout(h,n[o]);r=false}}}if(!e.requestAnimationFrame){e.requestAnimationFrame=function(){return e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(t,i){return e.setTimeout(function(){t((new Date).getTime())},n[l])}}()}if(!e.cancelAnimationFrame){e.cancelAnimationFrame=function(){return e.webkitCancelRequestAnimationFrame||e.mozCancelRequestAnimationFrame||e.oCancelRequestAnimationFrame||e.msCancelRequestAnimationFrame||clearTimeout}()}})(jQuery,this);
(function ($) {
var options = { }; // no options

View File

@ -1,24 +1,37 @@
/*
Flot plugin for selecting regions.
/* Flot plugin for selecting regions of a plot.
The plugin defines the following options:
Copyright (c) 2007-2014 IOLA and Ole Laursen.
Licensed under the MIT license.
The plugin supports these options:
selection: {
mode: null or "x" or "y" or "xy",
color: color
color: color,
shape: "round" or "miter" or "bevel",
minSize: number of pixels
}
Selection support is enabled by setting the mode to one of "x", "y" or
"xy". In "x" mode, the user will only be able to specify the x range,
similarly for "y" mode. For "xy", the selection becomes a rectangle
where both ranges can be specified. "color" is color of the selection
(if you need to change the color later on, you can get to it with
plot.getOptions().selection.color).
Selection support is enabled by setting the mode to one of "x", "y" or "xy".
In "x" mode, the user will only be able to specify the x range, similarly for
"y" mode. For "xy", the selection becomes a rectangle where both ranges can be
specified. "color" is color of the selection (if you need to change the color
later on, you can get to it with plot.getOptions().selection.color). "shape"
is the shape of the corners of the selection.
When selection support is enabled, a "plotselected" event will be
emitted on the DOM element you passed into the plot function. The
event handler gets a parameter with the ranges selected on the axes,
like this:
"minSize" is the minimum size a selection can be in pixels. This value can
be customized to determine the smallest size a selection can be and still
have the selection rectangle be displayed. When customizing this value, the
fact that it refers to pixels, not axis units must be taken into account.
Thus, for example, if there is a bar graph in time mode with BarWidth set to 1
minute, setting "minSize" to 1 will not make the minimum selection size 1
minute, but rather 1 pixel. Note also that setting "minSize" to 0 will prevent
"plotunselected" events from being fired when the user clicks the mouse without
dragging.
When selection support is enabled, a "plotselected" event will be emitted on
the DOM element you passed into the plot function. The event handler gets a
parameter with the ranges selected on the axes, like this:
placeholder.bind( "plotselected", function( event, ranges ) {
alert("You selected " + ranges.xaxis.from + " to " + ranges.xaxis.to)
@ -26,32 +39,32 @@ like this:
// x2axis, x3axis, ...
});
The "plotselected" event is only fired when the user has finished
making the selection. A "plotselecting" event is fired during the
process with the same parameters as the "plotselected" event, in case
you want to know what's happening while it's happening,
The "plotselected" event is only fired when the user has finished making the
selection. A "plotselecting" event is fired during the process with the same
parameters as the "plotselected" event, in case you want to know what's
happening while it's happening,
A "plotunselected" event with no arguments is emitted when the user
clicks the mouse to remove the selection.
A "plotunselected" event with no arguments is emitted when the user clicks the
mouse to remove the selection. As stated above, setting "minSize" to 0 will
destroy this behavior.
The plugin allso adds the following methods to the plot object:
- setSelection( ranges, preventEvent )
Set the selection rectangle. The passed in ranges is on the same
form as returned in the "plotselected" event. If the selection mode
is "x", you should put in either an xaxis range, if the mode is "y"
you need to put in an yaxis range and both xaxis and yaxis if the
selection mode is "xy", like this:
Set the selection rectangle. The passed in ranges is on the same form as
returned in the "plotselected" event. If the selection mode is "x", you
should put in either an xaxis range, if the mode is "y" you need to put in
an yaxis range and both xaxis and yaxis if the selection mode is "xy", like
this:
setSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } });
setSelection will trigger the "plotselected" event when called. If
you don't want that to happen, e.g. if you're inside a
"plotselected" handler, pass true as the second parameter. If you
are using multiple axes, you can specify the ranges on any of those,
e.g. as x2axis/x3axis/... instead of xaxis, the plugin picks the
first one it sees.
setSelection will trigger the "plotselected" event when called. If you don't
want that to happen, e.g. if you're inside a "plotselected" handler, pass
true as the second parameter. If you are using multiple axes, you can
specify the ranges on any of those, e.g. as x2axis/x3axis/... instead of
xaxis, the plugin picks the first one it sees.
- clearSelection( preventEvent )
@ -60,9 +73,8 @@ The plugin allso adds the following methods to the plot object:
- getSelection()
Returns the current selection in the same format as the
"plotselected" event. If there's currently no selection, the
function returns null.
Returns the current selection in the same format as the "plotselected"
event. If there's currently no selection, the function returns null.
*/
@ -147,6 +159,8 @@ The plugin allso adds the following methods to the plot object:
if (!selectionIsSane())
return null;
if (!selection.show) return null;
var r = {}, c1 = selection.first, c2 = selection.second;
$.each(plot.getAxes(), function (name, axis) {
if (axis.used) {
@ -274,7 +288,7 @@ The plugin allso adds the following methods to the plot object:
}
function selectionIsSane() {
var minSize = 5;
var minSize = plot.getOptions().selection.minSize;
return Math.abs(selection.second.x - selection.first.x) >= minSize &&
Math.abs(selection.second.y - selection.first.y) >= minSize;
}
@ -305,13 +319,13 @@ The plugin allso adds the following methods to the plot object:
ctx.strokeStyle = c.scale('a', 0.8).toString();
ctx.lineWidth = 1;
ctx.lineJoin = "round";
ctx.lineJoin = o.selection.shape;
ctx.fillStyle = c.scale('a', 0.4).toString();
var x = Math.min(selection.first.x, selection.second.x),
y = Math.min(selection.first.y, selection.second.y),
w = Math.abs(selection.second.x - selection.first.x),
h = Math.abs(selection.second.y - selection.first.y);
var x = Math.min(selection.first.x, selection.second.x) + 0.5,
y = Math.min(selection.first.y, selection.second.y) + 0.5,
w = Math.abs(selection.second.x - selection.first.x) - 1,
h = Math.abs(selection.second.y - selection.first.y) - 1;
ctx.fillRect(x, y, w, h);
ctx.strokeRect(x, y, w, h);
@ -335,7 +349,9 @@ The plugin allso adds the following methods to the plot object:
options: {
selection: {
mode: null, // one of null, "x", "y" or "xy"
color: "#e8cfac"
color: "#e8cfac",
shape: "round", // one of "round", "miter", or "bevel"
minSize: 5 // minimum number of pixels
}
},
name: 'selection',

View File

@ -1,34 +1,38 @@
/*
Flot plugin for stacking data sets, i.e. putting them on top of each
other, for accumulative graphs.
/* Flot plugin for stacking data sets rather than overlyaing them.
The plugin assumes the data is sorted on x (or y if stacking
horizontally). For line charts, it is assumed that if a line has an
undefined gap (from a null point), then the line above it should have
the same gap - insert zeros instead of "null" if you want another
behaviour. This also holds for the start and end of the chart. Note
that stacking a mix of positive and negative values in most instances
doesn't make sense (so it looks weird).
Copyright (c) 2007-2014 IOLA and Ole Laursen.
Licensed under the MIT license.
Two or more series are stacked when their "stack" attribute is set to
the same key (which can be any number or string or just "true"). To
specify the default stack, you can set
The plugin assumes the data is sorted on x (or y if stacking horizontally).
For line charts, it is assumed that if a line has an undefined gap (from a
null point), then the line above it should have the same gap - insert zeros
instead of "null" if you want another behaviour. This also holds for the start
and end of the chart. Note that stacking a mix of positive and negative values
in most instances doesn't make sense (so it looks weird).
Two or more series are stacked when their "stack" attribute is set to the same
key (which can be any number or string or just "true"). To specify the default
stack, you can set the stack option like this:
series: {
stack: null or true or key (number/string)
stack: null/false, true, or a key (number/string)
}
or specify it for a specific series
You can also specify it for a single series, like this:
$.plot($("#placeholder"), [{ data: [ ... ], stack: true }])
$.plot( $("#placeholder"), [{
data: [ ... ],
stack: true
}])
The stacking order is determined by the order of the data series in
the array (later series end up on top of the previous).
The stacking order is determined by the order of the data series in the array
(later series end up on top of the previous).
Internally, the plugin modifies the datapoints in each series, adding an
offset to the y value. For line series, extra data points are inserted through
interpolation. If there's a second y value, it's also adjusted (e.g for bar
charts or filled areas).
Internally, the plugin modifies the datapoints in each series, adding
an offset to the y value. For line series, extra data points are
inserted through interpolation. If there's a second y value, it's also
adjusted (e.g for bar charts or filled areas).
*/
(function ($) {
@ -38,7 +42,7 @@ adjusted (e.g for bar charts or filled areas).
function init(plot) {
function findMatchingSeries(s, allseries) {
var res = null
var res = null;
for (var i = 0; i < allseries.length; ++i) {
if (s == allseries[i])
break;
@ -51,7 +55,7 @@ adjusted (e.g for bar charts or filled areas).
}
function stackData(plot, s, datapoints) {
if (s.stack == null)
if (s.stack == null || s.stack === false)
return;
var other = findMatchingSeries(s, plot.getData());
@ -71,7 +75,7 @@ adjusted (e.g for bar charts or filled areas).
fromgap = true,
keyOffset = horizontal ? 1 : 0,
accumulateOffset = horizontal ? 0 : 1,
i = 0, j = 0, l;
i = 0, j = 0, l, m;
while (true) {
if (i >= points.length)

View File

@ -1,8 +1,9 @@
/*
Flot plugin that adds some extra symbols for plotting points.
/* Flot plugin that adds some extra symbols for plotting points.
The symbols are accessed as strings through the standard symbol
choice:
Copyright (c) 2007-2014 IOLA and Ole Laursen.
Licensed under the MIT license.
The symbols are accessed as strings through the standard symbol options:
series: {
points: {
@ -51,7 +52,7 @@ choice:
ctx.moveTo(x - size, y + size);
ctx.lineTo(x + size, y - size);
}
}
};
var s = series.points.symbol;
if (handlers[s])

View File

@ -1,6 +1,9 @@
/*
Flot plugin for thresholding data. Controlled through the option
"threshold" in either the global series options
/* Flot plugin for thresholding data.
Copyright (c) 2007-2014 IOLA and Ole Laursen.
Licensed under the MIT license.
The plugin supports these options:
series: {
threshold: {
@ -9,18 +12,34 @@ Flot plugin for thresholding data. Controlled through the option
}
}
or in a specific series
It can also be applied to a single series, like this:
$.plot($("#placeholder"), [{ data: [ ... ], threshold: { ... }}])
$.plot( $("#placeholder"), [{
data: [ ... ],
threshold: { ... }
}])
The data points below "below" are drawn with the specified color. This
makes it easy to mark points below 0, e.g. for budget data.
An array can be passed for multiple thresholding, like this:
threshold: [{
below: number1
color: color1
},{
below: number2
color: color2
}]
These multiple threshold objects can be passed in any order since they are
sorted by the processing function.
The data points below "below" are drawn with the specified color. This makes
it easy to mark points below 0, e.g. for budget data.
Internally, the plugin works by splitting the data into two series, above and
below the threshold. The extra series below the threshold will have its label
cleared and the special "originSeries" attribute set to the original series.
You may need to check for this in hover events.
Internally, the plugin works by splitting the data into two series,
above and below the threshold. The extra series below the threshold
will have its label cleared and the special "originSeries" attribute
set to the original series. You may need to check for this in hover
events.
*/
(function ($) {
@ -29,29 +48,26 @@ events.
};
function init(plot) {
function thresholdData(plot, s, datapoints) {
if (!s.threshold)
return;
function thresholdData(plot, s, datapoints, below, color) {
var ps = datapoints.pointsize, i, x, y, p, prevp,
thresholded = $.extend({}, s); // note: shallow copy
thresholded.datapoints = { points: [], pointsize: ps };
thresholded.datapoints = { points: [], pointsize: ps, format: datapoints.format };
thresholded.label = null;
thresholded.color = s.threshold.color;
thresholded.color = color;
thresholded.threshold = null;
thresholded.originSeries = s;
thresholded.data = [];
var below = s.threshold.below,
origpoints = datapoints.points,
var origpoints = datapoints.points,
addCrossingPoints = s.lines.show;
threspoints = [];
newpoints = [];
var threspoints = [];
var newpoints = [];
var m;
for (i = 0; i < origpoints.length; i += ps) {
x = origpoints[i]
x = origpoints[i];
y = origpoints[i + 1];
prevp = p;
@ -62,7 +78,7 @@ events.
if (addCrossingPoints && prevp != p && x != null
&& i > 0 && origpoints[i - ps] != null) {
var interx = (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]) * (below - y) + x;
var interx = x + (below - y) * (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]);
prevp.push(interx);
prevp.push(below);
for (m = 2; m < ps; ++m)
@ -80,24 +96,47 @@ events.
p.push(x);
p.push(y);
for (m = 2; m < ps; ++m)
p.push(origpoints[i + m]);
}
datapoints.points = newpoints;
thresholded.datapoints.points = threspoints;
if (thresholded.datapoints.points.length > 0)
plot.getData().push(thresholded);
if (thresholded.datapoints.points.length > 0) {
var origIndex = $.inArray(s, plot.getData());
// Insert newly-generated series right after original one (to prevent it from becoming top-most)
plot.getData().splice(origIndex + 1, 0, thresholded);
}
// FIXME: there are probably some edge cases left in bars
}
plot.hooks.processDatapoints.push(thresholdData);
function processThresholds(plot, s, datapoints) {
if (!s.threshold)
return;
if (s.threshold instanceof Array) {
s.threshold.sort(function(a, b) {
return a.below - b.below;
});
$(s.threshold).each(function(i, th) {
thresholdData(plot, s, datapoints, th.below, th.color);
});
}
else {
thresholdData(plot, s, datapoints, s.threshold.below, s.threshold.color);
}
}
plot.hooks.processDatapoints.push(processThresholds);
}
$.plot.plugins.push({
init: init,
options: options,
name: 'threshold',
version: '1.0'
version: '1.2'
});
})(jQuery);

11587
ui/lib/jquery-ui/js/jquery-ui.js vendored Executable file → Normal file

File diff suppressed because it is too large Load Diff

17154
ui/lib/jquery.js vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,16 @@
/*!
* jQuery Validation Plugin v1.13.0
* jQuery Validation Plugin v1.17.0
*
* http://jqueryvalidation.org/
* https://jqueryvalidation.org/
*
* Copyright (c) 2014 Jörn Zaefferer
* Copyright (c) 2017 Jörn Zaefferer
* Released under the MIT license
*/
(function( factory ) {
if ( typeof define === "function" && define.amd ) {
define( ["jquery", "./jquery.validate"], factory );
} else if (typeof module === "object" && module.exports) {
module.exports = factory( require( "jquery" ) );
} else {
factory( jQuery );
}
@ -17,9 +19,11 @@
( function() {
function stripHtml( value ) {
// remove html tags and space chars
// Remove html tags and space chars
return value.replace( /<.[^<>]*?>/g, " " ).replace( /&nbsp;|&#160;/gi, " " )
// remove punctuation
// Remove punctuation
.replace( /[.(),;:!?%#$'\"_+=\/\-“”’]*/g, "" );
}
@ -41,10 +45,11 @@
// Accept a value from a file input based on a required mimetype
$.validator.addMethod( "accept", function( value, element, param ) {
// Split mime on commas in case we have multiple types we can accept
var typeParam = typeof param === "string" ? param.replace(/\s/g, "").replace(/,/g, "|") : "image/*",
var typeParam = typeof param === "string" ? param.replace( /\s/g, "" ) : "image/*",
optionalValue = this.optional( element ),
i, file;
i, file, regex;
// Element is optional
if ( optionalValue ) {
@ -52,16 +57,23 @@ $.validator.addMethod("accept", function(value, element, param) {
}
if ( $( element ).attr( "type" ) === "file" ) {
// If we are using a wildcard, make it regex friendly
typeParam = typeParam.replace(/\*/g, ".*");
// Escape string to be used in the regex
// see: https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
// Escape also "/*" as "/.*" as a wildcard
typeParam = typeParam
.replace( /[\-\[\]\/\{\}\(\)\+\?\.\\\^\$\|]/g, "\\$&" )
.replace( /,/g, "|" )
.replace( /\/\*/g, "/.*" );
// Check if the element has a FileList before checking each file
if ( element.files && element.files.length ) {
regex = new RegExp( ".?(" + typeParam + ")$", "i" );
for ( i = 0; i < element.files.length; i++ ) {
file = element.files[ i ];
// Grab the mimetype from the loaded file, verify it matches
if (!file.type.match(new RegExp( ".?(" + typeParam + ")$", "i"))) {
if ( !file.type.match( regex ) ) {
return false;
}
}
@ -90,8 +102,9 @@ $.validator.addMethod("bankaccountNL", function(value, element) {
if ( !( /^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test( value ) ) ) {
return false;
}
// now '11 check'
var account = value.replace(/ /g, ""), // remove spaces
// Now '11 check'
var account = value.replace( / /g, "" ), // Remove spaces
sum = 0,
len = account.length,
pos, factor, digit;
@ -114,49 +127,37 @@ $.validator.addMethod("bankorgiroaccountNL", function(value, element) {
*
* BIC pattern: BBBBCCLLbbb (8 or 11 characters long; bbb is optional)
*
* Validation is case-insensitive. Please make sure to normalize input yourself.
*
* BIC definition in detail:
* - First 4 characters - bank code (only letters)
* - Next 2 characters - ISO 3166-1 alpha-2 country code (only letters)
* - Next 2 characters - location code (letters and digits)
* a. shall not start with '0' or '1'
* b. second character must be a letter ('O' is not allowed) or one of the following digits ('0' for test (therefore not allowed), '1' for passive participant and '2' for active participant)
* b. second character must be a letter ('O' is not allowed) or digit ('0' for test (therefore not allowed), '1' denoting passive participant, '2' typically reverse-billing)
* - Last 3 characters - branch code, optional (shall not start with 'X' except in case of 'XXX' for primary office) (letters and digits)
*/
$.validator.addMethod( "bic", function( value, element ) {
return this.optional( element ) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-2])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test( value );
return this.optional( element ) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test( value.toUpperCase() );
}, "Please specify a valid BIC code" );
/*
* Código de identificación fiscal ( CIF ) is the tax identification code for Spanish legal entities
* Further rules can be found in Spanish on http://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal
*/
$.validator.addMethod( "cifES", function( value ) {
"use strict";
var num = [],
controlDigit, sum, i, count, tmp, secondDigit;
value = value.toUpperCase();
// Quick format test
if ( !value.match( "((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)" ) ) {
return false;
}
for ( i = 0; i < 9; i++ ) {
num[ i ] = parseInt( value.charAt( i ), 10 );
}
// Algorithm for checking CIF codes
sum = num[ 2 ] + num[ 4 ] + num[ 6 ];
for ( count = 1; count < 8; count += 2 ) {
tmp = ( 2 * num[ count ] ).toString();
secondDigit = tmp.charAt( 1 );
sum += parseInt( tmp.charAt( 0 ), 10 ) + ( secondDigit === "" ? 0 : parseInt( secondDigit, 10 ) );
}
/* The first (position 1) is a letter following the following criteria:
*
* Spanish CIF structure:
*
* [ T ][ P ][ P ][ N ][ N ][ N ][ N ][ N ][ C ]
*
* Where:
*
* T: 1 character. Kind of Organization Letter: [ABCDEFGHJKLMNPQRSUVW]
* P: 2 characters. Province.
* N: 5 characters. Secuencial Number within the province.
* C: 1 character. Control Digit: [0-9A-J].
*
* [ T ]: Kind of Organizations. Possible values:
*
* A. Corporations
* B. LLCs
* C. General partnerships
@ -176,18 +177,187 @@ $.validator.addMethod( "cifES", function( value ) {
* S. Organs of State Administration and regions
* V. Agrarian Transformation
* W. Permanent establishments of non-resident in Spain
*
* [ C ]: Control Digit. It can be a number or a letter depending on T value:
* [ T ] --> [ C ]
* ------ ----------
* A Number
* B Number
* E Number
* H Number
* K Letter
* P Letter
* Q Letter
* S Letter
*
*/
if ( /^[ABCDEFGHJNPQRSUVW]{1}/.test( value ) ) {
sum += "";
controlDigit = 10 - parseInt( sum.charAt( sum.length - 1 ), 10 );
value += controlDigit;
return ( num[ 8 ].toString() === String.fromCharCode( 64 + controlDigit ) || num[ 8 ].toString() === value.charAt( value.length - 1 ) );
$.validator.addMethod( "cifES", function( value, element ) {
"use strict";
if ( this.optional( element ) ) {
return true;
}
var cifRegEx = new RegExp( /^([ABCDEFGHJKLMNPQRSUVW])(\d{7})([0-9A-J])$/gi );
var letter = value.substring( 0, 1 ), // [ T ]
number = value.substring( 1, 8 ), // [ P ][ P ][ N ][ N ][ N ][ N ][ N ]
control = value.substring( 8, 9 ), // [ C ]
all_sum = 0,
even_sum = 0,
odd_sum = 0,
i, n,
control_digit,
control_letter;
function isOdd( n ) {
return n % 2 === 0;
}
// Quick format test
if ( value.length !== 9 || !cifRegEx.test( value ) ) {
return false;
}
for ( i = 0; i < number.length; i++ ) {
n = parseInt( number[ i ], 10 );
// Odd positions
if ( isOdd( i ) ) {
// Odd positions are multiplied first.
n *= 2;
// If the multiplication is bigger than 10 we need to adjust
odd_sum += n < 10 ? n : n - 9;
// Even positions
// Just sum them
} else {
even_sum += n;
}
}
all_sum = even_sum + odd_sum;
control_digit = ( 10 - ( all_sum ).toString().substr( -1 ) ).toString();
control_digit = parseInt( control_digit, 10 ) > 9 ? "0" : control_digit;
control_letter = "JABCDEFGHI".substr( control_digit, 1 ).toString();
// Control must be a digit
if ( letter.match( /[ABEH]/ ) ) {
return control === control_digit;
// Control must be a letter
} else if ( letter.match( /[KPQS]/ ) ) {
return control === control_letter;
}
// Can be either
return control === control_digit || control === control_letter;
}, "Please specify a valid CIF number." );
/*
* Brazillian CPF number (Cadastrado de Pessoas Físicas) is the equivalent of a Brazilian tax registration number.
* CPF numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.
*/
$.validator.addMethod( "cpfBR", function( value ) {
// Removing special characters from value
value = value.replace( /([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g, "" );
// Checking value to have 11 digits only
if ( value.length !== 11 ) {
return false;
}
var sum = 0,
firstCN, secondCN, checkResult, i;
firstCN = parseInt( value.substring( 9, 10 ), 10 );
secondCN = parseInt( value.substring( 10, 11 ), 10 );
checkResult = function( sum, cn ) {
var result = ( sum * 10 ) % 11;
if ( ( result === 10 ) || ( result === 11 ) ) {
result = 0;
}
return ( result === cn );
};
// Checking for dump data
if ( value === "" ||
value === "00000000000" ||
value === "11111111111" ||
value === "22222222222" ||
value === "33333333333" ||
value === "44444444444" ||
value === "55555555555" ||
value === "66666666666" ||
value === "77777777777" ||
value === "88888888888" ||
value === "99999999999"
) {
return false;
}
// Step 1 - using first Check Number:
for ( i = 1; i <= 9; i++ ) {
sum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 11 - i );
}
// If first Check Number (CN) is valid, move to Step 2 - using second Check Number:
if ( checkResult( sum, firstCN ) ) {
sum = 0;
for ( i = 1; i <= 10; i++ ) {
sum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 12 - i );
}
return checkResult( sum, secondCN );
}
return false;
}, "Please specify a valid CPF number" );
// https://jqueryvalidation.org/creditcard-method/
// based on https://en.wikipedia.org/wiki/Luhn_algorithm
$.validator.addMethod( "creditcard", function( value, element ) {
if ( this.optional( element ) ) {
return "dependency-mismatch";
}
// Accept only spaces, digits and dashes
if ( /[^0-9 \-]+/.test( value ) ) {
return false;
}
var nCheck = 0,
nDigit = 0,
bEven = false,
n, cDigit;
value = value.replace( /\D/g, "" );
// Basing min and max length on
// https://developer.ean.com/general_info/Valid_Credit_Card_Types
if ( value.length < 13 || value.length > 19 ) {
return false;
}
for ( n = value.length - 1; n >= 0; n-- ) {
cDigit = value.charAt( n );
nDigit = parseInt( cDigit, 10 );
if ( bEven ) {
if ( ( nDigit *= 2 ) > 9 ) {
nDigit -= 9;
}
}
nCheck += nDigit;
bEven = !bEven;
}
return ( nCheck % 10 ) === 0;
}, "Please enter a valid credit card number." );
/* NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator
* Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0
* Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)
@ -228,31 +398,31 @@ $.validator.addMethod("creditcardtypes", function(value, element, param) {
if ( param.all ) {
validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;
}
if (validTypes & 0x0001 && /^(5[12345])/.test(value)) { //mastercard
if ( validTypes & 0x0001 && /^(5[12345])/.test( value ) ) { // Mastercard
return value.length === 16;
}
if (validTypes & 0x0002 && /^(4)/.test(value)) { //visa
if ( validTypes & 0x0002 && /^(4)/.test( value ) ) { // Visa
return value.length === 16;
}
if (validTypes & 0x0004 && /^(3[47])/.test(value)) { //amex
if ( validTypes & 0x0004 && /^(3[47])/.test( value ) ) { // Amex
return value.length === 15;
}
if (validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test(value)) { //dinersclub
if ( validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test( value ) ) { // Dinersclub
return value.length === 14;
}
if (validTypes & 0x0010 && /^(2(014|149))/.test(value)) { //enroute
if ( validTypes & 0x0010 && /^(2(014|149))/.test( value ) ) { // Enroute
return value.length === 15;
}
if (validTypes & 0x0020 && /^(6011)/.test(value)) { //discover
if ( validTypes & 0x0020 && /^(6011)/.test( value ) ) { // Discover
return value.length === 16;
}
if (validTypes & 0x0040 && /^(3)/.test(value)) { //jcb
if ( validTypes & 0x0040 && /^(3)/.test( value ) ) { // Jcb
return value.length === 16;
}
if (validTypes & 0x0040 && /^(2131|1800)/.test(value)) { //jcb
if ( validTypes & 0x0040 && /^(2131|1800)/.test( value ) ) { // Jcb
return value.length === 15;
}
if (validTypes & 0x0080) { //unknown
if ( validTypes & 0x0080 ) { // Unknown
return true;
}
return false;
@ -302,7 +472,7 @@ $.validator.addMethod("currency", function(value, element, param) {
$.validator.addMethod( "dateFA", function( value, element ) {
return this.optional( element ) || /^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value );
}, "Please enter a correct date");
}, $.validator.messages.date );
/**
* Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.
@ -332,7 +502,7 @@ $.validator.addMethod("dateITA", function(value, element) {
gg = parseInt( adata[ 0 ], 10 );
mm = parseInt( adata[ 1 ], 10 );
aaaa = parseInt( adata[ 2 ], 10 );
xdata = new Date(aaaa, mm - 1, gg, 12, 0, 0, 0);
xdata = new Date( Date.UTC( aaaa, mm - 1, gg, 12, 0, 0, 0 ) );
if ( ( xdata.getUTCFullYear() === aaaa ) && ( xdata.getUTCMonth() === mm - 1 ) && ( xdata.getUTCDate() === gg ) ) {
check = true;
} else {
@ -342,16 +512,16 @@ $.validator.addMethod("dateITA", function(value, element) {
check = false;
}
return this.optional( element ) || check;
}, "Please enter a correct date");
}, $.validator.messages.date );
$.validator.addMethod( "dateNL", function( value, element ) {
return this.optional( element ) || /^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test( value );
}, "Please enter a correct date");
}, $.validator.messages.date );
// Older "accept" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept
$.validator.addMethod( "extension", function( value, element, param ) {
param = typeof param === "string" ? param.replace( /,/g, "|" ) : "png|jpe?g|gif";
return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i"));
return this.optional( element ) || value.match( new RegExp( "\\.(" + param + ")$", "i" ) );
}, $.validator.format( "Please enter a value with a valid extension." ) );
/**
@ -364,14 +534,17 @@ $.validator.addMethod("giroaccountNL", function(value, element) {
/**
* IBAN is the international bank account number.
* It has a country - specific format, that is checked here too
*
* Validation is case-insensitive. Please make sure to normalize input yourself.
*/
$.validator.addMethod( "iban", function( value, element ) {
// some quick simple tests to prevent needless work
// Some quick simple tests to prevent needless work
if ( this.optional( element ) ) {
return true;
}
// remove spaces and to upper case
// Remove spaces and to upper case
var iban = value.replace( / /g, "" ).toUpperCase(),
ibancheckdigits = "",
leadingZeroes = true,
@ -379,11 +552,17 @@ $.validator.addMethod("iban", function(value, element) {
cOperator = "",
countrycode, ibancheck, charAt, cChar, bbanpattern, bbancountrypatterns, ibanregexp, i, p;
if (!(/^([a-zA-Z0-9]{4} ){2,8}[a-zA-Z0-9]{1,4}|[a-zA-Z0-9]{12,34}$/.test(iban))) {
// Check for IBAN code length.
// It contains:
// country code ISO 3166-1 - two letters,
// two check digits,
// Basic Bank Account Number (BBAN) - up to 30 chars
var minimalIBANlength = 5;
if ( iban.length < minimalIBANlength ) {
return false;
}
// check the country code and find the country specific format
// Check the country code and find the country specific format
countrycode = iban.substring( 0, 2 );
bbancountrypatterns = {
"AL": "\\d{8}[\\dA-Z]{16}",
@ -453,6 +632,7 @@ $.validator.addMethod("iban", function(value, element) {
};
bbanpattern = bbancountrypatterns[ countrycode ];
// As new countries will start using IBAN in the
// future, we only check if the countrycode is known.
// This prevents false negatives, while almost all
@ -463,11 +643,11 @@ $.validator.addMethod("iban", function(value, element) {
if ( typeof bbanpattern !== "undefined" ) {
ibanregexp = new RegExp( "^[A-Z]{2}\\d{2}" + bbanpattern + "$", "" );
if ( !( ibanregexp.test( iban ) ) ) {
return false; // invalid country specific format
return false; // Invalid country specific format
}
}
// now check the checksum, first convert to digits
// Now check the checksum, first convert to digits
ibancheck = iban.substring( 4, iban.length ) + iban.substring( 0, 4 );
for ( i = 0; i < ibancheck.length; i++ ) {
charAt = ibancheck.charAt( i );
@ -479,7 +659,7 @@ $.validator.addMethod("iban", function(value, element) {
}
}
// calculate the result of: ibancheckdigits % 97
// Calculate the result of: ibancheckdigits % 97
for ( p = 0; p < ibancheckdigits.length; p++ ) {
cChar = ibancheckdigits.charAt( p );
cOperator = "" + cRest + "" + cChar;
@ -497,22 +677,9 @@ $.validator.addMethod("ipv4", function(value, element) {
}, "Please enter a valid IP v4 address." );
$.validator.addMethod( "ipv6", function( value, element ) {
if (value == '::')
return true;
return this.optional( element ) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test( value );
}, "Please enter a valid IP v6 address." );
$.validator.addMethod("ipv46address", function(value, element) {
if (this.optional(element) && value.length == 0)
return true;
if ($.validator.methods.ipv4.call(this, value, element) || $.validator.methods.ipv6.call(this, value, element))
return true;
return false;
}, "Please enter a valid IPv4/IPv6 address.");
$.validator.addMethod( "lettersonly", function( value, element ) {
return this.optional( element ) || /^[a-z]+$/i.test( value );
}, "Letters only please" );
@ -539,47 +706,60 @@ $.validator.addMethod("mobileUK", function(phone_number, element) {
phone_number.match( /^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[1345789]\d{2}|624)\s?\d{3}\s?\d{3})$/ );
}, "Please specify a valid mobile number" );
$.validator.addMethod( "netmask", function( value, element ) {
return this.optional( element ) || /^(254|252|248|240|224|192|128)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)/i.test( value );
}, "Please enter a valid netmask." );
/*
* The número de identidad de extranjero ( NIE )is a code used to identify the non-nationals in Spain
* The NIE (Número de Identificación de Extranjero) is a Spanish tax identification number assigned by the Spanish
* authorities to any foreigner.
*
* The NIE is the equivalent of a Spaniards Número de Identificación Fiscal (NIF) which serves as a fiscal
* identification number. The CIF number (Certificado de Identificación Fiscal) is equivalent to the NIF, but applies to
* companies rather than individuals. The NIE consists of an 'X' or 'Y' followed by 7 or 8 digits then another letter.
*/
$.validator.addMethod( "nieES", function( value ) {
$.validator.addMethod( "nieES", function( value, element ) {
"use strict";
value = value.toUpperCase();
if ( this.optional( element ) ) {
return true;
}
// Basic format test
if ( !value.match( "((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)" ) ) {
var nieRegEx = new RegExp( /^[MXYZ]{1}[0-9]{7,8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi );
var validChars = "TRWAGMYFPDXBNJZSQVHLCKET",
letter = value.substr( value.length - 1 ).toUpperCase(),
number;
value = value.toString().toUpperCase();
// Quick format test
if ( value.length > 10 || value.length < 9 || !nieRegEx.test( value ) ) {
return false;
}
// Test NIE
//T
if ( /^[T]{1}/.test( value ) ) {
return ( value[ 8 ] === /^[T]{1}[A-Z0-9]{8}$/.test( value ) );
}
// X means same number
// Y means number + 10000000
// Z means number + 20000000
value = value.replace( /^[X]/, "0" )
.replace( /^[Y]/, "1" )
.replace( /^[Z]/, "2" );
//XYZ
if ( /^[XYZ]{1}/.test( value ) ) {
return (
value[ 8 ] === "TRWAGMYFPDXBNJZSQVHLCKE".charAt(
value.replace( "X", "0" )
.replace( "Y", "1" )
.replace( "Z", "2" )
.substring( 0, 8 ) % 23
)
);
}
number = value.length === 9 ? value.substr( 0, 8 ) : value.substr( 0, 9 );
return false;
return validChars.charAt( parseInt( number, 10 ) % 23 ) === letter;
}, "Please specify a valid NIE number." );
/*
* The Número de Identificación Fiscal ( NIF ) is the way tax identification used in Spain for individuals
*/
$.validator.addMethod( "nifES", function( value ) {
$.validator.addMethod( "nifES", function( value, element ) {
"use strict";
if ( this.optional( element ) ) {
return true;
}
value = value.toUpperCase();
// Basic format test
@ -591,15 +771,43 @@ $.validator.addMethod( "nifES", function( value ) {
if ( /^[0-9]{8}[A-Z]{1}$/.test( value ) ) {
return ( "TRWAGMYFPDXBNJZSQVHLCKE".charAt( value.substring( 8, 0 ) % 23 ) === value.charAt( 8 ) );
}
// Test specials NIF (starts with K, L or M)
if ( /^[KLM]{1}/.test( value ) ) {
return ( value[ 8 ] === String.fromCharCode( 64 ) );
return ( value[ 8 ] === "TRWAGMYFPDXBNJZSQVHLCKE".charAt( value.substring( 8, 1 ) % 23 ) );
}
return false;
}, "Please specify a valid NIF number." );
/*
* Numer identyfikacji podatkowej ( NIP ) is the way tax identification used in Poland for companies
*/
$.validator.addMethod( "nipPL", function( value ) {
"use strict";
value = value.replace( /[^0-9]/g, "" );
if ( value.length !== 10 ) {
return false;
}
var arrSteps = [ 6, 5, 7, 2, 3, 4, 5, 6, 7 ];
var intSum = 0;
for ( var i = 0; i < 9; i++ ) {
intSum += arrSteps[ i ] * value[ i ];
}
var int2 = intSum % 11;
var intControlNr = ( int2 === 10 ) ? 0 : int2;
return ( intControlNr === parseInt( value[ 9 ], 10 ) );
}, "Please specify a valid NIP number." );
$.validator.addMethod( "notEqualTo", function( value, element, param ) {
return this.optional( element ) || !$.validator.methods.equalTo.call( this, value, element, param );
}, "Please enter a different value, values must not be the same." );
$.validator.addMethod( "nowhitespace", function( value, element ) {
return this.optional( element ) || /^\S+$/i.test( value );
}, "No white space please" );
@ -622,7 +830,7 @@ $.validator.addMethod("pattern", function(value, element, param) {
return true;
}
if ( typeof param === "string" ) {
param = new RegExp(param);
param = new RegExp( "^(?:" + param + ")$" );
}
return param.test( value );
}, "Invalid format." );
@ -634,6 +842,22 @@ $.validator.addMethod("phoneNL", function(value, element) {
return this.optional( element ) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test( value );
}, "Please specify a valid phone number." );
/* For UK phone functions, do the following server side processing:
* Compare original input with this RegEx pattern:
* ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$
* Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'
* Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.
* A number of very detailed GB telephone number RegEx patterns can also be found at:
* http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers
*/
// Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers
$.validator.addMethod( "phonesUK", function( phone_number, element ) {
phone_number = phone_number.replace( /\(|\)|\s+|-/g, "" );
return this.optional( element ) || phone_number.length > 9 &&
phone_number.match( /^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/ );
}, "Please specify a valid uk phone number" );
/* For UK phone functions, do the following server side processing:
* Compare original input with this RegEx pattern:
* ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$
@ -649,7 +873,7 @@ $.validator.addMethod("phoneUK", function(phone_number, element) {
}, "Please specify a valid phone number" );
/**
* matches US phone number format
* Matches US phone number format
*
* where the area code may not start with 1 and the prefix may not start with 1
* allows '-' or ' ' as a separator and allows parens around area code
@ -670,20 +894,17 @@ $.validator.addMethod("phoneUS", function(phone_number, element) {
phone_number.match( /^(\+?1-?)?(\([2-9]([02-9]\d|1[02-9])\)|[2-9]([02-9]\d|1[02-9]))-?[2-9]([02-9]\d|1[02-9])-?\d{4}$/ );
}, "Please specify a valid phone number" );
/* For UK phone functions, do the following server side processing:
* Compare original input with this RegEx pattern:
* ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$
* Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'
* Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.
* A number of very detailed GB telephone number RegEx patterns can also be found at:
* http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers
/*
* Valida CEPs do brasileiros:
*
* Formatos aceitos:
* 99999-999
* 99.999-999
* 99999999
*/
//Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers
$.validator.addMethod("phonesUK", function(phone_number, element) {
phone_number = phone_number.replace(/\(|\)|\s+|-/g, "");
return this.optional(element) || phone_number.length > 9 &&
phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/);
}, "Please specify a valid uk phone number");
$.validator.addMethod( "postalcodeBR", function( cep_value, element ) {
return this.optional( element ) || /^\d{2}.\d{3}-\d{3}?$|^\d{5}-?\d{3}?$/.test( cep_value );
}, "Informe um CEP válido." );
/**
* Matches a valid Canadian Postal Code
@ -699,7 +920,7 @@ $.validator.addMethod("phonesUK", function(phone_number, element) {
* @cat Plugins/Validate/Methods
*/
$.validator.addMethod( "postalCodeCA", function( value, element ) {
return this.optional( element ) || /^[ABCEGHJKLMNPRSTVXY]\d[A-Z] \d[A-Z]\d$/.test( value );
return this.optional( element ) || /^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ] *\d[ABCEGHJKLMNPRSTVWXYZ]\d$/i.test( value );
}, "Please specify a valid postal code" );
/* Matches Italian postcode (CAP) */
@ -831,11 +1052,8 @@ $.validator.addMethod("skip_or_fill_minimum", function(value, element, options)
* includeMilitary: true
* }
*
*
*
*/
jQuery.validator.addMethod("stateUS", function(value, element, options) {
$.validator.addMethod( "stateUS", function( value, element, options ) {
var isDefault = typeof options === "undefined",
caseSensitive = ( isDefault || typeof options.caseSensitive === "undefined" ) ? false : options.caseSensitive,
includeTerritories = ( isDefault || typeof options.includeTerritories === "undefined" ) ? false : options.includeTerritories,
@ -854,8 +1072,7 @@ jQuery.validator.addMethod("stateUS", function(value, element, options) {
regex = caseSensitive ? new RegExp( regex ) : new RegExp( regex, "i" );
return this.optional( element ) || regex.test( value );
},
"Please specify a valid state");
}, "Please specify a valid state" );
// TODO check if value starts with <, otherwise don't try stripping anything
$.validator.addMethod( "strippedminlength", function( value, element, param ) {
@ -863,14 +1080,14 @@ $.validator.addMethod("strippedminlength", function(value, element, param) {
}, $.validator.format( "Please enter at least {0} characters" ) );
$.validator.addMethod( "time", function( value, element ) {
return this.optional(element) || /^([01]\d|2[0-3])(:[0-5]\d){1,2}$/.test(value);
return this.optional( element ) || /^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test( value );
}, "Please enter a valid time, between 00:00 and 23:59" );
$.validator.addMethod( "time12h", function( value, element ) {
return this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test( value );
}, "Please enter a valid time in 12-hour am/pm format" );
// same as url, but TLD is optional
// Same as url, but TLD is optional
$.validator.addMethod( "url2", function( value, element ) {
return this.optional( element ) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test( value );
}, $.validator.messages.url );
@ -937,5 +1154,5 @@ $.validator.addMethod("zipcodeUS", function(value, element) {
$.validator.addMethod( "ziprange", function( value, element ) {
return this.optional( element ) || /^90[2-5]\d\{2\}-\d{4}$/.test( value );
}, "Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx" );
return $;
}));

File diff suppressed because it is too large Load Diff

View File

@ -384,7 +384,7 @@
args.complete($chart);
}
if ($chart.find('.connector-line.highlighted').size()) {
if ($chart.find('.connector-line.highlighted').length) {
$info.appendTo($chart).append(
$('<span>').addClass('color-key'),
$('<span>').html('= Contains a public network')

View File

@ -450,7 +450,7 @@
});
// Logout action
$('#user-options a').live('click', function() {
$(document).on('click', '#user-options a', function() {
loginArgs.logoutAction({
context: cloudStack.context
});

View File

@ -2445,7 +2445,7 @@
var $tierSelect = $(".ui-dialog-content").find('.tier-select select');
// if $tierSelect is not initialized, return; tierSelect() will refresh listView and come back here later
if ($tierSelect.size() == 0) {
if ($tierSelect.length == 0) {
args.response.success({
data: null
});

View File

@ -761,7 +761,7 @@ var addGuestNetworkDialog = {
} else { //domain-specific
array1.push("&acltype=domain");
if ($form.find('.form-item[rel=subdomainaccess]:visible input:checked').size())
if ($form.find('.form-item[rel=subdomainaccess]:visible input:checked').length)
array1.push("&subdomainaccess=true");
else
array1.push("&subdomainaccess=false");

View File

@ -94,7 +94,7 @@
$wizard.click(function(event) {
var $target = $(event.target);
if ($target.closest('button.next').size()) {
if ($target.closest('button.next').length) {
$form.validate();
if ($form.valid()) {
completeAction();
@ -104,7 +104,7 @@
}
}
if ($target.closest('button.cancel').size()) {
if ($target.closest('button.cancel').length) {
close();
return false;
}
@ -112,14 +112,14 @@
if (ldapStatus) {
var $table = $wizard.find('.ldap-account-choice tbody');
$("#label_ldap_group_name").live("keypress", function(event) {
$("#label_ldap_group_name").on("keypress", function(event) {
if ($table.find("#tr-groupname-message").length === 0) {
$("<tr id='tr-groupname-message'>").appendTo($table).append("<td colspan=\"4\">"+_l('message.ldap.group.import')+"</td>");
}
$table.find("tr").hide();
$table.find("#tr-groupname-message").show();
});
$("#label_ldap_group_name").live("blur", function(event) {
$("#label_ldap_group_name").on("blur", function(event) {
if (!$(this).val()) {
$table.find("tr").show();
$table.find("#tr-groupname-message").hide();

View File

@ -85,7 +85,7 @@
if (!$dataList.find(
'input[type=radio]:checked, input[type=checkbox]:checked'
).size()) {
).length) {
cloudStack.dialog.notice({
message: _l('message.select.instance')
});

View File

@ -60,12 +60,12 @@
data['new-network-ip'] = $form.find('.new-network .select.advanced .specify-ip input[type=text]').val();
// Handle multi-disk service offerings
if ($form.find('.multi-disk-select-container').size()) {
if ($form.find('.multi-disk-select-container').length) {
data['disk-offerings-multi'] = [];
var $diskGroups = $form.find('.disk-select-group');
var $selectedDisks = $.grep($diskGroups, function (diskGroup) {
return $(diskGroup).find('input[type=checkbox]:checked').size();
return $(diskGroup).find('input[type=checkbox]:checked').length;
});
$selectedDisks.map(function (disk) {
@ -86,7 +86,7 @@
success: function(args) {
var $listView = $('.list-view.instances');
if ($listView.size()) {
if ($listView.length) {
var $loading = $('.list-view.instances').listView('prependItem', {
data: [{
name: data.displayname ? data.displayname : _l('label.new.vm'),
@ -104,7 +104,7 @@
listViewArgs.complete({
_custom: args._custom,
messageArgs: cloudStack.serializeForm($form),
$item: $listView.size() ? $loading : $('<div>')
$item: $listView.length ? $loading : $('<div>')
});
close();
@ -158,17 +158,17 @@
var $checkedOtherSelect = $otherSelects.filter(function() {
return $(this).not('.single-select') &&
$(this).find('input[type=checkbox]:checked').size() &&
$(this).find('input[type=radio]:checked').size();
$(this).find('input[type=checkbox]:checked').length &&
$(this).find('input[type=radio]:checked').length;
});
if (!$checkedOtherSelect.size() &&
!$('.new-network:visible input[type=radio]:checked').size()) {
if (!$checkedOtherSelect.length &&
!$('.new-network:visible input[type=radio]:checked').length) {
$(this).closest('.select').find('input[type=radio]').click();
}
}
if ((!$otherSelects.size()) &&
if ((!$otherSelects.length) &&
$newNetwork.find('input[type=checkbox]').is(':unchecked')) {
// Set as default
$(this).closest('.select').find('input[type=radio]').click();
@ -268,10 +268,9 @@
var dataGenerators = {
setup: function($step, formData) {
var originalValues = function(formData) {
$step.find('select').val(
formData.zoneid
);
var originalValues = function(formData, initialValue) {
var selectedValue = formData.zoneid || initialValue;
$step.find('select').val(selectedValue);
$step.find('input[type=radio]').filter(function() {
return $(this).val() == formData['select-template'];
@ -282,7 +281,11 @@
response: {
success: function(args) {
// Zones
$(args.data.zones).each(function() {
var initialValue = '';
$(args.data.zones).each(function( index ) {
if(index == 0){
initialValue = this.id;
}
$step.find('.select-zone select').append(
$('<option>')
.attr({
@ -293,7 +296,7 @@
);
});
originalValues(formData);
originalValues(formData, initialValue);
}
}
};
@ -309,7 +312,7 @@
return $(this).val() == formData.templateid;
});
if (!$selected.size()) {
if (!$selected.length) {
$inputs.filter(':first').click();
} else {
$selected.click();
@ -541,7 +544,7 @@
return $(this).val() == formData.diskofferingid;
}).click();
if (!$targetInput.size()) {
if (!$targetInput.length) {
$step.find('input[type=radio]:visible').filter(':first').click();
}
};
@ -620,7 +623,7 @@
$group.toggleClass('selected');
$group.find('.select:first input[type=radio]').click();
if (!$multiDiskSelect.find('input[type=checkbox]:checked').size()) {
if (!$multiDiskSelect.find('input[type=checkbox]:checked').length) {
$step.find('.no-thanks input[type=radio]').click();
} else {
$step.find('.no-thanks input[type=radio]').attr('checked', false);
@ -655,10 +658,10 @@
var item = $.grep(args.data.diskOfferings, function(elem) {
return elem.id == val;
})[0];
var isMultiDisk = $step.find('.multi-disk-select').size();
var isMultiDisk = $step.find('.multi-disk-select').length;
// Uncheck any multi-select groups
if ($target.closest('.no-thanks').size() && isMultiDisk) {
if ($target.closest('.no-thanks').length && isMultiDisk) {
$step.find('.disk-select-group input[type=checkbox]:checked').click();
$(this).attr('checked', true);
@ -881,7 +884,7 @@
var $checkbox = $step.find('.new-network input[type=checkbox]');
var $newNetwork = $checkbox.closest('.new-network');
if ($step.find('.select.my-networks .select-container .select:visible').size()) {
if ($step.find('.select.my-networks .select-container .select:visible').length) {
$checkbox.attr('checked', false);
$newNetwork.addClass('unselected');
} else {
@ -1023,7 +1026,7 @@
);
// Cleanup
if ($select.closest('.new-network').size()) {
if ($select.closest('.new-network').length) {
$select.find('.advanced-options, .specify-ip').remove();
}
@ -1077,10 +1080,10 @@
fieldName = $input.html();
} else if ($input.is('input[type=radio]')) {
// Choosen New network as default
if ($input.parents('div.new-network').size()) {
if ($input.parents('div.new-network').length) {
fieldName = $input.closest('div.new-network').find('input[name="new-network-name"]').val();
// Choosen Network from existed
} else if ($input.parents('div.my-networks').size()) {
} else if ($input.parents('div.my-networks').length) {
fieldName = $input.closest('div.select').find('.select-desc .name').html();
} else {
fieldName = $input.parent().find('.select-desc .name').html();
@ -1124,7 +1127,7 @@
var targetIndex = index - 1;
if (index <= 1) targetIndex = 0;
if (targetIndex == $steps.size()) {
if (targetIndex == $steps.length) {
completeAction();
return;
}
@ -1182,7 +1185,7 @@
}).fadeOut('slow');
setTimeout(function() {
if (!$targetStep.find('input[type=radio]:checked').size()) {
if (!$targetStep.find('input[type=radio]:checked').length) {
$targetStep.find('input[type=radio]:first').click();
}
}, 50);
@ -1194,10 +1197,10 @@
var $activeStep = $form.find('.step:visible');
// Next button
if ($target.closest('div.button.next').size()) {
if ($target.closest('div.button.next').length) {
//step 2 - select template/ISO
if($activeStep.hasClass('select-iso')) {
if ($activeStep.find('.content:visible input:checked').size() == 0) {
if ($activeStep.find('.content:visible input:checked').length == 0) {
cloudStack.dialog.notice({
message: 'message.step.1.continue'
});
@ -1210,7 +1213,7 @@
}
//step 6 - select network
if ($activeStep.find('.wizard-step-conditional.select-network:visible').size() > 0) {
if ($activeStep.find('.wizard-step-conditional.select-network:visible').length > 0) {
var data = $activeStep.data('my-networks');
if (!data) {
@ -1219,7 +1222,7 @@
)['my-networks']);
}
if ($activeStep.find('input[type=checkbox]:checked').size() == 0) { //if no checkbox is checked
if ($activeStep.find('input[type=checkbox]:checked').length == 0) { //if no checkbox is checked
cloudStack.dialog.notice({
message: 'message.step.4.continue'
});
@ -1234,7 +1237,7 @@
if (advSGFilter == 0) { //when total number of selected sg networks is 0, then 'Select Security Group' is skipped, go to step 6 directly
showStep(6);
} else { //when total number of selected sg networks > 0
if ($activeStep.find('input[type=checkbox]:checked').size() > 1) { //when total number of selected networks > 1
if ($activeStep.find('input[type=checkbox]:checked').length > 1) { //when total number of selected networks > 1
cloudStack.dialog.notice({
message: "Can't create a vm with multiple networks one of which is Security Group enabled"
});
@ -1246,7 +1249,7 @@
//step 6 - review (spcifiy displyname, group as well)
if ($activeStep.hasClass('review')) {
if ($activeStep.find('input[name=displayname]').size() > 0 && $activeStep.find('input[name=displayname]').val().length > 0) {
if ($activeStep.find('input[name=displayname]').length > 0 && $activeStep.find('input[name=displayname]').val().length > 0) {
//validate
var b = cloudStack.validate.vmHostName($activeStep.find('input[name=displayname]').val());
if (b == false)
@ -1255,7 +1258,7 @@
}
if (!$form.valid()) {
if ($form.find('input.error:visible, select.error:visible').size()) {
if ($form.find('input.error:visible, select.error:visible').length) {
return false;
}
}
@ -1270,7 +1273,7 @@
}
// Previous button
if ($target.closest('div.button.previous').size()) {
if ($target.closest('div.button.previous').length) {
var $step = $steps.filter(':visible');
var $networkStep = $steps.filter('.network');
var index = $step.index();
@ -1278,10 +1281,10 @@
$networkStep.removeClass('next-use-security-groups');
if (index) {
if (index == $steps.size() - 1 && $networkStep.hasClass('next-use-security-groups')) {
if (index == $steps.length - 1 && $networkStep.hasClass('next-use-security-groups')) {
showStep(5);
} else if ($activeStep.find('.select-security-group:visible').size() &&
$activeStep.find('.select-network.no-add-network').size()) {
} else if ($activeStep.find('.select-security-group:visible').length &&
$activeStep.find('.select-network.no-add-network').length) {
showStep(5);
} else {
showStep(index);
@ -1292,14 +1295,14 @@
}
// Close button
if ($target.closest('div.button.cancel').size()) {
if ($target.closest('div.button.cancel').length) {
close();
return false;
}
// Edit link
if ($target.closest('div.edit').size()) {
if ($target.closest('div.edit').length) {
var $edit = $target.closest('div.edit');
showStep($edit.find('a').attr('href'));

View File

@ -71,7 +71,7 @@
return $dashboard
.click(function(event) {
var $target = $(event.target);
if ($target.closest('[view-all-target]').size()) {
if ($target.closest('[view-all-target]').length) {
var targetID = $target.closest('[view-all-target]').attr('view-all-target');
args.$browser.cloudBrowser('addPanel', {
title: $target.closest('[view-all-title]').attr('view-all-title'),

View File

@ -54,7 +54,7 @@
$plugin.click(function() {
var $mainSection = $('#navigation ul li').filter('.' + plugin.id);
if ($mainSection.size()) {
if ($mainSection.length) {
$mainSection.click();
return;

View File

@ -275,7 +275,7 @@
var $management = $panel.find('.management');
var $managementInvite = $panel.find('.management-invite');
if ($management.size()) {
if ($management.length) {
$management.children().remove();
$management.append(pageElems.userManagement({
context: cloudStack.context
@ -284,7 +284,7 @@
return true;
}
if ($managementInvite.size()) {
if ($managementInvite.length) {
$managementInvite.children().remove();
$managementInvite.append(pageElems.userManagement({
context: cloudStack.context,
@ -635,7 +635,7 @@
// Initial load
loadData(function() {
if (!$list.find('li').size()) {
if (!$list.find('li').length) {
cloudStack.dialog.notice({
message: isAdmin() || isDomainAdmin() || g_userProjectsEnabled ? _l('message.no.projects') : _l('message.no.projects.adminOnly')
}).closest('.ui-dialog');

View File

@ -117,7 +117,7 @@
return $(this).index() == index;
});
if ($tr.size() && $tr.hasClass('active')) {
if ($tr.length && $tr.hasClass('active')) {
$(this).addClass('disabled ui-state-disabled');
} else {
$(this).removeClass('disabled ui-state-disabled');
@ -126,7 +126,7 @@
if ($(this).is('.ui-tabs-selected.ui-state-disabled')) {
$snapshots.find('form').show();
if ($snapshots.find('li.ui-state-disabled').size() == $snapshots.find('li').size()) {
if ($snapshots.find('li.ui-state-disabled').length == $snapshots.find('li').length) {
$snapshots.find('form').hide();
} else {
$snapshots.find('li:not(.ui-state-disabled):first a').click();

View File

@ -96,7 +96,7 @@
var $li = $target.closest('li');
var region, url;
if ($li.size() && !$li.hasClass('active')) {
if ($li.length && !$li.hasClass('active')) {
region = $li.data('region-data');
url = region.endpoint;
id = region.id;

View File

@ -30,7 +30,7 @@
if (!$uploadVolume.find(
'input[type=radio]:checked, input[type=checkbox]:checked'
).size()) {
).length) {
cloudStack.dialog.notice({
message: _l('message.select.instance')
});

View File

@ -409,7 +409,7 @@
// Title shows tier details
$title.click(function() {
if ($browser && $browser.size()) { // Fix null exception, if add tier returns error
if ($browser && $browser.length) { // Fix null exception, if add tier returns error
$browser.cloudBrowser('addPanel', {
title: name,
maximizeIfSelected: true,
@ -545,7 +545,7 @@
);
var showAddTierDialog = function() {
if ($(this).find('.loading-overlay').size()) {
if ($(this).find('.loading-overlay').length) {
return false;
}

View File

@ -22,7 +22,7 @@
if (!options) options = {};
var $forms = $wizard.find('form').filter(function() {
return !options.all ? !$(this).closest('.multi-edit').size() : true;
return !options.all ? !$(this).closest('.multi-edit').length : true;
});
var $physicalNetworkItems = $wizard.find(
'.steps .setup-physical-network .select-container.multi'
@ -33,7 +33,7 @@
'.steps .setup-storage-traffic .data-body .data-item');
var groupedForms = {};
if ($physicalNetworkItems.find('li.traffic-type-draggable.storage').size()) {
if ($physicalNetworkItems.find('li.traffic-type-draggable.storage').length) {
$wizard.find('li.conditional.storage-traffic').show();
} else {
$wizard.find('li.conditional.storage-traffic').hide();
@ -93,7 +93,7 @@
// Traffic type configuration data
trafficTypeConfiguration: trafficTypeConfiguration,
guestConfiguration: $guestForm.size() ? cloudStack.serializeForm($guestForm) : null
guestConfiguration: $guestForm.length ? cloudStack.serializeForm($guestForm) : null
};
}
);
@ -172,7 +172,7 @@
*/
var customValidation = {
networkRanges: function($form) {
if ($form.closest('.multi-edit').find('.data-item').size()) {
if ($form.closest('.multi-edit').find('.data-item').length) {
return true;
}
@ -184,7 +184,7 @@
physicalNetworks: function($form) {
var $enabledPhysicalNetworks = $form.filter(':not(.disabled)').filter(function() {
return $(this).find('.traffic-type-draggable').size();
return $(this).find('.traffic-type-draggable').length;
});
var $trafficTypes = $enabledPhysicalNetworks.find('.traffic-type-draggable');
var $configuredTrafficTypes = $trafficTypes.filter(function() {
@ -193,8 +193,8 @@
return ($trafficType.data('traffic-type-data') != null);
});
if ($enabledPhysicalNetworks.size() > 1 &&
$configuredTrafficTypes.size() != $trafficTypes.size()) {
if ($enabledPhysicalNetworks.length > 1 &&
$configuredTrafficTypes.length != $trafficTypes.length) {
cloudStack.dialog.notice({
message: _l('message.configure.all.traffic.types')
});
@ -215,9 +215,9 @@
var $physicalNetworks = $step.find('.select-container.multi');
var isCustomValidated;
if ($multiEditForm.size()) {
if ($multiEditForm.length) {
isCustomValidated = customValidation.networkRanges($multiEditForm);
} else if ($physicalNetworks.size()) {
} else if ($physicalNetworks.length) {
isCustomValidated = customValidation.physicalNetworks($physicalNetworks);
} else {
isCustomValidated = true;
@ -240,7 +240,7 @@
var $existingPhysicalNetworks = physicalNetwork.getNetworks($wizard);
// Initialize physical networks
if (!$existingPhysicalNetworks.size()) {
if (!$existingPhysicalNetworks.length) {
physicalNetwork.add($wizard);
} else if (!isAdvancedNetwork($wizard)) {
$existingPhysicalNetworks.filter(':first').siblings().each(function() {
@ -459,12 +459,12 @@
return $(this).attr('traffic-type-id') == trafficTypeID;
});
if (physicalNetwork.isTrafficTypeClone($trafficType) && !$container.closest('.select-container.multi').size()) {
if (physicalNetwork.isTrafficTypeClone($trafficType) && !$container.closest('.select-container.multi').length) {
// Get traffic type from original container
return $trafficType.filter(function() {
return $(this).closest(
physicalNetwork.getOriginalTrafficContainer($trafficType)
).size();
).length;
});
}
@ -516,10 +516,10 @@
var $trafficType = physicalNetwork.getTrafficType(trafficTypeID, $container);
var $dropArea = $physicalNetwork.find('.drop-container ul');
if ($physicalNetwork.find('.traffic-type-draggable[traffic-type-id=' + trafficTypeID + ']').size()) return false;
if ($physicalNetwork.find('.traffic-type-draggable[traffic-type-id=' + trafficTypeID + ']').length) return false;
if (physicalNetwork.isTrafficTypeClone($trafficType)) {
if (!physicalNetwork.getTrafficType(trafficTypeID, $physicalNetwork).size()) {
if (!physicalNetwork.getTrafficType(trafficTypeID, $physicalNetwork).length) {
$trafficType = $trafficType.clone()
.removeClass('disabled')
.appendTo($dropArea)
@ -563,7 +563,7 @@
);
if (physicalNetwork.isTrafficTypeClone($trafficType) &&
$physicalNetworks.find('.traffic-type-draggable[traffic-type-id=' + trafficTypeID + ']').size() > 1) {
$physicalNetworks.find('.traffic-type-draggable[traffic-type-id=' + trafficTypeID + ']').length > 1) {
$trafficType.remove();
}
}
@ -580,10 +580,10 @@
return false;
var $emptyContainers = $containers.filter(function() {
return !$(this).find('li').size();
return !$(this).find('li').length;
});
return !$emptyContainers.size() ? $containers.size() : false;
return !$emptyContainers.length ? $containers.length : false;
},
/**
@ -598,7 +598,7 @@
$allPhysicalNetworks.each(function() {
var $ul = $(this).find('.drop-container ul');
if (!$(this).find('li').size()) {
if (!$(this).find('li').length) {
$(this).addClass('disabled');
$ul.fadeOut();
} else {
@ -609,8 +609,8 @@
$containers.each(function() {
var $currentContainer = $(this);
if (!$currentContainer.find('li').size() &&
$containers.size() > containerTotal) {
if (!$currentContainer.find('li').length &&
$containers.length > containerTotal) {
$currentContainer.remove();
}
});
@ -753,7 +753,7 @@
$ul.addClass('active');
if (!$ul.find('li').size()) {
if (!$ul.find('li').length) {
$(this).closest('.select-container.multi').removeClass('disabled');
$ul.fadeIn();
}
@ -772,7 +772,7 @@
var trafficTypeData = ui.draggable.data('traffic-type-data');
if (trafficTypeID == 'guest' &&
ui.draggable.closest('.select-container.multi').size()) {
ui.draggable.closest('.select-container.multi').length) {
ui.draggable.remove();
}
@ -880,7 +880,7 @@
// Only use networks w/ guest traffic type
$physicalNetworks = $physicalNetworks.filter(function() {
return $(this).find('li.guest').size();
return $(this).find('li.guest').length;
return true;
});
@ -1101,7 +1101,7 @@
var targetIndex = index - 1;
if (index <= 1) targetIndex = 0;
if (targetIndex == $steps.size()) {
if (targetIndex == $steps.length) {
completeAction();
}
@ -1130,7 +1130,7 @@
}
if (formID) {
if (!$targetStep.find('form').size()) {
if (!$targetStep.find('form').length) {
makeForm(args, formID, formState).appendTo($targetStep.find('.content.input-area .select-container'));
setTimeout(function() {
@ -1185,7 +1185,7 @@
}
}
if ($uiCustom.size()) {
if ($uiCustom.length) {
$uiCustom.each(function() {
var $item = $(this);
var id = $item.attr('ui-custom');
@ -1210,7 +1210,7 @@
$nextButton.removeClass('final post-launch');
// Show launch button if last step
if ($targetStep.index() == $steps.size() - 1 || options.nextStep) {
if ($targetStep.index() == $steps.length - 1 || options.nextStep) {
$nextButton.find('span').html(options.nextStep ? _l('label.save.changes') : _l('label.launch.zone'));
$nextButton.addClass('final');
@ -1225,7 +1225,7 @@
}).toggleClass('active');
setTimeout(function() {
if (!$targetStep.find('input[type=radio]:checked').size()) {
if (!$targetStep.find('input[type=radio]:checked').length) {
$targetStep.find('input[type=radio]:first').click();
}
}, 50);
@ -1329,25 +1329,25 @@
}
// Next button
if ($target.closest('div.button.next').size()) {
if ($target.closest('div.button.next').length) {
var $step = $steps.filter(':visible');
// Validation
var $form = $('form:visible').filter(function() {
// Don't include multi-edit (validation happens separately)
return !$(this).closest('.multi-edit').size();
return !$(this).closest('.multi-edit').length;
});
// Handle validation for custom UI components
var isCustomValidated = checkCustomValidation($step);
if (($form.size() && !$form.valid()) || !isCustomValidated) {
if (($form && $form.find('.error:visible').size()) || !isCustomValidated)
if (($form.length && !$form.valid()) || !isCustomValidated) {
if (($form && $form.find('.error:visible').length) || !isCustomValidated)
return false;
}
//when hypervisor is BareMetal (begin)
var data = getData($wizard);
if (('zone' in data) && (data.zone.hypervisor == 'BareMetal')) {
if ($('.zone-wizard:visible').find('#add_zone_guest_traffic_desc:visible').size() > 0) { //$steps.filter(':visible').index() == 6
if ($('.zone-wizard:visible').find('#add_zone_guest_traffic_desc:visible').length > 0) { //$steps.filter(':visible').index() == 6
showStep('launch');
completeAction();
return false;
@ -1355,10 +1355,10 @@
}
//when hypervisor is BareMetal (end)
if (!$target.closest('.button.next.final').size())
if (!$target.closest('.button.next.final').length)
showStep($steps.filter(':visible').index() + 2);
else {
if ($target.closest('.button.next.final.post-launch').size()) {
if ($target.closest('.button.next.final.post-launch').length) {
showStep('launch');
}
@ -1369,21 +1369,21 @@
}
// Previous button
if ($target.closest('div.button.previous').size()) {
if ($target.closest('div.button.previous').length) {
showStep($steps.filter(':visible').index(), true);
return false;
}
// Close button
if ($target.closest('div.button.cancel').size()) {
if ($target.closest('div.button.cancel').length) {
close();
return false;
}
// Edit link
if ($target.closest('div.edit').size()) {
if ($target.closest('div.edit').length) {
var $edit = $target.closest('div.edit');
showStep($edit.find('a').attr('href'));
@ -1395,7 +1395,7 @@
var $editTrafficTypeButton = $target.closest('.drop-container .traffic-type-draggable .edit-traffic-type');
var $trafficType = $editTrafficTypeButton.closest('.traffic-type-draggable');
if ($editTrafficTypeButton.size()) {
if ($editTrafficTypeButton.length) {
physicalNetwork.editTrafficTypeDialog($trafficType);
return false;

View File

@ -181,7 +181,7 @@
}).join(',')
);
if ($target.closest('.select.project-view').size()) {
if ($target.closest('.select.project-view').length) {
$('#cloudStack3-container').addClass('project-view');
$projectSwitcher.addClass('alt');
$projectSwitcher.find('.select.project-view').addClass('active')
@ -404,9 +404,9 @@
function checkHoveredLabel($target) {
var $multiWizard = $('div.ui-dialog div.multi-wizard');
if (($target.is('label[for]') && !$target.parents('body.login')) ||
($multiWizard.size() &&
($target.is('.multi-wizard label') && $target.prev('input[type="radio"],input[type="checkbox"]').size()) ||
($target.is('.multi-wizard .select-desc div.name') && $target.parent('div.select-desc').prev('input[type="radio"],input[type="checkbox"]').size())
($multiWizard.length &&
($target.is('.multi-wizard label') && $target.prev('input[type="radio"],input[type="checkbox"]').length) ||
($target.is('.multi-wizard .select-desc div.name') && $target.parent('div.select-desc').prev('input[type="radio"],input[type="checkbox"]').length)
))
return true;
@ -419,7 +419,7 @@
if (checkHoveredLabel($target)) {
$target.addClass('label-hovered');
}
if ($target.closest('#user, #user-options').size()) {
if ($target.closest('#user, #user-options').length) {
return false;
} else $('#user-options').hide();
@ -441,19 +441,19 @@
var $multiWizard = $('div.ui-dialog div.multi-wizard');
// Wizard: trigger click event for input when click it label
if ($multiWizard.size()) {
if ($target.is('.multi-wizard label') && $target.prev('input[type="radio"],input[type="checkbox"]').size()) {
if ($multiWizard.length) {
if ($target.is('.multi-wizard label') && $target.prev('input[type="radio"],input[type="checkbox"]').length) {
$target.prev('input').trigger('click');
}
if ($target.is('.multi-wizard .select-desc div.name') && $target.parent('div.select-desc').prev('input[type="radio"],input[type="checkbox"]').size()) {
if ($target.is('.multi-wizard .select-desc div.name') && $target.parent('div.select-desc').prev('input[type="radio"],input[type="checkbox"]').length) {
$target.parent('div.select-desc').prev('input').trigger('click');
}
}
if (!$container.size()) return true;
if (!$container.length) return true;
// Navigation items
if ($target.closest('li.navigation-item').size() && $target.closest('#navigation').size()) {
if ($target.closest('li.navigation-item').length && $target.closest('#navigation').length) {
var $navItem = $target.closest('li.navigation-item');
if ($navItem.is('.disabled')) return false;
@ -463,7 +463,7 @@
}
// Browser expand
if ($target.hasClass('control expand') && $target.closest('div.panel div.toolbar').size()) {
if ($target.hasClass('control expand') && $target.closest('div.panel div.toolbar').length) {
$browser.cloudBrowser('toggleMaximizePanel', {
panel: $target.closest('div.panel')
});
@ -478,7 +478,7 @@
}
// User options
if ($target.closest('#user div.icon.options').size()) {
if ($target.closest('#user div.icon.options').length) {
$('#user-options').toggle();
return false;

View File

@ -382,7 +382,7 @@
// Make sure all data is loaded to pass to select fn
dependsOnLoaded = $.inArray(
true, $dependsOn.map(function(index, item) { return $(item).find('option').size() ? true : false; })
true, $dependsOn.map(function(index, item) { return $(item).find('option').length ? true : false; })
) > -1;
if (!dependsOnLoaded) {
@ -776,7 +776,7 @@
if (!$formContainer.find('form').valid()) {
// Ignore hidden field validation
if ($formContainer.find('input.error:visible, select.error:visible').size()) {
if ($formContainer.find('input.error:visible, select.error:visible').length) {
return false;
}
}
@ -970,7 +970,7 @@
click: function() {
if (!$listView.find(
'input[type=radio]:checked, input[type=checkbox]:checked'
).size()) {
).length) {
cloudStack.dialog.notice({
message: _l('message.select.instance')
});

View File

@ -41,7 +41,7 @@
var data, elem;
$elem = $target.closest('.cloudStack-elem.' + widget);
if (!$elem.size())
if (!$elem.length)
return true;
$widget = $('.cloudStack-widget.' + widget);

View File

@ -95,7 +95,7 @@
*/
width: function($container, options) {
options = options ? options : {};
var width = $container.find('div.panel').size() < 1 || !options.partial ?
var width = $container.find('div.panel').length < 1 || !options.partial ?
$container.width() : $container.width() - $container.width() / 4;
return width;
@ -105,7 +105,7 @@
* Get left position
*/
position: function($container, options) {
return $container.find('div.panel').size() <= 1 || !options.partial ?
return $container.find('div.panel').length <= 1 || !options.partial ?
0 : _panel.width($container, options) - _panel.width($container, options) / 1.5;
},
@ -340,7 +340,7 @@
}
});
$('#breadcrumbs li').live('click', cloudStack.ui.event.bind(
$(document).on('click', '#breadcrumbs li', cloudStack.ui.event.bind(
'cloudBrowser', {
'breadcrumb': function($target, $browser, data) {

View File

@ -228,9 +228,9 @@
$tbody.width($thead.width());
}
if ($ths.size() > $tds.size()) {
if ($ths.length > $tds.length) {
$ths.width(
$table.width() / $ths.size()
$table.width() / $ths.length
);
return false;
}
@ -281,7 +281,7 @@
var init = function() {
var noSelect = options && options.noSelect == true ? true : false;
if (!$table.closest('div.data-table').size() && !$table.hasClass('no-split')) {
if (!$table.closest('div.data-table').length && !$table.hasClass('no-split')) {
reattachTable();
$table.find('tbody').closest('table').addClass('body');
}
@ -304,7 +304,7 @@
$table.bind('click', function(event) {
var $tr = $(event.target).closest('tr');
if (!$tr.size() || noSelect) return true;
if (!$tr.length || noSelect) return true;
var rowIndex = $tr.index();
toggleSelectRow(rowIndex);

View File

@ -23,7 +23,7 @@
var $listView = $row.closest('.list-view');
if (!$listView.parents('html').size()) return;
if (!$listView.parents('html').length) return;
var $newRow;
var jsonObj = $row.data('json-obj');
@ -56,6 +56,15 @@
}
};
var tabEvents = {
create: function(event, ui) {
manageTabsContent(event, ui);
},
activate: function(event, ui) {
manageTabsContent(event, ui);
}
};
/**
* Available UI actions to perform for buttons
*/
@ -114,7 +123,7 @@
}
).appendTo($detailView);
$detailView.tabs();
$detailView.tabs(tabEvents);
};
var performAction = function(data, options) {
@ -172,7 +181,7 @@
viewArgs.onActionComplete();
}
if (!$detailView.parents('html').size()) {
if (!$detailView.parents('html').length) {
replaceListViewItem(null, args.data, {
$row: $row
});
@ -222,7 +231,7 @@
cloudStack.ui.notifications.add(
notification,
function(args2) { //name parameter as "args2" instead of "args" to avoid override "args" from success: function(args) {
if ($detailView.parents('html').size()) {
if ($detailView.parents('html').length) {
$loading.remove();
if (!noRefresh && !viewArgs.compact) {
@ -376,7 +385,7 @@
var $tbody = $row.closest('tbody');
$row.remove();
if (!$tbody.find('tr').size()) {
if (!$tbody.find('tr').length) {
$("<tr>").addClass('empty').append(
$("<td>").html(_l('label.no.data'))
).appendTo($tbody);
@ -413,7 +422,7 @@
var $tbody = $row.closest('tbody');
$row.remove();
if (!$tbody.find('tr').size()) {
if (!$tbody.find('tr').length) {
$("<tr>").addClass('empty').append(
$("<td>").html(_l('label.no.data'))
).appendTo($tbody);
@ -439,11 +448,11 @@
$detailView.addClass('edit-mode');
var token_value = "";
if ($detailView.find('.button.done').size()) return false;
if ($detailView.find('.button.done').length) return false;
// Convert value TDs
var $inputs = $detailView.find('input, select, textarea').filter(function() {
return !$(this).closest('.tagger').size() && !$(this).attr('type') == 'submit';
return !$(this).closest('.tagger').length && !$(this).attr('type') == 'submit';
});
var action = args.actions[args.actionName];
var id = $detailView.data('view-args').id;
@ -476,7 +485,7 @@
var $token;
var tags_value = "";
$inputs.each(function() {
if ($(this).closest('.tagger').size()) return true;
if ($(this).closest('.tagger').length) return true;
var $input = $(this);
var $value = $input.closest('td.value span');
@ -525,9 +534,9 @@
// Remove Edit form
var $form = $detailView.find('form').filter(function() {
return !$(this).closest('.tagger').size();
return !$(this).closest('.tagger').length;
});
if ($form.size()) {
if ($form.length) {
var $mainGroups = $form.find('div.main-groups').detach();
$form.parent('div').append($mainGroups);
$form.remove();
@ -539,7 +548,7 @@
// Put in original values
var cancelEdits = function($inputs, $editButton) {
$inputs.each(function() {
if ($(this).closest('.tagger').size()) return true;
if ($(this).closest('.tagger').length) return true;
var $input = $(this);
var $value = $input.closest('td.value span');
@ -561,7 +570,7 @@
};
var applyEdits = function($inputs, $editButton) {
if ($inputs.size()) {
if ($inputs.length) {
$inputs.animate({
opacity: 0.5
}, 500);
@ -634,16 +643,16 @@
$editButton.click(function() {
var $inputs = $detailView.find('input, select, textarea').filter(function() {
return !$(this).closest('.tagger').size();
return !$(this).closest('.tagger').length;
});
var $form = $detailView.find('form').filter(function() {
return !$(this).closest('.tagger').size();
return !$(this).closest('.tagger').length;
});
if ($(this).hasClass('done')) {
if (!$form.valid()) {
// Ignore hidden field validation
if ($form.find('input.error:visible, select.error:visible').size()) {
if ($form.find('input.error:visible, select.error:visible').length) {
return false;
}
}
@ -796,7 +805,7 @@
return true;
});
if ($detailView.find('td.value span:data(detail-view-is-editable)').size()) {
if ($detailView.find('td.value span:data(detail-view-is-editable)').length) {
var $detailsEdit = $detailView.find('div.main-groups').detach(),
$detailsEditForm = $('<form>').append($detailsEdit);
@ -805,7 +814,7 @@
// Setup form validation
var $form = $detailView.find('form').filter(function() {
return !$(this).closest('.tagger').size();
return !$(this).closest('.tagger').length;
});
$form.validate();
$form.find('input, select').each(function() {
@ -976,7 +985,7 @@
});
var $actionButtons = $actions.find('div.action:not(.text)');
if ($actionButtons.size() == 1)
if ($actionButtons.length == 1)
$actionButtons.addClass('single');
else {
$actionButtons.filter(':first').addClass('first');
@ -1180,7 +1189,7 @@
context: context
}) : true
) : true;
if ($actions && ($actions.find('div.action').size() || (detailViewArgs.viewAll && showViewAll))) {
if ($actions && ($actions.find('div.action').length || (detailViewArgs.viewAll && showViewAll))) {
$actions.prependTo($firstRow.closest('div.detail-group').closest('.details'));
}
if (detailViewArgs.viewAll && showViewAll) {
@ -1559,12 +1568,14 @@
}
}
$detailView.tabs({
$detailView.tabs(
$.extend(true, {}, tabEvents, {
select: function() {
// Cleanup old tab content
$detailView.find('.detail-group').children().remove();
}
});
}}
)
);
return $detailView;
};
@ -1588,16 +1599,13 @@
return true;
};
$(document).bind('tabscreate',manageTabsContent);
$(document).bind('tabsactivate',manageTabsContent);
// View all links
$('a').live('click', function(event) {
$(document).on('click', 'a', function(event) {
var $target = $(event.target);
var $viewAll = $target.closest('td.view-all a');
var viewAllArgs;
if ($target.closest('div.detail-view').size() && $target.closest('td.view-all a').size()) {
if ($target.closest('div.detail-view').length && $target.closest('td.view-all a').length) {
viewAllArgs = $viewAll.data('detail-view-link-view-all');
viewAll(
viewAllArgs.custom ?
@ -1625,7 +1633,7 @@
var $target = $(event.target);
// Refresh
if ($target.closest('div.toolbar div.refresh').size()) {
if ($target.closest('div.toolbar div.refresh').length) {
loadTabContent(
$target.closest('div.detail-view').find('div.detail-group:visible'),
$target.closest('div.detail-view').data('view-args'),
@ -1636,8 +1644,8 @@
}
// Detail action
if ($target.closest('div.detail-view [detail-action], div.detail-view .action.text').size() &&
!$target.closest('.list-view').size()) {
if ($target.closest('div.detail-view [detail-action], div.detail-view .action.text').length &&
!$target.closest('.list-view').length) {
var $action = $target.closest('.action').find('[detail-action]');
var actionName = $action.attr('detail-action');
var actionCallback = $action.data('detail-view-action-callback');

View File

@ -294,7 +294,7 @@
}
if (needsRefresh) {
if ($listView.closest('.detail-view').size()) {
if ($listView.closest('.detail-view').length) {
$('.detail-view:last .button.refresh').click();
} else {
$loading.remove();
@ -375,7 +375,7 @@
}
if (needsRefresh) {
if (!$listView.closest('.detail-view').size()) {
if (!$listView.closest('.detail-view').length) {
$loading.remove();
}
}
@ -1148,7 +1148,7 @@
if (!(data && data.length)) {
$listView.data('end-of-table', true);
if (!$tbody.find('tr').size()) {
if (!$tbody.find('tr').length) {
return [
$('<tr>').addClass('empty last').append(
$('<td>').html(_l('label.no.data'))
@ -1186,8 +1186,8 @@
.addClass('multiSelectCheckbox')
.click(function() {
var checked = $(this).is(':checked');
var numRows = $(this).parents('tbody').find('input.multiSelectCheckbox').size();
var numRowsChecked = $(this).parents('tbody').find('input.multiSelectCheckbox:checked').size();
var numRows = $(this).parents('tbody').find('input.multiSelectCheckbox').length;
var numRowsChecked = $(this).parents('tbody').find('input.multiSelectCheckbox:checked').length;
var enabled = checked || (numRowsChecked > 0);
toggleMultiSelectActions($td.closest('.list-view'), enabled);
@ -1326,7 +1326,7 @@
true, {},
$tr.closest('.list-view').data('view-args').context
);
var rowIndex = $tr.closest('tbody').find('tr').size() - ($tr.index());
var rowIndex = $tr.closest('tbody').find('tr').length - ($tr.index());
context[viewArgs.activeSection] = $tr.data('json-obj');
@ -1630,11 +1630,11 @@
position: 'absolute',
left: $quickView.offset().left + $quickView.outerWidth() - $quickViewTooltip.width() - 2*(parseInt($quickView.css('border-left-width')) + parseInt($quickView.css('border-right-width'))),
top: $quickView.offset().top,
zIndex: $tr.closest('.panel').zIndex() + 1
zIndex: $tr.closest('.panel').css("zIndex") + 1
});
$quickViewTooltip.mouseleave(function() {
if (!$('.overlay:visible').size()) {
if (!$('.overlay:visible').length) {
$quickViewTooltip.remove();
}
});
@ -1662,7 +1662,7 @@
$('<td>')
.addClass('loading icon')
.attr({
'colspan': $table.find('th').size()
'colspan': $table.find('th').length
})
);
@ -1830,7 +1830,7 @@
// Clear out any existing list view
var $existingListView = $container.find('div.list-view');
if ($existingListView.size()) {
if ($existingListView.length) {
$existingListView.remove();
}
@ -1884,7 +1884,7 @@
}
}
if ($switcher && $switcher.find('option').size() == 1) {
if ($switcher && $switcher.find('option').length == 1) {
listViewData = args.sections[
$switcher.find('select').val()
].listView;
@ -2018,7 +2018,7 @@
var code = (event.keyCode ? event.keyCode : event.which);
var $input = $listView.find('input:focus');
if ($input.size() && $input.hasClass('edit') && code === 13) {
if ($input.length && $input.hasClass('edit') && code === 13) {
uiActions.edit($input.closest('tr'), {
callback: listViewData.actions.edit.action
});
@ -2078,7 +2078,7 @@
return true;
});
$listView.find('select').bind('change', function(event) {
if ($(event.target).closest('.section-select').size()) return true;
if ($(event.target).closest('.section-select').length) return true;
if ((event.type == 'click' ||
event.type == 'mouseup') &&
($(event.target).is('select') ||
@ -2124,7 +2124,7 @@
};
$listView.find('.advanced-search .icon').bind('click', function(event) {
if ($listView.find('.advanced-search .form-container:visible').size()) {
if ($listView.find('.advanced-search .form-container:visible').length) {
closeAdvancedSearch();
return false;
@ -2181,7 +2181,7 @@
listView = args.sections[args.activeSection].listView;
}
if (listView && listView.disableInfiniteScrolling) return false;
if ($listView.find('tr.last, td.loading:visible').size()) return false;
if ($listView.find('tr.last, td.loading:visible').length) return false;
clearTimeout(infScrollTimer);
infScrollTimer = setTimeout(function() {
@ -2246,12 +2246,12 @@
var id = $target.closest('tr').data('list-view-item-id');
var jsonObj = $target.closest('tr').data('jsonObj');
var detailViewArgs;
var detailViewPresent = ($target.closest('div.data-table tr td.first').size() &&
listViewData.detailView && !$target.closest('div.edit').size()) && !listViewData.detailView.noPanelView;
var detailViewPresent = ($target.closest('div.data-table tr td.first').length &&
listViewData.detailView && !$target.closest('div.edit').length) && !listViewData.detailView.noPanelView;
var uiCustom = args.uiCustom == true ? true : false;
// Click on first item will trigger detail view (if present)
if (detailViewPresent && !uiCustom && !$target.closest('.empty, .loading').size()) {
if (detailViewPresent && !uiCustom && !$target.closest('.empty, .loading').length) {
var $loading = $('<div>').addClass('loading-overlay');
$target.closest('div.data-table').prepend($loading); //overlay the whole listView, so users can't click another row until click-handling for this row is done (e.g. API response is back)
@ -2317,9 +2317,9 @@
// Action icons
if (!$target.closest('td.actions').hasClass('reorder') &&
($target.closest('td.actions').size() ||
$target.closest('.action.add').size() ||
$target.closest('.action.main-action').size())) {
($target.closest('td.actions').length ||
$target.closest('.action.add').length ||
$target.closest('.action.main-action').length)) {
var actionID = $target.closest('.action').data('list-view-action-id');
var $tr;
@ -2327,8 +2327,8 @@
return false;
}
if ($target.closest('.action.add').size() ||
$target.closest('.action.main-action:not(.multiSelectAction)').size()) {
if ($target.closest('.action.add').length ||
$target.closest('.action.main-action:not(.multiSelectAction)').length) {
$tr = $target.closest('div.list-view').find('tr:first'); // Dummy row
} else {
if (listViewData.actions[actionID].isMultiSelectAction) {
@ -2360,7 +2360,7 @@
}
// Section switcher
if ($target.is('a') && $target.closest('div.section-switcher').size()) {
if ($target.is('a') && $target.closest('div.section-switcher').length) {
makeListView($container, args, $target.data('list-view-section-id'));
return false;
@ -2460,7 +2460,7 @@
if (preFilter) {
$selectedVMs = $listView.find('tbody tr').filter(function() {
return $(this).find('td.multiselect input[type=checkbox]:checked').size()
return $(this).find('td.multiselect input[type=checkbox]:checked').length
});
context[$listView.data('view-args').activeSection] = $selectedVMs.map(function(index, item) {
return $(item).data('json-obj');

View File

@ -229,7 +229,7 @@
$td.append($select);
}
else {
var matchingValue = $matchingOption.size() ?
var matchingValue = $matchingOption.length ?
$matchingOption.html() : data[fieldName];
$td.append($('<span>').html(_s(matchingValue)));
@ -243,7 +243,7 @@
var $subItems = $td.closest('.data-item').find('.expandable-listing tr');
if ($subItems.size()) {
if ($subItems.length) {
context.subItemData = $subItems.map(function() {
return $(this).data('json-obj');
});
@ -598,7 +598,7 @@
text: _l('label.apply'),
'class': 'ok',
click: function() {
if (!$listView.find('input[type=radio]:checked, input[type=checkbox]:checked').size()) {
if (!$listView.find('input[type=radio]:checked, input[type=checkbox]:checked').length) {
cloudStack.dialog.notice({
message: _l('message.select.item')
});
@ -660,7 +660,7 @@
);
$multi.find('.data tr').filter(function() {
return !$(this).closest('.expandable-listing').size();
return !$(this).closest('.expandable-listing').length;
}).each(function() {
var $tr = $(this);
@ -929,8 +929,8 @@
$loading.prependTo($multi);
reorder.moveDrag.action({
targetIndex: ui.item.index(),
nextItem: ui.item.next().size() ? ui.item.next().data('json-obj') : null,
prevItem: ui.item.prev().size() ? ui.item.prev().data('json-obj') : null,
nextItem: ui.item.next().length ? ui.item.next().data('json-obj') : null,
prevItem: ui.item.prev().length ? ui.item.prev().data('json-obj') : null,
context: $.extend(true, {}, context, {
// Passes all rules, so that each index can be updated
multiRule: [ui.item.data('json-obj')]
@ -1121,7 +1121,7 @@
$addVM.bind('click', function() {
// Validate form first
if (!$multiForm.valid()) {
if ($multiForm.find('input.error:visible').size()) {
if ($multiForm.find('input.error:visible').length) {
return false;
}
}

View File

@ -145,8 +145,8 @@
resetTotal: function($popup) {
var $total = $popup.data('notifications-attach-to').find('div.total span');
var $items = $popup.find('ul li');
var total = $items.size();
var completed = $items.filter(':not(.pending)').size();
var total = $items.length;
var completed = $items.filter(':not(.pending)').length;
var newTotal = total - completed;
if (newTotal < 0) newTotal = completed;
@ -331,7 +331,7 @@
var $attachTo, $popup;
// Notifications header area
if ($target.closest('.notifications').size()) {
if ($target.closest('.notifications').length) {
$attachTo = $target.closest('.notifications');
$popup = $attachTo.data('notifications-popup');
notifications.popup.show($popup, $attachTo);
@ -352,11 +352,11 @@
}
// Popup
if ($target.closest('div.notification-box').size()) {
if ($target.closest('div.notification-box').length) {
$popup = $target.closest('div.notification-box');
// Clear list
if ($target.closest('.button.clear-list').size()) {
if ($target.closest('.button.clear-list').length) {
notifications.clear($popup);
}
@ -379,7 +379,7 @@
$(window).resize(function(event) {
var $popup = $('div.notification-box:visible');
if ($popup.size())
if ($popup.length)
notifications.popup.reposition($popup, $popup.data('notifications-attach-to'));
});
})(window.jQuery, window.cloudStack, window._l);

View File

@ -165,7 +165,7 @@
// Fix overlay
setTimeout(function() {
$('.tooltip-box').zIndex($(':ui-dialog').zIndex() + 10);
$('.tooltip-box').css( "zIndex", $(':ui-dialog').css("zIndex") + 10);
});
};

View File

@ -103,7 +103,7 @@
var $li = $target.closest('li');
if ($target.is('li div.expand') && $li.data('tree-view-item-obj')) {
if ($li.find('ul').size()) {
if ($li.find('ul').length) {
$li.find('ul').remove();
$li.removeClass('expanded');
@ -128,7 +128,7 @@
$treeView.find('li .name').removeClass('selected');
$target.addClass('selected');
if ($browser && $browser.size()) {
if ($browser && $browser.length) {
$browser.cloudBrowser('addPanel', {
partial: true,
title: $target.html(),

View File

@ -1430,7 +1430,7 @@
args.response.success({
data: items
});
if(jQuery('#details-tab-aclRules').siblings('div.toolbar').children('div.add').size() === 0){
if(jQuery('#details-tab-aclRules').siblings('div.toolbar').children('div.add').length === 0){
var $addAclRuleDivButton = jQuery('<div>').addClass('button add');
var $spanAddAclRuleButtonMessage = jQuery('<span>').html(_l('label.add.ACL'));
@ -1474,7 +1474,7 @@
});
jQuery('#details-tab-aclRules').siblings('div.toolbar').append($addAclRuleDivButton);
}
if(jQuery('#details-tab-aclRules').siblings('div.toolbar').children('div.export').size() === 0){
if(jQuery('#details-tab-aclRules').siblings('div.toolbar').children('div.export').length === 0){
var $exportAclsDivButton = jQuery('<div>').addClass('button export');
var $linkExportAclRulesButtonMessage = jQuery('<a>').html(_l('label.acl.export'));

View File

@ -43,11 +43,11 @@
var $toolbar = $listView.find('> .toolbar');
var $table = $listView.find('> .data-table');
equal($listView.size(), 1, 'List view present');
equal($toolbar.size(), 1, 'Toolbar present');
equal($table.size(), 1, 'Data table div present');
equal($table.find('> .fixed-header table thead tr').size(), 1, 'Fixed header present');
equal($table.find('> table.body tbody').size(), 1, 'Body table present');
equal($listView.length, 1, 'List view present');
equal($toolbar.length, 1, 'Toolbar present');
equal($table.length, 1, 'Data table div present');
equal($table.find('> .fixed-header table thead tr').length, 1, 'Fixed header present');
equal($table.find('> table.body tbody').length, 1, 'Body table present');
});
test('Fields: basic', function() {
@ -60,7 +60,7 @@
});
var $fields = $listView.find('.fixed-header table thead tr th');
equal($fields.size(), 1, 'Column present');
equal($fields.length, 1, 'Column present');
ok($fields.hasClass('fieldA'), 'Has ID as classname');
equal($fields.html(), 'TestFieldA', 'Has correct label');
});
@ -82,7 +82,7 @@
$.each(testFields, function(k, v) {
var $field = $fields.filter('.' + k);
equal($field.size(), 1, k + '-> Column present');
equal($field.length, 1, k + '-> Column present');
equal($field.html(), v.label, k + '-> Has correct label');
});
});
@ -90,8 +90,8 @@
test('Data loading state', function() {
var $listView = listView();
equal($listView.find('table.body tr.loading').size(), 1, 'Row has loading state');
equal($listView.find('table.body tr.loading td.loading.icon').size(), 1, 'Row cell has loading icon');
equal($listView.find('table.body tr.loading').length, 1, 'Row has loading state');
equal($listView.find('table.body tr.loading td.loading.icon').length, 1, 'Row cell has loading icon');
});
asyncTest('Data provider: basic', function() {
@ -111,7 +111,7 @@
}
});
equal($listView.find('.data-table table.body tbody tr.empty td').size(), 1, 'Body table has empty table row');
equal($listView.find('.data-table table.body tbody tr.empty td').length, 1, 'Body table has empty table row');
equal($listView.find('.data-table table.body tbody tr.empty td').html(), 'label.no.data', 'Empty contents notice displayed');
});
@ -134,8 +134,8 @@
}
});
equal($listView.find('table.body tbody tr').size(), 1, 'Body table has table row');
equal($listView.find('table.body tbody tr td').size(), 2, 'Body table has table cells');
equal($listView.find('table.body tbody tr').length, 1, 'Body table has table row');
equal($listView.find('table.body tbody tr td').length, 2, 'Body table has table cells');
equal($listView.find('table.body tbody tr td.fieldA > span').html(), 'FieldDataA', 'FieldDataA content present');
equal($listView.find('table.body tbody tr td.fieldB > span').html(), 'FieldDataB', 'FieldDataB content present');
});
@ -163,7 +163,7 @@
}
});
equal($listView.find('table.body tbody tr').size(), 3, 'Body table has correct # of table rows');
equal($listView.find('table.body tbody tr').length, 3, 'Body table has correct # of table rows');
$(testData).map(function(index, data) {
var $tr = $listView.find('table.body tbody tr').filter(function() {
@ -198,9 +198,9 @@
}
});
equal($listView.find('table tr th').size(), 2, 'Correct number of header columns present');
equal($listView.find('table.body tbody tr td').size(), 2, 'Correct number of data body columns present');
ok(!$listView.find('table.body tbody td.fieldHidden').size(), 'Hidden field not present');
equal($listView.find('table tr th').length, 2, 'Correct number of header columns present');
equal($listView.find('table.body tbody tr td').length, 2, 'Correct number of data body columns present');
ok(!$listView.find('table.body tbody td.fieldHidden').length, 'Hidden field not present');
});
test('Filter dropdown', function() {
@ -229,7 +229,7 @@
var $filters = $listView.find('.filters select');
var testFilterDropdownContent = function() {
equal($filters.find('option').size(), 2, 'Correct # of filters present');
equal($filters.find('option').length, 2, 'Correct # of filters present');
equal($filters.find('option:first').html(), 'FilterOnLabel', 'Filter on label present');
equal($filters.find('option:last').html(), 'FilterOffLabel', 'Filter off label present');
};