diff --git a/app/assets/v2/css/profile.css b/app/assets/v2/css/profile.css
index a7265ca9b4e..cc3fa797831 100644
--- a/app/assets/v2/css/profile.css
+++ b/app/assets/v2/css/profile.css
@@ -2,9 +2,16 @@
min-height: 150px;
}
-.profile-header > .container {
- padding-top: 3.5rem;
- color: #fff;
+.overflow-visible {
+ overflow: visible;
+}
+
+.profile-card {
+ background: white;
+ border-radius: 5px;
+ z-index: 1;
+ position: relative;
+ padding: 2rem;
}
.profile-header__avatar {
@@ -12,14 +19,14 @@
width: 6.75rem;
height: 6.75rem;
border-radius: 50%;
- border: 0.2rem solid #1AB56D;
}
.profile-header__handle {
- padding-top: 1.5rem;
+ padding-top: 0.8rem;
margin-bottom: 0;
- text-transform: uppercase;
line-height: 1;
+ font-weight: 700;
+ font-size: 1.7rem;
}
.profile-header__handle small {
@@ -39,17 +46,17 @@
padding: 0;
}
-.profile-header__links a i {
+.profile-header__links a {
margin-left: 2px;
margin-right: 2px;
font-size: 1.2rem;
transition: all 0.3s;
- color: #FFF;
+ color: #000;
+ text-decoration: none;
}
.profile-header__links a:hover i {
color: #1AB56D;
- transform: scale(1.5) rotate(360deg);
}
.profile-header__links img {
@@ -97,21 +104,31 @@
}
}
+@media (min-width: 388px) {
+ .profile-card {
+ margin-top: -5rem;
+ }
+}
+
.profile-header__stats {
- background-color: transparent;
+ border: none;
}
.profile-header__stats .card-header {
padding: 0.1rem 0.7rem;
- font-weight: bolder;
- color: #0D0764;
- text-transform: uppercase;
+ color: #666;
border-radius: 0;
+ border-bottom: none;
+ font-size: 1.2rem;
+}
+
+.profile-header__stats .card-header b {
+ color: #000;
+ font-size: 1.7rem;
}
.profile-header__stats .card-body {
- font-weight: lighter;
padding: 0.7rem;
}
@@ -141,28 +158,55 @@
margin-top: 0;
}
-.profile-header__stats--contributor {
- border: 0.2rem solid #25E899;
+.profile-header__stats--contributor .card-header {
+ background-color: transparent;
}
-.profile-header__stats--contributor .card-header {
- background-color: #25E899;
+.card-header::after {
+ content: '';
+ position: relative;
+ height: 4px;
+ width: 100%;
+ display: block;
+ border-radius: 6px;
+ animation: grow 1s ease-in-out;
}
-.profile-header__stats--contributor .highlight {
- color: #25E899;
+.animate-verify {
+ animation: verify 0.3s cubic-bezier(0.18, 0.89, 0.32, 1.28);
}
-.profile-header__stats--funder {
- border: 0.2rem solid #FFCE08;
+@keyframes grow {
+ 0% {
+ width: 2%;
+ }
+ 50% {
+ width: 2%;
+ }
+ 100% {
+ width: 100%;
+ }
}
-.profile-header__stats--funder .card-header {
- background-color: #FFCE08;
+@keyframes verify {
+ 0% {
+ transform: scale(1.5, 1.3);
+ }
+ 100% {
+ transform: scale(1);
+ }
+}
+
+.profile-header__stats--contributor .card-header::after {
+ background: #00eb93;
}
-.profile-header__stats--funder .highlight {
- color: #FFCE08;
+.profile-header__stats--funder .card-header::after {
+ background: #FFCE08;
+}
+
+.profile-header__stats--funder .card-header {
+ background-color: transparent;
}
.profile-section-title {
@@ -238,14 +282,19 @@
.profile_details .works_with_list img {
max-width: 30px;
border-radius: 50%;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.10);
}
-.profile-header__stats--contributor .works_with_list img {
- border: 0.1rem solid #25E899;
-}
-
-.profile-header__stats--funder .works_with_list img {
- border: 0.1rem solid #FFCE08;
+.profile_details .works_with_list .plus-img{
+ width: 30px;
+ height: 30px;
+ display: inline-flex;
+ background: #F8F9FA;
+ border-radius: 30px;
+ align-items: center;
+ vertical-align: middle;
+ font-size: 10px;
+ justify-content: center;
}
.no-profile-button {
@@ -256,4 +305,4 @@
.no-profile-textcolor {
color: #666666;
-}
\ No newline at end of file
+}
diff --git a/app/assets/v2/images/badge-verify.svg b/app/assets/v2/images/badge-verify.svg
new file mode 100644
index 00000000000..8a500cd27a6
--- /dev/null
+++ b/app/assets/v2/images/badge-verify.svg
@@ -0,0 +1 @@
+
diff --git a/app/assets/v2/js/pages/profile.js b/app/assets/v2/js/pages/profile.js
index 67194dd6851..65fc0e3c44f 100644
--- a/app/assets/v2/js/pages/profile.js
+++ b/app/assets/v2/js/pages/profile.js
@@ -1,46 +1,4 @@
$(document).ready(function() {
- $('[data-toggle=popover]').popover({
- html: true,
- trigger: 'focus',
- template: '
',
- content: function() {
- var content = $(this).attr('data-popover-content');
-
- return $(content).children('.popover-body').html();
- },
- title: function() {
- var title = $(this).attr('data-popover-content');
-
- return $(title).children('.popover-heading').html();
- }
- });
-
- if (!document.hasPreferredPayoutAddress) {
- $('[data-toggle=popover]').popover('show');
- }
-
- $('body').on('submit', '#form-wallets', function(e) {
- e.preventDefault();
-
- var data = $('#form-wallets').serializeArray();
-
- data.push({'page': 2});
-
- var postWallets = fetchData(
- e.currentTarget.action,
- e.currentTarget.method,
- data
- );
-
- $.when(postWallets).then(function(response) {
- var walletAddress = response.wallets[0];
- var newAddress = new truncate(walletAddress);
-
- $('#preferred-address').text(newAddress.elem);
- $('#preferred-address').prop('title', walletAddress);
- $('#kudos-section').html(response.kudos_html);
- });
- });
$('#kudos-section').on('click keypress', '.flip-card', e => {
if ($(e.target).is('a')) {
diff --git a/app/dashboard/admin.py b/app/dashboard/admin.py
index bfc26089bfa..50d367acd7a 100644
--- a/app/dashboard/admin.py
+++ b/app/dashboard/admin.py
@@ -25,6 +25,7 @@
from .models import (
Activity, BlockedUser, Bounty, BountyFulfillment, BountySyncRequest, CoinRedemption, CoinRedemptionRequest,
Interest, LabsResearch, Profile, SearchHistory, Tip, TokenApproval, Tool, ToolVote, UserAction,
+ UserVerificationModel,
)
@@ -174,3 +175,4 @@ def network_link(self, instance):
admin.site.register(Tool, ToolAdmin)
admin.site.register(ToolVote, ToolVoteAdmin)
admin.site.register(LabsResearch)
+admin.site.register(UserVerificationModel)
diff --git a/app/dashboard/migrations/0015_auto_20190301_1625.py b/app/dashboard/migrations/0015_auto_20190301_1625.py
new file mode 100644
index 00000000000..1e9616bf3a2
--- /dev/null
+++ b/app/dashboard/migrations/0015_auto_20190301_1625.py
@@ -0,0 +1,35 @@
+# Generated by Django 2.1.7 on 2019-03-01 16:25
+
+from django.conf import settings
+import django.contrib.postgres.fields.jsonb
+from django.db import migrations, models
+import django.db.models.deletion
+import economy.models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ('dashboard', '0014_merge_20190221_2246'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='UserVerificationModel',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('created_on', models.DateTimeField(db_index=True, default=economy.models.get_time)),
+ ('modified_on', models.DateTimeField(default=economy.models.get_time)),
+ ('verified', models.BooleanField(default=False, help_text="Select to display the Verified checkmark on the user's profile")),
+ ('speedy_and_responsive', models.BooleanField(default=False)),
+ ('great_communication', models.BooleanField(default=False)),
+ ('bug_free_code', models.BooleanField(default=False)),
+ ('completed_x_bounties', models.BooleanField(default=False)),
+ ('user', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
+ ],
+ options={
+ 'abstract': False,
+ },
+ ),
+ ]
diff --git a/app/dashboard/models.py b/app/dashboard/models.py
index 0713a7853e4..05bd088b3e6 100644
--- a/app/dashboard/models.py
+++ b/app/dashboard/models.py
@@ -1699,6 +1699,31 @@ def __str__(self):
return self.title
+class UserVerificationModel(SuperModel):
+ """Define the checkboxes for user verification."""
+
+ user = models.OneToOneField(User, on_delete=models.SET_NULL, null=True, blank=True)
+ verified = models.BooleanField(
+ default=False,
+ help_text='Select to display the Verified checkmark on the user\'s profile',
+ )
+ speedy_and_responsive = models.BooleanField(
+ default=False,
+ )
+ great_communication = models.BooleanField(
+ default=False,
+ )
+ bug_free_code = models.BooleanField(
+ default=False,
+ )
+ completed_x_bounties = models.BooleanField(
+ default=False,
+ )
+
+ def __str__(self):
+ return f"User: {self.user}; Verified: {self.verified}"
+
+
class ProfileQuerySet(models.QuerySet):
"""Define the Profile QuerySet to be used as the objects manager."""
@@ -1813,6 +1838,11 @@ def get_sent_kudos(self):
return kudos_transfers
+ @property
+ def get_my_verified_check(self):
+ verification = UserVerificationModel.objects.filter(user=self.user).first()
+ return verification
+
@property
def get_profile_referral_code(self):
return base64.urlsafe_b64encode(self.handle.encode()).decode()
diff --git a/app/dashboard/templates/profiles/organization.html b/app/dashboard/templates/profiles/organization.html
index 85f934a800e..d71aaaaf358 100644
--- a/app/dashboard/templates/profiles/organization.html
+++ b/app/dashboard/templates/profiles/organization.html
@@ -14,27 +14,27 @@
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
{% endcomment %}
-{% load i18n static %}
+{% load i18n static avatar_tags %}