<html>
<head>
<title>Social Network Link Generator</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type='text/javascript' src="javascript/social-share-media.js"></script>
<link rel="stylesheet" href="css/social-share-media.css"></link>
<meta http-equiv="content-type" content="text/css/javascript/php; charset=UTF-8" />
</head>
<body>
<h1>Social Link Generator</h1>
<h2>Input</h2>
<table id="input-table">
<tr>
<td width="1%">
<span class="input-label">URL :</span>
</td>
<td>
<input type="text" id="input_url" />
</td>
</tr>
<tr>
<td width="1%">
<span class="input-label">Title :</span>
</td>
<td>
<input type="text" id="input_title" />
</td>
</tr>
<tr>
<td width="1%" valign="top">
<span class="input-label">Description :</span>
</td>
<td>
<textarea id="input_description" rows="4" cols="40"></textarea>
</td>
</tr>
<tr>
<td width="1%">
<span class="input-label">Image :</span>
</td>
<td>
<input type="text" id="input_image" />
</td>
</tr>
<tr>
<td width="1%">
<span class="input-label">App ID :</span>
</td>
<td>
<input type="text" id="input_appid" />
</td>
</tr>
<tr>
<td width="1%">
<span class="input-label">Redirect URL :</span>
</td>
<td>
<input type="text" id="input_redirect_url" />
</td>
</tr>
<tr>
<td width="1%">
<span class="input-label">Via :</span>
</td>
<td>
<input type="text" id="input_via" />
</td>
</tr>
<tr>
<td width="1%">
<span class="input-label">Hash Tags :</span>
</td>
<td>
<input type="text" id="input_hash_tags" />
</td>
</tr>
<tr>
<td width="1%">
<span class="input-label">Provider :</span>
</td>
<td>
<input type="text" id="input_provider" />
</td>
</tr>
<tr>
<td width="1%">
<span class="input-label">Language :</span>
</td>
<td>
<input type="text" id="input_language" />
</td>
</tr>
<tr>
<td width="1%">
<span class="input-label">User ID :</span>
</td>
<td>
<input type="text" id="input_user_id" />
</td>
</tr>
<tr>
<td width="1%">
<span class="input-label">Category :</span>
</td>
<td>
<input type="text" id="input_category" />
</td>
</tr>
<tr>
<td width="1%">
<span class="input-label">Phone Number :</span>
</td>
<td>
<input type="text" id="input_phone_number" />
</td>
</tr>
<tr>
<td width="1%">
<span class="input-label">Email Address :</span>
</td>
<td>
<input type="text" id="input_email_address" />
</td>
</tr>
<tr>
<td width="1%">
<span class="input-label">CC Email Address :</span>
</td>
<td>
<input type="text" id="input_cc_email_address" />
</td>
</tr>
<tr>
<td width="1%">
<span class="input-label">BCC Email Address :</span>
</td>
<td>
<input type="text" id="input_bcc_email_address" />
</td>
</tr>
<tr>
<td colspan="2">
<span class="input-label">Generate URLs : <input type="button" id="generate-social-media-urls" value="Generate"></input></span>
</td>
</tr>
</table>
<h2>Output</h2>
<table id="output-table">
<tr>
<td>
Output will appear here.
</td>
</tr>
</table>
<script type="text/javascript">
function GetSocialMediaSites_NiceNames() {
return {
'add.this':'AddThis',
'blogger':'Blogger',
'buffer':'Buffer',
'diaspora':'Diaspora',
'digg':'Digg',
'douban':'Douban',
'email':'EMail',
'evernote':'EverNote',
'getpocket':'Pocket',
'facebook':'FaceBook',
'flattr':'Flattr',
'flipboard':'FlipBoard',
'google.bookmarks':'GoogleBookmarks',
'instapaper':'InstaPaper',
'line.me':'Line.me',
'linkedin':'LinkedIn',
'livejournal':'LiveJournal',
'gmail':'GMail',
'hacker.news':'HackerNews',
'ok.ru':'OK.ru',
'pinterest.com':'Pinterest',
'qzone':'QZone',
'reddit':'Reddit',
'renren':'RenRen',
'skype':'Skype',
'sms':'SMS',
'surfingbird.ru':'SurfingBird.ru',
'telegram.me':'Telegram.me',
'threema':'Threema',
'tumblr':'Tumblr',
'twitter':'Twitter',
'vk':'VK',
'weibo':'Weibo',
'xing':'Xing',
'yahoo':'Yahoo',
};
}
// Social Media Sites With Share Links
// -------------------------------------------------
function GetSocialMediaSites_WithShareLinks_OrderedByPopularity() {
return [
'google.bookmarks',
'facebook',
'reddit',
'twitter',
'linkedin',
'tumblr',
'pinterest',
'blogger',
'livejournal',
'evernote',
'add.this',
'getpocket',
'hacker.news',
'digg',
'buffer',
'flipboard',
'instapaper',
'surfingbird.ru',
'flattr',
'diaspora',
'qzone',
'vk',
'weibo',
'ok.ru',
'douban',
'xing',
'renren',
'threema',
'sms',
'line.me',
'skype',
'telegram.me',
'email',
'gmail',
'yahoo',
];
}
function GetSocialMediaSites_WithShareLinks_OrderedByAlphabet() {
const nice_names = GetSocialMediaSites_NiceNames();
return Object.keys(nice_names);
}
// Social Media Site Links With Share Links
// -------------------------------------------------
function GetSocialMediaSiteLinks_WithShareLinks(args) {
const validargs = [
'url',
'title',
'image',
'desc',
'appid',
'redirecturl',
'via',
'hashtags',
'provider',
'language',
'userid',
'category',
'phonenumber',
'emailaddress',
'cemailaddress',
'bccemailaddress',
];
for(var i = 0; i < validargs.length; i++) {
const validarg = validargs[i];
if(!args[validarg]) {
args[validarg] = '';
}
}
const url = fixedEncodeURIComponent(args.url);
const title = fixedEncodeURIComponent(args.title);
const image = fixedEncodeURIComponent(args.image);
const desc = fixedEncodeURIComponent(args.desc);
const app_id = fixedEncodeURIComponent(args.appid);
const redirect_url = fixedEncodeURIComponent(args.redirecturl);
const via = fixedEncodeURIComponent(args.via);
const hash_tags = fixedEncodeURIComponent(args.hashtags);
const provider = fixedEncodeURIComponent(args.provider);
const language = fixedEncodeURIComponent(args.language);
const user_id = fixedEncodeURIComponent(args.userid);
const category = fixedEncodeURIComponent(args.category);
const phone_number = fixedEncodeURIComponent(args.phonenumber);
const email_address = fixedEncodeURIComponent(args.emailaddress);
const cc_email_address = fixedEncodeURIComponent(args.ccemailaddress);
const bcc_email_address = fixedEncodeURIComponent(args.bccemailaddress);
var text = title;
if(desc) {
text += '%20%3A%20'; // This is just this, " : "
text += desc;
}
return {
'add.this':'http://www.addthis.com/bookmark.php?url=' + url,
'blogger':'https://www.blogger.com/blog-this.g?u=' + url + '&n=' + title + '&t=' + desc,
'buffer':'https://buffer.com/add?text=' + text + '&url=' + url,
'diaspora':'https://share.diasporafoundation.org/?title=' + title + '&url=' + url,
'digg':'http://digg.com/submit?url=' + url + '&title=' + text,
'douban':'http://www.douban.com/recommend/?url=' + url + '&title=' + text,
'email':'mailto:' + email_address + '?subject=' + title + '&body=' + desc,
'evernote':'http://www.evernote.com/clip.action?url=' + url + '&title=' + text,
'getpocket':'https://getpocket.com/edit?url=' + url,
'facebook':'http://www.facebook.com/sharer.php?u=' + url,
'flattr':'https://flattr.com/submit/auto?user_id=' + user_id + '&url=' + url + '&title=' + title + '&description=' + text + '&language=' + language + '&tags=' + hash_tags + '&hidden=HIDDEN&category=' + category,
'flipboard':'https://share.flipboard.com/bookmarklet/popout?v=2&title=' + text + '&url=' + url,
'gmail':'https://mail.google.com/mail/?view=cm&to=' + email_address + '&su=' + title + '&body=' + url + '&bcc=' + bcc_email_address + '&cc=' + cc_email_address,
'google.bookmarks':'https://www.google.com/bookmarks/mark?op=edit&bkmk=' + url + '&title=' + title + '&annotation=' + text + '&labels=' + hash_tags + '',
'instapaper':'http://www.instapaper.com/edit?url=' + url + '&title=' + title + '&description=' + desc,
'line.me':'https://lineit.line.me/share/ui?url=' + url + '&text=' + text,
'linkedin':'https://www.linkedin.com/shareArticle?mini=true&url=' + url + '&title=' + title + '&summary=' + text + '&source=' + provider,
'livejournal':'http://www.livejournal.com/update.bml?subject=' + text + '&event=' + url,
'hacker.news':'https://news.ycombinator.com/submitlink?u=' + url + '&t=' + title,
'ok.ru':'https://connect.ok.ru/dk?st.cmd=WidgetSharePreview&st.shareUrl=' + url,
'pinterest':'http://pinterest.com/pin/create/button/?url=' + url ,
'qzone':'http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=' + url,
'reddit':'https://reddit.com/submit?url=' + url + '&title=' + title,
'renren':'http://widget.renren.com/dialog/share?resourceUrl=' + url + '&srcUrl=' + url + '&title=' + text + '&description=' + desc,
'skype':'https://web.skype.com/share?url=' + url + '&text=' + text,
'sms':'sms:' + phone_number + '?body=' + text,
'surfingbird.ru':'http://surfingbird.ru/share?url=' + url + '&description=' + desc + '&screenshot=' + image + '&title=' + title,
'telegram.me':'https://t.me/share/url?url=' + url + '&text=' + text + '&to=' + phone_number,
'threema':'threema://compose?text=' + text + '&id=' + user_id,
'tumblr':'https://www.tumblr.com/widgets/share/tool?canonicalUrl=' + url + '&title=' + title + '&caption=' + desc + '&tags=' + hash_tags,
'twitter':'https://twitter.com/intent/tweet?url=' + url + '&text=' + text + '&via=' + via + '&hashtags=' + hash_tags,
'vk':'http://vk.com/share.php?url=' + url + '&title=' + title + '&comment=' + desc,
'weibo':'http://service.weibo.com/share/share.php?url=' + url + '&appkey=&title=' + title + '&pic=&ralateUid=',
'xing':'https://www.xing.com/spi/shares/new?url=' + url,
'yahoo':'http://compose.mail.yahoo.com/?to=' + email_address + '&subject=' + title + '&body=' + text,
};
}
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
$(document).ready(function(e){
$('#generate-social-media-urls').click(function(e) {
const socialmedia = GetSocialMediaSites_WithShareLinks_OrderedByPopularity();
const socialmediaurls = GetSocialMediaSiteLinks_WithShareLinks({
'url':$('#input_url').val(),
'title':$('#input_title').val(),
'image':$('#input_image').val(),
'desc':$('#input_description').val(),
'appid':$('#input_appid').val(),
'redirecturl':$('#input_redirect_url').val(),
'via':$('#input_via').val(),
'hashtags':$('#input_hash_tags').val(),
'provider':$('#input_provider').val(),
'language':$('#input_language').val(),
'userid':$('#input_user_id').val(),
'category':$('#input_category').val(),
'phonenumber':$('#input_phone_number').val(),
'emailaddress':$('#input_email_address').val(),
'ccemailaddress':$('#input_cc_email_address').val(),
'bccemailaddress':$('#input_bcc_email_address').val(),
});
var children = [];
for(var i = 0; i < socialmedia.length; i++) {
const socialmedium = socialmedia[i];
children.push(
'<tr><td class="output-label">' +
socialmedium +
'</td><td>' +
socialmediaurls[socialmedium] +
'</td></tr>'
);
}
$('#output-table').empty();
$('#output-table').append(children.join());
return true; // success
});
});
</script>
</body>
</html>
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |