mirror of
https://github.com/ManchildProductions/UXP-Fixed.git
synced 2026-06-15 07:31:00 +00:00
98 lines
2.5 KiB
JavaScript
98 lines
2.5 KiB
JavaScript
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
|
/* 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;
|