| Index: third_party/polymer/components/core-localstorage/core-localstorage.html
|
| diff --git a/third_party/polymer/components/core-localstorage/core-localstorage.html b/third_party/polymer/components/core-localstorage/core-localstorage.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3ca5a099e7f24da22b6fdf55258c192848d1ea58
|
| --- /dev/null
|
| +++ b/third_party/polymer/components/core-localstorage/core-localstorage.html
|
| @@ -0,0 +1,128 @@
|
| +<!--
|
| +Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
|
| +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
| +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
| +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
| +Code distributed by Google as part of the polymer project is also
|
| +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
| +-->
|
| +
|
| +<!--
|
| +Element access to localStorage. The "name" property
|
| +is the key to the data ("value" property) stored in localStorage.
|
| +
|
| +`core-localstorage` automatically saves the value to localStorage when
|
| +value is changed. Note that if value is an object auto-save will be
|
| +triggered only when value is a different instance.
|
| +
|
| + <core-localstorage name="my-app-storage" value="{{value}}"></core-localstorage>
|
| +
|
| +@group Polymer Core Elements
|
| +@element core-localstorage
|
| +@blurb Element access to localStorage.
|
| +@url github.io
|
| +@categories Data
|
| +-->
|
| +
|
| +<link rel="import" href="../polymer/polymer.html">
|
| +
|
| +<polymer-element name="core-localstorage" attributes="name value useRaw autoSaveDisabled" hidden>
|
| +<script>
|
| +
|
| + Polymer('core-localstorage', {
|
| +
|
| + /**
|
| + * Fired when a value is loaded from localStorage.
|
| + * @event core-localstorage-load
|
| + */
|
| +
|
| + /**
|
| + * The key to the data stored in localStorage.
|
| + *
|
| + * @attribute name
|
| + * @type string
|
| + * @default null
|
| + */
|
| + name: '',
|
| +
|
| + /**
|
| + * The data associated with the specified name.
|
| + *
|
| + * @attribute value
|
| + * @type object
|
| + * @default null
|
| + */
|
| + value: null,
|
| +
|
| + /**
|
| + * If true, the value is stored and retrieved without JSON processing.
|
| + *
|
| + * @attribute useRaw
|
| + * @type boolean
|
| + * @default false
|
| + */
|
| + useRaw: false,
|
| +
|
| + /**
|
| + * If true, auto save is disabled.
|
| + *
|
| + * @attribute autoSaveDisabled
|
| + * @type boolean
|
| + * @default false
|
| + */
|
| + autoSaveDisabled: false,
|
| +
|
| + attached: function() {
|
| + // wait for bindings are all setup
|
| + this.async('load');
|
| + },
|
| +
|
| + valueChanged: function() {
|
| + if (this.loaded && !this.autoSaveDisabled) {
|
| + this.save();
|
| + }
|
| + },
|
| +
|
| + load: function() {
|
| + var v = localStorage.getItem(this.name);
|
| + if (this.useRaw) {
|
| + this.value = v;
|
| + } else {
|
| + // localStorage has a flaw that makes it difficult to determine
|
| + // if a key actually exists or not (getItem returns null if the
|
| + // key doesn't exist, which is not distinguishable from a stored
|
| + // null value)
|
| + // however, if not `useRaw`, an (unparsed) null value unambiguously
|
| + // signals that there is no value in storage (a stored null value would
|
| + // be escaped, i.e. "null")
|
| + // in this case we save any non-null current (default) value
|
| + if (v === null) {
|
| + if (this.value !== null) {
|
| + this.save();
|
| + }
|
| + } else {
|
| + try {
|
| + v = JSON.parse(v);
|
| + } catch(x) {
|
| + }
|
| + this.value = v;
|
| + }
|
| + }
|
| + this.loaded = true;
|
| + this.asyncFire('core-localstorage-load');
|
| + },
|
| +
|
| + /**
|
| + * Saves the value to localStorage.
|
| + *
|
| + * @method save
|
| + */
|
| + save: function() {
|
| + var v = this.useRaw ? this.value : JSON.stringify(this.value);
|
| + localStorage.setItem(this.name, v);
|
| + }
|
| +
|
| + });
|
| +
|
| +</script>
|
| +</polymer-element>
|
|
|