- Notifications
You must be signed in to change notification settings - Fork790
Google Closure Library
DEPRECATION NOTICE: Please do not edit this wiki. Instead submit pull requests tohttps://github.com/clojure/clojurescript-site
The up to date version of this page can be found athttps://clojurescript.org/reference/google-closure-library
ClojureScript projects always auto-include theGoogle 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.
- Google Closure Library API Reference
- Closure Cheatsheet - abridged API with usage examples
You may first want to consider the following ClojureScript libraries which wrapsome functionality from Google Closure Library. Their source code also servesas good examples of how to use Closure directly.
ClojureScript wrapper | Closure Libraries |
---|---|
cljs-time | goog.date |
cljs-http | goog.net,goog.uri |
cljs-ajax | goog.net,goog.uri,goog.json |
cuerdas | goog.string |
* included in ClojureScript's core library
Some helpful blog posts:
- ClojureScript Made Easy - Don't forget about Google Closure
- ClojureScript Made Easy - When do I use :require vs :import?
To use Google Closure in your ClojureScript code, the rule is to use:
:import
for Closure classes (which are also namespaces, likegoog.Uri
) and enums:require
for everything else
This is only for when you would like to refer directly to a class which isalso a namespace, otherwise just use:require
in yourns
form or use therequire
REPL helper.
(nsexample.core (:import goog.Uri))
;; in REPL(import 'goog.Uri)(Uri."http://example.com");;=> #<http://example.com>
(nsexample.core (:import [goog.events EventType]))
;; in REPL(import '[goog.events EventType])EventType.CLICK;;=> "click"
(nsexample.core (:require [goog.math:as math]))
;; in REPL(require '[goog.math:as math])(math/clamp-105);;=> 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 |
(nsexample.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
You can look forcljs
files on Github that usegoog.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)"
- Rationale
- Quick Start
- Differences from Clojure
- [Usage of Google Closure](Google Closure)