User:Docmoates/Social: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 95: | Line 95: | ||
<script> | <script> | ||
$(function(){ | |||
mw.loader.using(['mediawiki.api']).then(function(){ | mw.loader.using(['mediawiki.api']).then(function(){ | ||
var user=mw.config.get('wgUserName')||'Guest'; | var user=mw.config.get('wgUserName')||'Guest'; | ||
| Line 100: | Line 101: | ||
var pendingImg=''; | var pendingImg=''; | ||
var api=new mw.Api(); | var api=new mw.Api(); | ||
function init(n){return n.split(/[\s_]+/).map(function(w){return w[0]||'';}).join('').substring(0,2).toUpperCase()||'?';} | function init(n){return n.split(/[\s_]+/).map(function(w){return w[0]||'';}).join('').substring(0,2).toUpperCase()||'?';} | ||
| Line 108: | Line 108: | ||
function setAv(){ | function setAv(){ | ||
var el=document.getElementById('composer-avatar'); | var el=document.getElementById('composer-avatar'); | ||
if(!el)return; | |||
el.innerHTML=photo?'<img src="'+photo+'">':init(user); | el.innerHTML=photo?'<img src="'+photo+'">':init(user); | ||
el.innerHTML+='<div class="sf-avatar-edit">Edit</div>'; | el.innerHTML+='<div class="sf-avatar-edit">Edit</div>'; | ||
} | } | ||
setAv(); | setAv(); | ||
document.getElementById('post-content').placeholder='What is on your mind, '+user+'?'; | var postContent=document.getElementById('post-content'); | ||
if(postContent)postContent.placeholder='What is on your mind, '+user+'?'; | |||
$('#composer-avatar').on('click',function(){ | |||
$('#profile-url-input').val(photo); | |||
$('#profile-modal').addClass('active'); | |||
}; | }); | ||
$('#profile-cancel-btn').on('click',function(){$('#profile-modal').removeClass('active');}); | |||
$('#profile-save-btn').on('click',function(){ | |||
photo= | photo=$('#profile-url-input').val().trim(); | ||
localStorage.setItem('sf_photo_'+user,photo); | localStorage.setItem('sf_photo_'+user,photo); | ||
setAv(); | setAv(); | ||
$('#profile-modal').removeClass('active'); | |||
}; | }); | ||
$('#add-image-btn').on('click',function(){ | |||
var u=prompt('Enter image URL:'); | var u=prompt('Enter image URL:'); | ||
if(u){pendingImg=u; | if(u){pendingImg=u;$('#preview-img').attr('src',u);$('#image-preview').show();} | ||
}; | }); | ||
$('#remove-image-btn').on('click',function(){pendingImg='';$('#image-preview').hide();}); | |||
$('#post-btn').on('click',function(){ | |||
var c= | var c=$('#post-content').val().trim(); | ||
if(!(c||pendingImg)){alert('Write something or add image');return;} | if(!(c||pendingImg)){alert('Write something or add image');return;} | ||
var btn=this;btn.disabled | var btn=$(this);btn.prop('disabled',true).text('Posting...'); | ||
var p={action:'socialfeed',sfaction:'createpost',content:c||'(photo)'}; | var p={action:'socialfeed',sfaction:'createpost',content:c||'(photo)'}; | ||
if(pendingImg)p.image_url=pendingImg; | if(pendingImg)p.image_url=pendingImg; | ||
api.postWithToken('csrf',p).done(function(){ | api.postWithToken('csrf',p).done(function(){ | ||
$('#post-content').val(''); | |||
pendingImg=''; | pendingImg='';$('#image-preview').hide(); | ||
btn.disabled | btn.prop('disabled',false).text('Post'); | ||
load(); | load(); | ||
}).fail(function(code,data){var msg=code;if(data){if(data.error){msg=data.error.info;}}alert('Error: '+msg);btn.disabled | }).fail(function(code,data){var msg=code;if(data){if(data.error){msg=data.error.info;}}alert('Error: '+msg);btn.prop('disabled',false).text('Post');}); | ||
}; | }); | ||
function load(){ | function load(){ | ||
api.get({action:'socialfeed',sfaction:'getposts',limit:20}).done(function(d){render(d.socialfeed.posts||[]);}).fail(function(){ | api.get({action:'socialfeed',sfaction:'getposts',limit:20}).done(function(d){render(d.socialfeed.posts||[]);}).fail(function(){ | ||
$('#timeline-container').html('<div class="sf-empty"><div class="sf-empty-icon">😕</div><div class="sf-empty-text">Error loading</div></div>'); | |||
}); | }); | ||
} | } | ||
function render(posts){ | function render(posts){ | ||
var c= | var c=$('#timeline-container'); | ||
if(!posts.length){c. | if(!posts.length){c.html('<div class="sf-empty"><div class="sf-empty-icon">📝</div><div class="sf-empty-text">No posts yet</div><div class="sf-empty-sub">Be the first to share!</div></div>');return;} | ||
var h=''; | var h=''; | ||
posts.forEach(function(p){ | posts.forEach(function(p){ | ||
| Line 171: | Line 173: | ||
h+='<div class="sf-comments" id="cmt-'+p.id+'" style="display:none"></div></div>'; | h+='<div class="sf-comments" id="cmt-'+p.id+'" style="display:none"></div></div>'; | ||
}); | }); | ||
c. | c.html(h); | ||
c. | c.find('[data-del]').on('click',function(){var id=$(this).data('del');if(confirm('Delete?'))api.postWithToken('csrf',{action:'socialfeed',sfaction:'deletepost',post_id:id}).done(load);}); | ||
c. | c.find('[data-like]').on('click',function(){var id=$(this).data('like');api.postWithToken('csrf',{action:'socialfeed',sfaction:'react',post_id:id,reaction_type:'like'}).done(load);}); | ||
c. | c.find('[data-cmt]').on('click',function(){var id=$(this).data('cmt');var box=$('#cmt-'+id);if(box.css('display')==='none'){box.show();loadCmt(id);}else{box.hide();}}); | ||
} | } | ||
function loadCmt(id){ | function loadCmt(id){ | ||
var box= | var box=$('#cmt-'+id); | ||
api.get({action:'socialfeed',sfaction:'getcomments',post_id:id}).done(function(d){ | api.get({action:'socialfeed',sfaction:'getcomments',post_id:id}).done(function(d){ | ||
var cmts=d.socialfeed.comments||[]; | var cmts=d.socialfeed.comments||[]; | ||
| Line 185: | Line 187: | ||
var myPic=photo?'<img src="'+photo+'">':init(user); | var myPic=photo?'<img src="'+photo+'">':init(user); | ||
h+='<div class="sf-add-comment"><div class="sf-avatar sf-avatar-small">'+myPic+'</div><input class="sf-comment-input" id="cinput-'+id+'" placeholder="Write a comment..."></div>'; | h+='<div class="sf-add-comment"><div class="sf-avatar sf-avatar-small">'+myPic+'</div><input class="sf-comment-input" id="cinput-'+id+'" placeholder="Write a comment..."></div>'; | ||
box. | box.html(h); | ||
$('#cinput-'+id).on('keypress',function(e){if(e.key==='Enter'){var v=$(this).val().trim();if(v){$(this).val('');api.postWithToken('csrf',{action:'socialfeed',sfaction:'comment',post_id:id,content:v}).done(function(){loadCmt(id);load();});}}}); | |||
}); | }); | ||
} | } | ||
load(); | load(); | ||
}); | |||
}); | }); | ||
</script> | </script> | ||
</div> | </div> | ||
</html> | </html> | ||
Revision as of 02:05, 3 February 2026
Upload to wiki first, then paste URL