12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- "use strict";
- const { fetchProperties } = require("./actions/grips");
- const { Property } = require("./reducers/grips");
- // Implementation
- function GripProvider(grips, dispatch) {
- this.grips = grips;
- this.dispatch = dispatch;
- }
- /**
- * This object provides data for the tree displayed in the tooltip
- * content.
- */
- GripProvider.prototype = {
- /**
- * Fetches properties from the backend. These properties might be
- * displayed as child objects in e.g. a tree UI widget.
- */
- getChildren: function (object) {
- let grip = object;
- if (object instanceof Property) {
- grip = this.getValue(object);
- }
- if (!grip || !grip.actor) {
- return [];
- }
- let props = this.grips.get(grip.actor);
- if (!props) {
- // Fetch missing data from the backend. Returning a promise
- // from data provider causes the tree to show a spinner.
- return this.dispatch(fetchProperties(grip));
- }
- return props;
- },
- hasChildren: function (object) {
- if (object instanceof Property) {
- let value = this.getValue(object);
- if (!value) {
- return false;
- }
- let hasChildren = value.ownPropertyLength > 0;
- if (value.preview) {
- hasChildren = hasChildren || value.preview.ownPropertiesLength > 0;
- }
- if (value.preview) {
- let preview = value.preview;
- let k = preview.kind;
- let objectsWithProps = ["DOMNode", "ObjectWithURL"];
- hasChildren = hasChildren || (objectsWithProps.indexOf(k) != -1);
- hasChildren = hasChildren || (k == "ArrayLike" && preview.length > 0);
- }
- return (value.type == "object" && hasChildren);
- }
- return null;
- },
- getValue: function (object) {
- if (object instanceof Property) {
- let value = object.value;
- return (typeof value.value != "undefined") ? value.value :
- value.getterValue;
- }
- return object;
- },
- getLabel: function (object) {
- return (object instanceof Property) ? object.name : null;
- },
- getKey: function (object) {
- return (object instanceof Property) ? object.key : null;
- },
- getType: function (object) {
- return object.class ? object.class : "";
- },
- };
- // Exports from this module
- exports.GripProvider = GripProvider;
|