123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /* -*- 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";
- // Make this available to both AMD and CJS environments
- define(function (require, exports, module) {
- // ReactJS
- const React = require("devtools/client/shared/vendor/react");
- // Dependencies
- const { createFactories, isGrip } = require("./rep-utils");
- const { PropRep } = createFactories(require("./prop-rep"));
- // Shortcuts
- const { span } = React.DOM;
- /**
- * Renders a DOM Promise object.
- */
- const PromiseRep = React.createClass({
- displayName: "Promise",
- propTypes: {
- object: React.PropTypes.object.isRequired,
- mode: React.PropTypes.string,
- },
- getTitle: function (object) {
- const title = object.class;
- if (this.props.objectLink) {
- return this.props.objectLink({
- object: object
- }, title);
- }
- return title;
- },
- getProps: function (promiseState) {
- const keys = ["state"];
- if (Object.keys(promiseState).includes("value")) {
- keys.push("value");
- }
- return keys.map((key, i) => {
- return PropRep(Object.assign({}, this.props, {
- mode: "tiny",
- name: `<${key}>`,
- object: promiseState[key],
- equal: ": ",
- delim: i < keys.length - 1 ? ", " : ""
- }));
- });
- },
- render: function () {
- const object = this.props.object;
- const {promiseState} = object;
- let objectLink = this.props.objectLink || span;
- if (this.props.mode == "tiny") {
- let { Rep } = createFactories(require("./rep"));
- return (
- span({className: "objectBox objectBox-object"},
- this.getTitle(object),
- objectLink({
- className: "objectLeftBrace",
- object: object
- }, " { "),
- Rep({object: promiseState.state}),
- objectLink({
- className: "objectRightBrace",
- object: object
- }, " }")
- )
- );
- }
- const props = this.getProps(promiseState);
- return (
- span({className: "objectBox objectBox-object"},
- this.getTitle(object),
- objectLink({
- className: "objectLeftBrace",
- object: object
- }, " { "),
- ...props,
- objectLink({
- className: "objectRightBrace",
- object: object
- }, " }")
- )
- );
- },
- });
- // Registration
- function supportsObject(object, type) {
- if (!isGrip(object)) {
- return false;
- }
- return type === "Promise";
- }
- // Exports from this module
- exports.PromiseRep = {
- rep: PromiseRep,
- supportsObject: supportsObject
- };
- });
|