ProjectTemplates.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import EditorUI = require("../ui/EditorUI");
  2. /**
  3. * Interface around a project template
  4. */
  5. export interface ProjectTemplateDefinition {
  6. name: string;
  7. desc: string;
  8. screenshot: string;
  9. templates: [ProjectTemplateDetail];
  10. folder: string;
  11. module: string;
  12. }
  13. /**
  14. * Inner details of the project template.
  15. */
  16. export interface ProjectTemplateDetail {
  17. language: string;
  18. folder: string;
  19. }
  20. /**
  21. * Returns the structured template definition for the provided project type.
  22. * Note that the path to the templates folder will be fully resolved
  23. * @param {string} projectType A template type. One of project_empty, project_2d, project_3d
  24. * @return {ProjectTemplateDefinition} the template definition for the proved project type
  25. */
  26. export function getNewProjectTemplateDefinition(projectType: string): ProjectTemplateDefinition {
  27. var env = ToolCore.toolEnvironment;
  28. var projectTemplateFolder = env.toolDataDir + "ProjectTemplates/";
  29. var projectTemplateJsonFile = projectTemplateFolder + "ProjectTemplates.json";
  30. let jsonFile = new Atomic.File(projectTemplateJsonFile, Atomic.FILE_READ);
  31. if (!jsonFile.isOpen()) {
  32. return null;
  33. }
  34. // Update all the paths to a more fully qualified path
  35. let json = JSON.parse(jsonFile.readText());
  36. let projectTemplate = <ProjectTemplateDefinition>json[projectType];
  37. if (projectTemplate) {
  38. projectTemplate.templates.forEach(template => {
  39. template.folder = projectTemplateFolder + template.folder + "/";
  40. });
  41. }
  42. return projectTemplate;
  43. }
  44. /**
  45. * Return an array of all of the example project definitions.
  46. * Note that the paths in both screenshot and folder will be fully resolved.
  47. * @return {[ProjectTemplateDefinition]} Array of example project definitions.
  48. */
  49. export function getExampleProjectTemplateDefinitions(): [ProjectTemplateDefinition] {
  50. let env = ToolCore.toolEnvironment;
  51. let exampleInfoDir = env.toolDataDir + "ExampleInfo/";
  52. let exampleJsonFile = exampleInfoDir + "Examples.json";
  53. let jsonFile = new Atomic.File(exampleJsonFile, Atomic.FILE_READ);
  54. if (!jsonFile.isOpen()) {
  55. return;
  56. }
  57. let exampleJson = JSON.parse(jsonFile.readText());
  58. let examples = <[ProjectTemplateDefinition]>exampleJson.examples;
  59. // Update all the paths to a more fully qualified path
  60. examples.forEach(example => {
  61. example.screenshot = exampleInfoDir + example.screenshot;
  62. example.templates.forEach(template => {
  63. template.folder = env.toolDataDir + "AtomicExamples/" + template.folder + "/";
  64. });
  65. });
  66. return exampleJson.examples;
  67. }