Toggle navigation
Toggle navigation
This project
Loading...
Sign in
김유현
/
How much are you earning now
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
김유현
2019-12-10 20:30:15 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
1868d85c0126892f5aa2e091152c2403d80f2315
1868d85c
1 parent
4f0aa71a
Add timer in grpah.html
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
64 additions
and
291 deletions
.gitignore
index.js
public/graph.html
views/index.ejs
views/post.pug
.gitignore
View file @
1868d85
node_modules/
*.json
public/css
\ No newline at end of file
public/css/
...
...
index.js
View file @
1868d85
...
...
@@ -21,7 +21,8 @@ app.get('/graph', function(req, res){
var
workTime
=
req
.
query
.
workTime
var
offWork
=
req
.
query
.
offWork
console
.
log
(
payDay
,
salary
,
workDay
,
workTime
,
offWork
);
res
.
send
(
`payDay :
${
payDay
}
, salary :
${
salary
}
, workDay :
${
workDay
}
, workTime :
${
workTime
}
, offWork :
${
offWork
}
`
);
res
.
sendFile
(
__dirname
+
'/public/graph.html'
);
//res.send(`payDay : ${payDay}, salary : ${salary}, workDay : ${workDay}, workTime : ${workTime}, offWork : ${offWork}`);
})
app
.
listen
(
3000
,
function
(){
...
...
public/graph.html
View file @
1868d85
<html>
<style
type=
"text/css"
>
body
{
background
:
#18222F
;
}
.wrapper
{
position
:
absolute
;
width
:
400px
;
height
:
400px
;
margin
:
auto
;
top
:
0
;
bottom
:
0
;
left
:
0
;
right
:
0
;
display
:
flex
;
flex-direction
:
row
;
}
.container
{
flex
:
1
;
padding
:
0
20px
;
}
</style>
<body>
<div
class=
"wrapper"
>
<div
class=
"container chart"
data-size=
"400"
data-value=
"88"
data-arrow=
"up"
>
</div>
</div>
</body>
<script
type=
"text/javascript"
>
//
// Library
//
var
Dial
=
function
(
container
)
{
this
.
container
=
container
;
this
.
size
=
this
.
container
.
dataset
.
size
;
this
.
strokeWidth
=
this
.
size
/
8
;
this
.
radius
=
(
this
.
size
/
2
)
-
(
this
.
strokeWidth
/
2
);
this
.
value
=
this
.
container
.
dataset
.
value
;
this
.
direction
=
this
.
container
.
dataset
.
arrow
;
this
.
svg
;
this
.
defs
;
this
.
slice
;
this
.
overlay
;
this
.
text
;
this
.
arrow
;
this
.
create
();
}
Dial
.
prototype
.
create
=
function
()
{
this
.
createSvg
();
this
.
createDefs
();
this
.
createSlice
();
this
.
createOverlay
();
this
.
createText
();
this
.
createArrow
();
this
.
container
.
appendChild
(
this
.
svg
);
};
Dial
.
prototype
.
createSvg
=
function
()
{
var
svg
=
document
.
createElementNS
(
"http://www.w3.org/2000/svg"
,
"svg"
);
svg
.
setAttribute
(
'width'
,
this
.
size
+
'px'
);
svg
.
setAttribute
(
'height'
,
this
.
size
+
'px'
);
this
.
svg
=
svg
;
};
Dial
.
prototype
.
createDefs
=
function
()
{
var
defs
=
document
.
createElementNS
(
"http://www.w3.org/2000/svg"
,
"defs"
);
var
linearGradient
=
document
.
createElementNS
(
"http://www.w3.org/2000/svg"
,
"linearGradient"
);
linearGradient
.
setAttribute
(
'id'
,
'gradient'
);
var
stop1
=
document
.
createElementNS
(
"http://www.w3.org/2000/svg"
,
"stop"
);
stop1
.
setAttribute
(
'stop-color'
,
'#6E4AE2'
);
stop1
.
setAttribute
(
'offset'
,
'0%'
);
linearGradient
.
appendChild
(
stop1
);
var
stop2
=
document
.
createElementNS
(
"http://www.w3.org/2000/svg"
,
"stop"
);
stop2
.
setAttribute
(
'stop-color'
,
'#78F8EC'
);
stop2
.
setAttribute
(
'offset'
,
'100%'
);
linearGradient
.
appendChild
(
stop2
);
var
linearGradientBackground
=
document
.
createElementNS
(
"http://www.w3.org/2000/svg"
,
"linearGradient"
);
linearGradientBackground
.
setAttribute
(
'id'
,
'gradient-background'
);
var
stop1
=
document
.
createElementNS
(
"http://www.w3.org/2000/svg"
,
"stop"
);
stop1
.
setAttribute
(
'stop-color'
,
'rgba(0, 0, 0, 0.2)'
);
stop1
.
setAttribute
(
'offset'
,
'0%'
);
linearGradientBackground
.
appendChild
(
stop1
);
var
stop2
=
document
.
createElementNS
(
"http://www.w3.org/2000/svg"
,
"stop"
);
stop2
.
setAttribute
(
'stop-color'
,
'rgba(0, 0, 0, 0.05)'
);
stop2
.
setAttribute
(
'offset'
,
'100%'
);
linearGradientBackground
.
appendChild
(
stop2
);
defs
.
appendChild
(
linearGradient
);
defs
.
appendChild
(
linearGradientBackground
);
this
.
svg
.
appendChild
(
defs
);
this
.
defs
=
defs
;
};
Dial
.
prototype
.
createSlice
=
function
()
{
var
slice
=
document
.
createElementNS
(
"http://www.w3.org/2000/svg"
,
"path"
);
slice
.
setAttribute
(
'fill'
,
'none'
);
slice
.
setAttribute
(
'stroke'
,
'url(#gradient)'
);
slice
.
setAttribute
(
'stroke-width'
,
this
.
strokeWidth
);
slice
.
setAttribute
(
'transform'
,
'translate('
+
this
.
strokeWidth
/
2
+
','
+
this
.
strokeWidth
/
2
+
')'
);
slice
.
setAttribute
(
'class'
,
'animate-draw'
);
this
.
svg
.
appendChild
(
slice
);
this
.
slice
=
slice
;
};
Dial
.
prototype
.
createOverlay
=
function
()
{
var
r
=
this
.
size
-
(
this
.
size
/
2
)
-
this
.
strokeWidth
/
2
;
var
circle
=
document
.
createElementNS
(
"http://www.w3.org/2000/svg"
,
"circle"
);
circle
.
setAttribute
(
'cx'
,
this
.
size
/
2
);
circle
.
setAttribute
(
'cy'
,
this
.
size
/
2
);
circle
.
setAttribute
(
'r'
,
r
);
circle
.
setAttribute
(
'fill'
,
'url(#gradient-background)'
);
this
.
svg
.
appendChild
(
circle
);
this
.
overlay
=
circle
;
};
Dial
.
prototype
.
createText
=
function
()
{
var
fontSize
=
this
.
size
/
3.5
;
var
text
=
document
.
createElementNS
(
"http://www.w3.org/2000/svg"
,
"text"
);
text
.
setAttribute
(
'x'
,
(
this
.
size
/
2
)
+
fontSize
/
7.5
);
text
.
setAttribute
(
'y'
,
(
this
.
size
/
2
)
+
fontSize
/
4
);
text
.
setAttribute
(
'font-family'
,
'Century Gothic, Lato'
);
text
.
setAttribute
(
'font-size'
,
fontSize
);
text
.
setAttribute
(
'fill'
,
'#78F8EC'
);
text
.
setAttribute
(
'text-anchor'
,
'middle'
);
var
tspanSize
=
fontSize
/
3
;
text
.
innerHTML
=
0
+
'<tspan font-size="'
+
tspanSize
+
'" dy="'
+
-
tspanSize
*
1.2
+
'">%</tspan>'
;
this
.
svg
.
appendChild
(
text
);
this
.
text
=
text
;
};
Dial
.
prototype
.
createArrow
=
function
()
{
var
arrowSize
=
this
.
size
/
10
;
var
arrowYOffset
,
m
;
if
(
this
.
direction
===
'up'
)
{
arrowYOffset
=
arrowSize
/
2
;
m
=
-
1
;
}
else
if
(
this
.
direction
===
'down'
)
{
arrowYOffset
=
0
;
m
=
1
;
}
var
arrowPosX
=
((
this
.
size
/
2
)
-
arrowSize
/
2
);
var
arrowPosY
=
(
this
.
size
-
this
.
size
/
3
)
+
arrowYOffset
;
var
arrowDOffset
=
m
*
(
arrowSize
/
1.5
);
var
arrow
=
document
.
createElementNS
(
"http://www.w3.org/2000/svg"
,
"path"
);
arrow
.
setAttribute
(
'd'
,
'M 0 0 '
+
arrowSize
+
' 0 '
+
arrowSize
/
2
+
' '
+
arrowDOffset
+
' 0 0 Z'
);
arrow
.
setAttribute
(
'fill'
,
'#97F8F0'
);
arrow
.
setAttribute
(
'opacity'
,
'0.6'
);
arrow
.
setAttribute
(
'transform'
,
'translate('
+
arrowPosX
+
','
+
arrowPosY
+
')'
);
this
.
svg
.
appendChild
(
arrow
);
this
.
arrow
=
arrow
;
};
Dial
.
prototype
.
animateStart
=
function
()
{
var
v
=
0
;
var
self
=
this
;
var
intervalOne
=
setInterval
(
function
()
{
var
p
=
+
(
v
/
self
.
value
).
toFixed
(
2
);
var
a
=
(
p
<
0.95
)
?
2
-
(
2
*
p
)
:
0.05
;
v
+=
a
;
// Stop
if
(
v
>=
+
self
.
value
)
{
v
=
self
.
value
;
clearInterval
(
intervalOne
);
<body>
<link
rel=
"stylesheet"
href=
"css/graph_style.css"
>
<div
id =
"dpTime"
></div>
<div
class=
"progress-bar"
></div>
<h1
class=
"count"
></h1>
</body>
<script>
var
body
=
document
.
querySelector
(
'body'
),
bar
=
document
.
querySelector
(
'.progress-bar'
),
counter
=
document
.
querySelector
(
'.count'
),
i
=
0
,
throttle
=
0.4
;
// 0-1
setInterval
(
"dpTime()"
,
1
);
function
dpTime
(){
var
now
=
new
Date
();
hours
=
now
.
getHours
();
minutes
=
now
.
getMinutes
();
seconds
=
now
.
getSeconds
();
if
(
hours
>
12
)
{
hours
-=
12
;
ampm
=
"오후 "
;
}
else
{
ampm
=
"오전 "
;
}
if
(
hours
<
10
){
hours
=
"0"
+
hours
;
}
if
(
minutes
<
10
){
minutes
=
"0"
+
minutes
;
}
if
(
seconds
<
10
){
seconds
=
"0"
+
seconds
;
}
document
.
getElementById
(
"dpTime"
).
innerHTML
=
ampm
+
hours
+
":"
+
minutes
+
":"
+
seconds
;
}
(
function
draw
()
{
if
(
i
<=
100
)
{
var
r
=
Math
.
random
();
requestAnimationFrame
(
draw
);
bar
.
style
.
width
=
i
+
'%'
;
counter
.
innerHTML
=
Math
.
round
(
i
)
+
'%'
;
if
(
r
<
throttle
)
{
// Simulate d/l speed and uneven bitrate
i
=
i
+
r
;
}
self
.
setValue
(
v
);
},
10
);
};
Dial
.
prototype
.
animateReset
=
function
()
{
this
.
setValue
(
0
);
};
Dial
.
prototype
.
polarToCartesian
=
function
(
centerX
,
centerY
,
radius
,
angleInDegrees
)
{
var
angleInRadians
=
(
angleInDegrees
-
90
)
*
Math
.
PI
/
180.0
;
return
{
x
:
centerX
+
(
radius
*
Math
.
cos
(
angleInRadians
)),
y
:
centerY
+
(
radius
*
Math
.
sin
(
angleInRadians
))
};
}
Dial
.
prototype
.
describeArc
=
function
(
x
,
y
,
radius
,
startAngle
,
endAngle
){
var
start
=
this
.
polarToCartesian
(
x
,
y
,
radius
,
endAngle
);
var
end
=
this
.
polarToCartesian
(
x
,
y
,
radius
,
startAngle
);
var
largeArcFlag
=
endAngle
-
startAngle
<=
180
?
"0"
:
"1"
;
var
d
=
[
"M"
,
start
.
x
,
start
.
y
,
"A"
,
radius
,
radius
,
0
,
largeArcFlag
,
0
,
end
.
x
,
end
.
y
].
join
(
" "
);
return
d
;
}
Dial
.
prototype
.
setValue
=
function
(
value
)
{
var
c
=
(
value
/
100
)
*
360
;
if
(
c
===
360
)
c
=
359.99
;
var
xy
=
this
.
size
/
2
-
this
.
strokeWidth
/
2
;
var
d
=
this
.
describeArc
(
xy
,
xy
,
xy
,
180
,
180
+
c
);
this
.
slice
.
setAttribute
(
'd'
,
d
);
var
tspanSize
=
(
this
.
size
/
3.5
)
/
3
;
this
.
text
.
innerHTML
=
Math
.
floor
(
value
)
+
'<tspan font-size="'
+
tspanSize
+
'" dy="'
+
-
tspanSize
*
1.2
+
'">%</tspan>'
;
};
//
// Usage
//
var
containers
=
document
.
getElementsByClassName
(
"chart"
);
var
dial
=
new
Dial
(
containers
[
0
]);
dial
.
animateStart
();
</script>
}
else
{;
bar
.
className
+=
" done"
;
}
})();
</script>
</html>
...
...
views/index.ejs
View file @
1868d85
<!-- views/index.ejs -->
<!DOCTYPE html>
<html>
<head>
<link
rel=
"stylesheet"
href=
"css/index_style.css"
>
...
...
@@ -11,40 +9,40 @@
<div
class=
"modal-wrapper"
>
<label
class=
"close"
for=
""
></label>
<h2
id=
"modal-title"
>
Please fill in the blanks.
</h2>
<form
class=
"message-form"
action=
"graph"
method=
"get"
id=
"indexForm"
>
<form
class=
"message-form"
action=
"graph"
method=
"get"
id=
"indexForm"
>
<div
class=
"input-box"
>
<label
for=
"
payDay
"
class=
"input-label"
>
Payment days (ex. 31)
</label>
<input
id=
"payDay"
type=
"text"
class=
"input-text"
name=
"payDay"
>
<label
for=
""
class=
"input-label"
>
Payment days (ex. 31)
</label>
<input
type=
"text"
class=
"input-text"
name=
"payDay"
>
<hr
class=
"underline"
>
<hr
class=
"underline-focus"
>
</div>
<div
class=
"input-box"
>
<label
for=
"
salary
"
class=
"input-label"
>
Salary (ex. 1000000)
</label>
<input
id=
"salary"
type=
"text"
class=
"input-text"
name=
"salary"
>
<label
for=
""
class=
"input-label"
>
Salary (ex. 1000000)
</label>
<input
type=
"text"
class=
"input-text"
name=
"salary"
>
<hr
class=
"underline"
>
<hr
class=
"underline-focus"
>
</div>
<div
class=
"input-box"
>
<label
for=
"
workDay
"
class=
"input-label"
>
Working days (ex. 월화수목금)
</label>
<input
id=
"workDay"
type=
"text"
class=
"input-text"
name=
"workDay"
>
<label
for=
""
class=
"input-label"
>
Working days (ex. 월화수목금)
</label>
<input
type=
"text"
class=
"input-text"
name=
"workDay"
>
<hr
class=
"underline"
>
<hr
class=
"underline-focus"
>
</div>
<div
class=
"input-box"
>
<label
for=
"
workTime
"
class=
"input-label"
>
Working time (ex. 9)
</label>
<input
id =
"workTime"
type=
"text"
class=
"input-text"
name=
"workTime"
>
<label
for=
""
class=
"input-label"
>
Working time (ex. 9)
</label>
<input
type=
"text"
class=
"input-text"
name=
"workTime"
>
<hr
class=
"underline"
>
<hr
class=
"underline-focus"
>
</div>
<div
class=
"input-box"
>
<label
for=
"
offWork
"
class=
"input-label"
>
Time off work (ex. 18)
</label>
<input
id =
"offWork"
type=
"text"
class=
"input-text"
name=
"offWork"
>
<label
for=
""
class=
"input-label"
>
Time off work (ex. 18)
</label>
<input
type=
"text"
class=
"input-text"
name=
"offWork"
>
<hr
class=
"underline"
>
<hr
class=
"underline-focus"
>
</div>
<div
class=
"input-button"
>
<button
type=
"submit"
form=
"indexForm"
onclick=
"location.href='/graph'"
class=
"button
"
>
Enter
</button>
<button
type=
'submit'
class=
"button2
"
>
Enter
</button>
</div>
</form>
</div>
...
...
views/post.pug
deleted
100644 → 0
View file @
4f0aa71
html
head
link(rel='stylesheet', href='css/index_style.css')
script(src='https://code.jquery.com/jquery-2.2.1.min.js')
body
a.button(href='#') How much are you earning now?
.modal-overlay
.modal-wrapper
label.close(for='')
h2#modal-title Please fill in the blanks.
form.message-form(action='/graph', method='POST')
.input-box
label.input-label(for='') Payment days (ex. 31)
input.input-text(type='text', name='payDay')
hr.underline
hr.underline-focus
.input-box
label.input-label(for='') Salary (ex. 1000000)
input.input-text(type='text', name='salary')
hr.underline
hr.underline-focus
.input-box
label.input-label(for='') Working days (ex. 월화수목금)
input.input-text(type='text', name='workDay')
hr.underline
hr.underline-focus
.input-box
label.input-label(for='') Working time (ex. 9)
input.input-text(type='text', name='workTime')
hr.underline
hr.underline-focus
.input-box
label.input-label(for='') Time off work (ex. 18)
input.input-text(type='text', name='offWork')
hr.underline
hr.underline-focus
//
<div class="input-box textarea">
<label for="" class="input-label">Message</label>
<textarea class="input-text"></textarea>
<hr class="underline">
<hr class="underline-focus">
</div>
.input-button
button.button(type='button', onclick="location.href='/graph' ") Enter
script(type='text/javascript').
$('.button').on('click', function(e) {
e.preventDefault();
$(this).addClass('active');
});
$('.modal-wrapper').find('label').on('click', function() {
$('.button').removeClass('active');
});
$('.input-text').focus(function() {
$(this).parents('.input-box').addClass('focus');
})
$('.input-text').blur(function() {
if ($(this).val()) {
$(this).parents('.input-box').addClass('focus');
} else {
$(this).parents('.input-box').removeClass('focus');
}
});
Please
register
or
login
to post a comment