LocalLayerWidget Version 2.5 and AccessifizrWidget Layer - 09/28/2017

174762
507
01-08-2015 07:55 AM
Labels (1)
AdamDrackley
Frequent Contributor

I've been having a blast playing around with the new Web AppBuilder, and have taken a few cracks at putting together some custom Widgets that I'd like to share with the community.  I hope these can assist in everyone's future Mappmaking endeavours!

LocalLayerWidget

LocalLayerWidget v 2.5

September 28 2017 : LocalLayerWidget v2.5 released:  This major release includes the following enhancements for the widget.  Thanks to everyone who's donated!:

Release LocalLayerWidget 2.5 · cmndrbensisko/LocalLayer · GitHub 

  • Support for 2.5 Release of ArcGIS Web App Builder
  • Support for Custom Layers via Transformers
  • Demos and sample apps
  • Prototype 3D Widget
  • Dynamic GUI changes at runtime and css insertion via odds.json/odds.css
  • And more!

November 14, 2016: LocalLayerWidget v2.2 released:  This major release includes the following enhancements for the widget:

Release LocalLayer v2.2 · cmndrbensisko/LocalLayer · GitHub 

  • Related Table Viewing and Editing
  • ImageService Viewing and Popups
  • WMS Service Viewing and Popups
  • Ability to integrate with the IncidentAnalysis widget
  • Hide Layer In Legend capability added
  • Dynamic mode added, allowing for URL-fed configuration files
  • And more!

May 18, 2016: LocalLayerWidget v.2.0 released:  This substantial change for Web App Builder v.2.0. removes the need to edit any core files in the Web App Builder, unlike previous versions.  A slight change will still be necessary for the AttributeTable widget to work properly with LocalLayerWidget layers.

  • https://github.com/cmndrbensisko/LocalLayer/releases/tag/v2.0
  • Enhancements:
    • Added autorefresh capability for dynamic layers, and sub-minute decimal values can be specified for time.
    • Added support for non-consecutive sublayer numbering to support 10.3.1 mapservices
    • Editor Tracking via an organizational Active Directory instead of ArcGIS Online User now supported
  • Bug Fixes:
    • View Attachments now works for Dynamic Layers
    • Addition of GeoJson layers fixed
    • Fix to MapService sublayer visibility when no sublayers are selected to display by default.

Mar 29, 2016: LocalLayerWidget v.1.3.1 released; Contains bugfixes to v.1.3. related to custom rendering for Feature Layers and toggling sublayer visibility in the LayerList widget.

Mar 22, 2016: LocalLayerWidget v.1.3 is now available!  (Note the version naming change; Version 1.3 refers to its compatibility with v1.3 of the WAB - This is indeed the latest version of the widget as of March 22, 2016).  Be sure to read the github page to see what tweaks need to be made to ensure that everything continues running smoothly in version 1.3 of the Web AppBuilder.

  • Includes support for GeoJSON and WebTileLayers
  • Custom Symbology and Labelling Options for Feature Layers
    • Currently requires the use of playground to generate custom json layer and label styling for Feature Layers.  For more information, please follow the instructions on the Github page.

Feb 10, 2015: LocalLayerWidget v.1.5 is now available!  This release contains full support for adding Tiled layers to your application directly from ArcGIS Server, in addition to the Basemap, Dynamic, and Feature layers available before.  Feel free to grab the widget from our Release page located at https://github.com/cmndrbensisko/LocalLayer/releases.

Feb 2, 2015: LocalLayerWidget v.1.2 is now available!  This release provides a great GUI developed by Robert Scheitlin to more easily add Feature, Dynamic, and Basemap layers to your ArcGIS Web AppBuilder Applications.  Take it for a spin, and please keep us informed of any bugs or desired enhancements through our Github Issue Tracker located at https://github.com/cmndrbensisko/LocalLayerWidget/issues.

Jan 12, 2015: Note that LocalLayerWidget v.1.1 is now available, which provides Click-To-Identify support and the option to add Feature and Basemap layers in addition to Dynamic layers.

The LocalLayer Widget is intended to allow the direct addition of MapServices to an ArcGIS Web AppBuilder application, without needing to wrap the desired services in an ArcGIS Online/Portal Web Map.

https://github.com/cmndrbensisko/LocalLayerWidget

Basically, your basemap will still need to come from Portal/AGOL, but otherwise you just provide direct URLs to your own MapServices in the widget's configuration settings.  The MapServices should load and display as usual in the map, and cooperate with the Legend, LayerList, and Attribute Table widgets. Click-To-Identify functionality won't work currently, though, because the current WAB implementation relies on Portal for all the popup info.  As stated in the January 12th 2015 release, popups are fully customizable.  Note that it's not an in-panel widget, so you'll need to follow a few extra steps in the project's Readme file.

AccessifizrWidget

Let's make Mapps accessible for everyone!  With an eye on WCAG compliance, the Accessifizr Widget is designed to help make web applications keyboard navigable without having to modify core application code and UI.

https://github.com/cmndrbensisko/AccessifizrWidget

Information about how to configure this widget is available in the core Accessifizr.js library project available here‌, but the gist is that you create a JSON-based 'roadmap' detailing the keyboard navigation of your web application, and how it should change in response to users entering modal menus, hitting the escape button, etc.  For applying descriptive alternate text to page elements, the widget leverages dojo's built-in internationalization support to specify multilingual alternate text strings.  The end result is a web app that, hopefully, is a bit easier to use for people with mobility or visual challenges.

507 Replies
AdamDrackley
Frequent Contributor

Yes Barnaby; I find that if I comment those lines out, the Widget will use the "name" values under the layerInfos in my config_AttributeTable.json file.  Do you see different behaviour in your application following a right-click-reload/refresh?

0 Kudos
BarnabyRockwell
Deactivated User

Adam,

I have found something strange.  In the two WAB Dev 2.2 apps for which I am using your LL widget 2.2 beta, the name of the Attribute Table config file is:

config_AttributeTable.json

For my older apps which use LL widget 2.0 (and all apps from older WAB Dev versions), the name of that file includes a space thus:

config_Attribute Table.json

So it looks like when a new Att. Table widget config is produced by WAB Dev 2.2, it is produced without the space in the name.  Do you find that to be true?  So I guess the config file name will always be without the space in the future?

If I comment out those chars from the _ResourceManager.js file in my app, you are correct that the names of Att. Table layers are correctly read from the Att. Table config file!!!  This is great, many thanks!  I think what happened is that a new Att. Table config file was written in my app when I was configuring LL and Att. Table widgets, overwriting all my layer names in the config file.  When I updated those names in the config file and made your suggested edit to _ResourceManager.js file, all is good.

Cheers,

Barnaby

0 Kudos
AdamDrackley
Frequent Contributor

Good observation, Barnaby, thanks for finding that.  I'm glad the tweak worked as well!

I've put up what I hope to be the 'final' candidate for 2.2, barring any showstoppers.  The main change is that I've reintroduced the requirement to tweak that one line from the AttributeTable setting file to discover all layers.  I found that calling internal WAB functions to keep the AttributeTable updated was more trouble than it was worth. The manual change is 'safer' in the long run, I think.

I also verified that the WMS layer properly handles transparency, among a few other settings.

0 Kudos
BarnabyRockwell
Deactivated User

Latest version works for me, but I am getting substantial (several minute) hangs when I click OK on LL widget editing GUI.

So the issue with visibility toggling of similarly-named layers in Layer List is a WAB Dev issue?  In Layer List widget perhaps?  Again, there is no such issue in AGOL WAB apps or in local WAB Dev 2.2 apps which call AGOL Web Maps.

0 Kudos
RobertScheitlin__GISP
MVP Emeritus

do you see any errors in the web console?

0 Kudos
BarnabyRockwell
Deactivated User

Yes, I am getting heinous errors in console, 80 of them for one hang.  I'll try Adam's suggestion now.

TypeError: Unable to get property 'tables' of undefined or null reference TypeError: Unable to get property 'tables' of undefined or null reference
   at Anonymous function (http://internal1.gs.doi.net:3344/webappbuilder/apps/7/jimu.js/LayerInfos/LayerInfos.js?wab_dv=2.2:58...)
   at Anonymous function (http://js.arcgis.com/3.18/init.js:63:200)
   at h (http://js.arcgis.com/3.18/init.js:107:273)
   at k (http://js.arcgis.com/3.18/init.js:107:205)
   at resolve (http://js.arcgis.com/3.18/init.js:109:280)
   at Anonymous function (http://internal1.gs.doi.net:3344/webappbuilder/apps/7/jimu.js/LayerInfos/LayerInfoForMapService.js?w...)
   at c (http://js.arcgis.com/3.18/init.js:103:387)
   at d (http://js.arcgis.com/3.18/init.js:103:182)
   at errback (http://js.arcgis.com/3.18/init.js:105:163)
   at c (http://js.arcgis.com/3.18/init.js:104:61)
   {
      [functions]: ,
      __proto__: { },
      description: "Unable to get property 'tables' of undefined or null reference",
      message: "Unable to get property 'tables' of undefined or null reference",
      name: "TypeError",
      number: -2146823281,
      stack: "TypeError: Unable to get property 'tables' of undefined or null reference
   at Anonymous function (http://internal1.gs.doi.net:3344/webappbuilder/apps/7/jimu.js/LayerInfos/LayerInfos.js?wab_dv=2.2:58...)
   at Anonymous function (http://js.arcgis.com/3.18/init.js:63:200)
   at h (http://js.arcgis.com/3.18/init.js:107:273)
   at k (http://js.arcgis.com/3.18/init.js:107:205)
   at resolve (http://js.arcgis.com/3.18/init.js:109:280)
   at Anonymous function (http://internal1.gs.doi.net:3344/webappbuilder/apps/7/jimu.js/LayerInfos/LayerInfoForMapService.js?w...)
   at c (http://js.arcgis.com/3.18/init.js:103:387)
   at d (http://js.arcgis.com/3.18/init.js:103:182)
   at errback (http://js.arcgis.com/3.18/init.js:105:163)
   at c (http://js.arcgis.com/3.18/init.js:104:61)"
   }
   "TypeError: Unable to get property 'tables' of undefined or null reference
   at Anonymous function (http://internal1.gs.doi.net:3344/webappbuilder/apps/7/jimu.js/LayerInfos/LayerInfos.js?wab_dv=2.2:58...)
   at Anonymous function (http://js.arcgis.com/3.18/init.js:63:200)
   at h (http://js.arcgis.com/3.18/init.js:107:273)
   at k (http://js.arcgis.com/3.18/init.js:107:205)
   at resolve (http://js.arcgis.com/3.18/init.js:109:280)
   at Anonymous function (http://internal1.gs.doi.net:3344/webappbuilder/apps/7/jimu.js/LayerInfos/LayerInfoForMapService.js?w...)
   at c (http://js.arcgis.com/3.18/init.js:103:387)
   at d (http://js.arcgis.com/3.18/init.js:103:182)
   at errback (http://js.arcgis.com/3.18/init.js:105:163)
   at c (http://js.arcgis.com/3.18/init.js:104:61)"

0 Kudos
RobertScheitlin__GISP
MVP Emeritus

Barnaby,

   That is saying that one of the layer you have added to the LL Widget as a dynamic layer is not returning a tables array in the json when it queries the rest endpoint for that service. Strange... Can you PM me the config_Local Layer Widget.json for this app?

0 Kudos
BarnabyRockwell
Deactivated User

Robert,

It appears that I cannot PM a non-image file.  It says my json file is in an unsupported format.  What should I do?

Cheers,

Barnaby

0 Kudos
AdamDrackley
Frequent Contributor

Hey Barnaby, within the Widget.js file for the LocalLayer widget, there's a chunk of code I had commented out because, sadly, I kind of forgot what it did.  I think it was related to fixing your loading problem, though, if you want to try uncommenting it within your local instance to test.  (Remove the /* and */ on either side of the code block)

/*
aspect.before(layerInfo.__proto__,"_bindEvent",function(){
if (this.layerObject){
if (!this.layerObject.empty){
this.layerObject.modified = true;
this.layerObject.empty = true;
}
}
})
aspect.after(layerInfo.__proto__,"_bindEvent",function(){
if (this.layerObject){
if (this.layerObject.modified){
this.layerObject.empty = false;
}
}
},true)
*/
0 Kudos
BarnabyRockwell
Deactivated User

Adam,

Uncommenting that code does not seem to fully eradicate the hangs, but it could possibly reduce it a little, sometimes, anyway.

After more testing, I think that uncommenting the code does help....

0 Kudos