Skip to content

Commit f79560e

Browse files
Merge pull request #6039 from gitcoinco/stable
stable -> master
2 parents 45989e3 + c3cb5cd commit f79560e

13 files changed

Lines changed: 184 additions & 39 deletions

File tree

app/app/context.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ def preprocess(request):
153153
'footer_msg': footer_msg,
154154
'INFURA_V3_PROJECT_ID': settings.INFURA_V3_PROJECT_ID,
155155
'email_key': email_key,
156+
'giphy_key': settings.GIPHY_KEY,
156157
'orgs': profile.organizations if profile else [],
157158
'profile_id': profile.id if profile else '',
158159
'hotjar': settings.HOTJAR_CONFIG,

app/app/local.env

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,4 @@ CONTACT_EMAIL=
3636

3737
FEE_ADDRESS=
3838
FEE_ADDRESS_PRIVATE_KEY=
39+
GIPHY_KEY=

app/app/settings.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
SECRET_KEY = env('SECRET_KEY', default='YOUR-SupEr-SecRet-KeY')
5050
ADMINS = (env.tuple('ADMINS', default=('TODO', 'todo@todo.net')))
5151
BASE_DIR = root()
52+
#social integrations
53+
GIPHY_KEY = env('GIPHY_KEY', default='LtaY19ToaBSckiLU4QjW0kV9nIP75NFy')
5254

5355
# Ratelimit
5456
RATELIMIT_ENABLE = env.bool('RATELIMIT_ENABLE', default=True)
@@ -569,7 +571,6 @@
569571
SOCIAL_AUTH_GH_CUSTOM_SECRET = GITHUB_CLIENT_SECRET
570572
SOCIAL_AUTH_GH_CUSTOM_SCOPE = ['read:org', 'public_repo']
571573

572-
573574
SOCIAL_AUTH_PIPELINE = (
574575
'social_core.pipeline.social_auth.social_details', 'social_core.pipeline.social_auth.social_uid',
575576
'social_core.pipeline.social_auth.auth_allowed', 'social_core.pipeline.social_auth.social_user',

app/assets/v2/css/town_square.css

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,8 +383,20 @@ a.offer_container.animate:hover .prize-gift::after {
383383
.offer_container.secret.empty{
384384
display: none;
385385
}
386+
.gif-grid {
387+
display: flex;
388+
width: 300px;
389+
height: 450px;
390+
flex-wrap: wrap;
391+
overflow: scroll;
392+
overflow-x: hidden;
386393

387-
394+
}
395+
.pick-gif {
396+
max-width: 300px;
397+
max-height: 250px;
398+
flex-grow: 1;
399+
}
388400
div.back0,
389401
body.back0 {
390402
background: url('/static/v2/images/quests/backs/0.gif') repeat;

app/assets/v2/js/lib/yall.min.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/assets/v2/js/pages/join_tribe.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,11 @@ joinTribe();
3939
const joinTribeDirect = (elem) => {
4040

4141
if (!document.contxt.github_handle) {
42-
//elem.preventDefault();
4342
_alert('Please login first.', 'error');
4443
return;
4544
}
4645

4746
$(elem).attr('disabled', true);
48-
//elem.preventDefault();
4947
const tribe = $(elem).data('jointribe');
5048
const url = `/tribe/${tribe}/join/`;
5149
const sendJoin = fetchData (url, 'POST', {}, {'X-CSRFToken': $("input[name='csrfmiddlewaretoken']").val()});
@@ -57,7 +55,7 @@ const joinTribeDirect = (elem) => {
5755
}).fail(function(error) {
5856
$(elem).attr('disabled', false);
5957
});
60-
}
58+
};
6159

6260

6361
const tribeLeader = () => {

app/assets/v2/js/pages/townsquare.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,42 @@ $(document).ready(function() {
128128
$('.announce .remove').click(function() {
129129
$(this).parents('.announce').remove();
130130
});
131+
132+
function onIntersection(imageEntites, observer) {
133+
imageEntites.forEach(image => {
134+
if (image.isIntersecting) {
135+
observer.unobserve(image.target);
136+
image.target.src = image.target.dataset.src;
137+
image.target.onload = () => image.target.classList.add('loaded');
138+
}
139+
});
140+
}
141+
const interactSettings = {
142+
root: document.querySelector('.loader-container'),
143+
rootMargin: '0px 200px 200px 200px',
144+
threshold: 0.01
145+
};
146+
147+
function loadImages() {
148+
if ('IntersectionObserver' in window) {
149+
let images = [...document.querySelectorAll("img[loading='lazy']")];
150+
let observer = new IntersectionObserver(onIntersection, interactSettings);
151+
152+
images.forEach(img => {
153+
img.setAttribute('loading', '');
154+
observer.observe(img);
155+
});
156+
} else {
157+
const images = document.querySelectorAll("img[loading='lazy']");
158+
159+
images.forEach(img => {
160+
img.src = img.dataset.src;
161+
img.setAttribute('loading', '');
162+
});
163+
}
164+
165+
window.setTimeout(loadImages, 700);
166+
}
167+
168+
loadImages();
131169
}(jQuery));

app/assets/v2/js/status.js

Lines changed: 60 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,45 @@
11
const url_re = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,10}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/;
22
const youtube_re = /(?:https?:\/\/|\/\/)?(?:www\.|m\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))([\w-]{11})(?![\w-])/;
3+
const giphy_re = /(?:https?:\/\/)?(?:media0\.)?(?:giphy\.com\/media\/)/;
34

45
$(document).ready(function() {
5-
embedded_resource = '';
6+
var embedded_resource = '';
7+
const GIPHY_API_KEY = document.contxt.giphy_key;
8+
69
let button = document.querySelector('#btn_post');
10+
11+
function selectGif(e) {
12+
embedded_resource = $(e.target).data('src');
13+
$('#preview-img').attr('src', embedded_resource);
14+
$('#preview').show();
15+
$('#thumbnail').hide();
16+
}
17+
18+
19+
function injectGiphy(query) {
20+
const endpoint = 'https://api.giphy.com/v1/gifs/search?limit=13&api_key=' + GIPHY_API_KEY + '&offset=0&rating=G&lang=en&q=' + query;
21+
const result = fetchData(endpoint);
22+
23+
$.when(result).then(function(response) {
24+
$('.pick-gif').remove();
25+
26+
for (let i = 0; i < response.data.length; i++) {
27+
let item = response.data[i];
28+
let downsize = item.images.original.webp;
29+
let preview = item.images.fixed_width_downsampled.webp;
30+
31+
$('.gif-grid').append('<img class="pick-gif" src="' + preview + '" data-src="' + downsize + '" alt="' + item.slug + '">');
32+
}
33+
$('.pick-gif').on('click', selectGif);
34+
});
35+
}
36+
37+
$('#search-gif').on('input', function(e) {
38+
e.preventDefault();
39+
const query = e.target.value;
40+
41+
injectGiphy(query);
42+
});
743

844
if (button) {
945
button.addEventListener(
@@ -31,6 +67,11 @@ $(document).ready(function() {
3167
const youtube = e.target.value.match(youtube_re);
3268
const no_lb = e.originalEvent.inputType !== 'insertLineBreak';
3369

70+
// GIF has priority, no other display info allowed
71+
if (typeof embedded_resource === 'string' && embedded_resource.match(giphy_re)) {
72+
return;
73+
}
74+
3475
if (youtube !== null && youtube[1].length === 11 && no_lb) {
3576
let videoId = youtube[1];
3677

@@ -46,6 +87,7 @@ $(document).ready(function() {
4687
$('#thumbnail-img').attr('src', 'https://img.youtube.com/vi/' + videoId + '/default.jpg');
4788
embedded_resource = youtube[0];
4889
$('#thumbnail').show();
90+
$('#preview').hide();
4991
} else {
5092
$('#thumbnail').hide();
5193
$('#thumbnail-desc').text('');
@@ -75,6 +117,7 @@ $(document).ready(function() {
75117

76118
embedded_resource = url;
77119
$('#thumbnail').show();
120+
$('#preview').hide();
78121
} else {
79122
$('#thumbnail').hide();
80123
$('#thumbnail-desc').text('');
@@ -192,18 +235,25 @@ $(document).ready(function() {
192235
const image = $('#thumbnail-img').attr('src');
193236
const youtube = embedded_resource.match(youtube_re);
194237

195-
if (youtube !== null && youtube[1].length === 11) {
238+
if (embedded_resource.match(giphy_re)) {
239+
data.append('resource', 'gif');
240+
data.append('resourceProvider', 'giphy');
241+
data.append('resourceId', embedded_resource);
242+
} else if (youtube !== null && youtube[1].length === 11) {
196243
data.append('resource', 'video');
197244
data.append('resourceProvider', 'youtube');
198245
data.append('resourceId', youtube[1]);
246+
data.append('title', title);
247+
data.append('description', description);
248+
data.append('image', image);
199249
} else {
200250
data.append('resource', 'content');
201251
data.append('resourceProvider', link);
202252
data.append('resourceId', embedded_resource);
253+
data.append('title', title);
254+
data.append('description', description);
255+
data.append('image', image);
203256
}
204-
data.append('title', title);
205-
data.append('description', description);
206-
data.append('image', image);
207257
}
208258

209259
fetch('/api/v0.1/activity', {
@@ -216,7 +266,9 @@ $(document).ready(function() {
216266
$('#thumbnail-title').text('');
217267
$('#thumbnail-provider').text('');
218268
$('#thumbnail-desc').text('');
219-
$('#thumbnail-img').attr('');
269+
$('#thumbnail-img').attr('src', '');
270+
$('#preview').hide();
271+
$('#preview-img').attr('src', '');
220272
embedded_resource = '';
221273

222274
_alert(
@@ -243,6 +295,8 @@ $(document).ready(function() {
243295
})
244296
.catch(err => console.log('Error ', err));
245297
}
298+
299+
injectGiphy('latest');
246300
});
247301
window.addEventListener('DOMContentLoaded', function() {
248302
var button = document.querySelector('#emoji-button');

app/dashboard/export.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -166,17 +166,7 @@ def get_created_at(self, instance):
166166
return instance.created.isoformat()
167167

168168
def get_url(self, instance):
169-
action = self.get_action(instance)
170-
if action in ('bounty', ):
171-
return instance.bounty.get_absolute_url()
172-
173-
if action in ('kudos', ):
174-
return instance.kudos.kudos_token.get_absolute_url()
175-
176-
if action in ('profile', ):
177-
return instance.profile.absolute_url
178-
179-
return ''
169+
return instance.action_url
180170

181171
def get_action(self, instance):
182172
action = ''

app/dashboard/templates/profiles/status_box.html

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,22 @@
2929
</button>
3030
</div>
3131
</div>
32+
<div class="btn-group-toggle text-center text-md-left" style="margin-top: 8px; margin-bottom: 8px">
33+
<div class="btn-group" data-toggle="actions">
34+
<button class="btn btn-radio font-smaller-4 dropdown-toggle" data-toggle="dropdown" id="btn_gif" aria-haspopup="true" aria-expanded="false">
35+
<i class="fas fa-gift mr-2"></i> GIF
36+
</button>
37+
<div class="dropdown-menu">
38+
<form class="px-4 py-3">
39+
<div class="form-group">
40+
<label for="search-gif">Search GIF</label>
41+
<input type="text" class="form-control" id="search-gif" placeholder="Search">
42+
</div>
43+
</form>
44+
<div id="list-gif" class="gif-grid"></div>
45+
</div>
46+
</div>
47+
</div>
3248
<div id="thumbnail" class="mt-1 mb-2" style="display: none; top: initial; left: initial; background-color: #FAFAFA">
3349
<div class="row" style="display: flex; justify-content: center; align-items: center; ">
3450
<div class="col ml-1 col-sm-3 col-md-2 text-center">
@@ -41,5 +57,10 @@
4157
</div>
4258
</div>
4359
</div>
60+
<div id="preview" class="mt-1 mb-2" style="display: none; top: initial; left: initial;">
61+
<div class="row ml-2" style=" ">
62+
<img id="preview-img" style="max-width: 80%; max-height: 350px;" src="">
63+
</div>
64+
</div>
4465
</div>
4566
<input type="hidden" name="what" value="{{what}}:{{whatid}}">

0 commit comments

Comments
 (0)