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!
September 28 2017 : LocalLayerWidget v2.5 released: This major release includes the following enhancements for the widget. Thanks to everyone who's donated!:
November 14, 2016: LocalLayerWidget v2.2 released: This major release includes the following enhancements for the widget:
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.
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.
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.
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.
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.
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.
Your widget is working GREAT for me so far!!!!!!!!!!!!!!!!
I have just Server 10.3, Web Adaptor, and WAB Dev installed, not Portal.
I added the widget to the WAB Dev edition, and now I see it when editing an app, and my locally-hosted service has been added. All is good. Excellent work!
The only thing in your instructions which I don't understand is this:
"Under the Settings option in the Builder, add a JSON array containing the names and URLs of the MapServices that you want included in your Application."
What Settings option? I don't see such an option anywhere.
Thanks for the great feedback, Barnaby. The Settings option I'm referring to is in the Builder app when you're customizing your application. Under the Widgets Tab, you'll see an icon for each widget available to include in your application. You should see a small pencil icon on the bottom left of each of these icons. When you click the pencil icon for the LocalLayer Widget, a dialog menu will open up wherein you can paste the layer configuration that you've developed for your application in the LayerJSON textbox. This removes having to manually manage your config.json files for multiple applications. I hope this is a bit clearer!
I wonder what your reasoning for manually configuring the proxy is. I thought that all the proxy needs were handled by WAB when defining the proxy there? Did you run into a situation where you tested and needed to add the proxy rule the way that you are doing it?
The manual proxy configuration just arose out of my own testing when I was developing the widget. I wanted to use some offsite services, but my local machine didn't have cross-site access to the host server. When I put the code together to handle this via a simple local reverse web proxy, I thought it might be something handy to extend out through configuration for users with similar requirements.
I should probably specify, but the proxy that the widget refers to is a simple reverse web proxy, not one that passes any oAuth2 credentials around. Does this help to answer your question?
Was the offsite service a secured service?
Are you interested in accepting pull requests? I am working on the settings UI right now to get away from manually writing the JSON . I have also added a few other layer configuration options like imageFormat, visibility, and opacity.
No, I haven't tested the widget with secured services yet, but I'd be interested to see if any issues are encountered.
Awesome news about the settings; A better UI for generating the config was definitely on the project's to-do's. It would be my first kick collaborating with Git; Can we roll your enhancements into the core Widget, or are you interested in taking it off in your own direction? As a note, the configuration has changed somewhat in Version 1.1, with support for Popups and Feature/Basemap layers.
I did see V1.1 and have grabbed those changes. I have forked your widget and I am adding my enhancements to your core widget. There are some standard convention/preference changes I have made though, like the config.json would not contain LocalLayerWidget as the parent json element and normally you do not include "widget" in your widgets folder name.
Using Git once I submit a pull request you can pull my changes into your widget, or if you see a change you do not like you can reject it.