components.js

来自「在线编辑器」· JavaScript 代码 · 共 242 行

JS
242
字号
/* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. * See the License for the specific language governing rights and * limitations under the License. * * The Original Code is Bespin. * * The Initial Developer of the Original Code is Mozilla. * Portions created by the Initial Developer are Copyright (C) 2009 * the Initial Developer. All Rights Reserved. * * Contributor(s): *   Bespin Team (bespin@mozilla.com) * * ***** END LICENSE BLOCK ***** */dojo.provide("bespin.dashboard.components");dojo.declare("bespin.dashboard.components.BespinBorder", th.Border, {    getInsets: function() {        return { left: 1, right: 1, bottom: 1, top: 1 };    },    paint: function(ctx) {        var d = this.component.d();        ctx.fillStyle = "rgb(93, 91, 84)";        ctx.fillRect(0, 0, d.b.w, 1);        ctx.fillStyle = "rgb(51, 49, 44)";        ctx.fillRect(0, d.b.h - 1, d.b.w, 1);        ctx.fillStyle = "rgb(94, 91, 84)";        ctx.fillRect(0, 0, 1, d.b.h);        ctx.fillStyle = "rgb(54, 52, 46)";        ctx.fillRect(d.b.w - 1, 0, 1, d.b.h);    }});dojo.declare("bespin.dashboard.components.BespinSessionPanel", th.components.Panel, {    constructor: function(parms) {        this.filename = new th.components.Label({ style: { color: "white" } });        this.path = new th.components.Label({ style: { color: "rgb(210, 210, 210)" } });        this.opened = new th.components.Label({ style: { color: "rgb(160, 157, 147)" } });        this.details = new th.components.Label({ style: { color: "rgb(160, 157, 147)" } });        this.editTime = new th.components.Label({ style: { color: "rgb(160, 157, 147)" } });        var labels = [ this.filename, this.path, this.opened, this.details, this.editTime ];        this.add(labels);        var panel = this;        for (var i = 0; i < labels.length; i++) {            this.bus.bind("dblclick", labels[i], function(e) {                panel.bus.fire("dblclick", e, panel);            });        }        this.style.border = new bespin.dashboard.components.BespinBorder();        this.style.backgroundColor = "rgb(67, 65, 58)";        this.preferredSizes = [ 13, 9, 8, 8, 8 ];        this.minimumSizes = [ 9, 8, 7, 7, 7 ];        this.filename.attributes.text = parms.filename;        this.path.attributes.text = parms.project + ": /" + parms.path;        // dummy data        this.opened.attributes.text = "(opened info)";        this.details.attributes.text = "(edit details info)";        this.editTime.attributes.text = "(editing time)";        this.session = { filename: parms.filename, path: parms.path, project: parms.project };    },    layout: function() {        var d = this.d();        var w = d.b.w - d.i.w;        var labels = 5;        var sizes = this.preferredSizes.slice();        while (labels > 0) {            var y = d.i.t;            // set the fonts and clear the bounds            for (var i = 0; i < this.children.length; i++) {                var font = sizes[i] + "pt Tahoma";                this.children[i].style.font = font;                delete this.children[i].bounds;            }            var current = 0;            var h = this.filename.getPreferredHeight(w);            h = Math.floor(h * 0.95); // pull in the line height a bit            this.filename.bounds = { x: d.i.l, y: y, width: w, height: h };            y += h;            if (++current < labels) {                h = this.path.getPreferredHeight(w);                h = Math.floor(h * 1.2); // add a bit of margin to separate from subsequent labels                this.path.bounds = { x: d.i.l, y: y, width: w, height: h };                y += h;            }            if (++current < labels) {                h = this.opened.getPreferredHeight(w);                this.opened.bounds = { x: d.i.l, y: y, width: w, height: h };                y += h;            }            if (++current < labels) {                h = this.details.getPreferredHeight(w);                this.details.bounds = { x: d.i.l, y: y, width: w, height: h };                y += h;            }            if (++current < labels) {                h = this.editTime.getPreferredHeight(w);                this.editTime.bounds = { x: d.i.l, y: y, width: w, height: h };                y += h;            }            y += d.i.b;            if (y <= d.b.h) break;            // we're too tall, make adjustments            var changeMade = false;            for (var z = 2; z < sizes.length; z++) {                if (sizes[z] > this.minimumSizes[z]) {                    sizes[z]--;                    changeMade = true;                }            }            if (changeMade) continue;            if (labels > 2) {                labels--;                continue;            }            var changeMade = false;            for (var y = 0; y < 2; y++) {                if (sizes[y] > this.minimumSizes[y]) {                    sizes[y]--;                    changeMade = true;                }            }            if (changeMade) continue;            labels--;        }    },    getInsets: function() {        return { top: 5, left: 5, bottom: 5, right: 5 };    } });dojo.declare("bespin.dashboard.components.BespinProjectPanel", th.components.Panel, {    constructor: function(parms) {        if (!parms) parms = {};        this.projectLabel = new th.components.Label({ text: "Projects", style: { color: "white", font: "9pt Tahoma" } });        this.projectLabel.oldPaint = this.projectLabel.paint;        this.projectLabel.paint = function(ctx) {            var d = this.d();            ctx.fillStyle = "rgb(51, 50, 46)";            ctx.fillRect(0, 0, d.b.w, 1);            ctx.fillStyle = "black";            ctx.fillRect(0, d.b.h - 1, d.b.w, 1);            var gradient = ctx.createLinearGradient(0, 1, 0, d.b.h - 2);            gradient.addColorStop(0, "rgb(39, 38, 33)");            gradient.addColorStop(1, "rgb(22, 22, 19)");            ctx.fillStyle = gradient;            ctx.fillRect(0, 1, d.b.w, d.b.h - 2);            this.oldPaint(ctx);        }        this.list = new th.components.List({ style: { backgroundColor: "rgb(61, 59, 52)", color: "white", font: "9pt Tahoma" } });        this.splitter = new th.components.Splitter({ orientation: th.HORIZONTAL });        this.add([ this.projectLabel, this.list, this.splitter ]);        this.bus.bind("dragstart", this.splitter, this.ondragstart, this);        this.bus.bind("drag", this.splitter, this.ondrag, this);        this.bus.bind("dragstop", this.splitter, this.ondragstop, this);        // this is a closed container        delete this.add;        delete this.remove;    },    ondragstart: function(e) {        this.startWidth = this.bounds.width;    },    ondrag: function(e) {        var delta = e.currentPos.x - e.startPos.x;        this.prefWidth = this.startWidth + delta;        this.getScene().render();    },    ondragstop: function(e) {        delete this.startWidth;    },    getPreferredWidth: function(height) {        return this.prefWidth || 150;    },    layout: function() {        var d = this.d();        var y = d.i.t;        var lh = this.projectLabel.getPreferredHeight(d.b.w);        this.projectLabel.bounds = { y: y, x: d.i.l, height: lh, width: d.b.w };        y += lh;        var sw = this.splitter.getPreferredWidth()        this.splitter.bounds = { x: d.b.w - d.i.r - sw, height: d.b.h - d.i.b - y, y: y, width: sw };        this.list.bounds = { x: d.i.l, y: y, width: d.b.w - d.i.w - sw, height: this.splitter.bounds.height };    }});

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?