..\..\..\..\src\Hud.Common\Hud.Gis.Web\scripts\Common\sharemenu\ShareMenuController.js File
define([
'dojo/_base/declare',
'dojo/Evented',
'dojo/on',
'dojo/json',
'dojo/dom',
'dojo/dom-class',
'dojo/dom-style',
'dojo/dom-construct',
'dojo/text!./ShareMenuView.html',
'xstyle/css!./ShareMenu.css'
],
function (
declare,
Evented,
on,
JSON,
dom,
domClass,
domStyle,
domConstruct,
ShareMenuView) {
return declare([Evented], {
//properties
options: null,
map: null,
/**
* Constructs a new ShareMenu class.
* A class to encapsulate all the functionality related to sharing a map on social media.
*
* @class Common.ShareMenuController
* @constructor
*
* @example
* var shareMenu = new ShareMenu({ position: "right", config: options.config, canCopyToClipboard: false, map: map });
*/
constructor: function (options) {
this.options = options;
this.map = options.map;
this.position = options.position;
this.initialize(options);
},
/**
* @method initialize
* @param {Object} options
*/
initialize: function (options) {
var _self = this;
var cssClassPosition = 'hrl-position-right';
if (options.position)
cssClassPosition = 'hrl-position-' + options.position;
$('#hrl-sharemenu ul').addClass(cssClassPosition);
domConstruct.place(ShareMenuView, _self.map.id, 'last');
$('#hrl-sharemenu').on('hidden.bs.modal', function () {
_self.emit('share-menu-hidden', {});
});
},
show: function () {
this.prepareShare();
$('#hrl-sharemenu').modal('show');
},
hide: function () {
$('#hrl-sharemenu').modal('hide');
},
prepareShare: function () {
self = this;
var url = self.options.url + "?extent=";
var extent = self.map.extent.xmin + "," + self.map.extent.ymin + "," + self.map.extent.xmax + "," + self.map.extent.ymax;
var layerids = self.map.layerIds;
var basemap = self.map.getBasemap();
var mfDefExp = "";
var visiblelayers = "";
if (!self.map.visible) {
visiblelayers = "";
}
else {
var visibleLayersArr = [];
for (var i = 0; i < layerids.length; i++) {
var _layer = self.map.getLayer(layerids[i]);
//verify the layer is not a basemap
if (_layer.id === basemap) { continue; }
//bug with esri basemaps when a map is loaded from WebMapJson
var isBasemap = false;
for (var x = 0, _len = self.map.basemapLayerIds.length; x < _len; x++) {
if (_layer.id === self.map.basemapLayerIds[x]) {
isBasemap = true;
break;
}
}
if (isBasemap) { continue; }
if (_layer && _layer.visible) { visibleLayersArr.push(layerids[i]); }
if (_layer.id === "mf-properties" && _layer.getDefinitionExpression()) {
mfDefExp = "&mfDefExp=true";
}
}
visiblelayers = visibleLayersArr.join(',');
}
var shareinfo = url + extent + "&visiblelayers=" + visiblelayers + "&basemap=" + basemap + mfDefExp;
var linkTitle = encodeURIComponent("HUD Resource Locator");
var facebookurl, twitterurl;
if ($(window).width() < 768) {
facebookurl = this.options.config.facebookMobileUrl;
twitterurl = this.options.config.twitterMobileUrl + linkTitle;
}
else {
facebookurl = this.options.config.facebookUrl;
twitterurl = this.options.config.twitterUrl + linkTitle;
}
//facebook
self.getShortUrl(shareinfo, function (response) {
var shortUrl = response.data.url;
var url = facebookurl + shortUrl;
dom.byId("hrl-link-facebook").setAttribute("href", url);
});
//twitter
self.getShortUrl(shareinfo, function (response) {
var shortUrl = response.data.url;
var url = twitterurl + "%20" + shortUrl;
dom.byId("hrl-link-twitter").setAttribute("href", url);
});
//google plus
var googleurl = this.options.config.googlePlusUrl + linkTitle
self.getShortUrl(shareinfo, function (response) {
var shortUrl = response.data.url;
var url = googleurl + "%20" + shortUrl;
dom.byId("hrl-link-google").setAttribute("href", url);
});
//email
$("#hrl-link-email").click(function () {
self.getShortUrl(shareinfo, function (response) {
var shortUrl = response.data.url;
var url = 'mailto:?subject=' + encodeURI('I\'ve Shared This Map with You from HUD Resource Locator&body=HUD Resource Locator ' + shortUrl);
dom.byId("hrl-link-email").setAttribute("href", url);
});
});
$("#hrl-link-hyperlink").click(function () {
self.getShortUrl(shareinfo, function (response) {
var shortUrl = response.data.url;
var sharelink = '<a id="sharelink" href="' + shortUrl + '">' + shortUrl + '</a>';
var copyhtml = "";
if (self.options.canCopyToClipboard)
copyhtml = '<span class="copy-group-btn"><button class="btn btn-default share-btn" type="button" id="copy-button"' +
'data-toggle="tooltip" data-placement="bottom"title="Copy to Clipboard">Copy</button></span>';
domConstruct.place(sharelink + copyhtml, 'hrl-link-share', 'only');
$("#hrl-sharemenu").modal("hide");
$("#hrl-link-sharemenu-link").modal("show");
$("#copy-button").click(function () {
var sharelink = dom.byId('sharelink').href;
copyText(sharelink);
});
var copyText = function (text) {
var textArea = document.createElement("textarea");
textArea.value = text;
document.body.appendChild(textArea);
textArea.select();
try {
var successful = document.execCommand('copy');
var msg = successful ? 'successful' : 'unsuccessful';
console.log('Copy was ' + msg);
} catch (err) {
console.log('Oops, unable to copy');
}
document.body.removeChild(textArea);
}
});
});
},
getShortUrl: function (url, callback) {
var timestamp = new Date().getTime();
//return false;
$.getJSON(
this.options.config.urlShortenApiUrl + "&time=" + timestamp,
{
"format": "json",
"apiKey": this.options.config.urlShortenApiKey,
"login": this.options.config.urlShortenApiLogin,
"longUrl": url
},
function (response) {
if (callback) {
callback(response);
}
}
);
}
});
});