mirror of https://github.com/apache/cloudstack.git
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:
parent
ac73e7e671
commit
093ab722b3
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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)")
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
- 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) {
|
||||
$("#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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 ($) {
|
||||
(function ( $ ) {
|
||||
|
||||
var options = {
|
||||
series: { fillBetween: null } // or number
|
||||
series: {
|
||||
fillBetween: null // or number
|
||||
}
|
||||
};
|
||||
|
||||
function init(plot) {
|
||||
function findBottomSeries(s, allseries) {
|
||||
function init( plot ) {
|
||||
|
||||
function findBottomSeries( s, allseries ) {
|
||||
|
||||
var i;
|
||||
for (i = 0; i < allseries.length; ++i) {
|
||||
if (allseries[i].id == s.fillBetween)
|
||||
return allseries[i];
|
||||
|
||||
for ( i = 0; i < allseries.length; ++i ) {
|
||||
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)
|
||||
return;
|
||||
function computeFillBottoms( plot, s, datapoints ) {
|
||||
|
||||
var other = findBottomSeries(s, plot.getData());
|
||||
if (!other)
|
||||
if ( s.fillBetween == null ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var other = findBottomSeries( s, plot.getData() );
|
||||
|
||||
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)
|
||||
while ( true ) {
|
||||
|
||||
if ( i >= points.length ) {
|
||||
break;
|
||||
}
|
||||
|
||||
l = newpoints.length;
|
||||
|
||||
if (points[i] == null) {
|
||||
if ( points[ i ] == null ) {
|
||||
|
||||
// copy gaps
|
||||
for (m = 0; m < ps; ++m)
|
||||
newpoints.push(points[i + m]);
|
||||
i += ps;
|
||||
|
||||
for ( m = 0; m < ps; ++m ) {
|
||||
newpoints.push( points[ i + m ] );
|
||||
}
|
||||
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)
|
||||
newpoints.push(points[i + m]);
|
||||
|
||||
if ( !withlines ) {
|
||||
for ( m = 0; m < ps; ++m ) {
|
||||
newpoints.push( points[ i + m ] );
|
||||
}
|
||||
}
|
||||
|
||||
i += ps;
|
||||
}
|
||||
else if (otherpoints[j] == null) {
|
||||
|
||||
} else if ( otherpoints[ j ] == null ) {
|
||||
|
||||
// oops, got a gap
|
||||
for (m = 0; m < ps; ++m)
|
||||
newpoints.push(null);
|
||||
|
||||
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];
|
||||
|
||||
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)
|
||||
newpoints.push(points[i + m]);
|
||||
if ( px === qx ) {
|
||||
|
||||
//newpoints[l + 1] += qy;
|
||||
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(points[i + m]);
|
||||
|
||||
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( 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)
|
||||
newpoints.push(points[i + 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)
|
||||
bottom = qy + (otherpoints[j - otherps + 1] - qy) * (px - qx) / (otherpoints[j - otherps] - qx);
|
||||
|
||||
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,31 +192,35 @@ plugin, possibly some code could be shared.
|
|||
|
||||
fromgap = false;
|
||||
|
||||
if (l != newpoints.length && withbottom)
|
||||
newpoints[l + 2] = bottom;
|
||||
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)
|
||||
newpoints[l + ps + m] = newpoints[l + m];
|
||||
newpoints[l + 1] = newpoints[l - ps + 1];
|
||||
|
||||
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 ];
|
||||
}
|
||||
}
|
||||
|
||||
datapoints.points = newpoints;
|
||||
}
|
||||
|
||||
plot.hooks.processDatapoints.push(computeFillBottoms);
|
||||
plot.hooks.processDatapoints.push( computeFillBottoms );
|
||||
}
|
||||
|
||||
$.plot.plugins.push({
|
||||
init: init,
|
||||
options: options,
|
||||
name: 'fillbetween',
|
||||
version: '1.0'
|
||||
name: "fillbetween",
|
||||
version: "1.0"
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
|
|
|
|||
|
|
@ -1,51 +1,54 @@
|
|||
/*
|
||||
Flot plugin for plotting images, e.g. useful for putting ticks on a
|
||||
prerendered complex visualization.
|
||||
/* Flot plugin for plotting images.
|
||||
|
||||
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.
|
||||
Copyright (c) 2007-2014 IOLA and Ole Laursen.
|
||||
Licensed under the MIT license.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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.
|
||||
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:
|
||||
|
||||
Options for the plugin are
|
||||
[ "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.
|
||||
|
||||
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: {
|
||||
show: boolean
|
||||
anchor: "corner" or "center"
|
||||
alpha: [0,1]
|
||||
alpha: [ 0, 1 ]
|
||||
}
|
||||
}
|
||||
|
||||
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
|
|
@ -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
|
||||
|
|
@ -22,41 +23,41 @@ Options:
|
|||
}
|
||||
|
||||
xaxis, yaxis, x2axis, y2axis: {
|
||||
zoomRange: null // or [number, number] (min range, max range) or false
|
||||
panRange: null // or [number, number] (min, max) or false
|
||||
zoomRange: null // or [ number, number ] (min range, max range) or false
|
||||
panRange: null // or [ number, number ] (min, max) or false
|
||||
}
|
||||
|
||||
"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:
|
||||
|
||||
plot = $.plot(...);
|
||||
|
||||
// zoom default amount in on the pixel (10, 20)
|
||||
// zoom default amount in on the pixel ( 10, 20 )
|
||||
plot.zoom({ center: { left: 10, top: 20 } });
|
||||
|
||||
// zoom out again
|
||||
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,68 +1,80 @@
|
|||
/*
|
||||
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.
|
||||
|
||||
selection: {
|
||||
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.
|
||||
|
||||
placeholder.bind("plotselected", function(event, ranges) {
|
||||
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)
|
||||
// similar for yaxis - with multiple axes, the extra ones are in
|
||||
// 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)
|
||||
- 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)
|
||||
- clearSelection( preventEvent )
|
||||
|
||||
Clear the selection rectangle. Pass in true to avoid getting a
|
||||
"plotunselected" event.
|
||||
|
||||
- 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',
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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])
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -450,7 +450,7 @@
|
|||
});
|
||||
|
||||
// Logout action
|
||||
$('#user-options a').live('click', function() {
|
||||
$(document).on('click', '#user-options a', function() {
|
||||
loginArgs.logoutAction({
|
||||
context: cloudStack.context
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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'));
|
||||
|
|
|
|||
|
|
@ -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'),
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@
|
|||
$plugin.click(function() {
|
||||
var $mainSection = $('#navigation ul li').filter('.' + plugin.id);
|
||||
|
||||
if ($mainSection.size()) {
|
||||
if ($mainSection.length) {
|
||||
$mainSection.click();
|
||||
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@
|
|||
|
||||
// Fix overlay
|
||||
setTimeout(function() {
|
||||
$('.tooltip-box').zIndex($(':ui-dialog').zIndex() + 10);
|
||||
$('.tooltip-box').css( "zIndex", $(':ui-dialog').css("zIndex") + 10);
|
||||
});
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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'));
|
||||
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue