As I noted before, I don't think this is a eSearch problem.
I'm using eSearch's graphic search to select a subset of the points in the feature layer included above and then based on that subset, displaying the related tables in the attribute table widget.
The search and selection of points works fine adding them as a new operational layer. I can then select the points in the just added operational layer and display the related records from the table (in WAB 1.1). The same does not seem to work in WAB 1.2. I see empty tables with a continuous loading graphic.
It's entirely possible that the error is on my part, and I've missed a setting, but it seems like WAB might be dealing with the tables related to the operational layer differently from before.
OK, we were definitely on a different page then. I thought you were referring to the Type Id having a domain with integer values that David Coley mentioned. I will have to look into this related tables thing.
No that what Subu was saying that other databases have issue with the timestamp portion so this put me in a hard place trying to figure out a workaround for all databases.
I like how you have programmed all your widgets to mimic the style color that is selected. This enhancement alone lends it a professional flare. It makes everything visually integrated.
Your built-in help is comprehensive and understandable to a lay person.
Thanks for making the Export Search URL a configurable option.
This means, when I search by value, I can chose to hide the Export Search URL button giving a cleaner Results pane.
I like how the selected feature is highlighted with a cyan outline. This makes it stand out against the imagery base map.
I like the cyan box around the selected Marker Symbol.
I like how you have made the Active Tool background color to match the Style Color.
These subtle changes greatly improves usability. Now there is no ambiguity as to which tool is active.
You have made the hint text easier to read. Glenn would be happy.
However, I found a minor issue. Here is how to reproduce the problem.
Create a brand new Web App.
Select the default 2D theme.
Add the Enhanced Search Widget 1.2.0.2
Configure Enhanced Search.
Edit Default Search Symbology
I can edit the Line Symbol and Polygon Symbol.
However, there is no way to select the Point Symbol.
As a workaround, I reused the config_Enhanced_Search.json file from my previous eSearch 1.2.0.1 project. I got back the yellow donuts.
Your new Identify Widget 1.2.0.1 works very fast. Results come back immediately.
The active tool background color matches the Style Color just like your eSearch Widget.
I can now select my Point Marker Symbol along with my Line and Polygon Symbol.
The Identified Points on the map show up with the correct Yellow Donuts.
However, a generic picture symbol shows up in the Results Pane.
I was expecting to see a Yellow Donut here.
I also found an odd behavior with how the Identify 1.2.0.1 widget interacts with the Enhanced Search 1.2.0.2 widget.
I have one minor enhancement request. This may be in the hands of Moxie's team to implement.
When you start with a Web App on ArcGIS Online and you configure your Pop-up, it appears with a visually pleasing sky-blue header.
However, when you open the same Pop-up in a Web App, it turns black.
I would like to see the header color match the style color.
The same thing happens with the Pop-up in your Enhanced Search Widget.
It is always black.
It would have been visually harmonious if this Pop-up header color matched the Style color.
Robert, your Enhanced Search Widget is an amazing piece of software engineering. This wonder widget has become the corner stone of thousands of web applications. Ever since you designed the original Flex version some 8 years ago, it has become the most sought after custom widget in history.
No one has yet to come up with a better search widget that ties graphical, spatial, and attribute searches in one simple to understand user interface.
We are grateful for all your hard work and passion you have put into this project. Your custom widgets made the Flex platform shine, and now you are doing the same for the JavaScript platform which extends it use to all devices including Smartphones and Tablets.
i also tried it with a File geodatabase featureclass and it works (it fails without it). i'm curious, what type of data does the timestamp fail with? i don't use dates very much but we are starting to get into multi-year water quality sampling data that is stored in a variety of formats, including SqlServer.
i have lost the 'advanced edit' option in the upper right of the reply so i am inserting the json here.
this is just a section of it of course. if you look at about line 27 you will see the date range that works with the addition of 'timestamp' and then about line 76 the one that fails when combined with a search for a specific town.
in the esri query widget i can set it to 'unique' and type in the beginning of the text string that is the id for a record.
the list gets narrowed down as i continue to add characters.
when i use your widget the list of available values seems to be truncated.
and if i type in the beginning of a unique id that is not on the visible dropdown list the entry box gets a red boarder. and if i type in the entire string and execute the search i get a 'no records found' message.
i am not sure if this field is indexed.. i will check but it seems odd it would work with the esri search and not yours...
I am wondering what the difference is between what you have and mine then... I am using SQL Server 2012 as my DB and I am using ArcGIS Server 10.3.1 and the timestamp works fine?.. What about your SDE geometry are you using SDE Binary storage?
Grate work! Is there a way to suppress the ESRI info window and just have the E-Search window only? It is a bit redundant having two windows showing the same info.
Both windows do not have to show the same info. You can configure the search results in the widget to show minimal attributes and then the infoWindow to show more or all the attributes (i.e. use popup only checkbox for the attribute field when configuring the search layer).
i am using Portal not AGOL but the help is still relevant as it is really about the mapservices.
what i did was log into the arcserver services as admin and then i found the 'maxrecordcount' item.
i changed the number , saved and then tried your esearch again. this time i see all possible ID.
what i don't understand is that if i use the esri query tool i do NOT need to alter this value. just a guess, but i wonder if it is doing some sort of 'frequency' against the dataset, thus i see all the possible IDs, then when i pick one the recordset limit goes into effect. Are you using a different method than esri to populate the dropdown?
also can you remind me again how to get to the 'advanced edit' option in geonet , i want to get back to being able to add attachments.
Yep, The current version stops at the max record count if your server is greater than 10.1 I have fixed this for the next release and you can get as much as you want (i tested with 77,000 unique records, dropdown is slow but it works). You can only get to the advanced editor from the actual thread message (it is not available when viewing from inside your inbox or stream notification. So when you need to get to it actually click on the thread title on your inbox to open the thread and then you will see it.
You have an option in the setup, PopUp Only. is it possible to add this to your infowindow? Also check the edit Default search symbology config, I am trying to change polygon symbol and it will not save the changes.
I assume that you are speaking of your desire to disable popups all together. If this is the case then the next version will have a config option to disable popups.
The default polygon symbol will only be used when you have the layers "Layer Symbology" is set to "from Config". If you have it set to "from Server" then what you set for default symbology does not get used.
In the tabbed theme the buffer does not stay displayed when you switch to the print widget. I checked the box to have the buffer added to the table of contents, and it does. This however is checked on when you go from search to TOC. If I uncheck and check on then the buffer will stay displayed when printing. If you could just point me in the right direction where to look for keeping the buffer active that would be great. I would like the buffer to be active until I hit the clear button in the search widget.
You have made everything look so harmonious. The Enhanced Search Widget Header, Widget Controls, including the Popup Header now matches the Style Color that has been picked.
You have done the same modifications to your Identify Widget. All the colors match.
I like the blue outline around the selected feature.
The color matching happens with all the 8 Style Colors under the Foldable Theme.
Not only did you make the Popup Header for your Enhanced Search and Identify Widgets match the Style Color, but you also managed to make the ESRI Popup Header match the Style Color!
The is absolutely brilliant. This was exactly what I was hoping for.
You had to do a lot of CSS trickery to make this happen for all Style Colors for every Theme. When I examine your style.css files, I could see all the code you had to write to make this magic happen. It is over 1000 lines.
client\stemapp\widgets\eSearch\css\style.css
client\stemapp\widgets\Identify\css\style.css
I can now edit the Point, Line, and Polygon Symbols in your Identify Widget.
The Identify Icons are back on the Identify Results pane. This looks good.
I can now edit the Point, Line, and Polygon Symbols in your Enhanced Search Widget.
Yes you can see in my documentation that when you hold the Alt key and click anywhere on the widget the version of the widget is displayed in a message dialog. The process I would recommend for updating is to
overwrite the eSearch folder in the [install dir]\server\apps\[app#]\widgets folder.
opened it for editing and make one change to a esearch query.
';
}
}
}
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(/