diff --git a/dashboard-ui/thirdparty/social-share-kit-1.0.4/.gitignore b/dashboard-ui/thirdparty/social-share-kit-1.0.4/.gitignore
deleted file mode 100644
index b3d3416a6c..0000000000
--- a/dashboard-ui/thirdparty/social-share-kit-1.0.4/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-*~
-._*
-.cache
-.DS_Store
-Thumbs.db
-.idea
diff --git a/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/css/social-share-kit.css b/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/css/social-share-kit.css
new file mode 100644
index 0000000000..dfa18d9b8e
--- /dev/null
+++ b/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/css/social-share-kit.css
@@ -0,0 +1,7 @@
+/*!
+ * Social Share Kit v1.0.3 (http://socialsharekit.com)
+ * Copyright 2015 Social Share Kit / Kaspars Sprogis.
+ * Licensed under Creative Commons Attribution-NonCommercial 3.0 license:
+ * https://github.com/darklow/social-share-kit/blob/master/LICENSE
+ * ---
+ */@font-face{font-family:'social-share-kit';src:url('../fonts/social-share-kit.eot');src:url('../fonts/social-share-kit.eot?#iefix') format('embedded-opentype'),url('../fonts/social-share-kit.woff') format('woff'),url('../fonts/social-share-kit.ttf') format('truetype'),url('../fonts/social-share-kit.svg#social-share-kit') format('svg');font-weight:normal;font-style:normal}.ssk:before{display:inline-block;font-family:"social-share-kit" !important;font-style:normal !important;font-weight:normal !important;font-variant:normal !important;text-transform:none !important;speak:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ssk-facebook:before{content:"a";text-indent:4px;margin-right:-4px}.ssk-twitter:before{content:"b"}.ssk-google-plus:before{content:"c"}.ssk-email:before{content:"d";top:-1px;position:relative}.ssk-pinterest:before{content:"e"}.ssk-tumblr:before{content:"f"}.ssk-linkedin:before{content:"g"}.ssk-github:before{content:"h"}.ssk-vk:before{content:"i"}.ssk-instagram:before{content:"j"}.ssk-amazon:before{content:"k"}.ssk-skype:before{content:"s"}.ssk-youtube:before{content:"x"}.ssk-vimeo:before{content:"u"}.ssk-ebay:before{content:"p"}.ssk-apple:before{content:"l"}.ssk-behance:before{content:"q"}.ssk-dribble:before{content:"n"}.ssk-android:before{content:"o"}.ssk-whatsapp:before{content:"m"}.ssk-reddit:before{content:"r"}.ssk-reddit2:before{content:"t"}.ssk{background-color:#757575;color:white;display:inline-block;font-size:22px;line-height:1px;margin-right:2px;margin-bottom:2px;padding:7px;text-align:center;text-decoration:none;transition:background-color .1s;-webkit-transition:background-color .1s;-moz-transition:background-color .1s;-ms-transition:background-color .1s;-o-transition:background-color .1s}.ssk:before,.ssk .glyphicon,.ssk .fa{position:relative;font-size:22px;top:0;vertical-align:middle}.ssk.ssk-xs,.ssk-xs>.ssk{padding:4px}.ssk.ssk-xs:before,.ssk-xs>.ssk:before,.ssk.ssk-xs .glyphicon,.ssk-xs>.ssk .glyphicon,.ssk.ssk-xs .fa,.ssk-xs>.ssk .fa{font-size:15px}.ssk.ssk-sm,.ssk-sm>.ssk{padding:5px}.ssk.ssk-sm:before,.ssk-sm>.ssk:before,.ssk.ssk-sm .glyphicon,.ssk-sm>.ssk .glyphicon,.ssk.ssk-sm .fa,.ssk-sm>.ssk .fa{font-size:20px}.ssk.ssk-lg,.ssk-lg>.ssk{padding:9px}.ssk.ssk-lg:before,.ssk-lg>.ssk:before,.ssk.ssk-lg .glyphicon,.ssk-lg>.ssk .glyphicon,.ssk.ssk-lg .fa,.ssk-lg>.ssk .fa{font-size:28px}.ssk:last-child{margin-right:0}.ssk:hover{background-color:#424242}.ssk:hover,.ssk:focus{color:#fff;text-decoration:none}.ssk.ssk-round,.ssk-round .ssk{border-radius:50%}.ssk.ssk-round:before,.ssk-round .ssk:before{text-indent:0;margin-right:0}.ssk.ssk-rounded,.ssk-rounded .ssk{border-radius:15%}.ssk.ssk-icon{color:#757575;padding:2px;font-size:24px}.ssk.ssk-icon,.ssk.ssk-icon:hover{background-color:transparent}.ssk.ssk-icon:hover{color:#424242}.ssk.ssk-icon.ssk-xs,.ssk-xs>.ssk.ssk-icon{font-size:16px}.ssk.ssk-icon.ssk-sm,.ssk-sm>.ssk.ssk-icon{font-size:20px}.ssk.ssk-icon.ssk-lg,.ssk-lg>.ssk.ssk-icon{font-size:28px}.ssk.ssk-text{overflow:hidden;font-size:17px;line-height:normal;padding-right:10px}.ssk.ssk-text:before,.ssk.ssk-text .glyphicon,.ssk.ssk-text .fa{margin:-7px 10px -7px -7px;padding:7px;background-color:rgba(0,0,0,0.15);vertical-align:bottom;text-indent:0}.ssk-block .ssk.ssk-text{display:block;margin-right:0;text-align:left}.ssk.ssk-text.ssk-xs,.ssk-xs>.ssk.ssk-text{font-size:12px;padding-right:6px}.ssk.ssk-text.ssk-xs:before,.ssk-xs>.ssk.ssk-text:before,.ssk.ssk-text.ssk-xs .glyphicon,.ssk-xs>.ssk.ssk-text .glyphicon,.ssk.ssk-text.ssk-xs .fa,.ssk-xs>.ssk.ssk-text .fa{margin:-4px 6px -4px -4px;padding:4px}.ssk.ssk-text.ssk-sm,.ssk-sm>.ssk.ssk-text{font-size:16px;padding-right:7px}.ssk.ssk-text.ssk-sm:before,.ssk-sm>.ssk.ssk-text:before,.ssk.ssk-text.ssk-sm .glyphicon,.ssk-sm>.ssk.ssk-text .glyphicon,.ssk.ssk-text.ssk-sm .fa,.ssk-sm>.ssk.ssk-text .fa{margin:-5px 7px -5px -5px;padding:5px}.ssk.ssk-text.ssk-lg,.ssk-lg>.ssk.ssk-text{font-size:22px;padding-right:13px}.ssk.ssk-text.ssk-lg:before,.ssk-lg>.ssk.ssk-text:before,.ssk.ssk-text.ssk-lg .glyphicon,.ssk-lg>.ssk.ssk-text .glyphicon,.ssk.ssk-text.ssk-lg .fa,.ssk-lg>.ssk.ssk-text .fa{margin:-9px 13px -9px -9px;padding:9px}.ssk-group,.ssk-sticky{font-size:0}.ssk-sticky{top:0;position:fixed;z-index:2000}.ssk-sticky .ssk{transition:padding .1s ease-out;-webkit-transition:padding .1s ease-out;-moz-transition:padding .1s ease-out;-ms-transition:padding .1s ease-out;-o-transition:padding .1s ease-out;margin:0}.ssk-sticky.ssk-left .ssk,.ssk-sticky.ssk-right .ssk{display:block;clear:both}.ssk-sticky.ssk-left.ssk-center,.ssk-sticky.ssk-right.ssk-center{top:50%;transform:translateY(-50%);-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%)}.ssk-sticky.ssk-left{left:0}.ssk-sticky.ssk-left .ssk{float:left}.ssk-sticky.ssk-left .ssk:hover{padding-left:15px}.ssk-sticky.ssk-right{right:0}.ssk-sticky.ssk-right .ssk{float:right}.ssk-sticky.ssk-right .ssk:hover{padding-right:15px}.ssk-sticky.ssk-bottom{font-size:0;top:auto;bottom:0}.ssk-sticky.ssk-bottom.ssk-center{left:50%;right:auto;transform:translateX(-50%);-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%)}.ssk-sticky.ssk-bottom .ssk{vertical-align:bottom}.ssk-sticky.ssk-bottom .ssk:hover{padding-bottom:15px}.ssk-sticky.ssk-round.ssk-xs .ssk:hover{padding:8px}.ssk-sticky.ssk-round.ssk-sm .ssk:hover{padding:9px}.ssk-sticky.ssk-round .ssk:hover{padding:11px}.ssk-sticky.ssk-round.ssk-lg .ssk:hover{padding:13px}@media (max-width:767px){.ssk-sticky{display:none}}.ssk-count{padding-top:20px}.ssk-count .ssk{position:relative}.ssk-count .ssk-num{border-radius:4px;color:#8f8f8f;background-color:rgba(50,50,50,0.03);display:block;font-size:12px;left:0;line-height:20px;position:absolute;right:0;text-align:center;top:-20px}.ssk-count.ssk-sticky{padding-top:0}.ssk-count.ssk-sticky.ssk-left .ssk-num,.ssk-count.ssk-sticky.ssk-right .ssk-num{top:20%;background-color:transparent}.ssk-count.ssk-sticky.ssk-left .ssk-num{left:100%;margin-left:5px}.ssk-count.ssk-sticky.ssk-right .ssk-num{right:115%;margin-left:-100%;text-align:right}.ssk-facebook{background-color:#255c95}.ssk-grayscale>.ssk-facebook{background-color:#757575}.ssk-facebook:hover{background-color:#1b436c}.ssk-facebook:hover{background-color:#1b436c}.ssk-grayscale>.ssk-facebook:hover{background-color:#255c95}.ssk-facebook.ssk-icon{color:#255c95}.ssk-facebook.ssk-icon:hover{color:#1b436c}.ssk-facebook.ssk-icon:before{text-indent:0;margin-right:0}.ssk-twitter{background-color:#00b4e0}.ssk-grayscale>.ssk-twitter{background-color:#757575}.ssk-twitter:hover{background-color:#008bad}.ssk-twitter:hover{background-color:#008bad}.ssk-grayscale>.ssk-twitter:hover{background-color:#00b4e0}.ssk-twitter.ssk-icon{color:#00b4e0}.ssk-twitter.ssk-icon:hover{color:#008bad}.ssk-google-plus{background-color:#f1403a}.ssk-grayscale>.ssk-google-plus{background-color:#757575}.ssk-google-plus:hover{background-color:#e81810}.ssk-google-plus:hover{background-color:#e81810}.ssk-grayscale>.ssk-google-plus:hover{background-color:#f1403a}.ssk-google-plus.ssk-icon{color:#f1403a}.ssk-google-plus.ssk-icon:hover{color:#e81810}.ssk-pinterest{background-color:#cb2027}.ssk-grayscale>.ssk-pinterest{background-color:#757575}.ssk-pinterest:hover{background-color:#9f191f}.ssk-pinterest:hover{background-color:#9f191f}.ssk-grayscale>.ssk-pinterest:hover{background-color:#cb2027}.ssk-pinterest.ssk-icon{color:#cb2027}.ssk-pinterest.ssk-icon:hover{color:#9f191f}.ssk-tumblr{background-color:#395773}.ssk-grayscale>.ssk-tumblr{background-color:#757575}.ssk-tumblr:hover{background-color:#283d51}.ssk-tumblr:hover{background-color:#283d51}.ssk-grayscale>.ssk-tumblr:hover{background-color:#395773}.ssk-tumblr.ssk-icon{color:#395773}.ssk-tumblr.ssk-icon:hover{color:#283d51}.ssk-email{background-color:#757575}.ssk-grayscale>.ssk-email{background-color:#757575}.ssk-email:hover{background-color:#5b5b5b}.ssk-email:hover{background-color:#5b5b5b}.ssk-grayscale>.ssk-email:hover{background-color:#757575}.ssk-grayscale>.ssk-email:hover{background-color:#5b5b5b}.ssk-email.ssk-icon{color:#757575}.ssk-email.ssk-icon:hover{color:#5b5b5b}.ssk-vk{background-color:#54769a}.ssk-grayscale>.ssk-vk{background-color:#757575}.ssk-vk:hover{background-color:#425d79}.ssk-vk:hover{background-color:#425d79}.ssk-grayscale>.ssk-vk:hover{background-color:#54769a}.ssk-vk.ssk-icon{color:#54769a}.ssk-vk.ssk-icon:hover{color:#425d79}.ssk-linkedin{background-color:#1c87bd}.ssk-grayscale>.ssk-linkedin{background-color:#757575}.ssk-linkedin:hover{background-color:#156791}.ssk-linkedin:hover{background-color:#156791}.ssk-grayscale>.ssk-linkedin:hover{background-color:#1c87bd}.ssk-linkedin.ssk-icon{color:#1c87bd}.ssk-linkedin.ssk-icon:hover{color:#156791}.ssk-whatsapp{background-color:#34af23}.ssk-grayscale>.ssk-whatsapp{background-color:#757575}.ssk-whatsapp:hover{background-color:#27851a}.ssk-whatsapp:hover{background-color:#27851a}.ssk-grayscale>.ssk-whatsapp:hover{background-color:#34af23}.ssk-whatsapp.ssk-icon{color:#34af23}.ssk-whatsapp.ssk-icon:hover{color:#27851a}.ssk-reddit{background-color:#5f99cf}.ssk-grayscale>.ssk-reddit{background-color:#757575}.ssk-reddit:hover{background-color:#3a80c1}.ssk-reddit:hover{background-color:#3a80c1}.ssk-grayscale>.ssk-reddit:hover{background-color:#5f99cf}.ssk-reddit.ssk-icon{color:#5f99cf}.ssk-reddit.ssk-icon:hover{color:#3a80c1}.ssk-reddit2{background-color:#5f99cf}.ssk-grayscale>.ssk-reddit2{background-color:#757575}.ssk-reddit2:hover{background-color:#3a80c1}.ssk-reddit2:hover{background-color:#3a80c1}.ssk-grayscale>.ssk-reddit2:hover{background-color:#5f99cf}.ssk-reddit2.ssk-icon{color:#5f99cf}.ssk-reddit2.ssk-icon:hover{color:#3a80c1}.ssk-turquoise{background-color:#1abc9c}.ssk-turquoise:hover{background-color:#148f77}.ssk-emerald{background-color:#2ecc71}.ssk-emerald:hover{background-color:#25a25a}.ssk-peter-river{background-color:#3498db}.ssk-peter-river:hover{background-color:#217dbb}.ssk-belize-hole{background-color:#2980b9}.ssk-belize-hole:hover{background-color:#20638f}.ssk-amethyst{background-color:#9b59b6}.ssk-amethyst:hover{background-color:#804399}.ssk-wisteria{background-color:#8e44ad}.ssk-wisteria:hover{background-color:#703688}.ssk-wet-asphalt{background-color:#34495e}.ssk-wet-asphalt:hover{background-color:#222f3d}.ssk-midnight-blue{background-color:#2c3e50}.ssk-midnight-blue:hover{background-color:#1a242f}.ssk-green-sea{background-color:#16a085}.ssk-green-sea:hover{background-color:#107360}.ssk-nephritis{background-color:#27ae60}.ssk-nephritis:hover{background-color:#1e8449}.ssk-sunflower{background-color:#f1c40f}.ssk-sunflower:hover{background-color:#c29d0b}.ssk-orange{background-color:#f39c12}.ssk-orange:hover{background-color:#c87f0a}.ssk-carrot{background-color:#e67e22}.ssk-carrot:hover{background-color:#bf6516}.ssk-pumpkin{background-color:#d35400}.ssk-pumpkin:hover{background-color:#a04000}.ssk-alizarin{background-color:#e74c3c}.ssk-alizarin:hover{background-color:#d62c1a}.ssk-pomegranate{background-color:#c0392b}.ssk-pomegranate:hover{background-color:#962d22}.ssk-clouds{background-color:#cfd9db}.ssk-clouds:hover{background-color:#b1c2c6}.ssk-concrete{background-color:#95a5a6}.ssk-concrete:hover{background-color:#798d8f}.ssk-silver{background-color:#bdc3c7}.ssk-silver:hover{background-color:#a1aab0}.ssk-asbestos{background-color:#7f8c8d}.ssk-asbestos:hover{background-color:#667273}.ssk-dark-gray{background-color:#555}.ssk-dark-gray:hover{background-color:#3b3b3b}.ssk-black{background-color:#333}.ssk-black:hover{background-color:#1a1a1a}
\ No newline at end of file
diff --git a/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/fonts/social-share-kit.eot b/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/fonts/social-share-kit.eot
new file mode 100644
index 0000000000..0adc052065
Binary files /dev/null and b/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/fonts/social-share-kit.eot differ
diff --git a/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/fonts/social-share-kit.svg b/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/fonts/social-share-kit.svg
new file mode 100644
index 0000000000..910cdcad41
--- /dev/null
+++ b/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/fonts/social-share-kit.svg
@@ -0,0 +1,32 @@
+
+
+
diff --git a/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/fonts/social-share-kit.ttf b/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/fonts/social-share-kit.ttf
new file mode 100644
index 0000000000..d3547e18e5
Binary files /dev/null and b/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/fonts/social-share-kit.ttf differ
diff --git a/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/fonts/social-share-kit.woff b/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/fonts/social-share-kit.woff
new file mode 100644
index 0000000000..12cc6b542f
Binary files /dev/null and b/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/fonts/social-share-kit.woff differ
diff --git a/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/js/social-share-kit.js b/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/js/social-share-kit.js
new file mode 100644
index 0000000000..3f605b157e
--- /dev/null
+++ b/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/js/social-share-kit.js
@@ -0,0 +1,338 @@
+/*!
+ * Social Share Kit v1.0.3 (http://socialsharekit.com)
+ * Copyright 2015 Social Share Kit / Kaspars Sprogis.
+ * Licensed under Creative Commons Attribution-NonCommercial 3.0 license:
+ * https://github.com/darklow/social-share-kit/blob/master/LICENSE
+ * ---
+ */
+var SocialShareKit = (function () {
+ var els, options, supportsShare, urlsToCount = {}, sep = '*|*';
+
+ function init(opts) {
+ options = opts || {};
+ supportsShare = /(twitter|facebook|google-plus|pinterest|tumblr|vk|linkedin|email)/;
+ ready(function () {
+ els = $(options.selector || '.ssk');
+ if (!els.length)
+ return;
+
+ each(els, function (el) {
+ var network = elSupportsShare(el), uniqueKey;
+ if (!network) {
+ return;
+ }
+ removeEventListener(el, 'click', onClick);
+ addEventListener(el, 'click', onClick);
+
+ // Gather icons with share counts
+ if (el.parentNode.className.indexOf('ssk-count') !== -1) {
+ //networksToCount.push(network);
+ network = network[0];
+ uniqueKey = network + sep + getShareUrl(network, el);
+ if (!(uniqueKey in urlsToCount)) {
+ urlsToCount[uniqueKey] = [];
+ }
+ urlsToCount[uniqueKey].push(el);
+ }
+ });
+
+ processShareCount();
+ });
+ }
+
+ function ready(fn) {
+ if (document.readyState != 'loading') {
+ fn();
+ } else if (document.addEventListener) {
+ document.addEventListener('DOMContentLoaded', fn);
+ } else {
+ document.attachEvent('onreadystatechange', function () {
+ if (document.readyState != 'loading')
+ fn();
+ });
+ }
+ }
+
+ function $(selector) {
+ return document.querySelectorAll(selector);
+ }
+
+ function each(elements, fn) {
+ for (var i = 0; i < elements.length; i++)
+ fn(elements[i], i);
+ }
+
+ function addEventListener(el, eventName, handler) {
+ if (el.addEventListener) {
+ el.addEventListener(eventName, handler);
+ } else {
+ el.attachEvent('on' + eventName, function () {
+ handler.call(el);
+ });
+ }
+ }
+
+ function removeEventListener(el, eventName, handler) {
+ if (el.removeEventListener)
+ el.removeEventListener(eventName, handler);
+ else
+ el.detachEvent('on' + eventName, handler);
+ }
+
+ function elSupportsShare(el) {
+ return el.className.match(supportsShare);
+ }
+
+ function onClick(e) {
+ var target = preventDefault(e),
+ match = elSupportsShare(target), url;
+ if (!match)
+ return;
+
+ url = getUrl(match[0], target);
+ if (!url)
+ return;
+ if (match[0] != 'email') {
+ winOpen(url);
+ } else {
+ document.location = url;
+ }
+ }
+
+ function preventDefault(e) {
+ var evt = e || window.event; // IE8 compatibility
+ if (evt.preventDefault) {
+ evt.preventDefault();
+ } else {
+ evt.returnValue = false;
+ evt.cancelBubble = true;
+ }
+ return evt.target || evt.srcElement;
+ }
+
+ function winOpen(url) {
+ var width = 575, height = 400,
+ left = (document.documentElement.clientWidth / 2 - width / 2),
+ top = (document.documentElement.clientHeight - height) / 2,
+ opts = 'status=1,resizable=yes' +
+ ',width=' + width + ',height=' + height +
+ ',top=' + top + ',left=' + left;
+ win = window.open(url, '', opts);
+ win.focus();
+ return win;
+ }
+
+ function getUrl(network, el) {
+ var url, dataOpts = getDataOpts(network, el),
+ shareUrl = getShareUrl(network, el, dataOpts),
+ shareUrlEnc = encodeURIComponent(shareUrl),
+ title = typeof dataOpts['title'] !== 'undefined' ? dataOpts['title'] : getTitle(network),
+ text = typeof dataOpts['text'] !== 'undefined' ? dataOpts['text'] : getText(network),
+ image = dataOpts['image'], via = dataOpts['via'];
+ switch (network) {
+ case 'facebook':
+ url = 'https://www.facebook.com/share.php?u=' + shareUrlEnc;
+ break;
+ case 'twitter':
+ url = 'https://twitter.com/share?url=' + shareUrlEnc +
+ '&text=' + encodeURIComponent(title + (text && title ? ' - ' : '') + text);
+ via = via || getMetaContent('twitter:site');
+ if (via)
+ url += '&via=' + via.replace('@', '');
+ break;
+ case 'google-plus':
+ url = 'https://plus.google.com/share?url=' + shareUrlEnc;
+ break;
+ case 'pinterest':
+ url = 'http://pinterest.com/pin/create/button/?url=' + shareUrlEnc +
+ '&description=' + encodeURIComponent(text);
+ image = image || getMetaContent('og:image');
+ if (image)
+ url += '&media=' + encodeURIComponent(image);
+ break;
+ case 'tumblr':
+ url = 'http://www.tumblr.com/share/link?url=' + shareUrlEnc +
+ '&name=' + encodeURIComponent(title) +
+ '&description=' + encodeURIComponent(text);
+ break;
+ case 'linkedin':
+ url = 'http://www.linkedin.com/shareArticle?mini=true&url=' + shareUrlEnc +
+ '&title=' + encodeURIComponent(title) +
+ '&summary=' + encodeURIComponent(text);
+ break;
+ case 'vk':
+ url = 'http://vkontakte.ru/share.php?url=' + shareUrlEnc;
+ break;
+ case 'email':
+ url = 'mailto:?subject=' + encodeURIComponent(title) +
+ '&body=' + encodeURIComponent(title + '\n' + shareUrl + '\n\n' + text + '\n');
+ break;
+ }
+ return url;
+ }
+
+ function getShareUrl(network, el, dataOpts) {
+ dataOpts = dataOpts || getDataOpts(network, el);
+ return dataOpts['url'] || window.location.href;
+ }
+
+ function getTitle(network) {
+ var title;
+ if (network == 'twitter')
+ title = getMetaContent('twitter:title');
+ return title || document.title;
+ }
+
+ function getText(network) {
+ var text;
+ if (network == 'twitter')
+ text = getMetaContent('twitter:description');
+ return text || getMetaContent('description');
+ }
+
+ function getMetaContent(tagName, attr) {
+ var text, tag = $('meta[' + (attr ? attr : tagName.indexOf('og:') === 0 ? 'property' : 'name') + '="' + tagName + '"]');
+ if (tag.length) {
+ text = tag[0].getAttribute('content') || '';
+ }
+ return text || ''
+ }
+
+ function getDataOpts(network, el) {
+ var validOpts = ['url', 'title', 'text', 'image'],
+ opts = {}, optValue, optKey, dataKey, a, parent = el.parentNode;
+ network == 'twitter' && validOpts.push('via');
+ for (a in validOpts) {
+ optKey = validOpts[a];
+ dataKey = 'data-' + optKey;
+ optValue = el.getAttribute(dataKey) || parent.getAttribute(dataKey) ||
+ (options[network] && typeof options[network][optKey] != 'undefined' ? options[network][optKey] : options[optKey]);
+ if (typeof optValue != 'undefined') {
+ opts[optKey] = optValue;
+ }
+ }
+ return opts;
+ }
+
+ function processShareCount() {
+ var a, ref;
+ for (a in urlsToCount) {
+ ref = a.split(sep);
+ (function (els) {
+ getCount(ref[0], ref[1], function (cnt) {
+ for (var c in els)
+ addCount(els[c], cnt);
+ });
+ })(urlsToCount[a]);
+ }
+ }
+
+ function addCount(el, cnt) {
+ var newEl = document.createElement('div');
+ newEl.innerHTML = cnt;
+ newEl.className = 'ssk-num';
+ el.appendChild(newEl);
+ }
+
+ function getCount(network, shareUrl, onReady) {
+ var url, parseFunc, body,
+ shareUrlEnc = encodeURIComponent(shareUrl);
+ switch (network) {
+ case 'facebook':
+ url = 'http://graph.facebook.com/?id=' + shareUrlEnc;
+ parseFunc = function (r) {
+ return onReady(r.shares ? r.shares : 0);
+ };
+ break;
+ case 'twitter':
+ url = 'http://cdn.api.twitter.com/1/urls/count.json?url=' + shareUrlEnc;
+ parseFunc = function (r) {
+ return onReady(r.count);
+ };
+ break;
+ case 'google-plus':
+ url = 'https://clients6.google.com/rpc?key=AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ';
+ body = "[{\"method\":\"pos.plusones.get\",\"id\":\"p\"," +
+ "\"params\":{\"id\":\"" + shareUrl + "\",\"userId\":\"@viewer\",\"groupId\":\"@self\",\"nolog\":true}," +
+ "\"jsonrpc\":\"2.0\",\"key\":\"p\",\"apiVersion\":\"v1\"}]";
+ parseFunc = function (r) {
+ r = JSON.parse(r);
+ if (r.length) {
+ return onReady(r[0].result.metadata.globalCounts.count);
+ }
+ };
+ ajax(url, parseFunc, body);
+ return;
+ case 'linkedin':
+ url = 'http://www.linkedin.com/countserv/count/share?url=' + shareUrlEnc;
+ parseFunc = function (r) {
+ return onReady(r.count);
+ };
+ break;
+ case 'pinterest':
+ url = 'http://api.pinterest.com/v1/urls/count.json?url=' + shareUrlEnc;
+ parseFunc = function (r) {
+ return onReady(r.count);
+ };
+ break;
+ case 'vk':
+ url = 'http://vk.com/share.php?act=count&url=' + shareUrlEnc;
+ parseFunc = function (r) {
+ return onReady(r);
+ };
+ break;
+ }
+ url && parseFunc && JSONPRequest(network, url, parseFunc, body);
+ }
+
+ function ajax(url, callback, body) {
+ var request = new XMLHttpRequest();
+ request.onreadystatechange = function () {
+ if (this.readyState === 4) {
+ if (this.status >= 200 && this.status < 400) {
+ callback(this.responseText);
+ }
+ }
+ };
+ request.open('POST', url, true);
+ request.setRequestHeader('Content-Type', 'application/json');
+ request.send(body);
+ }
+
+ function JSONPRequest(network, url, callback) {
+ var callbackName = 'cb_' + network + '_' + Math.round(100000 * Math.random()),
+ script = document.createElement('script');
+ window[callbackName] = function (data) {
+ try { // IE8
+ delete window[callbackName];
+ } catch (e) {
+ }
+ document.body.removeChild(script);
+ callback(data);
+ };
+ if (network == 'vk') {
+ window['VK'] = {
+ Share: {
+ count: function (a, b) {
+ window[callbackName](b);
+ }
+ }
+ };
+ } else if (network == 'google-plus') {
+ window['services'] = {
+ gplus: {
+ cb: window[callbackName]
+ }
+ };
+ }
+ script.src = url + (url.indexOf('?') >= 0 ? '&' : '?') + 'callback=' + callbackName;
+ document.body.appendChild(script);
+ return true;
+ }
+
+ return {
+ init: init
+ };
+})();
+
+window.SocialShareKit = SocialShareKit;
diff --git a/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/js/social-share-kit.min.js b/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/js/social-share-kit.min.js
new file mode 100644
index 0000000000..d105532f61
--- /dev/null
+++ b/dashboard-ui/thirdparty/social-share-kit-1.0.4/dist/js/social-share-kit.min.js
@@ -0,0 +1,8 @@
+/*!
+ * Social Share Kit v1.0.3 (http://socialsharekit.com)
+ * Copyright 2015 Social Share Kit / Kaspars Sprogis.
+ * Licensed under Creative Commons Attribution-NonCommercial 3.0 license:
+ * https://github.com/darklow/social-share-kit/blob/master/LICENSE
+ * ---
+ */
+;var SocialShareKit=(function(){var f,d,v,t={},q="*|*";function x(A){d=A||{};v=/(twitter|facebook|google-plus|pinterest|tumblr|vk|linkedin|email)/;n(function(){f=g(d.selector||".ssk");if(!f.length){return}e(f,function(C){var D=s(C),B;if(!D){return}r(C,"click",h);p(C,"click",h);if(C.parentNode.className.indexOf("ssk-count")!==-1){D=D[0];B=D+q+z(D,C);if(!(B in t)){t[B]=[]}t[B].push(C)}});j()})}function n(A){if(document.readyState!="loading"){A()}else{if(document.addEventListener){document.addEventListener("DOMContentLoaded",A)}else{document.attachEvent("onreadystatechange",function(){if(document.readyState!="loading"){A()}})}}}function g(A){return document.querySelectorAll(A)}function e(C,B){for(var A=0;A=200&&this.status<400){D(this.responseText)}}};C.open("POST",B,true);C.setRequestHeader("Content-Type","application/json");C.send(A)}function b(C,B,E){var D="cb_"+C+"_"+Math.round(100000*Math.random()),A=document.createElement("script");window[D]=function(F){try{delete window[D]}catch(G){}document.body.removeChild(A);E(F)};if(C=="vk"){window.VK={Share:{count:function(G,F){window[D](F)}}}}else{if(C=="google-plus"){window.services={gplus:{cb:window[D]}}}}A.src=B+(B.indexOf("?")>=0?"&":"?")+"callback="+D;document.body.appendChild(A);return true}return{init:x}})();window.SocialShareKit=SocialShareKit;
\ No newline at end of file