110 lines
2.6 KiB
JavaScript
110 lines
2.6 KiB
JavaScript
"use strict";
|
|
|
|
/**
|
|
* @typedef {import("../Application/RoutesMaker.ecma.js").RoutesMaker} RoutesMaker
|
|
*/
|
|
|
|
import {RouteModel} from "../Models/RouteModel.ecma.js";
|
|
import {Utils} from "../Utils/Utils.ecma.js";
|
|
|
|
/**
|
|
* @class
|
|
* @constructor
|
|
* @param {!RoutesMaker} routes_maker
|
|
* @returns {void}
|
|
* @access public
|
|
* @static
|
|
*/
|
|
export const RoutesManager = (function(){
|
|
|
|
/**
|
|
* @constructs RoutesManager
|
|
* @param {!RoutesMaker} routes_maker
|
|
* @returns {void}
|
|
* @access public
|
|
* @static
|
|
*/
|
|
const RoutesManager = function(routes_maker){
|
|
|
|
/** @type {Object.<string, RouteModel>} */
|
|
const routes = {};
|
|
|
|
/**
|
|
* @param {!string} key
|
|
* @returns {RouteModel|null}
|
|
* @access public
|
|
*/
|
|
this.get = key => routes[key = Utils.to_key(key)] ? routes[key] : null;
|
|
|
|
/**
|
|
* @param {!string} name
|
|
* @param {!string} key
|
|
* @returns {RouteModel}
|
|
* @access public
|
|
*/
|
|
this.add = (name, key = null) => {
|
|
|
|
/** @type {RouteModel|null} */
|
|
let route = null;
|
|
|
|
(key || (key = Utils.to_key(name))) &&
|
|
!routes[key] &&
|
|
(route = routes[key] = new RouteModel(routes_maker, name, key));
|
|
|
|
return route;
|
|
};
|
|
|
|
/**
|
|
* @param {!string} key
|
|
* @returns {void}
|
|
* @access public
|
|
*/
|
|
this.remove = key => {
|
|
if(routes[key = Utils.to_key(key)])
|
|
delete routes[key];
|
|
};
|
|
|
|
/**
|
|
* @returns {Object.<string, any>}
|
|
* @access public
|
|
*/
|
|
this.get_data = () => Object.keys(routes).reduce((dictionary, key) => {
|
|
|
|
dictionary[key] = [routes[key].name, routes[key].dots.map(dot => [dot.longitude, dot.latitude])];
|
|
|
|
return dictionary;
|
|
}, {});
|
|
|
|
/**
|
|
* @param {!string} name
|
|
* @returns {void}
|
|
*/
|
|
this.select = name => {
|
|
for(const key in routes){
|
|
|
|
/** @type {boolean} */
|
|
const ok = key == name;
|
|
|
|
routes[key].dots.forEach(dot => {
|
|
dot.selected(ok);
|
|
});
|
|
|
|
};
|
|
};
|
|
|
|
/**
|
|
* @param {!string} name
|
|
* @param {!boolean} ok
|
|
* @returns {void}
|
|
* @access public
|
|
*/
|
|
this.visible = (name, ok) => {
|
|
routes[name].dots.forEach(dot => {
|
|
dot.visible(ok);
|
|
});
|
|
};
|
|
|
|
};
|
|
|
|
return RoutesManager;
|
|
})(); |