Robert...just fyi, this looks like the same issue I was having with the BaseMaps a while back...sorry I never followed up...on to other things again. The one thing that I would mention, in case it helps, is I do not use the standard esri base maps but one with our standard projection (wkid 3338). It appears that Tapas uses custom basemaps also. Maybe that is the common issue? Although Glenn looks to use a esri basemap. just adding my two cents.
The proper function of the widget is not suppose to show basemaps whose WKID is not the same as the WebMap that you have selected in WAB. In the last version of this widget I added some code to prevent this widget from adding empty object {},{} to the config (the issue was in my widget and the OTB widget) but I made a mistake in my code and it prevented all basemaps from showing. In the latest version 1.2.0.2 it functions properly. I have tested with custom basemaps using other WKIDs than 102100 and even tested the fact that you can set your Orgs default basemap in AGOL and not show esri basemaps at all. I have defined a custom basemap group in my Org and added my State Plane basemaps to that group and also set my orgs default base map to one of those StatePlane basemaps and my widget works great (the latest version).
Thanks Robert. I noticed you had put out a new version about a minute after I hit the above "Add comment". I added the update notification to the resource list.....again. great work as always!
This tool is great, and I appreciate the hours and skill put into it.
I might have missed something, but how do you get the selection to show up as a different color or fill? All mine does is seem to thicken just a bit compared to the other features.
Are you using symbology from the config or the server? If you choose from the config then you have control of the result symbology if you choose server than the results will be drawn using the symbology specified by the server and if the layer already exists in the map distinguishing between the two will be difficult.
The Basemap Widget header inherits the Style Color only after I open your Identify or Enhanced Search Widget.
On the Dart Theme, when you open the Basemap Widget initially, there is some extra space on the top section.
When I drag the lower right corner to widen the widget just a little, the spacing becomes perfect.
I like how the 2 columns of thumbnails fit the narrower width of the Box Theme.
It is a little tricky to use your Enhanced Basemap Gallery on a Smartphone.
Here I am testing the Jewelry Box Theme on an iPhone 6.
I can easily switch basemaps in Portrait mode.
However, in the Landscape mode I see some extra space in the top section.
Here I am using the Foldable Theme.
It works perfectly fine in Portrait mode.
I see the same issue with extra space when rotated to Landscape mode.
After a lot of tries, I did manage to get a mashup in Portrait mode.
However, no matter how much I tried, I could never get a mashup in Landscape mode.
I am trying to hit that tiny green plus symbol.
It always switches my basemap.
I guess if the area was larger, it would be easier to differentiate between a tap on the middle to switch basemaps, and a tap on the upper left corner to make a mashup.
But don't worry about this. I doubt anyone would be using a Smarthphone to use such an application. A web app of this much complexity is meant to be used on a Desktop or Tablet.
On an iPad, it is much easier to hit that green plus sign to make a mashup, although it would be wonderful if you could make the target area larger.
I totally missed that step. I did not have it set to "from config". That solved the problem. I appreciate the help. Does this widget work with secured services?
You have made them close enough in functionality to the point where they are interchangeable.
The Web AppBuilder version has the added advantage of running on Tablets and Smartphones that respond to touch sporting a fully responsive design that collapses gracefully to fit the device. It also works on iOS devices where Flash is banned.
We were completely at a loss, when support for the Flex API was dropped.
You came to the rescue!
Nobody else had the knowledge on how to migrate your complex 8000 lines of ActionScript code on your eSearch Widget to make it work within the JavaScript API.
I had one request.
On the Flex version you had a PointBuffer Widget.
It was so easy to drop a few points, enter the buffer distance as a comma separated list, and with one mouse click you got a multi-ring buffer with the option to dissolve them.
You could immediately get a visual feedback to see what entities were within the buffer zones.
In addition, the output of the PointBuffer Widget could be used as an Input to the Enhanced Search Widget.
You could open the Enhanced Search Widget, and within the Graphical Search Tab, the option to use existing buffer graphics would be activated.
You could then proceed to set your Search Layer and find for example all the Fire Stations within these buffers.
It would be wonderful if you could bring this PointBuffer widget to the Web AppBuilder and tie it to your Enhanced Search Widget.
This has more to do with the default behavior of how Moxie's Team has coded the Attribute Table Widget for the Web AppBuilder.
However, I wanted to run this by you anyway to see if you can give us a solution.
I am adding my own Field Aliases, and I would like them to show up in the Attribute Table.
I am editing the Search Layer = PV Evac Sectors
The Name of the field = MILE_
I am entering an Alias Name = Perimeter in Miles
When I use your eSearch Widget to select a feature, the Alias Name is honored in the eSearch Popup. This is good.
Now I am Enabling the Pop-up option for:
Search Results Layer = PV Evac Sectors
within the Layer List Widget.
When I click on a selection, the Layer List Pop-up also honors the Alias Name.
This is great!
However, when I Open the Attribute Table from the Layer List choices like so:
I see that the Attribute Table does not display my Alias Name = Perimeter in Miles.
It shows the Field Name = MILE_
I know that you do not have much control over the ESRI Attribute Table Widget.
But is it possible to write a wrapper code so that the Attribute Table is forced to use the Alias Names, rather than the Field Names it is reading from the map service?
It would be even better if Moxie's Team changes the code so that the Attribute Table will always display the Alias Name by default.
Another enhancement for Moxie's Team would be to hide these fields in the Attribute Table by default
OBJECTID
SHAPE
SHAPE_Length
SHAPE_Area
The end user seldom needs to see these, and it clutters up the display.
In the Flex version, this is not an issue as you have complete control over the Data Grid.
The Alias Names are honored in the Data Grid.
Also, with the Data Grid in Flex, you had a neat option to display the Sum Total of any column.
It is hard to let go of the Flex version. You had tirelessly worked on this platform for more than 6 years and included so many useful enhancements.
The Flex version has a slicker look and feels more robust on the desktop environment.
I have downloaded the new version of Web App builder and placed the enhanced search widget 1.2.05 in the \client\stemapp\widgets folder of arcgis-web-appbuilder-1.2. I start a new app and and when i try to configure the enhanced search widget i get errors. when i add my search URL the update search layer prompt looks ok, when i get to to add expression value popup i can't make the expression value it's just blank. I can't click on the box for a drop down.
I am i missing something or doing something wrong?
I looks like there was a problem with communicating with your service url even before you got to the add expression dialog. Notice the red explanation mark which should be a green check mark.
I did see that, so after i got the error i closed out of Web builder and restarted it. At first when i input the search url it looks fine but once i click on Add Expression Value and see that i can't create the expression i hit cancel then i get the red explanation. So i again closed out of web appbuilder and restarted the program but this time i click on edit "Louisville Zoning" layer i get the same error...
I have delete the arcgis-web-appbuilder-1.2 folder and re-down loaded arcgis-web-appbuilder-1.2 zip and the and unzip it and placed the enhanced search widget 1.2.05 in the \client\stemapp\widgets folder after all that i still have this issue...
I had the same issue. What I did was swop my http services for https secure services and the problem was fixed. I can't explain to you it worked, I just know it did. Why don't you give it a try.
nice to hear some one else is having this issue. Can you give a little more detail on how you swop the http for https? are you referring to the App Registration Application URL: or the Redirect URI:?
I mean the search url, which is the service you intend to search. As I said, I am not sure why it made a difference in my case. Just change the http in your url to https. Leaving the rest of the url as is. Hope I make sense.
Good news is I can change the field aliases for the attribute table widget to match the aliases that are configured in the eSearch config and fields that are not configured are not shown in the AT widget. I am still looking into the Sum field though. Just FYI
If you could force the Field Names in the ESRI Attribute Table to match the Alias Names that I am configuring through your eSearch Config, that would be splendid.
In addition, if the fields that are not configured in the eSearch Config, are not displayed in the ESRI Attribute Table, it would be the icing on the cake.
This is exactly what I was hoping for.
You have came through once again!
Looking forward to testing your new version of eSearch
Yes that would be very useful. Currently when I set the alias names in the eSearch widget they don't get reflected in the attribute widget. Maybe I'm doing something wrong here......
Also is it possible to give alias names to URL's and send them through to the attribute table as well. Your doing a great job Robert.
The alias working in the AT widget is something that will be released for the next version, so no there is nothing you are doing wrong. I have not even tested is url that are sent to the AT widget become hyperlinks. So the likelihood of me having control over assigning an alias is not good.
I noticed a little quirk when clicking on items in the list. If you click on subsequent white (no background) records, then the previously selected item doesn't change it's background back to white. The following 2 changes in the list.js will fix this:
Just a follow-up to the eSearch Widget. Can you address the following?
Alias names set in eSearch Widget to carry through to Attribute Widget. (You are addressing this one in your next release of eSearch as mentioned above).
Hide NULL fields in Attribute Widget.
URL alias naming. See screen shot below re hyperlink of URL coming through to the Attribute Widget.
4. Allow for "typeahead" querying when user starts to type into the query displays.
5. Include Clear in "BY VALUE" searching similar to "BY SHAPE" searching see screen shot below.
I have included a link to an "Imagery Archive" App I'm working on that includes your eSearch Widget. This app is designed for the desktop environment. I'm trying to minimise map display interference to enhance the user's spatial experience. There are other issues in this app, like auto recentre the map which needs addressing.
After looking as the builders version-manager.js code I would recommend that you manually change the the widgets version numbers to be 1.3 in the main config.json inside the zip and then try to import again.
it mentions not being able to find the geometry or the search returns a null value.
i am wondering if the alias is an issue.
when i build the query it is the alias field name that i am picking from the dropdown list.
however when i look at the field names that i can display they are the actual names.
the other odd thing is that the layer is displaying on the map just fine. i can click the mouse and get info on the pts. so it can't be that the geometry is messed up. and i have the shape and objectid fields active in the mapservice.
must be something basic if both the standard and your query tools have the same behavior.
The actual field names when it come to fields you can display and the alias being used in the expression field chooser is the default behavior, so nothing is wrong there. Is your data joined and if so does the join field name contain any special characters?
';
}
}
}
catch(e){
}
}
}
if (newSub.getAttribute("slang").toLowerCase() != code_l.toLowerCase()) {
if (trLabelsHtml != "") {
var labelSname = "";
if(labelEle[i].querySelector("ul li:nth-child(1)").getAttribute("aria-hidden")){
labelSname = labelEle[i].querySelector("ul li:nth-child(1)").outerHTML;
}
labelEle[i].innerHTML = "";
labelEle[i].innerHTML = labelSname + trLabelsHtml;
}
}
}
}
}
catch(e){
}
}
}
/* V 2.0:3 = Store not translated reply id */
if(lingoRSXML.snapshotLength == 0){
if($scope.falseReplyID == "") {
$scope.falseReplyID = value;
}
}
/* Get translated Body of Replies/Comments */
var lingoRBXML = doc.evaluate(lingoRBExp, doc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for(var i=0;i 0) {
var attachDiv = rootElement.querySelector('div.lia-quilt-row-main').querySelector('div.custom-attachments');
if (attachDiv) {
attachDiv = attachDiv.outerHTML;
}
else if(rootElement.querySelector('div.lia-quilt-row-main').querySelectorAll('#attachments').length > 0){
if ("TkbArticlePage" == "BlogArticlePage") {
attachDiv = rootElement.querySelector('div.lia-quilt-row-main .lia-message-body-content').querySelector('#attachments');
if (attachDiv) {
attachDiv = attachDiv.outerHTML;
}
else{
attachDiv = "";
}
}else{
attachDiv = rootElement.querySelector('div.lia-quilt-row-main').querySelector('#attachments').outerHTML;
}
}
else {
attachDiv = "";
}
/* Feedback Div */
var feedbackDiv = "";
var feedbackDivs = rootElement.querySelector('div.lia-quilt-row-main').querySelectorAll('div.lia-panel-feedback-banner-safe');
if (feedbackDivs.length > 0) {
for (var k = 0; k < feedbackDivs.length; k++) {
feedbackDiv = feedbackDiv + feedbackDivs[k].outerHTML;
}
}
}
else {
var attachDiv = rootElement.querySelector('div.lia-message-body-content').querySelector('div.Attachments.preview-attachments');
if (attachDiv) {
attachDiv = attachDiv.outerHTML;
} else {
attachDiv = "";
}
/* Everyone tags links */
if (document.querySelectorAll("div.TagList").length > 0){
var everyoneTagslink = document.querySelector('div.lia-quilt-row-main').querySelector(".MessageTagsTaplet .TagList");
if ((everyoneTagslink != null)||(everyoneTagslink != undefined)){
everyoneTagslink = everyoneTagslink.outerHTML;
}
else{
everyoneTagslink = "";
}
}
/* Feedback Div */
var feedbackDiv = "";
var feedbackDivs = rootElement.querySelector('div.lia-message-body-content').querySelectorAll('div.lia-panel-feedback-banner-safe');
if (feedbackDivs.length > 0) {
for (var m = 0; m < feedbackDivs.length; m++) {
feedbackDiv = feedbackDiv + feedbackDivs[m].outerHTML;
}
}
}
}
} catch (e) {
}
if (body_L == "") {
/* V 2.0:7 Replacing translated video data with source video data */
var newBodyVideoData = newBody.querySelectorAll('div[class*="video-embed"]');
angular.forEach($scope.videoData[value], function (sourceVideoElement, index) {
if (index <= (newBodyVideoData.length - 1)) {
newBodyVideoData[index].outerHTML = sourceVideoElement.outerHTML
}
});
/* V 2.0:7 = Replacing translated image data with source data */
var newBodyImageData = newBody.querySelectorAll('[class*="lia-image"]');
angular.forEach($scope.imageData[value], function (sourceImgElement, index) {
if (index <= (newBodyImageData.length - 1)) {
newBodyImageData[index].outerHTML = sourceImgElement.outerHTML;
}
});
/* V 2.0:7 = Replacing translated pre tag data with source data */
var newBodyPreTagData = newBody.querySelectorAll('pre');
angular.forEach($scope.preTagData[value], function (sourcePreTagElement, index) {
if (index <= (newBodyPreTagData.length - 1)) {
newBodyPreTagData[index].outerHTML = sourcePreTagElement.outerHTML;
}
});
}
var copyBodySubject = false;
if (body_L == "") {
copyBodySubject = true;
body_L = newBody.innerHTML;
}
/* This code is written as part of video fix by iTalent */
/* try{
var iframeHTMLText = body_L;
var searchIframeText = "<IFRAME";
var foundiFrameTag;
if (iframeHTMLText.indexOf(searchIframeText) > -1) {
foundiFrameTag = decodeHTMLEntities(iframeHTMLText);
foundiFrameTag = foundiFrameTag.split('src="')[1];
body_L = foundiFrameTag;
}
}
catch(e){
} */
/* This code is placed to remove the extra meta tag adding in the UI*/
try{
body_L = body_L.replace('<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />','');
}
catch(e){
}
/** We should not replace the source content if user profile language and selected target language matches with source language **/
if(showTrContent) {
var compiled = false;
rootElement.querySelectorAll('div.lia-message-body-content')[0].innerHTML = null
if("TkbArticlePage"=="IdeaPage"){
// var customAttachDiv = '';
rootElement.querySelectorAll('div.lia-message-body-content')[0].innerHTML = body_L + feedbackDiv ;
$compile(rootElement.querySelectorAll('div.lia-message-body-content')[0])($scope);
compiled = true;
/* Attach atttach div */
// document.querySelector("div.translation-attachments-"+value).innerHTML = attachDiv;
rootElement.querySelectorAll('div.lia-message-body-content')[0].insertAdjacentHTML('afterend',attachDiv);
if(rootElement.querySelectorAll('div.lia-quilt-idea-message .lia-message-body .lia-attachments-message').length > 1){
rootElement.querySelectorAll('div.lia-quilt-idea-message .lia-message-body .lia-attachments-message')[1].remove();
}
} else {
if("TkbArticlePage"=="TkbArticlePage"){
rootElement.querySelectorAll('div.lia-message-body-content')[0].innerHTML = body_L + feedbackDiv ;
}else{
rootElement.querySelectorAll('div.lia-message-body-content')[0].innerHTML = body_L + feedbackDiv + attachDiv;
compiled = true;
}
}
/* Destroy and recreate OOyala player videos to restore the videos in target languages which is written by iTalent as part of iTrack LILICON-79 */ /* Destroy and recreate OOyala player videos */
try{
// $scope.videoData[value][0].querySelector("div").getAttribute("id");
for(var vidIndex=0; vidIndex<$scope.videoData[value].length; vidIndex++){
if( $scope.videoData[value][vidIndex].querySelector("div") != null){
var containerId = LITHIUM.OOYALA.players[$scope.videoData[value][vidIndex].querySelector("div").getAttribute("id")].containerId;
videoId = LITHIUM.OOYALA.players[$scope.videoData[value][vidIndex].querySelector("div").getAttribute("id")].videoId;
/** Get the Video object */
vid = OO.Player.create(containerId,videoId);
/** Destroy the video **/
vid.destroy();
/** recreate in the same position */
var vid = OO.Player.create(containerId,videoId);
}
}
}
catch(e){
}
try{
for(var vidIndex=0; vidIndex<($scope.videoData[value].length); vidIndex++){
if($scope.videoData[value][vidIndex].querySelector('video-js') != null){
var data_id = $scope.videoData[value][vidIndex].querySelector('video-js').getAttribute('data-video-id');
var data_account = $scope.videoData[value][vidIndex].querySelector('video-js').getAttribute('data-account');
var data_palyer = $scope.videoData[value][vidIndex].querySelector('video-js').getAttribute('data-player');
var div = document.createElement('div');
div.id = "brightcove";
div.class = "brightcove-player";
div.innerHTML =
'(view in my videos)'
var data = div.getElementsByClassName("video-js");
var script = document.createElement('script');
script.src = "https://players.brightcove.net/" + data_account + "/" + data_palyer + "_default/index.min.js";
for(var i=0;i< data.length;i++){
videodata.push(data[i]);
}
}
}
for(var i=0;i< videodata.length;i++){
document.getElementsByClassName('lia-vid-container')[i].innerHTML = videodata[i].outerHTML;
document.body.appendChild(script);
}
}
catch(e){
}
if(!compiled){
/* Re compile html */
$compile(rootElement.querySelectorAll('div.lia-message-body-content')[0])($scope);
}
}
if (code_l.toLowerCase() != newBody.getAttribute("slang").toLowerCase()) {
/* Adding Translation flag */
var tr_obj = $filter('filter')($scope.sourceLangList, function (obj_l) {
return obj_l.code.toLowerCase() === newBody.getAttribute("slang").toLowerCase()
});
if (tr_obj.length > 0) {
tr_text = "Esri may utilize third parties to translate your data and/or imagery to facilitate communication across different languages.".replace(/lilicon-trans-text/g, tr_obj[0].title);
try {
if ($scope.wootMessages[$rootScope.profLang] != undefined) {
tr_text = $scope.wootMessages[$rootScope.profLang].replace(/lilicon-trans-text/g, tr_obj[0].title);
}
} catch (e) {
}
} else {
//tr_text = "This message was translated for your convenience!";
tr_text = "Esri may utilize third parties to translate your data and/or imagery to facilitate communication across different languages.";
}
try {
if (!document.getElementById("tr-msz-" + value)) {
var tr_para = document.createElement("P");
tr_para.setAttribute("id", "tr-msz-" + value);
tr_para.setAttribute("class", "tr-msz");
tr_para.style.textAlign = 'justify';
var tr_fTag = document.createElement("IMG");
tr_fTag.setAttribute("class", "tFlag");
tr_fTag.setAttribute("src", "/html/assets/langTrFlag.PNG");
tr_fTag.style.marginRight = "5px";
tr_fTag.style.height = "14px";
tr_para.appendChild(tr_fTag);
var tr_textNode = document.createTextNode(tr_text);
tr_para.appendChild(tr_textNode);
/* Woot message only for multi source */
if(rootElement.querySelector(".lia-quilt-forum-message")){
rootElement.querySelector(".lia-quilt-forum-message").appendChild(tr_para);
} else if(rootElement.querySelector(".lia-message-view-blog-topic-message")) {
rootElement.querySelector(".lia-message-view-blog-topic-message").appendChild(tr_para);
} else if(rootElement.querySelector(".lia-quilt-blog-reply-message")){
rootElement.querySelector(".lia-quilt-blog-reply-message").appendChild(tr_para);
} else if(rootElement.querySelector(".lia-quilt-tkb-message")){
rootElement.querySelector(".lia-quilt-tkb-message").appendChild(tr_para);
} else if(rootElement.querySelector(".lia-quilt-tkb-reply-message")){
rootElement.querySelector(".lia-quilt-tkb-reply-message").insertBefore(tr_para,rootElement.querySelector(".lia-quilt-row.lia-quilt-row-footer"));
} else if(rootElement.querySelector(".lia-quilt-idea-message")){
rootElement.querySelector(".lia-quilt-idea-message").appendChild(tr_para);
} else if(rootElement.querySelector('.lia-quilt-occasion-message')){
rootElement.querySelector('.lia-quilt-occasion-message').appendChild(tr_para);
}
else {
if (rootElement.querySelectorAll('div.lia-quilt-row-footer').length > 0) {
rootElement.querySelectorAll('div.lia-quilt-row-footer')[0].appendChild(tr_para);
} else {
rootElement.querySelectorAll('div.lia-quilt-column-message-footer')[0].appendChild(tr_para);
}
}
}
} catch (e) {
}
}
} else {
/* Do not display button for same language */
// syncList.remove(value);
var index = $scope.syncList.indexOf(value);
if (index > -1) {
$scope.syncList.splice(index, 1);
}
}
}
}
});
});
/* V 1.1:2 = Reply Sync button for multi source translation */
} catch(e){
console.log(e);
}
};
if((rContent != undefined) && (rContent != "")) {
drawCanvas(decodeURIComponent(rContent));
/** Update variable with selected language code **/
$scope.previousSelCode = code_l;
}
};
/**
* @function manageTranslation
* @description Managess the translation of given language for the thread
* @param {string} langCode - Language Code
* @param {string} tid - Thread ID
*/
$scope.manageTranslation = function (langCode, tid) {
//debugger;
$scope.showTrText = false;
/* V 2.0:5 = actualStatus variable introduced to indicate detailed connector status on UI. This variable holds the actual translation percentage */
$scope.transPercent = "";
$scope.actualStatus = "";
if (tid != "") {
var bulkTranslation = lithiumPlugin.bulkTranslation(langCode, tid);
bulkTranslation.then(function (trContent) {
if(trContent.body != "") {
$scope.showPreview(trContent.body, $scope.mszList, langCode);
if(langCode != "en-US") {
$scope.showTrText = true;
}
}
if((trContent.status != "NA") && trContent.status != null) {
// $scope.transPercent = String(trContent.status);
$scope.actualStatus = String(trContent.status);
} else {
// $rootScope.errorMsg = "Translation is in progress. Please check again a few minutes."
$rootScope.errorMsg = "Translation is in progress. Please retry in a few minutes."
}
$scope.workbench = trContent.wb;
/* V 2.0:4 = Trigger uncalled or delayed callbacks (documnet uploaded/translation completed from lithium).*/
if(trContent.callback == 'true') {
var trCompletCallback = lithiumPlugin.trCompletCallback(langCode, trContent.docID);
trCompletCallback.then(function (callback){
// $rootScope.errorMsg = "Downloading Translated content in " + langCode + " now. Please check again in a few minutes."
$rootScope.errorMsg = "Uploading content to translate. Please check again in a few minutes."
});
} else if (trContent.callback == 'upload') {
var trCompletUpload = lithiumPlugin.trCompletUpload(langCode, trContent.docID);
trCompletUpload.then(function (callback) {
//$rootScope.errorMsg = "Uploading content to translate. Please check again in a few minutes."
$rootScope.errorMsg = "Uploading content to translate. Please check again in a few minutes."
});
} else if ("many" == "one") {
$scope.updateOOS();
} else if("SmartConx" == "SmartConx"){
if ("many" == "many"){
$scope.updateOOS();
}
}else if ((trContent.status != null) && trContent.status.includes("100")) {
/* If everything fine then only check Out of Sync status */
$scope.updateOOS();
} else {
/* If translation perccent is less than 100 then show the percentage on UI */
$scope.transPercent = $scope.actualStatus;
}
});
}
}
/**
* @function selectThisLang
* @description Called on select dropdown.
* @param {string} lang - Language code
*
*/
$scope.selectThisLang = function (lang, anonymousFlag) {
/* 1.4:3 Update Analytics on language selection */
try {
lingoThreadLangSelected(lang, '910880');
} catch (e) {
}
/** Display Translated content **/
var getTranslation = lithiumPlugin.getTranslation(lang, "910880");
getTranslation.then(function (trContent) {
if (trContent.body != "") {
$scope.showPreview(trContent.body, $scope.mszList, lang);
} else {
//$rootScope.errorMsg = "Translation is in progress. Please check again in a few minutes."
$rootScope.errorMsg = "Translation is in progress. Please retry in a few minutes."
}
});
};
var decodeEntities = (function() {
// this prevents any overhead from creating the object each time
var element = document.createElement('div');
function decodeHTMLEntities (str) {
if(str && typeof str === 'string') {
// strip script/html tags
str = str.replace(/