ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites ›...

87
ArcGIS API for JavaScript: Customizing ArcGIS API for JavaScript: Customizing Widgets Widgets Matt Driscoll – Matt Driscoll – JC Franco – JC Franco – @driskull @driskull @arfncode @arfncode

Transcript of ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites ›...

Page 1: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

ArcGIS API for JavaScript: CustomizingArcGIS API for JavaScript: CustomizingWidgetsWidgets

Matt Driscoll – Matt Driscoll –

JC Franco – JC Franco –

@driskull@driskull

@arfncode@arfncode

Page 2: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

AgendaAgendaWhat can be customizedCustomization approaches with demos

Page 3: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Customizing WidgetsCustomizing Widgets

Page 4: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Customizing WidgetsCustomizing WidgetsTheming

Changing styles: colors, sizing, font, etc.

Page 5: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Customizing WidgetsCustomizing WidgetsTheming

Changing styles: colors, sizing, font, etc.Altering presentation of a widget

New viewRecreating a view

Page 6: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Customizing WidgetsCustomizing WidgetsTheming

Changing styles: colors, sizing, font, etc.Altering presentation of a widget

New viewRecreating a view

ExtendingOverriding, adding functionality

Page 7: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Customization ApproachesCustomization Approaches

Page 8: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Customization ApproachesCustomization ApproachesAuthoring a theme

Page 9: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Customization ApproachesCustomization ApproachesAuthoring a themeRecreating a view

Page 10: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Customization ApproachesCustomization ApproachesAuthoring a themeRecreating a viewExtending a view

Page 11: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part IPart IThemingTheming

Page 12: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part I: ThemingPart I: Theming

Page 13: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part I: ThemingPart I: ThemingWhy Theme?Why Theme?

Page 14: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part I: ThemingPart I: ThemingWhy Theme?Why Theme?

Match branding.Contrast with the map.User-speci�c (e.g. bigger buttons).

Page 15: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Esri ThemesEsri Themes10 themes are provided out-of-the-box:

Using a theme requires only a slight update to the CSS path.

<link rel="stylesheet" href="https://js.arcgis.com/<version>/esri/themes/<theme-name>/main.css" />

Page 17: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Theming TechnologyTheming Technology

Page 18: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

We use

to create our CSS.to create our CSS.

Page 19: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

We use

to create our CSS.to create our CSS.

| nodejs.org gruntjs.com

Page 20: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

is a powerful scripting language for compiling CSS.is a powerful scripting language for compiling CSS.

Page 21: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

is a powerful scripting language for compiling CSS.is a powerful scripting language for compiling CSS.It's modular.It's DRY.It makes theming easy.

Page 22: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Theming StepsTheming Steps

Page 23: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Theming StepsTheming Steps1. Get our theme utility.2. Use the utility.3. Customize your theme.4. Host your CSS �le.

Page 24: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Step 1Step 1Clone the repo.

https://github.com/jcfranco/jsapi-styles

git clone https://github.com/jcfranco/jsapi-styles.git

Page 25: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Step 2Step 2npm install

Page 26: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Step 2Step 2npm install

Installs the necessary bits.Creates a sample theme directory.Compiles the CSS from the SCSS.Spins up a preview in your default browser.

Page 27: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Step 3Step 3Edit your theme.

sass/my-theme/main.scss

Page 28: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Step 3Step 3Edit your theme.

sass/my-theme/main.scss

Optionally, edit your app.preview/index.html

Page 29: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Step 4Step 4Host your stylesheet and any relevant assets.

Link your stylesheet in your app.

<!-- In your app: --><link href="path/to/your/theme/main.css" rel="stylesheet" />

Page 30: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

GoalsGoalsTheme Smart

Avoid adding additional CSS selectorsInstead, use Sass to your advantage

Page 31: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Theme StructureTheme StructureLet's look at how the core theme is structured

Color Size Type

Page 32: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Theme StructureTheme StructureLet's look at how the core theme is structured

Color : _color.scssSize : _sizes.scssType : _type.scss

Page 33: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Theme StructureTheme StructureDefaultDefault

Any value assignment overrides the !default value.

// Inside base/_color_.scss$background-color: #fff !default;

// Inside sass/my-theme/main.scss$background-color: #1e0707;

Page 34: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Theme StructureTheme StructureDefaultDefault

Any value assignment overrides the !default value.

But wait...there's more!

// Inside base/_color_.scss$background-color: #fff !default;

// Inside sass/my-theme/main.scss$background-color: #1e0707;

Page 35: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Theme StructureTheme StructureOverride the core color variables...

$font-color: #3a5fe5; $interactive-font-color: #ff1515; $background-color: #1e0707; $button-color: #8070cc;

Page 36: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Theme StructureTheme StructureOverride the core color variables...

...then magic!

$font-color: #3a5fe5; $interactive-font-color: #ff1515; $background-color: #1e0707; $button-color: #8070cc;

Page 37: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

MagicMagicUsing $button-color we "automagically" set the hover color.

$button-color--hover: darken($button-color, 10%) !default; // ...etc

API Styling Guide

Page 38: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part I: Let's make a themePart I: Let's make a theme

Page 40: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part I: Theming RecapPart I: Theming RecapUse the utility for easy theming.Theme structure

ColorSizeTypography

Use the core and override values.

Page 41: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

End Part IEnd Part I

Page 42: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part IIPart IIViewsViews

Page 43: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Widget CompositionPart II: Widget CompositionWidgets are composed of Views & ViewModels

Page 44: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Widget CompositionPart II: Widget CompositionWidgets are composed of Views & ViewModels

Logic is separate from presentationReusableUI replacementFramework integration

Page 45: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: TypeScriptPart II: TypeScriptWidgets written in TypeScript (Typed JavaScript)

Page 46: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: TypeScriptPart II: TypeScriptWidgets written in TypeScript (Typed JavaScript)JS of the future, now

Page 47: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: TypeScriptPart II: TypeScriptWidgets written in TypeScript (Typed JavaScript)JS of the future, nowIDE support

Visual StudioWebStormSublimeand more!

Page 48: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: ViewsPart II: Views

Page 49: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: ViewsPart II: ViewsPresentation of the WidgetUses ViewModel APIs to render the UIView-speci�c logic resides hereExtend esri/widgets/Widget

Page 50: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Widget ClassPart II: Widget Classesri/widgets/Widget

Page 51: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Widget ClassPart II: Widget Classesri/widgets/Widget

Provides lifecycleAPI consistency

Page 52: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Widget LifecyclePart II: Widget Lifecycle

Page 53: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Widget LifecyclePart II: Widget Lifecycle constructor

Page 54: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Widget LifecyclePart II: Widget Lifecycle constructor

postInitialize

Page 55: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Widget LifecyclePart II: Widget Lifecycle constructor

postInitialize render

Page 56: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Widget LifecyclePart II: Widget Lifecycle constructor

postInitialize render destroy

Page 57: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Part II: renderrender

Page 58: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Part II: renderrenderDe�nes UIReacts to stateUses JSXVDOM

Page 59: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Working with ViewsPart II: Working with ViewsAPI Exploration

ScaleRangeSlider DocScaleRangeSlider Demo

Page 60: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Recreating a viewPart II: Recreating a viewCustom ScaleRangeSlider

Page 61: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: CustomScaleRangeSlider InterfacePart II: CustomScaleRangeSlider Interfaceinterface CustomScaleRangeSlider { layer: Layer; // aliased rangeType: "to" | "from"; region: string; // will use to get thumbnails view: MapView | SceneView; // aliased viewModel: ScaleRangeSliderViewModel; // handling logic! }

Page 63: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Views RecapPart II: Views RecapWhat have we learned about Widget Views?

Page 64: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part II: Views RecapPart II: Views RecapWhat have we learned about Widget Views?

Face of the widgetPresent ViewModel logicViewModel separation allows framework integration or custom viewsDownloadable on API docs

Page 65: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

End Part IIEnd Part II

Page 66: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part IIIPart IIIExtending a ViewExtending a View

Page 67: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part III: ExtendingPart III: Extending

Page 68: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part III: ExtendingPart III: ExtendingWhy?

Page 69: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part III: ExtendingPart III: ExtendingWhy?

Reusable

Page 70: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part III: ExtendingPart III: ExtendingWhy?

ReusableSame ecosystem

Page 71: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part III: ExtendingPart III: ExtendingWhy?

ReusableSame ecosystem

How?

Page 72: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part III: ExtendingPart III: ExtendingWhy?

ReusableSame ecosystem

How? Leveragingesri/widgets/Widget

Page 73: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part III: ExtendingPart III: ExtendingWhy?

ReusableSame ecosystem

How? Leveragingesri/widgets/WidgetAPI widget views

Page 75: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part III: Extending a View RecapPart III: Extending a View Recap

Page 76: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part III: Extending a View RecapPart III: Extending a View RecapReusable

View/ViewModel

Page 77: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part III: Extending a View RecapPart III: Extending a View RecapReusable

View/ViewModelSame ecosystem

No extra libraries

Page 78: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Part III: Extending a View RecapPart III: Extending a View RecapReusable

View/ViewModelSame ecosystem

No extra librariesExtended existing widget

LifecycleTypeScript

Page 79: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

End Part IIIEnd Part III

Page 80: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

ConclusionConclusion

Page 81: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

ConclusionConclusionAuthored a theme

Page 82: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

ConclusionConclusionAuthored a themeRecreated a view

Page 83: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

ConclusionConclusionAuthored a themeRecreated a viewExtended a view

Page 85: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

You might also be interested in...You might also be interested in...ArcGIS API for JavaScript: Getting Started with Web DevelopmentArcGIS API for JavaScript: Using TypeScriptArcGIS API for JavaScript: Tips and Tricks for Developing and Debugging AppsBuilding Light-Weight Map Authoring Web AppsArcGIS API for JavaScript: Building Your Own Widget

Page 86: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,

Questions? 🤔Questions? 🤔Where can I �nd the slides/source?

bit.ly/buildwidgetsds20

Where can I submit a question?

bit.ly/askjsapi

Page 87: ArcGIS API for JavaScript: Customizing the JavaScript Widgets › content › dam › esrisites › en-us › ... · Customizing Widgets Theming Changing styles: colors, sizing, font,