blob: 0300e36d6729acc601b72afc474dfe8a1497dfb9 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright 2015 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="/tracing/ui/brushing_state_controller.html">
<!--
This element handles storing and retrieving the brushing state of arbitrary
views (e.g. analysis sub-views). An element can use it by instantiating it and
appending it to itself:
<div id="some-view-with-specific-brushing-state">
<tr-ui-b-view-specific-brushing-state view-id="unique-view-identifier">
</tr-ui-b-view-specific-brushing-state>
... other child elements ...
</div>
The state can then be retrieved from and pushed to the state element as
follows:
newStateElement.set(state);
state = newStateElement.get();
Under the hood, the state element searches the DOM tree for an ancestor element
with a brushingStateController field to persist the state (see the
tr.c.BrushingStateController and tr.ui.b.BrushingState classes for more
details).
-->
<polymer-element name="tr-ui-b-view-specific-brushing-state">
<script>
'use strict';
Polymer({
/** Compulsory unique identifier of the associated view. */
get viewId() {
return this.getAttribute('view-id');
},
set viewId(viewId) {
this.setAttribute('view-id', viewId);
},
/**
* Retrieve the persisted state of the associated view. The returned object
* (or any of its fields) must not be modified by the caller (unless the
* object/field is treated as a reference).
*
* If no state has been persisted yet or there is no ancestor element with
* a brushingStateController field, this method returns undefined.
*/
get: function() {
var viewId = this.viewId;
if (!viewId)
throw new Error('Element must have a view-id attribute!');
var brushingStateController =
tr.c.BrushingStateController.getControllerForElement(this);
if (!brushingStateController)
return undefined;
return brushingStateController.getViewSpecificBrushingState(viewId);
},
/**
* Persist the provided state of the associated view. The provided object
* (or any of its fields) must not be modified afterwards (unless the
* object/field is treated as a reference).
*
* If there is no ancestor element with a brushingStateController field,
* this method does nothing.
*/
set: function(state) {
var viewId = this.viewId;
if (!viewId)
throw new Error('Element must have a view-id attribute!');
var brushingStateController =
tr.c.BrushingStateController.getControllerForElement(this);
if (!brushingStateController)
return;
brushingStateController.changeViewSpecificBrushingState(viewId, state);
}
});
</script>
</polymer-element>