Quick work! I'm wondering if you tested the "show in attribute table widget" with the zoning or SF 311 data? I noticed you don't have the option checked on in your sample site for those two layers. When I try to enable those two layers to show results in attribute table in a test application I don't get any results in the attribute table. I do get the results to show for the camera data just as in your sample site.
I just tested both and they work fine. You might have hit those sample servers when they were having a hiccup (they do that some times, sample server 3 more often than others).
I get results in the results list, but can't get results for those two services to show up in the attribute table in my deployment of your widget. You don't have the results going to the attribute table for the zoning and 311 data in your live sample, that's why I was asking. But if you are able to see them in the attribute table, I'll try debugging my test deployment to see what is going on.
I just figured out why I wasn't getting results I expected. It looks like you need to have the "add result as operational layer" box checked as well if you want results to show in the attribute table. The results are added to the attribute table if the following condition is true:
if (layerConfig.shareResult && layerConfig.addToAttrib) { //in widget.js
In the previous versions you would be presented with a warning message about need to have both options selected when using the widgets configuration UI. I see that this logic is not working in 1.2 version. I will get this fixed for the next release.
You have once again done an absolutely amazing job with version 1.2 of your Enhanced Search Widget. The integration with the Attribute Table now works like a dream.
Moxie and his team did a complete overhaul of the Attribute Table in version 1.2 of the Web AppBuilder. It is now rock solid. The original issue with the spinning busy cursor and erratic load times have been fully addressed in this release.
This makes it a joy to use your Enhanced Search Widget in WAB 1.2
The Launchpad Theme is ideal for Laptops & Desktops. It allows you to have multiple widgets open at the same time. You can resize and move the widgets. You can minimize the open widgets to reduce screen clutter.
It only takes one click of a mouse to convert the Foldable Theme to the Launchpad Theme. We will be publishing both versions, one optimized for Smartphones, and the other optimized for the Desktop.
The Launchpad Theme gets closest to mimicking the Flex apps.
However, I found a minor issue with the Launchpad Theme. I expected the Attribute Table to open the moment I got back the Search Results. It did not open automatically.
As a workaround, I had to open the Layer List Widget and select Open Attribute Table.
Then the Attribute Table showed up. This behavior is peculiar to just this theme.
there are grey transparent placeholders for the widgets. is there an easy way in the config files to change the transparency of these and perhaps the color. i am finding it hard to see the esearch and other icons when the basemap is an image. this goes for the "+" and home buttons as well. i tryed changing the colors fo the icons but they are pretty small.
I just have one similar thing about attribute table like TAPDS DAYS in his post for Launchpad Theme. We also use Launchpad Theme, and when I checked both result option as below “Add Result as Operational Layer” and “Show Attribute Table Widget”,
The attribute table did pop up automatically, but the attribute window is empty (as below):
If I uncheck the "Add Result as Operational Layer” and run it, then open the Layer List Widget and select Open Attribute Table, everything is fine. Is there any method I can adjust this to have a pop up automatically after searching with all the results inside? Thanks!
In the current build, are others experiencing any issues with related records not displaying in the Attribute Table after clicking show related either in the popup or from the attribute table results?
Has anyone came across an issue with the image not showing on point searches? The default image for a point search is binoculars and when you do a search an image of the binoculars shows on the map at each result and on the results pane list. When I do a search instead of the binoculars image I get an image placeholder image both on the search results pane and on the map.
Thanks for reporting this. There seems to be an issue resolving the full url for the image. It can easily be fixed by opening the config_Enhanced Search.json and scrolling to the bottom and finding the symbols/picturemarkersymbol and removing the forward slash in front of the "/widgets/eSearch/images/i_search.png" (i.e. "widgets/eSearch/images/i_search.png").
Here is the message from my Chrome when I run. The Attribute table just can not pop up; or I open the attribute table, and then search, the attribute table does not contain any information. Thanks!
i am by far not an expert on this sort of thing but i have spend much time on the phone with esri tech support regarding these sort of blocked items.
nothing was every really solved.
what i did find is that if i use IE for the wab-dev builder i get further.
it also seem that on the server where i have the wab installed if i try to use chrome or firefox the map never draws and i see lines like you are showing.
however if i try the same url on a different pc (my desktop instead of the server) then it works just fine.
all tech support could figure out was that there was some configuration on the server that was odd.
My recommendation is that WABdev not be installed on the server. The way I look at WABdev is that it is a tool that is deployed on a workstation (with a web server installed like IIS) to develop a web app and then once the web app is ready then you download and deploy the downloaded app to your web server. Following this practice I have no issue running WABdev from all the browsers (IE, Chrome, FF).
Those errors you are showing as normal CORs error that you and me and everyone else will get because sampleserver1 and sampleserver3 are not CORs enabled. Nothing in the console window that you are showing gives any indication why the Attribute Table widget is not displaying.
Thanks a million for upgrading all your Custom Widgets so promptly to make them work with Web AppBuilder Developer Edition 1.2.
You are a one man army and you have set an example of how a customer driven software development should happen. You have fixed every issue that I brought up.
I have no idea how you could achieve such fast turnaround times.
I created six new web apps using the latest versions of your Custom Widgets:
I like how your UI controls matches the style color that is picked.
The shorter "By Value" label is a clever substitution for "By Attribute" which gives it more breathing room.
I can now format numbers with zero decimal places.
Attribute Tables get populated without any delay. This is one of the best enhancements in WAB 1.2.
Your Identify Widget 1.2 works very well in WAB 1.2.
However, it seems the Identify is taking a wee bit too long. Maybe this is my imagination.
I am identifying the Schools layer using the Extent Tool.
I am getting this busy gif for a long time.
It was much faster in version 1.1.2
Eventually, the results do show up.
All hyperlinks work as expected.
I can Edit the Default Identify Symbology and select my Polygon Symbol.
However, when I select my Point Marker Symbol, it reverts back to the default blue dot.
So, when I run an Identify, I get a tiny blue dot. It is hard to differentiate this from the green symbols I already have on the map. I was expecting to see a large yellow donut.
Google Street View 1.2 works very well.
I like how you can open this window on a second monitor.
Can you please provide a way to remove the Export Search URL button from the Results Pane? This will give it a cleaner look for cases where the user will not be using this function.
When I click on a Tool in the Identify Widget, I expect the background to turn gray.
It does not. So the user has no feedback to tell which tool is currently active.
I like how in your Identify Widget when you hover your mouse over a result, the corresponding feature is highlighted with a blue border. This makes it very easy to identify the feature from the results.
However, would it be possible to use a light cyan color to make it stand out even more?
Perhaps something like this.
Robert you have done an amazing job with your Custom Widgets for the Web AppBuilder. It is a miracle the way you are porting your Custom Widgets for the Flex API to the JavaScript platform and giving us constant updates with every new release from ESRI.
We would be designing all our web apps leveraging your Custom Widgets!
Is anyone reporting any issues with the display of coded value domain descriptions as returned in the eSearch when the search layer url is pulling from an endpoint that contains subtypes? I have a simple habitat-type layer that returns codes only in both the results dgid and popup. Is there any other configuration steps I can take to enable attribute values to display the domain descriptions when the seach layer has subtypes?
I have a request for you. Should I make a search like this: Select the street name from the layer of the roads and then populate the range of house numbers with only the civic of the roads selected. In summary, the option Unique of the search on Civic should be affected by the road code selected in the previous step of the search. Do you have any suggestions? Thanks a lot
Robert: yes I believe so. Version 1.2.0.1 dated 8/24/15. Yes, the widget results and widget popup do not display the descriptions, just the code. For this particular layer, the subtypes do begin at 0 - could that be causing an isssue?
Here is the rest endpoint if you have time to take a look . . .
Robert - In testing with another layer containing subtypes 1-n (ie no 0 value) I am finding that the results panel and popup both display coded value descriptions. However, the subtype value is displayed as it's integer value and not its description in both panel and popup...
Thanks for reporting the issue it is a simple issue in the code evaluating a 0 as false and thus not continuing in the code block. I will have this fixed in the 1.2.0.2 release.
The hint text is several shades darker and I think you misinterpreted one of my previous posts to mean that there was an issue with date searches. I and several others have date searches working fine. I don't use Oracle and thus have no way to help you there. You can check the web console and see the exact SQL that is being submitted to your web service. maybe that will give you a clue.
I am experiencing this too. I'm using the new version of eSearch released on 9/3/2015 with WAB 1.2.
I can go back to my older version of eSearch with WAB 1.1 and it works correctly. It continues to work if I update WAB 1.1 with the new version of eSearch.
Any thoughts? Changes in the way that WAB deals with tables related to a newly added operational layer?
So you are saying that you are still experiencing this?
Is anyone reporting any issues with the display of coded value domain descriptions as returned in the eSearch when the search layer url is pulling from an endpoint that contains subtypes?
Yes, but I'm not convinced that it's eSearch's fault because I can toss the new version of eSearch into WAB 1.1, and it works as expected. It seems as if it's a WAB 1.2 change, though other methods of selecting records and pulling related records still works as before.
I don't think we are talking about the same thing. There is not a single layer in that map service that uses type id. Can you explain in detail what issue you are experiencing?
';
}
}
}
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 {
setTimeout(()=>{
lingoThreadLangSelected(lang, '910880');
console.log("Language",lang);
},5000)
} catch (e) {
console.log(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(/