Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE
/
cloud
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
94
Merge Requests
10
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
Commit
9f9a260f
authored
Oct 29, 2013
by
Kálmán Viktor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dashboard: switch to a working slider
parent
543b883a
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
739 additions
and
39 deletions
+739
-39
circle/dashboard/static/dashboard/bootstrap-slider/bootstrap-slider.js
+389
-0
circle/dashboard/static/dashboard/bootstrap-slider/less/slider.less
+105
-0
circle/dashboard/static/dashboard/bootstrap-slider/slider.css
+205
-0
circle/dashboard/static/dashboard/dashboard.js
+16
-26
circle/dashboard/static/dashboard/vm-create.js
+11
-3
circle/dashboard/templates/dashboard/base.html
+2
-3
circle/dashboard/templates/dashboard/vm-detail-resources.html
+11
-7
No files found.
circle/dashboard/static/dashboard/bootstrap-slider/bootstrap-slider.js
0 → 100644
View file @
9f9a260f
/* =========================================================
* bootstrap-slider.js v2.0.0
* http://www.eyecon.ro/bootstrap-slider
* =========================================================
* Copyright 2012 Stefan Petre
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================= */
!
function
(
$
)
{
var
Slider
=
function
(
element
,
options
)
{
this
.
element
=
$
(
element
);
this
.
picker
=
$
(
'<div class="slider">'
+
'<div class="slider-track">'
+
'<div class="slider-selection"></div>'
+
'<div class="slider-handle"></div>'
+
'<div class="slider-handle"></div>'
+
'</div>'
+
'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
+
'</div>'
)
.
insertBefore
(
this
.
element
)
.
append
(
this
.
element
);
this
.
id
=
this
.
element
.
data
(
'slider-id'
)
||
options
.
id
;
if
(
this
.
id
)
{
this
.
picker
[
0
].
id
=
this
.
id
;
}
if
(
typeof
Modernizr
!==
'undefined'
&&
Modernizr
.
touch
)
{
this
.
touchCapable
=
true
;
}
var
tooltip
=
this
.
element
.
data
(
'slider-tooltip'
)
||
options
.
tooltip
;
this
.
tooltip
=
this
.
picker
.
find
(
'.tooltip'
);
this
.
tooltipInner
=
this
.
tooltip
.
find
(
'div.tooltip-inner'
);
this
.
orientation
=
this
.
element
.
data
(
'slider-orientation'
)
||
options
.
orientation
;
switch
(
this
.
orientation
)
{
case
'vertical'
:
this
.
picker
.
addClass
(
'slider-vertical'
);
this
.
stylePos
=
'top'
;
this
.
mousePos
=
'pageY'
;
this
.
sizePos
=
'offsetHeight'
;
this
.
tooltip
.
addClass
(
'right'
)[
0
].
style
.
left
=
'100%'
;
break
;
default
:
this
.
picker
.
addClass
(
'slider-horizontal'
)
.
css
(
'width'
,
this
.
element
.
outerWidth
());
this
.
orientation
=
'horizontal'
;
this
.
stylePos
=
'left'
;
this
.
mousePos
=
'pageX'
;
this
.
sizePos
=
'offsetWidth'
;
this
.
tooltip
.
addClass
(
'top'
)[
0
].
style
.
top
=
-
this
.
tooltip
.
outerHeight
()
-
14
+
'px'
;
break
;
}
this
.
min
=
this
.
element
.
data
(
'slider-min'
)
||
options
.
min
;
this
.
max
=
this
.
element
.
data
(
'slider-max'
)
||
options
.
max
;
this
.
step
=
this
.
element
.
data
(
'slider-step'
)
||
options
.
step
;
this
.
value
=
this
.
element
.
data
(
'slider-value'
)
||
options
.
value
;
if
(
this
.
value
[
1
])
{
this
.
range
=
true
;
}
this
.
selection
=
this
.
element
.
data
(
'slider-selection'
)
||
options
.
selection
;
this
.
selectionEl
=
this
.
picker
.
find
(
'.slider-selection'
);
if
(
this
.
selection
===
'none'
)
{
this
.
selectionEl
.
addClass
(
'hide'
);
}
this
.
selectionElStyle
=
this
.
selectionEl
[
0
].
style
;
this
.
handle1
=
this
.
picker
.
find
(
'.slider-handle:first'
);
this
.
handle1Stype
=
this
.
handle1
[
0
].
style
;
this
.
handle2
=
this
.
picker
.
find
(
'.slider-handle:last'
);
this
.
handle2Stype
=
this
.
handle2
[
0
].
style
;
var
handle
=
this
.
element
.
data
(
'slider-handle'
)
||
options
.
handle
;
switch
(
handle
)
{
case
'round'
:
this
.
handle1
.
addClass
(
'round'
);
this
.
handle2
.
addClass
(
'round'
);
break
case
'triangle'
:
this
.
handle1
.
addClass
(
'triangle'
);
this
.
handle2
.
addClass
(
'triangle'
);
break
}
if
(
this
.
range
)
{
this
.
value
[
0
]
=
Math
.
max
(
this
.
min
,
Math
.
min
(
this
.
max
,
this
.
value
[
0
]));
this
.
value
[
1
]
=
Math
.
max
(
this
.
min
,
Math
.
min
(
this
.
max
,
this
.
value
[
1
]));
}
else
{
this
.
value
=
[
Math
.
max
(
this
.
min
,
Math
.
min
(
this
.
max
,
this
.
value
))];
this
.
handle2
.
addClass
(
'hide'
);
if
(
this
.
selection
==
'after'
)
{
this
.
value
[
1
]
=
this
.
max
;
}
else
{
this
.
value
[
1
]
=
this
.
min
;
}
}
this
.
diff
=
this
.
max
-
this
.
min
;
this
.
percentage
=
[
(
this
.
value
[
0
]
-
this
.
min
)
*
100
/
this
.
diff
,
(
this
.
value
[
1
]
-
this
.
min
)
*
100
/
this
.
diff
,
this
.
step
*
100
/
this
.
diff
];
this
.
offset
=
this
.
picker
.
offset
();
this
.
size
=
this
.
picker
[
0
][
this
.
sizePos
];
this
.
formater
=
options
.
formater
;
this
.
layout
();
if
(
this
.
touchCapable
)
{
// Touch: Bind touch events:
this
.
picker
.
on
({
touchstart
:
$
.
proxy
(
this
.
mousedown
,
this
)
});
}
else
{
this
.
picker
.
on
({
mousedown
:
$
.
proxy
(
this
.
mousedown
,
this
)
});
}
if
(
tooltip
===
'show'
)
{
this
.
picker
.
on
({
mouseenter
:
$
.
proxy
(
this
.
showTooltip
,
this
),
mouseleave
:
$
.
proxy
(
this
.
hideTooltip
,
this
)
});
}
else
{
this
.
tooltip
.
addClass
(
'hide'
);
}
};
Slider
.
prototype
=
{
constructor
:
Slider
,
over
:
false
,
inDrag
:
false
,
showTooltip
:
function
(){
this
.
tooltip
.
addClass
(
'in'
);
//var left = Math.round(this.percent*this.width);
//this.tooltip.css('left', left - this.tooltip.outerWidth()/2);
this
.
over
=
true
;
},
hideTooltip
:
function
(){
if
(
this
.
inDrag
===
false
)
{
this
.
tooltip
.
removeClass
(
'in'
);
}
this
.
over
=
false
;
},
layout
:
function
(){
this
.
handle1Stype
[
this
.
stylePos
]
=
this
.
percentage
[
0
]
+
'%'
;
this
.
handle2Stype
[
this
.
stylePos
]
=
this
.
percentage
[
1
]
+
'%'
;
if
(
this
.
orientation
==
'vertical'
)
{
this
.
selectionElStyle
.
top
=
Math
.
min
(
this
.
percentage
[
0
],
this
.
percentage
[
1
])
+
'%'
;
this
.
selectionElStyle
.
height
=
Math
.
abs
(
this
.
percentage
[
0
]
-
this
.
percentage
[
1
])
+
'%'
;
}
else
{
this
.
selectionElStyle
.
left
=
Math
.
min
(
this
.
percentage
[
0
],
this
.
percentage
[
1
])
+
'%'
;
this
.
selectionElStyle
.
width
=
Math
.
abs
(
this
.
percentage
[
0
]
-
this
.
percentage
[
1
])
+
'%'
;
}
if
(
this
.
range
)
{
this
.
tooltipInner
.
text
(
this
.
formater
(
this
.
value
[
0
])
+
' : '
+
this
.
formater
(
this
.
value
[
1
])
);
this
.
tooltip
[
0
].
style
[
this
.
stylePos
]
=
this
.
size
*
(
this
.
percentage
[
0
]
+
(
this
.
percentage
[
1
]
-
this
.
percentage
[
0
])
/
2
)
/
100
-
(
this
.
orientation
===
'vertical'
?
this
.
tooltip
.
outerHeight
()
/
2
:
this
.
tooltip
.
outerWidth
()
/
2
)
+
'px'
;
}
else
{
this
.
tooltipInner
.
text
(
this
.
formater
(
this
.
value
[
0
])
);
this
.
tooltip
[
0
].
style
[
this
.
stylePos
]
=
this
.
size
*
this
.
percentage
[
0
]
/
100
-
(
this
.
orientation
===
'vertical'
?
this
.
tooltip
.
outerHeight
()
/
2
:
this
.
tooltip
.
outerWidth
()
/
2
)
+
'px'
;
}
},
mousedown
:
function
(
ev
)
{
// Touch: Get the original event:
if
(
this
.
touchCapable
&&
ev
.
type
===
'touchstart'
)
{
ev
=
ev
.
originalEvent
;
}
this
.
offset
=
this
.
picker
.
offset
();
this
.
size
=
this
.
picker
[
0
][
this
.
sizePos
];
var
percentage
=
this
.
getPercentage
(
ev
);
if
(
this
.
range
)
{
var
diff1
=
Math
.
abs
(
this
.
percentage
[
0
]
-
percentage
);
var
diff2
=
Math
.
abs
(
this
.
percentage
[
1
]
-
percentage
);
this
.
dragged
=
(
diff1
<
diff2
)
?
0
:
1
;
}
else
{
this
.
dragged
=
0
;
}
this
.
percentage
[
this
.
dragged
]
=
percentage
;
this
.
layout
();
if
(
this
.
touchCapable
)
{
// Touch: Bind touch events:
$
(
document
).
on
({
touchmove
:
$
.
proxy
(
this
.
mousemove
,
this
),
touchend
:
$
.
proxy
(
this
.
mouseup
,
this
)
});
}
else
{
$
(
document
).
on
({
mousemove
:
$
.
proxy
(
this
.
mousemove
,
this
),
mouseup
:
$
.
proxy
(
this
.
mouseup
,
this
)
});
}
this
.
inDrag
=
true
;
var
val
=
this
.
calculateValue
();
this
.
element
.
trigger
({
type
:
'slideStart'
,
value
:
val
}).
trigger
({
type
:
'slide'
,
value
:
val
});
return
false
;
},
mousemove
:
function
(
ev
)
{
// Touch: Get the original event:
if
(
this
.
touchCapable
&&
ev
.
type
===
'touchmove'
)
{
ev
=
ev
.
originalEvent
;
}
var
percentage
=
this
.
getPercentage
(
ev
);
if
(
this
.
range
)
{
if
(
this
.
dragged
===
0
&&
this
.
percentage
[
1
]
<
percentage
)
{
this
.
percentage
[
0
]
=
this
.
percentage
[
1
];
this
.
dragged
=
1
;
}
else
if
(
this
.
dragged
===
1
&&
this
.
percentage
[
0
]
>
percentage
)
{
this
.
percentage
[
1
]
=
this
.
percentage
[
0
];
this
.
dragged
=
0
;
}
}
this
.
percentage
[
this
.
dragged
]
=
percentage
;
this
.
layout
();
var
val
=
this
.
calculateValue
();
this
.
element
.
trigger
({
type
:
'slide'
,
value
:
val
})
.
data
(
'value'
,
val
)
.
prop
(
'value'
,
val
);
return
false
;
},
mouseup
:
function
(
ev
)
{
if
(
this
.
touchCapable
)
{
// Touch: Bind touch events:
$
(
document
).
off
({
touchmove
:
this
.
mousemove
,
touchend
:
this
.
mouseup
});
}
else
{
$
(
document
).
off
({
mousemove
:
this
.
mousemove
,
mouseup
:
this
.
mouseup
});
}
this
.
inDrag
=
false
;
if
(
this
.
over
==
false
)
{
this
.
hideTooltip
();
}
this
.
element
;
var
val
=
this
.
calculateValue
();
this
.
element
.
trigger
({
type
:
'slideStop'
,
value
:
val
})
.
data
(
'value'
,
val
)
.
prop
(
'value'
,
val
);
return
false
;
},
calculateValue
:
function
()
{
var
val
;
if
(
this
.
range
)
{
val
=
[
(
this
.
min
+
Math
.
round
((
this
.
diff
*
this
.
percentage
[
0
]
/
100
)
/
this
.
step
)
*
this
.
step
),
(
this
.
min
+
Math
.
round
((
this
.
diff
*
this
.
percentage
[
1
]
/
100
)
/
this
.
step
)
*
this
.
step
)
];
this
.
value
=
val
;
}
else
{
val
=
(
this
.
min
+
Math
.
round
((
this
.
diff
*
this
.
percentage
[
0
]
/
100
)
/
this
.
step
)
*
this
.
step
);
this
.
value
=
[
val
,
this
.
value
[
1
]];
}
return
val
;
},
getPercentage
:
function
(
ev
)
{
if
(
this
.
touchCapable
)
{
ev
=
ev
.
touches
[
0
];
}
var
percentage
=
(
ev
[
this
.
mousePos
]
-
this
.
offset
[
this
.
stylePos
])
*
100
/
this
.
size
;
percentage
=
Math
.
round
(
percentage
/
this
.
percentage
[
2
])
*
this
.
percentage
[
2
];
return
Math
.
max
(
0
,
Math
.
min
(
100
,
percentage
));
},
getValue
:
function
()
{
if
(
this
.
range
)
{
return
this
.
value
;
}
return
this
.
value
[
0
];
},
setValue
:
function
(
val
)
{
this
.
value
=
val
;
if
(
this
.
range
)
{
this
.
value
[
0
]
=
Math
.
max
(
this
.
min
,
Math
.
min
(
this
.
max
,
this
.
value
[
0
]));
this
.
value
[
1
]
=
Math
.
max
(
this
.
min
,
Math
.
min
(
this
.
max
,
this
.
value
[
1
]));
}
else
{
this
.
value
=
[
Math
.
max
(
this
.
min
,
Math
.
min
(
this
.
max
,
this
.
value
))];
this
.
handle2
.
addClass
(
'hide'
);
if
(
this
.
selection
==
'after'
)
{
this
.
value
[
1
]
=
this
.
max
;
}
else
{
this
.
value
[
1
]
=
this
.
min
;
}
}
this
.
diff
=
this
.
max
-
this
.
min
;
this
.
percentage
=
[
(
this
.
value
[
0
]
-
this
.
min
)
*
100
/
this
.
diff
,
(
this
.
value
[
1
]
-
this
.
min
)
*
100
/
this
.
diff
,
this
.
step
*
100
/
this
.
diff
];
this
.
layout
();
}
};
$
.
fn
.
slider
=
function
(
option
,
val
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
),
data
=
$this
.
data
(
'slider'
),
options
=
typeof
option
===
'object'
&&
option
;
if
(
!
data
)
{
$this
.
data
(
'slider'
,
(
data
=
new
Slider
(
this
,
$
.
extend
({},
$
.
fn
.
slider
.
defaults
,
options
))));
}
if
(
typeof
option
==
'string'
)
{
data
[
option
](
val
);
}
})
};
$
.
fn
.
slider
.
defaults
=
{
min
:
0
,
max
:
10
,
step
:
1
,
orientation
:
'horizontal'
,
value
:
5
,
selection
:
'before'
,
tooltip
:
'show'
,
handle
:
'round'
,
formater
:
function
(
value
)
{
return
value
;
}
};
$
.
fn
.
slider
.
Constructor
=
Slider
;
}(
window
.
jQuery
);
\ No newline at end of file
circle/dashboard/static/dashboard/bootstrap-slider/less/slider.less
0 → 100644
View file @
9f9a260f
/*!
* Slider for Bootstrap
*
* Copyright 2012 Stefan Petre
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
*/
.slider {
display: inline-block;
vertical-align: middle;
position: relative;
&.slider-horizontal {
width: 210px;
height: @baseLineHeight;
.slider-track {
height: @baseLineHeight/2;
width: 100%;
margin-top: -@baseLineHeight/4;
top: 50%;
left: 0;
}
.slider-selection {
height: 100%;
top: 0;
bottom: 0;
}
.slider-handle {
margin-left: -@baseLineHeight/2;
margin-top: -@baseLineHeight/4;
&.triangle {
border-width: 0 @baseLineHeight/2 @baseLineHeight/2 @baseLineHeight/2;
width: 0;
height: 0;
border-bottom-color: #0480be;
margin-top: 0;
}
}
}
&.slider-vertical {
height: 210px;
width: @baseLineHeight;
.slider-track {
width: @baseLineHeight/2;
height: 100%;
margin-left: -@baseLineHeight/4;
left: 50%;
top: 0;
}
.slider-selection {
width: 100%;
left: 0;
top: 0;
bottom: 0;
}
.slider-handle {
margin-left: -@baseLineHeight/4;
margin-top: -@baseLineHeight/2;
&.triangle {
border-width: @baseLineHeight/2 0 @baseLineHeight/2 @baseLineHeight/2;
width: 1px;
height: 1px;
border-left-color: #0480be;
margin-left: 0;
}
}
}
input {
display: none;
}
.tooltip-inner {
white-space: nowrap;
}
}
.slider-track {
position: absolute;
cursor: pointer;
#gradient > .vertical(#f5f5f5, #f9f9f9);
.box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
.border-radius(@baseBorderRadius);
}
.slider-selection {
position: absolute;
#gradient > .vertical(#f9f9f9, #f5f5f5);
.box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
.box-sizing(border-box);
.border-radius(@baseBorderRadius);
}
.slider-handle {
position: absolute;
width: @baseLineHeight;
height: @baseLineHeight;
#gradient > .vertical(#149bdf, #0480be);
.box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)");
opacity: 0.8;
border: 0px solid transparent;
&.round {
.border-radius(@baseLineHeight);
}
&.triangle {
background: transparent none;
}
}
\ No newline at end of file
circle/dashboard/static/dashboard/bootstrap-slider/slider.css
0 → 100644
View file @
9f9a260f
/*!
* Slider for Bootstrap
*
* Copyright 2012 Stefan Petre
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
*/
.slider
{
display
:
inline-block
;
vertical-align
:
middle
;
position
:
relative
;
}
.slider.slider-horizontal
{
width
:
210px
;
height
:
20px
;
}
.slider.slider-horizontal
.slider-track
{
height
:
10px
;
width
:
100%
;
margin-top
:
-5px
;
top
:
50%
;
left
:
0
;
}
.slider.slider-horizontal
.slider-selection
{
height
:
100%
;
top
:
0
;
bottom
:
0
;
}
.slider.slider-horizontal
.slider-handle
{
margin-left
:
-10px
;
margin-top
:
-5px
;
}
.slider.slider-horizontal
.slider-handle.triangle
{
border-width
:
0
10px
10px
10px
;
width
:
0
;
height
:
0
;
border-bottom-color
:
#0480be
;
margin-top
:
0
;
}
.slider.slider-vertical
{
height
:
210px
;
width
:
20px
;
}
.slider.slider-vertical
.slider-track
{
width
:
10px
;
height
:
100%
;
margin-left
:
-5px
;
left
:
50%
;
top
:
0
;
}
.slider.slider-vertical
.slider-selection
{
width
:
100%
;
left
:
0
;
top
:
0
;
bottom
:
0
;
}
.slider.slider-vertical
.slider-handle
{
margin-left
:
-5px
;
margin-top
:
-10px
;
}
.slider.slider-vertical
.slider-handle.triangle
{
border-width
:
10px
0
10px
10px
;
width
:
1px
;
height
:
1px
;
border-left-color
:
#0480be
;
margin-left
:
0
;
}
.slider
input
{
display
:
none
;
}
.slider
.tooltip-inner
{
white-space
:
nowrap
;
}
.slider-track
{
position
:
absolute
;
cursor
:
pointer
;
background-color
:
#f7f7f7
;
background-image
:
-moz-linear-gradient
(
top
,
#f5f5f5
,
#f9f9f9
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#f5f5f5
),
to
(
#f9f9f9
));
background-image
:
-webkit-linear-gradient
(
top
,
#f5f5f5
,
#f9f9f9
);
background-image
:
-o-linear-gradient
(
top
,
#f5f5f5
,
#f9f9f9
);
background-image
:
linear-gradient
(
to
bottom
,
#f5f5f5
,
#f9f9f9
);
background-repeat
:
repeat-x
;
filter
:
progid
:
DXImageTransform
.
Microsoft
.
gradient
(
startColorstr
=
'#fff5f5f5'
,
endColorstr
=
'#fff9f9f9'
,
GradientType
=
0
);
-webkit-box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
0.1
);
-moz-box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
0.1
);
box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
0.1
);
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
}
.slider-selection
{
position
:
absolute
;
background-color
:
#f7f7f7
;
background-image
:
-moz-linear-gradient
(
top
,
#f9f9f9
,
#f5f5f5
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#f9f9f9
),
to
(
#f5f5f5
));
background-image
:
-webkit-linear-gradient
(
top
,
#f9f9f9
,
#f5f5f5
);
background-image
:
-o-linear-gradient
(
top
,
#f9f9f9
,
#f5f5f5
);
background-image
:
linear-gradient
(
to
bottom
,
#f9f9f9
,
#f5f5f5
);
background-repeat
:
repeat-x
;
filter
:
progid
:
DXImageTransform
.
Microsoft
.
gradient
(
startColorstr
=
'#fff9f9f9'
,
endColorstr
=
'#fff5f5f5'
,
GradientType
=
0
);
-webkit-box-shadow
:
inset
0
-1px
0
rgba
(
0
,
0
,
0
,
0.15
);
-moz-box-shadow
:
inset
0
-1px
0
rgba
(
0
,
0
,
0
,
0.15
);
box-shadow
:
inset
0
-1px
0
rgba
(
0
,
0
,
0
,
0.15
);
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
}
.slider-handle
{
position
:
absolute
;
width
:
20px
;
height
:
20px
;
background-color
:
#0e90d2
;
background-image
:
-moz-linear-gradient
(
top
,
#149bdf
,
#0480be
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#149bdf
),
to
(
#0480be
));
background-image
:
-webkit-linear-gradient
(
top
,
#149bdf
,
#0480be
);
background-image
:
-o-linear-gradient
(
top
,
#149bdf
,
#0480be
);
background-image
:
linear-gradient
(
to
bottom
,
#149bdf
,
#0480be
);
background-repeat
:
repeat-x
;
filter
:
progid
:
DXImageTransform
.
Microsoft
.
gradient
(
startColorstr
=
'#ff149bdf'
,
endColorstr
=
'#ff0480be'
,
GradientType
=
0
);
-webkit-box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
.2
),
0
1px
2px
rgba
(
0
,
0
,
0
,
.05
);
-moz-box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
.2
),
0
1px
2px
rgba
(
0
,
0
,
0
,
.05
);
box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
.2
),
0
1px
2px
rgba
(
0
,
0
,
0
,
.05
);
opacity
:
0.8
;
border
:
0px
solid
transparent
;
}
.slider-handle.round
{
-webkit-border-radius
:
20px
;
-moz-border-radius
:
20px
;
border-radius
:
20px
;
}
.slider-handle.triangle
{
background
:
transparent
none
;
}
/* custom */
.slider-handle
,
.slider-handle
:hover
{
background-color
:
#3071a9
;
opacity
:
1
;
width
:
8px
;
height
:
26px
;
margin-top
:
-4px
!important
;
margin-left
:
-6px
!important
;
border-radius
:
0px
;
-moz-border-radius
:
0px
;
-webkit-border-radius
:
0px
;
text-shadow
:
0
1px
0
#fff
;
background-image
:
-webkit-gradient
(
linear
,
left
0%
,
left
100%
,
from
(
#428bca
),
to
(
#3071a9
));
background-image
:
-webkit-linear-gradient
(
top
,
#428bca
,
0%
,
#3071a9
,
100%
);
background-image
:
-moz-linear-gradient
(
top
,
#428bca
0%
,
#3071a9
100%
);
background-image
:
linear-gradient
(
to
bottom
,
#428bca
0%
,
#3071a9
100%
);
background-repeat
:
repeat-x
;
border-color
:
#2d6ca2
;
filter
:
progid
:
DXImageTransform
.
Microsoft
.
gradient
(
startColorstr
=
'#ff428bca'
,
endColorstr
=
'#ff3071a9'
,
GradientType
=
0
);
}
.slider-handle
:hover
{
background
:
#428bca
;
background-image
:
none
;
border-color
:
#2d6ca2
;
}
.slider-track
,
.slider-selection
{
height
:
20px
!important
;
background
:
#ccc
;
background
:
-webkit-linear-gradient
(
top
,
#bbb
,
#ddd
);
background
:
-moz-linear-gradient
(
top
,
#bbb
,
#ddd
);
background
:
linear-gradient
(
top
,
#bbb
,
#ddd
);
-webkit-box-shadow
:
inset
0
2px
4px
rgba
(
0
,
0
,
0
,
0.1
);
-moz-box-shadow
:
inset
0
2px
4px
rgba
(
0
,
0
,
0
,
0.1
);
box-shadow
:
inset
0
2px
4px
rgba
(
0
,
0
,
0
,
0.1
);
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
border
:
1px
solid
#aaa
;
}
.slider-selection
{
background-color
:
#8DCA09
;
background
:
-webkit-linear-gradient
(
top
,
#8DCA09
,
#72A307
);
background
:
-moz-linear-gradient
(
top
,
#8DCA09
,
#72A307
);
background
:
linear-gradient
(
top
,
#8DCA09
,
#72A307
);
border-color
:
#496805
;
}
.vm-slider
{
width
:
300px
;
}
.output
{
padding-left
:
10px
;
font-weight
:
bold
;
}
circle/dashboard/static/dashboard/dashboard.js
View file @
9f9a260f
...
@@ -38,37 +38,27 @@ $(function () {
...
@@ -38,37 +38,27 @@ $(function () {
if
(
window
.
location
.
hash
)
if
(
window
.
location
.
hash
)
$
(
"a[href="
+
window
.
location
.
hash
+
"]"
).
tab
(
'show'
);
$
(
"a[href="
+
window
.
location
.
hash
+
"]"
).
tab
(
'show'
);
vmCreateLoaded
();
addSliderMiscs
();
addSliderMiscs
();
});
});
function
addSliderMiscs
()
{
function
addSliderMiscs
()
{
$
(
"[data-slider]"
).
each
(
function
()
{
$
(
'.vm-slider'
).
each
(
function
()
{
if
(
$
(
this
).
css
(
'display'
)
!=
"none"
)
$
(
"<span>"
).
addClass
(
"output"
).
html
(
$
(
this
).
val
()).
insertAfter
(
$
(
this
));
$
(
this
).
simpleSlider
();
});
$
(
'.vm-slider'
).
slider
()
.
on
(
'slide'
,
function
(
e
)
{
$
(
this
).
val
(
e
.
value
);
$
(
this
).
parent
(
'div'
).
nextAll
(
"span"
).
html
(
e
.
value
)
});
});
//slider only has background with this ...
refreshSliders
();
//var js = document.createElement('script');
}
//js.src = '/static/dashboard/loopj-jquery-simple-slider-fa64f59/js/simple-slider.min.js';
//document.getElementsByTagName('head')[0].appendChild(js);
$
(
"[data-slider]"
)
.
each
(
function
()
{
var
input
=
$
(
this
);
$
(
"<span>"
)
.
addClass
(
"output"
)
.
html
(
$
(
this
).
val
())
.
insertAfter
(
input
);
})
.
bind
(
"slider:ready slider:changed"
,
function
(
event
,
data
)
{
$
(
this
)
.
nextAll
(
".output:first"
)
.
html
(
data
.
value
.
toFixed
(
3
));
});
$
(
"[data-mark]"
).
each
(
function
()
{
// ehhh
var
value
=
$
(
this
).
attr
(
'data-mark'
).
parseFloat
();
function
refreshSliders
()
{
});
$
(
'.vm-slider'
).
each
(
function
()
{
$
(
this
).
val
(
$
(
this
).
slider
().
data
(
'slider'
).
getValue
());
$
(
this
).
parent
(
'div'
).
nextAll
(
"span"
).
html
(
$
(
this
).
val
());
});
}
}
circle/dashboard/static/dashboard/vm-create.js
View file @
9f9a260f
var
vlans
=
[];
var
vlans
=
[];
var
disks
=
[];
var
disks
=
[];
$
(
function
()
{
vmCreateLoaded
();
});
function
vmCreateLoaded
()
{
function
vmCreateLoaded
()
{
// temporarily disable for testing
// temporarily disable for testing
//$('.vm-create-advanced').hide();
//$('.vm-create-advanced').hide();
...
@@ -178,9 +183,12 @@ function vmCreateTemplateChange(new_this) {
...
@@ -178,9 +183,12 @@ function vmCreateTemplateChange(new_this) {
success
:
function
(
data
,
textStatus
,
xhr
)
{
success
:
function
(
data
,
textStatus
,
xhr
)
{
if
(
xhr
.
status
==
200
)
{
if
(
xhr
.
status
==
200
)
{
// set sliders
// set sliders
$
(
'#cpu-priority-slider'
).
simpleSlider
(
"setValue"
,
data
[
'priority'
]);
$
(
'#vm-cpu-priority-slider'
).
slider
(
"setValue"
,
data
[
'priority'
]);
$
(
'#cpu-count-slider'
).
simpleSlider
(
"setValue"
,
data
[
'num_cores'
]);
$
(
'#vm-cpu-count-slider'
).
slider
(
"setValue"
,
data
[
'num_cores'
]);
$
(
'#ram-slider'
).
simpleSlider
(
"setValue"
,
data
[
'ram_size'
]);
$
(
'#vm-ram-size-slider'
).
slider
(
"setValue"
,
data
[
'ram_size'
]);
/* slider doesn't have change event ........................ */
refreshSliders
();
/* clear selections */
/* clear selections */
$
(
'select[id^="vm-create-network-add"], select[id$="managed"]'
).
find
(
'option'
).
prop
(
'selected'
,
false
);
$
(
'select[id^="vm-create-network-add"], select[id$="managed"]'
).
find
(
'option'
).
prop
(
'selected'
,
false
);
...
...
circle/dashboard/templates/dashboard/base.html
View file @
9f9a260f
...
@@ -15,9 +15,8 @@
...
@@ -15,9 +15,8 @@
<link
rel=
"stylesheet"
href=
"//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-theme.min.css"
>
<link
rel=
"stylesheet"
href=
"//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-theme.min.css"
>
<link
href=
"//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css"
rel=
"stylesheet"
>
<link
href=
"//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css"
rel=
"stylesheet"
>
<script
src=
"{{ STATIC_URL }}dashboard/js/jquery.knob.js"
></script>
<script
src=
"{{ STATIC_URL }}dashboard/js/jquery.knob.js"
></script>
<link
href=
"{{ STATIC_URL }}dashboard/loopj-jquery-simple-slider-fa64f59/css/simple-slider.css"
rel=
"stylesheet"
>
<script
src=
"{{ STATIC_URL}}dashboard/bootstrap-slider/bootstrap-slider.js"
></script>
<script
src=
"{{ STATIC_URL }}dashboard/loopj-jquery-simple-slider-fa64f59/js/simple-slider.min.js"
></script>
<link
rel=
"stylesheet"
href=
"{{ STATIC_URL }}dashboard/bootstrap-slider/slider.css"
/>
<link
href=
"{{ STATIC_URL }}dashboard/dashboard.css"
rel=
"stylesheet"
>
<link
href=
"{{ STATIC_URL }}dashboard/dashboard.css"
rel=
"stylesheet"
>
<script
src=
"{{ STATIC_URL }}dashboard/dashboard.js"
></script>
<script
src=
"{{ STATIC_URL }}dashboard/dashboard.js"
></script>
</head>
</head>
...
...
circle/dashboard/templates/dashboard/vm-detail-resources.html
View file @
9f9a260f
<p
class=
"row"
>
<p
class=
"row"
>
<div
class=
"col-sm-3"
>
<div
class=
"col-sm-3"
>
<label
for=
"cpu-priority-slider"
><i
class=
"icon-trophy"
></i>
CPU priority
</label>
<label
for=
"
vm-
cpu-priority-slider"
><i
class=
"icon-trophy"
></i>
CPU priority
</label>
</div>
</div>
<div
class=
"col-sm-9"
>
<div
class=
"col-sm-9"
>
<input
type=
"text"
data-slider=
"true"
data-slider-highlight=
"true"
<input
type=
"text"
id=
"vm-cpu-priority-slider"
class=
"vm-slider"
value=
"{{ instance.priority }}"
data-slider-min=
"0"
data-slider-max=
"100"
data-slider-step=
"1"
data-slider-value=
"{{ instance.priority }}"
data-slider-orientation=
"horizontal"
data-slider-handle=
"square"
data-slider-tooltip=
"hide"
/>
data-slider-snap=
"true"
data-slider-range=
"0,100"
data-slider-step=
"1"
id=
"cpu-priority-slider"
value=
"{{ instance.priority }}"
>
</div>
</div>
</p>
</p>
...
@@ -14,7 +13,7 @@
...
@@ -14,7 +13,7 @@
<label
for=
"cpu-count-slider"
><i
class=
"icon-cogs"
></i>
CPU count
</label>
<label
for=
"cpu-count-slider"
><i
class=
"icon-cogs"
></i>
CPU count
</label>
</div>
</div>
<div
class=
"col-sm-9"
>
<div
class=
"col-sm-9"
>
<input
type=
"text"
value=
"{{ instance.num_cores }}"
data-slider=
"true"
data-slider-highlight=
"true"
data-slider-range=
"0,8"
data-slider-snap=
"true"
data-slider-step=
"1"
id=
"cpu-count-slider"
>
<input
type=
"text"
id=
"vm-cpu-count-slider"
class=
"vm-slider"
value=
" {{ instance.num_cores }}"
data-slider-min=
"0"
data-slider-max=
"8"
data-slider-step=
"1"
data-slider-value=
"{{ instance.num_cores }}"
data-slider-orientation=
"horizontal"
data-slider-handle=
"square"
data-slider-tooltip=
"hide"
/>
</div>
</div>
</p>
</p>
...
@@ -23,8 +22,13 @@
...
@@ -23,8 +22,13 @@
<div
class=
"col-sm-3"
>
<div
class=
"col-sm-3"
>
<label
for=
"ram-slider"
><i
class=
"icon-ticket"
></i>
RAM amount
</label>
<label
for=
"ram-slider"
><i
class=
"icon-ticket"
></i>
RAM amount
</label>
</div>
</div>
<div
class=
"col-sm-9"
>
<div
class=
"col-sm-9"
>
<input
type=
"text"
data-slider=
"true"
data-slider-highlight=
"true"
id=
"ram-slider"
data-slider-range=
"128,4096"
data-slider-snap=
"true"
data-slider-step=
"128"
value=
"{{ instance.ram_size }}"
>
MiB
<input
type=
"text"
id=
"vm-ram-size-slider"
class=
"vm-slider"
value=
"{{ instance.ram_size }}"
data-slider-min=
"128"
data-slider-max=
"4096"
data-slider-step=
"128"
data-slider-value=
"{{ instance.ram_size }}"
data-slider-orientation=
"horizontal"
data-slider-handle=
"square"
data-slider-tooltip=
"hide"
/>
MiB
</div>
</div>
</p>
</p>
{% block extra_js %}
<style>
label
{
padding-top
:
6px
;}
</style>
{% endblock %}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment