51
ArcGIS API for JavaScript: Customizing ArcGIS API for JavaScript: Customizing Widgets Widgets Alan Sangma – Alan Sangma – Matt Driscoll – Matt Driscoll – JC Franco – JC Franco – @alansangma @alansangma @driskull @driskull @arfncode @arfncode

ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

ArcGIS API for JavaScript: CustomizingArcGIS API for JavaScript: CustomizingWidgetsWidgets

Alan Sangma – Alan Sangma –

Matt Driscoll – Matt Driscoll –

JC Franco – JC Franco –

@alansangma@alansangma

@driskull@driskull

@arfncode@arfncode

Page 2: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

AgendaAgendaWhat can be customizedCustomization approaches with demosQ & A

Page 3: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Customizing WidgetsCustomizing WidgetsTheming

Changing styles: colors, sizing, font, etc.Implementing widget in a different frameworkAltering presentation of a widget

Page 4: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Customization ApproachesCustomization ApproachesAuthoring a themeRecreating a viewExtending a view

Page 5: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget
Page 6: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Level ILevel I

ThemingTheming

Page 7: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Level I: ThemingLevel I: ThemingWhy Theme?Why Theme?

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

Page 8: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Theming TechnologyTheming Technology

Page 9: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

We use

to create our CSS.to create our CSS.

| nodejs.org gruntjs.com

Page 10: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

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 11: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

PREVIOUSLY ON THEMINGPREVIOUSLY ON THEMING

LIFE WAS HARD.

Page 12: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Before, you needed to

1. Pull down the API .2. Create a theme directory in the right place.3. Create a Sass �le.4. Import the core �le.5. Run the compiler.6. Wonder if there were an easier way.

(arcgis-js-api)

Page 13: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

There is an easier way!There is an easier way!1. Get our theme utility.2. Use the utility.3. Customize your theme.4. Host your CSS �le.

Page 14: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

There is an easier way!There is an easier way!1. Clone the utility jsapi-styles.git2. Run npm install3. Edit sass/my-theme/main.scss.4. See dist/my-theme/main.css.

You won't need the base stylesheet.

Page 15: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Step 1Step 1Clone the repo.

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

git clone https://github.com/jcfranco/interactive-design.git

Page 16: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

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 17: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Step 3Step 3Edit your theme.

sass/my-theme/main.scss

Optionally, edit your app. preview/index.html

Page 18: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

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 19: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Let's have a look!Let's have a look!

Page 20: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Theme SmartTheme SmartAvoid adding additional CSS selectors.

Instead, use Sass to your advantage. Let's look at how the core theme is structured.

Page 21: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Theme StructureTheme StructureColor : colorVariables.scssSize : sizes.scssType : type.scss

Page 22: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Theme StructureTheme StructureDefaultDefault

Any value assignment overrides the !default value.

But wait...there's more!

// Inside base/_colorVariables.scss $background_color : #fff !default ;

// Inside sass/my-theme/main.scss $background_color : #cc4b09;

Page 23: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Theme StructureTheme StructureOverride the four main color variables...

...then magic!

$text_color : #fff; // white $background_color : #cc4b09; // mario $anchor_color : #ffbaaa; // luigi $button_text_color : #ffbaaa; // luigi

Page 24: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

MagicMagic

$button_text_hover_color: offset-foreground-color($button_text_color, 25%) !default; $anchor_hover_color: offset-foreground-color($anchor_color, 25%) !default; $background_hover_color: offset-background-color($background_color, 5%) !default; // etc.

Theming Guide

Page 25: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

So let's make a theme!So let's make a theme!

Page 26: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Level I: Theming RecapLevel I: Theming RecapUse the utility for easy theming.Theme structure

ColorSizeTypography

Use the core and override values.

Page 27: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

LEVEL UP!LEVEL UP!

Ready?Ready?

Page 28: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

LEVEL IILEVEL II

ViewsViews

Page 29: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Level II: Widget CompositionLevel II: Widget CompositionWidgets are composed of Views & ViewModels

ReusableUI replacementFramework integration

Page 30: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Level II: ViewsLevel II: ViewsPresentation of the WidgetUses ViewModel APIs to render the UIView-speci�c logic resides here

Page 32: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Level II: Level II: AttributionViewModelAttributionViewModel// AttributionViewModel in 4.7 Release interface AttributionViewModel { items: Collection<AttributionItem>; state: "ready" | "disabled"; view: MapView | SceneView; } interface AttributionItem { layer: Layer; text: string; }

Page 33: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Views: Let's customize!Views: Let's customize!Lets create a custom widget view.

Page 35: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Level II: Views RecapLevel 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 36: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

LEVEL UP!LEVEL UP!

Ready?Ready?

Page 37: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

LEVEL IIILEVEL III

Extending a ViewExtending a View

Page 38: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Level III: Extending a ViewLevel III: Extending a ViewWhy?

ReusableSame ecosystem

How?JS API v4.7esri/widgets/WidgetTypeScript

Page 39: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

esri/widgets/Widget

Provides lifecycleAPI consistency

Page 40: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

LifecycleLifecycleconstructorpostInitializerenderdestroy

Page 41: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

renderrenderDe�nes UIReacts to stateUses JSXVDOM

Page 42: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

TypeScriptTypeScriptTyped JavaScriptJS of the future, nowIDE support

Visual StudioWebStormSublimeand more!

Page 44: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Level III: Extending a View RecapLevel III: Extending a View RecapReusable

View/ViewModelSame ecosystem

No extra librariesExtended existing widget

LifecycleTypeScript

Page 45: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

LEVEL UP!LEVEL UP!

Ready?Ready?

Page 46: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

LEVEL IVLEVEL IV

Put it all together.Put it all together.

Page 47: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

ConclusionConclusionAuthored a themeRecreated a viewExtended a view

Page 49: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget
Page 50: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget

Questions?Questions?For exampleFor example

� �

� Where can I �nd the slides/source?

esriurl.com/customwidgetsds2018

Page 51: ArcGIS API for JavaScript: C ustomizing Widgets · Theming Changing styles: colors, sizing, font, etc. Implementing widget in a different framework Altering presentation of a widget