diff --git a/validador.py b/validador.py
index 262a059..6b45033 100644
--- a/validador.py
+++ b/validador.py
@@ -35,7 +35,7 @@ class Validador:
def __update_project_info(self, project):
template = self.env.get_template('template.html')
project.info['task_presenter'] = template.render(server=self.config['HOST_STATIC_FILES_ENDPOINT'], server_backend=self.config['HOST_ENDPOINT'], app_shortname=self.config['PYBOSSA_APP_SHORT_NAME'])
- project.info['thumbnail'] = self.config['HOST_STATIC_FILES_ENDPOINT'] + "/img/thumbnail.png"
+ project.info['thumbnail'] = self.config['HOST_STATIC_FILES_ENDPOINT'] + "/assets/img/thumbnail.png"
project.info['sched'] = "incremental"
project.info['published'] = True
project.allow_anonymous_contributors = False
@@ -98,7 +98,6 @@ class Validador:
task_id = request.form['task_id']
project_id = request.form['project_id']
sign_name = request.form['sign_name']
- api_host = self.config['API_HOST']
api_dbhost = self.config['API_DB_HOST']
number_of_approval = int(request.form['number_of_approval'])
number_of_avatar_disapproval = int(request.form['number_of_avatar_disapproval'])
diff --git a/view/assets/css/main.css b/view/assets/css/main.css
index 5b0eee3..f296a47 100755
--- a/view/assets/css/main.css
+++ b/view/assets/css/main.css
@@ -1,8 +1,34 @@
+@import url("ranking.css");
+
@font-face {
font-family: 'Titillium Web';
- src: url('../fonts/TitilliumWeb-SemiBold.ttf') format('truetype');
+ src: url('../fonts/titilliumweb/TitilliumWeb-SemiBold.ttf')
+ format('truetype');
+}
+
+#alert-container {
+ padding: 0px;
+}
+
+#alert-container .alert-actions a {
+ padding: 10px 15px 10px 0px;
+}
+
+#main-container {
+ font-family: 'Titillium Web', sans-serif;
+}
+
+/* Navbar */
+#validador-navbar {
+ padding-top: 10px;
+}
+
+#validador-navbar .ranking-button {
+ font-size: 20px;
+ font-weight: bold;
}
+/* Validador */
.video-body {
height: 338px;
width: 85%;
@@ -19,39 +45,31 @@
margin-right: 0%;
}
-/* Sombras */
.line-separator, .btn-default {
box-shadow: 2px 2px 2px rgba(215, 217, 221, 1.0);
-webkit-box-shadow: 2px 2px 2px rgba(215, 217, 221, 1.0);
-moz-box-shadow: 2px 2px 2px rgba(215, 217, 221, 1.0);
}
-/* Fontes */
-.btn-default, .finish-task-button, .radio-options span, h1,
- h2, h3, h4, h5, h6 {
- font-family: 'Titillium Web', sans-serif;
+#validador-header {
+ padding-left: 15px;
}
-/* Header */
-#validador-header {
- padding: 1px;
- background: rgba(255, 255, 255, 1.0);
+#validador-header .validador-question {
+ margin-top: 0px;
}
-/* Body */
.body-container {
background: rgba(236, 238, 242, 1.0);
- padding-bottom: 10px;
+ padding: 0px 0px 10px 0px;
}
-/* Linha */
.line-separator {
height: 2px;
width: 100%;
background-color: rgba(145, 200, 206, 1.0);
}
-/* Texto */
h1, h2, h3, h4, h5, h6 {
color: rgba(144, 164, 174, 1.0);
}
@@ -74,7 +92,7 @@ h6 {
}
#finish-task-container {
- padding-right: 40px;
+ padding-right: 15px;
}
.finish-padding-top {
@@ -142,11 +160,11 @@ h6 {
#loading-container {
display: none;
position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
}
#loading-container img {
diff --git a/view/assets/css/ranking.css b/view/assets/css/ranking.css
new file mode 100644
index 0000000..7dde662
--- /dev/null
+++ b/view/assets/css/ranking.css
@@ -0,0 +1,124 @@
+@font-face {
+ font-family: 'Roboto';
+ src: url('../fonts/roboto/Roboto-Light.ttf') format('truetype');
+}
+
+#ranking-container {
+ display: none;
+ background-color: #ffffff;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ padding-right: 0px;
+ overflow: hidden;
+ font-family: 'Roboto';
+ padding-left: 15px;
+ margin: 10px 15px 5px 15px;
+}
+
+#ranking-info-container {
+ padding-left: 0px;
+}
+
+#ranking-info-container .title {
+ color: #000000;
+ font-size: 50px;
+}
+
+#ranking-info-container .avatar-info {
+ text-align: center;
+ padding-top: 30px;
+}
+
+#ranking-info-container .avatar-container {
+ display: none;
+}
+
+#ranking-info-container .avatar-info img {
+ width: 100%;
+}
+
+#ranking-info-container .achievement-info {
+ color: #028c12;
+}
+
+#ranking-info-container .progress-container {
+ padding-left: 100px;
+ margin-top: 10px;
+}
+
+#ranking-info-container .achievements-container {
+ position: relative;
+ padding: 10px 0px 0px 0px;
+ word-wrap: break-word;
+}
+
+#ranking-info-container .progress-label {
+ position: absolute;
+ left: 0px;
+}
+
+#ranking-info-container .done-tasks {
+ color: #84DC76;
+}
+
+#ranking-info-container .total-tasks {
+ color: #f0ad4e;
+}
+
+#ranking-info-container .tooltip-inner {
+ font-size: 16px;
+ max-width: 220px;
+}
+
+#leaderboard-container {
+ background-color: #fefcfc;
+ padding: 0px;
+ min-height: 560px;
+}
+
+#leaderboard-container table {
+ margin-bottom: 0px;
+}
+
+#leaderboard-container .table-striped>tbody>tr:nth-of-type(odd) {
+ background-color: #f1f2f2;
+}
+
+#leaderboard-container .table-striped>tbody>tr:hover {
+ background-color: #e0e0e0;
+}
+
+#leaderboard-container .table-striped>tbody>tr.highlight {
+ background-color: #fbefa3;
+}
+
+#leaderboard-container .table-striped>tbody>tr.highlight:hover {
+ background-color: #f7e783;
+}
+
+#leaderboard-container th {
+ text-align: center;
+ border: 0px;
+ padding-bottom: 15px;
+}
+
+#leaderboard-container td {
+ text-align: center;
+ border: 0px;
+}
+
+#leaderboard-container td:nth-of-type(1), #leaderboard-container td:nth-of-type(2)
+ {
+ width: 75px;
+}
+
+#leaderboard-container td:nth-of-type(2), #leaderboard-container th:nth-of-type(2),
+ #leaderboard-container td:nth-of-type(3), #leaderboard-container th:nth-of-type(3)
+ {
+ text-align: left;
+}
+
+#leaderboard-container th:nth-of-type(3) img {
+ padding-left: 20px;
+}
\ No newline at end of file
diff --git a/view/assets/fonts/Helvetica.otf b/view/assets/fonts/Helvetica.otf
deleted file mode 100755
index 9b1dc86..0000000
Binary files a/view/assets/fonts/Helvetica.otf and /dev/null differ
diff --git a/view/assets/fonts/TitilliumWeb-Black.ttf b/view/assets/fonts/TitilliumWeb-Black.ttf
deleted file mode 100755
index fc5c4b5..0000000
Binary files a/view/assets/fonts/TitilliumWeb-Black.ttf and /dev/null differ
diff --git a/view/assets/fonts/TitilliumWeb-Bold.ttf b/view/assets/fonts/TitilliumWeb-Bold.ttf
deleted file mode 100755
index 0af0fe7..0000000
Binary files a/view/assets/fonts/TitilliumWeb-Bold.ttf and /dev/null differ
diff --git a/view/assets/fonts/TitilliumWeb-BoldItalic.ttf b/view/assets/fonts/TitilliumWeb-BoldItalic.ttf
deleted file mode 100755
index 77425ea..0000000
Binary files a/view/assets/fonts/TitilliumWeb-BoldItalic.ttf and /dev/null differ
diff --git a/view/assets/fonts/TitilliumWeb-ExtraLight.ttf b/view/assets/fonts/TitilliumWeb-ExtraLight.ttf
deleted file mode 100755
index 2b506ef..0000000
Binary files a/view/assets/fonts/TitilliumWeb-ExtraLight.ttf and /dev/null differ
diff --git a/view/assets/fonts/TitilliumWeb-ExtraLightItalic.ttf b/view/assets/fonts/TitilliumWeb-ExtraLightItalic.ttf
deleted file mode 100755
index c1be5ba..0000000
Binary files a/view/assets/fonts/TitilliumWeb-ExtraLightItalic.ttf and /dev/null differ
diff --git a/view/assets/fonts/TitilliumWeb-Italic.ttf b/view/assets/fonts/TitilliumWeb-Italic.ttf
deleted file mode 100755
index 42f2c10..0000000
Binary files a/view/assets/fonts/TitilliumWeb-Italic.ttf and /dev/null differ
diff --git a/view/assets/fonts/TitilliumWeb-Light.ttf b/view/assets/fonts/TitilliumWeb-Light.ttf
deleted file mode 100755
index ca67971..0000000
Binary files a/view/assets/fonts/TitilliumWeb-Light.ttf and /dev/null differ
diff --git a/view/assets/fonts/TitilliumWeb-LightItalic.ttf b/view/assets/fonts/TitilliumWeb-LightItalic.ttf
deleted file mode 100755
index 2ea724f..0000000
Binary files a/view/assets/fonts/TitilliumWeb-LightItalic.ttf and /dev/null differ
diff --git a/view/assets/fonts/TitilliumWeb-Regular.ttf b/view/assets/fonts/TitilliumWeb-Regular.ttf
deleted file mode 100755
index 6da8219..0000000
Binary files a/view/assets/fonts/TitilliumWeb-Regular.ttf and /dev/null differ
diff --git a/view/assets/fonts/TitilliumWeb-SemiBold.ttf b/view/assets/fonts/TitilliumWeb-SemiBold.ttf
deleted file mode 100755
index dfdcdbe..0000000
Binary files a/view/assets/fonts/TitilliumWeb-SemiBold.ttf and /dev/null differ
diff --git a/view/assets/fonts/TitilliumWeb-SemiBoldItalic.ttf b/view/assets/fonts/TitilliumWeb-SemiBoldItalic.ttf
deleted file mode 100755
index b68a669..0000000
Binary files a/view/assets/fonts/TitilliumWeb-SemiBoldItalic.ttf and /dev/null differ
diff --git a/view/assets/fonts/roboto/Roboto-Black.ttf b/view/assets/fonts/roboto/Roboto-Black.ttf
new file mode 100644
index 0000000..fbde625
Binary files /dev/null and b/view/assets/fonts/roboto/Roboto-Black.ttf differ
diff --git a/view/assets/fonts/roboto/Roboto-BlackItalic.ttf b/view/assets/fonts/roboto/Roboto-BlackItalic.ttf
new file mode 100644
index 0000000..60f7782
Binary files /dev/null and b/view/assets/fonts/roboto/Roboto-BlackItalic.ttf differ
diff --git a/view/assets/fonts/roboto/Roboto-Bold.ttf b/view/assets/fonts/roboto/Roboto-Bold.ttf
new file mode 100644
index 0000000..a355c27
Binary files /dev/null and b/view/assets/fonts/roboto/Roboto-Bold.ttf differ
diff --git a/view/assets/fonts/roboto/Roboto-BoldItalic.ttf b/view/assets/fonts/roboto/Roboto-BoldItalic.ttf
new file mode 100644
index 0000000..3c9a7a3
Binary files /dev/null and b/view/assets/fonts/roboto/Roboto-BoldItalic.ttf differ
diff --git a/view/assets/fonts/roboto/Roboto-Italic.ttf b/view/assets/fonts/roboto/Roboto-Italic.ttf
new file mode 100644
index 0000000..ff6046d
Binary files /dev/null and b/view/assets/fonts/roboto/Roboto-Italic.ttf differ
diff --git a/view/assets/fonts/roboto/Roboto-Light.ttf b/view/assets/fonts/roboto/Roboto-Light.ttf
new file mode 100644
index 0000000..94c6bcc
Binary files /dev/null and b/view/assets/fonts/roboto/Roboto-Light.ttf differ
diff --git a/view/assets/fonts/roboto/Roboto-LightItalic.ttf b/view/assets/fonts/roboto/Roboto-LightItalic.ttf
new file mode 100644
index 0000000..04cc002
Binary files /dev/null and b/view/assets/fonts/roboto/Roboto-LightItalic.ttf differ
diff --git a/view/assets/fonts/roboto/Roboto-Medium.ttf b/view/assets/fonts/roboto/Roboto-Medium.ttf
new file mode 100644
index 0000000..39c63d7
Binary files /dev/null and b/view/assets/fonts/roboto/Roboto-Medium.ttf differ
diff --git a/view/assets/fonts/roboto/Roboto-MediumItalic.ttf b/view/assets/fonts/roboto/Roboto-MediumItalic.ttf
new file mode 100644
index 0000000..dc743f0
Binary files /dev/null and b/view/assets/fonts/roboto/Roboto-MediumItalic.ttf differ
diff --git a/view/assets/fonts/roboto/Roboto-Regular.ttf b/view/assets/fonts/roboto/Roboto-Regular.ttf
new file mode 100644
index 0000000..8c082c8
Binary files /dev/null and b/view/assets/fonts/roboto/Roboto-Regular.ttf differ
diff --git a/view/assets/fonts/roboto/Roboto-Thin.ttf b/view/assets/fonts/roboto/Roboto-Thin.ttf
new file mode 100644
index 0000000..d695550
Binary files /dev/null and b/view/assets/fonts/roboto/Roboto-Thin.ttf differ
diff --git a/view/assets/fonts/roboto/Roboto-ThinItalic.ttf b/view/assets/fonts/roboto/Roboto-ThinItalic.ttf
new file mode 100644
index 0000000..07172ff
Binary files /dev/null and b/view/assets/fonts/roboto/Roboto-ThinItalic.ttf differ
diff --git a/view/assets/fonts/titilliumweb/TitilliumWeb-Black.ttf b/view/assets/fonts/titilliumweb/TitilliumWeb-Black.ttf
new file mode 100644
index 0000000..fc5c4b5
Binary files /dev/null and b/view/assets/fonts/titilliumweb/TitilliumWeb-Black.ttf differ
diff --git a/view/assets/fonts/titilliumweb/TitilliumWeb-Bold.ttf b/view/assets/fonts/titilliumweb/TitilliumWeb-Bold.ttf
new file mode 100644
index 0000000..0af0fe7
Binary files /dev/null and b/view/assets/fonts/titilliumweb/TitilliumWeb-Bold.ttf differ
diff --git a/view/assets/fonts/titilliumweb/TitilliumWeb-BoldItalic.ttf b/view/assets/fonts/titilliumweb/TitilliumWeb-BoldItalic.ttf
new file mode 100644
index 0000000..77425ea
Binary files /dev/null and b/view/assets/fonts/titilliumweb/TitilliumWeb-BoldItalic.ttf differ
diff --git a/view/assets/fonts/titilliumweb/TitilliumWeb-ExtraLight.ttf b/view/assets/fonts/titilliumweb/TitilliumWeb-ExtraLight.ttf
new file mode 100644
index 0000000..2b506ef
Binary files /dev/null and b/view/assets/fonts/titilliumweb/TitilliumWeb-ExtraLight.ttf differ
diff --git a/view/assets/fonts/titilliumweb/TitilliumWeb-ExtraLightItalic.ttf b/view/assets/fonts/titilliumweb/TitilliumWeb-ExtraLightItalic.ttf
new file mode 100644
index 0000000..c1be5ba
Binary files /dev/null and b/view/assets/fonts/titilliumweb/TitilliumWeb-ExtraLightItalic.ttf differ
diff --git a/view/assets/fonts/titilliumweb/TitilliumWeb-Italic.ttf b/view/assets/fonts/titilliumweb/TitilliumWeb-Italic.ttf
new file mode 100644
index 0000000..42f2c10
Binary files /dev/null and b/view/assets/fonts/titilliumweb/TitilliumWeb-Italic.ttf differ
diff --git a/view/assets/fonts/titilliumweb/TitilliumWeb-Light.ttf b/view/assets/fonts/titilliumweb/TitilliumWeb-Light.ttf
new file mode 100644
index 0000000..ca67971
Binary files /dev/null and b/view/assets/fonts/titilliumweb/TitilliumWeb-Light.ttf differ
diff --git a/view/assets/fonts/titilliumweb/TitilliumWeb-LightItalic.ttf b/view/assets/fonts/titilliumweb/TitilliumWeb-LightItalic.ttf
new file mode 100644
index 0000000..2ea724f
Binary files /dev/null and b/view/assets/fonts/titilliumweb/TitilliumWeb-LightItalic.ttf differ
diff --git a/view/assets/fonts/titilliumweb/TitilliumWeb-Regular.ttf b/view/assets/fonts/titilliumweb/TitilliumWeb-Regular.ttf
new file mode 100644
index 0000000..6da8219
Binary files /dev/null and b/view/assets/fonts/titilliumweb/TitilliumWeb-Regular.ttf differ
diff --git a/view/assets/fonts/titilliumweb/TitilliumWeb-SemiBold.ttf b/view/assets/fonts/titilliumweb/TitilliumWeb-SemiBold.ttf
new file mode 100644
index 0000000..dfdcdbe
Binary files /dev/null and b/view/assets/fonts/titilliumweb/TitilliumWeb-SemiBold.ttf differ
diff --git a/view/assets/fonts/titilliumweb/TitilliumWeb-SemiBoldItalic.ttf b/view/assets/fonts/titilliumweb/TitilliumWeb-SemiBoldItalic.ttf
new file mode 100644
index 0000000..b68a669
Binary files /dev/null and b/view/assets/fonts/titilliumweb/TitilliumWeb-SemiBoldItalic.ttf differ
diff --git a/view/assets/img/correct.png b/view/assets/img/correct.png
new file mode 100755
index 0000000..3340434
Binary files /dev/null and b/view/assets/img/correct.png differ
diff --git a/view/assets/img/finish.svg b/view/assets/img/finish.svg
new file mode 100755
index 0000000..f6d4e0c
--- /dev/null
+++ b/view/assets/img/finish.svg
@@ -0,0 +1,17 @@
+
+
+
diff --git a/view/assets/img/incorrect.png b/view/assets/img/incorrect.png
new file mode 100755
index 0000000..be2d49f
Binary files /dev/null and b/view/assets/img/incorrect.png differ
diff --git a/view/assets/img/loading.gif b/view/assets/img/loading.gif
new file mode 100755
index 0000000..0fcd282
Binary files /dev/null and b/view/assets/img/loading.gif differ
diff --git a/view/assets/img/ranking/bronze-star-icon.png b/view/assets/img/ranking/bronze-star-icon.png
new file mode 100644
index 0000000..d1cf5af
Binary files /dev/null and b/view/assets/img/ranking/bronze-star-icon.png differ
diff --git a/view/assets/img/ranking/gold-star-icon.png b/view/assets/img/ranking/gold-star-icon.png
new file mode 100644
index 0000000..cbb5b6f
Binary files /dev/null and b/view/assets/img/ranking/gold-star-icon.png differ
diff --git a/view/assets/img/ranking/signs-icon.png b/view/assets/img/ranking/signs-icon.png
new file mode 100644
index 0000000..f99f05d
Binary files /dev/null and b/view/assets/img/ranking/signs-icon.png differ
diff --git a/view/assets/img/ranking/silver-star-icon.png b/view/assets/img/ranking/silver-star-icon.png
new file mode 100644
index 0000000..121e773
Binary files /dev/null and b/view/assets/img/ranking/silver-star-icon.png differ
diff --git a/view/assets/img/ranking/trophy-icon.png b/view/assets/img/ranking/trophy-icon.png
new file mode 100644
index 0000000..c048eb8
Binary files /dev/null and b/view/assets/img/ranking/trophy-icon.png differ
diff --git a/view/assets/img/ranking/user-shape.png b/view/assets/img/ranking/user-shape.png
new file mode 100644
index 0000000..f2ffb8f
Binary files /dev/null and b/view/assets/img/ranking/user-shape.png differ
diff --git a/view/assets/img/skip.svg b/view/assets/img/skip.svg
new file mode 100755
index 0000000..2d006dc
--- /dev/null
+++ b/view/assets/img/skip.svg
@@ -0,0 +1,17 @@
+
+
+
diff --git a/view/assets/img/thumbnail.png b/view/assets/img/thumbnail.png
new file mode 100755
index 0000000..ead10bc
Binary files /dev/null and b/view/assets/img/thumbnail.png differ
diff --git a/view/assets/js/external-libs/js.cookie.js b/view/assets/js/external-libs/js.cookie.js
new file mode 100755
index 0000000..afd524d
--- /dev/null
+++ b/view/assets/js/external-libs/js.cookie.js
@@ -0,0 +1,145 @@
+/*!
+ * JavaScript Cookie v2.0.4
+ * https://github.com/js-cookie/js-cookie
+ *
+ * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
+ * Released under the MIT license
+ */
+(function (factory) {
+ if (typeof define === 'function' && define.amd) {
+ define(factory);
+ } else if (typeof exports === 'object') {
+ module.exports = factory();
+ } else {
+ var _OldCookies = window.Cookies;
+ var api = window.Cookies = factory();
+ api.noConflict = function () {
+ window.Cookies = _OldCookies;
+ return api;
+ };
+ }
+}(function () {
+ function extend () {
+ var i = 0;
+ var result = {};
+ for (; i < arguments.length; i++) {
+ var attributes = arguments[ i ];
+ for (var key in attributes) {
+ result[key] = attributes[key];
+ }
+ }
+ return result;
+ }
+
+ function init (converter) {
+ function api (key, value, attributes) {
+ var result;
+
+ // Write
+
+ if (arguments.length > 1) {
+ attributes = extend({
+ path: '/'
+ }, api.defaults, attributes);
+
+ if (typeof attributes.expires === 'number') {
+ var expires = new Date();
+ expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
+ attributes.expires = expires;
+ }
+
+ try {
+ result = JSON.stringify(value);
+ if (/^[\{\[]/.test(result)) {
+ value = result;
+ }
+ } catch (e) {}
+
+ if (!converter.write) {
+ value = encodeURIComponent(String(value))
+ .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
+ } else {
+ value = converter.write(value, key);
+ }
+
+ key = encodeURIComponent(String(key));
+ key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
+ key = key.replace(/[\(\)]/g, escape);
+
+ return (document.cookie = [
+ key, '=', value,
+ attributes.expires && '; expires=' + attributes.expires.toUTCString(), // use expires attribute, max-age is not supported by IE
+ attributes.path && '; path=' + attributes.path,
+ attributes.domain && '; domain=' + attributes.domain,
+ attributes.secure ? '; secure' : ''
+ ].join(''));
+ }
+
+ // Read
+
+ if (!key) {
+ result = {};
+ }
+
+ // To prevent the for loop in the first place assign an empty array
+ // in case there are no cookies at all. Also prevents odd result when
+ // calling "get()"
+ var cookies = document.cookie ? document.cookie.split('; ') : [];
+ var rdecode = /(%[0-9A-Z]{2})+/g;
+ var i = 0;
+
+ for (; i < cookies.length; i++) {
+ var parts = cookies[i].split('=');
+ var name = parts[0].replace(rdecode, decodeURIComponent);
+ var cookie = parts.slice(1).join('=');
+
+ if (cookie.charAt(0) === '"') {
+ cookie = cookie.slice(1, -1);
+ }
+
+ try {
+ cookie = converter.read ?
+ converter.read(cookie, name) : converter(cookie, name) ||
+ cookie.replace(rdecode, decodeURIComponent);
+
+ if (this.json) {
+ try {
+ cookie = JSON.parse(cookie);
+ } catch (e) {}
+ }
+
+ if (key === name) {
+ result = cookie;
+ break;
+ }
+
+ if (!key) {
+ result[name] = cookie;
+ }
+ } catch (e) {}
+ }
+
+ return result;
+ }
+
+ api.get = api.set = api;
+ api.getJSON = function () {
+ return api.apply({
+ json: true
+ }, [].slice.call(arguments));
+ };
+ api.defaults = {};
+
+ api.remove = function (key, attributes) {
+ api(key, '', extend(attributes, {
+ expires: -1
+ }));
+ };
+
+ api.withConverter = init;
+
+ return api;
+ }
+
+ return init(function () {});
+}));
diff --git a/view/assets/js/helpers/load-html-helper.js b/view/assets/js/helpers/load-html-helper.js
new file mode 100644
index 0000000..7eddf6a
--- /dev/null
+++ b/view/assets/js/helpers/load-html-helper.js
@@ -0,0 +1,21 @@
+(function(loadHtmlHelper, $, undefined) {
+
+ var baseUrl = '';
+
+ function _preprocessHtml(data) {
+ return data.replace(/{{ server }}/g, baseUrl);
+ }
+
+ loadHtmlHelper.load = function(target, url, callback) {
+ var completeUrl = baseUrl + url;
+ $.get(completeUrl, function(data) {
+ $(target).html(_preprocessHtml(data));
+ callback && callback();
+ });
+ }
+
+ loadHtmlHelper.setup = function(url) {
+ baseUrl = url;
+ };
+
+}(window.loadHtmlHelper = window.loadHtmlHelper || {}, jQuery));
diff --git a/view/assets/js/helpers/pybossa-api-helper.js b/view/assets/js/helpers/pybossa-api-helper.js
new file mode 100644
index 0000000..8a79e28
--- /dev/null
+++ b/view/assets/js/helpers/pybossa-api-helper.js
@@ -0,0 +1,44 @@
+(function(pybossaApiHelper, $, undefined) {
+
+ var pybossaEndpoint = '';
+ var projectName = '';
+
+ function _getProjectId() {
+ return $.ajax({
+ url : pybossaEndpoint + '/api/project?short_name=' + projectName
+ });
+ }
+
+ function _getUserProgress() {
+ return $.ajax({
+ url : pybossaEndpoint + '/api/project/' + projectName + '/userprogress',
+ cache : false,
+ dataType : 'json'
+ });
+ }
+
+ function _getAnswers(projectId, userId) {
+ return $.ajax({
+ url : pybossaEndpoint + '/api/taskrun?project_id=' + projectId
+ + '&user_id=' + userId
+ });
+ }
+
+ pybossaApiHelper.setup = function(endpoint, name) {
+ pybossaEndpoint = endpoint;
+ projectName = name;
+ }
+
+ pybossaApiHelper.getProjectId = function() {
+ return _getProjectId();
+ }
+
+ pybossaApiHelper.getUserProgress = function() {
+ return _getUserProgress();
+ }
+
+ pybossaApiHelper.getAnswers = function(projectId, userId) {
+ return _getAnswers(projectId, userId);
+ }
+
+}(window.pybossaApiHelper = window.pybossaApiHelper || {}, jQuery));
diff --git a/view/assets/js/ranking.js b/view/assets/js/ranking.js
new file mode 100644
index 0000000..bcb8623
--- /dev/null
+++ b/view/assets/js/ranking.js
@@ -0,0 +1,163 @@
+(function(ranking, $, undefined) {
+
+ var NUMBER_OF_TOP_USERS = 10;
+ var STARS_MAP = ['', 'gold', 'silver', 'bronze'];
+ var baseUrl = '';
+ var pybossaEndpoint = '';
+ var projectName = '';
+ var loggedUser = {};
+ var totalTasks = 0;
+ var doneTasks = 0;
+ var showingRanking = false;
+ var tasksEnded = false;
+
+ function _getRankingData(callback) {
+ $.ajax({
+ url : pybossaEndpoint + '/api/leaderboard?limit='
+ + NUMBER_OF_TOP_USERS,
+ success : function(response) {
+ callback(typeof response == 'object' ? response[projectName]
+ : '');
+ },
+ error : function(xhr, textStatus, error) {
+ alert(xhr.responseText);
+ }
+ });
+ }
+
+ function _processRankingRow(rowData) {
+ var rank = rowData.rank;
+ if (rank < 0) {
+ return '';
+ }
+ var starHTML = '';
+ if (rank > 0 && rank < 4) {
+ starHTML = '
';
+ }
+ var trHTML = '
';
+ if (rowData.name === loggedUser.name) {
+ trHTML = '
';
+ loggedUser.rank = rowData.rank;
+ }
+ rank = rank == 0 ? '-' : rank + '.';
+ return trHTML + '' + starHTML + ' | ' + rank
+ + ' | ' + rowData.fullname + ' | '
+ + rowData.score + ' |
';
+ }
+
+ function _updateRanking() {
+ _getRankingData(function(data) {
+ if (data === '')
+ return;
+
+ var rowsHTML = '';
+ for (var i = 0; i < data.length; i++) {
+ rowsHTML += _processRankingRow(data[i]);
+ }
+ $('#leaderboard-container tbody').html(rowsHTML);
+ $('#ranking-info-container .rank-position').html(loggedUser.rank);
+ $('#ranking-info-container .username').html(loggedUser.fullName);
+ if (loggedUser.avatarUrl != '') {
+ $('#ranking-info-container .avatar-container img').attr('src',
+ loggedUser.avatarUrl);
+ $('#ranking-info-container .avatar-placeholder').hide();
+ $('#ranking-info-container .avatar-container').show();
+ }
+ if (loggedUser.rank === 0) {
+ $('#ranking-info-container .rank-position-container').hide();
+ }
+ _updateProgress();
+ });
+ }
+
+ function _getUserData() {
+ return $.ajax({
+ url : pybossaEndpoint + '/api/user?name=' + loggedUser.name
+ });
+ }
+
+ function _getAvatarUrl(data) {
+ return !data || typeof data.avatar === 'undefined' || typeof data.container === 'undefined' ?
+ '' : pybossaEndpoint + '/uploads/' + data.container + '/' + data.avatar;
+ }
+
+ function _updateProgress() {
+ pybossaApiHelper
+ .getUserProgress()
+ .done(
+ function(response) {
+ totalTasks = response.total;
+ doneTasks = response.done;
+ var percentage = (doneTasks / totalTasks) * 100;
+ $('#ranking-info-container .progress-bar').attr(
+ 'aria-valuenow', percentage).css('width',
+ percentage + '%');
+ $('#ranking-container [data-toggle="tooltip"]')
+ .tooltip(
+ {
+ title : ''
+ + doneTasks
+ + ' / '
+ + totalTasks
+ + ' sinais ensinados.',
+ placement : 'bottom',
+ trigger : 'manual'
+ });
+ });
+ }
+
+ function _loadRankingData() {
+ _getUserData().done(function(response) {
+ if (typeof response == 'undefined' || response.length < 1) {
+ return;
+ }
+ loggedUser.fullName = response[0].fullname;
+ loggedUser.avatarUrl = _getAvatarUrl(response[0].info);
+ _updateRanking();
+ });
+ }
+
+ function _showRanking() {
+ $('#validador-container').hide();
+ $('#ranking-container').show();
+ $('#validador-navbar .ranking-button').html("Voltar");
+ if (doneTasks > 0) {
+ $('#ranking-container [data-toggle="tooltip"]').tooltip('show');
+ }
+ showingRanking = true;
+ }
+
+ function _hideRanking() {
+ $('#ranking-container').hide();
+ $('#validador-navbar .ranking-button').html("Ver Ranking");
+ showingRanking = false;
+
+ if (!tasksEnded) {
+ $('#validador-container').show();
+ }
+ }
+
+ ranking.toggle = function() {
+ if (showingRanking) {
+ _hideRanking();
+ } else {
+ _showRanking();
+ }
+ };
+
+ ranking.tasksEnded = function() {
+ tasksEnded = true;
+ };
+
+ ranking.setup = function(serverUrl, endpoint, name, user) {
+ baseUrl = serverUrl;
+ pybossaEndpoint = endpoint;
+ projectName = name;
+ loggedUser.name = user;
+ loadHtmlHelper.load('#ranking-container', '/assets/templates/ranking/ranking.html',
+ _loadRankingData);
+ };
+
+}(window.ranking = window.ranking || {}, jQuery));
diff --git a/view/assets/js/validador.js b/view/assets/js/validador.js
index 5b56306..bf12e50 100755
--- a/view/assets/js/validador.js
+++ b/view/assets/js/validador.js
@@ -1,61 +1,69 @@
(function(validador, $, undefined) {
- var videos_url = "";
- var base_url = "";
- var server_backend_url = '';
- var current_task_id = -1;
+ var baseUrl = '';
+ var serverBackendUrl = '';
+ var videosUrl = '';
+ var pybossaEndpoint = '';
+ var projectName = '';
+ var currentTaskId = -1;
+
+ function _getLoggedUser() {
+ var pybossaRememberToken = Cookies.get('remember_token');
+ var splittedTokenId = pybossaRememberToken.split('|');
+ return splittedTokenId.length > 0 ? splittedTokenId[0] : 'anonymous';
+ }
function _disableFinishButton() {
- $("#finish-button").off("click");
- $("#finish-button").removeClass("enabled-button");
- $("#finish-button").addClass("disabled-button");
+ $('#finish-button').off('click');
+ $('#finish-button').removeClass('enabled-button');
+ $('#finish-button').addClass('disabled-button');
}
function _enableFinishButton(task, deferred) {
- $("#finish-button").removeClass("disabled-button");
- $("#finish-button").addClass("enabled-button");
- $("#finish-button").off("click").on("click", function() {
+ $('#finish-button').removeClass('disabled-button');
+ $('#finish-button').addClass('enabled-button');
+ $('#finish-button').off('click').on('click', function() {
_readAnswer(task, deferred, false);
});
}
function _hideCommentAvatar() {
- $("#comment-avatar").hide();
- $("#finish-task-container").removeClass("finish-padding-top-adjust");
+ $('#comment-avatar').hide();
+ $('#finish-task-container').removeClass('finish-padding-top-adjust');
}
function _hideCommentRef() {
- $("#comment-ref").hide();
+ $('#comment-ref').hide();
}
function resetComments() {
- $("#comment-avatar textarea").val("")
- $("#comment-ref textarea").val("");
+ $('#comment-avatar textarea').val('')
+ $('#comment-ref textarea').val('');
_hideCommentAvatar();
_hideCommentRef();
}
function _enableLoading() {
- $("#loading-container").show();
- $("#main-container").addClass("mask");
+ $('#loading-container').show();
+ $('#main-container').addClass('mask');
}
function _disableLoading() {
- $("#loading-container").hide();
- $("#main-container").removeClass("mask");
+ $('#loading-container').hide();
+ $('#main-container').removeClass('mask');
}
function _handleAvatarRadioClick(el, task, deferred) {
- var is_incorrect_button = $(el).val() == "INCORRECT";
- if (is_incorrect_button) {
+ var isIncorrectButton = $(el).val() == 'INCORRECT';
+ if (isIncorrectButton) {
_hideCommentRef();
- $("#comment-avatar").show();
- $("#finish-task-container").addClass("finish-padding-top-adjust");
+ $('#comment-avatar').show();
+ $('#finish-task-container').addClass('finish-padding-top-adjust');
} else {
_hideCommentAvatar();
}
- var isRefChecked = $("#ref-radio-answers input[type=radio]").is(
- ":checked");
+ var isRefChecked = $('#ref-radio-answers input[type=radio]').is(
+ ':checked');
if (isRefChecked) {
_enableFinishButton(task, deferred);
} else {
@@ -64,23 +72,24 @@
}
function _handleRefRadioClick(el, task, deferred) {
- var is_incorrect_button = $(el).val() == "INCORRECT";
- if (is_incorrect_button) {
- $("#incorrect-avatar-button").prop("checked", true);
- $("#comment-ref").show();
+ var isIncorrectButton = $(el).val() == 'INCORRECT';
+ if (isIncorrectButton) {
+ $('#incorrect-avatar-button').prop('checked', true);
+ $('#comment-ref').show();
_hideCommentAvatar();
} else {
- var is_avatar_disabled = $("#avatar-radio-answers input[type=radio]").is(":disabled");
- if (is_avatar_disabled) {
- $("#incorrect-avatar-button").prop("checked", false);
+ var isAvatarDisabled = $('#avatar-radio-answers input[type=radio]')
+ .is(':disabled');
+ if (isAvatarDisabled) {
+ $('#incorrect-avatar-button').prop('checked', false);
}
_hideCommentRef();
}
- $("#avatar-radio-answers input[type=radio]").prop("disabled",
- is_incorrect_button);
- var is_avatar_checked = $("#avatar-radio-answers input[type=radio]").is(
- ":checked");
- if (is_avatar_checked) {
+ $('#avatar-radio-answers input[type=radio]').prop('disabled',
+ isIncorrectButton);
+ var isAvatarChecked = $('#avatar-radio-answers input[type=radio]').is(
+ ':checked');
+ if (isAvatarChecked) {
_enableFinishButton(task, deferred);
} else {
_disableFinishButton();
@@ -90,69 +99,68 @@
function _setupGUI(task, deferred) {
resetComments();
_disableFinishButton();
- $("#avatar-radio-answers input[type=radio]").prop("disabled", false);
- $("#avatar-radio-answers input[type=radio]").prop("checked", false);
- $("#ref-radio-answers input[type=radio]").prop("checked", false);
- $("#avatar-radio-answers input[type=radio]").off("click").on("click",
+ $('#avatar-radio-answers input[type=radio]').prop('disabled', false);
+ $('#avatar-radio-answers input[type=radio]').prop('checked', false);
+ $('#ref-radio-answers input[type=radio]').prop('checked', false);
+ $('#avatar-radio-answers input[type=radio]').off('click').on('click',
function() {
_handleAvatarRadioClick(this, task, deferred);
});
- $("#ref-radio-answers input[type=radio]").off("click").on("click",
+ $('#ref-radio-answers input[type=radio]').off('click').on('click',
function() {
_handleRefRadioClick(this, task, deferred);
});
- $("#skip-button").off("click").on("click", function() {
+ $('#skip-button').off('click').on('click', function() {
_readAnswer(task, deferred, true);
});
}
- function _readAnswer(task, deferred, has_skipped) {
- var status = "";
- var avatar_answer = $("#avatar-radio-answers input[type=radio]:checked")
- .val();
- var ref_answer = $("#ref-radio-answers input[type=radio]:checked")
+ function _readAnswer(task, deferred, hasSkipped) {
+ var status = '';
+ var avatarAnswer = $('#avatar-radio-answers input[type=radio]:checked')
.val();
- if (has_skipped) {
- status = "SKIPPED";
- } else if (ref_answer == "INCORRECT") {
- status = "REF_DISAPPROVED";
- } else if (avatar_answer == "INCORRECT") {
- status = "AVATAR_DISAPPROVED";
+ var refAnswer = $('#ref-radio-answers input[type=radio]:checked').val();
+ if (hasSkipped) {
+ status = 'SKIPPED';
+ } else if (refAnswer == 'INCORRECT') {
+ status = 'REF_DISAPPROVED';
+ } else if (avatarAnswer == 'INCORRECT') {
+ status = 'AVATAR_DISAPPROVED';
} else {
- status = "AVATAR_APPROVED";
+ status = 'AVATAR_APPROVED';
}
- _submitAnswer(task, deferred, status, has_skipped);
+ _submitAnswer(task, deferred, status, hasSkipped);
}
function _createAnswer(task, status) {
var answer = {};
- var last_answer = task.info.last_answer;
- var hasLastAnswer = typeof last_answer != "undefined";
+ var lastAnswer = task.info.last_answer;
+ var hasLastAnswer = typeof lastAnswer != 'undefined';
if (hasLastAnswer) {
- answer = last_answer;
+ answer = lastAnswer;
} else {
answer = {
- "number_of_approval" : 0,
- "number_of_avatar_disapproval" : 0,
- "number_of_ref_disapproval" : 0
+ 'number_of_approval' : 0,
+ 'number_of_avatar_disapproval' : 0,
+ 'number_of_ref_disapproval' : 0
};
}
- answer["status"] = status;
- answer["comment_avatar"] = "";
- answer["comment_ref"] = "";
- if (status == "AVATAR_APPROVED") {
- answer["number_of_approval"] = answer.number_of_approval + 1;
- } else if (status == "AVATAR_DISAPPROVED") {
- answer["number_of_avatar_disapproval"] = answer.number_of_avatar_disapproval + 1;
- var comment_avatar = $("#comment-avatar textarea").val();
- if (comment_avatar.trim() != "") {
- answer["comment_avatar"] = comment_avatar;
+ answer['status'] = status;
+ answer['comment_avatar'] = '';
+ answer['comment_ref'] = '';
+ if (status == 'AVATAR_APPROVED') {
+ answer['number_of_approval'] = answer.number_of_approval + 1;
+ } else if (status == 'AVATAR_DISAPPROVED') {
+ answer['number_of_avatar_disapproval'] = answer.number_of_avatar_disapproval + 1;
+ var commentAvatar = $('#comment-avatar textarea').val();
+ if (commentAvatar.trim() != '') {
+ answer['comment_avatar'] = commentAvatar;
}
- } else if (status == "REF_DISAPPROVED") {
- answer["number_of_ref_disapproval"] = answer.number_of_ref_disapproval + 1;
- var comment_ref = $("#comment-ref textarea").val();
- if (comment_ref.trim() != "") {
- answer["comment_ref"] = comment_ref;
+ } else if (status == 'REF_DISAPPROVED') {
+ answer['number_of_ref_disapproval'] = answer.number_of_ref_disapproval + 1;
+ var comment_ref = $('#comment-ref textarea').val();
+ if (comment_ref.trim() != '') {
+ answer['comment_ref'] = comment_ref;
}
}
return answer;
@@ -162,21 +170,21 @@
_enableLoading();
$
.ajax({
- type : "POST",
- url : server_backend_url + "/finish_task",
+ type : 'POST',
+ url : serverBackendUrl + '/finish_task',
data : {
- "task_id" : task.id,
- "project_id" : task.project_id,
- "sign_name" : task.info.sign_name,
- "number_of_approval" : answer.number_of_approval,
- "number_of_avatar_disapproval" : answer.number_of_avatar_disapproval,
- "number_of_ref_disapproval" : answer.number_of_ref_disapproval
+ 'task_id' : task.id,
+ 'project_id' : task.project_id,
+ 'sign_name' : task.info.sign_name,
+ 'number_of_approval' : answer.number_of_approval,
+ 'number_of_avatar_disapproval' : answer.number_of_avatar_disapproval,
+ 'number_of_ref_disapproval' : answer.number_of_ref_disapproval
},
success : function(response) {
pybossa.saveTask(task.id, answer).done(function() {
_disableLoading();
- $("#success").fadeIn(500);
- $("#main-container").hide();
+ $('#success').fadeIn(500);
+ $('#validador-container').hide();
setTimeout(function() {
deferred.resolve();
}, 2000);
@@ -187,12 +195,11 @@
alert(xhr.responseText);
}
});
-
}
- function _submitAnswer(task, deferred, status, has_skipped) {
+ function _submitAnswer(task, deferred, status, hasSkipped) {
var answer = _createAnswer(task, status);
- if (has_skipped) {
+ if (hasSkipped) {
_saveAnswer(task, deferred, answer);
} else {
_finishTask(task, deferred, answer);
@@ -201,8 +208,8 @@
function _saveAnswer(task, deferred, answer) {
pybossa.saveTask(task.id, answer).done(function() {
- $("#success").fadeIn(500);
- $("#main-container").hide();
+ $('#success').fadeIn(500);
+ $('#validador-container').hide();
setTimeout(function() {
deferred.resolve();
}, 2000);
@@ -210,39 +217,49 @@
}
function _loadTaskInfo(task) {
- current_task_id = task.id;
- var sign_name = task.info.sign_name;
- var avatar_vid_link = videos_url + sign_name + "_AVATAR.webm";
- var ref_vid_link = videos_url + sign_name + "_REF.webm";
- $(".sign-label").text(sign_name);
- $("#avatar-video").attr("src", avatar_vid_link);
- $("#ref-video").attr("src", ref_vid_link);
+ currentTaskId = task.id;
+ var signName = task.info.sign_name;
+ var avatarVidLink = videosUrl + signName + '_AVATAR.webm';
+ var refVidLink = videosUrl + signName + '_REF.webm';
+ $('.sign-label').text(signName);
+ $('#avatar-video').attr('src', avatarVidLink);
+ $('#ref-video').attr('src', refVidLink);
+ }
+
+ function _loadMainComponents() {
+ pybossaApiHelper.setup(pybossaEndpoint, projectName);
+ loadHtmlHelper.setup(baseUrl);
+ ranking.setup(baseUrl, pybossaEndpoint, projectName, _getLoggedUser());
}
pybossa.presentTask(function(task, deferred) {
- if (!$.isEmptyObject(task) && current_task_id != task.id) {
+ _loadMainComponents();
+ if (!$.isEmptyObject(task) && currentTaskId != task.id) {
_loadTaskInfo(task);
_setupGUI(task, deferred);
- $("#success").hide();
- $("#main-container").fadeIn(500);
+ $('#success').hide();
+ $('#validador-container').fadeIn(500);
} else {
- $("#main-container").hide();
- $("#finish").fadeIn(500);
+ $('#validador-container').hide();
+ $('#finish').fadeIn(500);
+ ranking.tasksEnded();
}
});
// Private methods
function _run(projectname) {
- pybossa.setEndpoint("/pybossa");
+ pybossa.setEndpoint(pybossaEndpoint);
pybossa.run(projectname);
}
// Public methods
- validador.run = function(serverhost, serverbackend, projectname) {
- base_url = serverhost;
- server_backend_url = serverbackend;
- videos_url = base_url + "/videos/";
- _run(projectname);
+ validador.run = function(serverhost, serverbackend, projname) {
+ baseUrl = serverhost;
+ serverBackendUrl = serverbackend;
+ videosUrl = baseUrl + '/videos/';
+ pybossaEndpoint = '/pybossa';
+ projectName = projname;
+ _run(projectName);
};
}(window.validador = window.validador || {}, jQuery));
\ No newline at end of file
diff --git a/view/assets/templates/ranking/ranking.html b/view/assets/templates/ranking/ranking.html
new file mode 100644
index 0000000..c5ee136
--- /dev/null
+++ b/view/assets/templates/ranking/ranking.html
@@ -0,0 +1,47 @@
+
+
WikiRanking
+
Lorem Ipsum é apenas uma simulação de texto da indústria
+ tipográfica e de impressos, e vem sendo utilizado desde o século XVI.
+
+
+

+
+
+
![]()
+
+
+
+
+
+
+
+
+
+ |
+ # |
+
+ Membro |
+
+ Sinais |
+
+
+
+
+
+
\ No newline at end of file
diff --git a/view/img/correct.png b/view/img/correct.png
deleted file mode 100755
index 3340434..0000000
Binary files a/view/img/correct.png and /dev/null differ
diff --git a/view/img/finish.svg b/view/img/finish.svg
deleted file mode 100755
index f6d4e0c..0000000
--- a/view/img/finish.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
diff --git a/view/img/incorrect.png b/view/img/incorrect.png
deleted file mode 100755
index be2d49f..0000000
Binary files a/view/img/incorrect.png and /dev/null differ
diff --git a/view/img/loading.gif b/view/img/loading.gif
deleted file mode 100755
index 0fcd282..0000000
Binary files a/view/img/loading.gif and /dev/null differ
diff --git a/view/img/skip.svg b/view/img/skip.svg
deleted file mode 100755
index 2d006dc..0000000
--- a/view/img/skip.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
diff --git a/view/img/thumbnail.png b/view/img/thumbnail.png
deleted file mode 100755
index ead10bc..0000000
Binary files a/view/img/thumbnail.png and /dev/null differ
diff --git a/view/template.html b/view/template.html
index 5e04dc5..f839ee2 100755
--- a/view/template.html
+++ b/view/template.html
@@ -1,103 +1,120 @@
+
+
+
+
-
-
- Parabéns! Tarefa concluída.
-
-
-
Parabéns! Você completou todas as
- tarefas disponíveis!
-
ENVIAR COMENTÁRIO SOBRE A ANIMAÇÃO:
- -