toolbar.js 4.33 KB
/*
 * Copyright 2015 Open Networking Laboratory
 *
 * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 ONOS GUI -- Widget -- Toolbar Service
 */
(function () {
    'use strict';

    var $log, ps;

    var toolBtnIds = {},
        toolbarPanel,
        toolbarDiv;

    function init() {
        toolBtnIds = {};
    }

    function addButton(btn) {
        // pass in button object and pass separate the pieces in this function,
        // to be passed to ButtonService
        var btndiv = toolbarDiv.append('div').attr('class', 'btn');
        // use ButtonService to create btn with other arguments and btndiv
    }

    function addToggle(tog) {
        var togdiv = toolbarDiv.append('div').attr('class', 'tog');
        // use ButtonService to create btn with other arguments and togdiv
    }

    function addRadio(rad) {
        var raddiv = toolbarDiv.append('div').attr('class', 'rad');
        // use ButtonService to create btn with other arguments and raddiv
    }

    function addSeparator() {
        toolbarDiv.append('div')
            .attr('class', 'sep')
            .style({'width': '2px',
                    'border-width': '1px',
                    'border-style': 'solid'});
    }

    function makeButton(id, gid, cb) {
        return {
            t: 'btn',
            id: id,
            gid: gid,
            cb: cb
        };
    }

    function makeToggle(id, gid, cb) {
        return {
            t: 'tog',
            id: id,
            gid: gid,
            cb: cb
        };
    }

    function makeRadio(id, gid, cb) {
        (id in toolBtnIds) ? toolBtnIds[id] += 1 : toolBtnIds[id] = 0;
        return {
            t: 'rad',
            id: id + '-' + toolBtnIds[id],
            rid: toolBtnIds[id] + '',
            gid: gid,
            cb: cb
        };
    }

    function separator() {
        return {
            t: 'sep'
        };
    }

    function createToolbar(tbarId, tools) {
        var api;

        if (!tbarId) {
            $log.warn('createToolbar: no ID given');
            return null;
        }
        if (!tools || tools.constructor !== Array || !tools.length) {
            $log.warn('createToolbar: no tools given');
            return null;
        }

        for (var i = 0; i < tools.length; i += 1) {
            if (tools[i].t === 'rad' || tools[i].t === 'sep') {
                continue;
            } else {
                if (tools[i].id in toolBtnIds) {
                    $log.warn('createToolbar: item with id '
                            + tools[i].id + ' already exists');
                    return null;
                }
                toolBtnIds[tools[i].id] = 1;
            }
        }

        // need to pass in an object with settings for where the toolbar will go
        toolbarPanel = ps.createPanel(tbarId, {});
        toolbarPanel.classed('toolbar', true);
        toolbarDiv = toolbarPanel.el();

        tools.forEach(function (tool) {
            switch (tool['t']) {
                case 'btn': addButton(tool); break;
                case 'tog': addToggle(tool); break;
                case 'rad': addRadio(tool); break;
                default: addSeparator(); break;
            }
        });

        // api functions to be returned defined here

        function size(arr) {
            return arr.length;
        }

        api = {
            size: size
        };

        return api;
    }

    angular.module('onosWidget')
        .factory('ToolbarService', ['$log', 'PanelService',
            function (_$log_, _ps_) {
                $log = _$log_;
                ps = _ps_;

                return {
                    init: init,
                    makeButton: makeButton,
                    makeToggle: makeToggle,
                    makeRadio: makeRadio,
                    separator: separator,
                    createToolbar: createToolbar
                };
            }]);

}());