diff options
Diffstat (limited to 'devtools/client/shared/components/tree/tree-header.js')
-rw-r--r-- | devtools/client/shared/components/tree/tree-header.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/devtools/client/shared/components/tree/tree-header.js b/devtools/client/shared/components/tree/tree-header.js new file mode 100644 index 000000000..eec5363dd --- /dev/null +++ b/devtools/client/shared/components/tree/tree-header.js @@ -0,0 +1,100 @@ +/* -*- 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"; + +// Make this available to both AMD and CJS environments +define(function (require, exports, module) { + // ReactJS + const React = require("devtools/client/shared/vendor/react"); + + // Shortcuts + const { thead, tr, td, div } = React.DOM; + const PropTypes = React.PropTypes; + + /** + * This component is responsible for rendering tree header. + * It's based on <thead> element. + */ + let TreeHeader = React.createClass({ + displayName: "TreeHeader", + + // See also TreeView component for detailed info about properties. + propTypes: { + // Custom tree decorator + decorator: PropTypes.object, + // True if the header should be visible + header: PropTypes.bool, + // Array with column definition + columns: PropTypes.array + }, + + getDefaultProps: function () { + return { + columns: [{ + id: "default" + }] + }; + }, + + getHeaderClass: function (colId) { + let decorator = this.props.decorator; + if (!decorator || !decorator.getHeaderClass) { + return []; + } + + // Decorator can return a simple string or array of strings. + let classNames = decorator.getHeaderClass(colId); + if (!classNames) { + return []; + } + + if (typeof classNames == "string") { + classNames = [classNames]; + } + + return classNames; + }, + + render: function () { + let cells = []; + let visible = this.props.header; + + // Render the rest of the columns (if any) + this.props.columns.forEach(col => { + let cellStyle = { + "width": col.width ? col.width : "", + }; + + let classNames = []; + + if (visible) { + classNames = this.getHeaderClass(col.id); + classNames.push("treeHeaderCell"); + } + + cells.push( + td({ + className: classNames.join(" "), + style: cellStyle, + key: col.id}, + div({ className: visible ? "treeHeaderCellBox" : "" }, + visible ? col.title : "" + ) + ) + ); + }); + + return ( + thead({}, tr({ className: visible ? "treeHeaderRow" : "" }, + cells + )) + ); + } + }); + + // Exports from this module + module.exports = TreeHeader; +}); |