Menu Sidebar

Inline Footnotes WordPress Widget – Version 2 Released

Version 2.1.0 of one of the WordPress plugins that I manage, Inline Footnotes, has been released.

This new version:

  1. Fixes mobile issues by showing the footnote content in the center of the screen when on mobile.
  2. Allows `background_color` attribute in the footnote tag.
  3. Adds option to show footnote on hover
  4. Has minified JS/CSS files

To facilitate the first item above, I had to change how the show/hide behavior of the footnotes works a little bit. After this update, if you click a second footnote open while a footnote is already open, the first one will close (previously both would stay open).

Here are some of the new features in action (The third footnote is colored “red” with the new “background_color” attribute):

Please check out the plugin over here.

2017 Lambert St. Louis Airport Passenger Data

The St. Louis Airport recently released the 2017 information on passenger data. I really appreciate that they are releasing this information, but would love if the data was in a better format for working with this. To help others use this data, I’ve created GitHub repository where you can download this data. I’ve also created a few graphs based on this live data.

The data is here:

And I created a few graphs here:

It’s not a lot of data. I would love if the Airport released other data, like:

  1. Carrier information on how many flights are in/out of the airport
  2. How many flights per date
  3. Information on revenue sources
  4. How many flights to each destination?

Top 5 Parking Locations at Lambert St. Louis Airport (Updated 2018)

A few years ago I posted an analysis of the best airport parking providers near Lambert St. Louis Airport. Even though I usually post technology and mapping related posts, this is actually one of the most popular posts on this blog. (Lol!) In the intervening years since that was posted, some of the information has gone stale – most notably the parking prices changed which, it turns out, changes the order of the list!

Super Park Lot D is now the best deal based on price alone. But it is a little farther from the terminal than Sky Park, so in cost per time, it may be closer than you think.

1. Super Park Lot D – $7/day

It’s a bit farther away from the terminal than Sky Park (#2), but at $7/day this is the winner for the true cheapskate. This lot is often close to capacity though, so make sure you check the availability on their website.

  • Distance to Terminal A: 1.5 mi
  • Uncovered parking rate: $7/day

2. Skypark – $8/day

This used to be my #1 pick, but prices went up recently. They also used to send out coupons to their email list, but that ended in 2015. You can still get a solid rate of $8/day here, so it’s still my backup if Super Park Lot D is full, or if time is short (Skypark is 0.5 miles closer to the terminal)

  • Distance to Terminal A: 1 mi
  • Uncovered parking rate: $8/day

3. EZ Park – $9/day
As a neighbor of Skypark, EZ Park is often in direct competition with them. They are the third most expensive, but often have specials (right now they have a coupon for $7/day)

  • Distance to Terminal A: 1 mi
  • Uncovered parking rate: $9/day

4. Super Park Lot C – $9/day

This has the same price as EZ Park above, but is just a bit farther away from the terminal. This is probably the lowest cost for covered parking if you’re looking for that feature.

  • Distance to Terminal A: 1 mi
  • Uncovered parking rate: $9/day
  • Covered parking rate: $11/day

5. The Parking Spot East – $10/day

Even from the East (Southwest Airlines) terminal, this is a 3.1 mile trek on the bus. Unless you’re loyal to The Parking Spot, I don’t see why the rates of Super Park Lot E above don’t win out over this option.

  • Distance to Terminal A: 4 mi
  • Uncovered parking rate: $10/day
  • Covered parking rate: $15/day

Runner Up: The Parking Spot 3 – $13/day

As the closest option (0.8 mi), this is on the list only if you’re running late and need to get to the terminal quickly. They typically have coupons that might get your rate closer to some of the earlier cheaper options.

  • Distance to Terminal A: 0.8 mi
  • Uncovered parking rate: $13/day
  • Covered parking rate: $18/day

Map of all the options below:

Comedians in Cars Getting Coffee – Seasons 1-9 Original Order

Here is the original order from the releases of Comedians in Cars Getting Coffee, as they were released before being moved to Netflix.

Title Season/Episode Guest Video Duration Release Date
‘Larry Eats a Pancake’ S1 E1 Larry David 13:35 2012-07-19
‘Mad Man in a Death Machine’ S1 E2 Ricky Gervais 11:33 2012-08-02
‘A Monkey and a Lava Lamp’ S1 E3 Brian Regan 12:18 2012-08-09
‘Just a Lazy Shiftless Bastard’ S1 E4 Alec Baldwin 11:24 2012-08-16
‘A Taste of Hell From on High’ S1 E5 Joel Hodgson 10:45 2012-08-23
‘Unusable on the Internet’ S1 E6 Bob Einstein 12:24 2012-08-30
‘You Don’t Want to Offend a Cannibal’ S1 E7 Barry Marder (Ted L. Nancy) 7:56 2012-09-06
‘I Hear Downton Abbey is Pretty Good…’ S1 E8 Colin Quinn & Mario Joyner 11:08 2012-09-13
‘I Want Sandwiches, I Want Chicken’ S1 E9 Carl Reiner & Mel Brooks 17:07 2012-09-20
‘It’s Bubbly Time, Jerry’ S1 E10 Michael Richards 17:13 2012-09-27
‘I’m Going To Change Your Life Forever’ S2 E1 Sarah Silverman 18:51 2013-06-13
‘I Like Kettlecorn’ S2 E2 David Letterman 18:24 2013-06-20
‘No Lipsticks for Nuns’ S2 E3 Gad Elmaleh 17:44 2013-06-27
‘You’ll Never Play the Copa’ S2 E4 Don Rickles 12:51 2013-07-04
‘Really?!’ S2 E5 Seth Meyers 14:23 2013-07-11
‘Kids Need Bullying’ S2 E6 Chris Rock 15:33 2013-07-18
‘Comedy, Sex and The Blue Numbers’ S3 E1 Louis C.K. 22:39 2014-01-02
‘How Would You Kill Superman?’ S3 E2 Patton Oswalt 12:31 2014-01-09
‘Comedy Is a Concealed Weapon’ S3 E3 Jay Leno 20:52 2014-01-16
‘So You’re Mellow and Tense?’ S3 E4 Todd Barry 14:49 2014-01-22
‘Feces Are My Purview’ S3 E5 Tina Fey 16:05 2014-01-30
‘The Over-Cheer’ S3 E6 George Costanza 06:19 2014-02-02
‘The Last Days of Howard Stern’ S3 E7 Howard Stern 13:21 2014-02-06
‘A Little Hyper-Aware’ S4 E1 Sarah Jessica Parker 19:34 2014-06-19
‘Two Polish Airline Pilots’ S4 E2 George Wallace 16:11 2014-06-26
‘Opera Pimp’ S4 E3 Robert Klein 15:55 2014-07-03
‘It’s Like Pushing a Building Off a Cliff’ S4 E4 Aziz Ansari 16:37 2014-07-10
‘The Sound of Virginity’ S4 E5 Jon Stewart 18:13 2014-07-17
‘You Look Amazing in the Wind’ S5 E1 Kevin Hart 19:36 2014-11-06
‘I’m Wondering What It’s Like To Date Me’ S5 E2 Amy Schumer 16:06 2014-11-13
‘Smoking Past The Band’ S5 E3 Bill Burr 16:03 2014-11-20
‘Happy Thanksgiving Miranda’ S5 E4 Miranda Sings 20:32 2014-11-27
‘I Wasn’t Told About This…With Special Feature: I’m Dying, Jerry’ S5 E5 Fred Armisen 20:56 2014-12-04
‘I’m Going To Take A Percocet And Let That One Go’ S5 E6 Ali Wentworth 17:54 2014-12-11
‘The Unsinkable Legend: Part 2’ S5 E7 Jimmy Fallon 16:58 2014-12-18
‘The Unsinkable Legend: Part 1’ S5 E8 Jimmy Fallon 17:04 2014-12-18
‘I’ll Go If I Don’t Have To Talk’ S6 E1 Julia Louis-Dreyfus 17:09 2015-06-04
‘Always Do The Banana Joke First’ S6 E2 Steve Harvey 18:18 2015-06-11
‘We Love Breathing What You’re Burning, Baby’ S6 E3 Jim Carrey 16:33 2015-06-18
‘The Comedy Team of Smug and Arrogant’ S6 E4 Bill Maher 18:53 2015-06-25
‘That’s the Whole Point of Apartheid, Jerry’ S6 E5 Trevor Noah 20:58 2015-07-02
‘Cut Up And Bloody But Looking Good’ S6 E6 Stephen Colbert 16:48 2015-07-09
‘Just Tell Him You’re the President’ S7 E1 President Barack Obama 19:13 2015-12-31
‘If You See This On A Toilet Seat, Don’t Sit Down’ S7 E2 Steve Martin 23:06 2016-01-07
‘Stroked Out On A Hot Machine’ S7 E3 Kathleen Madigan & Chuck Martin 17:56 2016-01-14
‘It’s Great That Garry Shandling Is Still Alive’ S7 E4 Garry Shandling 21:44 2016-01-21
‘I Don’t Think That’s Bestiality’ S7 E5 Sebastian Maniscalco 16:16 2016-01-28
‘Mr. Ferrell, For the Last Time, We’re Going To Ask You To Put the Cigar Out’ S7 E6 Will Ferrell 18:15 2016-02-04
‘Stick Around For The Pope’ S8 E1 Jim Gaffigan 19:15 2016-06-16
‘You Can Go Cho Again’ S8 E2 Margaret Cho 18:21 2016-06-23
‘Escape From Syosset’ S8 E3 Judd Apatow 16:13 2016-06-30
‘Everybody Respects A Bloody Nose’ S8 E4 J.B. Smoove 15:06 2016-07-06
‘Everybody Likes To See The Monkeys’ S8 E5 Lorne Michaels 16:22 2016-07-14
‘What Kind Of Human Animal Would Do This?’ S8 E6 John Oliver 18:10 2016-07-21
‘The Volvo-ness’ S9 E1 Kristen Wiig 17:32 2017-01-05
‘A Rusty Car In The Rain’ S9 E2 Norm MacDonald 21:15 2017-01-12
‘Dictators, Comics, And Preachers’ S9 E3 Cedric the Entertainer 14:36 2017-01-19
‘At What Point Am I Out From Under?’ S9 E4 Lewis Black 16:11 2017-01-26
‘Champagne, Cigars, And Pancake Batter’ S9 E5 Christoph Waltz 13:43 2017-02-02
‘It’s Not So Funny When It’s Your Mother’ S9 E6 Bob Einstein 23:09 2017-02-09

Custom Web AppBuilder Widgets in TypeScript

If you’re a JavaScript developer, you may have heard of TypeScript, a typed superset of JavaScript that compiles to plain JavaScript. If you’re also creating custom Web AppBuilder widgets, using TypeScript in a widget is a great way to get started with TypeScript. Here are a few notes and tips that I’ve discovered while using TypeScript within a Web AppBuilder custom widget development workflow.


My usual Web AppBuilder development workflow is to have my widget code in its own code repository, and use a task runner like Grunt or Gulp to automatically compile and copy my code to the correct places (The stemapp directory and optionally the server directory of the app that I’m currently working on). Within this context, TypeScript fills the “transpiler” role where Babel might currently be in your stack.

tsconfig.json file

Many aspects of your tsconfig.json file are on a per-project basis, but there are a few things that you do need:

  1. “module”: “amd” – we choose “amd” because AMD is the module style that Web AppBuilder expects to see when loading a widget into an app.
  2. “moduleResolution”: “classic” – because we chose “AMD” above
  3. “target”: “es5” – the ECMAScript JavaScript type that we want the TypeScript compliler to output. We want to target es5 so the code we write in ES6-style JavaScript will be converted down so older browsers will be able to read it.
  4. “types”: [ “arcgis-js-api”, “dojo-typings”] – the names of the type definitions we want to include.
  5. “inlineSources” and “inlineSourceMap” – set these to true if you’ve got a build system that is moving code around, so that your source maps will work when debugging in the browser.

Full example here.

Declare Decorator

This is the main key to the entire process. It tells the TypeScript compiler how to translate your ES6-style class syntax in your Widget.ts file into the Dojo-style define/declare syntax that Web AppBuilder expects. This bit of code can be obtained from the dojo/typings repository, and included in your widget files. You then import it into your Widget.ts file, and apply the decorator on your Widget class. Note that decorators are experimental right now, so they could potentially be removed from TypeScript in the future, but for now this is a good option that keeps our code clean.


I would like to write code as close as possible to true ES6 JavaScript. So I’d like to use the native JavaScript Promise syntax. But when I tried to do this in my widget, I initially got an error, “error TS2693: ‘Promise’ only refers to a type, but is being used as a value here.” To resolve this problem, all I had to do was add the “es6-promise” library to my “lib” property in the “tsconfig.json” file. See the “–lib” line in the TypeScript Compiler Options Table for more information – including a clarification of why I’m including dom, es5, etc, as well as options that you can add other than es2015.promise.

[“dom”, “es5”, “scripthost”, “es2015.promise”]


I found it’s easiest if you set “inlineSources” and “inlineSourceMap” in your “tsconfig.json” file to true. If not, the path of the sourcemap is often wrong. The TS source shows as a separate file from your main widgets file:


That’s a lot of information, and it’s sometimes hard to get all the settings in your project exactly correct, so I’ve put together an example widget in a GitHub repository that is available for download here: Web AppBuilder Typescript Examples. Note there are 2 examples in there that represent 2 “styles” of project, so please read the README file for clarification on which to use. We’re also considering getting a TypeScript option into the Web AppBuilder Custom Widget Generator, and if you have any feedback on what you’d like to see there, please let us know via this GitHub issue. Thanks!


Note: this post also appears on my Esri Community Blog.

Newer Posts
Older Posts

Gavin Rehkemper

JavaScript, WordPress, and GeoDev