Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
thalia
concrexit
Commits
e9044b5a
Verified
Commit
e9044b5a
authored
Mar 18, 2017
by
Sébastiaan Versteeg
Browse files
Refactor event-indication to fix CSS and add tooltip
parent
39986f75
Changes
10
Hide whitespace changes
Inline
Side-by-side
website/events/api/serializers.py
View file @
e9044b5a
...
...
@@ -68,12 +68,6 @@ class EventSerializer(CalenderJSSerializer):
return
reverse
(
'events:event'
,
kwargs
=
{
'event_id'
:
instance
.
id
})
def
_registered
(
self
,
instance
):
try
:
if
not
self
.
context
[
'user'
].
member
:
return
None
except
AttributeError
:
return
None
try
:
return
instance
.
is_member_registered
(
self
.
context
[
'user'
].
member
)
except
AttributeError
:
...
...
website/events/locale/nl/LC_MESSAGES/djangojs.mo
0 → 100644
View file @
e9044b5a
File added
website/events/locale/nl/LC_MESSAGES/djangojs.po
0 → 100644
View file @
e9044b5a
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-03-18 12:52+0100\n"
"PO-Revision-Date: 2017-03-18 12:54+0100\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Last-Translator: Sébastiaan Versteeg <se_bastiaan@outlook.com>\n"
"Language-Team: \n"
"X-Generator: Poedit 1.8.12\n"
#: static/events/js/calendarlistview.js:7
msgid "Upcoming Events"
msgstr "Aanstaande evenementen"
#: static/events/js/calendarlistview.js:38
#: static/events/js/calendarlistview.js:40
msgid "> To the event page"
msgstr "> Naar de evenementpagina"
#: static/events/js/calendarlistview.js:47
msgid "Registered for this event"
msgstr "Aangemeld voor dit evenement"
#: static/events/js/calendarlistview.js:49
msgid "Not registered for this event"
msgstr "Niet aangemeld voor dit evenement"
website/events/static/events/js/calendarlistview.js
View file @
e9044b5a
...
...
@@ -4,7 +4,7 @@ var ListView; // our subclass
ListView
=
View
.
extend
({
// make a subclass of View
title
:
'
Aanstaande evenementen
'
,
title
:
gettext
(
"
Upcoming Events
"
)
,
updateTitle
:
function
()
{
// this space intentionally left blank
...
...
@@ -35,18 +35,18 @@ ListView = View.extend({ // make a subclass of View
li
.
append
(
'
<div class="toggle-title"><a href="#"><span></span>
'
+
e
.
title
+
'
(
'
+
date
+
'
)</a></div>
'
);
if
(
e
.
blank
)
{
li
.
append
(
'
<div class="toggle-content">
'
+
e
.
description
+
'
<br><br><a target="_blank" href="
'
+
e
.
url
+
'
">
> Naar de evenementpagina
</a></div>
'
);
li
.
append
(
'
<div class="toggle-content">
'
+
e
.
description
+
'
<br><br><a target="_blank" href="
'
+
e
.
url
+
'
">
'
+
gettext
(
'
> To the event page
'
)
+
'
</a></div>
'
);
}
else
{
li
.
append
(
'
<div class="toggle-content">
'
+
e
.
description
+
'
<br><br><a href="
'
+
e
.
url
+
'
">
> Naar de evenementpagina
</a></div>
'
);
li
.
append
(
'
<div class="toggle-content">
'
+
e
.
description
+
'
<br><br><a href="
'
+
e
.
url
+
'
">
'
+
gettext
(
'
> To the event page
'
)
+
'
</a></div>
'
);
}
}
else
{
li
.
append
(
'
<div class="toggle-title birthday"><a href="#">
'
+
e
.
title
+
'
(
'
+
date
+
'
)</a></div>
'
);
}
if
(
e
.
registered
)
{
li
.
append
(
'
<div class="event-indication
-
has-registration"></div>
'
);
li
.
append
(
'
<div class="event-indication
" title="
'
+
gettext
(
"
Registered for this event
"
)
+
'
"><div class="
has-registration"></div>
</div>
'
);
}
else
if
(
e
.
registered
!==
null
)
{
li
.
append
(
'
<div class="event-indication
-
no-registration"></div>
'
);
li
.
append
(
'
<div class="event-indication
" title="
'
+
gettext
(
"
Not registered for this event
"
)
+
'
"><div class="
no-registration"></div>
</div>
'
);
}
ul
.
append
(
li
);
...
...
@@ -68,6 +68,8 @@ ListView = View.extend({ // make a subclass of View
};
});
this
.
el
.
html
(
ul
);
$
(
'
.event-indication
'
).
tooltip
();
},
});
...
...
website/events/templates/events/cards.html
View file @
e9044b5a
{% load i18n %}
<div
class=
"blog"
>
<ul
class=
"row"
>
{% for next_event in upcoming %}
...
...
@@ -8,9 +9,13 @@
{% if next_event.current_user_registration is not None %}
{% if next_event.current_user_registration %}
<div
class=
"event-indication-no-registration"
></div>
<div
class=
"event-indication"
title=
"{% trans "
Registered
for
this
event
"
%}"
>
<div
class=
"has-registration"
></div>
</div>
{% else %}
<div
class=
"event-indication-has-registration"
></div>
<div
class=
"event-indication"
title=
"{% trans "
Not
registered
for
this
event
"
%}"
>
<div
class=
"no-registration"
></div>
</div>
{% endif %}
{% endif %}
...
...
website/thaliawebsite/static/css/style.scss
View file @
e9044b5a
...
...
@@ -4974,24 +4974,37 @@ ul.rslides > li {
transition
:
all
0
.2s
ease-in-out
;
}
.event-indication
-no-registration
,
.event-indication-has-registration
{
.event-indication
{
float
:
right
;
position
:
absolute
;
right
:
24px
;
top
:
calc
(
50%
-
5px
);
border-radius
:
10px
;
width
:
10px
;
height
:
10px
;
}
width
:
20px
;
height
:
20px
;
right
:
30px
;
top
:
27px
;
.no-registration
,
.has-registration
{
border-radius
:
10px
;
width
:
10px
;
height
:
10px
;
margin
:
5px
;
}
.has-registration
{
background
:
#E62272
;
box-shadow
:
0
0
5px
#E62272
;
}
.event-indication-has-registration
{
background
:
#468847
;
box-shadow
:
0
0
5px
#468847
;
.no-registration
{
background
:
#6a6869
;
box-shadow
:
0
0
5px
#6a6869
;
}
}
.event-indication-no-registration
{
background
:
#d9534f
;
box-shadow
:
0
0
5px
#d9534f
;
#calendar
{
.event-indication
{
right
:
19px
;
top
:
20px
;
}
}
.loginForm
{
...
...
website/thaliawebsite/static/js/scripts.js
View file @
e9044b5a
(
function
()
{
/** do stuff here **/
$
(
'
.event-indication
'
).
tooltip
();
})();
website/thaliawebsite/static/js/thimbus.js
View file @
e9044b5a
...
...
@@ -824,3 +824,274 @@ jQuery(document).ready(function() {
padding
:
0
});
});
/* ===========================================================
* bootstrap-tooltip.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#tooltips
* Inspired by the original jQuery.tipsy by Jason Frame
* ===========================================================
* Copyright 2012 Twitter, Inc.
*
* 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
(
$
)
{
"
use strict
"
/* TOOLTIP PUBLIC CLASS DEFINITION
* =============================== */
var
Tooltip
=
function
(
element
,
options
)
{
this
.
init
(
'
tooltip
'
,
element
,
options
)
}
Tooltip
.
prototype
=
{
constructor
:
Tooltip
,
init
:
function
(
type
,
element
,
options
)
{
var
eventIn
,
eventOut
this
.
type
=
type
this
.
$element
=
$
(
element
)
this
.
options
=
this
.
getOptions
(
options
)
this
.
enabled
=
true
if
(
this
.
options
.
trigger
!=
'
manual
'
)
{
eventIn
=
this
.
options
.
trigger
==
'
hover
'
?
'
mouseenter
'
:
'
focus
'
eventOut
=
this
.
options
.
trigger
==
'
hover
'
?
'
mouseleave
'
:
'
blur
'
this
.
$element
.
on
(
eventIn
,
this
.
options
.
selector
,
$
.
proxy
(
this
.
enter
,
this
))
this
.
$element
.
on
(
eventOut
,
this
.
options
.
selector
,
$
.
proxy
(
this
.
leave
,
this
))
}
this
.
options
.
selector
?
(
this
.
_options
=
$
.
extend
({},
this
.
options
,
{
trigger
:
'
manual
'
,
selector
:
''
}))
:
this
.
fixTitle
()
}
,
getOptions
:
function
(
options
)
{
options
=
$
.
extend
({},
$
.
fn
[
this
.
type
].
defaults
,
options
,
this
.
$element
.
data
())
if
(
options
.
delay
&&
typeof
options
.
delay
==
'
number
'
)
{
options
.
delay
=
{
show
:
options
.
delay
,
hide
:
options
.
delay
}
}
return
options
}
,
enter
:
function
(
e
)
{
var
self
=
$
(
e
.
currentTarget
)[
this
.
type
](
this
.
_options
).
data
(
this
.
type
)
if
(
!
self
.
options
.
delay
||
!
self
.
options
.
delay
.
show
)
{
self
.
show
()
}
else
{
self
.
hoverState
=
'
in
'
setTimeout
(
function
()
{
if
(
self
.
hoverState
==
'
in
'
)
{
self
.
show
()
}
},
self
.
options
.
delay
.
show
)
}
}
,
leave
:
function
(
e
)
{
var
self
=
$
(
e
.
currentTarget
)[
this
.
type
](
this
.
_options
).
data
(
this
.
type
)
if
(
!
self
.
options
.
delay
||
!
self
.
options
.
delay
.
hide
)
{
self
.
hide
()
}
else
{
self
.
hoverState
=
'
out
'
setTimeout
(
function
()
{
if
(
self
.
hoverState
==
'
out
'
)
{
self
.
hide
()
}
},
self
.
options
.
delay
.
hide
)
}
}
,
show
:
function
()
{
var
$tip
,
inside
,
pos
,
actualWidth
,
actualHeight
,
placement
,
tp
if
(
this
.
hasContent
()
&&
this
.
enabled
)
{
$tip
=
this
.
tip
()
this
.
setContent
()
if
(
this
.
options
.
animation
)
{
$tip
.
addClass
(
'
fade
'
)
}
placement
=
typeof
this
.
options
.
placement
==
'
function
'
?
this
.
options
.
placement
.
call
(
this
,
$tip
[
0
],
this
.
$element
[
0
])
:
this
.
options
.
placement
inside
=
/in/
.
test
(
placement
)
$tip
.
remove
()
.
css
({
top
:
0
,
left
:
0
,
display
:
'
block
'
})
.
appendTo
(
inside
?
this
.
$element
:
document
.
body
)
pos
=
this
.
getPosition
(
inside
)
actualWidth
=
$tip
[
0
].
offsetWidth
actualHeight
=
$tip
[
0
].
offsetHeight
switch
(
inside
?
placement
.
split
(
'
'
)[
1
]
:
placement
)
{
case
'
bottom
'
:
tp
=
{
top
:
pos
.
top
+
pos
.
height
,
left
:
pos
.
left
+
pos
.
width
/
2
-
actualWidth
/
2
}
break
case
'
top
'
:
tp
=
{
top
:
pos
.
top
-
actualHeight
,
left
:
pos
.
left
+
pos
.
width
/
2
-
actualWidth
/
2
}
break
case
'
left
'
:
tp
=
{
top
:
pos
.
top
+
pos
.
height
/
2
-
actualHeight
/
2
,
left
:
pos
.
left
-
actualWidth
}
break
case
'
right
'
:
tp
=
{
top
:
pos
.
top
+
pos
.
height
/
2
-
actualHeight
/
2
,
left
:
pos
.
left
+
pos
.
width
}
break
}
$tip
.
css
(
tp
)
.
addClass
(
placement
)
.
addClass
(
'
in
'
)
}
}
,
setContent
:
function
()
{
var
$tip
=
this
.
tip
()
$tip
.
find
(
'
.tooltip-inner
'
).
html
(
this
.
getTitle
())
$tip
.
removeClass
(
'
fade in top bottom left right
'
)
}
,
hide
:
function
()
{
var
that
=
this
,
$tip
=
this
.
tip
()
$tip
.
removeClass
(
'
in
'
)
function
removeWithAnimation
()
{
var
timeout
=
setTimeout
(
function
()
{
$tip
.
off
(
$
.
support
.
transition
.
end
).
remove
()
},
500
)
$tip
.
one
(
$
.
support
.
transition
.
end
,
function
()
{
clearTimeout
(
timeout
)
$tip
.
remove
()
})
}
$
.
support
.
transition
&&
this
.
$tip
.
hasClass
(
'
fade
'
)
?
removeWithAnimation
()
:
$tip
.
remove
()
}
,
fixTitle
:
function
()
{
var
$e
=
this
.
$element
if
(
$e
.
attr
(
'
title
'
)
||
typeof
(
$e
.
attr
(
'
data-original-title
'
))
!=
'
string
'
)
{
$e
.
attr
(
'
data-original-title
'
,
$e
.
attr
(
'
title
'
)
||
''
).
removeAttr
(
'
title
'
)
}
}
,
hasContent
:
function
()
{
return
this
.
getTitle
()
}
,
getPosition
:
function
(
inside
)
{
return
$
.
extend
({},
(
inside
?
{
top
:
0
,
left
:
0
}
:
this
.
$element
.
offset
()),
{
width
:
this
.
$element
[
0
].
offsetWidth
,
height
:
this
.
$element
[
0
].
offsetHeight
})
}
,
getTitle
:
function
()
{
var
title
,
$e
=
this
.
$element
,
o
=
this
.
options
title
=
$e
.
attr
(
'
data-original-title
'
)
||
(
typeof
o
.
title
==
'
function
'
?
o
.
title
.
call
(
$e
[
0
])
:
o
.
title
)
title
=
(
title
||
''
).
toString
().
replace
(
/
(
^
\s
*|
\s
*$
)
/
,
""
)
return
title
}
,
tip
:
function
()
{
return
this
.
$tip
=
this
.
$tip
||
$
(
this
.
options
.
template
)
}
,
validate
:
function
()
{
if
(
!
this
.
$element
[
0
].
parentNode
)
{
this
.
hide
()
this
.
$element
=
null
this
.
options
=
null
}
}
,
enable
:
function
()
{
this
.
enabled
=
true
}
,
disable
:
function
()
{
this
.
enabled
=
false
}
,
toggleEnabled
:
function
()
{
this
.
enabled
=
!
this
.
enabled
}
,
toggle
:
function
()
{
this
[
this
.
tip
().
hasClass
(
'
in
'
)
?
'
hide
'
:
'
show
'
]()
}
}
/* TOOLTIP PLUGIN DEFINITION
* ========================= */
$
.
fn
.
tooltip
=
function
(
option
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
)
,
data
=
$this
.
data
(
'
tooltip
'
)
,
options
=
typeof
option
==
'
object
'
&&
option
if
(
!
data
)
$this
.
data
(
'
tooltip
'
,
(
data
=
new
Tooltip
(
this
,
options
)))
if
(
typeof
option
==
'
string
'
)
data
[
option
]()
})
}
$
.
fn
.
tooltip
.
Constructor
=
Tooltip
$
.
fn
.
tooltip
.
defaults
=
{
animation
:
true
,
delay
:
0
,
selector
:
false
,
placement
:
'
top
'
,
trigger
:
'
hover
'
,
title
:
''
,
template
:
'
<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>
'
}
}(
window
.
jQuery
);
website/thaliawebsite/static/js/thimbus_dev.js
View file @
e9044b5a
...
...
@@ -832,3 +832,274 @@ jQuery(document).ready(function() {
}
});
});
/* ===========================================================
* bootstrap-tooltip.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#tooltips
* Inspired by the original jQuery.tipsy by Jason Frame
* ===========================================================
* Copyright 2012 Twitter, Inc.
*
* 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
(
$
)
{
"
use strict
"
/* TOOLTIP PUBLIC CLASS DEFINITION
* =============================== */
var
Tooltip
=
function
(
element
,
options
)
{
this
.
init
(
'
tooltip
'
,
element
,
options
)
}
Tooltip
.
prototype
=
{
constructor
:
Tooltip
,
init
:
function
(
type
,
element
,
options
)
{
var
eventIn
,
eventOut
this
.
type
=
type
this
.
$element
=
$
(
element
)
this
.
options
=
this
.
getOptions
(
options
)
this
.
enabled
=
true
if
(
this
.
options
.
trigger
!=
'
manual
'
)
{
eventIn
=
this
.
options
.
trigger
==
'
hover
'
?
'
mouseenter
'
:
'
focus
'
eventOut
=
this
.
options
.
trigger
==
'
hover
'
?
'
mouseleave
'
:
'
blur
'
this
.
$element
.
on
(
eventIn
,
this
.
options
.
selector
,
$
.
proxy
(
this
.
enter
,
this
))
this
.
$element
.
on
(
eventOut
,
this
.
options
.
selector
,
$
.
proxy
(
this
.
leave
,
this
))
}
this
.
options
.
selector
?
(
this
.
_options
=
$
.
extend
({},
this
.
options
,
{
trigger
:
'
manual
'
,
selector
:
''
}))
:
this
.
fixTitle
()
}
,
getOptions
:
function
(
options
)
{
options
=
$
.
extend
({},
$
.
fn
[
this
.
type
].
defaults
,
options
,
this
.
$element
.
data
())
if
(
options
.
delay
&&
typeof
options
.
delay
==
'
number
'
)
{
options
.
delay
=
{
show
:
options
.
delay
,
hide
:
options
.
delay
}
}
return
options
}
,
enter
:
function
(
e
)
{
var
self
=
$
(
e
.
currentTarget
)[
this
.
type
](
this
.
_options
).
data
(
this
.
type
)
if
(
!
self
.
options
.
delay
||
!
self
.
options
.
delay
.
show
)
{
self
.
show
()
}
else
{
self
.
hoverState
=
'
in
'
setTimeout
(
function
()
{
if
(
self
.
hoverState
==
'
in
'
)
{
self
.
show
()
}
},
self
.
options
.
delay
.
show
)
}
}
,
leave
:
function
(
e
)
{
var
self
=
$
(
e
.
currentTarget
)[
this
.
type
](
this
.
_options
).
data
(
this
.
type
)
if
(
!
self
.
options
.
delay
||
!
self
.
options
.
delay
.
hide
)
{
self
.
hide
()
}
else
{
self
.
hoverState
=
'
out
'
setTimeout
(
function
()
{
if
(
self
.
hoverState
==
'
out
'
)
{
self
.
hide
()
}
},
self
.
options
.
delay
.
hide
)
}
}
,
show
:
function
()
{
var
$tip
,
inside
,
pos
,
actualWidth
,
actualHeight
,
placement
,
tp
if
(
this
.
hasContent
()
&&
this
.
enabled
)
{
$tip
=
this
.
tip
()
this
.
setContent
()
if
(
this
.
options
.
animation
)
{
$tip
.
addClass
(
'
fade
'
)
}
placement
=
typeof
this
.
options
.
placement
==
'
function
'
?
this
.
options
.
placement
.
call
(
this
,
$tip
[
0
],
this
.
$element
[
0
])
:
this
.
options
.
placement
inside
=
/in/
.
test
(
placement
)
$tip
.
remove
()
.
css
({
top
:
0
,
left
:
0
,
display
:
'
block
'
})
.
appendTo
(
inside
?
this
.
$element
:
document
.
body
)
pos
=
this
.
getPosition
(
inside
)
actualWidth
=
$tip
[
0
].
offsetWidth
actualHeight
=
$tip
[
0
].
offsetHeight
switch
(
inside
?
placement
.
split
(
'
'
)[
1
]
:
placement
)
{
case
'
bottom
'
:
tp
=
{
top
:
pos
.
top
+
pos
.
height
,
left
:
pos
.
left
+
pos
.
width
/
2
-
actualWidth
/
2
}
break