diff --git a/lib/src/html/html_generator_instance.dart b/lib/src/html/html_generator_instance.dart index b892da4cab..b3adb6cc07 100644 --- a/lib/src/html/html_generator_instance.dart +++ b/lib/src/html/html_generator_instance.dart @@ -279,7 +279,7 @@ class HtmlGeneratorInstance { PackageTemplateData(_options, packageGraph, _templateHelper, package); logInfo('documenting ${package.name}'); - _build('index.html', _templates.indexTemplate, data); + _build(package.filePath, _templates.indexTemplate, data); _build('__404error.html', _templates.errorTemplate, data); } @@ -289,8 +289,7 @@ class HtmlGeneratorInstance { TemplateData data = CategoryTemplateData(_options, packageGraph, _templateHelper, category); - _build(path.joinAll(category.href.split('/')), _templates.categoryTemplate, - data); + _build(category.filePath, _templates.categoryTemplate, data); } void generateLibrary(PackageGraph packageGraph, Library lib) { @@ -302,28 +301,26 @@ class HtmlGeneratorInstance { TemplateData data = LibraryTemplateData(_options, packageGraph, _templateHelper, lib); - _build(path.join(lib.dirName, '${lib.fileName}'), - _templates.libraryTemplate, data); + _build(lib.filePath, _templates.libraryTemplate, data); } void generateClass(PackageGraph packageGraph, Library lib, Class clazz) { TemplateData data = ClassTemplateData(_options, packageGraph, _templateHelper, lib, clazz); - _build(path.joinAll(clazz.href.split('/')), _templates.classTemplate, data); + _build(clazz.filePath, _templates.classTemplate, data); } void generateExtension( - PackageGraph packageGraph, Library lib, Extension ext) { + PackageGraph packageGraph, Library lib, Extension extension) { TemplateData data = ExtensionTemplateData( - _options, packageGraph, _templateHelper, lib, ext); - _build( - path.joinAll(ext.href.split('/')), _templates.extensionTemplate, data); + _options, packageGraph, _templateHelper, lib, extension); + _build(extension.filePath, _templates.extensionTemplate, data); } void generateMixins(PackageGraph packageGraph, Library lib, Mixin mixin) { TemplateData data = MixinTemplateData(_options, packageGraph, _templateHelper, lib, mixin); - _build(path.joinAll(mixin.href.split('/')), _templates.mixinTemplate, data); + _build(mixin.filePath, _templates.mixinTemplate, data); } void generateConstructor(PackageGraph packageGraph, Library lib, Class clazz, @@ -331,15 +328,14 @@ class HtmlGeneratorInstance { TemplateData data = ConstructorTemplateData( _options, packageGraph, _templateHelper, lib, clazz, constructor); - _build(path.joinAll(constructor.href.split('/')), - _templates.constructorTemplate, data); + _build(constructor.filePath, _templates.constructorTemplate, data); } void generateEnum(PackageGraph packageGraph, Library lib, Enum eNum) { TemplateData data = EnumTemplateData(_options, packageGraph, _templateHelper, lib, eNum); - _build(path.joinAll(eNum.href.split('/')), _templates.enumTemplate, data); + _build(eNum.filePath, _templates.enumTemplate, data); } void generateFunction( @@ -347,8 +343,7 @@ class HtmlGeneratorInstance { TemplateData data = FunctionTemplateData( _options, packageGraph, _templateHelper, lib, function); - _build(path.joinAll(function.href.split('/')), _templates.functionTemplate, - data); + _build(function.filePath, _templates.functionTemplate, data); } void generateMethod( @@ -356,8 +351,7 @@ class HtmlGeneratorInstance { TemplateData data = MethodTemplateData( _options, packageGraph, _templateHelper, lib, clazz, method); - _build( - path.joinAll(method.href.split('/')), _templates.methodTemplate, data); + _build(method.filePath, _templates.methodTemplate, data); } void generateConstant( @@ -365,8 +359,7 @@ class HtmlGeneratorInstance { TemplateData data = ConstantTemplateData( _options, packageGraph, _templateHelper, lib, clazz, property); - _build(path.joinAll(property.href.split('/')), _templates.constantTemplate, - data); + _build(property.filePath, _templates.constantTemplate, data); } void generateProperty( @@ -374,8 +367,7 @@ class HtmlGeneratorInstance { TemplateData data = PropertyTemplateData( _options, packageGraph, _templateHelper, lib, clazz, property); - _build(path.joinAll(property.href.split('/')), _templates.propertyTemplate, - data); + _build(property.filePath, _templates.propertyTemplate, data); } void generateTopLevelProperty( @@ -383,8 +375,7 @@ class HtmlGeneratorInstance { TemplateData data = TopLevelPropertyTemplateData( _options, packageGraph, _templateHelper, lib, property); - _build(path.joinAll(property.href.split('/')), - _templates.topLevelPropertyTemplate, data); + _build(property.filePath, _templates.topLevelPropertyTemplate, data); } void generateTopLevelConstant( @@ -392,8 +383,7 @@ class HtmlGeneratorInstance { TemplateData data = TopLevelConstTemplateData( _options, packageGraph, _templateHelper, lib, property); - _build(path.joinAll(property.href.split('/')), - _templates.topLevelConstantTemplate, data); + _build(property.filePath, _templates.topLevelConstantTemplate, data); } void generateTypeDef( @@ -401,8 +391,7 @@ class HtmlGeneratorInstance { TemplateData data = TypedefTemplateData( _options, packageGraph, _templateHelper, lib, typeDef); - _build(path.joinAll(typeDef.href.split('/')), _templates.typeDefTemplate, - data); + _build(typeDef.filePath, _templates.typeDefTemplate, data); } // TODO: change this to use resource_loader @@ -420,9 +409,11 @@ class HtmlGeneratorInstance { } void _build(String filename, Template template, TemplateData data) { + // Replaces '/' separators with proper separators for the platform. + String outFile = path.joinAll(filename.split('/')); String content = template.renderString(data); - _writer(filename, content); + _writer(outFile, content); if (data.self is Indexable) _indexedElements.add(data.self as Indexable); } } diff --git a/lib/src/model/accessor.dart b/lib/src/model/accessor.dart index 8b08f4bd67..cf539b71b6 100644 --- a/lib/src/model/accessor.dart +++ b/lib/src/model/accessor.dart @@ -89,6 +89,9 @@ class Accessor extends ModelElement implements EnclosedElement { return ModelElement.from(_accessor.enclosingElement, library, packageGraph); } + @override + String get filePath => enclosingCombo.filePath; + @override bool get isCanonical => enclosingCombo.isCanonical; diff --git a/lib/src/model/category.dart b/lib/src/model/category.dart index 6c611626a9..69bae80661 100644 --- a/lib/src/model/category.dart +++ b/lib/src/model/category.dart @@ -120,9 +120,10 @@ class Category extends Nameable @override String get fullyQualifiedName => name; + String get filePath => 'topics/${name}-topic.html'; + @override - String get href => - isCanonical ? '${package.baseHref}topics/${name}-topic.html' : null; + String get href => isCanonical ? '${package.baseHref}$filePath' : null; String get categorization => _renderer.renderCategoryLabel(this); diff --git a/lib/src/model/class.dart b/lib/src/model/class.dart index 69ba5b9821..a647d29c48 100644 --- a/lib/src/model/class.dart +++ b/lib/src/model/class.dart @@ -201,6 +201,9 @@ class Class extends Container @override String get fileName => "${name}-class.html"; + @override + String get filePath => '${library.dirName}/$fileName'; + String get fullkind { if (isAbstract) return 'abstract $kind'; return kind; @@ -249,7 +252,7 @@ class Class extends Container } assert(canonicalLibrary != null); assert(canonicalLibrary == library); - return '${package.baseHref}${library.dirName}/$fileName'; + return '${package.baseHref}$filePath'; } /// Returns all the implementors of this class. diff --git a/lib/src/model/constructor.dart b/lib/src/model/constructor.dart index 781417b611..ba0631482f 100644 --- a/lib/src/model/constructor.dart +++ b/lib/src/model/constructor.dart @@ -34,6 +34,10 @@ class Constructor extends ModelElement ModelElement get enclosingElement => ModelElement.from(_constructor.enclosingElement, library, packageGraph); + @override + String get filePath => + '${enclosingElement.library.dirName}/${enclosingElement.name}/$fileName'; + String get fullKind { if (isConst) return 'const $kind'; if (isFactory) return 'factory $kind'; @@ -53,7 +57,7 @@ class Constructor extends ModelElement } assert(canonicalLibrary != null); assert(canonicalLibrary == library); - return '${package.baseHref}${enclosingElement.library.dirName}/${enclosingElement.name}/$name.html'; + return '${package.baseHref}$filePath'; } @override diff --git a/lib/src/model/dynamic.dart b/lib/src/model/dynamic.dart index f8a9636a67..ea7dc30896 100644 --- a/lib/src/model/dynamic.dart +++ b/lib/src/model/dynamic.dart @@ -27,4 +27,7 @@ class Dynamic extends ModelElement { @override String get linkedName => 'dynamic'; + + @override + String get filePath => null; } diff --git a/lib/src/model/extension.dart b/lib/src/model/extension.dart index 6755a7066c..0174a28517 100644 --- a/lib/src/model/extension.dart +++ b/lib/src/model/extension.dart @@ -143,6 +143,9 @@ class Extension extends Container return _allModelElements; } + @override + String get filePath => '${library.dirName}/$fileName'; + @override String get href { if (!identical(canonicalModelElement, this)) { @@ -150,6 +153,6 @@ class Extension extends Container } assert(canonicalLibrary != null); assert(canonicalLibrary == library); - return '${package.baseHref}${library.dirName}/$fileName'; + return '${package.baseHref}$filePath'; } } diff --git a/lib/src/model/field.dart b/lib/src/model/field.dart index a1b74409ff..838f8a3900 100644 --- a/lib/src/model/field.dart +++ b/lib/src/model/field.dart @@ -64,6 +64,10 @@ class Field extends ModelElement return _enclosingClass; } + @override + String get filePath => + '${enclosingElement.library.dirName}/${enclosingElement.name}/$fileName'; + @override String get href { if (!identical(canonicalModelElement, this)) { @@ -72,7 +76,7 @@ class Field extends ModelElement assert(canonicalLibrary != null); assert(canonicalEnclosingContainer == enclosingElement); assert(canonicalLibrary == library); - return '${package.baseHref}${enclosingElement.library.dirName}/${enclosingElement.name}/$fileName'; + return '${package.baseHref}$filePath'; } @override diff --git a/lib/src/model/library.dart b/lib/src/model/library.dart index aa54ce07e6..96182911d1 100644 --- a/lib/src/model/library.dart +++ b/lib/src/model/library.dart @@ -375,6 +375,9 @@ class Library extends ModelElement with Categorization, TopLevelContainer { @override String get fileName => '$dirName-library.html'; + @override + String get filePath => '${library.dirName}/$fileName'; + List _functions; @override @@ -394,7 +397,7 @@ class Library extends ModelElement with Categorization, TopLevelContainer { if (!identical(canonicalModelElement, this)) { return canonicalModelElement?.href; } - return '${package.baseHref}${library.dirName}/$fileName'; + return '${package.baseHref}$filePath'; } InheritanceManager3 _inheritanceManager; diff --git a/lib/src/model/method.dart b/lib/src/model/method.dart index 1156ae2a47..6466938da0 100644 --- a/lib/src/model/method.dart +++ b/lib/src/model/method.dart @@ -58,6 +58,10 @@ class Method extends ModelElement return _enclosingContainer; } + @override + String get filePath => + '${enclosingElement.library.dirName}/${enclosingElement.name}/$fileName'; + String get fullkind { if (_method.isAbstract) return 'abstract $kind'; return kind; @@ -71,7 +75,7 @@ class Method extends ModelElement assert(!(canonicalLibrary == null || canonicalEnclosingContainer == null)); assert(canonicalLibrary == library); assert(canonicalEnclosingContainer == enclosingElement); - return '${package.baseHref}${enclosingElement.library.dirName}/${enclosingElement.name}/${fileName}'; + return '${package.baseHref}$filePath'; } @override diff --git a/lib/src/model/model_element.dart b/lib/src/model/model_element.dart index 8d33b8614f..10453cacea 100644 --- a/lib/src/model/model_element.dart +++ b/lib/src/model/model_element.dart @@ -791,6 +791,8 @@ abstract class ModelElement extends Canonicalization String get fileName => "${name}.html"; + String get filePath; + /// Returns the fully qualified name. /// /// For example: libraryName.className.methodName diff --git a/lib/src/model/model_function.dart b/lib/src/model/model_function.dart index da9f85c0f2..4e11225523 100644 --- a/lib/src/model/model_function.dart +++ b/lib/src/model/model_function.dart @@ -56,6 +56,9 @@ class ModelFunctionTyped extends ModelElement @override ModelElement get enclosingElement => library; + @override + String get filePath => '${library.dirName}/$fileName'; + @override String get href { if (!identical(canonicalModelElement, this)) { @@ -63,7 +66,7 @@ class ModelFunctionTyped extends ModelElement } assert(canonicalLibrary != null); assert(canonicalLibrary == library); - return '${package.baseHref}${library.dirName}/$fileName'; + return '${package.baseHref}$filePath'; } @override diff --git a/lib/src/model/package.dart b/lib/src/model/package.dart index 23b091280f..7771d3ea12 100644 --- a/lib/src/model/package.dart +++ b/lib/src/model/package.dart @@ -170,6 +170,8 @@ class Package extends LibraryContainer @override String get enclosingName => packageGraph.defaultPackageName; + String get filePath => 'index.html'; + @override String get fullyQualifiedName => 'package:$name'; @@ -211,7 +213,7 @@ class Package extends LibraryContainer } @override - String get href => '${baseHref}index.html'; + String get href => '$baseHref$filePath'; @override String get location => path.toUri(packageMeta.resolvedDir).toString(); diff --git a/lib/src/model/parameter.dart b/lib/src/model/parameter.dart index 19c88d7575..52b6e869f2 100644 --- a/lib/src/model/parameter.dart +++ b/lib/src/model/parameter.dart @@ -27,6 +27,11 @@ class Parameter extends ModelElement implements EnclosedElement { _parameter.defaultValueCode.isNotEmpty; } + @override + String get filePath { + throw StateError('filePath not implemented for parameters'); + } + @override String get href { throw StateError('href not implemented for parameters'); diff --git a/lib/src/model/top_level_variable.dart b/lib/src/model/top_level_variable.dart index 3b53961799..73756404f3 100644 --- a/lib/src/model/top_level_variable.dart +++ b/lib/src/model/top_level_variable.dart @@ -44,6 +44,9 @@ class TopLevelVariable extends ModelElement @override ModelElement get enclosingElement => library; + @override + String get filePath => '${library.dirName}/$fileName'; + @override String get href { if (!identical(canonicalModelElement, this)) { @@ -51,7 +54,7 @@ class TopLevelVariable extends ModelElement } assert(canonicalLibrary != null); assert(canonicalLibrary == library); - return '${package.baseHref}${library.dirName}/$fileName'; + return '${package.baseHref}$filePath'; } @override diff --git a/lib/src/model/type_parameter.dart b/lib/src/model/type_parameter.dart index 550c20bc5b..71aac03f21 100644 --- a/lib/src/model/type_parameter.dart +++ b/lib/src/model/type_parameter.dart @@ -17,6 +17,10 @@ class TypeParameter extends ModelElement { ? ModelElement.from(element.enclosingElement, library, packageGraph) : null; + @override + String get filePath => + '${enclosingElement.library.dirName}/${enclosingElement.name}/$name'; + @override String get href { if (!identical(canonicalModelElement, this)) { @@ -24,7 +28,7 @@ class TypeParameter extends ModelElement { } assert(canonicalLibrary != null); assert(canonicalLibrary == library); - return '${package.baseHref}${enclosingElement.library.dirName}/${enclosingElement.name}/$name'; + return '${package.baseHref}$filePath'; } @override diff --git a/lib/src/model/typedef.dart b/lib/src/model/typedef.dart index b7e7424e6d..760c24927a 100644 --- a/lib/src/model/typedef.dart +++ b/lib/src/model/typedef.dart @@ -30,6 +30,9 @@ class Typedef extends ModelElement return Iterable.empty(); } + @override + String get filePath => '${library.dirName}/$fileName'; + @override String get href { if (!identical(canonicalModelElement, this)) { @@ -37,7 +40,7 @@ class Typedef extends ModelElement } assert(canonicalLibrary != null); assert(canonicalLibrary == library); - return '${package.baseHref}${library.dirName}/$fileName'; + return '${package.baseHref}$filePath'; } // Food for mustache.