diff --git a/bookwyrm/static/js/status_cache.js b/bookwyrm/static/js/status_cache.js
new file mode 100644
index 00000000..9d86c313
--- /dev/null
+++ b/bookwyrm/static/js/status_cache.js
@@ -0,0 +1,40 @@
+/* exported StatusCache */
+/* globals BookWyrm */
+
+let StatusCache = new class {
+ constructor() {
+ document.querySelectorAll('[data-cache-draft]')
+ .forEach(t => t.addEventListener('change', this.updateDraft.bind(this)));
+ document.querySelectorAll('[data-cache-draft]')
+ .forEach(t => this.populateDraft(t));
+ }
+
+ /**
+ * Update localStorage copy of drafted status
+ *
+ * @param {Event} event
+ * @return {undefined}
+ */
+ updateDraft(event) {
+ // Used in set reading goal
+ let key = event.target.dataset.cacheDraft;
+ let value = event.target.value;
+
+ window.localStorage.setItem(key, value);
+ }
+
+ /**
+ * Toggle display of a DOM node based on its value in the localStorage.
+ *
+ * @param {object} node - DOM node to toggle.
+ * @return {undefined}
+ */
+ populateDraft(node) {
+ // Used in set reading goal
+ let key = node.dataset.cacheDraft;
+ let value = window.localStorage.getItem(key);
+
+ node.value = value;
+ }
+}();
+
diff --git a/bookwyrm/templates/layout.html b/bookwyrm/templates/layout.html
index 43ca81c7..e855bf60 100644
--- a/bookwyrm/templates/layout.html
+++ b/bookwyrm/templates/layout.html
@@ -251,6 +251,7 @@
+
{% block scripts %}{% endblock %}