├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── ---bug-report.md │ ├── ---feature-request.md │ └── ---question.md ├── demo.gif ├── issuehunt-logo.svg ├── logo.png ├── pull_request_template.md └── stale.yml ├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── gruntfile.js ├── logo.psd ├── package.json └── src ├── default ├── assets │ ├── css │ │ ├── _constants.sass │ │ ├── elements │ │ │ ├── _comment.sass │ │ │ ├── _filter.sass │ │ │ ├── _footer.sass │ │ │ ├── _hierarchy.sass │ │ │ ├── _images.sass │ │ │ ├── _index.sass │ │ │ ├── _member.sass │ │ │ ├── _navigation.sass │ │ │ ├── _panel.sass │ │ │ ├── _search.sass │ │ │ ├── _signatures.sass │ │ │ ├── _sources.sass │ │ │ └── _toolbar.sass │ │ ├── layouts │ │ │ ├── _default.sass │ │ │ └── _minimal.sass │ │ ├── main.sass │ │ ├── setup │ │ │ ├── _animations.sass │ │ │ ├── _grid.sass │ │ │ ├── _icons.scss │ │ │ ├── _mixins.sass │ │ │ └── _typography.sass │ │ └── vendors │ │ │ ├── _highlight.js.sass │ │ │ └── _normalize.sass │ ├── images │ │ ├── icons.png │ │ ├── icons.psd │ │ ├── icons@2x.png │ │ ├── icons@2x.png0 │ │ ├── widgets.png │ │ ├── widgets.psd │ │ └── widgets@2x.png │ └── js │ │ ├── lib │ │ ├── backbone-1.1.2.min.js │ │ ├── jquery-2.1.1.min.js │ │ ├── lunr.min.js │ │ └── underscore-1.6.0.min.js │ │ ├── main.js │ │ └── src │ │ ├── lib │ │ ├── backbone │ │ │ └── backbone.d.ts │ │ ├── jquery │ │ │ └── jquery.d.ts │ │ ├── lunr │ │ │ └── lunr.d.ts │ │ ├── tsd.d.ts │ │ ├── tsd.json │ │ └── underscore │ │ │ └── underscore.d.ts │ │ ├── typedoc │ │ ├── Application.ts │ │ ├── components │ │ │ ├── Filter.ts │ │ │ ├── MenuHighlight.ts │ │ │ ├── MenuSticky.ts │ │ │ ├── Search.ts │ │ │ ├── Signature.ts │ │ │ └── Toggle.ts │ │ ├── services │ │ │ └── Viewport.ts │ │ └── utils │ │ │ ├── pointer.ts │ │ │ └── transitions.ts │ │ └── ~bootstrap.ts ├── layouts │ └── default.hbs ├── partials │ ├── analytics.hbs │ ├── breadcrumb.hbs │ ├── comment-tags.hbs │ ├── comment.hbs │ ├── description.hbs │ ├── footer.hbs │ ├── header.hbs │ ├── hierarchy.hbs │ ├── index.children.hbs │ ├── index.children.rec.hbs │ ├── index.hbs │ ├── member.declaration.hbs │ ├── member.getterSetter.hbs │ ├── member.hbs │ ├── member.signature.body.hbs │ ├── member.signature.title.hbs │ ├── member.signatures.hbs │ ├── member.sources.hbs │ ├── members.group.hbs │ ├── members.hbs │ ├── navglobals.hbs │ ├── navigation.hbs │ ├── parameter.hbs │ ├── toc.hbs │ ├── toc.root.hbs │ ├── type.hbs │ ├── typeAndParent.hbs │ └── typeParameters.hbs └── templates │ ├── index.hbs │ └── reflection.hbs ├── minimal ├── layouts │ └── default.hbs ├── partials │ ├── header.hbs │ └── member.hbs └── templates │ └── index.hbs └── plugin.js /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @pirix-gh -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/---bug-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "🐞 Bug Report" 3 | about: "Something isn't working well 💔" 4 | 5 | --- 6 | 7 | ## 🐞 Bug Report 8 | 9 | #### Describe the bug 10 | 11 | 12 | #### Reproduce the bug 13 | ```ts 14 | // REPL or a link to your repository if applicable. 15 | // A *self-contained* demonstration of the problem. 16 | ``` 17 | 18 | #### Expected behavior 19 | 20 | 21 | #### Possible Solution 22 | 23 | 24 | #### Screenshots 25 | 26 | 27 | #### Additional context 28 | 29 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/---feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "🍩 Feature Request" 3 | about: "Suggest an idea for this project 💡" 4 | 5 | --- 6 | 7 | ## 🍩 Feature Request 8 | 9 | #### Is your feature request related to a problem? 10 | 11 | 12 | #### Describe the solution you'd like 13 | 14 | 15 | #### Describe alternatives you've considered 16 | 17 | 18 | #### Teachability, Documentation, Adoption, Migration Strategy 19 | 23 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/---question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "🤔 Question" 3 | about: "There's something unclear 🤯" 4 | 5 | --- 6 | 7 | ## 🤔 Question 8 | 9 | #### Describe your question 10 | 11 | 12 | 13 | #### Search tags, topics 14 | 15 | 16 | -------------------------------------------------------------------------------- /.github/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/millsp/eledoc/68e136cfa5c8555d07864875b140e21080c580cb/.github/demo.gif -------------------------------------------------------------------------------- /.github/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/millsp/eledoc/68e136cfa5c8555d07864875b140e21080c580cb/.github/logo.png -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## 🎁 Pull Request 2 | 3 | 4 | * [ ] Used a clear / meaningful title for this pull request 5 | * [ ] Tested the changes in your own code (on your projects) 6 | * [ ] Added / Edited tests to reflect changes (`tst` folder) 7 | * [ ] Have read the **Contributing** part of the **Readme** 8 | * [ ] Passed `npm test` 9 | 10 | 11 | 12 | #### Fixes 13 | 14 | 15 | #### Why have you made changes? 16 | 17 | 18 | #### What changes have you made? 19 | * changed this to achieve this 20 | * changed that to achieve this 21 | * ... 22 | 23 | #### Anything else worth mentioning? 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 60 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 7 5 | # Issues with these labels will never be considered stale 6 | exemptLabels: 7 | - pinned #todo 8 | - security 9 | # Label to use when marking an issue as stale 10 | staleLabel: wontfix 11 | # Comment to post when marking an issue as stale. Set to `false` to disable 12 | markComment: > 13 | This issue has been automatically marked as stale because it has not had 14 | recent activity. It will be closed if no further activity occurs. Thank you 15 | for your contributions. 16 | # Comment to post when closing a stale issue. Set to `false` to disable 17 | closeComment: false 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .history 3 | .vscode 4 | package-lock.json 5 | **/package-lock.json 6 | .tscache 7 | bin 8 | minimal -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | package-lock.json 2 | node_modules 3 | src 4 | tst 5 | .babelrc.js 6 | webpack.config.js 7 | .eslintrc.json 8 | .ignore 9 | .github 10 | *.tgz 11 | gruntfile.js -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | logo 4 | 5 | 6 |

eledoc

7 | 8 |

9 | 🌒 A material dark theme for TypeDoc 10 |
11 |
12 | 🎮 View Demo 13 | · 14 | 🐞 Report Bug 15 | · 16 | 🍩 Request Feature 17 | · 18 | 🤔 Ask Questions 19 |

20 |

21 | 22 |

23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |

39 | 40 | ## Table of Contents 41 | 42 | * [📜 About](#-about) 43 | * [🍩 Features](#-features) 44 | * [🏁 Getting started](#-getting-started) 45 | * [🧠 Good to know](#-good-to-know-) 46 | * [🎁 Contributing](#-contributing) 47 | * [👏 Sponsoring issues](#-sponsoring-issues) 48 | * [🔮 What's next](#-whats-next) 49 | * [🙏 Acknowledgements](#-acknowledgements) 50 | 51 | ## 📜 About 52 | 53 | **eledoc** is a delightful dark theme for TypeDoc 54 | 55 | #### Goals 56 | 57 | * Provide a nice user experience 58 | * Proper layout with visual cues 59 | * Fix problems from usual themes 60 | 61 | ## 🍩 Features 62 | 63 | * All the features from the default typedoc themes 64 | * Create sections with `@[tag-name]` in doc comments 65 | 66 |

67 | 68 |

69 | 70 | ## 🏁 Getting Started 71 | 72 | #### Prerequisites 73 | 74 | ```sh 75 | npm install typedoc --save-dev 76 | ``` 77 | 78 | #### Installation 79 | 80 | ```sh 81 | npm install eledoc --save-dev 82 | ``` 83 | 84 | #### Hello World 85 | 86 | With the command line 87 | 88 | ```sh 89 | npx typedoc --out docs src --theme node_modules/eledoc/bin/default/ 90 | ``` 91 | 92 | Or in your `package.json` 93 | 94 | ```ts 95 | "scripts": { 96 | "build:docs": "typedoc --out docs src --theme node_modules/eledoc/bin/default/", 97 | } 98 | ``` 99 | 100 | ## [🧠 Good to Know ⤢](https://github.com/pirix-gh/eledoc/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc) 101 | 102 | In this wiki, you'll find some extra resources for your learning & understanding. 103 | 104 | It is incremental and it will be completed on demand, you can ask for this below. 105 | 106 | #### [Questions ⤢](https://github.com/pirix-gh/eledoc/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc) 107 | 108 | Are you missing something? Participate to the open-wiki by posting your 109 | questions [right here](https://github.com/pirix-gh/eledoc/issues/new?template=---question.md). 110 | 111 | ## 🎁 Contributing 112 | 113 | Contributions are what make the open source community such an amazing place to 114 | learn, inspire, and create. Any contributions you make are **greatly appreciated**. 115 | There are many ways to contribute to the project: 116 | 117 | #### Community 118 | * [Help the community with answers on Gitter](https://gitter.im/eledoc-/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link) 119 | * [Reporting bugs or requesting new features](https://github.com/pirix-gh/eledoc/issues/new/choose) 120 | 121 | #### Pull Requests 122 | 1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) 123 | 2. Fork the project 124 | 3. Clone your fork 125 | 4. Create a pr/**feature** branch 126 | ```sh 127 | git checkout -b pr/CoolFeature 128 | ``` 129 | 5. Commit your changes 130 | ```sh 131 | git commit -m 'Added this CoolFeature' 132 | ``` 133 | 6. [Run the tests](#-running-tests) 134 | 7. Commit your changes 135 | ```sh 136 | git push origin pr/CoolFeature 137 | ``` 138 | 8. Open a pull request 139 | 140 | ## 👏 Sponsoring issues 141 | 142 | **Sponsored issues have higher priority over non-critical issues**.
143 | 144 | You can either request a new feature or a bug fix then fund it. 145 | 146 | 147 | 149 | 150 |
151 |
152 | 153 | **The money will be transparently split with an issue's assignees.** 154 | 155 | ## 🔮 What's next 156 | 157 | * Re-write with React 158 | 159 | ## 🙏 Acknowledgements 160 | 161 | Many, many thanks to all the 162 | [contributors](https://github.com/pirix-gh/eledoc/graphs/contributors) 163 | 164 | ## 💟 Friendly Projects 165 | * [`ts-toolbelt`](https://github.com/pirix-gh/ts-toolbelt) - 👷 Higher type safety for TypeScript 166 | -------------------------------------------------------------------------------- /gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) 2 | { 3 | grunt.initConfig({ 4 | pkg: grunt.file.readJSON('package.json'), 5 | ts: { 6 | themeDefault: { 7 | options: { 8 | sourceMap: false, 9 | module: 'amd', 10 | basePath: 'themes', 11 | declaration: false 12 | }, 13 | src: [ 14 | 'src/default/assets/js/src/lib/**/*.ts', 15 | 'src/default/assets/js/src/typedoc/Application.ts', 16 | 'src/default/assets/js/src/typedoc/components/**/*.ts', 17 | 'src/default/assets/js/src/typedoc/services/**/*.ts', 18 | 'src/default/assets/js/src/typedoc/utils/**/*.ts', 19 | 'src/default/assets/js/src/~bootstrap.ts' 20 | ], 21 | out: 'src/default/assets/js/main.js' 22 | } 23 | }, 24 | uglify: { 25 | themeDefault: { 26 | options: { 27 | mangle: false 28 | }, 29 | files: { 30 | 'bin/default/assets/js/main.js': [ 31 | 'src/default/assets/js/lib/jquery-2.1.1.min.js', 32 | 'src/default/assets/js/lib/underscore-1.6.0.min.js', 33 | 'src/default/assets/js/lib/backbone-1.1.2.min.js', 34 | 'src/default/assets/js/lib/lunr.min.js', 35 | 'src/default/assets/js/main.js' 36 | ] 37 | } 38 | } 39 | }, 40 | 'string-replace': { 41 | themeMinimal: { 42 | files: { 43 | 'bin/minimal/layouts/default.hbs': ['src/minimal/layouts/default.hbs'] 44 | }, 45 | options: { 46 | replacements: [{ 47 | pattern: /{{ CSS }}/g, 48 | replacement: function() { 49 | var css = grunt.file.read('bin/default/assets/css/main.css'); 50 | return css.replace(/url\(([^\)]*)\)/g, function(match, file) { 51 | if (match.indexOf(':') != -1) return match; 52 | var path = require('path'), fs = require('fs'); 53 | var file = path.resolve('bin/default/assets/css', file); 54 | var data = fs.readFileSync(file, 'base64'); 55 | return 'url(data:image/png;base64,' + data + ')'; 56 | }); 57 | } 58 | }, { 59 | pattern: /{{ JS }}/g, 60 | replacement: function() { 61 | return grunt.file.read('bin/default/assets/js/main.js').replace('{{', '{/**/{'); 62 | } 63 | }] 64 | } 65 | } 66 | }, 67 | sass: { 68 | options: { 69 | style: 'compact', 70 | unixNewlines: true 71 | }, 72 | themeDefault: { 73 | files: [{ 74 | expand: true, 75 | cwd: 'src/default/assets/css', 76 | src: '**/*.sass', 77 | dest: 'bin/default/assets/css', 78 | ext: '.css' 79 | }] 80 | } 81 | }, 82 | autoprefixer: { 83 | options: { 84 | cascade: false 85 | }, 86 | themeDefault: { 87 | expand: true, 88 | src: 'bin/**/*.css', 89 | dest: './' 90 | } 91 | }, 92 | copy: { 93 | plugin: { 94 | files: [{ 95 | expand: true, 96 | cwd: 'src', 97 | src: ['*.js'], 98 | dest: 'bin' 99 | }] 100 | }, 101 | themeDefault: { 102 | files: [{ 103 | expand: true, 104 | cwd: 'src/default', 105 | src: ['**/*.hbs', '**/*.png'], 106 | dest: 'bin/default' 107 | }] 108 | }, 109 | themeDefault2Minimal: { 110 | files: [{ 111 | expand: true, 112 | cwd: 'src/default/partials', 113 | src: ['**/*.hbs'], 114 | dest: 'bin/minimal/partials' 115 | }] 116 | }, 117 | themeMinimal: { 118 | files: [{ 119 | expand: true, 120 | cwd: 'src/minimal', 121 | src: ['**/*.hbs'], 122 | dest: 'bin/minimal' 123 | }] 124 | } 125 | }, 126 | watch: { 127 | js: { 128 | files: ['src/default/assets/js/src/**/*.ts'], 129 | tasks: ['js'] 130 | }, 131 | css: { 132 | files: ['src/default/assets/css/**/*'], 133 | tasks: ['css'] 134 | }, 135 | default: { 136 | files: ['src/default/**/*.hbs'], 137 | tasks: ['copy', 'string-replace'] 138 | }, 139 | minimal: { 140 | files: ['src/minimal/partials/**/*.hbs', 'src/minimal/templates/**/*.hbs'], 141 | tasks: ['copy:themeMinimal'] 142 | }, 143 | minimalLayout: { 144 | files: ['src/minimal/layouts/default.hbs'], 145 | tasks: ['string-replace:themeMinimal'] 146 | } 147 | } 148 | }); 149 | 150 | 151 | grunt.loadNpmTasks('grunt-contrib-watch'); 152 | grunt.loadNpmTasks('grunt-sass'); 153 | grunt.loadNpmTasks('grunt-contrib-uglify'); 154 | grunt.loadNpmTasks('grunt-contrib-copy'); 155 | grunt.loadNpmTasks('grunt-string-replace'); 156 | grunt.loadNpmTasks('grunt-autoprefixer'); 157 | grunt.loadNpmTasks('grunt-ts'); 158 | 159 | grunt.registerTask('css', ['sass', 'autoprefixer']); 160 | grunt.registerTask('js', ['ts:themeDefault', 'uglify']); 161 | grunt.registerTask('default', ['copy', 'css', 'js', 'string-replace']); 162 | }; 163 | -------------------------------------------------------------------------------- /logo.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/millsp/eledoc/68e136cfa5c8555d07864875b140e21080c580cb/logo.psd -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eledoc", 3 | "version": "0.2.1", 4 | "license": "Apache-2.0", 5 | "author": { 6 | "name": "Pierre-Antoine Mills", 7 | "url": "https://github.com/pirix-gh" 8 | }, 9 | "description": "A material dark theme for TypeDoc", 10 | "keywords": [ 11 | "typescript", 12 | "documentation", 13 | "generator" 14 | ], 15 | "homepage": "https://github.com/pirix-gh/eledoc", 16 | "repository": { 17 | "type": "git", 18 | "url": "https://github.com/pirix-gh/eledoc" 19 | }, 20 | "main": "bin/plugin.js", 21 | "scripts": { 22 | "clean": "rimraf bin", 23 | "grunt": "grunt", 24 | "build": "npm run clean && npm run grunt", 25 | "prepublish": "npm run build" 26 | }, 27 | "engines": { 28 | "node": ">= 4" 29 | }, 30 | "devDependencies": { 31 | "grunt": "^1.0.1", 32 | "grunt-autoprefixer": "^3.0.4", 33 | "grunt-cli": "^1.2.0", 34 | "grunt-contrib-copy": "^1.0.0", 35 | "grunt-contrib-uglify": "^2.3.0", 36 | "grunt-contrib-watch": "~1.0.0", 37 | "grunt-sass": "^2.1.0", 38 | "grunt-string-replace": "^1.0.0", 39 | "grunt-ts": "^5.5.1", 40 | "rimraf": "^2.6.1", 41 | "typescript": "2.3.2" 42 | }, 43 | "files": [ 44 | "bin", 45 | "LICENSE" 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /src/default/assets/css/_constants.sass: -------------------------------------------------------------------------------- 1 | // Fonts 2 | // 3 | $FONT_FAMILY: 'Noto sans', sans-serif 4 | $FONT_FAMILY_MONO: monospace 5 | 6 | $FONT_SIZE: 20px 7 | $FONT_SIZE_MONO: 20px 8 | 9 | $LINE_HEIGHT: 1.2em 10 | 11 | $THEME_COLOR: #1898e2 12 | $THEME_COLOR_VISUAL: #dddddd 13 | $THEME_COLOR_VISUAL_FADED: #363636 14 | 15 | // Colors 16 | $COLOR_BACKGROUND: #141414 17 | $COLOR_TEXT: $THEME_COLOR_VISUAL 18 | $COLOR_TEXT_ASIDE: $THEME_COLOR_VISUAL 19 | $COLOR_LINK: $THEME_COLOR 20 | 21 | $COLOR_MENU_DIVIDER: #141414 22 | $COLOR_MENU_DIVIDER_FOCUS: $THEME_COLOR_VISUAL 23 | $COLOR_MENU_LABEL: #212121 24 | 25 | $COLOR_PANEL: #191919 26 | $COLOR_PANEL_DIVIDER: $THEME_COLOR_VISUAL_FADED 27 | 28 | $COLOR_COMMENT_TAG: #343434 29 | $COLOR_COMMENT_TAG_TEXT: $THEME_COLOR_VISUAL 30 | 31 | $COLOR_CODE_BACKGROUND: #111111 32 | $COLOR_CODE: #ffe4b5 33 | 34 | $COLOR_TS: $THEME_COLOR_VISUAL 35 | $COLOR_TS_INTERFACE: $THEME_COLOR_VISUAL 36 | $COLOR_TS_ENUM: $THEME_COLOR_VISUAL 37 | $COLOR_TS_CLASS: $THEME_COLOR_VISUAL 38 | $COLOR_TS_PRIVATE: $THEME_COLOR_VISUAL 39 | 40 | $TOOLBAR_COLOR: #151515 41 | $TOOLBAR_TEXT_COLOR: $THEME_COLOR 42 | $TOOLBAR_HEIGHT: 40px 43 | -------------------------------------------------------------------------------- /src/default/assets/css/elements/_comment.sass: -------------------------------------------------------------------------------- 1 | dl.tsd-comment-tags 2 | overflow: hidden 3 | 4 | dt 5 | float: left 6 | padding: 1px 5px 7 | margin: 0 10px 0 0 8 | border-radius: 4px 9 | border: 1px solid $COLOR_TEXT 10 | color: $COLOR_TEXT 11 | font-size: 0.8em 12 | font-weight: normal 13 | 14 | dd 15 | margin: 0 0 10px 0 16 | 17 | &:before, &:after 18 | display: table 19 | content: " " 20 | pre, &:after 21 | clear: both 22 | 23 | p 24 | margin: 0 25 | 26 | .tsd-panel.tsd-comment .lead 27 | font-size: 1.1em 28 | line-height: $LINE_HEIGHT 29 | margin-bottom: 2em 30 | 31 | &:last-child 32 | margin-bottom: 0 -------------------------------------------------------------------------------- /src/default/assets/css/elements/_filter.sass: -------------------------------------------------------------------------------- 1 | // Classes set on the body to control the visible state of the filtered elements 2 | // 3 | .toggle-protected .tsd-is-private 4 | display: none 5 | 6 | .toggle-public .tsd-is-private, 7 | .toggle-public .tsd-is-protected, 8 | .toggle-public .tsd-is-private-protected 9 | display: none 10 | 11 | .toggle-inherited .tsd-is-inherited 12 | display: none 13 | 14 | .toggle-only-exported .tsd-is-not-exported 15 | display: none 16 | 17 | .toggle-externals .tsd-is-external 18 | display: none 19 | 20 | 21 | // Filter Buttons in the toolbar 22 | // 23 | #tsd-filter 24 | position: relative 25 | display: inline-block 26 | height: $TOOLBAR_HEIGHT 27 | vertical-align: bottom 28 | 29 | .no-filter & 30 | display: none 31 | 32 | .tsd-filter-group 33 | color: $COLOR_TEXT 34 | display: inline-block 35 | vertical-align: bottom 36 | white-space: nowrap 37 | padding: 0 20px 0 0 38 | 39 | input 40 | display: none 41 | 42 | +size-xs-sm 43 | .tsd-filter-group 44 | display: block 45 | position: absolute 46 | top: $TOOLBAR_HEIGHT 47 | right: 20px 48 | height: auto 49 | background-color: $COLOR_PANEL 50 | visibility: hidden 51 | transform: translate(50%,0) 52 | box-shadow: 0 0 4px rgba(#000, 0.25) 53 | 54 | .has-options & 55 | visibility: visible 56 | 57 | .to-has-options & 58 | animation: fade-in 0.2s 59 | 60 | .from-has-options & 61 | animation: fade-out 0.2s 62 | 63 | label, 64 | .tsd-select 65 | display: block 66 | padding-right: 20px 67 | 68 | -------------------------------------------------------------------------------- /src/default/assets/css/elements/_footer.sass: -------------------------------------------------------------------------------- 1 | footer 2 | &.with-border-bottom 3 | border-bottom: 1px solid $COLOR_PANEL_DIVIDER 4 | 5 | .tsd-legend-group 6 | margin: 20px 0 7 | padding: 20px 8 | background-color: $COLOR_BACKGROUND 9 | border: 4px solid $THEME_COLOR_VISUAL_FADED 10 | box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2), 0 2px 6px rgba(0, 0, 0, 0.2) 11 | border-radius: 4px 12 | font-weight: 300 13 | 14 | .tsd-legend 15 | display: inline-block 16 | min-width: 19% 17 | padding: 0 18 | margin: 0 19 | font-size: $FONT_SIZE 20 | list-style: none 21 | line-height: $LINE_HEIGHT 22 | vertical-align: top 23 | -------------------------------------------------------------------------------- /src/default/assets/css/elements/_hierarchy.sass: -------------------------------------------------------------------------------- 1 | // Displays the type hierarchy 2 | // 3 | //

17 | // 18 | .tsd-hierarchy 19 | list-style: initial 20 | padding: 0 0 0 20px 21 | margin: 0 22 | 23 | li 24 | margin-top: 10px 25 | 26 | -------------------------------------------------------------------------------- /src/default/assets/css/elements/_images.sass: -------------------------------------------------------------------------------- 1 | // fixes issue with images in readme 2 | img 3 | max-width: 100% 4 | -------------------------------------------------------------------------------- /src/default/assets/css/elements/_index.sass: -------------------------------------------------------------------------------- 1 | // Displays an index of grouped links. 2 | // 3 | //
4 | //
5 | //
6 | //

Constructor methods

7 | // 10 | //
11 | //
12 | //

Properties

13 | // 19 | //
20 | //
21 | //
22 | // 23 | .tsd-index-panel 24 | .tsd-index-content 25 | margin-bottom: -30px !important 26 | 27 | .tsd-index-section 28 | margin-bottom: 30px !important 29 | 30 | ul.tsd-index-list 31 | display: inline 32 | +vendors(column-count, 3) 33 | +vendors(column-gap, 20px) 34 | padding: 0 35 | list-style: none 36 | line-height: $LINE_HEIGHT 37 | 38 | +size-xs-sm 39 | +vendors(column-count, 1) 40 | 41 | +size-md 42 | +vendors(column-count, 2) 43 | 44 | li 45 | padding: 2px 46 | +vendors(column-break-inside, avoid) 47 | +vendors(page-break-inside, avoid) 48 | 49 | a, 50 | .tsd-parent-kind-module a 51 | color: $COLOR_TS 52 | 53 | .tsd-parent-kind-interface a 54 | color: $COLOR_TS_INTERFACE 55 | 56 | .tsd-parent-kind-enum a 57 | color: $COLOR_TS_ENUM 58 | 59 | .tsd-parent-kind-class a 60 | color: $COLOR_TS_CLASS 61 | 62 | 63 | .tsd-kind-module a 64 | color: $COLOR_TS 65 | 66 | .tsd-kind-interface a 67 | color: $COLOR_TS_INTERFACE 68 | 69 | .tsd-kind-enum a 70 | color: $COLOR_TS_ENUM 71 | 72 | .tsd-kind-class a 73 | color: $COLOR_TS_CLASS 74 | 75 | .tsd-is-private a 76 | color: $COLOR_TS_PRIVATE 77 | -------------------------------------------------------------------------------- /src/default/assets/css/elements/_member.sass: -------------------------------------------------------------------------------- 1 | .tsd-flag 2 | display: inline-block 3 | padding: 0 8px 4px 4 | border-radius: 4px 5 | color: $COLOR_COMMENT_TAG_TEXT 6 | background-color: $COLOR_COMMENT_TAG 7 | text-indent: 0 8 | font-size: $FONT_SIZE_MONO 9 | font-weight: normal 10 | text-transform: lowercase 11 | 12 | .tsd-anchor 13 | position: absolute 14 | top: -100px 15 | 16 | .tsd-member 17 | position: relative 18 | 19 | .tsd-anchor + h3 20 | margin-top: 0 21 | margin-bottom: 0 22 | border-bottom: none 23 | -------------------------------------------------------------------------------- /src/default/assets/css/elements/_navigation.sass: -------------------------------------------------------------------------------- 1 | // Base format for the navigation parts. 2 | // 3 | =INDENT($DEPTH, $BASE, $STEP, $PROGRESS:$DEPTH) 4 | @if $PROGRESS >= 0 5 | & li 6 | +INDENT($DEPTH, $BASE, $STEP, $PROGRESS - 1) 7 | @else 8 | & a 9 | margin-left: #{($BASE + $STEP * ($DEPTH - 1))}px 10 | 11 | =INDENTS($COUNT, $BASE, $STEP) 12 | @for $DEPTH from 1 through $COUNT 13 | +INDENT($DEPTH, $BASE, $STEP) 14 | 15 | .tsd-navigation 16 | a 17 | display: block 18 | color: $COLOR_TEXT 19 | text-decoration: none 20 | transition: border-left-color 0.1s 21 | 22 | &:hover 23 | text-decoration: underline 24 | 25 | ul 26 | margin: 0 27 | padding: 0 28 | list-style: none 29 | 30 | > ul 31 | margin: 20px 0 32 | padding: 20px 33 | background-color: $COLOR_BACKGROUND 34 | border: 4px solid $THEME_COLOR_VISUAL_FADED 35 | box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2), 0 2px 6px rgba(0, 0, 0, 0.2) 36 | border-radius: 4px 37 | font-weight: 300 38 | 39 | li 40 | padding: 0 41 | 42 | 43 | // Primary part of the navigation containing the available modules. 44 | // 45 | // 58 | // 59 | .tsd-navigation.primary 60 | padding-bottom: 40px 61 | 62 | a 63 | display: block 64 | padding-top: 0px 65 | padding-bottom: 0px 66 | 67 | ul 68 | +INDENTS(6, 5, 20) 69 | 70 | 71 | &.current > a 72 | font-weight: bold 73 | 74 | &.label span 75 | display: block 76 | padding: 20px 0 6px 5px 77 | color: $COLOR_MENU_LABEL 78 | 79 | &.globals + li > span, 80 | &.globals + li > a 81 | padding-top: 20px 82 | 83 | 84 | /* The side navigation menu */ 85 | .sidenav 86 | height: 100% /* 100% Full-height */ 87 | width: 0 /* 0 width - change this with JavaScript */ 88 | position: fixed /* Stay in place */ 89 | z-index: 9000 /* Stay on top */ 90 | top: 0 /* Stay at the top */ 91 | right: 0 92 | background-color: #111 /* Black*/ 93 | overflow-x: hidden /* Disable horizontal scroll */ 94 | transition: 0.5s /* 0.5 second transition effect to slide in the sidenav */ 95 | padding: 0 96 | box-shadow: 0 0 4px rgba(#000, 0.25) 97 | 98 | /* Style page content - use this if you want to push the page content to the right when you open the side navigation */ 99 | /* On smaller screens, where height is less than 450px, change the style of the sidenav (less padding and a smaller font size) */ 100 | @media screen and (max-height: 450px) 101 | .sidenav 102 | padding-top: 15px 103 | .sidenav a 104 | font-size: 18px 105 | 106 | // Secondary part of the navigation containing the table of contents 107 | // of the current module. 108 | // Can be made sticky by `typedoc.MenuSticky` and will highlight current sticky with `typedoc.MenuHighlight`. 109 | // 110 | // 132 | // 133 | .tsd-navigation.secondary 134 | ul 135 | +INDENTS(6, 0, 30) 136 | transition: opacity 0.2s 137 | 138 | li.focus > a, 139 | ul.current li.focus > a 140 | border-left-color: $COLOR_MENU_DIVIDER_FOCUS 141 | 142 | // Sticky menu setup 143 | // 144 | .menu-sticky-wrap 145 | +size-md-lg 146 | position: static 147 | 148 | .no-csspositionsticky & 149 | &.sticky 150 | position: fixed 151 | 152 | &.sticky-current 153 | position: fixed 154 | 155 | ul.before-current, 156 | ul.after-current 157 | opacity: 0 158 | 159 | &.sticky-bottom 160 | position: absolute 161 | top: auto !important 162 | left: auto !important 163 | bottom: 0 164 | right: 0 165 | 166 | .csspositionsticky & 167 | &.sticky 168 | position: sticky 169 | 170 | &.sticky-current 171 | position: sticky 172 | -------------------------------------------------------------------------------- /src/default/assets/css/elements/_panel.sass: -------------------------------------------------------------------------------- 1 | // Displays a panel, an organisation unit in TypeDoc used to group single entities 2 | // like a method or a variable. 3 | 4 | .tsd-panel 5 | @extend %prevent-children-margin 6 | margin: 20px 0 7 | padding: 20px 8 | background-color: $COLOR_PANEL 9 | border: 4px solid darken($THEME_COLOR, 20%) 10 | box-shadow: 0 2px 6px rgba(0,0,0,0.20), 0 2px 6px rgba(0,0,0,0.20); 11 | -webkit-border-radius: 4px 12 | -moz-border-radius: 4px 13 | border-radius: 4px 14 | font-weight: 300 15 | 16 | &:empty 17 | display: none 18 | 19 | h1, h2, h3, h4 20 | margin-top: 40px 21 | margin-bottom: 20px 22 | margin-left: -20px 23 | margin-right: -20px 24 | padding-left: 20px 25 | border-bottom: 2px solid $COLOR_PANEL_DIVIDER 26 | padding-bottom: 10px 27 | font-weight: 400 28 | > .name 29 | border: 2px solid $COLOR_PANEL_DIVIDER 30 | border-radius: 4px 4px 0 0 31 | padding: 10px 15px 10px 15px 32 | border-bottom: 2px solid $COLOR_PANEL 33 | 34 | &.tsd-before-signature 35 | margin-bottom: 0 36 | border-bottom: 0 37 | 38 | table 39 | display: block 40 | width: 100% 41 | overflow: auto 42 | margin-top: 10px 43 | word-break: normal 44 | word-break: keep-all 45 | 46 | th, td 47 | padding: 6px 13px 48 | border: 1px solid #ddd 49 | font-weight: 300 50 | 51 | tr 52 | background-color: #1e1e1e 53 | border-top: 1px solid #ccc 54 | font-weight: 300 55 | 56 | &:nth-child(2n) 57 | background-color: #2a2a2a 58 | font-weight: 300 59 | 60 | 61 | // Holds a series of panels with an optional heading. 62 | // 63 | //
64 | //

Consetetur sadipscing elitr

65 | //
66 | //

Eirmod tempor invidunt

67 | //

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.

68 | //
69 | //
70 | //

Eirmod tempor invidunt

71 | //

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.

72 | //
73 | //
74 | // 75 | .tsd-panel-group 76 | margin: 60px 0 77 | 78 | > h1, > h2, > h3 79 | padding-left: 20px 80 | font-weight: 300 81 | padding-right: 20px 82 | color: $COLOR_LINK 83 | -------------------------------------------------------------------------------- /src/default/assets/css/elements/_search.sass: -------------------------------------------------------------------------------- 1 | #tsd-search 2 | transition: background-color 0.2s 3 | 4 | .title 5 | position: relative 6 | z-index: 2 7 | font-weight: 400 8 | 9 | .field 10 | position: absolute 11 | left: 0 12 | top: 0 13 | right: 40px 14 | height: 40px 15 | 16 | input 17 | box-sizing: border-box 18 | position: relative 19 | top: -50px 20 | z-index: 1 21 | width: 100% 22 | padding: 0 10px 23 | opacity: 0 24 | outline: 0 25 | border: 0 26 | background: transparent 27 | color: $THEME_COLOR 28 | 29 | label 30 | position: absolute 31 | overflow: hidden 32 | right: -40px 33 | 34 | .field input, 35 | .title 36 | transition: opacity 0.2s 37 | 38 | .results 39 | position: absolute 40 | visibility: hidden 41 | top: 40px 42 | width: 100% 43 | margin: 0 44 | padding: 0 45 | list-style: none 46 | box-shadow: 0 0 4px rgba(#000, 0.25) 47 | 48 | li 49 | padding: 0 10px 50 | background-color: $COLOR_BACKGROUND 51 | 52 | li:nth-child(even) 53 | background-color: $COLOR_PANEL 54 | 55 | li.state 56 | display: none 57 | 58 | li.current, 59 | li:hover 60 | background-color: $COLOR_PANEL_DIVIDER 61 | 62 | a 63 | display: block 64 | 65 | &:before 66 | top: 10px 67 | 68 | span.parent 69 | color: $COLOR_TEXT_ASIDE 70 | font-weight: normal 71 | 72 | &.has-focus 73 | background-color: $COLOR_PANEL_DIVIDER 74 | 75 | .field input 76 | top: 0 77 | opacity: 1 78 | 79 | .title 80 | z-index: 0 81 | opacity: 0 82 | 83 | .results 84 | visibility: visible 85 | z-index: 1 86 | 87 | &.loading .results li.state.loading 88 | display: block 89 | 90 | &.failure .results li.state.failure 91 | display: block 92 | -------------------------------------------------------------------------------- /src/default/assets/css/elements/_signatures.sass: -------------------------------------------------------------------------------- 1 | // Wraps a function signature. 2 | // Changes its appearance when directly placed inside a `tsd-panel`. 3 | // Can be combined with class `tsd-kind-icon` to display an icon in front of the signature. 4 | // 5 | //
6 | //
7 | // getChildByName( 8 | // name: string 9 | // ): 10 | // DeclarationReflection 11 | //
12 | //
13 | // 14 | 15 | .tsd-signature 16 | white-space: nowrap 17 | overflow: hidden 18 | text-overflow: ellipsis 19 | margin: 0 0 1em 0 20 | padding: 10px 21 | border: 1px solid $COLOR_PANEL_DIVIDER 22 | font-family: $FONT_FAMILY_MONO 23 | font-size: $FONT_SIZE_MONO 24 | width: inherit 25 | 26 | &.tsd-kind-icon 27 | padding-left: 30px 28 | 29 | &:before 30 | top: 10px 31 | left: 10px 32 | 33 | .tsd-panel > & 34 | margin-left: -20px 35 | margin-right: -20px 36 | border-width: 1px 0 37 | 38 | &.tsd-kind-icon 39 | padding-left: 40px 40 | 41 | &:before 42 | left: 20px 43 | 44 | .tsd-signature:hover 45 | white-space: normal !important 46 | text-overflow: ellipsis !important 47 | 48 | .tsd-signature-symbol 49 | color: $COLOR_TEXT_ASIDE 50 | font-weight: normal 51 | 52 | .tsd-signature-type 53 | text-transform: none 54 | font-weight: normal 55 | color: $THEME_COLOR 56 | 57 | 58 | // Displays a list of signatures. 59 | // Changes its appearance when directly placed inside a `tsd-panel`. 60 | // Made interactive by JavaScript at `typedoc.Signature`. 61 | // 62 | // 66 | // 67 | .tsd-signatures 68 | padding: 0 69 | margin: 0 0 1em 0 70 | border: 1px solid $COLOR_PANEL_DIVIDER 71 | 72 | .tsd-signature 73 | margin: 0 74 | border-width: 1px 0 0 0 75 | transition: background-color 0.1s 76 | 77 | &:first-child 78 | border-top-width: 0 79 | 80 | &.current 81 | background-color: $COLOR_PANEL_DIVIDER 82 | 83 | &.active > .tsd-signature 84 | cursor: pointer 85 | 86 | .tsd-panel > & 87 | margin-left: -20px 88 | margin-right: -20px 89 | border-width: 1px 0 90 | 91 | .tsd-signature.tsd-kind-icon 92 | padding-left: 40px 93 | 94 | &:before 95 | left: 20px 96 | 97 | .tsd-panel > a.anchor + & 98 | border-top-width: 0 99 | margin-top: -20px 100 | 101 | 102 | // Holds the descriptions related to a list of signatures. 103 | // Made interactive by JavaScript at `typedoc.Signature`. 104 | .tsd-descriptions 105 | position: relative 106 | overflow: hidden 107 | transition: height 0.3s 108 | list-style: initial 109 | 110 | h4 111 | text-transform: capitalize 112 | 113 | > li 114 | @extend %prevent-children-margin 115 | 116 | &.active > .tsd-description 117 | display: none 118 | 119 | &.current 120 | display: block 121 | 122 | &.fade-in 123 | animation: fade-in-delayed 0.3s 124 | 125 | &.fade-out 126 | animation: fade-out-delayed 0.3s 127 | position: absolute 128 | display: block 129 | top: 0 130 | left: 0 131 | right: 0 132 | opacity: 0 133 | visibility: hidden 134 | 135 | ul.tsd-parameters, 136 | ul.tsd-type-parameters 137 | list-style: initial 138 | margin: 0 139 | padding-left: 20px 140 | 141 | .name 142 | @extend code 143 | 144 | .tsd-comment 145 | text-align: justify 146 | margin-top: -0.5em 147 | 148 | li 149 | margin-top: 10px 150 | -------------------------------------------------------------------------------- /src/default/assets/css/elements/_sources.sass: -------------------------------------------------------------------------------- 1 | .tsd-sources 2 | font-size: 0.8em 3 | color: lighten($COLOR_PANEL, 50%) 4 | margin: 20px 0 0 0 5 | text-align: right 6 | 7 | a 8 | font-weight: bold 9 | color: lighten($COLOR_PANEL, 60%) 10 | 11 | ul, p 12 | margin: 0 !important 13 | 14 | ul 15 | list-style: none 16 | padding: 0 -------------------------------------------------------------------------------- /src/default/assets/css/elements/_toolbar.sass: -------------------------------------------------------------------------------- 1 | // Displays the toolbar at the top of the page. 2 | // 3 | //
4 | //
5 | //
6 | //
7 | // TypeDoc Documentation 8 | //
9 | //
10 | //
11 | //
12 | // 13 | .tsd-page-toolbar 14 | width: 100% 15 | height: $TOOLBAR_HEIGHT 16 | color: $TOOLBAR_TEXT_COLOR 17 | background: $TOOLBAR_COLOR 18 | 19 | a 20 | color: $THEME_COLOR 21 | text-decoration: none 22 | 23 | &.title 24 | font-weight: bold 25 | 26 | &.title:hover 27 | text-decoration: underline 28 | 29 | .table-wrap 30 | display: table 31 | width: 100% 32 | height: $TOOLBAR_HEIGHT 33 | 34 | .table-cell 35 | display: table-cell 36 | position: relative 37 | white-space: nowrap 38 | line-height: $TOOLBAR_HEIGHT 39 | 40 | &:first-child 41 | width: 100% 42 | 43 | %TSD_WIDGET_ICON 44 | &:before 45 | content: '' 46 | display: inline-block 47 | width: 40px 48 | height: 40px 49 | margin: 0 -8px 0 0 50 | background-image: url(../images/widgets@2x.png) 51 | background-repeat: no-repeat 52 | text-indent: -1024px 53 | vertical-align: bottom 54 | background-size: 320px 40px 55 | 56 | .tsd-widget 57 | @extend %TSD_WIDGET_ICON 58 | display: inline-block 59 | overflow: hidden 60 | height: $TOOLBAR_HEIGHT 61 | transition: opacity 0.1s, background-color 0.2s 62 | vertical-align: bottom 63 | cursor: pointer 64 | 65 | &:hover 66 | opacity: 0.8 67 | 68 | &.active 69 | opacity: 1 70 | background-color: $COLOR_PANEL_DIVIDER 71 | 72 | &.no-caption 73 | width: 40px 74 | 75 | &:before 76 | margin: 0 77 | 78 | &.search:before 79 | background-position: 0 0 80 | 81 | &.menu:before 82 | background-position: -40px 0 83 | 84 | &.options:before 85 | background-position: -80px 0 86 | 87 | &.options, 88 | &.menu 89 | display: none 90 | 91 | +size-xs-sm 92 | display: inline-block 93 | 94 | input[type=checkbox] + &:before 95 | background-position: -120px 0 96 | 97 | input[type=checkbox]:checked + &:before 98 | background-position: -160px 0 99 | 100 | .tsd-select 101 | position: relative 102 | display: inline-block 103 | height: $TOOLBAR_HEIGHT 104 | transition: opacity 0.1s, background-color 0.2s 105 | vertical-align: bottom 106 | cursor: pointer 107 | 108 | .tsd-select-label 109 | @extend %TSD_WIDGET_ICON 110 | transition: opacity 0.2s 111 | 112 | &:before 113 | background-position: -240px 0 114 | 115 | &.active 116 | .tsd-select-label 117 | opacity: 0.8 118 | 119 | .tsd-select-list 120 | visibility: visible 121 | opacity: 1 122 | transition-delay: 0s 123 | z-index: 1 124 | 125 | .tsd-select-list 126 | color: $COLOR_TEXT 127 | position: absolute 128 | visibility: hidden 129 | top: $TOOLBAR_HEIGHT 130 | left: 0 131 | margin: 0 132 | padding: 0 133 | opacity: 0 134 | list-style: none 135 | box-shadow: 0 0 4px rgba(#000, 0.25) 136 | transition: visibility 0s 0.2s, opacity 0.2s 137 | 138 | li 139 | @extend %TSD_WIDGET_ICON 140 | padding: 0 20px 0 0 141 | background-color: $COLOR_BACKGROUND 142 | 143 | &:before 144 | background-position: 40px 0 145 | 146 | &:nth-child(even) 147 | background-color: $COLOR_PANEL 148 | 149 | &:hover 150 | background-color: $COLOR_PANEL_DIVIDER 151 | // color: black 152 | 153 | &.selected:before 154 | background-position: -200px 0 155 | 156 | +size-xs-sm 157 | .tsd-select-list 158 | top: 0 159 | left: auto 160 | right: 100% 161 | margin-right: -5px 162 | 163 | .tsd-select-label:before 164 | background-position: -280px 0 165 | -------------------------------------------------------------------------------- /src/default/assets/css/layouts/_default.sass: -------------------------------------------------------------------------------- 1 | .col-menu 2 | height: 100% 3 | height: -moz-available 4 | height: -webkit-fill-available 5 | height: fill-available 6 | overflow: auto 7 | 8 | .col-content 9 | height: 100% 10 | height: -moz-available 11 | height: -webkit-fill-available 12 | height: fill-available 13 | overflow: auto 14 | padding-left: 20px 15 | 16 | html.default 17 | +size-md 18 | .col-content 19 | width: 72% 20 | 21 | .col-menu 22 | width: 28% 23 | 24 | +size-xs-sm 25 | .col-content 26 | float: none 27 | width: 100% 28 | 29 | .col-menu 30 | position: fixed !important 31 | overflow: auto 32 | -webkit-overflow-scrolling: touch 33 | overflow-scrolling: touch 34 | z-index: 1024 35 | top: 0 !important 36 | bottom: 0 !important 37 | left: auto !important 38 | right: 0 !important 39 | width: 100% 40 | padding: 20px 20px 0 0 41 | max-width: 450px 42 | visibility: hidden 43 | background-color: $COLOR_PANEL 44 | transform: translate(100%,0) 45 | 46 | > *:last-child 47 | padding-bottom: 20px 48 | 49 | .overlay 50 | content: '' 51 | display: block 52 | position: fixed 53 | z-index: 1023 54 | top: 0 55 | left: 0 56 | right: 0 57 | bottom: 0 58 | background-color: rgba(#000, 0.75) 59 | visibility: hidden 60 | 61 | &.to-has-menu 62 | .overlay 63 | animation: fade-in 0.4s 64 | 65 | header, 66 | footer, 67 | .col-content 68 | animation: shift-to-left 0.4s 69 | 70 | .col-menu 71 | animation: pop-in-from-right 0.4s 72 | 73 | &.from-has-menu 74 | .overlay 75 | animation: fade-out 0.4s 76 | 77 | header, 78 | footer, 79 | .col-content 80 | animation: unshift-to-left 0.4s 81 | 82 | .col-menu 83 | animation: pop-out-to-right 0.4s 84 | 85 | &.has-menu 86 | body 87 | overflow: hidden 88 | 89 | .overlay 90 | visibility: visible 91 | 92 | header, 93 | footer, 94 | .col-content 95 | transform: translate(-25%, 0) 96 | 97 | .col-menu 98 | visibility: visible 99 | transform: translate(0,0) 100 | padding-left: 20px 101 | 102 | .tsd-page-title 103 | padding: 10px 0 10px 0 104 | margin: 0 0 0 0 105 | background: $COLOR_PANEL 106 | box-shadow: 0 2px 2px rgba(0, 0, 0, 0.125) 107 | 108 | h1 109 | margin: 0 110 | font-weight: 400 111 | 112 | .tsd-breadcrumb 113 | margin: 0 114 | padding: 0 115 | color: $COLOR_TEXT_ASIDE 116 | font-weight: 300 117 | 118 | a 119 | color: $COLOR_TEXT_ASIDE 120 | text-decoration: none 121 | 122 | &:hover 123 | text-decoration: underline 124 | 125 | li 126 | display: inline 127 | 128 | &:after 129 | content: ' / ' 130 | -------------------------------------------------------------------------------- /src/default/assets/css/layouts/_minimal.sass: -------------------------------------------------------------------------------- 1 | html.minimal 2 | .container 3 | margin: 0 4 | 5 | .container-main 6 | padding-top: 50px 7 | padding-bottom: 0 8 | 9 | .content-wrap 10 | padding-left: 300px 11 | 12 | .tsd-navigation 13 | position: fixed !important 14 | overflow: auto 15 | -webkit-overflow-scrolling: touch 16 | overflow-scrolling: touch 17 | box-sizing: border-box 18 | z-index: 1 19 | left: 0 20 | top: 40px 21 | bottom: 0 22 | width: 300px 23 | padding: 20px 24 | margin: 0 25 | 26 | .tsd-member .tsd-member 27 | margin-left: 0 28 | 29 | .tsd-page-toolbar 30 | position: fixed 31 | z-index: 2 32 | 33 | #tsd-filter .tsd-filter-group 34 | right: 0 35 | transform: none 36 | 37 | footer 38 | background-color: transparent 39 | 40 | .container 41 | padding: 0 42 | 43 | .tsd-generator 44 | padding: 0 45 | 46 | +size-xs-sm 47 | .tsd-navigation 48 | display: none 49 | .content-wrap 50 | padding-left: 0 51 | -------------------------------------------------------------------------------- /src/default/assets/css/main.sass: -------------------------------------------------------------------------------- 1 | @import constants 2 | 3 | @import vendors/normalize 4 | @import vendors/highlight.js 5 | 6 | @import setup/mixins 7 | @import setup/grid 8 | @import setup/icons 9 | @import setup/animations 10 | @import setup/typography 11 | 12 | @import layouts/default 13 | @import layouts/minimal 14 | 15 | @import elements/comment 16 | @import elements/filter 17 | @import elements/footer 18 | @import elements/hierarchy 19 | @import elements/index 20 | @import elements/member 21 | @import elements/navigation 22 | @import elements/panel 23 | @import elements/search 24 | @import elements/signatures 25 | @import elements/sources 26 | @import elements/toolbar 27 | @import elements/images 28 | -------------------------------------------------------------------------------- /src/default/assets/css/setup/_animations.sass: -------------------------------------------------------------------------------- 1 | .no-transition 2 | transition: none !important 3 | 4 | @keyframes fade-in 5 | from 6 | opacity: 0 7 | to 8 | opacity: 1 9 | 10 | @keyframes fade-out 11 | from 12 | opacity: 1 13 | visibility: visible 14 | to 15 | opacity: 0 16 | 17 | @keyframes fade-in-delayed 18 | 0% 19 | opacity: 0 20 | 33% 21 | opacity: 0 22 | 100% 23 | opacity: 1 24 | 25 | @keyframes fade-out-delayed 26 | 0% 27 | opacity: 1 28 | visibility: visible 29 | 66% 30 | opacity: 0 31 | 100% 32 | opacity: 0 33 | 34 | @keyframes shift-to-left 35 | from 36 | transform: translate(0,0) 37 | to 38 | transform: translate(-25%,0) 39 | 40 | @keyframes unshift-to-left 41 | from 42 | transform: translate(-25%,0) 43 | to 44 | transform: translate(0,0) 45 | 46 | @keyframes pop-in-from-right 47 | from 48 | transform: translate(100%,0) 49 | to 50 | transform: translate(0,0) 51 | 52 | @keyframes pop-out-to-right 53 | from 54 | transform: translate(0,0) 55 | visibility: visible 56 | to 57 | transform: translate(100%,0) -------------------------------------------------------------------------------- /src/default/assets/css/setup/_grid.sass: -------------------------------------------------------------------------------- 1 | =size-xs 2 | @media (max-width: 640px) 3 | & 4 | @content 5 | 6 | =size-sm 7 | @media (min-width: 641px) and (max-width: 900px) 8 | & 9 | @content 10 | 11 | =size-md 12 | @media (min-width: 901px) and (max-width: 1024px) 13 | & 14 | @content 15 | 16 | =size-lg 17 | @media (min-width: 1025px) 18 | & 19 | @content 20 | 21 | =size-xs-sm 22 | @media (max-width: 900px) 23 | & 24 | @content 25 | 26 | =size-md-lg 27 | @media (min-width: 901px) 28 | & 29 | @content 30 | 31 | .container 32 | max-width: 100% 33 | margin: 0 auto 34 | padding: 0 0 0 20px 35 | 36 | +size-xs 37 | padding: 0 20px 38 | 39 | .container-main 40 | padding-bottom: 0 41 | position: absolute !important 42 | top: 110px 43 | bottom: 0 44 | left: 0 45 | right: 0 46 | 47 | .row 48 | +clearfix 49 | position: relative 50 | margin: 0 51 | 52 | .col 53 | @extend %prevent-children-margin 54 | box-sizing: border-box 55 | float: left 56 | padding: 0 20px 0 0 57 | 58 | @for $width from 1 to 12 59 | .col-#{$width} 60 | @extend .col 61 | width: $width / 12 * 100% 62 | 63 | .offset-#{$width} 64 | margin-left: $width / 12 * 100% -------------------------------------------------------------------------------- /src/default/assets/css/setup/_icons.scss: -------------------------------------------------------------------------------- 1 | // This is extremely piggy but will do till next version 2 | // Rebuilt with React 3 | 4 | .tsd-is-protected { 5 | > .tsd-kind-icon::before { 6 | content: '🛡️' 7 | } 8 | } 9 | 10 | .tsd-is-private { 11 | > .tsd-kind-icon::before { 12 | content: '🔒' 13 | } 14 | } 15 | 16 | .tsd-is-static { 17 | > .tsd-kind-icon::before { 18 | content: '💠' 19 | } 20 | } 21 | 22 | .tsd-is-inherited { 23 | > .tsd-kind-icon::before { 24 | content: '📩' 25 | } 26 | } 27 | 28 | @mixin icon($icon, $kind) { 29 | ul li .tsd-kind-#{$kind} { 30 | > .tsd-kind-icon::before { 31 | content: '∟ #{$icon} ' !important 32 | } 33 | } 34 | 35 | .tsd-kind-#{$kind} { 36 | > .tsd-kind-icon::before { 37 | content: '#{$icon} ' 38 | } 39 | } 40 | 41 | // Protected combs 42 | .tsd-kind-#{$kind}.tsd-is-protected { 43 | > .tsd-kind-icon::after { 44 | content: '🛡️' 45 | } 46 | } 47 | 48 | .tsd-kind-#{$kind}.tsd-is-protected.tsd-is-static { 49 | > .tsd-kind-icon::after { 50 | content: '🛡️💠' 51 | } 52 | } 53 | 54 | .tsd-kind-#{$kind}.tsd-is-protected.tsd-is-static.tsd-is-inherited { 55 | > .tsd-kind-icon::after { 56 | content: '📩🛡️💠' 57 | } 58 | } 59 | 60 | .tsd-kind-#{$kind}.tsd-is-protected.tsd-is-inherited { 61 | > .tsd-kind-icon::after { 62 | content: '📩🛡️' 63 | } 64 | } 65 | 66 | // Private combs 67 | .tsd-kind-#{$kind}.tsd-is-private { 68 | > .tsd-kind-icon::after { 69 | content: '🔒' 70 | } 71 | } 72 | 73 | .tsd-kind-#{$kind}.tsd-is-private.tsd-is-static { 74 | > .tsd-kind-icon::after { 75 | content: '🔒💠' 76 | } 77 | } 78 | 79 | .tsd-kind-#{$kind}.tsd-is-private.tsd-is-static.tsd-is-inherited { 80 | > .tsd-kind-icon::after { 81 | content: '📩🔒💠' 82 | } 83 | } 84 | 85 | .tsd-kind-#{$kind}.tsd-is-private.tsd-is-inherited { 86 | > .tsd-kind-icon::after { 87 | content: '📩🔒' 88 | } 89 | } 90 | 91 | // Inherited combs 92 | .tsd-kind-#{$kind}.tsd-is-inherited { 93 | > .tsd-kind-icon::after { 94 | content: '📩' 95 | } 96 | } 97 | 98 | .tsd-kind-#{$kind}.tsd-is-static { 99 | > .tsd-kind-icon::after { 100 | content: '💠' 101 | } 102 | } 103 | 104 | .tsd-kind-#{$kind}.tsd-is-inherited.tsd-is-static { 105 | > .tsd-kind-icon::after { 106 | content: '📩💠' 107 | } 108 | } 109 | } 110 | 111 | @include icon('📌', 'property'); 112 | @include icon('📌', 'enum-member'); 113 | @include icon('ℹ️', 'index-signature'); 114 | @include icon('🖊', 'type-alias'); 115 | @include icon('💱', 'variable'); 116 | @include icon('🗃️', 'class'); 117 | @include icon('🕹', 'method'); 118 | @include icon('🕹', 'function'); 119 | @include icon('🔨', 'constructor'); 120 | @include icon('📜', 'enum'); 121 | @include icon('📐', 'interface'); 122 | @include icon('{..}', 'object-literal'); 123 | @include icon('📦', 'module'); 124 | @include icon('🗝', 'accessor'); 125 | @include icon('🗝', 'set-signature'); 126 | @include icon('🗝', 'get-signature'); 127 | 128 | .tsd-kind-icon { 129 | display: block; 130 | position: relative; 131 | padding-left: 20px; 132 | text-indent: -20px; 133 | width: max-content; 134 | 135 | &::before { 136 | font-weight: bold; 137 | display: contents; 138 | vertical-align: middle; 139 | margin: 0 10px 5px 20px; 140 | } 141 | 142 | &::after { 143 | padding-left: 5px; 144 | font-size: 0.7em; 145 | vertical-align: middle; 146 | } 147 | } 148 | 149 | .tsd-kind-icon::after:hover { 150 | text-decoration: none !important; 151 | } -------------------------------------------------------------------------------- /src/default/assets/css/setup/_mixins.sass: -------------------------------------------------------------------------------- 1 | @mixin vendors($property, $value...) 2 | -webkit-#{$property}: $value 3 | -moz-#{$property}: $value 4 | -ms-#{$property}: $value 5 | -o-#{$property}: $value 6 | #{$property}: $value 7 | 8 | @mixin clearfix 9 | &:after 10 | visibility: hidden 11 | display: block 12 | content: "" 13 | clear: both 14 | height: 0 15 | 16 | @mixin retina 17 | @media (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) 18 | & 19 | @content 20 | 21 | %prevent-children-margin 22 | > :first-child, 23 | > :first-child > :first-child, 24 | > :first-child > :first-child > :first-child 25 | margin-top: 0 26 | 27 | > :last-child, 28 | > :last-child > :last-child, 29 | > :last-child > :last-child > :last-child 30 | margin-bottom: 0 31 | -------------------------------------------------------------------------------- /src/default/assets/css/setup/_typography.sass: -------------------------------------------------------------------------------- 1 | body 2 | background: $COLOR_BACKGROUND 3 | font-family: $FONT_FAMILY 4 | font-size: $FONT_SIZE 5 | color: $COLOR_TEXT 6 | font-weight: 300 7 | 8 | a 9 | color: $COLOR_LINK 10 | text-decoration: none 11 | 12 | &:hover 13 | text-decoration: underline 14 | 15 | code, pre 16 | font-family: $FONT_FAMILY_MONO 17 | margin: 0 18 | font-size: $FONT_SIZE 19 | color: $COLOR_CODE 20 | background-color: $COLOR_CODE_BACKGROUND 21 | padding-bottom: 0.2em 22 | padding-top: 0.2em 23 | padding-left: 0.4em 24 | padding-right: 0.4em 25 | border-radius: 4px 26 | 27 | pre 28 | padding: 0.4em 29 | 30 | code 31 | padding: 0 32 | font-size: 100% 33 | background-color: transparent 34 | 35 | h2 36 | font-weight: 300 37 | -------------------------------------------------------------------------------- /src/default/assets/css/vendors/_highlight.js.sass: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | *Visual Studio-like style based on original C# coloring by Jason Diamond 4 | 5 | .hljs 6 | display: inline-block 7 | padding: 0.5em 8 | background: white 9 | color: black 10 | 11 | .hljs-comment, .hljs-annotation, .hljs-template_comment, .diff .hljs-header, .hljs-chunk, .apache .hljs-cbracket 12 | color: #808080 13 | 14 | .hljs-keyword, .hljs-id, .hljs-built_in, .css .smalltalk .hljs-class, .hljs-winutils, .bash .hljs-variable, .tex .hljs-command, .hljs-request, .hljs-status, .nginx .hljs-title 15 | color: $THEME_COLOR 16 | 17 | .xml .hljs-tag 18 | color: $THEME_COLOR 19 | .hljs-value 20 | color: $THEME_COLOR 21 | 22 | .hljs-string, .hljs-title, .hljs-parent, .hljs-tag .hljs-value, .hljs-rules .hljs-value 23 | color: #d88 24 | 25 | .ruby .hljs-symbol 26 | color: #d88 27 | .hljs-string 28 | color: #d88 29 | 30 | .hljs-template_tag, .django .hljs-variable, .hljs-addition, .hljs-flow, .hljs-stream, .apache .hljs-tag, .hljs-date, .tex .hljs-formula, .coffeescript .hljs-attribute 31 | color: #d88 32 | 33 | .ruby .hljs-string, .hljs-decorator, .hljs-filter .hljs-argument, .hljs-localvars, .hljs-array, .hljs-attr_selector, .hljs-pseudo, .hljs-pi, .hljs-doctype, .hljs-deletion, .hljs-envvar, .hljs-shebang, .hljs-preprocessor, .hljs-pragma, .userType, .apache .hljs-sqbracket, .nginx .hljs-built_in, .tex .hljs-special, .hljs-prompt 34 | color: #2b91af 35 | 36 | .hljs-phpdoc, .hljs-javadoc, .hljs-xmlDocTag 37 | color: #808080 38 | 39 | .vhdl 40 | .hljs-typename 41 | font-weight: bold 42 | .hljs-string 43 | color: #666666 44 | .hljs-literal 45 | color: #a31515 46 | .hljs-attribute 47 | color: #00b0e8 48 | 49 | .xml .hljs-attribute 50 | color: $THEME_COLOR 51 | -------------------------------------------------------------------------------- /src/default/assets/css/vendors/_normalize.sass: -------------------------------------------------------------------------------- 1 | /**! normalize.css v1.1.3 | MIT License | git.io/normalize 2 | **/ 3 | /** ========================================================================== 4 | * HTML5 display definitions 5 | * ========================================================================== 6 | **/ 7 | /** 8 | * Correct `block` display not defined in IE 6/7/8/9 and Firefox 3. 9 | **/ 10 | article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary 11 | display: block 12 | 13 | /** 14 | * Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. 15 | **/ 16 | audio, canvas, video 17 | display: inline-block 18 | display: inline 19 | zoom: 1 20 | 21 | /** 22 | * Prevent modern browsers from displaying `audio` without controls. 23 | * Remove excess height in iOS 5 devices. 24 | **/ 25 | audio:not([controls]) 26 | display: none 27 | height: 0 28 | 29 | /** 30 | * Address styling not present in IE 7/8/9, Firefox 3, and Safari 4. 31 | * Known issue: no IE 6 support. 32 | **/ 33 | [hidden] 34 | display: none 35 | 36 | /** ========================================================================== 37 | * Base 38 | * ========================================================================== 39 | **/ 40 | /** 41 | * 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using 42 | * `em` units. 43 | * 2. Prevent iOS text size adjust after orientation change, without disabling 44 | * user zoom. 45 | **/ 46 | html 47 | font-size: 100% 48 | /** 1 **/ 49 | -ms-text-size-adjust: 100% 50 | /** 2 **/ 51 | -webkit-text-size-adjust: 100% 52 | /** 2 **/ 53 | font-family: sans-serif 54 | 55 | /** 56 | * Address `font-family` inconsistency between `textarea` and other form 57 | * elements. 58 | **/ 59 | 60 | button, input, select, textarea 61 | font-family: sans-serif 62 | 63 | /** 64 | * Address margins handled incorrectly in IE 6/7. 65 | **/ 66 | body 67 | margin: 0 68 | 69 | /** ========================================================================== 70 | * Links 71 | * ========================================================================== 72 | 73 | /** 74 | * Address `outline` inconsistency between Chrome and other browsers. 75 | **/ 76 | a 77 | &:focus 78 | outline: thin dotted 79 | &:active, &:hover 80 | outline: 0 81 | 82 | /** 83 | * Improve readability when focused and also mouse hovered in all browsers. 84 | **/ 85 | /** ========================================================================== 86 | * Typography 87 | * ========================================================================== 88 | **/ 89 | /** 90 | * Address font sizes and margins set differently in IE 6/7. 91 | * Address font sizes within `section` and `article` in Firefox 4+, Safari 5, 92 | * and Chrome. 93 | **/ 94 | h1 95 | font-size: 2em 96 | margin-top: 1em 97 | 98 | h2 99 | font-size: 1.5em 100 | margin-top: 1em 101 | 102 | h3 103 | font-size: 1.25em 104 | margin-top: 1em 105 | 106 | h4 107 | font-size: 1em 108 | margin-top: 1em 109 | 110 | h5 111 | font-size: 0.75em 112 | margin-top: 1em 113 | 114 | h6 115 | font-size: 0.5em 116 | margin-top: 1em 117 | 118 | /** 119 | * Address styling not present in IE 7/8/9, Safari 5, and Chrome. 120 | **/ 121 | abbr[title] 122 | border-bottom: 1px dotted 123 | 124 | /** 125 | * Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. 126 | **/ 127 | b, strong 128 | font-weight: bold 129 | 130 | blockquote 131 | margin: 1em 40px 132 | 133 | /** 134 | * Address styling not present in Safari 5 and Chrome. 135 | **/ 136 | dfn 137 | font-style: italic 138 | 139 | /** 140 | * Address differences between Firefox and other browsers. 141 | * Known issue: no IE 6/7 normalization. 142 | **/ 143 | hr 144 | -moz-box-sizing: content-box 145 | box-sizing: content-box 146 | height: 0 147 | 148 | /** 149 | * Address styling not present in IE 6/7/8/9. 150 | **/ 151 | mark 152 | background: #ff0 153 | color: #000 154 | 155 | /** 156 | * Address margins set differently in IE 6/7. 157 | **/ 158 | p, pre 159 | margin: 1em 0 160 | 161 | /** 162 | * Correct font family set oddly in IE 6, Safari 4/5, and Chrome. 163 | **/ 164 | code, kbd, pre, samp 165 | font-family: monospace, serif 166 | _font-family: 'courier new', monospace 167 | font-size: 1em 168 | 169 | /** 170 | * Improve readability of pre-formatted text in all browsers. 171 | **/ 172 | pre 173 | white-space: pre 174 | white-space: pre-wrap 175 | word-wrap: break-word 176 | 177 | /** 178 | * Address CSS quotes not supported in IE 6/7. 179 | **/ 180 | q 181 | quotes: none 182 | &:before, &:after 183 | content: '' 184 | content: none 185 | 186 | /** 187 | * Address `quotes` property not supported in Safari 4. 188 | **/ 189 | /** 190 | * Address inconsistent and variable font size in all browsers. 191 | **/ 192 | small 193 | font-size: 80% 194 | 195 | /** 196 | * Prevent `sub` and `sup` affecting `line-height` in all browsers. 197 | **/ 198 | sub 199 | font-size: 75% 200 | line-height: 0 201 | position: relative 202 | vertical-align: baseline 203 | 204 | sup 205 | font-size: 75% 206 | line-height: 0 207 | position: relative 208 | vertical-align: baseline 209 | top: -0.5em 210 | 211 | sub 212 | bottom: -0.25em 213 | 214 | /** ========================================================================== 215 | * Lists 216 | * ========================================================================== 217 | 218 | /** 219 | * Address margins set differently in IE 6/7. 220 | **/ 221 | dl, menu, ol, ul 222 | margin: 1em 0 223 | 224 | dd 225 | margin: 0 0 0 40px 226 | 227 | /** 228 | * Address paddings set differently in IE 6/7. 229 | **/ 230 | menu, ol, ul 231 | padding: 0 0 0 40px 232 | 233 | /** 234 | * Correct list images handled incorrectly in IE 7. 235 | **/ 236 | nav 237 | ul, ol 238 | list-style: none 239 | list-style-image: none 240 | 241 | /** ========================================================================== 242 | * Embedded content 243 | * ========================================================================== 244 | **/ 245 | /** 246 | * 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3. 247 | * 2. Improve image quality when scaled in IE 7. 248 | **/ 249 | img 250 | border: 0 251 | /** 1 **/ 252 | -ms-interpolation-mode: bicubic 253 | /** 2 **/ 254 | 255 | /** 256 | * Correct overflow displayed oddly in IE 9. 257 | **/ 258 | 259 | svg:not(:root) 260 | overflow: hidden 261 | 262 | /** ========================================================================== 263 | * Figures 264 | * ========================================================================== 265 | **/ 266 | /** 267 | * Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11. 268 | **/ 269 | figure, form 270 | margin: 0 271 | 272 | /** ========================================================================== 273 | * Forms 274 | * ========================================================================== 275 | **/ 276 | /** 277 | * Correct margin displayed oddly in IE 6/7. 278 | **/ 279 | /** 280 | * Define consistent border, margin, and padding. 281 | **/ 282 | fieldset 283 | border: 1px solid #c0c0c0 284 | margin: 0 2px 285 | padding: 0.35em 0.625em 0.75em 286 | 287 | /** 288 | * 1. Correct color not being inherited in IE 6/7/8/9. 289 | * 2. Correct text not wrapping in Firefox 3. 290 | * 3. Correct alignment displayed oddly in IE 6/7. 291 | **/ 292 | 293 | legend 294 | border: 0 295 | /** 1 **/ 296 | padding: 0 297 | white-space: normal 298 | /** 2 **/ 299 | margin-left: -7px 300 | /** 3 **/ 301 | 302 | /** 303 | * 1. Correct font size not being inherited in all browsers. 304 | * 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5, 305 | * and Chrome. 306 | * 3. Improve appearance and consistency in all browsers. 307 | 308 | button, input, select, textarea 309 | font-size: 100% 310 | /** 1 **/ 311 | margin: 0 312 | /** 2 **/ 313 | vertical-align: baseline 314 | /** 3 **/ 315 | vertical-align: middle 316 | /** 3 **/ 317 | 318 | /** 319 | * Address Firefox 3+ setting `line-height` on `input` using `!important` in 320 | * the UA stylesheet. 321 | **/ 322 | button, input 323 | line-height: normal 324 | 325 | /** 326 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 327 | * All other form control elements do not inherit `text-transform` values. 328 | * Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+. 329 | * Correct `select` style inheritance in Firefox 4+ and Opera. 330 | **/ 331 | button, select 332 | text-transform: none 333 | 334 | /** 335 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 336 | * and `video` controls. 337 | * 2. Correct inability to style clickable `input` types in iOS. 338 | * 3. Improve usability and consistency of cursor style between image-type 339 | * `input` and others. 340 | * 4. Remove inner spacing in IE 7 without affecting normal text inputs. 341 | * Known issue: inner spacing remains in IE 6. 342 | **/ 343 | button, html input[type="button"] 344 | -webkit-appearance: button 345 | /** 2 **/ 346 | cursor: pointer 347 | /** 3 **/ 348 | overflow: visible 349 | /** 4 **/ 350 | 351 | input 352 | &[type="reset"], &[type="submit"] 353 | -webkit-appearance: button 354 | /** 2 **/ 355 | cursor: pointer 356 | /** 3 **/ 357 | overflow: visible 358 | /** 4 **/ 359 | 360 | /** 361 | * Re-set default cursor for disabled elements. 362 | **/ 363 | button[disabled], html input[disabled] 364 | cursor: default 365 | 366 | /** 367 | * 1. Address box sizing set to content-box in IE 8/9. 368 | * 2. Remove excess padding in IE 8/9. 369 | * 3. Remove excess padding in IE 7. 370 | * Known issue: excess padding remains in IE 6. 371 | **/ 372 | input 373 | &[type="checkbox"], &[type="radio"] 374 | box-sizing: border-box 375 | /** 1 **/ 376 | padding: 0 377 | /** 2 **/ 378 | height: 13px 379 | /** 3 **/ 380 | width: 13px 381 | /** 3 **/ 382 | &[type="search"] 383 | -webkit-appearance: textfield 384 | /** 1 **/ 385 | -moz-box-sizing: content-box 386 | -webkit-box-sizing: content-box 387 | /** 2 **/ 388 | box-sizing: content-box 389 | &::-webkit-search-cancel-button, &::-webkit-search-decoration 390 | -webkit-appearance: none 391 | 392 | /** 393 | * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 394 | * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome 395 | * (include `-moz` to future-proof). 396 | **/ 397 | /** 398 | * Remove inner padding and search cancel button in Safari 5 and Chrome 399 | * on OS X. 400 | **/ 401 | /** 402 | * Remove inner padding and border in Firefox 3+. 403 | **/ 404 | button::-moz-focus-inner, input::-moz-focus-inner 405 | border: 0 406 | padding: 0 407 | 408 | /** 409 | * 1. Remove default vertical scrollbar in IE 6/7/8/9. 410 | * 2. Improve readability and alignment in all browsers. 411 | **/ 412 | textarea 413 | overflow: auto 414 | /** 1 **/ 415 | vertical-align: top 416 | /** 2 **/ 417 | 418 | /** ========================================================================== 419 | * Tables 420 | * ========================================================================== 421 | **/ 422 | /** 423 | * Remove most spacing between table cells. 424 | **/ 425 | table 426 | border-collapse: collapse 427 | border-spacing: 0 428 | -------------------------------------------------------------------------------- /src/default/assets/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/millsp/eledoc/68e136cfa5c8555d07864875b140e21080c580cb/src/default/assets/images/icons.png -------------------------------------------------------------------------------- /src/default/assets/images/icons.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/millsp/eledoc/68e136cfa5c8555d07864875b140e21080c580cb/src/default/assets/images/icons.psd -------------------------------------------------------------------------------- /src/default/assets/images/icons@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/millsp/eledoc/68e136cfa5c8555d07864875b140e21080c580cb/src/default/assets/images/icons@2x.png -------------------------------------------------------------------------------- /src/default/assets/images/icons@2x.png0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/millsp/eledoc/68e136cfa5c8555d07864875b140e21080c580cb/src/default/assets/images/icons@2x.png0 -------------------------------------------------------------------------------- /src/default/assets/images/widgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/millsp/eledoc/68e136cfa5c8555d07864875b140e21080c580cb/src/default/assets/images/widgets.png -------------------------------------------------------------------------------- /src/default/assets/images/widgets.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/millsp/eledoc/68e136cfa5c8555d07864875b140e21080c580cb/src/default/assets/images/widgets.psd -------------------------------------------------------------------------------- /src/default/assets/images/widgets@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/millsp/eledoc/68e136cfa5c8555d07864875b140e21080c580cb/src/default/assets/images/widgets@2x.png -------------------------------------------------------------------------------- /src/default/assets/js/lib/lunr.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.5.3 3 | * Copyright (C) 2014 Oliver Nightingale 4 | * MIT Licensed 5 | * @license 6 | */ 7 | !function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.5.3",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(t){if(!arguments.length||null==t||void 0==t)return[];if(Array.isArray(t))return t.map(function(t){return t.toLowerCase()});for(var e=t.toString().replace(/^\s+/,""),n=e.length-1;n>=0;n--)if(/\S/.test(e.charAt(n))){e=e.substring(0,n+1);break}return e.split(/\s+/).map(function(t){return t.toLowerCase()})},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e)+1;this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,o=0;n>o;o++){for(var r=t[o],s=0;i>s&&(r=this._stack[s](r,o,t),void 0!==r);s++);void 0!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;for(var o=i,r=i.next;void 0!=r;){if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(t){~this.indexOf(t)||this.elements.splice(this.locationFor(t),0,t)},this),this.length=this.elements.length},t.SortedSet.prototype.toArray=function(){return this.elements.slice()},t.SortedSet.prototype.map=function(t,e){return this.elements.map(t,e)},t.SortedSet.prototype.forEach=function(t,e){return this.elements.forEach(t,e)},t.SortedSet.prototype.indexOf=function(t,e,n){var e=e||0,n=n||this.elements.length,i=n-e,o=e+Math.floor(i/2),r=this.elements[o];return 1>=i?r===t?o:-1:t>r?this.indexOf(t,o,n):r>t?this.indexOf(t,e,o):r===t?o:void 0},t.SortedSet.prototype.locationFor=function(t,e,n){var e=e||0,n=n||this.elements.length,i=n-e,o=e+Math.floor(i/2),r=this.elements[o];if(1>=i){if(r>t)return o;if(t>r)return o+1}return t>r?this.locationFor(t,o,n):r>t?this.locationFor(t,e,o):void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,o=0,r=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>r-1||o>s-1)break;a[i]!==h[o]?a[i]h[o]&&o++:(n.add(a[i]),i++,o++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;return this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone(),i.add.apply(i,n.toArray()),i},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var i={},o=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));i[n.name]=r,t.SortedSet.prototype.add.apply(o,r)},this),this.documentStore.set(r,o),t.SortedSet.prototype.add.apply(this.corpusTokens,o.toArray());for(var s=0;s0&&(i=1+Math.log(this.tokenStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),i=new t.Vector,o=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,h=this,l=this.tokenStore.expand(e).reduce(function(n,o){var r=h.corpusTokens.indexOf(o),s=h.idf(o),l=1,u=new t.SortedSet;if(o!==e){var c=Math.max(3,o.length-e.length);l=1/Math.log(c)}return r>-1&&i.insert(r,a*s*l),Object.keys(h.tokenStore.get(o)).forEach(function(t){u.add(t)}),n.union(u)},new t.SortedSet);o.push(l)},this);var a=o.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,o=new t.Vector,r=0;i>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);o.insert(this.corpusTokens.indexOf(s),a*h)}return o},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.store[t]=e,this.length=Object.keys(this.store).length},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,a="^("+o+")?"+r+o+"("+r+")?$",h="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i;return function(n){var r,u,c,p,f,d,v;if(n.length<3)return n;if(c=n.substr(0,1),"y"==c&&(n=c.toUpperCase()+n.substr(1)),p=/^(.+?)(ss|i)es$/,f=/^(.+?)([^s])s$/,p.test(n)?n=n.replace(p,"$1$2"):f.test(n)&&(n=n.replace(f,"$1$2")),p=/^(.+?)eed$/,f=/^(.+?)(ed|ing)$/,p.test(n)){var m=p.exec(n);p=new RegExp(s),p.test(m[1])&&(p=/.$/,n=n.replace(p,""))}else if(f.test(n)){var m=f.exec(n);r=m[1],f=new RegExp(l),f.test(r)&&(n=r,f=/(at|bl|iz)$/,d=new RegExp("([^aeiouylsz])\\1$"),v=new RegExp("^"+o+i+"[^aeiouwxy]$"),f.test(n)?n+="e":d.test(n)?(p=/.$/,n=n.replace(p,"")):v.test(n)&&(n+="e"))}if(p=/^(.+?[^aeiou])y$/,p.test(n)){var m=p.exec(n);r=m[1],n=r+"i"}if(p=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,p.test(n)){var m=p.exec(n);r=m[1],u=m[2],p=new RegExp(s),p.test(r)&&(n=r+t[u])}if(p=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,p.test(n)){var m=p.exec(n);r=m[1],u=m[2],p=new RegExp(s),p.test(r)&&(n=r+e[u])}if(p=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,f=/^(.+?)(s|t)(ion)$/,p.test(n)){var m=p.exec(n);r=m[1],p=new RegExp(h),p.test(r)&&(n=r)}else if(f.test(n)){var m=f.exec(n);r=m[1]+m[2],f=new RegExp(h),f.test(r)&&(n=r)}if(p=/^(.+?)e$/,p.test(n)){var m=p.exec(n);r=m[1],p=new RegExp(h),f=new RegExp(a),d=new RegExp("^"+o+i+"[^aeiouwxy]$"),(p.test(r)||f.test(r)&&!d.test(r))&&(n=r)}return p=/ll$/,f=new RegExp(h),p.test(n)&&f.test(n)&&(p=/.$/,n=n.replace(p,"")),"y"==c&&(n=c.toLowerCase()+n.substr(1)),n}}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return-1===t.stopWordFilter.stopWords.indexOf(e)?e:void 0},t.stopWordFilter.stopWords=new t.SortedSet,t.stopWordFilter.stopWords.length=119,t.stopWordFilter.stopWords.elements=["","a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"],t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t[0],o=t.slice(1);return i in n||(n[i]={docs:{}}),0===o.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(o,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;nu;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a=j.keys(n),u=0,i=a.length;i>u;u++)if(t.call(e,n[a[u]],a[u],n)===r)return;return n};j.map=j.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e.push(t.call(r,n,u,i))}),e)};var O="Reduce of empty array with no initial value";j.reduce=j.foldl=j.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=j.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},j.reduceRight=j.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=j.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=j.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},j.find=j.detect=function(n,t,r){var e;return k(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},j.filter=j.select=function(n,t,r){var e=[];return null==n?e:g&&n.filter===g?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&e.push(n)}),e)},j.reject=function(n,t,r){return j.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},j.every=j.all=function(n,t,e){t||(t=j.identity);var u=!0;return null==n?u:d&&n.every===d?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var k=j.some=j.any=function(n,t,e){t||(t=j.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};j.contains=j.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:k(n,function(n){return n===t})},j.invoke=function(n,t){var r=o.call(arguments,2),e=j.isFunction(t);return j.map(n,function(n){return(e?t:n[t]).apply(n,r)})},j.pluck=function(n,t){return j.map(n,j.property(t))},j.where=function(n,t){return j.filter(n,j.matches(t))},j.findWhere=function(n,t){return j.find(n,j.matches(t))},j.max=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.max.apply(Math,n);var e=-1/0,u=-1/0;return A(n,function(n,i,a){var o=t?t.call(r,n,i,a):n;o>u&&(e=n,u=o)}),e},j.min=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.min.apply(Math,n);var e=1/0,u=1/0;return A(n,function(n,i,a){var o=t?t.call(r,n,i,a):n;u>o&&(e=n,u=o)}),e},j.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=j.random(r++),e[r-1]=e[t],e[t]=n}),e},j.sample=function(n,t,r){return null==t||r?(n.length!==+n.length&&(n=j.values(n)),n[j.random(n.length-1)]):j.shuffle(n).slice(0,Math.max(0,t))};var E=function(n){return null==n?j.identity:j.isFunction(n)?n:j.property(n)};j.sortBy=function(n,t,r){return t=E(t),j.pluck(j.map(n,function(n,e,u){return{value:n,index:e,criteria:t.call(r,n,e,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var F=function(n){return function(t,r,e){var u={};return r=E(r),A(t,function(i,a){var o=r.call(e,i,a,t);n(u,o,i)}),u}};j.groupBy=F(function(n,t,r){j.has(n,t)?n[t].push(r):n[t]=[r]}),j.indexBy=F(function(n,t,r){n[t]=r}),j.countBy=F(function(n,t){j.has(n,t)?n[t]++:n[t]=1}),j.sortedIndex=function(n,t,r,e){r=E(r);for(var u=r.call(e,t),i=0,a=n.length;a>i;){var o=i+a>>>1;r.call(e,n[o])t?[]:o.call(n,0,t)},j.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},j.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},j.rest=j.tail=j.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},j.compact=function(n){return j.filter(n,j.identity)};var M=function(n,t,r){return t&&j.every(n,j.isArray)?c.apply(r,n):(A(n,function(n){j.isArray(n)||j.isArguments(n)?t?a.apply(r,n):M(n,t,r):r.push(n)}),r)};j.flatten=function(n,t){return M(n,t,[])},j.without=function(n){return j.difference(n,o.call(arguments,1))},j.partition=function(n,t){var r=[],e=[];return A(n,function(n){(t(n)?r:e).push(n)}),[r,e]},j.uniq=j.unique=function(n,t,r,e){j.isFunction(t)&&(e=r,r=t,t=!1);var u=r?j.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:j.contains(a,r))||(a.push(r),i.push(n[e]))}),i},j.union=function(){return j.uniq(j.flatten(arguments,!0))},j.intersection=function(n){var t=o.call(arguments,1);return j.filter(j.uniq(n),function(n){return j.every(t,function(t){return j.contains(t,n)})})},j.difference=function(n){var t=c.apply(e,o.call(arguments,1));return j.filter(n,function(n){return!j.contains(t,n)})},j.zip=function(){for(var n=j.max(j.pluck(arguments,"length").concat(0)),t=new Array(n),r=0;n>r;r++)t[r]=j.pluck(arguments,""+r);return t},j.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},j.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=j.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},j.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},j.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=new Array(e);e>u;)i[u++]=n,n+=r;return i};var R=function(){};j.bind=function(n,t){var r,e;if(_&&n.bind===_)return _.apply(n,o.call(arguments,1));if(!j.isFunction(n))throw new TypeError;return r=o.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(o.call(arguments)));R.prototype=n.prototype;var u=new R;R.prototype=null;var i=n.apply(u,r.concat(o.call(arguments)));return Object(i)===i?i:u}},j.partial=function(n){var t=o.call(arguments,1);return function(){for(var r=0,e=t.slice(),u=0,i=e.length;i>u;u++)e[u]===j&&(e[u]=arguments[r++]);for(;r=f?(clearTimeout(a),a=null,o=l,i=n.apply(e,u),e=u=null):a||r.trailing===!1||(a=setTimeout(c,f)),i}},j.debounce=function(n,t,r){var e,u,i,a,o,c=function(){var l=j.now()-a;t>l?e=setTimeout(c,t-l):(e=null,r||(o=n.apply(i,u),i=u=null))};return function(){i=this,u=arguments,a=j.now();var l=r&&!e;return e||(e=setTimeout(c,t)),l&&(o=n.apply(i,u),i=u=null),o}},j.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},j.wrap=function(n,t){return j.partial(t,n)},j.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},j.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},j.keys=function(n){if(!j.isObject(n))return[];if(w)return w(n);var t=[];for(var r in n)j.has(n,r)&&t.push(r);return t},j.values=function(n){for(var t=j.keys(n),r=t.length,e=new Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},j.pairs=function(n){for(var t=j.keys(n),r=t.length,e=new Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},j.invert=function(n){for(var t={},r=j.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},j.functions=j.methods=function(n){var t=[];for(var r in n)j.isFunction(n[r])&&t.push(r);return t.sort()},j.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},j.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},j.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)j.contains(r,u)||(t[u]=n[u]);return t},j.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]===void 0&&(n[r]=t[r])}),n},j.clone=function(n){return j.isObject(n)?j.isArray(n)?n.slice():j.extend({},n):n},j.tap=function(n,t){return t(n),n};var S=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof j&&(n=n._wrapped),t instanceof j&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==String(t);case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;var a=n.constructor,o=t.constructor;if(a!==o&&!(j.isFunction(a)&&a instanceof a&&j.isFunction(o)&&o instanceof o)&&"constructor"in n&&"constructor"in t)return!1;r.push(n),e.push(t);var c=0,f=!0;if("[object Array]"==u){if(c=n.length,f=c==t.length)for(;c--&&(f=S(n[c],t[c],r,e)););}else{for(var s in n)if(j.has(n,s)&&(c++,!(f=j.has(t,s)&&S(n[s],t[s],r,e))))break;if(f){for(s in t)if(j.has(t,s)&&!c--)break;f=!c}}return r.pop(),e.pop(),f};j.isEqual=function(n,t){return S(n,t,[],[])},j.isEmpty=function(n){if(null==n)return!0;if(j.isArray(n)||j.isString(n))return 0===n.length;for(var t in n)if(j.has(n,t))return!1;return!0},j.isElement=function(n){return!(!n||1!==n.nodeType)},j.isArray=x||function(n){return"[object Array]"==l.call(n)},j.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){j["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),j.isArguments(arguments)||(j.isArguments=function(n){return!(!n||!j.has(n,"callee"))}),"function"!=typeof/./&&(j.isFunction=function(n){return"function"==typeof n}),j.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},j.isNaN=function(n){return j.isNumber(n)&&n!=+n},j.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},j.isNull=function(n){return null===n},j.isUndefined=function(n){return n===void 0},j.has=function(n,t){return f.call(n,t)},j.noConflict=function(){return n._=t,this},j.identity=function(n){return n},j.constant=function(n){return function(){return n}},j.property=function(n){return function(t){return t[n]}},j.matches=function(n){return function(t){if(t===n)return!0;for(var r in n)if(n[r]!==t[r])return!1;return!0}},j.times=function(n,t,r){for(var e=Array(Math.max(0,n)),u=0;n>u;u++)e[u]=t.call(r,u);return e},j.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},j.now=Date.now||function(){return(new Date).getTime()};var T={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};T.unescape=j.invert(T.escape);var I={escape:new RegExp("["+j.keys(T.escape).join("")+"]","g"),unescape:new RegExp("("+j.keys(T.unescape).join("|")+")","g")};j.each(["escape","unescape"],function(n){j[n]=function(t){return null==t?"":(""+t).replace(I[n],function(t){return T[n][t]})}}),j.result=function(n,t){if(null==n)return void 0;var r=n[t];return j.isFunction(r)?r.call(n):r},j.mixin=function(n){A(j.functions(n),function(t){var r=j[t]=n[t];j.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),z.call(this,r.apply(j,n))}})};var N=0;j.uniqueId=function(n){var t=++N+"";return n?n+t:t},j.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var q=/(.)^/,B={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\t|\u2028|\u2029/g;j.template=function(n,t,r){var e;r=j.defaults({},r,j.templateSettings);var u=new RegExp([(r.escape||q).source,(r.interpolate||q).source,(r.evaluate||q).source].join("|")+"|$","g"),i=0,a="__p+='";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(D,function(n){return"\\"+B[n]}),r&&(a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(a+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),u&&(a+="';\n"+u+"\n__p+='"),i=o+t.length,t}),a+="';\n",r.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{e=new Function(r.variable||"obj","_",a)}catch(o){throw o.source=a,o}if(t)return e(t,j);var c=function(n){return e.call(this,n,j)};return c.source="function("+(r.variable||"obj")+"){\n"+a+"}",c},j.chain=function(n){return j(n).chain()};var z=function(n){return this._chain?j(n).chain():n};j.mixin(j),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];j.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],z.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];j.prototype[n]=function(){return z.call(this,t.apply(this._wrapped,arguments))}}),j.extend(j.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return j})}).call(this); 6 | //# sourceMappingURL=underscore-min.map -------------------------------------------------------------------------------- /src/default/assets/js/src/lib/backbone/backbone.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for Backbone 1.0.0 2 | // Project: http://backbonejs.org/ 3 | // Definitions by: Boris Yankov , Natan Vivo 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | /// 8 | 9 | declare module Backbone { 10 | 11 | interface AddOptions extends Silenceable { 12 | at?: number; 13 | } 14 | 15 | interface HistoryOptions extends Silenceable { 16 | pushState?: boolean; 17 | root?: string; 18 | } 19 | 20 | interface NavigateOptions { 21 | trigger?: boolean; 22 | } 23 | 24 | interface RouterOptions { 25 | routes: any; 26 | } 27 | 28 | interface Silenceable { 29 | silent?: boolean; 30 | } 31 | 32 | interface Validable { 33 | validate?: boolean; 34 | } 35 | 36 | interface Waitable { 37 | wait?: boolean; 38 | } 39 | 40 | interface Parseable { 41 | parse?: any; 42 | } 43 | 44 | interface PersistenceOptions { 45 | url?: string; 46 | beforeSend?: (jqxhr: JQueryXHR) => void; 47 | success?: (modelOrCollection?: any, response?: any, options?: any) => void; 48 | error?: (modelOrCollection?: any, jqxhr?: JQueryXHR, options?: any) => void; 49 | } 50 | 51 | interface ModelSetOptions extends Silenceable, Validable { 52 | } 53 | 54 | interface ModelFetchOptions extends PersistenceOptions, ModelSetOptions, Parseable { 55 | } 56 | 57 | interface ModelSaveOptions extends Silenceable, Waitable, Validable, Parseable, PersistenceOptions { 58 | patch?: boolean; 59 | } 60 | 61 | interface ModelDestroyOptions extends Waitable, PersistenceOptions { 62 | } 63 | 64 | interface CollectionFetchOptions extends PersistenceOptions, Parseable { 65 | reset?: boolean; 66 | } 67 | 68 | class Events { 69 | on(eventName: string, callback?: Function, context?: any): any; 70 | off(eventName?: string, callback?: Function, context?: any): any; 71 | trigger(eventName: string, ...args: any[]): any; 72 | bind(eventName: string, callback: Function, context?: any): any; 73 | unbind(eventName?: string, callback?: Function, context?: any): any; 74 | 75 | once(events: string, callback: Function, context?: any): any; 76 | listenTo(object: any, events: string, callback: Function): any; 77 | listenToOnce(object: any, events: string, callback: Function): any; 78 | stopListening(object?: any, events?: string, callback?: Function): any; 79 | } 80 | 81 | class ModelBase extends Events { 82 | url: any; 83 | parse(response: any, options?: any): any; 84 | toJSON(options?: any): any; 85 | sync(...arg: any[]): JQueryXHR; 86 | } 87 | 88 | class Model extends ModelBase { 89 | 90 | /** 91 | * Do not use, prefer TypeScript's extend functionality. 92 | **/ 93 | private static extend(properties: any, classProperties?: any): any; 94 | 95 | attributes: any; 96 | changed: any[]; 97 | cid: string; 98 | collection: Collection; 99 | 100 | /** 101 | * Default attributes for the model. It can be an object hash or a method returning an object hash. 102 | * For assigning an object hash, do it like this: this.defaults = { attribute: value, ... }; 103 | * That works only if you set it in the constructor or the initialize method. 104 | **/ 105 | defaults(): any; 106 | id: any; 107 | idAttribute: string; 108 | validationError: any; 109 | urlRoot: any; 110 | 111 | constructor(attributes?: any, options?: any); 112 | initialize(attributes?: any): void; 113 | 114 | fetch(options?: ModelFetchOptions): JQueryXHR; 115 | 116 | /** 117 | * For strongly-typed access to attributes, use the `get` method only privately in public getter properties. 118 | * @example 119 | * get name(): string { 120 | * return super.get("name"); 121 | * } 122 | **/ 123 | /*private*/ get(attributeName: string): any; 124 | 125 | /** 126 | * For strongly-typed assignment of attributes, use the `set` method only privately in public setter properties. 127 | * @example 128 | * set name(value: string) { 129 | * super.set("name", value); 130 | * } 131 | **/ 132 | /*private*/ set(attributeName: string, value: any, options?: ModelSetOptions): Model; 133 | set(obj: any, options?: ModelSetOptions): Model; 134 | 135 | change(): any; 136 | changedAttributes(attributes?: any): any[]; 137 | clear(options?: Silenceable): any; 138 | clone(): Model; 139 | destroy(options?: ModelDestroyOptions): any; 140 | escape(attribute: string): string; 141 | has(attribute: string): boolean; 142 | hasChanged(attribute?: string): boolean; 143 | isNew(): boolean; 144 | isValid(options?:any): boolean; 145 | previous(attribute: string): any; 146 | previousAttributes(): any[]; 147 | save(attributes?: any, options?: ModelSaveOptions): any; 148 | unset(attribute: string, options?: Silenceable): Model; 149 | validate(attributes: any, options?: any): any; 150 | 151 | private _validate(attrs: any, options: any): boolean; 152 | 153 | // mixins from underscore 154 | 155 | keys(): string[]; 156 | values(): any[]; 157 | pairs(): any[]; 158 | invert(): any; 159 | pick(keys: string[]): any; 160 | pick(...keys: string[]): any; 161 | omit(keys: string[]): any; 162 | omit(...keys: string[]): any; 163 | } 164 | 165 | class Collection extends ModelBase { 166 | 167 | /** 168 | * Do not use, prefer TypeScript's extend functionality. 169 | **/ 170 | private static extend(properties: any, classProperties?: any): any; 171 | 172 | // TODO: this really has to be typeof TModel 173 | //model: typeof TModel; 174 | model: { new(): TModel; }; // workaround 175 | models: TModel[]; 176 | length: number; 177 | 178 | constructor(models?: TModel[], options?: any); 179 | 180 | fetch(options?: CollectionFetchOptions): JQueryXHR; 181 | 182 | comparator(element: TModel): number; 183 | comparator(compare: TModel, to?: TModel): number; 184 | 185 | add(model: TModel, options?: AddOptions): Collection; 186 | add(models: TModel[], options?: AddOptions): Collection; 187 | at(index: number): TModel; 188 | /** 189 | * Get a model from a collection, specified by an id, a cid, or by passing in a model. 190 | **/ 191 | get(id: number): TModel; 192 | get(id: string): TModel; 193 | get(id: Model): TModel; 194 | create(attributes: any, options?: ModelSaveOptions): TModel; 195 | pluck(attribute: string): any[]; 196 | push(model: TModel, options?: AddOptions): TModel; 197 | pop(options?: Silenceable): TModel; 198 | remove(model: TModel, options?: Silenceable): TModel; 199 | remove(models: TModel[], options?: Silenceable): TModel[]; 200 | reset(models?: TModel[], options?: Silenceable): TModel[]; 201 | set(models?: TModel[], options?: Silenceable): TModel[]; 202 | shift(options?: Silenceable): TModel; 203 | sort(options?: Silenceable): Collection; 204 | unshift(model: TModel, options?: AddOptions): TModel; 205 | where(properies: any): TModel[]; 206 | findWhere(properties: any): TModel; 207 | 208 | private _prepareModel(attrs?: any, options?: any): any; 209 | private _removeReference(model: TModel): void; 210 | private _onModelEvent(event: string, model: TModel, collection: Collection, options: any): void; 211 | 212 | // mixins from underscore 213 | 214 | all(iterator: (element: TModel, index: number) => boolean, context?: any): boolean; 215 | any(iterator: (element: TModel, index: number) => boolean, context?: any): boolean; 216 | collect(iterator: (element: TModel, index: number, context?: any) => any[], context?: any): any[]; 217 | chain(): any; 218 | compact(): TModel[]; 219 | contains(value: any): boolean; 220 | countBy(iterator: (element: TModel, index: number) => any): _.Dictionary; 221 | countBy(attribute: string): _.Dictionary; 222 | detect(iterator: (item: any) => boolean, context?: any): any; // ??? 223 | difference(...model: TModel[]): TModel[]; 224 | drop(): TModel; 225 | drop(n: number): TModel[]; 226 | each(iterator: (element: TModel, index: number, list?: any) => void, context?: any): any; 227 | every(iterator: (element: TModel, index: number) => boolean, context?: any): boolean; 228 | filter(iterator: (element: TModel, index: number) => boolean, context?: any): TModel[]; 229 | find(iterator: (element: TModel, index: number) => boolean, context?: any): TModel; 230 | first(): TModel; 231 | first(n: number): TModel[]; 232 | flatten(shallow?: boolean): TModel[]; 233 | foldl(iterator: (memo: any, element: TModel, index: number) => any, initialMemo: any, context?: any): any; 234 | forEach(iterator: (element: TModel, index: number, list?: any) => void, context?: any): any; 235 | groupBy(iterator: (element: TModel, index: number) => string, context?: any): _.Dictionary; 236 | groupBy(attribute: string, context?: any): _.Dictionary; 237 | include(value: any): boolean; 238 | indexOf(element: TModel, isSorted?: boolean): number; 239 | initial(): TModel; 240 | initial(n: number): TModel[]; 241 | inject(iterator: (memo: any, element: TModel, index: number) => any, initialMemo: any, context?: any): any; 242 | intersection(...model: TModel[]): TModel[]; 243 | isEmpty(object: any): boolean; 244 | invoke(methodName: string, args?: any[]): any; 245 | last(): TModel; 246 | last(n: number): TModel[]; 247 | lastIndexOf(element: TModel, fromIndex?: number): number; 248 | map(iterator: (element: TModel, index: number, context?: any) => any[], context?: any): any[]; 249 | max(iterator?: (element: TModel, index: number) => any, context?: any): TModel; 250 | min(iterator?: (element: TModel, index: number) => any, context?: any): TModel; 251 | object(...values: any[]): any[]; 252 | reduce(iterator: (memo: any, element: TModel, index: number) => any, initialMemo: any, context?: any): any; 253 | select(iterator: any, context?: any): any[]; 254 | size(): number; 255 | shuffle(): any[]; 256 | some(iterator: (element: TModel, index: number) => boolean, context?: any): boolean; 257 | sortBy(iterator: (element: TModel, index: number) => number, context?: any): TModel[]; 258 | sortBy(attribute: string, context?: any): TModel[]; 259 | sortedIndex(element: TModel, iterator?: (element: TModel, index: number) => number): number; 260 | range(stop: number, step?: number): any; 261 | range(start: number, stop: number, step?: number): any; 262 | reduceRight(iterator: (memo: any, element: TModel, index: number) => any, initialMemo: any, context?: any): any[]; 263 | reject(iterator: (element: TModel, index: number) => boolean, context?: any): TModel[]; 264 | rest(): TModel; 265 | rest(n: number): TModel[]; 266 | tail(): TModel; 267 | tail(n: number): TModel[]; 268 | toArray(): any[]; 269 | union(...model: TModel[]): TModel[]; 270 | uniq(isSorted?: boolean, iterator?: (element: TModel, index: number) => boolean): TModel[]; 271 | without(...values: any[]): TModel[]; 272 | zip(...model: TModel[]): TModel[]; 273 | } 274 | 275 | class Router extends Events { 276 | 277 | /** 278 | * Do not use, prefer TypeScript's extend functionality. 279 | **/ 280 | private static extend(properties: any, classProperties?: any): any; 281 | 282 | /** 283 | * Routes hash or a method returning the routes hash that maps URLs with parameters to methods on your Router. 284 | * For assigning routes as object hash, do it like this: this.routes = { "route": callback, ... }; 285 | * That works only if you set it in the constructor or the initialize method. 286 | **/ 287 | routes(): any; 288 | 289 | constructor(options?: RouterOptions); 290 | initialize(options?: RouterOptions): void; 291 | route(route: string, name: string, callback?: Function): Router; 292 | navigate(fragment: string, options?: NavigateOptions): Router; 293 | navigate(fragment: string, trigger?: boolean): Router; 294 | 295 | private _bindRoutes(): void; 296 | private _routeToRegExp(route: string): RegExp; 297 | private _extractParameters(route: RegExp, fragment: string): string[]; 298 | } 299 | 300 | var history: History; 301 | 302 | class History extends Events { 303 | 304 | handlers: any[]; 305 | interval: number; 306 | 307 | start(options?: HistoryOptions): boolean; 308 | 309 | getHash(window?: Window): string; 310 | getFragment(fragment?: string, forcePushState?: boolean): string; 311 | stop(): void; 312 | route(route: string, callback: Function): number; 313 | checkUrl(e?: any): void; 314 | loadUrl(fragmentOverride: string): boolean; 315 | navigate(fragment: string, options?: any): boolean; 316 | started: boolean; 317 | options: any; 318 | 319 | private _updateHash(location: Location, fragment: string, replace: boolean): void; 320 | } 321 | 322 | interface ViewOptions { 323 | model?: TModel; 324 | collection?: Backbone.Collection; 325 | el?: any; 326 | id?: string; 327 | className?: string; 328 | tagName?: string; 329 | attributes?: any[]; 330 | } 331 | 332 | class View extends Events { 333 | 334 | /** 335 | * Do not use, prefer TypeScript's extend functionality. 336 | **/ 337 | private static extend(properties: any, classProperties?: any): any; 338 | 339 | constructor(options?: ViewOptions); 340 | 341 | /** 342 | * Events hash or a method returning the events hash that maps events/selectors to methods on your View. 343 | * For assigning events as object hash, do it like this: this.events = { "event:selector": callback, ... }; 344 | * That works only if you set it in the constructor or the initialize method. 345 | **/ 346 | events(): any; 347 | 348 | $(selector: string): JQuery; 349 | model: TModel; 350 | collection: Collection; 351 | //template: (json, options?) => string; 352 | make(tagName: string, attrs?: any, opts?: any): View; 353 | setElement(element: HTMLElement, delegate?: boolean): View; 354 | setElement(element: JQuery, delegate?: boolean): View; 355 | id: string; 356 | cid: string; 357 | className: string; 358 | tagName: string; 359 | 360 | el: any; 361 | $el: JQuery; 362 | setElement(element: any): View; 363 | attributes: any; 364 | $(selector: any): JQuery; 365 | render(): View; 366 | remove(): View; 367 | make(tagName: any, attributes?: any, content?: any): any; 368 | delegateEvents(events?: any): any; 369 | undelegateEvents(): any; 370 | 371 | _ensureElement(): void; 372 | } 373 | 374 | // SYNC 375 | function sync(method: string, model: Model, options?: JQueryAjaxSettings): any; 376 | function ajax(options?: JQueryAjaxSettings): JQueryXHR; 377 | var emulateHTTP: boolean; 378 | var emulateJSON: boolean; 379 | 380 | // Utility 381 | function noConflict(): typeof Backbone; 382 | var $: JQueryStatic; 383 | } 384 | 385 | declare module "backbone" { 386 | export = Backbone; 387 | } 388 | -------------------------------------------------------------------------------- /src/default/assets/js/src/lib/tsd.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// -------------------------------------------------------------------------------- /src/default/assets/js/src/lib/tsd.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "v4", 3 | "repo": "borisyankov/DefinitelyTyped", 4 | "ref": "master", 5 | "path": "./", 6 | "bundle": "./tsd.d.ts", 7 | "installed": { 8 | "jquery/jquery.d.ts": { 9 | "commit": "d4b55bafc0c9c4a2338cb427a4eeaf6023f12a24" 10 | }, 11 | "lunr/lunr.d.ts": { 12 | "commit": "f64ae50d573dae7500236a3deaee402f3376a871" 13 | }, 14 | "backbone/backbone.d.ts": { 15 | "commit": "d4b55bafc0c9c4a2338cb427a4eeaf6023f12a24" 16 | }, 17 | "underscore/underscore.d.ts": { 18 | "commit": "d4b55bafc0c9c4a2338cb427a4eeaf6023f12a24" 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/default/assets/js/src/typedoc/Application.ts: -------------------------------------------------------------------------------- 1 | declare module typedoc 2 | { 3 | class Events extends Backbone.Events { } 4 | } 5 | 6 | module typedoc 7 | { 8 | export var $html = $('html'); 9 | 10 | 11 | /** 12 | * Service definition. 13 | */ 14 | export interface IService 15 | { 16 | constructor:any; 17 | name:string; 18 | instance:any; 19 | priority:number; 20 | } 21 | 22 | 23 | /** 24 | * Component definition. 25 | */ 26 | export interface IComponent 27 | { 28 | constructor:any; 29 | selector:string; 30 | priority:number; 31 | namespace:string; 32 | } 33 | 34 | 35 | /** 36 | * List of all known services. 37 | */ 38 | var services:IService[] = []; 39 | 40 | /** 41 | * List of all known components. 42 | */ 43 | var components:IComponent[] = []; 44 | 45 | /** 46 | * jQuery instance of the document. 47 | */ 48 | export var $document = $(document); 49 | 50 | /** 51 | * jQuery instance of the window. 52 | */ 53 | export var $window = $(window); 54 | 55 | /** 56 | * jQuery instance of the window. 57 | */ 58 | export var $body = $('body'); 59 | 60 | 61 | /** 62 | * Register a new component. 63 | */ 64 | export function registerService(constructor:any, name:string, priority:number = 0) { 65 | services.push({ 66 | constructor: constructor, 67 | name: name, 68 | priority: priority, 69 | instance: null 70 | }); 71 | 72 | services.sort((a:IService, b:IService) => a.priority - b.priority); 73 | } 74 | 75 | 76 | /** 77 | * Register a new component. 78 | */ 79 | export function registerComponent(constructor:any, selector:string, priority:number = 0, namespace:string = '*') 80 | { 81 | components.push({ 82 | selector: selector, 83 | constructor: constructor, 84 | priority: priority, 85 | namespace: namespace 86 | }); 87 | 88 | components.sort((a:IComponent, b:IComponent) => a.priority - b.priority); 89 | } 90 | 91 | 92 | /** 93 | * Copy Backbone.Events to TypeScript class. 94 | */ 95 | if (typeof Backbone != 'undefined') { 96 | typedoc['Events'] = (function() { 97 | var res = function() {}; 98 | _.extend(res.prototype, Backbone.Events); 99 | return res; 100 | })(); 101 | } 102 | 103 | 104 | /** 105 | * TypeDoc application class. 106 | */ 107 | export class Application extends Events 108 | { 109 | /** 110 | * Create a new Application instance. 111 | */ 112 | constructor() { 113 | super(); 114 | 115 | this.createServices(); 116 | this.createComponents($body); 117 | } 118 | 119 | 120 | /** 121 | * Create all services. 122 | */ 123 | private createServices() { 124 | _(services).forEach((c) => { 125 | c.instance = new c.constructor(); 126 | typedoc[c.name] = c.instance; 127 | }); 128 | } 129 | 130 | 131 | /** 132 | * Create all components beneath the given jQuery element. 133 | */ 134 | public createComponents($context:JQuery, namespace:string = 'default'):Backbone.View[] { 135 | var result = []; 136 | _(components).forEach((c) => { 137 | if (c.namespace != namespace && c.namespace != '*') { 138 | return; 139 | } 140 | 141 | $context.find(c.selector).each((m:number, el:HTMLElement) => { 142 | var $el = $(el), instance; 143 | if (instance = $el.data('component')) { 144 | if (_(result).indexOf(instance) == -1) { 145 | result.push(instance); 146 | } 147 | } else { 148 | instance = new c.constructor({el:el}); 149 | $el.data('component', instance); 150 | result.push(instance); 151 | } 152 | }); 153 | }); 154 | 155 | return result; 156 | } 157 | } 158 | } -------------------------------------------------------------------------------- /src/default/assets/js/src/typedoc/components/Filter.ts: -------------------------------------------------------------------------------- 1 | module typedoc 2 | { 3 | class FilterItem 4 | { 5 | protected key:string; 6 | 7 | protected value:T; 8 | 9 | protected defaultValue:T; 10 | 11 | 12 | constructor(key:string, value:T) { 13 | this.key = key; 14 | this.value = value; 15 | this.defaultValue = value; 16 | 17 | this.initialize(); 18 | 19 | if (window.localStorage[this.key]) { 20 | this.setValue(this.fromLocalStorage(window.localStorage[this.key])); 21 | } 22 | } 23 | 24 | 25 | protected initialize() {} 26 | 27 | 28 | protected handleValueChange(oldValue:T, newValue:T) {} 29 | 30 | 31 | protected fromLocalStorage(value:string):T { 32 | return value; 33 | } 34 | 35 | 36 | protected toLocalStorage(value:T):string { 37 | return value; 38 | } 39 | 40 | 41 | protected setValue(value:T) { 42 | if (this.value == value) return; 43 | 44 | var oldValue = this.value; 45 | this.value = value; 46 | window.localStorage[this.key] = this.toLocalStorage(value); 47 | 48 | this.handleValueChange(oldValue, value); 49 | } 50 | } 51 | 52 | 53 | class FilterItemCheckbox extends FilterItem 54 | { 55 | private $checkbox:JQuery; 56 | 57 | 58 | protected initialize() { 59 | this.$checkbox = $('#tsd-filter-' + this.key); 60 | this.$checkbox.on('change', () => { 61 | this.setValue(this.$checkbox.prop('checked')); 62 | }); 63 | } 64 | 65 | 66 | protected handleValueChange(oldValue:boolean, newValue:boolean) { 67 | this.$checkbox.prop('checked', this.value); 68 | $html.toggleClass('toggle-' + this.key, this.value != this.defaultValue); 69 | } 70 | 71 | 72 | protected fromLocalStorage(value:string):boolean { 73 | return value == 'true'; 74 | } 75 | 76 | 77 | protected toLocalStorage(value:boolean):string { 78 | return value ? 'true' : 'false'; 79 | } 80 | } 81 | 82 | 83 | class FilterItemSelect extends FilterItem 84 | { 85 | private $select:JQuery; 86 | 87 | 88 | protected initialize() { 89 | $html.addClass('toggle-' + this.key + this.value); 90 | 91 | this.$select = $('#tsd-filter-' + this.key); 92 | this.$select.on(pointerDown + ' mouseover', () => { 93 | this.$select.addClass('active'); 94 | }).on('mouseleave', () => { 95 | this.$select.removeClass('active'); 96 | }).on(pointerUp, 'li', (e:JQueryMouseEventObject) => { 97 | this.$select.removeClass('active'); 98 | this.setValue($(e.target).attr('data-value')); 99 | }); 100 | 101 | $document.on(pointerDown, (e:JQueryMouseEventObject) => { 102 | var $path = $(e.target).parents().addBack(); 103 | if ($path.is(this.$select)) return; 104 | 105 | this.$select.removeClass('active'); 106 | }); 107 | } 108 | 109 | 110 | protected handleValueChange(oldValue:string, newValue:string) { 111 | this.$select.find('li.selected').removeClass('selected'); 112 | this.$select.find('.tsd-select-label').text( 113 | this.$select.find('li[data-value="' + newValue + '"]').addClass('selected').text()); 114 | 115 | $html.removeClass('toggle-' + oldValue); 116 | $html.addClass('toggle-' + newValue); 117 | } 118 | } 119 | 120 | 121 | class Filter extends Backbone.View 122 | { 123 | private optionVisibility:FilterItemSelect; 124 | 125 | private optionInherited:FilterItemCheckbox; 126 | 127 | private optionOnlyExported:FilterItemCheckbox; 128 | 129 | private optionExternals:FilterItemCheckbox; 130 | 131 | 132 | constructor(options?:Backbone.ViewOptions) { 133 | super(options); 134 | 135 | this.optionVisibility = new FilterItemSelect('visibility', 'private'); 136 | this.optionInherited = new FilterItemCheckbox('inherited', true); 137 | this.optionExternals = new FilterItemCheckbox('externals', true); 138 | this.optionOnlyExported = new FilterItemCheckbox('only-exported', false); 139 | } 140 | 141 | 142 | static isSupported():boolean { 143 | try { 144 | return typeof window.localStorage != 'undefined'; 145 | } catch (e) { 146 | return false; 147 | } 148 | } 149 | } 150 | 151 | 152 | if (Filter.isSupported()) { 153 | registerComponent(Filter, '#tsd-filter'); 154 | } else { 155 | $html.addClass('no-filter'); 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /src/default/assets/js/src/typedoc/components/MenuHighlight.ts: -------------------------------------------------------------------------------- 1 | module typedoc 2 | { 3 | /** 4 | * Stored element and position data of a single anchor. 5 | */ 6 | interface IAnchorInfo 7 | { 8 | /** 9 | * jQuery instance of the anchor tag. 10 | */ 11 | $anchor?:JQuery; 12 | 13 | /** 14 | * jQuery instance of the link in the navigation representing this anchor. 15 | */ 16 | $link?:JQuery; 17 | 18 | /** 19 | * The vertical offset of the anchor on the page. 20 | */ 21 | position:number; 22 | } 23 | 24 | 25 | /** 26 | * Manages the sticky state of the navigation and moves the highlight 27 | * to the current navigation item. 28 | */ 29 | export class MenuHighlight extends Backbone.View 30 | { 31 | /** 32 | * List of all discovered anchors. 33 | */ 34 | private anchors:IAnchorInfo[]; 35 | 36 | /** 37 | * Index of the currently highlighted anchor. 38 | */ 39 | private index:number = 0; 40 | 41 | 42 | /** 43 | * Create a new MenuHighlight instance. 44 | * 45 | * @param options Backbone view constructor options. 46 | */ 47 | constructor(options:Backbone.ViewOptions) { 48 | super(options); 49 | 50 | this.listenTo(viewport, 'resize', this.onResize); 51 | this.listenTo(viewport, 'scroll', this.onScroll); 52 | 53 | this.createAnchors(); 54 | } 55 | 56 | 57 | /** 58 | * Find all anchors on the current page. 59 | */ 60 | private createAnchors() { 61 | this.index = 0; 62 | this.anchors = [{ 63 | position: 0 64 | }]; 65 | 66 | var base = window.location.href; 67 | if (base.indexOf('#') != -1) { 68 | base = base.substr(0, base.indexOf('#')); 69 | } 70 | 71 | this.$el.find('a').each((index, el:HTMLAnchorElement) => { 72 | var href = el.href; 73 | if (href.indexOf('#') == -1) return; 74 | if (href.substr(0, base.length) != base) return; 75 | 76 | var hash = href.substr(href.indexOf('#') + 1); 77 | var $anchor = $('a.tsd-anchor[name=' + hash + ']'); 78 | if ($anchor.length == 0) return; 79 | 80 | this.anchors.push({ 81 | $link: $(el.parentNode), 82 | $anchor: $anchor, 83 | position: 0 84 | }); 85 | }); 86 | 87 | this.onResize(); 88 | } 89 | 90 | 91 | /** 92 | * Triggered after the viewport was resized. 93 | */ 94 | private onResize() { 95 | var anchor; 96 | for (var index = 1, count = this.anchors.length; index < count; index++) { 97 | anchor = this.anchors[index]; 98 | anchor.position = anchor.$anchor.offset().top; 99 | } 100 | 101 | this.anchors.sort((a, b) => { 102 | return a.position - b.position; 103 | }); 104 | 105 | this.onScroll(viewport.scrollTop); 106 | } 107 | 108 | 109 | /** 110 | * Triggered after the viewport was scrolled. 111 | * 112 | * @param scrollTop The current vertical scroll position. 113 | */ 114 | private onScroll(scrollTop:number) { 115 | var anchors = this.anchors; 116 | var index = this.index; 117 | var count = anchors.length - 1; 118 | 119 | scrollTop += 5; 120 | while (index > 0 && anchors[index].position > scrollTop) { 121 | index -= 1; 122 | } 123 | 124 | while (index < count && anchors[index + 1].position < scrollTop) { 125 | index += 1; 126 | } 127 | 128 | if (this.index != index) { 129 | if (this.index > 0) this.anchors[this.index].$link.removeClass('focus'); 130 | this.index = index; 131 | if (this.index > 0) this.anchors[this.index].$link.addClass('focus'); 132 | } 133 | } 134 | } 135 | 136 | 137 | /** 138 | * Register this component. 139 | */ 140 | registerComponent(MenuHighlight, '.menu-highlight'); 141 | } 142 | -------------------------------------------------------------------------------- /src/default/assets/js/src/typedoc/components/MenuSticky.ts: -------------------------------------------------------------------------------- 1 | module typedoc 2 | { 3 | var hasPositionSticky = $html.hasClass('csspositionsticky'); 4 | 5 | /** 6 | * Defines the known ways to make the navigation sticky. 7 | */ 8 | enum StickyMode 9 | { 10 | /** 11 | * The navigation is not sticky at all. 12 | */ 13 | None, 14 | 15 | /** 16 | * The entire secondary navigation will stick to the top. 17 | */ 18 | Secondary, 19 | 20 | /** 21 | * Only the current root navigation item will stick to the top. 22 | */ 23 | Current 24 | } 25 | 26 | 27 | /** 28 | * Controls the sticky behaviour of the secondary menu. 29 | */ 30 | export class MenuSticky extends Backbone.View 31 | { 32 | /** 33 | * jQuery instance of the current navigation item. 34 | */ 35 | private $current:JQuery; 36 | 37 | /** 38 | * jQuery instance of the parent representing the entire navigation. 39 | */ 40 | private $navigation:JQuery; 41 | 42 | /** 43 | * jQuery instance of the parent representing entire sticky container. 44 | */ 45 | private $container:JQuery; 46 | 47 | /** 48 | * The current state of the menu. 49 | */ 50 | private state:string = ''; 51 | 52 | /** 53 | * The current mode for determining the sticky position. 54 | */ 55 | private stickyMode:StickyMode = StickyMode.None; 56 | 57 | /** 58 | * The threshold at which the menu is attached to the top. 59 | */ 60 | private stickyTop:number; 61 | 62 | /** 63 | * The threshold at which the menu is attached to the bottom. 64 | */ 65 | private stickyBottom:number; 66 | 67 | 68 | /** 69 | * Create a new MenuSticky instance. 70 | * 71 | * @param options Backbone view constructor options. 72 | */ 73 | constructor(options:Backbone.ViewOptions) { 74 | super(options); 75 | 76 | this.$current = this.$el.find('> ul.current'); 77 | this.$navigation = this.$el.parents('.menu-sticky-wrap'); 78 | this.$container = this.$el.parents('.row'); 79 | 80 | this.listenTo(viewport, 'resize', this.onResize); 81 | if (!hasPositionSticky) { 82 | this.listenTo(viewport, 'scroll', this.onScroll); 83 | } 84 | 85 | this.onResize(viewport.width, viewport.height); 86 | } 87 | 88 | 89 | /** 90 | * Set the current sticky state. 91 | * 92 | * @param state The new sticky state. 93 | */ 94 | private setState(state:string) { 95 | if (this.state == state) return; 96 | 97 | if (this.state != '') this.$navigation.removeClass(this.state); 98 | this.state = state; 99 | if (this.state != '') this.$navigation.addClass(this.state); 100 | } 101 | 102 | 103 | /** 104 | * Triggered after the viewport was resized. 105 | * 106 | * @param width The width of the viewport. 107 | * @param height The height of the viewport. 108 | */ 109 | private onResize(width:number, height:number) { 110 | this.stickyMode = StickyMode.None; 111 | this.setState(''); 112 | 113 | var containerTop = this.$container.offset().top; 114 | var containerHeight = this.$container.height(); 115 | var bottom = containerTop + containerHeight; 116 | if (this.$navigation.height() < containerHeight) { 117 | var elHeight = this.$el.height(); 118 | var elTop = this.$el.offset().top; 119 | 120 | if (this.$current.length) { 121 | var currentHeight = this.$current.height(); 122 | var currentTop = this.$current.offset().top; 123 | 124 | this.$navigation.css('top', containerTop - currentTop + 20); 125 | if (currentHeight < height) { 126 | this.stickyMode = StickyMode.Current; 127 | this.stickyTop = currentTop; 128 | this.stickyBottom = bottom - elHeight + (currentTop - elTop) - 20; 129 | } 130 | } 131 | 132 | if (elHeight < height) { 133 | this.$navigation.css('top', containerTop - elTop + 20); 134 | this.stickyMode = StickyMode.Secondary; 135 | this.stickyTop = elTop; 136 | this.stickyBottom = bottom - elHeight - 20; 137 | } 138 | } 139 | 140 | if (!hasPositionSticky) { 141 | this.$navigation.css('left', this.$navigation.offset().left); 142 | this.onScroll(viewport.scrollTop); 143 | } else { 144 | if (this.stickyMode == StickyMode.Current) { 145 | this.setState('sticky-current'); 146 | } else if (this.stickyMode == StickyMode.Secondary) { 147 | this.setState('sticky'); 148 | } else { 149 | this.setState(''); 150 | } 151 | } 152 | } 153 | 154 | 155 | /** 156 | * Triggered after the viewport was scrolled. 157 | * 158 | * @param scrollTop The current vertical scroll position. 159 | */ 160 | private onScroll(scrollTop:number) { 161 | if (this.stickyMode == StickyMode.Current) { 162 | if (scrollTop > this.stickyBottom) { 163 | this.setState('sticky-bottom'); 164 | } else { 165 | this.setState(scrollTop + 20 > this.stickyTop ? 'sticky-current' : ''); 166 | } 167 | } else if (this.stickyMode == StickyMode.Secondary) { 168 | if (scrollTop > this.stickyBottom) { 169 | this.setState('sticky-bottom'); 170 | } else { 171 | this.setState(scrollTop + 20 > this.stickyTop ? 'sticky' : ''); 172 | } 173 | } 174 | } 175 | } 176 | 177 | 178 | /** 179 | * Register this component. 180 | */ 181 | registerComponent(MenuSticky, '.menu-sticky'); 182 | } -------------------------------------------------------------------------------- /src/default/assets/js/src/typedoc/components/Search.ts: -------------------------------------------------------------------------------- 1 | declare module typedoc.search 2 | { 3 | interface IDocument { 4 | id:number; 5 | kind:number; 6 | name:string; 7 | url:string; 8 | classes:string; 9 | parent?:string; 10 | } 11 | 12 | interface IData { 13 | kinds:{[kind:number]:string}; 14 | rows:IDocument[]; 15 | } 16 | 17 | var data:IData; 18 | } 19 | 20 | 21 | module typedoc.search 22 | { 23 | /** 24 | * Loading state definitions. 25 | */ 26 | enum SearchLoadingState 27 | { 28 | Idle, Loading, Ready, Failure 29 | } 30 | 31 | 32 | /** 33 | * The element holding the search widget and results. 34 | */ 35 | var $el:JQuery = $('#tsd-search'); 36 | 37 | /** 38 | * The input field of the search widget. 39 | */ 40 | var $field:JQuery = $('#tsd-search-field'); 41 | 42 | /** 43 | * The result list wrapper. 44 | */ 45 | var $results:JQuery = $('.results'); 46 | 47 | /** 48 | * The base url that must be prepended to the indexed urls. 49 | */ 50 | var base:string = $el.attr('data-base') + '/'; 51 | 52 | /** 53 | * The current query string. 54 | */ 55 | var query:string = ''; 56 | 57 | /** 58 | * The state the search is currently in. 59 | */ 60 | var loadingState:SearchLoadingState = SearchLoadingState.Idle; 61 | 62 | /** 63 | * Is the input field focused? 64 | */ 65 | var hasFocus:boolean = false; 66 | 67 | /** 68 | * Should the next key press be prevents? 69 | */ 70 | var preventPress:boolean = false; 71 | 72 | /** 73 | * The lunr index used to search the documentation. 74 | */ 75 | var index:lunr.Index; 76 | 77 | 78 | /** 79 | * Instantiate the lunr index. 80 | */ 81 | function createIndex() { 82 | index = new lunr.Index(); 83 | index.pipeline.add( 84 | lunr.trimmer 85 | ); 86 | 87 | index.field('name', {boost:10}); 88 | index.field('parent'); 89 | index.ref('id'); 90 | 91 | var rows = data.rows; 92 | var pos = 0; 93 | var length = rows.length; 94 | function batch() { 95 | var cycles = 0; 96 | while (cycles++ < 100) { 97 | index.add(rows[pos]); 98 | if (++pos == length) { 99 | return setLoadingState(SearchLoadingState.Ready); 100 | } 101 | } 102 | setTimeout(batch, 10); 103 | } 104 | 105 | batch(); 106 | } 107 | 108 | 109 | /** 110 | * Lazy load the search index and parse it. 111 | */ 112 | function loadIndex() { 113 | if (loadingState != SearchLoadingState.Idle) return; 114 | setTimeout(() => { 115 | if (loadingState == SearchLoadingState.Idle) { 116 | setLoadingState(SearchLoadingState.Loading); 117 | } 118 | }, 500); 119 | 120 | if (typeof data != 'undefined') { 121 | createIndex(); 122 | } else { 123 | $.get($el.attr('data-index')) 124 | .done((source:string) => { 125 | eval(source); 126 | createIndex(); 127 | }).fail(() => { 128 | setLoadingState(SearchLoadingState.Failure); 129 | }); 130 | } 131 | } 132 | 133 | 134 | /** 135 | * Update the visible state of the search control. 136 | */ 137 | function updateResults() { 138 | if (loadingState != SearchLoadingState.Ready) return; 139 | $results.empty(); 140 | 141 | var res = index.search(query); 142 | for (var i = 0, c = Math.min(10, res.length); i < c; i++) { 143 | var row = data.rows[res[i].ref]; 144 | var name = row.name; 145 | if (row.parent) name = '' + row.parent + '.' + name; 146 | $results.append('
  • ' + name + '
  • '); 147 | } 148 | } 149 | 150 | 151 | /** 152 | * Set the loading state and update the visual state accordingly. 153 | */ 154 | function setLoadingState(value:SearchLoadingState) { 155 | if (loadingState == value) return; 156 | 157 | $el.removeClass(SearchLoadingState[loadingState].toLowerCase()); 158 | loadingState = value; 159 | $el.addClass(SearchLoadingState[loadingState].toLowerCase()); 160 | 161 | if (value == SearchLoadingState.Ready) { 162 | updateResults(); 163 | } 164 | } 165 | 166 | 167 | /** 168 | * Set the focus state and update the visual state accordingly. 169 | */ 170 | function setHasFocus(value:boolean) { 171 | if (hasFocus == value) return; 172 | hasFocus = value; 173 | $el.toggleClass('has-focus'); 174 | 175 | if (!value) { 176 | $field.val(query); 177 | } else { 178 | setQuery(''); 179 | $field.val(''); 180 | } 181 | } 182 | 183 | 184 | /** 185 | * Set the query string and update the results. 186 | */ 187 | function setQuery(value:string) { 188 | query = $.trim(value); 189 | updateResults(); 190 | } 191 | 192 | 193 | /** 194 | * Move the highlight within the result set. 195 | */ 196 | function setCurrentResult(dir:number) { 197 | var $current = $results.find('.current'); 198 | if ($current.length == 0) { 199 | $results.find(dir == 1 ? 'li:first-child' : 'li:last-child').addClass('current'); 200 | } else { 201 | var $rel = dir == 1 ? $current.next('li') : $current.prev('li'); 202 | if ($rel.length > 0) { 203 | $current.removeClass('current'); 204 | $rel.addClass('current'); 205 | } 206 | } 207 | } 208 | 209 | 210 | /** 211 | * Navigate to the highlighted result. 212 | */ 213 | function gotoCurrentResult() { 214 | var $current = $results.find('.current'); 215 | 216 | if ($current.length == 0) { 217 | $current = $results.find('li:first-child'); 218 | } 219 | 220 | if ($current.length > 0) { 221 | window.location.href = $current.find('a').prop('href'); 222 | $field.blur(); 223 | } 224 | } 225 | 226 | 227 | /** 228 | * Bind all required events on the input field. 229 | */ 230 | $field.on('focusin', () => { 231 | setHasFocus(true); 232 | loadIndex(); 233 | }).on('focusout', () => { 234 | // setTimeout(() => setHasFocus(false), 10000); 235 | }).on('input', () => { 236 | setQuery($.trim($field.val())); 237 | }).on('keydown', (e:JQueryKeyEventObject) => { 238 | if (e.keyCode == 13 || e.keyCode == 27 || e.keyCode == 38 || e.keyCode == 40) { 239 | preventPress = true; 240 | e.preventDefault(); 241 | 242 | if (e.keyCode == 13) { 243 | gotoCurrentResult(); 244 | } else if (e.keyCode == 27) { 245 | $field.blur(); 246 | } else if (e.keyCode == 38) { 247 | setCurrentResult(-1); 248 | } else if (e.keyCode == 40) { 249 | setCurrentResult(1); 250 | } 251 | } else { 252 | preventPress = false; 253 | } 254 | }).on('keypress', (e) => { 255 | if (preventPress) e.preventDefault(); 256 | }); 257 | 258 | 259 | /** 260 | * Start searching by pressing a key on the body. 261 | */ 262 | $('body').on('keydown', (e:JQueryKeyEventObject) => { 263 | if (e.altKey || e.ctrlKey || e.metaKey) return; 264 | if (!hasFocus && e.keyCode > 47 && e.keyCode < 112) { 265 | $field.focus(); 266 | } 267 | }); 268 | } -------------------------------------------------------------------------------- /src/default/assets/js/src/typedoc/components/Signature.ts: -------------------------------------------------------------------------------- 1 | module typedoc 2 | { 3 | /** 4 | * Holds a signature and its description. 5 | */ 6 | class SignatureGroup 7 | { 8 | /** 9 | * The target signature. 10 | */ 11 | $signature:JQuery; 12 | 13 | /** 14 | * The description for the signature. 15 | */ 16 | $description:JQuery; 17 | 18 | 19 | /** 20 | * Create a new SignatureGroup instance. 21 | * 22 | * @param $signature The target signature. 23 | * @param $description The description for the signature. 24 | */ 25 | constructor($signature, $description) { 26 | this.$signature = $signature; 27 | this.$description = $description; 28 | } 29 | 30 | 31 | /** 32 | * Add the given class to all elements of the group. 33 | * 34 | * @param className The class name to add. 35 | */ 36 | addClass(className:string):SignatureGroup { 37 | this.$signature.addClass(className); 38 | this.$description.addClass(className); 39 | return this; 40 | } 41 | 42 | 43 | /** 44 | * Remove the given class from all elements of the group. 45 | * 46 | * @param className The class name to remove. 47 | */ 48 | removeClass(className:string):SignatureGroup { 49 | this.$signature.removeClass(className); 50 | this.$description.removeClass(className); 51 | return this; 52 | } 53 | } 54 | 55 | 56 | /** 57 | * Controls the tab like behaviour of methods and functions with multiple signatures. 58 | */ 59 | class Signature extends Backbone.View 60 | { 61 | /** 62 | * List of found signature groups. 63 | */ 64 | private groups:SignatureGroup[]; 65 | 66 | /** 67 | * The container holding all the descriptions. 68 | */ 69 | private $container:JQuery; 70 | 71 | /** 72 | * The index of the currently displayed signature. 73 | */ 74 | private index:number = -1; 75 | 76 | 77 | /** 78 | * Create a new Signature instance. 79 | * 80 | * @param options Backbone view constructor options. 81 | */ 82 | constructor(options:Backbone.ViewOptions) { 83 | super(options); 84 | 85 | this.createGroups(); 86 | 87 | if (this.groups) { 88 | this.$el.addClass('active') 89 | .on('touchstart', '.tsd-signature', (event) => this.onClick(event)) 90 | .on('click', '.tsd-signature', (event) => this.onClick(event)); 91 | this.$container.addClass('active'); 92 | this.setIndex(0); 93 | } 94 | } 95 | 96 | 97 | /** 98 | * Set the index of the active signature. 99 | * 100 | * @param index The index of the signature to activate. 101 | */ 102 | private setIndex(index:number) { 103 | if (index < 0) index = 0; 104 | if (index > this.groups.length - 1) index = this.groups.length - 1; 105 | if (this.index == index) return; 106 | 107 | var to = this.groups[index]; 108 | if (this.index > -1) { 109 | var from = this.groups[this.index]; 110 | 111 | animateHeight(this.$container, () => { 112 | from.removeClass('current').addClass('fade-out'); 113 | to.addClass('current fade-in'); 114 | viewport.triggerResize(); 115 | }); 116 | 117 | setTimeout(() => { 118 | from.removeClass('fade-out'); 119 | to.removeClass('fade-in'); 120 | }, 300); 121 | } else { 122 | to.addClass('current'); 123 | viewport.triggerResize(); 124 | } 125 | 126 | this.index = index; 127 | } 128 | 129 | 130 | /** 131 | * Find all signature/description groups. 132 | */ 133 | private createGroups() { 134 | var $signatures = this.$el.find('> .tsd-signature'); 135 | if ($signatures.length < 2) return; 136 | 137 | this.$container = this.$el.siblings('.tsd-descriptions'); 138 | var $descriptions = this.$container.find('> .tsd-description'); 139 | 140 | this.groups = []; 141 | $signatures.each((index, el) => { 142 | this.groups.push(new SignatureGroup($(el), $descriptions.eq(index))); 143 | }); 144 | } 145 | 146 | 147 | /** 148 | * Triggered when the user clicks onto a signature header. 149 | * 150 | * @param e The related jQuery event object. 151 | */ 152 | private onClick(e:JQueryMouseEventObject) { 153 | e.preventDefault(); 154 | _(this.groups).forEach((group, index) => { 155 | if (group.$signature.is(e.currentTarget)) { 156 | this.setIndex(index); 157 | } 158 | }); 159 | } 160 | } 161 | 162 | 163 | /** 164 | * Register this component. 165 | */ 166 | registerComponent(Signature, '.tsd-signatures'); 167 | } -------------------------------------------------------------------------------- /src/default/assets/js/src/typedoc/components/Toggle.ts: -------------------------------------------------------------------------------- 1 | module typedoc 2 | { 3 | /** 4 | * Enabled simple toggle buttons. 5 | */ 6 | class Toggle extends Backbone.View 7 | { 8 | active:boolean; 9 | 10 | className:string; 11 | 12 | 13 | constructor(options:Backbone.ViewOptions) { 14 | super(options); 15 | 16 | this.className = this.$el.attr('data-toggle'); 17 | this.$el.on(pointerUp, (e) => this.onPointerUp(e)); 18 | this.$el.on('click', (e) => e.preventDefault()); 19 | $document.on(pointerDown, (e) => this.onDocumentPointerDown(e)); 20 | $document.on(pointerUp, (e) => this.onDocumentPointerUp(e)); 21 | } 22 | 23 | 24 | setActive(value:boolean) { 25 | if (this.active == value) return; 26 | this.active = value; 27 | 28 | $html.toggleClass('has-' + this.className, value); 29 | this.$el.toggleClass('active', value); 30 | 31 | var transition = (this.active ? 'to-has-' : 'from-has-') + this.className; 32 | $html.addClass(transition); 33 | setTimeout(() => $html.removeClass(transition), 500); 34 | } 35 | 36 | 37 | onPointerUp(event:JQueryMouseEventObject) { 38 | if (hasPointerMoved) return; 39 | this.setActive(true); 40 | event.preventDefault(); 41 | } 42 | 43 | 44 | onDocumentPointerDown(e:JQueryMouseEventObject) { 45 | if (this.active) { 46 | var $path = $(e.target).parents().addBack(); 47 | if ($path.hasClass('col-menu')) { 48 | return; 49 | } 50 | 51 | if ($path.hasClass('tsd-filter-group')) { 52 | return; 53 | } 54 | 55 | this.setActive(false); 56 | } 57 | } 58 | 59 | onDocumentPointerUp(e:JQueryMouseEventObject) { 60 | if (hasPointerMoved) return; 61 | if (this.active) { 62 | var $path = $(e.target).parents().addBack(); 63 | if ($path.hasClass('col-menu')) { 64 | var $link = $path.filter('a'); 65 | if ($link.length) { 66 | var href = window.location.href; 67 | if (href.indexOf('#') != -1) { 68 | href = href.substr(0, href.indexOf('#')); 69 | } 70 | if ($link.prop('href').substr(0, href.length) == href) { 71 | setTimeout(() => this.setActive(false), 250); 72 | } 73 | } 74 | } 75 | } 76 | } 77 | } 78 | 79 | 80 | /** 81 | * Register this component. 82 | */ 83 | registerComponent(Toggle, 'a[data-toggle]'); 84 | } -------------------------------------------------------------------------------- /src/default/assets/js/src/typedoc/services/Viewport.ts: -------------------------------------------------------------------------------- 1 | module typedoc 2 | { 3 | /** 4 | * A global service that monitors the window size and scroll position. 5 | */ 6 | export class Viewport extends Events 7 | { 8 | /** 9 | * The current scroll position. 10 | */ 11 | scrollTop:number = 0; 12 | 13 | /** 14 | * The width of the window. 15 | */ 16 | width:number = 0; 17 | 18 | /** 19 | * The height of the window. 20 | */ 21 | height:number = 0; 22 | 23 | 24 | /** 25 | * Create new Viewport instance. 26 | */ 27 | constructor() { 28 | super(); 29 | $window.on('scroll', _(() => this.onScroll()).throttle(10)); 30 | $window.on('resize', _(() => this.onResize()).throttle(10)); 31 | 32 | this.onResize(); 33 | this.onScroll(); 34 | } 35 | 36 | 37 | /** 38 | * Trigger a resize event. 39 | */ 40 | triggerResize() { 41 | this.trigger('resize', this.width, this.height); 42 | } 43 | 44 | 45 | /** 46 | * Triggered when the size of the window has changed. 47 | */ 48 | onResize() { 49 | this.width = $window.width(); 50 | this.height = $window.height(); 51 | this.trigger('resize', this.width, this.height); 52 | } 53 | 54 | 55 | /** 56 | * Triggered when the user scrolled the viewport. 57 | */ 58 | onScroll() { 59 | this.scrollTop = $window.scrollTop(); 60 | this.trigger('scroll', this.scrollTop); 61 | } 62 | } 63 | 64 | 65 | /** 66 | * Register service. 67 | */ 68 | export var viewport:Viewport; 69 | registerService(Viewport, 'viewport'); 70 | } -------------------------------------------------------------------------------- /src/default/assets/js/src/typedoc/utils/pointer.ts: -------------------------------------------------------------------------------- 1 | module typedoc 2 | { 3 | /** 4 | * Simple point interface. 5 | */ 6 | export interface Point { 7 | x:number; 8 | y:number; 9 | } 10 | 11 | /** 12 | * Event name of the pointer down event. 13 | */ 14 | export var pointerDown:string = 'mousedown'; 15 | 16 | /** 17 | * Event name of the pointer move event. 18 | */ 19 | export var pointerMove:string = 'mousemove'; 20 | 21 | /** 22 | * Event name of the pointer up event. 23 | */ 24 | export var pointerUp:string = 'mouseup'; 25 | 26 | /** 27 | * Position the pointer was pressed at. 28 | */ 29 | export var pointerDownPosition:Point = {x:0, y:0}; 30 | 31 | /** 32 | * Should the next click on the document be supressed? 33 | */ 34 | export var preventNextClick:boolean = false; 35 | 36 | /** 37 | * Is the pointer down? 38 | */ 39 | export var isPointerDown:boolean = false; 40 | 41 | /** 42 | * Is the pointer a touch point? 43 | */ 44 | export var isPointerTouch:boolean = false; 45 | 46 | /** 47 | * Did the pointer move since the last down event? 48 | */ 49 | export var hasPointerMoved:boolean = false; 50 | 51 | /** 52 | * Is the user agent a mobile agent? 53 | */ 54 | export var isMobile:boolean = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); 55 | $html.addClass(isMobile ? 'is-mobile' : 'not-mobile'); 56 | 57 | 58 | if (isMobile && 'ontouchstart' in document.documentElement) { 59 | isPointerTouch = true; 60 | pointerDown = 'touchstart'; 61 | pointerMove = 'touchmove'; 62 | pointerUp = 'touchend'; 63 | } 64 | 65 | $document.on(pointerDown, (e:JQueryMouseEventObject) => { 66 | isPointerDown = true; 67 | hasPointerMoved = false; 68 | var t = (pointerDown == 'touchstart' ? e.originalEvent['targetTouches'][0] : e); 69 | pointerDownPosition.x = t.pageX; 70 | pointerDownPosition.y = t.pageY; 71 | }).on(pointerMove, (e:JQueryMouseEventObject) => { 72 | if (!isPointerDown) return; 73 | if (!hasPointerMoved) { 74 | var t = (pointerDown == 'touchstart' ? e.originalEvent['targetTouches'][0] : e); 75 | var x = pointerDownPosition.x - t.pageX; 76 | var y = pointerDownPosition.y - t.pageY; 77 | hasPointerMoved = (Math.sqrt(x*x + y*y) > 10); 78 | } 79 | }).on(pointerUp, (e:JQueryMouseEventObject) => { 80 | isPointerDown = false; 81 | }).on('click', (e:JQueryMouseEventObject) => { 82 | if (preventNextClick) { 83 | e.preventDefault(); 84 | e.stopImmediatePropagation(); 85 | preventNextClick = false; 86 | } 87 | }); 88 | } -------------------------------------------------------------------------------- /src/default/assets/js/src/typedoc/utils/transitions.ts: -------------------------------------------------------------------------------- 1 | module typedoc { 2 | function getVendorInfo(tuples) { 3 | for (var name in tuples) { 4 | if (!tuples.hasOwnProperty(name)) 5 | continue; 6 | if (typeof (document.body.style[name]) !== 'undefined') { 7 | return { name: name, endEvent: tuples[name] }; 8 | } 9 | } 10 | return null; 11 | } 12 | 13 | 14 | export var transition = getVendorInfo({ 15 | 'transition': 'transitionend', 16 | 'OTransition': 'oTransitionEnd', 17 | 'msTransition': 'msTransitionEnd', 18 | 'MozTransition': 'transitionend', 19 | 'WebkitTransition': 'webkitTransitionEnd' 20 | }); 21 | 22 | 23 | export function noTransition($el, callback) { 24 | $el.addClass('no-transition'); 25 | callback(); 26 | $el.offset(); 27 | $el.removeClass('no-transition'); 28 | } 29 | 30 | 31 | export function animateHeight($el:JQuery, callback:Function, success?:Function) { 32 | var from = $el.height(), to; 33 | noTransition($el, function () { 34 | callback(); 35 | 36 | $el.css('height', ''); 37 | to = $el.height(); 38 | if (from != to && transition) $el.css('height', from); 39 | }); 40 | 41 | if (from != to && transition) { 42 | $el.css('height', to); 43 | $el.on(transition.endEvent, function () { 44 | noTransition($el, function () { 45 | $el.off(transition.endEvent).css('height', ''); 46 | if (success) success(); 47 | }); 48 | }); 49 | } else { 50 | if (success) success(); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/default/assets/js/src/~bootstrap.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | module typedoc 4 | { 5 | export var app:Application = new Application(); 6 | } -------------------------------------------------------------------------------- /src/default/layouts/default.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{#ifCond model.name '==' project.name}}{{project.name}}{{else}}{{model.name}} | {{project.name}}{{/ifCond}} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | {{> header}} 17 | 18 |
    19 |
    20 | 40 |
    41 | {{{contents}}} 42 | {{> footer}} 43 |
    44 |
    45 |
    46 | 47 |
    48 | 49 | 50 | 51 | {{> analytics}} 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /src/default/partials/analytics.hbs: -------------------------------------------------------------------------------- 1 | {{#if settings.gaID}} 2 | 11 | {{/if}} -------------------------------------------------------------------------------- /src/default/partials/breadcrumb.hbs: -------------------------------------------------------------------------------- 1 | {{#if parent}} 2 | {{#with parent}}{{> breadcrumb}}{{/with}} 3 |
  • 4 | {{#if url}} 5 | {{name}} 6 | {{else}} 7 | {{name}} 8 | {{/if}} 9 |
  • 10 | {{else}} 11 | {{#if url}} 12 |
  • 13 | Globals 14 |
  • 15 | {{/if}} 16 | {{/if}} -------------------------------------------------------------------------------- /src/default/partials/comment-tags.hbs: -------------------------------------------------------------------------------- 1 | {{#with comment}} 2 | {{#if hasVisibleComponent}} 3 |
    4 | {{#if tags}} 5 | {{#each tags}} 6 |

    {{tagName}}

    7 |

    {{#markdown}}{{{text}}}{{/markdown}}

    8 | {{/each}} 9 | {{/if}} 10 |
    11 | {{/if}} 12 | {{/with}} -------------------------------------------------------------------------------- /src/default/partials/comment.hbs: -------------------------------------------------------------------------------- 1 | {{#with comment}} 2 | {{#if hasVisibleComponent}} 3 |
    4 | {{#if shortText}} 5 |
    6 | {{#markdown}}{{{shortText}}}{{/markdown}} 7 |
    8 | {{/if}} 9 | {{#if text}} 10 | {{#markdown}}{{{text}}}{{/markdown}} 11 | {{/if}} 12 | {{#if tags}} 13 | {{#each tags}} 14 |

    {{tagName}}

    15 |

    {{#markdown}}{{{text}}}{{/markdown}}

    16 | {{/each}} 17 | {{/if}} 18 |
    19 | {{/if}} 20 | {{/with}} -------------------------------------------------------------------------------- /src/default/partials/description.hbs: -------------------------------------------------------------------------------- 1 | {{#with comment}} 2 | {{#if hasVisibleComponent}} 3 |
    4 | {{#if shortText}} 5 |
    6 | {{#markdown}}{{{shortText}}}{{/markdown}} 7 |
    8 | {{/if}} 9 | {{#if text}} 10 | {{#markdown}}{{{text}}}{{/markdown}} 11 | {{/if}} 12 |
    13 | {{/if}} 14 | {{/with}} -------------------------------------------------------------------------------- /src/default/partials/footer.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 |
    4 |
      5 |
    • Inherited
    • 6 |
    • Protected
    • 7 |
    • Private
    • 8 |
    • Static
    • 9 |
    10 |
      11 |
    • Module
    • 12 |
    • Object
    • 13 |
    • Property
    • 14 |
    15 |
      16 |
    • Function
    • 17 |
    • Variable
    • 18 |
    • Index
    • 19 |
    20 |
      21 |
    • Type
    • 22 |
    • Class
    • 23 |
    • Interface
    • 24 |
    25 |
      26 |
    • Enum
    • 27 |
    • Constructor
    • 28 |
    • Getter/Setter
    • 29 |
    30 |
    31 | 32 | 33 | {{#unless settings.hideGenerator}} 34 |
    Made with ❤️ by pirix-gh. Documentation generated by TypeDoc.
    35 | {{/unless}} 36 | -------------------------------------------------------------------------------- /src/default/partials/header.hbs: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 |
    5 | 18 | 19 |
    20 |
    21 | Options 22 |
    23 |
    24 | All 25 |
      26 |
    • Public
    • 27 |
    • Public/Protected
    • 28 |
    • All
    • 29 |
    30 |
    31 | 32 | 33 | 34 | 35 | {{#unless settings.excludeExternals}} 36 | 37 | 38 | {{/unless}} 39 | 40 | {{#unless settings.excludeNotExported}} 41 | 42 | 43 | {{/unless}} 44 |
    45 |
    46 | 47 | Menu 48 |
    49 |
    50 |
    51 |
    52 |
    53 |
    54 |
      55 | {{#with model}}{{> breadcrumb}}{{/with}} 56 |
    57 | {{!--

    {{#compact}} 58 | {{model.kindString}}  59 | {{model.name}} 60 | {{#if model.typeParameters}} 61 | < 62 | {{#each model.typeParameters}} 63 | {{#if @index}}, {{/if}} 64 | {{name}} 65 | {{/each}} 66 | > 67 | {{/if}} 68 | {{/compact}}

    --}} 69 |
    70 |
    71 |
    -------------------------------------------------------------------------------- /src/default/partials/hierarchy.hbs: -------------------------------------------------------------------------------- 1 |
      2 | {{#each types}} 3 |
    • 4 | {{#if ../isTarget}} 5 | {{this}} 6 | {{else}} 7 | {{> type}} 8 | {{/if}} 9 | 10 | {{#if @last}} 11 | {{#with ../next}} 12 | {{> hierarchy}} 13 | {{/with}} 14 | {{/if}} 15 |
    • 16 | {{/each}} 17 |
    18 | -------------------------------------------------------------------------------- /src/default/partials/index.children.hbs: -------------------------------------------------------------------------------- 1 | {{#if children}} 2 | {{#each children}} 3 |
    4 | 10 |
    11 | {{/each}} 12 | {{/if}} -------------------------------------------------------------------------------- /src/default/partials/index.children.rec.hbs: -------------------------------------------------------------------------------- 1 | {{#if children}} 2 | 10 | {{/if}} -------------------------------------------------------------------------------- /src/default/partials/index.hbs: -------------------------------------------------------------------------------- 1 | {{#if groups}} 2 |
    3 |
    4 |
    5 | {{#each groups}} 6 |
    7 |

    {{title}}

    8 | {{> index.children}} 9 |
    10 | {{/each}} 11 |
    12 |
    13 |
    14 | {{/if}} -------------------------------------------------------------------------------- /src/default/partials/member.declaration.hbs: -------------------------------------------------------------------------------- 1 |
    {{#compact}} 2 | {{name}} 3 | {{#if typeParameters}} 4 | < 5 | {{#each typeParameters}} 6 | {{#if @index}}, {{/if}} 7 | {{name}} 8 | {{/each}} 9 | > 10 | {{/if}} 11 | {{#if isOptional}}?{{/if}}: {{#with type}}{{>type}}{{/with}} 12 | {{#if defaultValue}} 13 | 14 |  =  15 | {{defaultValue}} 16 | 17 | {{/if}} 18 | {{/compact}}
    19 | 20 | {{> description}} 21 | 22 | {{!-- {{> comment}} --}} 23 | 24 | {{#if typeParameters}} 25 |

    Type parameters

    26 | {{> typeParameters}} 27 | {{/if}} 28 | 29 | {{!-- {{> member.sources}} --}} 30 | 31 | {{!-- {{#if type.declaration}} // who cares ? 32 |
    33 |

    Type declaration

    34 | {{#with type.declaration}} 35 | {{> parameter}} 36 | {{/with}} 37 |
    38 | {{/if}} --}} 39 | -------------------------------------------------------------------------------- /src/default/partials/member.getterSetter.hbs: -------------------------------------------------------------------------------- 1 |
      2 | {{#if getSignature}} 3 | {{#with getSignature}} 4 |
    • {{#compact}} 5 | get  6 | {{../name}} 7 | {{> member.signature.title hideName=true }} 8 | {{/compact}}
    • 9 | {{/with}} 10 | {{/if}} 11 | {{#if setSignature}} 12 | {{#with setSignature}} 13 |
    • {{#compact}} 14 | set  15 | {{../name}} 16 | {{> member.signature.title hideName=true }} 17 | {{/compact}}
    • 18 | {{/with}} 19 | {{/if}} 20 |
    21 | 22 | {{!--
      --}} 23 | {{#if getSignature}} 24 | {{#with getSignature}} 25 | {{> member.signature.body }} 26 | {{/with}} 27 | {{/if}} 28 | {{#if setSignature}} 29 | {{#with setSignature}} 30 | {{> member.signature.body }} 31 | {{/with}} 32 | {{/if}} 33 | {{!--
    --}} -------------------------------------------------------------------------------- /src/default/partials/member.hbs: -------------------------------------------------------------------------------- 1 |
    2 | 3 | {{#if name}} 4 |

    {{#each flags}}{{this}} {{/each}}{{{wbr name}}}

    5 | {{/if}} 6 | {{!-- // todo see why comment does not display --}} 7 | 8 | {{#if signatures}} 9 | {{> member.signatures}} 10 | {{else}}{{#if hasGetterOrSetter}} 11 | {{> member.getterSetter}} 12 | {{else}} 13 | {{> member.declaration}} 14 | {{/if}}{{/if}} 15 | 16 | {{#each groups}} 17 | {{#each children}} 18 | {{#unless hasOwnDocument}} 19 | {{> member}} 20 | {{/unless}} 21 | {{/each}} 22 | {{/each}} 23 | 24 | {{> comment-tags}} 25 | 26 | {{> member.sources}} 27 | 28 |
    29 | -------------------------------------------------------------------------------- /src/default/partials/member.signature.body.hbs: -------------------------------------------------------------------------------- 1 | {{!-- {{#unless hideSources}} 2 | {{> member.sources}} 3 | {{/unless}} --}} 4 | 5 | {{> description}} 6 | 7 | {{!-- {{> comment}} --}} 8 | 9 | {{#if typeParameters}} 10 |

    Type parameters

    11 | {{> typeParameters}} 12 | {{/if}} 13 | 14 | {{#if parameters}} 15 |

    Parameters

    16 |
      17 | {{#each parameters}} 18 |
    • 19 | {{#compact}} 20 | {{#if flags.isRest}}...{{/if}} 21 | {{name}}:  22 | {{#with type}}{{>type}}{{/with}} 23 | {{#if defaultValue}} 24 | 25 |  =  26 | {{defaultValue}} 27 | 28 | {{/if}} 29 | {{#each flags}} 30 |  {{this}}  31 | {{/each}} 32 | {{/compact}} 33 | 34 | {{> comment}} 35 | 36 | {{#if type.declaration}} 37 | {{#with type.declaration}} 38 | {{> parameter}} 39 | {{/with}} 40 | {{/if}} 41 |
    • 42 | {{/each}} 43 |
    44 | {{/if}} 45 | 46 | {{#if type}} 47 |

    Returns {{#with type}}{{>type}}{{/with}}

    48 | 49 | {{#if comment.returns}} 50 | {{#markdown}}{{{comment.returns}}}{{/markdown}} 51 | {{/if}} 52 | 53 | {{#if type.declaration}} 54 | {{#with type.declaration}} 55 | {{> parameter}} 56 | {{/with}} 57 | {{/if}} 58 | {{/if}} -------------------------------------------------------------------------------- /src/default/partials/member.signature.title.hbs: -------------------------------------------------------------------------------- 1 | {{#compact}} 2 | {{#unless hideName}}{{{wbr name}}}{{/unless}} 3 | {{#if typeParameters}} 4 | < 5 | {{#each typeParameters}} 6 | {{#if @index}}, {{/if}} 7 | {{name}} 8 | {{/each}} 9 | > 10 | {{/if}} 11 | ( 12 | {{#each parameters}} 13 | {{#if @index}}, {{/if}} 14 | {{#if flags.isRest}}...{{/if}} 15 | {{name}} 16 | 17 | {{#if flags.isOptional}}?{{/if}} 18 | {{#if defaultValue}}?{{/if}} 19 | :  20 | 21 | {{#with type}}{{>type}}{{/with}} 22 | {{/each}} 23 | ) 24 | {{#if type}} 25 | 26 | {{#with type}}{{>type}}{{/with}} 27 | {{/if}} 28 | {{/compact}} -------------------------------------------------------------------------------- /src/default/partials/member.signatures.hbs: -------------------------------------------------------------------------------- 1 |
      2 | {{#each signatures}} 3 |
    • {{> member.signature.title }}
    • 4 | {{/each}} 5 |
    6 | 7 | {{!--
      --}} 8 | {{#each signatures}} 9 | {{!--
    • --}} 10 | {{> member.signature.body }} 11 | {{!--
    • --}} 12 | {{/each}} 13 |
    -------------------------------------------------------------------------------- /src/default/partials/member.sources.hbs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/default/partials/members.group.hbs: -------------------------------------------------------------------------------- 1 |
    2 |

    {{title}}

    3 | {{#each children}} 4 | {{#unless hasOwnDocument}} 5 | {{> member}} 6 | {{/unless}} 7 | {{/each}} 8 |
    9 | -------------------------------------------------------------------------------- /src/default/partials/members.hbs: -------------------------------------------------------------------------------- 1 | {{#each groups}} 2 | {{#unless allChildrenHaveOwnDocument}} 3 | {{> members.group}} 4 | {{/unless}} 5 | {{/each}} -------------------------------------------------------------------------------- /src/default/partials/navglobals.hbs: -------------------------------------------------------------------------------- 1 |
  • 2 | {{{wbr title}}} 3 | {{#if isInPath}} 4 | {{#if children}} 5 |
      6 | {{#each children}} 7 | {{> navigation}} 8 | {{/each}} 9 |
    10 | {{/if}} 11 | {{/if}} 12 |
  • -------------------------------------------------------------------------------- /src/default/partials/navigation.hbs: -------------------------------------------------------------------------------- 1 | {{#if isVisible}} 2 |
  • 3 | {{{wbr title}}} 4 | {{#if isInPath}} 5 | {{#if children}} 6 |
      7 | {{#each children}} 8 | {{> navigation}} 9 | {{/each}} 10 |
    11 | {{/if}} 12 | {{/if}} 13 |
  • 14 | {{/if}} 15 | -------------------------------------------------------------------------------- /src/default/partials/parameter.hbs: -------------------------------------------------------------------------------- 1 |
      2 | {{#if signatures}} 3 |
    • 4 |
        5 | {{#each signatures}} 6 |
      • {{> member.signature.title hideName=true }}
      • 7 | {{/each}} 8 |
      9 | 10 |
        11 | {{#each signatures}} 12 |
      • {{> member.signature.body hideSources=true }}
      • 13 | {{/each}} 14 |
      15 |
    • 16 | {{/if}} 17 | {{#if indexSignature}} 18 |
    • 19 |
      {{#compact}} 20 | [ 21 | {{#each indexSignature.parameters}} 22 | {{#if flags.isRest}}...{{/if}}{{name}}: {{#with type}}{{>type}}{{/with}} 23 | {{/each}} 24 | ]:  25 | {{#with indexSignature.type}}{{>type}}{{/with}} 26 | {{/compact}}
      27 | 28 | {{#with indexSignature}} 29 | {{> comment}} 30 | {{/with}} 31 | 32 | {{#if indexSignature.type.declaration}} 33 | {{#with indexSignature.type.declaration}} 34 | {{> parameter}} 35 | {{/with}} 36 | {{/if}} 37 |
    • 38 | {{/if}} 39 | {{#each children}} 40 |
    • 41 | {{#if signatures}} 42 |
      {{#compact}} 43 | {{#if flags.isRest}}...{{/if}} 44 | {{{wbr name}}} 45 | 46 | {{#if isOptional}}?{{/if}} 47 | :  48 | 49 | function 50 | {{/compact}}
      51 | 52 | {{> member.signatures}} 53 | {{else}} 54 |
      {{#compact}} 55 | {{#each flags}} 56 | {{this}}  57 | {{/each}} 58 | {{#if flags.isRest}}...{{/if}} 59 | {{{wbr name}}} 60 | 61 | {{#if flags.isOptional}}?{{/if}} 62 | :  63 | 64 | {{#with type}}{{>type}}{{/with}} 65 | {{/compact}}
      66 | 67 | {{> comment}} 68 | 69 | {{#if children}} 70 | {{> parameter}} 71 | {{/if}} 72 | 73 | {{#if type.declaration}} 74 | {{#with type.declaration}} 75 | {{> parameter}} 76 | {{/with}} 77 | {{/if}} 78 | {{/if}} 79 |
    • 80 | {{/each}} 81 |
    82 | -------------------------------------------------------------------------------- /src/default/partials/toc.hbs: -------------------------------------------------------------------------------- 1 |
  • 2 | {{{wbr title}}} 3 | {{#if children}} 4 |
      5 | {{#each children}} 6 | {{> toc}} 7 | {{/each}} 8 |
    9 | {{/if}} 10 |
  • 11 | -------------------------------------------------------------------------------- /src/default/partials/toc.root.hbs: -------------------------------------------------------------------------------- 1 | {{#if isInPath}} 2 | 3 |
      4 | {{/if}} 5 |
    • 6 | {{{wbr title}}} 7 | {{#if children}} 8 |
        9 | {{#each children}} 10 | {{> toc}} 11 | {{/each}} 12 |
      13 | {{/if}} 14 |
    • 15 | {{#if isInPath}} 16 |
    17 |
      18 | {{/if}} 19 | -------------------------------------------------------------------------------- /src/default/partials/type.hbs: -------------------------------------------------------------------------------- 1 | {{#if this}} 2 | {{#if reflection}} 3 | {{#compact}} 4 | 5 | {{reflection.name}} 6 | 7 | {{#if typeArguments}} 8 | < 9 | 10 | {{#each typeArguments}} 11 | {{#if @index}} 12 | , 13 | {{/if}}{{> type}} 14 | {{/each}} 15 | 16 | > 17 | {{/if}} 18 | {{/compact}} 19 | {{else if elementType}} 20 | {{#with elementType}} 21 | {{#compact}} 22 | {{#if types}} 23 | ( 24 | {{/if}} 25 | {{> type}} 26 | {{#if types}} 27 | ) 28 | {{/if}}[] 29 | {{/compact}} 30 | {{/with}} 31 | {{else if types}} 32 | {{#each types}} 33 | {{#if @index}} 34 | {{#ifCond ../type '==' 'intersection'}}&{{else}}|{{/ifCond}} 35 | {{/if}}{{> type}} 36 | {{/each}} 37 | {{else if elements}} 38 | {{#compact}} 39 | [ 40 | 41 | {{#each elements}} 42 | {{#if @index}} 43 | , 44 | {{/if}}{{> type}} 45 | {{/each}} 46 | 47 | ] 48 | {{/compact}} 49 | {{else}} 50 | {{#ifCond type '===' 'predicate'}} 51 | {{#compact}} 52 | {{#if asserts}} 53 | asserts  54 | {{/if}} 55 | {{name}} 56 | {{#if targetType}} 57 |  is  58 | {{#with targetType}} 59 | {{>type}} 60 | {{/with}} 61 | {{/if}} 62 | {{/compact}} 63 | {{else}} 64 | {{#compact}} 65 | 66 | {{#if name}} 67 | {{name}} 68 | {{else}} 69 | {{#if value}} 70 | "{{value}}" 71 | {{else}} 72 | {{this}} 73 | {{/if}} 74 | {{/if}} 75 | 76 | {{#if typeArguments}} 77 | < 78 | 79 | {{#each typeArguments}} 80 | {{#if @index}} 81 | , 82 | {{/if}}{{> type}} 83 | {{/each}} 84 | 85 | > 86 | {{/if}} 87 | {{/compact}} 88 | {{/ifCond}} 89 | {{/if}} 90 | {{else}} 91 | void 92 | {{/if}} -------------------------------------------------------------------------------- /src/default/partials/typeAndParent.hbs: -------------------------------------------------------------------------------- 1 | {{#compact}} 2 | {{#if this}} 3 | {{#if elementType}} 4 | {{#with elementType}} 5 | {{> typeAndParent}} 6 | {{/with}} 7 | [] 8 | {{else}} 9 | {{#if reflection}} 10 | {{#ifSignature reflection}} 11 | {{#if reflection.parent.parent.url}} 12 | {{reflection.parent.parent.name}} 13 | {{else}} 14 | {{reflection.parent.parent.name}} 15 | {{/if}} 16 | . 17 | {{#if reflection.parent.url}} 18 | {{reflection.parent.name}} 19 | {{else}} 20 | {{reflection.parent.name}} 21 | {{/if}} 22 | {{else}} 23 | {{#if reflection.parent.url}} 24 | {{reflection.parent.name}} 25 | {{else}} 26 | {{reflection.parent.name}} 27 | {{/if}} 28 | . 29 | {{#if reflection.url}} 30 | {{reflection.name}} 31 | {{else}} 32 | {{reflection.name}} 33 | {{/if}} 34 | {{/ifSignature}} 35 | {{else}} 36 | {{this}} 37 | {{/if}} 38 | {{/if}} 39 | {{else}} 40 | void 41 | {{/if}} 42 | {{/compact}} -------------------------------------------------------------------------------- /src/default/partials/typeParameters.hbs: -------------------------------------------------------------------------------- 1 |
        2 | {{#each typeParameters}} 3 |
      • 4 | {{#compact}} 5 | {{name}} 6 | {{#if type}} 7 | 8 | {{#with type}}{{> type}}{{/with}} 9 | {{/if}} 10 | {{/compact}} 11 | {{> comment}} 12 |
      • 13 | {{/each}} 14 |
      -------------------------------------------------------------------------------- /src/default/templates/index.hbs: -------------------------------------------------------------------------------- 1 |
      2 | {{#markdown}}{{{model.readme}}}{{/markdown}} 3 |
      -------------------------------------------------------------------------------- /src/default/templates/reflection.hbs: -------------------------------------------------------------------------------- 1 | {{#with model}} 2 | {{#if hasComment}} 3 |
      4 | {{> comment}} 5 |
      6 | {{/if}} 7 | {{/with}} 8 | 9 | {{#if model.typeParameters}} 10 |
      11 |

      Type parameters

      12 | {{#with model}}{{> typeParameters}}{{/with}} 13 |
      14 | {{/if}} 15 | 16 | {{#if model.typeHierarchy}} 17 |
      18 |

      Hierarchy

      19 | {{#with model.typeHierarchy}}{{> hierarchy}}{{/with}} 20 |
      21 | {{/if}} 22 | 23 | {{#if model.implementedTypes}} 24 |
      25 |

      Implements

      26 |
        27 | {{#each model.implementedTypes}} 28 |
      • {{> type}}
      • 29 | {{/each}} 30 |
      31 |
      32 | {{/if}} 33 | 34 | {{#if model.implementedBy}} 35 |
      36 |

      Implemented by

      37 |
        38 | {{#each model.implementedBy}} 39 |
      • {{> type}}
      • 40 | {{/each}} 41 |
      42 |
      43 | {{/if}} 44 | 45 | {{#if model.signatures}} 46 |
      47 |

      Callable

      48 | {{#with model}}{{> member.signatures}}{{/with}} 49 |
      50 | {{/if}} 51 | 52 | {{#if model.indexSignature}} 53 |
      54 |

      Indexable

      55 |
      {{#compact}} 56 | [ 57 | {{#each model.indexSignature.parameters}} 58 | {{name}}: {{#with type}}{{>type}}{{/with}} 59 | {{/each}} 60 | ]:  61 | {{#with model.indexSignature.type}}{{>type}}{{/with}} 62 | {{/compact}}
      63 | 64 | {{#with model.indexSignature}} 65 | {{> comment}} 66 | {{/with}} 67 | 68 | {{#if model.indexSignature.type.declaration}} 69 | {{#with model.indexSignature.type.declaration}} 70 | {{> parameter}} 71 | {{/with}} 72 | {{/if}} 73 |
      74 | {{/if}} 75 | 76 | {{#with model}} 77 | {{> index}} 78 | {{> members}} 79 | {{/with}} -------------------------------------------------------------------------------- /src/minimal/layouts/default.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{model.name}} | {{project.name}} 7 | 8 | 9 | 10 | 11 | 12 | 13 | {{> header}} 14 | 15 | 22 | 23 |
      24 |
      25 | {{#if model.readme}} 26 |
      27 | {{#markdown}}{{{model.readme}}}{{/markdown}} 28 |
      29 | {{/if}} 30 | 31 | {{{contents}}} 32 | {{> footer}} 33 |
      34 |
      35 | 36 | 39 | 40 | {{> analytics}} 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /src/minimal/partials/header.hbs: -------------------------------------------------------------------------------- 1 |
      2 |
      3 |
      4 |
      5 | 8 |
      9 |
      10 | Options 11 |
      12 |
      13 | All 14 |
        15 |
      • Public
      • 16 |
      • Public/Protected
      • 17 |
      • All
      • 18 |
      19 |
      20 | 21 | 22 | 23 | 24 | {{#unless settings.excludeExternals}} 25 | 26 | 27 | {{/unless}} 28 | 29 | 30 | 31 |
      32 |
      33 | Menu 34 |
      35 |
      36 |
      37 |
      38 |
      -------------------------------------------------------------------------------- /src/minimal/partials/member.hbs: -------------------------------------------------------------------------------- 1 |
      2 | 3 | {{#if name}} 4 |

      {{#each flags}}{{this}} {{/each}}{{{wbr name}}}

      5 | {{/if}} 6 | 7 | {{#if signatures}} 8 | {{> member.signatures}} 9 | {{else}} 10 | {{> member.declaration}} 11 | {{/if}} 12 | 13 | {{#unless isContainer}} 14 | {{#each groups}} 15 | {{#each children}} 16 | {{#unless hasOwnDocument}} 17 | {{> member}} 18 | {{/unless}} 19 | {{/each}} 20 | {{/each}} 21 | {{/unless}} 22 |
      23 | 24 | {{#if isContainer}} 25 | {{> index}} 26 | {{> members}} 27 | {{/if}} 28 | -------------------------------------------------------------------------------- /src/minimal/templates/index.hbs: -------------------------------------------------------------------------------- 1 | {{#with model}} 2 | {{> comment}} 3 | {{/with}} 4 | 5 | {{#if model.typeHierarchy}} 6 |
      7 |

      Hierarchy

      8 | {{#with model.typeHierarchy}}{{> hierarchy}}{{/with}} 9 |
      10 | {{/if}} 11 | 12 | {{#with model}} 13 |
      14 | {{> index}} 15 | {{> members}} 16 | {{/with}} -------------------------------------------------------------------------------- /src/plugin.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/millsp/eledoc/68e136cfa5c8555d07864875b140e21080c580cb/src/plugin.js --------------------------------------------------------------------------------