4 * Copyright 2021 Elias Fleckenstein <eliasfleckenstein@web.de>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
24 dragonblocks.ContentMgr = class
26 constructor(baseClass)
28 this.baseClass = baseClass;
32 register(name, defClass, override)
35 throw new Error("Missing name");
37 if (! name.search(":"))
38 throw new Error("Non-namespaced name");
41 throw new Error("Missing definition class");
43 if (! (defClass.prototype instanceof this.baseClass))
44 throw new Error("Definition class does not extend base class");
46 let oldDef = this.getDef(name);
48 if (oldDef && ! override)
49 throw new Error("Already registered");
51 if (! oldDef && override)
52 throw new Error("Not registered");
54 this.defs[name] = defClass;
59 this.register(name, def, true);
64 return this.defs[name];
69 let defClass = this.getDef(name);
72 throw new Error("Not defined");
74 return new defClass(...args);