Skip to content

Google Closure Library

Shaun LeBron edited this page Jun 29, 2015 · 13 revisions

ClojureScript projects always auto-include the Google Closure Library, a massive library built and used by Google on many of their products (Gmail, Docs, etc). It has low-level utilities for DOM manipulation, server communication, animation, data structures, unit testing, rich-text editing, and UI widgets/controls.

Try the wrapper libraries first!

You may first want to consider the following ClojureScript libraries which wrap some functionality from Google Closure Library. Their source code also serves as good examples of how to use Closure directly.

ClojureScript wrapper Closure Libraries
cljs-time goog.date
cljs-http goog.net, goog.uri
cuerdas goog.string
clojure.browser.dom* goog.dom
clojure.browser.net* goog.net
clojure.browser.event* goog.events

* included in ClojureScript's core library

Using Google Closure directly

Some helpful blog posts:

To use Google Closure in your ClojureScript code, the rule is to use:

  • :import for Closure classes and enums
  • :require for everything else

Import a class

(ns example.core
  (:import goog.Uri))
;; in REPL
(import 'goog.Uri)
(Uri. "http://example.com")
;;=> #<http://example.com>

Import an enum

(ns example.core
  (:import [goog.events EventType]))
;; in REPL
(import '[goog.events EventType])
EventType.CLICK
;;=> "click"

Requiring a function

(ns example.core
  (:require [goog.math :as math]))
;; in REPL
(require '[goog.math :as math]])
(math/clamp -1 0 5)
;;=> 0
⚠️ Sometimes symbols are __not auto-included__ when requiring their parent namespace. This happens when those symbols are in their own file and require specific inclusion
(ns example.core
  (:require
    [goog.string :as gstring]
    goog.string.format))
;; in REPL
(require '[goog.string :as gstring])
(require 'goog.string.format)

(goog.string.format "%05d" 123)
;;=> 00123

;; or use the alias
(gstring/format "%05d" 123)
;;=> 00123

Searching for Examples

You can look for cljs files on Github that use goog.dom with the following search:

Search GitHub: "[goog.dom extension:cljs](https://github.com/search?utf8=%E2%9C%93&q=goog.dom+extension%3Acljs&type=Code&ref=searchresults)"

Or you can search Google Closure Library on Github for keywords pertaining to a function it might have:

Search Closure Library on Github: "[hours minutes](https://github.com/google/closure-library/search?utf8=%E2%9C%93&q=hours+minutes)"
Clone this wiki locally