Skip to content

Latest commit

 

History

History
108 lines (89 loc) · 2.51 KB

panel.md

File metadata and controls

108 lines (89 loc) · 2.51 KB

Extension Panel

When implementing a function, it is likely to require UI interaction on the interface. Cocos Creator also provides this ability for extensions.

Declare the panel in the extension

The panels field can be defined in package.json. Example:

{
    "name": "hello-world",
    "panels": {
        "default": {
            "title": "world panel",
            "type": "dockable",
            "main": "./panels/default.js",
            "icon": "./static/default.png"
        },
        "list": {
            "title": "world list",
            "type": "simple",
            "main": "./panels/list.js",
            "icon": "./static/list.png",

            "flags": {},
            "size": {}
        }
    }
}

This field is an object, defined as the following:

// panels definition
interface PanelMap {
    [name: string]: PanelInfo;
}

// The definition of each panel
interface PanelInfo {
    // Panel title, supports i18n:key format
    title: string;
    // Panel entry, a relative path
    main: string;
    // Panel icon, a relative path
    icon?: string;
    // Panel type, default dockable
    type?:'dockable' |'simple';

    flags?: PanelFlags;
    size?: PanelSize;
}

// Some tags in the panel
interface PanelFlags {
    // Whether to allow zoom, default true
    resizable?: boolean;
    // Need to save, default false
    save?: boolean;
    // Whether the window is displayed at the top
    alwaysOnTop?: boolean;
}

// Some size limitations of panel
interface PanelSize {
    width?: number;
    height?: number;
    'min-width'?: number;
    'min-height'?: number;
}

Panel

The panel entry file was defined above when we registered it. Example:

// Listen for panel events
exports.listeners = {
    // The hook triggered when the panel is displayed
    show() {},
    // The hook triggered when the panel is hidden
    hide() {},
};

// The contents of the panel
exports.template = '<div>Hello</div>';
// Styles on the panel
exports.style = 'div { color: yellow; }';
// Quick selector
exports.$ = {
    elem: 'div',
};

// The hook function that is triggered when the panel starts
exports.ready = function() {
    this.$.elem.innerHTML = 'Hello World';
};

// A function that fires when the panel is ready to close, and returns false terminates the panel
exports.beforeClose = function() {};

// The hook function after the panel is closed
exports.close = function() {};

In addition, we have defined a list panel, and we also need to write a list.js file in the above format.