PageRenderTime 21ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/branches/version1.x/templates/sunny/publish.js

http://jsdoc-toolkit.googlecode.com/
JavaScript | 97 lines | 76 code | 15 blank | 6 comment | 19 complexity | ad6b361a6a26e40f96d6542e00c87685 MD5 | raw file
  1. require("app/JsHilite.js");
  2. function basename(filename) {
  3. filename.match(/([^\/\\]+)\.[^\/\\]+$/);
  4. return RegExp.$1;
  5. }
  6. function publish(fileGroup, context) {
  7. var classTemplate = new JsPlate(context.t+"class.tmpl");
  8. var indexTemplate = new JsPlate(context.t+"index.tmpl");
  9. var allFiles = {};
  10. var allClasses = {};
  11. var globals = {methods:[], properties:[], alias:"GLOBALS", isStatic:true};
  12. for (var i = 0; i < fileGroup.files.length; i++) {
  13. var file_basename = basename(fileGroup.files[i].filename);
  14. var file_srcname = file_basename+".src.html";
  15. for (var s = 0; s < fileGroup.files[i].symbols.length; s++) {
  16. if (fileGroup.files[i].symbols[s].isa == "CONSTRUCTOR") {
  17. var thisClass = fileGroup.files[i].symbols[s];
  18. // sort inherited methods by class
  19. var inheritedMethods = fileGroup.files[i].symbols[s].getInheritedMethods();
  20. if (inheritedMethods.length > 0) {
  21. thisClass.inherited = {};
  22. for (var n = 0; n < inheritedMethods.length; n++) {
  23. if (! thisClass.inherited[inheritedMethods[n].memberof]) thisClass.inherited[inheritedMethods[n].memberof] = [];
  24. thisClass.inherited[inheritedMethods[n].memberof].push(inheritedMethods[n]);
  25. }
  26. }
  27. thisClass.name = fileGroup.files[i].symbols[s].alias;
  28. thisClass.source = file_srcname;
  29. thisClass.filename = fileGroup.files[i].filename;
  30. thisClass.docs = thisClass.name+".html";
  31. if (!allClasses[thisClass.name]) allClasses[thisClass.name] = [];
  32. allClasses[thisClass.name].push(thisClass);
  33. }
  34. else if (fileGroup.files[i].symbols[s].alias == fileGroup.files[i].symbols[s].name) {
  35. if (fileGroup.files[i].symbols[s].isa == "FUNCTION") {
  36. globals.methods.push(fileGroup.files[i].symbols[s]);
  37. }
  38. else {
  39. globals.properties.push(fileGroup.files[i].symbols[s]);
  40. }
  41. }
  42. }
  43. if (!allFiles[fileGroup.files[i].path]) {
  44. var hiliter = new JsHilite(IO.readFile(fileGroup.files[i].path), JsDoc.opt.e);
  45. IO.saveFile(context.d, file_srcname, hiliter.hilite());
  46. }
  47. fileGroup.files[i].source = file_srcname;
  48. allFiles[fileGroup.files[i].path] = true;
  49. }
  50. classfiles = {};
  51. for (var c in allClasses) {
  52. classfiles[c] = c+".html";
  53. }
  54. linkToType.classfiles = classfiles;
  55. for (var c in allClasses) {
  56. var output = classTemplate.process(allClasses[c]);
  57. IO.saveFile(context.d, classfiles[c], output);
  58. }
  59. output = classTemplate.process([globals]); // expects an array
  60. IO.saveFile(context.d, "globals.html", output);
  61. var output = indexTemplate.process(allClasses);
  62. IO.saveFile(context.d, "allclasses-frame.html", output);
  63. IO.copyFile(context.t+"index.html", context.d);
  64. IO.copyFile(context.t+"splash.html", context.d);
  65. }
  66. /**
  67. Takes a string of object types and adds links if there exists
  68. any documentation files in the output for that type.
  69. @param typeString Like "Foo" or "Foo[] | Bar".
  70. */
  71. function linkToType(typeString) {
  72. var sep = /[^a-zA-Z0-9._$]+/;
  73. var types = typeString.split(sep);
  74. for (var i = 0; i < types.length; i++) {
  75. var link = linkToType.classfiles[types[i]];
  76. if (link) {
  77. var re = new RegExp('(^|[^a-zA-Z0-9._$])'+types[i]+'($|[^a-zA-Z0-9._$])');
  78. typeString = typeString.replace(re, "$1<a href=\""+link+"\">"+types[i]+"</a>$2", "g");
  79. }
  80. }
  81. return typeString;
  82. }