<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.xmethod.net/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-SocialFeed.js</id>
	<title>MediaWiki:Gadget-SocialFeed.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.xmethod.net/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-SocialFeed.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.xmethod.net/index.php?title=MediaWiki:Gadget-SocialFeed.js&amp;action=history"/>
	<updated>2026-05-01T21:09:57Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.4</generator>
	<entry>
		<id>https://wiki.xmethod.net/index.php?title=MediaWiki:Gadget-SocialFeed.js&amp;diff=3867&amp;oldid=prev</id>
		<title>Docmoates at 15:30, 4 February 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.xmethod.net/index.php?title=MediaWiki:Gadget-SocialFeed.js&amp;diff=3867&amp;oldid=prev"/>
		<updated>2026-02-04T15:30:18Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.xmethod.net/index.php?title=MediaWiki:Gadget-SocialFeed.js&amp;amp;diff=3867&amp;amp;oldid=3861&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Docmoates</name></author>
	</entry>
	<entry>
		<id>https://wiki.xmethod.net/index.php?title=MediaWiki:Gadget-SocialFeed.js&amp;diff=3861&amp;oldid=prev</id>
		<title>Docmoates at 14:53, 4 February 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.xmethod.net/index.php?title=MediaWiki:Gadget-SocialFeed.js&amp;diff=3861&amp;oldid=prev"/>
		<updated>2026-02-04T14:53:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.xmethod.net/index.php?title=MediaWiki:Gadget-SocialFeed.js&amp;amp;diff=3861&amp;amp;oldid=3854&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Docmoates</name></author>
	</entry>
	<entry>
		<id>https://wiki.xmethod.net/index.php?title=MediaWiki:Gadget-SocialFeed.js&amp;diff=3854&amp;oldid=prev</id>
		<title>Docmoates at 14:36, 4 February 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.xmethod.net/index.php?title=MediaWiki:Gadget-SocialFeed.js&amp;diff=3854&amp;oldid=prev"/>
		<updated>2026-02-04T14:36:34Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.xmethod.net/index.php?title=MediaWiki:Gadget-SocialFeed.js&amp;amp;diff=3854&amp;amp;oldid=3832&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Docmoates</name></author>
	</entry>
	<entry>
		<id>https://wiki.xmethod.net/index.php?title=MediaWiki:Gadget-SocialFeed.js&amp;diff=3832&amp;oldid=prev</id>
		<title>Docmoates at 11:37, 3 February 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.xmethod.net/index.php?title=MediaWiki:Gadget-SocialFeed.js&amp;diff=3832&amp;oldid=prev"/>
		<updated>2026-02-03T11:37:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * SocialFeed Gadget - Instagram-style social media page&lt;br /&gt;
 * Only runs on User:Docmoates/Social page&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
&amp;#039;use strict&amp;#039;;&lt;br /&gt;
if (mw.config.get(&amp;#039;wgPageName&amp;#039;) !== &amp;#039;User:Docmoates/Social&amp;#039;) return;&lt;br /&gt;
&lt;br /&gt;
mw.loader.using([&amp;#039;mediawiki.api&amp;#039;, &amp;#039;mediawiki.util&amp;#039;]).then(function() {&lt;br /&gt;
var $=jQuery,api=new mw.Api(),apiUrl=mw.util.wikiScript(&amp;#039;api&amp;#039;),user=mw.config.get(&amp;#039;wgUserName&amp;#039;)||&amp;#039;Guest&amp;#039;;&lt;br /&gt;
var ud={photo:localStorage.getItem(&amp;#039;sf_photo_&amp;#039;+user)||&amp;#039;&amp;#039;,cover:localStorage.getItem(&amp;#039;sf_cover_&amp;#039;+user)||&amp;#039;&amp;#039;,bio:localStorage.getItem(&amp;#039;sf_bio_&amp;#039;+user)||&amp;#039;&amp;#039;,name:localStorage.getItem(&amp;#039;sf_name_&amp;#039;+user)||user};&lt;br /&gt;
var pp={image:&amp;#039;&amp;#039;,video:&amp;#039;&amp;#039;,location:&amp;#039;&amp;#039;},uf={};&lt;br /&gt;
&lt;br /&gt;
function gi(n){return(n||&amp;#039;?&amp;#039;).split(/[\s_]+/).map(function(w){return(w[0]||&amp;#039;&amp;#039;).toUpperCase();}).join(&amp;#039;&amp;#039;).substring(0,2)||&amp;#039;?&amp;#039;;}&lt;br /&gt;
function esc(t){var d=document.createElement(&amp;#039;div&amp;#039;);d.textContent=t;return d.innerHTML;}&lt;br /&gt;
function ago(ds){var s=Math.floor((Date.now()-new Date(ds))/1000);if(s&amp;lt;60)return&amp;#039;Just now&amp;#039;;var m=Math.floor(s/60);if(m&amp;lt;60)return m+&amp;#039;m&amp;#039;;var h=Math.floor(m/60);if(h&amp;lt;24)return h+&amp;#039;h&amp;#039;;return Math.floor(h/24)+&amp;#039;d&amp;#039;;}&lt;br /&gt;
function av(pic,name,sz){if(pic)return&amp;#039;&amp;lt;img src=&amp;quot;&amp;#039;+esc(pic)+&amp;#039;&amp;quot;&amp;gt;&amp;#039;;var c=sz===&amp;#039;s&amp;#039;?&amp;#039;sa-comment-avatar-placeholder&amp;#039;:sz===&amp;#039;p&amp;#039;?&amp;#039;sa-post-avatar-placeholder&amp;#039;:sz===&amp;#039;c&amp;#039;?&amp;#039;sa-composer-avatar-placeholder&amp;#039;:&amp;#039;sa-profile-pic-placeholder&amp;#039;;return&amp;#039;&amp;lt;div class=&amp;quot;&amp;#039;+c+&amp;#039;&amp;quot;&amp;gt;&amp;#039;+gi(name)+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;;}&lt;br /&gt;
function om(id){$(&amp;#039;#&amp;#039;+id).addClass(&amp;#039;open&amp;#039;);}&lt;br /&gt;
function cm(id){$(&amp;#039;#&amp;#039;+id).removeClass(&amp;#039;open&amp;#039;);}&lt;br /&gt;
&lt;br /&gt;
function upload(file,pre,prog){&lt;br /&gt;
return api.getToken(&amp;#039;csrf&amp;#039;).then(function(tk){&lt;br /&gt;
var ext=file.name.split(&amp;#039;.&amp;#039;).pop()||&amp;#039;jpg&amp;#039;,fn=pre+&amp;#039;_&amp;#039;+user+&amp;#039;_&amp;#039;+Date.now()+&amp;#039;.&amp;#039;+ext,fd=new FormData();&lt;br /&gt;
fd.append(&amp;#039;action&amp;#039;,&amp;#039;upload&amp;#039;);fd.append(&amp;#039;filename&amp;#039;,fn);fd.append(&amp;#039;file&amp;#039;,file);fd.append(&amp;#039;token&amp;#039;,tk);fd.append(&amp;#039;format&amp;#039;,&amp;#039;json&amp;#039;);fd.append(&amp;#039;ignorewarnings&amp;#039;,&amp;#039;1&amp;#039;);&lt;br /&gt;
return $.ajax({url:apiUrl,type:&amp;#039;POST&amp;#039;,data:fd,processData:false,contentType:false,xhr:function(){var x=$.ajaxSettings.xhr();if(x.upload&amp;amp;&amp;amp;prog)x.upload.addEventListener(&amp;#039;progress&amp;#039;,function(e){if(e.lengthComputable)prog(Math.round(e.loaded/e.total*100));});return x;}});&lt;br /&gt;
}).then(function(r){if(r.upload&amp;amp;&amp;amp;r.upload.imageinfo)return r.upload.imageinfo.url;throw new Error(r.error?r.error.info:&amp;#039;Upload failed&amp;#039;);});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function build(){&lt;br /&gt;
var h=&amp;#039;&amp;lt;div class=&amp;quot;sa-profile-header&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-cover&amp;quot; id=&amp;quot;cover-area&amp;quot;&amp;gt;&amp;#039;+(ud.cover?&amp;#039;&amp;lt;img src=&amp;quot;&amp;#039;+esc(ud.cover)+&amp;#039;&amp;quot;&amp;gt;&amp;#039;:&amp;#039;&amp;#039;)+&amp;#039;&amp;lt;button class=&amp;quot;sa-cover-edit&amp;quot; id=&amp;quot;edit-cover-btn&amp;quot;&amp;gt;📷 Edit Cover&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-profile-info&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-profile-pic&amp;quot; id=&amp;quot;profile-pic&amp;quot;&amp;gt;&amp;#039;+av(ud.photo,user,&amp;#039;&amp;#039;)+&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-profile-details&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-profile-top&amp;quot;&amp;gt;&amp;lt;h1 class=&amp;quot;sa-username&amp;quot; id=&amp;quot;display-name&amp;quot;&amp;gt;&amp;#039;+esc(ud.name)+&amp;#039;&amp;lt;/h1&amp;gt;&amp;lt;button class=&amp;quot;sa-edit-btn&amp;quot; id=&amp;quot;edit-profile-btn&amp;quot;&amp;gt;Edit Profile&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-stats&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-stat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-stat-num&amp;quot; id=&amp;quot;post-count&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-stat-label&amp;quot;&amp;gt;posts&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-stat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-stat-num&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-stat-label&amp;quot;&amp;gt;followers&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-stat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-stat-num&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-stat-label&amp;quot;&amp;gt;following&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-bio&amp;quot; id=&amp;quot;bio-display&amp;quot;&amp;gt;&amp;#039;+(ud.bio?&amp;#039;&amp;lt;div class=&amp;quot;sa-bio-name&amp;quot;&amp;gt;&amp;#039;+esc(ud.name)+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;+esc(ud.bio).replace(/\n/g,&amp;#039;&amp;lt;br&amp;gt;&amp;#039;):&amp;#039;Click Edit Profile to add a bio&amp;#039;)+&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
h+=&amp;#039;&amp;lt;div class=&amp;quot;sa-main&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-stories&amp;quot; id=&amp;quot;stories-container&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-composer&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-composer-top&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-composer-avatar&amp;quot; id=&amp;quot;composer-avatar&amp;quot;&amp;gt;&amp;#039;+av(ud.photo,user,&amp;#039;c&amp;#039;)+&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;textarea class=&amp;quot;sa-composer-input&amp;quot; id=&amp;quot;post-input&amp;quot; placeholder=&amp;quot;What\&amp;#039;s on your mind?&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-composer-preview&amp;quot; id=&amp;quot;post-preview&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-composer-preview-inner&amp;quot;&amp;gt;&amp;lt;button class=&amp;quot;sa-composer-preview-remove&amp;quot; id=&amp;quot;remove-media&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-composer-location&amp;quot; id=&amp;quot;post-location&amp;quot;&amp;gt;📍 &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;button id=&amp;quot;remove-location&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-composer-actions&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-composer-buttons&amp;quot; style=&amp;quot;position:relative&amp;quot;&amp;gt;&amp;lt;button class=&amp;quot;sa-icon-btn&amp;quot; id=&amp;quot;btn-add-photo&amp;quot;&amp;gt;🖼️&amp;lt;/button&amp;gt;&amp;lt;button class=&amp;quot;sa-icon-btn&amp;quot; id=&amp;quot;btn-add-video&amp;quot;&amp;gt;🎬&amp;lt;/button&amp;gt;&amp;lt;button class=&amp;quot;sa-icon-btn&amp;quot; id=&amp;quot;btn-add-location&amp;quot;&amp;gt;📍&amp;lt;/button&amp;gt;&amp;lt;button class=&amp;quot;sa-icon-btn&amp;quot; id=&amp;quot;btn-add-emoji&amp;quot;&amp;gt;😊&amp;lt;/button&amp;gt;&amp;lt;div class=&amp;quot;sa-emoji-picker&amp;quot; id=&amp;quot;emoji-picker&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;button class=&amp;quot;sa-post-btn&amp;quot; id=&amp;quot;btn-submit-post&amp;quot; disabled&amp;gt;Post&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-feed&amp;quot; id=&amp;quot;feed-container&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
// Modals&lt;br /&gt;
h+=&amp;#039;&amp;lt;div class=&amp;quot;sa-modal&amp;quot; id=&amp;quot;modal-edit-profile&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-header&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;sa-modal-title&amp;quot;&amp;gt;Edit Profile&amp;lt;/span&amp;gt;&amp;lt;button class=&amp;quot;sa-modal-close&amp;quot; data-close=&amp;quot;modal-edit-profile&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-body&amp;quot;&amp;gt;&amp;lt;label style=&amp;quot;font-weight:600;display:block;margin-bottom:8px&amp;quot;&amp;gt;Display Name&amp;lt;/label&amp;gt;&amp;lt;input class=&amp;quot;sa-input&amp;quot; id=&amp;quot;input-display-name&amp;quot; value=&amp;quot;&amp;#039;+esc(ud.name)+&amp;#039;&amp;quot;&amp;gt;&amp;lt;label style=&amp;quot;font-weight:600;display:block;margin-bottom:8px&amp;quot;&amp;gt;Bio&amp;lt;/label&amp;gt;&amp;lt;textarea class=&amp;quot;sa-textarea&amp;quot; id=&amp;quot;input-bio&amp;quot; placeholder=&amp;quot;Tell people about yourself...&amp;quot;&amp;gt;&amp;#039;+esc(ud.bio)+&amp;#039;&amp;lt;/textarea&amp;gt;&amp;lt;div class=&amp;quot;sa-btn-row&amp;quot;&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-secondary&amp;quot; data-close=&amp;quot;modal-edit-profile&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-primary&amp;quot; id=&amp;quot;save-profile&amp;quot;&amp;gt;Save&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
h+=&amp;#039;&amp;lt;div class=&amp;quot;sa-modal&amp;quot; id=&amp;quot;modal-profile-pic&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-header&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;sa-modal-title&amp;quot;&amp;gt;Profile Picture&amp;lt;/span&amp;gt;&amp;lt;button class=&amp;quot;sa-modal-close&amp;quot; data-close=&amp;quot;modal-profile-pic&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tabs&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-tab active&amp;quot; data-panel=&amp;quot;panel-pic-upload&amp;quot;&amp;gt;Upload&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab&amp;quot; data-panel=&amp;quot;panel-pic-url&amp;quot;&amp;gt;URL&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab-panel active&amp;quot; id=&amp;quot;panel-pic-upload&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-zone&amp;quot; id=&amp;quot;zone-profile-pic&amp;quot;&amp;gt;&amp;lt;input type=&amp;quot;file&amp;quot; accept=&amp;quot;image/*&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-icon&amp;quot;&amp;gt;📷&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-text&amp;quot;&amp;gt;Drag photo here or &amp;lt;span&amp;gt;browse&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-progress&amp;quot; id=&amp;quot;progress-profile-pic&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-progress-bar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img class=&amp;quot;sa-preview-img&amp;quot; id=&amp;quot;preview-profile-pic&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab-panel&amp;quot; id=&amp;quot;panel-pic-url&amp;quot;&amp;gt;&amp;lt;input class=&amp;quot;sa-input&amp;quot; id=&amp;quot;input-pic-url&amp;quot; placeholder=&amp;quot;Paste image URL...&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;sa-preview-img&amp;quot; id=&amp;quot;preview-pic-url&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-btn-row&amp;quot; style=&amp;quot;padding:0 20px 20px&amp;quot;&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-secondary&amp;quot; data-close=&amp;quot;modal-profile-pic&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-primary&amp;quot; id=&amp;quot;save-profile-pic&amp;quot;&amp;gt;Save&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
h+=&amp;#039;&amp;lt;div class=&amp;quot;sa-modal&amp;quot; id=&amp;quot;modal-cover&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-header&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;sa-modal-title&amp;quot;&amp;gt;Cover Photo&amp;lt;/span&amp;gt;&amp;lt;button class=&amp;quot;sa-modal-close&amp;quot; data-close=&amp;quot;modal-cover&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tabs&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-tab active&amp;quot; data-panel=&amp;quot;panel-cover-upload&amp;quot;&amp;gt;Upload&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab&amp;quot; data-panel=&amp;quot;panel-cover-url&amp;quot;&amp;gt;URL&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab-panel active&amp;quot; id=&amp;quot;panel-cover-upload&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-zone&amp;quot; id=&amp;quot;zone-cover&amp;quot;&amp;gt;&amp;lt;input type=&amp;quot;file&amp;quot; accept=&amp;quot;image/*&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-icon&amp;quot;&amp;gt;🖼️&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-text&amp;quot;&amp;gt;Drag photo here or &amp;lt;span&amp;gt;browse&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-progress&amp;quot; id=&amp;quot;progress-cover&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-progress-bar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img class=&amp;quot;sa-preview-img&amp;quot; id=&amp;quot;preview-cover&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab-panel&amp;quot; id=&amp;quot;panel-cover-url&amp;quot;&amp;gt;&amp;lt;input class=&amp;quot;sa-input&amp;quot; id=&amp;quot;input-cover-url&amp;quot; placeholder=&amp;quot;Paste image URL...&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;sa-preview-img&amp;quot; id=&amp;quot;preview-cover-url&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-btn-row&amp;quot; style=&amp;quot;padding:0 20px 20px&amp;quot;&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-secondary&amp;quot; data-close=&amp;quot;modal-cover&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-primary&amp;quot; id=&amp;quot;save-cover&amp;quot;&amp;gt;Save&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
h+=&amp;#039;&amp;lt;div class=&amp;quot;sa-modal&amp;quot; id=&amp;quot;modal-photo&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-header&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;sa-modal-title&amp;quot;&amp;gt;Add Photo&amp;lt;/span&amp;gt;&amp;lt;button class=&amp;quot;sa-modal-close&amp;quot; data-close=&amp;quot;modal-photo&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tabs&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-tab active&amp;quot; data-panel=&amp;quot;panel-photo-upload&amp;quot;&amp;gt;Upload&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab&amp;quot; data-panel=&amp;quot;panel-photo-url&amp;quot;&amp;gt;URL&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab-panel active&amp;quot; id=&amp;quot;panel-photo-upload&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-zone&amp;quot; id=&amp;quot;zone-photo&amp;quot;&amp;gt;&amp;lt;input type=&amp;quot;file&amp;quot; accept=&amp;quot;image/*&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-icon&amp;quot;&amp;gt;📤&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-text&amp;quot;&amp;gt;Drag photo here or &amp;lt;span&amp;gt;browse&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-progress&amp;quot; id=&amp;quot;progress-photo&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-progress-bar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img class=&amp;quot;sa-preview-img&amp;quot; id=&amp;quot;preview-photo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab-panel&amp;quot; id=&amp;quot;panel-photo-url&amp;quot;&amp;gt;&amp;lt;input class=&amp;quot;sa-input&amp;quot; id=&amp;quot;input-photo-url&amp;quot; placeholder=&amp;quot;Paste image URL...&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;sa-preview-img&amp;quot; id=&amp;quot;preview-photo-url&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-btn-row&amp;quot; style=&amp;quot;padding:0 20px 20px&amp;quot;&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-secondary&amp;quot; data-close=&amp;quot;modal-photo&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-primary&amp;quot; id=&amp;quot;add-photo&amp;quot;&amp;gt;Add Photo&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
h+=&amp;#039;&amp;lt;div class=&amp;quot;sa-modal&amp;quot; id=&amp;quot;modal-video&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-header&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;sa-modal-title&amp;quot;&amp;gt;Add Video&amp;lt;/span&amp;gt;&amp;lt;button class=&amp;quot;sa-modal-close&amp;quot; data-close=&amp;quot;modal-video&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tabs&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-tab active&amp;quot; data-panel=&amp;quot;panel-video-upload&amp;quot;&amp;gt;Upload&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab&amp;quot; data-panel=&amp;quot;panel-video-url&amp;quot;&amp;gt;URL&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab-panel active&amp;quot; id=&amp;quot;panel-video-upload&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-zone&amp;quot; id=&amp;quot;zone-video&amp;quot;&amp;gt;&amp;lt;input type=&amp;quot;file&amp;quot; accept=&amp;quot;video/*&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-icon&amp;quot;&amp;gt;🎬&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-text&amp;quot;&amp;gt;Drag video here or &amp;lt;span&amp;gt;browse&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-progress&amp;quot; id=&amp;quot;progress-video&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-progress-bar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;video class=&amp;quot;sa-preview-img&amp;quot; id=&amp;quot;preview-video&amp;quot; controls style=&amp;quot;display:none&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab-panel&amp;quot; id=&amp;quot;panel-video-url&amp;quot;&amp;gt;&amp;lt;input class=&amp;quot;sa-input&amp;quot; id=&amp;quot;input-video-url&amp;quot; placeholder=&amp;quot;YouTube, Vimeo, or direct video URL...&amp;quot;&amp;gt;&amp;lt;p style=&amp;quot;color:#8e8e8e;font-size:12px&amp;quot;&amp;gt;Supports YouTube, Vimeo, and direct video links&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-btn-row&amp;quot; style=&amp;quot;padding:0 20px 20px&amp;quot;&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-secondary&amp;quot; data-close=&amp;quot;modal-video&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-primary&amp;quot; id=&amp;quot;add-video&amp;quot;&amp;gt;Add Video&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
h+=&amp;#039;&amp;lt;div class=&amp;quot;sa-modal&amp;quot; id=&amp;quot;modal-location&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-header&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;sa-modal-title&amp;quot;&amp;gt;Add Location&amp;lt;/span&amp;gt;&amp;lt;button class=&amp;quot;sa-modal-close&amp;quot; data-close=&amp;quot;modal-location&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-body&amp;quot;&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-primary&amp;quot; id=&amp;quot;detect-location&amp;quot; style=&amp;quot;width:100%;margin-bottom:16px&amp;quot;&amp;gt;📍 Use Current Location&amp;lt;/button&amp;gt;&amp;lt;div style=&amp;quot;text-align:center;color:#8e8e8e;margin-bottom:16px&amp;quot;&amp;gt;— or —&amp;lt;/div&amp;gt;&amp;lt;input class=&amp;quot;sa-input&amp;quot; id=&amp;quot;input-location&amp;quot; placeholder=&amp;quot;Enter location manually...&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-btn-row&amp;quot;&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-secondary&amp;quot; data-close=&amp;quot;modal-location&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-primary&amp;quot; id=&amp;quot;add-location&amp;quot;&amp;gt;Add&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
h+=&amp;#039;&amp;lt;div class=&amp;quot;sa-modal&amp;quot; id=&amp;quot;modal-story&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-modal-header&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;sa-modal-title&amp;quot;&amp;gt;Add to Story&amp;lt;/span&amp;gt;&amp;lt;button class=&amp;quot;sa-modal-close&amp;quot; data-close=&amp;quot;modal-story&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tabs&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-tab active&amp;quot; data-panel=&amp;quot;panel-story-upload&amp;quot;&amp;gt;Upload&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab&amp;quot; data-panel=&amp;quot;panel-story-url&amp;quot;&amp;gt;URL&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab-panel active&amp;quot; id=&amp;quot;panel-story-upload&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-zone&amp;quot; id=&amp;quot;zone-story&amp;quot;&amp;gt;&amp;lt;input type=&amp;quot;file&amp;quot; accept=&amp;quot;image/*&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-icon&amp;quot;&amp;gt;📷&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-upload-text&amp;quot;&amp;gt;Drag photo here or &amp;lt;span&amp;gt;browse&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-progress&amp;quot; id=&amp;quot;progress-story&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-progress-bar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img class=&amp;quot;sa-preview-img&amp;quot; id=&amp;quot;preview-story&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-tab-panel&amp;quot; id=&amp;quot;panel-story-url&amp;quot;&amp;gt;&amp;lt;input class=&amp;quot;sa-input&amp;quot; id=&amp;quot;input-story-url&amp;quot; placeholder=&amp;quot;Paste image URL...&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;sa-preview-img&amp;quot; id=&amp;quot;preview-story-url&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-btn-row&amp;quot; style=&amp;quot;padding:0 20px 20px&amp;quot;&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-secondary&amp;quot; data-close=&amp;quot;modal-story&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&amp;lt;button class=&amp;quot;sa-btn sa-btn-primary&amp;quot; id=&amp;quot;add-story&amp;quot;&amp;gt;Share to Story&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
h+=&amp;#039;&amp;lt;div class=&amp;quot;sa-story-viewer&amp;quot; id=&amp;quot;story-viewer&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-story-viewer-content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-story-viewer-progress&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-story-viewer-progress-bar&amp;quot; id=&amp;quot;sv-prog&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;button class=&amp;quot;sa-story-viewer-close&amp;quot; id=&amp;quot;close-story-viewer&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&amp;lt;div class=&amp;quot;sa-story-viewer-header&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-story-viewer-avatar&amp;quot; id=&amp;quot;story-viewer-avatar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-story-viewer-name&amp;quot; id=&amp;quot;story-viewer-name&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img id=&amp;quot;story-viewer-image&amp;quot; src=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$(&amp;#039;#social-app&amp;#039;).html(h);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function events(){&lt;br /&gt;
var $a=$(&amp;#039;#social-app&amp;#039;);&lt;br /&gt;
$a.on(&amp;#039;click&amp;#039;,&amp;#039;[data-close]&amp;#039;,function(){cm($(this).data(&amp;#039;close&amp;#039;));});&lt;br /&gt;
$a.on(&amp;#039;click&amp;#039;,&amp;#039;.sa-modal&amp;#039;,function(e){if($(e.target).hasClass(&amp;#039;sa-modal&amp;#039;))cm(this.id);});&lt;br /&gt;
$a.on(&amp;#039;click&amp;#039;,&amp;#039;.sa-tab&amp;#039;,function(){var $t=$(this),$p=$(&amp;#039;#&amp;#039;+$t.data(&amp;#039;panel&amp;#039;));$t.addClass(&amp;#039;active&amp;#039;).siblings().removeClass(&amp;#039;active&amp;#039;);$p.addClass(&amp;#039;active&amp;#039;).siblings(&amp;#039;.sa-tab-panel&amp;#039;).removeClass(&amp;#039;active&amp;#039;);});&lt;br /&gt;
&lt;br /&gt;
function suz(zid,pid,prid,fk){&lt;br /&gt;
var $z=$(&amp;#039;#&amp;#039;+zid),$i=$z.find(&amp;#039;input&amp;#039;),$pv=$(&amp;#039;#&amp;#039;+pid),$pr=$(&amp;#039;#&amp;#039;+prid);&lt;br /&gt;
$z.on(&amp;#039;click&amp;#039;,function(){$i.click();});&lt;br /&gt;
$z.on(&amp;#039;dragover&amp;#039;,function(e){e.preventDefault();$(this).addClass(&amp;#039;dragover&amp;#039;);});&lt;br /&gt;
$z.on(&amp;#039;dragleave drop&amp;#039;,function(){$(this).removeClass(&amp;#039;dragover&amp;#039;);});&lt;br /&gt;
$z.on(&amp;#039;drop&amp;#039;,function(e){e.preventDefault();var f=e.originalEvent.dataTransfer.files;if(f.length)hf(f[0]);});&lt;br /&gt;
$i.on(&amp;#039;change&amp;#039;,function(){if(this.files.length)hf(this.files[0]);});&lt;br /&gt;
function hf(f){uf[fk]=f;if(f.type.startsWith(&amp;#039;image/&amp;#039;)){var r=new FileReader();r.onload=function(e){$pv.attr(&amp;#039;src&amp;#039;,e.target.result).addClass(&amp;#039;show&amp;#039;);};r.readAsDataURL(f);}else if(f.type.startsWith(&amp;#039;video/&amp;#039;)){$pv.attr(&amp;#039;src&amp;#039;,URL.createObjectURL(f)).addClass(&amp;#039;show&amp;#039;).show();}}&lt;br /&gt;
return{reset:function(){uf[fk]=null;$pv.removeClass(&amp;#039;show&amp;#039;).hide().attr(&amp;#039;src&amp;#039;,&amp;#039;&amp;#039;);$pr.removeClass(&amp;#039;show&amp;#039;).find(&amp;#039;.sa-progress-bar&amp;#039;).css(&amp;#039;width&amp;#039;,0);$i.val(&amp;#039;&amp;#039;);},setP:function(p){$pr.addClass(&amp;#039;show&amp;#039;).find(&amp;#039;.sa-progress-bar&amp;#039;).css(&amp;#039;width&amp;#039;,p+&amp;#039;%&amp;#039;);}};&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var upPic=suz(&amp;#039;zone-profile-pic&amp;#039;,&amp;#039;preview-profile-pic&amp;#039;,&amp;#039;progress-profile-pic&amp;#039;,&amp;#039;profilePic&amp;#039;);&lt;br /&gt;
var upCov=suz(&amp;#039;zone-cover&amp;#039;,&amp;#039;preview-cover&amp;#039;,&amp;#039;progress-cover&amp;#039;,&amp;#039;cover&amp;#039;);&lt;br /&gt;
var upPho=suz(&amp;#039;zone-photo&amp;#039;,&amp;#039;preview-photo&amp;#039;,&amp;#039;progress-photo&amp;#039;,&amp;#039;photo&amp;#039;);&lt;br /&gt;
var upVid=suz(&amp;#039;zone-video&amp;#039;,&amp;#039;preview-video&amp;#039;,&amp;#039;progress-video&amp;#039;,&amp;#039;video&amp;#039;);&lt;br /&gt;
var upSto=suz(&amp;#039;zone-story&amp;#039;,&amp;#039;preview-story&amp;#039;,&amp;#039;progress-story&amp;#039;,&amp;#039;story&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
$(&amp;#039;#input-pic-url&amp;#039;).on(&amp;#039;input&amp;#039;,function(){var v=$(this).val();$(&amp;#039;#preview-pic-url&amp;#039;).attr(&amp;#039;src&amp;#039;,v).toggleClass(&amp;#039;show&amp;#039;,!!v);});&lt;br /&gt;
$(&amp;#039;#input-cover-url&amp;#039;).on(&amp;#039;input&amp;#039;,function(){var v=$(this).val();$(&amp;#039;#preview-cover-url&amp;#039;).attr(&amp;#039;src&amp;#039;,v).toggleClass(&amp;#039;show&amp;#039;,!!v);});&lt;br /&gt;
$(&amp;#039;#input-photo-url&amp;#039;).on(&amp;#039;input&amp;#039;,function(){var v=$(this).val();$(&amp;#039;#preview-photo-url&amp;#039;).attr(&amp;#039;src&amp;#039;,v).toggleClass(&amp;#039;show&amp;#039;,!!v);});&lt;br /&gt;
$(&amp;#039;#input-story-url&amp;#039;).on(&amp;#039;input&amp;#039;,function(){var v=$(this).val();$(&amp;#039;#preview-story-url&amp;#039;).attr(&amp;#039;src&amp;#039;,v).toggleClass(&amp;#039;show&amp;#039;,!!v);});&lt;br /&gt;
&lt;br /&gt;
$(&amp;#039;#edit-profile-btn&amp;#039;).on(&amp;#039;click&amp;#039;,function(){om(&amp;#039;modal-edit-profile&amp;#039;);});&lt;br /&gt;
$(&amp;#039;#save-profile&amp;#039;).on(&amp;#039;click&amp;#039;,function(){ud.name=$(&amp;#039;#input-display-name&amp;#039;).val().trim()||user;ud.bio=$(&amp;#039;#input-bio&amp;#039;).val().trim();localStorage.setItem(&amp;#039;sf_name_&amp;#039;+user,ud.name);localStorage.setItem(&amp;#039;sf_bio_&amp;#039;+user,ud.bio);$(&amp;#039;#display-name&amp;#039;).text(ud.name);$(&amp;#039;#bio-display&amp;#039;).html(ud.bio?&amp;#039;&amp;lt;div class=&amp;quot;sa-bio-name&amp;quot;&amp;gt;&amp;#039;+esc(ud.name)+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;+esc(ud.bio).replace(/\n/g,&amp;#039;&amp;lt;br&amp;gt;&amp;#039;):&amp;#039;Click Edit Profile to add a bio&amp;#039;);cm(&amp;#039;modal-edit-profile&amp;#039;);});&lt;br /&gt;
&lt;br /&gt;
$(&amp;#039;#profile-pic&amp;#039;).on(&amp;#039;click&amp;#039;,function(){upPic.reset();$(&amp;#039;#input-pic-url&amp;#039;).val(&amp;#039;&amp;#039;);$(&amp;#039;#preview-pic-url&amp;#039;).removeClass(&amp;#039;show&amp;#039;);om(&amp;#039;modal-profile-pic&amp;#039;);});&lt;br /&gt;
$(&amp;#039;#save-profile-pic&amp;#039;).on(&amp;#039;click&amp;#039;,function(){var ap=$(&amp;#039;#modal-profile-pic .sa-tab.active&amp;#039;).data(&amp;#039;panel&amp;#039;);if(ap===&amp;#039;panel-pic-url&amp;#039;){var u=$(&amp;#039;#input-pic-url&amp;#039;).val().trim();if(u){savePic(u);}else{alert(&amp;#039;Please enter a URL&amp;#039;);}}else if(uf.profilePic){upload(uf.profilePic,&amp;#039;ProfilePic&amp;#039;,upPic.setP).then(savePic).fail(function(e){alert(&amp;#039;Upload error&amp;#039;);});}else{alert(&amp;#039;Please select an image&amp;#039;);}});&lt;br /&gt;
function savePic(u){ud.photo=u;localStorage.setItem(&amp;#039;sf_photo_&amp;#039;+user,u);$(&amp;#039;#profile-pic&amp;#039;).html(av(u,user,&amp;#039;&amp;#039;));$(&amp;#039;#composer-avatar&amp;#039;).html(av(u,user,&amp;#039;c&amp;#039;));cm(&amp;#039;modal-profile-pic&amp;#039;);upPic.reset();}&lt;br /&gt;
&lt;br /&gt;
$a.on(&amp;#039;click&amp;#039;,&amp;#039;#edit-cover-btn&amp;#039;,function(){upCov.reset();$(&amp;#039;#input-cover-url&amp;#039;).val(&amp;#039;&amp;#039;);$(&amp;#039;#preview-cover-url&amp;#039;).removeClass(&amp;#039;show&amp;#039;);om(&amp;#039;modal-cover&amp;#039;);});&lt;br /&gt;
$(&amp;#039;#save-cover&amp;#039;).on(&amp;#039;click&amp;#039;,function(){var ap=$(&amp;#039;#modal-cover .sa-tab.active&amp;#039;).data(&amp;#039;panel&amp;#039;);if(ap===&amp;#039;panel-cover-url&amp;#039;){var u=$(&amp;#039;#input-cover-url&amp;#039;).val().trim();if(u){saveCov(u);}else{alert(&amp;#039;Please enter a URL&amp;#039;);}}else if(uf.cover){upload(uf.cover,&amp;#039;Cover&amp;#039;,upCov.setP).then(saveCov).fail(function(){alert(&amp;#039;Upload error&amp;#039;);});}else{alert(&amp;#039;Please select an image&amp;#039;);}});&lt;br /&gt;
function saveCov(u){ud.cover=u;localStorage.setItem(&amp;#039;sf_cover_&amp;#039;+user,u);$(&amp;#039;#cover-area&amp;#039;).html(&amp;#039;&amp;lt;img src=&amp;quot;&amp;#039;+u+&amp;#039;&amp;quot;&amp;gt;&amp;lt;button class=&amp;quot;sa-cover-edit&amp;quot; id=&amp;quot;edit-cover-btn&amp;quot;&amp;gt;📷 Edit Cover&amp;lt;/button&amp;gt;&amp;#039;);cm(&amp;#039;modal-cover&amp;#039;);upCov.reset();}&lt;br /&gt;
&lt;br /&gt;
$(&amp;#039;#btn-add-photo&amp;#039;).on(&amp;#039;click&amp;#039;,function(){upPho.reset();$(&amp;#039;#input-photo-url&amp;#039;).val(&amp;#039;&amp;#039;);$(&amp;#039;#preview-photo-url&amp;#039;).removeClass(&amp;#039;show&amp;#039;);om(&amp;#039;modal-photo&amp;#039;);});&lt;br /&gt;
$(&amp;#039;#add-photo&amp;#039;).on(&amp;#039;click&amp;#039;,function(){var ap=$(&amp;#039;#modal-photo .sa-tab.active&amp;#039;).data(&amp;#039;panel&amp;#039;);if(ap===&amp;#039;panel-photo-url&amp;#039;){var u=$(&amp;#039;#input-photo-url&amp;#039;).val().trim();if(u){setPM(&amp;#039;image&amp;#039;,u);cm(&amp;#039;modal-photo&amp;#039;);}else{alert(&amp;#039;Please enter a URL&amp;#039;);}}else if(uf.photo){upload(uf.photo,&amp;#039;Post&amp;#039;,upPho.setP).then(function(u){setPM(&amp;#039;image&amp;#039;,u);cm(&amp;#039;modal-photo&amp;#039;);upPho.reset();}).fail(function(){alert(&amp;#039;Upload error&amp;#039;);});}else{alert(&amp;#039;Please select an image&amp;#039;);}});&lt;br /&gt;
&lt;br /&gt;
$(&amp;#039;#btn-add-video&amp;#039;).on(&amp;#039;click&amp;#039;,function(){upVid.reset();$(&amp;#039;#input-video-url&amp;#039;).val(&amp;#039;&amp;#039;);om(&amp;#039;modal-video&amp;#039;);});&lt;br /&gt;
$(&amp;#039;#add-video&amp;#039;).on(&amp;#039;click&amp;#039;,function(){var ap=$(&amp;#039;#modal-video .sa-tab.active&amp;#039;).data(&amp;#039;panel&amp;#039;);if(ap===&amp;#039;panel-video-url&amp;#039;){var u=$(&amp;#039;#input-video-url&amp;#039;).val().trim();if(u){setPM(&amp;#039;video&amp;#039;,u);cm(&amp;#039;modal-video&amp;#039;);}else{alert(&amp;#039;Please enter a URL&amp;#039;);}}else if(uf.video){upload(uf.video,&amp;#039;Video&amp;#039;,upVid.setP).then(function(u){setPM(&amp;#039;video&amp;#039;,u);cm(&amp;#039;modal-video&amp;#039;);upVid.reset();}).fail(function(){alert(&amp;#039;Upload error&amp;#039;);});}else{alert(&amp;#039;Please select a video&amp;#039;);}});&lt;br /&gt;
&lt;br /&gt;
function setPM(t,u){pp.image=&amp;#039;&amp;#039;;pp.video=&amp;#039;&amp;#039;;pp[t]=u;var $pv=$(&amp;#039;#post-preview&amp;#039;),$in=$pv.find(&amp;#039;.sa-composer-preview-inner&amp;#039;);if(t===&amp;#039;image&amp;#039;){$in.find(&amp;#039;img,video&amp;#039;).remove();$in.append(&amp;#039;&amp;lt;img src=&amp;quot;&amp;#039;+u+&amp;#039;&amp;quot;&amp;gt;&amp;#039;);}else{$in.find(&amp;#039;img,video&amp;#039;).remove();if(u.match(/youtube|youtu\.be/)){$in.append(&amp;#039;&amp;lt;img src=&amp;quot;https://img.youtube.com/vi/&amp;#039;+(u.match(/(?:v=|youtu\.be\/)([^&amp;amp;]+)/)||[])[1]+&amp;#039;/hqdefault.jpg&amp;quot;&amp;gt;&amp;#039;);}else{$in.append(&amp;#039;&amp;lt;video src=&amp;quot;&amp;#039;+u+&amp;#039;&amp;quot; style=&amp;quot;max-height:200px&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;&amp;#039;);}}$pv.addClass(&amp;#039;show&amp;#039;);upd();}&lt;br /&gt;
&lt;br /&gt;
$(&amp;#039;#remove-media&amp;#039;).on(&amp;#039;click&amp;#039;,function(){pp.image=&amp;#039;&amp;#039;;pp.video=&amp;#039;&amp;#039;;$(&amp;#039;#post-preview&amp;#039;).removeClass(&amp;#039;show&amp;#039;).find(&amp;#039;img,video&amp;#039;).remove();upd();});&lt;br /&gt;
&lt;br /&gt;
$(&amp;#039;#btn-add-location&amp;#039;).on(&amp;#039;click&amp;#039;,function(){$(&amp;#039;#input-location&amp;#039;).val(&amp;#039;&amp;#039;);om(&amp;#039;modal-location&amp;#039;);});&lt;br /&gt;
$(&amp;#039;#detect-location&amp;#039;).on(&amp;#039;click&amp;#039;,function(){var $b=$(this);$b.text(&amp;#039;Detecting...&amp;#039;).prop(&amp;#039;disabled&amp;#039;,true);if(navigator.geolocation){navigator.geolocation.getCurrentPosition(function(p){$.getJSON(&amp;#039;https://nominatim.openstreetmap.org/reverse?format=json&amp;amp;lat=&amp;#039;+p.coords.latitude+&amp;#039;&amp;amp;lon=&amp;#039;+p.coords.longitude).done(function(d){var l=(d.display_name||&amp;#039;&amp;#039;).split(&amp;#039;,&amp;#039;).slice(0,3).join(&amp;#039;,&amp;#039;)||p.coords.latitude+&amp;#039;,&amp;#039;+p.coords.longitude;$(&amp;#039;#input-location&amp;#039;).val(l);$b.text(&amp;#039;📍 Use Current Location&amp;#039;).prop(&amp;#039;disabled&amp;#039;,false);}).fail(function(){$(&amp;#039;#input-location&amp;#039;).val(p.coords.latitude+&amp;#039;,&amp;#039;+p.coords.longitude);$b.text(&amp;#039;📍 Use Current Location&amp;#039;).prop(&amp;#039;disabled&amp;#039;,false);});},function(){alert(&amp;#039;Could not get location&amp;#039;);$b.text(&amp;#039;📍 Use Current Location&amp;#039;).prop(&amp;#039;disabled&amp;#039;,false);});}else{alert(&amp;#039;Geolocation not supported&amp;#039;);$b.text(&amp;#039;📍 Use Current Location&amp;#039;).prop(&amp;#039;disabled&amp;#039;,false);}});&lt;br /&gt;
$(&amp;#039;#add-location&amp;#039;).on(&amp;#039;click&amp;#039;,function(){var l=$(&amp;#039;#input-location&amp;#039;).val().trim();if(l){pp.location=l;$(&amp;#039;#post-location&amp;#039;).addClass(&amp;#039;show&amp;#039;).find(&amp;#039;span&amp;#039;).text(l);cm(&amp;#039;modal-location&amp;#039;);}else{alert(&amp;#039;Please enter a location&amp;#039;);}});&lt;br /&gt;
$(&amp;#039;#remove-location&amp;#039;).on(&amp;#039;click&amp;#039;,function(){pp.location=&amp;#039;&amp;#039;;$(&amp;#039;#post-location&amp;#039;).removeClass(&amp;#039;show&amp;#039;);});&lt;br /&gt;
&lt;br /&gt;
// Emoji picker&lt;br /&gt;
var emos={&amp;#039;😀&amp;#039;:[&amp;#039;😀&amp;#039;,&amp;#039;😃&amp;#039;,&amp;#039;😄&amp;#039;,&amp;#039;😁&amp;#039;,&amp;#039;😆&amp;#039;,&amp;#039;😅&amp;#039;,&amp;#039;🤣&amp;#039;,&amp;#039;😂&amp;#039;,&amp;#039;🙂&amp;#039;,&amp;#039;😉&amp;#039;,&amp;#039;😊&amp;#039;,&amp;#039;😇&amp;#039;,&amp;#039;🥰&amp;#039;,&amp;#039;😍&amp;#039;,&amp;#039;🤩&amp;#039;,&amp;#039;😘&amp;#039;],&amp;#039;👋&amp;#039;:[&amp;#039;👋&amp;#039;,&amp;#039;🤚&amp;#039;,&amp;#039;🖐️&amp;#039;,&amp;#039;✋&amp;#039;,&amp;#039;🖖&amp;#039;,&amp;#039;👌&amp;#039;,&amp;#039;✌️&amp;#039;,&amp;#039;🤞&amp;#039;,&amp;#039;🤟&amp;#039;,&amp;#039;🤘&amp;#039;,&amp;#039;🤙&amp;#039;,&amp;#039;👍&amp;#039;,&amp;#039;👎&amp;#039;,&amp;#039;✊&amp;#039;,&amp;#039;👊&amp;#039;,&amp;#039;👏&amp;#039;],&amp;#039;❤️&amp;#039;:[&amp;#039;❤️&amp;#039;,&amp;#039;🧡&amp;#039;,&amp;#039;💛&amp;#039;,&amp;#039;💚&amp;#039;,&amp;#039;💙&amp;#039;,&amp;#039;💜&amp;#039;,&amp;#039;🖤&amp;#039;,&amp;#039;🤍&amp;#039;,&amp;#039;🤎&amp;#039;,&amp;#039;💔&amp;#039;,&amp;#039;❣️&amp;#039;,&amp;#039;💕&amp;#039;,&amp;#039;💞&amp;#039;,&amp;#039;💓&amp;#039;,&amp;#039;💗&amp;#039;,&amp;#039;💖&amp;#039;],&amp;#039;🐶&amp;#039;:[&amp;#039;🐶&amp;#039;,&amp;#039;🐱&amp;#039;,&amp;#039;🐭&amp;#039;,&amp;#039;🐹&amp;#039;,&amp;#039;🐰&amp;#039;,&amp;#039;🦊&amp;#039;,&amp;#039;🐻&amp;#039;,&amp;#039;🐼&amp;#039;,&amp;#039;🐨&amp;#039;,&amp;#039;🐯&amp;#039;,&amp;#039;🦁&amp;#039;,&amp;#039;🐮&amp;#039;,&amp;#039;🐷&amp;#039;,&amp;#039;🐸&amp;#039;,&amp;#039;🐵&amp;#039;,&amp;#039;🐔&amp;#039;],&amp;#039;🍎&amp;#039;:[&amp;#039;🍎&amp;#039;,&amp;#039;🍐&amp;#039;,&amp;#039;🍊&amp;#039;,&amp;#039;🍋&amp;#039;,&amp;#039;🍌&amp;#039;,&amp;#039;🍉&amp;#039;,&amp;#039;🍇&amp;#039;,&amp;#039;🍓&amp;#039;,&amp;#039;🍈&amp;#039;,&amp;#039;🍒&amp;#039;,&amp;#039;🍑&amp;#039;,&amp;#039;🥭&amp;#039;,&amp;#039;🍍&amp;#039;,&amp;#039;🥥&amp;#039;,&amp;#039;🥝&amp;#039;,&amp;#039;🍅&amp;#039;],&amp;#039;⚽&amp;#039;:[&amp;#039;⚽&amp;#039;,&amp;#039;🏀&amp;#039;,&amp;#039;🏈&amp;#039;,&amp;#039;⚾&amp;#039;,&amp;#039;🎾&amp;#039;,&amp;#039;🏐&amp;#039;,&amp;#039;🏉&amp;#039;,&amp;#039;🎱&amp;#039;,&amp;#039;🏓&amp;#039;,&amp;#039;🏸&amp;#039;,&amp;#039;🏒&amp;#039;,&amp;#039;🥊&amp;#039;,&amp;#039;🎿&amp;#039;,&amp;#039;🏄&amp;#039;,&amp;#039;🏊&amp;#039;,&amp;#039;🚴&amp;#039;]};&lt;br /&gt;
var $pk=$(&amp;#039;#emoji-picker&amp;#039;),ecs=Object.keys(emos);&lt;br /&gt;
$pk.html(&amp;#039;&amp;lt;div class=&amp;quot;sa-emoji-header&amp;quot;&amp;gt;&amp;#039;+ecs.map(function(c,i){return&amp;#039;&amp;lt;button class=&amp;quot;sa-emoji-cat&amp;#039;+(i===0?&amp;#039; active&amp;#039;:&amp;#039;&amp;#039;)+&amp;#039;&amp;quot; data-cat=&amp;quot;&amp;#039;+c+&amp;#039;&amp;quot;&amp;gt;&amp;#039;+c+&amp;#039;&amp;lt;/button&amp;gt;&amp;#039;;}).join(&amp;#039;&amp;#039;)+&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-emoji-grid&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;);&lt;br /&gt;
function se(c){$pk.find(&amp;#039;.sa-emoji-grid&amp;#039;).html(emos[c].map(function(e){return&amp;#039;&amp;lt;button class=&amp;quot;sa-emoji-btn&amp;quot;&amp;gt;&amp;#039;+e+&amp;#039;&amp;lt;/button&amp;gt;&amp;#039;;}).join(&amp;#039;&amp;#039;));}&lt;br /&gt;
se(ecs[0]);&lt;br /&gt;
$pk.on(&amp;#039;click&amp;#039;,&amp;#039;.sa-emoji-cat&amp;#039;,function(){$(this).addClass(&amp;#039;active&amp;#039;).siblings().removeClass(&amp;#039;active&amp;#039;);se($(this).data(&amp;#039;cat&amp;#039;));});&lt;br /&gt;
$pk.on(&amp;#039;click&amp;#039;,&amp;#039;.sa-emoji-btn&amp;#039;,function(){var em=$(this).text(),$ip=$(&amp;#039;#post-input&amp;#039;)[0],st=$ip.selectionStart,v=$ip.value;$ip.value=v.slice(0,st)+em+v.slice($ip.selectionEnd);$ip.selectionStart=$ip.selectionEnd=st+em.length;$ip.focus();upd();});&lt;br /&gt;
$(&amp;#039;#btn-add-emoji&amp;#039;).on(&amp;#039;click&amp;#039;,function(e){e.stopPropagation();$pk.toggleClass(&amp;#039;open&amp;#039;);});&lt;br /&gt;
$(document).on(&amp;#039;click&amp;#039;,function(e){if(!$(e.target).closest(&amp;#039;#emoji-picker,#btn-add-emoji&amp;#039;).length)$pk.removeClass(&amp;#039;open&amp;#039;);});&lt;br /&gt;
&lt;br /&gt;
$(&amp;#039;#post-input&amp;#039;).on(&amp;#039;input&amp;#039;,upd);&lt;br /&gt;
function upd(){var h=$(&amp;#039;#post-input&amp;#039;).val().trim()||pp.image||pp.video;$(&amp;#039;#btn-submit-post&amp;#039;).prop(&amp;#039;disabled&amp;#039;,!h);}&lt;br /&gt;
&lt;br /&gt;
$(&amp;#039;#btn-submit-post&amp;#039;).on(&amp;#039;click&amp;#039;,function(){var t=$(&amp;#039;#post-input&amp;#039;).val().trim();if(!t&amp;amp;&amp;amp;!pp.image&amp;amp;&amp;amp;!pp.video){alert(&amp;#039;Please add some content&amp;#039;);return;}var $b=$(this);$b.prop(&amp;#039;disabled&amp;#039;,true).text(&amp;#039;Posting...&amp;#039;);var p={action:&amp;#039;socialfeed&amp;#039;,sfaction:&amp;#039;createpost&amp;#039;,content:t||&amp;#039;(media)&amp;#039;};if(pp.image)p.image_url=pp.image;if(pp.video)p.video_url=pp.video;if(pp.location)p.location=pp.location;api.postWithToken(&amp;#039;csrf&amp;#039;,p).then(function(){$(&amp;#039;#post-input&amp;#039;).val(&amp;#039;&amp;#039;);pp={image:&amp;#039;&amp;#039;,video:&amp;#039;&amp;#039;,location:&amp;#039;&amp;#039;};$(&amp;#039;#post-preview&amp;#039;).removeClass(&amp;#039;show&amp;#039;).find(&amp;#039;img,video&amp;#039;).remove();$(&amp;#039;#post-location&amp;#039;).removeClass(&amp;#039;show&amp;#039;);$b.prop(&amp;#039;disabled&amp;#039;,true).text(&amp;#039;Post&amp;#039;);loadP();}).fail(function(c,d){alert(&amp;#039;Error posting: &amp;#039;+(d&amp;amp;&amp;amp;d.error?d.error.info:c));$b.prop(&amp;#039;disabled&amp;#039;,false).text(&amp;#039;Post&amp;#039;);});});&lt;br /&gt;
&lt;br /&gt;
// Stories&lt;br /&gt;
$a.on(&amp;#039;click&amp;#039;,&amp;#039;#add-story-btn&amp;#039;,function(){upSto.reset();$(&amp;#039;#input-story-url&amp;#039;).val(&amp;#039;&amp;#039;);$(&amp;#039;#preview-story-url&amp;#039;).removeClass(&amp;#039;show&amp;#039;);om(&amp;#039;modal-story&amp;#039;);});&lt;br /&gt;
$(&amp;#039;#add-story&amp;#039;).on(&amp;#039;click&amp;#039;,function(){var ap=$(&amp;#039;#modal-story .sa-tab.active&amp;#039;).data(&amp;#039;panel&amp;#039;);function ps(u){api.postWithToken(&amp;#039;csrf&amp;#039;,{action:&amp;#039;socialfeed&amp;#039;,sfaction:&amp;#039;createstory&amp;#039;,image_url:u}).then(function(){cm(&amp;#039;modal-story&amp;#039;);upSto.reset();loadS();}).fail(function(c,d){alert(&amp;#039;Error: &amp;#039;+(d&amp;amp;&amp;amp;d.error?d.error.info:c));});}if(ap===&amp;#039;panel-story-url&amp;#039;){var u=$(&amp;#039;#input-story-url&amp;#039;).val().trim();if(u){ps(u);}else{alert(&amp;#039;Please enter a URL&amp;#039;);}}else if(uf.story){upload(uf.story,&amp;#039;Story&amp;#039;,upSto.setP).then(ps).fail(function(){alert(&amp;#039;Upload error&amp;#039;);});}else{alert(&amp;#039;Please select an image&amp;#039;);}});&lt;br /&gt;
&lt;br /&gt;
var sto;&lt;br /&gt;
$a.on(&amp;#039;click&amp;#039;,&amp;#039;.sa-story[data-story-url]&amp;#039;,function(){var u=$(this).data(&amp;#039;story-url&amp;#039;),n=$(this).data(&amp;#039;story-user&amp;#039;),p=localStorage.getItem(&amp;#039;sf_photo_&amp;#039;+n)||&amp;#039;&amp;#039;;$(&amp;#039;#story-viewer-image&amp;#039;).attr(&amp;#039;src&amp;#039;,u);$(&amp;#039;#story-viewer-name&amp;#039;).text(n);$(&amp;#039;#story-viewer-avatar&amp;#039;).html(av(p,n,&amp;#039;s&amp;#039;));$(&amp;#039;#story-viewer&amp;#039;).addClass(&amp;#039;open&amp;#039;);var $pb=$(&amp;#039;#sv-prog&amp;#039;);$pb.css(&amp;#039;width&amp;#039;,&amp;#039;0&amp;#039;);setTimeout(function(){$pb.css({width:&amp;#039;100%&amp;#039;,transition:&amp;#039;width 5s linear&amp;#039;});},10);clearTimeout(sto);sto=setTimeout(function(){$(&amp;#039;#story-viewer&amp;#039;).removeClass(&amp;#039;open&amp;#039;);$pb.css({width:&amp;#039;0&amp;#039;,transition:&amp;#039;none&amp;#039;});},5000);});&lt;br /&gt;
$(&amp;#039;#close-story-viewer,#story-viewer&amp;#039;).on(&amp;#039;click&amp;#039;,function(e){if(e.target.id===&amp;#039;close-story-viewer&amp;#039;||e.target.id===&amp;#039;story-viewer&amp;#039;){$(&amp;#039;#story-viewer&amp;#039;).removeClass(&amp;#039;open&amp;#039;);$(&amp;#039;#sv-prog&amp;#039;).css({width:&amp;#039;0&amp;#039;,transition:&amp;#039;none&amp;#039;});clearTimeout(sto);}});&lt;br /&gt;
&lt;br /&gt;
// Feed interactions&lt;br /&gt;
$a.on(&amp;#039;click&amp;#039;,&amp;#039;.sa-post-action[data-like]&amp;#039;,function(){var id=$(this).data(&amp;#039;like&amp;#039;);api.postWithToken(&amp;#039;csrf&amp;#039;,{action:&amp;#039;socialfeed&amp;#039;,sfaction:&amp;#039;react&amp;#039;,post_id:id,reaction_type:&amp;#039;like&amp;#039;}).then(loadP);});&lt;br /&gt;
$a.on(&amp;#039;click&amp;#039;,&amp;#039;.sa-post-menu[data-delete]&amp;#039;,function(){if(confirm(&amp;#039;Delete this post?&amp;#039;)){api.postWithToken(&amp;#039;csrf&amp;#039;,{action:&amp;#039;socialfeed&amp;#039;,sfaction:&amp;#039;deletepost&amp;#039;,post_id:$(this).data(&amp;#039;delete&amp;#039;)}).then(loadP);}});&lt;br /&gt;
$a.on(&amp;#039;click&amp;#039;,&amp;#039;.sa-post-comments-count&amp;#039;,function(){var id=$(this).data(&amp;#039;post&amp;#039;),$s=$(&amp;#039;#comments-&amp;#039;+id);if($s.hasClass(&amp;#039;show&amp;#039;)){$s.removeClass(&amp;#039;show&amp;#039;);}else{$s.addClass(&amp;#039;show&amp;#039;);loadC(id);}});&lt;br /&gt;
$a.on(&amp;#039;keypress&amp;#039;,&amp;#039;.sa-post-comment-input&amp;#039;,function(e){if(e.which===13){var $i=$(this),t=$i.val().trim(),id=$i.data(&amp;#039;post&amp;#039;);if(t){$i.val(&amp;#039;&amp;#039;).prop(&amp;#039;disabled&amp;#039;,true);api.postWithToken(&amp;#039;csrf&amp;#039;,{action:&amp;#039;socialfeed&amp;#039;,sfaction:&amp;#039;comment&amp;#039;,post_id:id,content:t}).then(function(){$i.prop(&amp;#039;disabled&amp;#039;,false);loadC(id);loadP();}).fail(function(){$i.prop(&amp;#039;disabled&amp;#039;,false);});}}});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function loadP(){&lt;br /&gt;
api.get({action:&amp;#039;socialfeed&amp;#039;,sfaction:&amp;#039;getposts&amp;#039;,limit:20}).then(function(r){&lt;br /&gt;
var ps=(r.socialfeed&amp;amp;&amp;amp;r.socialfeed.posts)||[];&lt;br /&gt;
$(&amp;#039;#post-count&amp;#039;).text(ps.length);&lt;br /&gt;
if(!ps.length){$(&amp;#039;#feed-container&amp;#039;).html(&amp;#039;&amp;lt;div class=&amp;quot;sa-empty&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-empty-icon&amp;quot;&amp;gt;📷&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-empty-title&amp;quot;&amp;gt;Share Photos&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-empty-text&amp;quot;&amp;gt;When you share photos, they will appear here.&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;);return;}&lt;br /&gt;
var h=ps.map(function(p){&lt;br /&gt;
var up=localStorage.getItem(&amp;#039;sf_photo_&amp;#039;+p.username)||&amp;#039;&amp;#039;,tr=0;&lt;br /&gt;
for(var k in p.reaction_counts)tr+=p.reaction_counts[k];&lt;br /&gt;
var m=&amp;#039;&amp;#039;;&lt;br /&gt;
if(p.image_url)m=&amp;#039;&amp;lt;div class=&amp;quot;sa-post-media&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&amp;#039;+esc(p.image_url)+&amp;#039;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
if(p.video_url){if(p.video_url.match(/youtube|youtu\.be/)){var vi=(p.video_url.match(/(?:v=|youtu\.be\/)([^&amp;amp;]+)/)||[])[1];if(vi)m=&amp;#039;&amp;lt;div class=&amp;quot;sa-post-media&amp;quot;&amp;gt;&amp;lt;iframe src=&amp;quot;https://www.youtube.com/embed/&amp;#039;+vi+&amp;#039;&amp;quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;}else if(p.video_url.match(/vimeo/)){var vm=(p.video_url.match(/vimeo\.com\/(\d+)/)||[])[1];if(vm)m=&amp;#039;&amp;lt;div class=&amp;quot;sa-post-media&amp;quot;&amp;gt;&amp;lt;iframe src=&amp;quot;https://player.vimeo.com/video/&amp;#039;+vm+&amp;#039;&amp;quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;}else{m=&amp;#039;&amp;lt;div class=&amp;quot;sa-post-media&amp;quot;&amp;gt;&amp;lt;video src=&amp;quot;&amp;#039;+esc(p.video_url)+&amp;#039;&amp;quot; controls&amp;gt;&amp;lt;/video&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;}}&lt;br /&gt;
var lo=p.location?&amp;#039;&amp;lt;div class=&amp;quot;sa-post-location&amp;quot;&amp;gt;📍 &amp;#039;+esc(p.location)+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;:&amp;#039;&amp;#039;;&lt;br /&gt;
var del=p.username===user?&amp;#039;&amp;lt;button class=&amp;quot;sa-post-menu&amp;quot; data-delete=&amp;quot;&amp;#039;+p.id+&amp;#039;&amp;quot;&amp;gt;🗑️&amp;lt;/button&amp;gt;&amp;#039;:&amp;#039;&amp;#039;;&lt;br /&gt;
var lc=p.user_reaction===&amp;#039;like&amp;#039;?&amp;#039; liked&amp;#039;:&amp;#039;&amp;#039;;&lt;br /&gt;
return&amp;#039;&amp;lt;div class=&amp;quot;sa-post&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-post-header&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-post-avatar&amp;quot;&amp;gt;&amp;#039;+av(up,p.username,&amp;#039;p&amp;#039;)+&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-post-user&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-post-username&amp;quot;&amp;gt;&amp;#039;+esc(p.username)+&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-post-meta&amp;quot;&amp;gt;&amp;#039;+ago(p.created)+&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;+del+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;+(p.content&amp;amp;&amp;amp;p.content!==&amp;#039;(media)&amp;#039;?&amp;#039;&amp;lt;div class=&amp;quot;sa-post-content&amp;quot;&amp;gt;&amp;#039;+esc(p.content)+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;:&amp;#039;&amp;#039;)+lo+m+&amp;#039;&amp;lt;div class=&amp;quot;sa-post-actions&amp;quot;&amp;gt;&amp;lt;button class=&amp;quot;sa-post-action&amp;#039;+lc+&amp;#039;&amp;quot; data-like=&amp;quot;&amp;#039;+p.id+&amp;#039;&amp;quot;&amp;gt;&amp;#039;+(p.user_reaction===&amp;#039;like&amp;#039;?&amp;#039;❤️&amp;#039;:&amp;#039;🤍&amp;#039;)+&amp;#039;&amp;lt;/button&amp;gt;&amp;lt;button class=&amp;quot;sa-post-action&amp;quot;&amp;gt;💬&amp;lt;/button&amp;gt;&amp;lt;button class=&amp;quot;sa-post-action&amp;quot;&amp;gt;📤&amp;lt;/button&amp;gt;&amp;lt;button class=&amp;quot;sa-post-action&amp;quot; style=&amp;quot;margin-left:auto&amp;quot;&amp;gt;🔖&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;+(tr?&amp;#039;&amp;lt;div class=&amp;quot;sa-post-likes&amp;quot;&amp;gt;&amp;#039;+tr+&amp;#039; like&amp;#039;+(tr&amp;gt;1?&amp;#039;s&amp;#039;:&amp;#039;&amp;#039;)+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;:&amp;#039;&amp;#039;)+(p.comments?&amp;#039;&amp;lt;div class=&amp;quot;sa-post-comments-count&amp;quot; data-post=&amp;quot;&amp;#039;+p.id+&amp;#039;&amp;quot;&amp;gt;View all &amp;#039;+p.comments+&amp;#039; comment&amp;#039;+(p.comments&amp;gt;1?&amp;#039;s&amp;#039;:&amp;#039;&amp;#039;)+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;:&amp;#039;&amp;#039;)+&amp;#039;&amp;lt;div class=&amp;quot;sa-comments-section&amp;quot; id=&amp;quot;comments-&amp;#039;+p.id+&amp;#039;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-post-time&amp;quot;&amp;gt;&amp;#039;+ago(p.created)+&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-post-comment-form&amp;quot;&amp;gt;&amp;lt;input class=&amp;quot;sa-post-comment-input&amp;quot; data-post=&amp;quot;&amp;#039;+p.id+&amp;#039;&amp;quot; placeholder=&amp;quot;Add a comment...&amp;quot;&amp;gt;&amp;lt;button class=&amp;quot;sa-post-comment-submit&amp;quot;&amp;gt;Post&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
}).join(&amp;#039;&amp;#039;);&lt;br /&gt;
$(&amp;#039;#feed-container&amp;#039;).html(h);&lt;br /&gt;
}).fail(function(){$(&amp;#039;#feed-container&amp;#039;).html(&amp;#039;&amp;lt;div class=&amp;quot;sa-empty&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-empty-icon&amp;quot;&amp;gt;😕&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-empty-title&amp;quot;&amp;gt;Error Loading&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-empty-text&amp;quot;&amp;gt;Could not load posts.&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;);});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function loadC(id){&lt;br /&gt;
api.get({action:&amp;#039;socialfeed&amp;#039;,sfaction:&amp;#039;getcomments&amp;#039;,post_id:id}).then(function(r){&lt;br /&gt;
var cs=(r.socialfeed&amp;amp;&amp;amp;r.socialfeed.comments)||[];&lt;br /&gt;
var h=cs.map(function(c){var up=localStorage.getItem(&amp;#039;sf_photo_&amp;#039;+c.username)||&amp;#039;&amp;#039;;return&amp;#039;&amp;lt;div class=&amp;quot;sa-comment&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-comment-avatar&amp;quot;&amp;gt;&amp;#039;+av(up,c.username,&amp;#039;s&amp;#039;)+&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-comment-body&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-comment-text&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;&amp;#039;+esc(c.username)+&amp;#039;&amp;lt;/strong&amp;gt; &amp;#039;+esc(c.content)+&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-comment-time&amp;quot;&amp;gt;&amp;#039;+ago(c.created)+&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;}).join(&amp;#039;&amp;#039;);&lt;br /&gt;
$(&amp;#039;#comments-&amp;#039;+id).html(h||&amp;#039;&amp;lt;div style=&amp;quot;color:#8e8e8e;font-size:14px&amp;quot;&amp;gt;No comments yet&amp;lt;/div&amp;gt;&amp;#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function loadS(){&lt;br /&gt;
api.get({action:&amp;#039;socialfeed&amp;#039;,sfaction:&amp;#039;getstories&amp;#039;}).then(function(r){&lt;br /&gt;
var ss=(r.socialfeed&amp;amp;&amp;amp;r.socialfeed.stories)||[];&lt;br /&gt;
var h=&amp;#039;&amp;lt;div class=&amp;quot;sa-story&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-story-ring add&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-story-inner&amp;quot; id=&amp;quot;add-story-btn&amp;quot;&amp;gt;+&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-story-name&amp;quot;&amp;gt;Your story&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
h+=ss.map(function(s){var up=localStorage.getItem(&amp;#039;sf_photo_&amp;#039;+s.username)||&amp;#039;&amp;#039;;return&amp;#039;&amp;lt;div class=&amp;quot;sa-story&amp;quot; data-story-url=&amp;quot;&amp;#039;+esc(s.image_url)+&amp;#039;&amp;quot; data-story-user=&amp;quot;&amp;#039;+esc(s.username)+&amp;#039;&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-story-ring&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;sa-story-inner&amp;quot;&amp;gt;&amp;#039;+av(up,s.username,&amp;#039;s&amp;#039;)+&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;sa-story-name&amp;quot;&amp;gt;&amp;#039;+esc(s.username)+&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;}).join(&amp;#039;&amp;#039;);&lt;br /&gt;
$(&amp;#039;#stories-container&amp;#039;).html(h);&lt;br /&gt;
}).fail(function(){});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
build();&lt;br /&gt;
events();&lt;br /&gt;
loadP();&lt;br /&gt;
loadS();&lt;br /&gt;
});&lt;br /&gt;
})();&lt;/div&gt;</summary>
		<author><name>Docmoates</name></author>
	</entry>
</feed>