├── .swift-version ├── .dockerignore ├── Procfile ├── Public ├── favicon.ico ├── img │ ├── preview.png │ ├── ci-architecture.png │ ├── gi.svg │ └── gitignoreio.svg ├── components │ ├── bootstrap │ │ └── dist │ │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ └── js │ │ │ └── npm.js │ ├── select2 │ │ └── dist │ │ │ ├── js │ │ │ └── i18n │ │ │ │ ├── zh-TW.js │ │ │ │ ├── az.js │ │ │ │ ├── zh-CN.js │ │ │ │ ├── fi.js │ │ │ │ ├── ja.js │ │ │ │ ├── hu.js │ │ │ │ ├── th.js │ │ │ │ ├── tr.js │ │ │ │ ├── ko.js │ │ │ │ ├── id.js │ │ │ │ ├── vi.js │ │ │ │ ├── is.js │ │ │ │ ├── ar.js │ │ │ │ ├── de.js │ │ │ │ ├── et.js │ │ │ │ ├── km.js │ │ │ │ ├── nb.js │ │ │ │ ├── sv.js │ │ │ │ ├── bg.js │ │ │ │ ├── ms.js │ │ │ │ ├── gl.js │ │ │ │ ├── da.js │ │ │ │ ├── en.js │ │ │ │ ├── he.js │ │ │ │ ├── hi.js │ │ │ │ ├── fa.js │ │ │ │ ├── hr.js │ │ │ │ ├── eu.js │ │ │ │ ├── mk.js │ │ │ │ ├── pt-BR.js │ │ │ │ ├── lv.js │ │ │ │ ├── pt.js │ │ │ │ ├── ca.js │ │ │ │ ├── es.js │ │ │ │ ├── it.js │ │ │ │ ├── fr.js │ │ │ │ ├── nl.js │ │ │ │ ├── ro.js │ │ │ │ ├── lt.js │ │ │ │ ├── pl.js │ │ │ │ ├── el.js │ │ │ │ ├── sr.js │ │ │ │ ├── sr-Cyrl.js │ │ │ │ ├── uk.js │ │ │ │ ├── ru.js │ │ │ │ ├── sk.js │ │ │ │ └── cs.js │ │ │ └── css │ │ │ └── select2.min.css │ └── flatdoc │ │ └── v │ │ └── 0.9.0 │ │ ├── templates │ │ ├── blank.html │ │ └── template.html │ │ ├── theme-white │ │ └── script.js │ │ └── legacy.js ├── css │ ├── carbonv.css │ ├── carbonh.css │ ├── theme-gitignore-style.less │ ├── app.css │ └── app.less ├── js │ ├── app.js │ └── theme-gitignore-script.js └── README.md ├── .gitmodules ├── Sources ├── Run │ └── main.swift └── App │ ├── Models │ ├── Flags.swift │ ├── Dropdown.swift │ ├── IgnoreTemplateModeling.swift │ └── IgnoreTemplateModel.swift │ ├── Extensions │ ├── Sequence+Extensions.swift │ ├── FileManager+Extensions.swift │ ├── URL+Extensions.swift │ ├── String+Extensions.swift │ ├── Router+Extensions.swift │ └── Dictionary+Extensions.swift │ ├── Controllers │ ├── ReadOnlyTemplateManagerProtocol.swift │ └── TemplateController.swift │ ├── Enum │ └── TemplateSuffix.swift │ ├── Server.swift │ └── RouteHandlers │ ├── SiteRouteHandlers.swift │ └── APIRouteHandlers.swift ├── Dockerfile ├── docker-compose.yml ├── app.json ├── .travis ├── update-submodule.sh └── ci.sh ├── Tests ├── LinuxMain.swift └── AppTests │ ├── Controllers │ └── TemplateControllerTests.swift │ ├── Models │ └── IgnoreTemplateModelTests.swift │ ├── Extensions │ ├── URL+ExtensionsTests.swift │ ├── Sequence+ExtensionsTest.swift │ └── String+ExtensionsTests.swift │ └── RouteHandlers │ ├── SiteHandlersTests.swift │ └── APIHandlersTests.swift ├── .github ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE.md └── CODE_OF_CONDUCT.md ├── Localizations ├── ar.json ├── en.json ├── pt_BR.json ├── fr_FR.json └── de_DE.json ├── LICENSE.md ├── Package.swift ├── .travis.yml ├── .gitignore ├── .swiftlint.yml ├── Resources └── Views │ ├── base.leaf │ ├── docs.leaf │ └── index.leaf ├── Package.pins ├── Package.resolved └── README.md /.swift-version: -------------------------------------------------------------------------------- 1 | 4.1 2 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | Packages 2 | .build 3 | 4 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: Run serve --env production --port $PORT --hostname 0.0.0.0 2 | -------------------------------------------------------------------------------- /Public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/gitignore.io/master/Public/favicon.ico -------------------------------------------------------------------------------- /Public/img/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/gitignore.io/master/Public/img/preview.png -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "gitignore"] 2 | path = gitignore 3 | url = https://github.com/dvcs/gitignore.git 4 | -------------------------------------------------------------------------------- /Sources/Run/main.swift: -------------------------------------------------------------------------------- 1 | import App 2 | 3 | let gitignore = Gitignore() 4 | try gitignore.app(.detect()).run() 5 | -------------------------------------------------------------------------------- /Public/img/ci-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/gitignore.io/master/Public/img/ci-architecture.png -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM vapor/vapor:1.0.9-xenial 2 | 3 | WORKDIR /app 4 | 5 | COPY ./ ./ 6 | 7 | RUN vapor build 8 | 9 | EXPOSE 8080 10 | 11 | # CMD vapor run 12 | 13 | -------------------------------------------------------------------------------- /Public/components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/gitignore.io/master/Public/components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /Public/components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/gitignore.io/master/Public/components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /Public/components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/gitignore.io/master/Public/components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /Public/components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/gitignore.io/master/Public/components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /Sources/App/Models/Flags.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Flags.swift 3 | // App 4 | // 5 | // Created by Joe Blau on 6/21/18. 6 | // 7 | 8 | import Vapor 9 | 10 | struct Flags: Content { 11 | var term: String? 12 | var format: String? 13 | } 14 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.5" 2 | 3 | services: 4 | app: 5 | image: gitignore-io:latest 6 | build: 7 | context: ./ 8 | dockerfile: Dockerfile 9 | ports: 10 | - "8080:8080" 11 | command: vapor run 12 | -------------------------------------------------------------------------------- /Sources/App/Models/Dropdown.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Dropdown.swift 3 | // App 4 | // 5 | // Created by Joe Blau on 6/9/18. 6 | // 7 | 8 | import Vapor 9 | 10 | internal struct Dropdown: Content { 11 | var id: String 12 | var text: String 13 | } 14 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GitignoreIO", 3 | "scripts": {}, 4 | "env": {}, 5 | "formation": {}, 6 | "addons": [], 7 | "buildpacks": [ 8 | { 9 | "url": "https://github.com/kylef/heroku-buildpack-swift" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /.travis/update-submodule.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd gitignore 4 | git pull origin master 5 | cd .. 6 | 7 | pwd 8 | if [[ `git status --porcelain` ]]; then 9 | echo "status: Updating templates" 10 | git add . 11 | git commit -m "Upading templates from https://github.com/dvcs/gitignore" 12 | git push origin master 13 | else 14 | echo "status: No updates" 15 | fi 16 | -------------------------------------------------------------------------------- /Sources/App/Extensions/Sequence+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Sequence+Extensions.swift 3 | // GitignoreIO 4 | // 5 | // Created by Joseph Blau on 1/29/17. 6 | // 7 | // 8 | 9 | import Foundation 10 | 11 | public extension Sequence where Iterator.Element: Hashable { 12 | var uniqueElements: [Iterator.Element] { 13 | return Array( Set(self) ) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Sources/App/Controllers/ReadOnlyTemplateManagerProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ReadOnlyTemplateManagerProtocol.swift 3 | // GitignoreIO 4 | // 5 | // Created by Joseph Blau on 1/29/17. 6 | // 7 | // 8 | 9 | internal protocol ReadOnlyTemplateManagerProtocol { 10 | var order: [String: Int] { get } 11 | var count: Int { get } 12 | var templates: [String: IgnoreTemplateModel] { get } 13 | } 14 | -------------------------------------------------------------------------------- /Sources/App/Models/IgnoreTemplateModeling.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IgnoreTemplateModeling.swift 3 | // GitignoreIO 4 | // 5 | // Created by Joseph Blau on 1/29/17. 6 | // 7 | // 8 | 9 | internal protocol IgnoreTemplateModeling: Codable { 10 | var key: String { get set } 11 | var name: String { get set } 12 | var fileName: String { get set } 13 | var contents: String { get set } 14 | } 15 | -------------------------------------------------------------------------------- /Tests/LinuxMain.swift: -------------------------------------------------------------------------------- 1 | #if os(Linux) 2 | 3 | import XCTest 4 | @testable import AppTests 5 | 6 | XCTMain([ 7 | testCase(TemplateControllerTests.allTests), 8 | testCase(IgnoreTemplateModelTests.allTests), 9 | testCase(String_ExtensionsTests.allTests), 10 | testCase(URL_ExtensionsTests.allTests), 11 | testCase(APIHandlersTests.allTests), 12 | testCase(SiteHandlersTests.allTests), 13 | ]) 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /Sources/App/Extensions/FileManager+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FileManager+Extensions.swift 3 | // App 4 | // 5 | // Created by Joe Blau on 6/23/18. 6 | // 7 | 8 | import Foundation 9 | 10 | extension FileManager { 11 | func templatePathsFor(_ dataDirectory: URL) -> [URL]? { 12 | return self.enumerator(at: dataDirectory, includingPropertiesForKeys: nil)? 13 | .allObjects 14 | .compactMap { (templatePath: Any) -> URL? in 15 | templatePath as? URL 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Public/components/bootstrap/dist/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /Sources/App/Models/IgnoreTemplateModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IgnoreTemplateModel.swift 3 | // GitignoreIO 4 | // 5 | // Created by Joe Blau on 12/18/16. 6 | // 7 | // 8 | 9 | import Vapor 10 | 11 | internal struct IgnoreTemplateModel: IgnoreTemplateModeling { 12 | var key: String 13 | var name: String 14 | var fileName: String 15 | var contents: String 16 | } 17 | 18 | extension IgnoreTemplateModel: CustomStringConvertible { 19 | var description: String { 20 | return "KEY: \(key)\nNAME: \(name)FILE NAME: \(fileName)\nCONTENTS: \(contents)\n" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/zh-TW.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="請刪掉"+t+"個字元";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="請再輸入"+t+"個字元";return n},loadingMore:function(){return"載入中…"},maximumSelected:function(e){var t="你只能選擇最多"+e.maximum+"項";return t},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Vision 2 | 3 | Gitignore.io's vision is to become the authoritative source for `.gitignore` templates. Gitignore provides templates for Operating Systems, IDEs and Programming Languages, but can eventually grow to encompass other creative spaces as well. 4 | 5 | ## Ways You Can Help 6 | 7 | 1. **Add Templates** - Add templates for Programming Languages, Operating Systems and IDEs at [@dvcs/gitignore](https://github.com/dvcs/gitignore) 8 | 2. **Explore** - Create better ways for users to interact with gitignore.io. 9 | 3. **Donate** - [Donate](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5J2MWBD73BQAS) to help cover server costs. 10 | -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/az.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/az",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return t+" simvol silin"},inputTooShort:function(e){var t=e.minimum-e.input.length;return t+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(e){return"Sadəcə "+e.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/zh-CN.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="请删除"+t+"个字符";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="请再输入至少"+t+"个字符";return n},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(e){var t="最多只能选择"+e.maximum+"个项目";return t},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/fi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Ole hyvä ja anna "+t+" merkkiä vähemmän"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Ole hyvä ja anna "+t+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(e){return"Voit valita ainoastaan "+e.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/ja.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" 文字を削除してください";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="少なくとも "+t+" 文字を入力してください";return n},loadingMore:function(){return"読み込み中…"},maximumSelected:function(e){var t=e.maximum+" 件しか選択できません";return t},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/hu.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Túl hosszú. "+t+" karakterrel több, mint kellene."},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Túl rövid. Még "+t+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Sources/App/Extensions/URL+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // URL+Extensions.swift 3 | // GitignoreIO 4 | // 5 | // Created by Joseph Blau on 1/29/17. 6 | // 7 | // 8 | 9 | import Foundation 10 | 11 | internal extension URL { 12 | 13 | /// Name of file without extension 14 | internal var name: String { 15 | return self.deletingPathExtension().lastPathComponent 16 | } 17 | 18 | /// Name of file first component 19 | internal var stackName: String? { 20 | return self.deletingPathExtension().lastPathComponent.components(separatedBy: ".").first 21 | } 22 | 23 | /// Name of file with extension 24 | internal var fileName: String { 25 | return self.lastPathComponent 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/th.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/th",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="โปรดลบออก "+t+" ตัวอักษร";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="โปรดพิมพ์เพิ่มอีก "+t+" ตัวอักษร";return n},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(e){var t="คุณสามารถเลือกได้ไม่เกิน "+e.maximum+" รายการ";return t},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/tr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/tr",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" karakter daha girmelisiniz";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="En az "+t+" karakter daha girmelisiniz";return n},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(e){var t="Sadece "+e.maximum+" seçim yapabilirsiniz";return t},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/ko.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="너무 깁니다. "+t+" 글자 지워주세요.";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="너무 짧습니다. "+t+" 글자 더 입력해주세요.";return n},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(e){var t="최대 "+e.maximum+"개까지만 선택 가능합니다.";return t},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/id.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Hapuskan "+t+" huruf"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Masukkan "+t+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(e){return"Anda hanya dapat memilih "+e.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/vi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/vi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vui lòng nhập ít hơn "+t+" ký tự";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vui lòng nhập nhiều hơn "+t+' ký tự"';return n},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(e){var t="Chỉ có thể chọn được "+e.maximum+" lựa chọn";return t},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Sources/App/Extensions/String+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String+Extensions.swift 3 | // GitignoreIO 4 | // 5 | // Created by Joe Blau on 12/18/16. 6 | // 7 | // 8 | 9 | import Foundation 10 | 11 | internal extension String { 12 | /// Remove duplicate lines, except blank strings or comment strings 13 | /// 14 | /// - Returns: String with duplicate lines removed 15 | internal func removeDuplicateLines() -> String { 16 | return self.components(separatedBy: "\n") 17 | .reduce([String]()) { 18 | if !$1.isEmpty && !$1.hasPrefix("#") && $0.contains($1) { 19 | return $0 20 | } 21 | return $0 + [$1] 22 | } 23 | .joined(separator: "\n") 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/is.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/is",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vinsamlegast styttið texta um "+t+" staf";return t<=1?n:n+"i"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vinsamlegast skrifið "+t+" staf";return t>1&&(n+="i"),n+=" í viðbót",n},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(e){return"Þú getur aðeins valið "+e.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Sources/App/Enum/TemplateSuffix.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TemplateSuffix.swift 3 | // GitignoreIO 4 | // 5 | // Created by Joseph Blau on 1/29/17. 6 | // 7 | // 8 | 9 | /// Template Suffix Enum 10 | internal enum TemplateSuffix { 11 | case template, patch, stack 12 | 13 | internal var `extension`: String { 14 | switch self { 15 | case .template: return "gitignore" 16 | case .patch: return "patch" 17 | case .stack: return "stack" 18 | } 19 | } 20 | 21 | internal func header(name: String) -> String { 22 | switch self { 23 | case .template: return "\n### \(name) ###\n" 24 | case .patch: return "\n### \(name) Patch ###\n" 25 | case .stack: return "\n### \(name) Stack ###\n" 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/ar.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="الرجاء حذف "+t+" عناصر";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="الرجاء إضافة "+t+" عناصر";return n},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(e){var t="تستطيع إختيار "+e.maximum+" بنود فقط";return t},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/de.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/de",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Bitte "+t+" Zeichen weniger eingeben"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Bitte "+t+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var t="Sie können nur "+e.maximum+" Eintr";return e.maximum===1?t+="ag":t+="äge",t+=" auswählen",t},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/et.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" vähem",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" rohkem",n},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var t="Saad vaid "+e.maximum+" tulemus";return e.maximum==1?t+="e":t+="t",t+=" valida",t},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/css/carbonv.css: -------------------------------------------------------------------------------- 1 | #carbonads { 2 | display: block; 3 | overflow: hidden; 4 | padding: 1em; 5 | background-color: #ffffff; 6 | border: solid 1px #cccccc; 7 | border-radius: 3px; 8 | font-size: 13px; 9 | line-height: 1.5; 10 | max-width: 360px; 11 | } 12 | 13 | #carbonads a {} 14 | 15 | #carbonads a:hover { 16 | color: inherit; 17 | } 18 | 19 | #carbonads span { 20 | display: block; 21 | overflow: hidden; 22 | } 23 | 24 | .carbon-img { 25 | display: block; 26 | margin: 0 auto 1em; 27 | text-align: center; 28 | } 29 | 30 | .carbon-text { 31 | display: block; 32 | margin-bottom: 1em; 33 | text-align: left; 34 | } 35 | 36 | .carbon-poweredby { 37 | position: absolute; 38 | right: 0; 39 | bottom: 0; 40 | display: block; 41 | font-size: 12px; 42 | } 43 | -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/km.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="សូមលុបចេញ "+t+" អក្សរ";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="សូមបញ្ចូល"+t+" អក្សរ រឺ ច្រើនជាងនេះ";return n},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(e){var t="អ្នកអាចជ្រើសរើសបានតែ "+e.maximum+" ជម្រើសប៉ុណ្ណោះ";return t},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/nb.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Vennligst fjern "+t+" tegn"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vennligst skriv inn ";return t>1?n+=" flere tegn":n+=" tegn til",n},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/sv.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vänligen sudda ut "+t+" tecken";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vänligen skriv in "+t+" eller fler tecken";return n},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(e){var t="Du kan max välja "+e.maximum+" element";return t},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Tests/AppTests/Controllers/TemplateControllerTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TemplateControllerTests.swift 3 | // GitignoreIO 4 | // 5 | // Created by Joe Blau on 12/22/16. 6 | // 7 | // 8 | 9 | import XCTest 10 | import Vapor 11 | 12 | import Foundation 13 | 14 | @testable import App 15 | 16 | class TemplateControllerTests: XCTestCase { 17 | 18 | static let allTests = [ 19 | ("testIncorrectDataDirectory", testIncorrectDataDirectory), 20 | ] 21 | 22 | func testIncorrectDataDirectory() { 23 | let rootDirectory = URL(fileURLWithPath: "") 24 | let noFile = URL(fileURLWithPath: "") 25 | let templateController = TemplateController(dataDirectory: rootDirectory, orderFile: noFile) 26 | XCTAssertEqual(templateController.order.count , 0) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/bg.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/bg",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Моля въведете с "+t+" по-малко символ";return t>1&&(n+="a"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Моля въведете още "+t+" символ";return t>1&&(n+="a"),n},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(e){var t="Можете да направите до "+e.maximum+" ";return e.maximum>1?t+="избора":t+="избор",t},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/ms.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Sila hapuskan "+t+" aksara"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Sila masukkan "+t+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(e){return"Anda hanya boleh memilih "+e.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/gl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/gl",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Elimine ";return t===1?n+="un carácter":n+=t+" caracteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Engada ";return t===1?n+="un carácter":n+=t+" caracteres",n},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){var t="Só pode ";return e.maximum===1?t+="un elemento":t+=e.maximum+" elementos",t},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/flatdoc/v/0.9.0/templates/blank.html: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/da.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Angiv venligst "+t+" tegn mindre";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Angiv venligst "+t+" tegn mere";return n},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var t="Du kan kun vælge "+e.maximum+" emne";return e.maximum!=1&&(t+="r"),t},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/en.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Please enter "+t+" or more characters";return n},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Sources/App/Extensions/Router+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Router+Extensions.swift 3 | // App 4 | // 5 | // Created by Joe Blau on 7/2/18. 6 | // 7 | 8 | import Vapor 9 | 10 | extension Request { 11 | var acceptLanguage: String { 12 | get { 13 | guard let accpetLanguage = self.http 14 | .headers 15 | .firstValue(name: .acceptLanguage)? 16 | .split(separator: ",") 17 | .first else { 18 | return "en" 19 | } 20 | switch accpetLanguage { 21 | case "en-US", "en-us": return "en" 22 | case "de-DE", "de-de": return "de_DE" 23 | case "pt-BR", "pt-br": return "pt_BR" 24 | case "ar": return "ar" 25 | default: return "en" 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/he.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="נא למחוק ";return t===1?n+="תו אחד":n+=t+" תווים",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="נא להכניס ";return t===1?n+="תו אחד":n+=t+" תווים",n+=" או יותר",n},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(e){var t="באפשרותך לבחור עד ";return e.maximum===1?t+="פריט אחד":t+=e.maximum+" פריטים",t},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/hi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" अक्षर को हटा दें";return t>1&&(n=t+" अक्षरों को हटा दें "),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="कृपया "+t+" या अधिक अक्षर दर्ज करें";return n},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(e){var t="आप केवल "+e.maximum+" आइटम का चयन कर सकते हैं";return t},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/fa.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="لطفاً "+t+" کاراکتر را حذف نمایید";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="لطفاً تعداد "+t+" کاراکتر یا بیشتر وارد نمایید";return n},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(e){var t="شما تنها میتوانید "+e.maximum+" آیتم را انتخاب نمایید";return t},noResults:function(){return"هیچ نتیجهای یافت نشد"},searching:function(){return"در حال جستجو..."}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/hr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hr",[],function(){function e(e){var t=" "+e+" znak";return e%10<5&&e%10>0&&(e%100<5||e%100>19)?e%10>1&&(t+="a"):t+="ova",t}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Unesite "+e(n)},inputTooShort:function(t){var n=t.minimum-t.input.length;return"Unesite još "+e(n)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(e){return"Maksimalan broj odabranih stavki je "+e.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/eu.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gutxiago",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gehiago",n},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return e.maximum===1?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/mk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/mk",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Ве молиме внесете "+e.maximum+" помалку карактер";return e.maximum!==1&&(n+="и"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Ве молиме внесете уште "+e.maximum+" карактер";return e.maximum!==1&&(n+="и"),n},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(e){var t="Можете да изберете само "+e.maximum+" ставк";return e.maximum===1?t+="а":t+="и",t},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/pt-BR.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Apague "+t+" caracter";return t!=1&&(n+="es"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Digite "+t+" ou mais caracteres";return n},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var t="Você só pode selecionar "+e.maximum+" ite";return e.maximum==1?t+="m":t+="ns",t},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/lv.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lv",[],function(){function e(e,t,n,r){return e===11?t:e%10===1?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Lūdzu ievadiet par "+n;return r+=" simbol"+e(n,"iem","u","iem"),r+" mazāk"},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Lūdzu ievadiet vēl "+n;return r+=" simbol"+e(n,"us","u","us"),r},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(t){var n="Jūs varat izvēlēties ne vairāk kā "+t.maximum;return n+=" element"+e(t.maximum,"us","u","us"),n},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/pt.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor apague "+t+" ";return n+=t!=1?"caracteres":"carácter",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Introduza "+t+" ou mais caracteres";return n},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var t="Apenas pode seleccionar "+e.maximum+" ";return t+=e.maximum!=1?"itens":"item",t},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/ca.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Si us plau, elimina "+t+" car";return t==1?n+="àcter":n+="àcters",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Si us plau, introdueix "+t+" car";return t==1?n+="àcter":n+="àcters",n},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var t="Només es pot seleccionar "+e.maximum+" element";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/es.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"La carga falló"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor, elimine "+t+" car";return t==1?n+="ácter":n+="acteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Por favor, introduzca "+t+" car";return t==1?n+="ácter":n+="acteres",n},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var t="Sólo puede seleccionar "+e.maximum+" elemento";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/css/carbonh.css: -------------------------------------------------------------------------------- 1 | #carbonads { 2 | display: block; 3 | overflow: hidden; 4 | padding: 1em; 5 | background-color: #ffffff; 6 | border: solid 1px #cccccc; 7 | border-radius: 3px; 8 | font-size: 13px; 9 | line-height: 1.5; 10 | max-width: 360px; 11 | } 12 | 13 | #carbonads a {} 14 | 15 | #carbonads a:hover { 16 | color: inherit; 17 | } 18 | 19 | #carbonads span { 20 | position: relative; 21 | display: block; 22 | overflow: hidden; 23 | } 24 | 25 | .carbon-img { 26 | float: left; 27 | margin-right: 1em; 28 | } 29 | 30 | .carbon-img img { 31 | display: block; 32 | } 33 | 34 | .carbon-text { 35 | display: block; 36 | float: left; 37 | max-width: calc(100% - 130px - 1em); 38 | text-align: left; 39 | } 40 | 41 | .carbon-poweredby { 42 | position: absolute; 43 | right: 0; 44 | bottom: 0; 45 | display: block; 46 | font-size: 12px; 47 | } 48 | -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/it.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Per favore cancella "+t+" caratter";return t!==1?n+="i":n+="e",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Per favore inserisci "+t+" o più caratteri";return n},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var t="Puoi selezionare solo "+e.maximum+" element";return e.maximum!==1?t+="i":t+="o",t},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/fr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Supprimez "+t+" caractère";return t!==1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Saisissez "+t+" caractère";return t!==1&&(n+="s"),n},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){var t="Vous pouvez seulement sélectionner "+e.maximum+" élément";return e.maximum!==1&&(t+="s"),t},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/nl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Gelieve "+t+" karakters te verwijderen";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Gelieve "+t+" of meer karakters in te voeren";return n},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var t=e.maximum==1?"kan":"kunnen",n="Er "+t+" maar "+e.maximum+" item";return e.maximum!=1&&(n+="s"),n+=" worden geselecteerd",n},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/ro.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ro",[],function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return t!==1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vă rugăm să introduceți "+t+"sau mai multe caractere";return n},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",e.maximum!==1&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/lt.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lt",[],function(){function e(e,t,n,r){return e%10===1&&(e%100<11||e%100>19)?t:e%10>=2&&e%10<=9&&(e%100<11||e%100>19)?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Pašalinkite "+n+" simbol";return r+=e(n,"į","ius","ių"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Įrašykite dar "+n+" simbol";return r+=e(n,"į","ius","ių"),r},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(t){var n="Jūs galite pasirinkti tik "+t.maximum+" element";return n+=e(t.maximum,"ą","us","ų"),n},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Tests/AppTests/Models/IgnoreTemplateModelTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IgnoreTemplateModelTests.swift 3 | // GitignoreIO 4 | // 5 | // Created by Joe Blau on 12/21/16. 6 | // 7 | // 8 | 9 | import XCTest 10 | 11 | @testable import App 12 | 13 | class IgnoreTemplateModelTests: XCTestCase { 14 | static let allTests = [ 15 | ("testDescription", testDescription), 16 | ("testJSON", testJSON), 17 | ] 18 | 19 | func testDescription() { 20 | let item = IgnoreTemplateModel(key: "a", name: "b", fileName: "c", contents: "d") 21 | XCTAssertEqual("\(item)", "KEY: a\nNAME: bFILE NAME: c\nCONTENTS: d\n") 22 | } 23 | 24 | func testJSON() { 25 | let item = IgnoreTemplateModel(key: "a", name: "b", fileName: "c", contents: "d") 26 | XCTAssertEqual(item.name, "b") 27 | XCTAssertEqual(item.fileName, "c") 28 | XCTAssertEqual(item.contents, "d") 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/pl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pl",[],function(){var e=["znak","znaki","znaków"],t=["element","elementy","elementów"],n=function(t,n){if(t===1)return n[0];if(t>1&&t<=4)return n[1];if(t>=5)return n[2]};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Usuń "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Podaj przynajmniej "+r+" "+n(r,e)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(e){return"Możesz zaznaczyć tylko "+e.maximum+" "+n(e.maximum,t)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Localizations/ar.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "إنشاء ملفات .gitignore مفيدة لمشروعك - gitignore.io", 3 | "description": "Create useful .gitignore files for your project by selecting from %{templateCount} Operating System, IDE, and Programming Language .gitignore templates", 4 | "subtitle": "إنشاء ملفات .gitignore مفيدة لمشروعك", 5 | "searchPlaceholder": "ابحث عن أنظمة تشغيل، IDEs، أو لغات برمجة", 6 | "searchGo": "إنشاء", 7 | "searchDownload": "تحميل ملف", 8 | "footer": "قوالب نظام تشغيل، IDE، ولغة برمجة لملف .gitignore %{templateCount}", 9 | "commandLineTitle": "توثيق سطر اﻷوامر", 10 | "commandLineDescription": "تعلم كيفية تشغيل .gitignore.io من سطر اﻷوامر", 11 | "videoTitle": "مشاهدة مقطع فيديو تعليمي", 12 | "videoDescription": "مشاهدة فيديو تعليمي حول كيفية عمل .gitignore.io", 13 | "sourceCodeTitle": "شفرة مصدرية", 14 | "sourceCodeDescription": "الشفرة المصدرية لـ.gitignore.io مستضافة على GitHub" 15 | } 16 | -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/el.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Παρακαλώ διαγράψτε "+t+" χαρακτήρ";return t==1&&(n+="α"),t!=1&&(n+="ες"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Παρακαλώ συμπληρώστε "+t+" ή περισσότερους χαρακτήρες";return n},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(e){var t="Μπορείτε να επιλέξετε μόνο "+e.maximum+" επιλογ";return e.maximum==1&&(t+="ή"),e.maximum!=1&&(t+="ές"),t},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/sr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Obrišite "+n+" simbol";return r+=e(n,"","a","a"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Ukucajte bar još "+n+" simbol";return r+=e(n,"","a","a"),r},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(t){var n="Možete izabrati samo "+t.maximum+" stavk";return n+=e(t.maximum,"u","e","i"),n},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/sr-Cyrl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr-Cyrl",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Обришите "+n+" симбол";return r+=e(n,"","а","а"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Укуцајте бар још "+n+" симбол";return r+=e(n,"","а","а"),r},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(t){var n="Можете изабрати само "+t.maximum+" ставк";return n+=e(t.maximum,"у","е","и"),n},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/uk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/uk",[],function(){function e(e,t,n,r){return e%100>10&&e%100<15?r:e%10===1?t:e%10>1&&e%10<5?n:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Будь ласка, видаліть "+n+" "+e(t.maximum,"літеру","літери","літер")},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Будь ласка, введіть "+t+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(t){return"Ви можете вибрати лише "+t.maximum+" "+e(t.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/ru.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ru",[],function(){function e(e,t,n,r){return e%10<5&&e%10>0&&e%100<5||e%100>20?e%10>1?n:t:r}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Пожалуйста, введите на "+n+" символ";return r+=e(n,"","a","ов"),r+=" меньше",r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Пожалуйста, введите еще хотя бы "+n+" символ";return r+=e(n,"","a","ов"),r},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(t){var n="Вы можете выбрать не более "+t.maximum+" элемент";return n+=e(t.maximum,"","a","ов"),n},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Localizations/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "gitignore.io - Create Useful .gitignore Files For Your Project", 3 | "description": "Create useful .gitignore files for your project by selecting from %{templateCount} Operating System, IDE, and Programming Language .gitignore templates", 4 | "subtitle": "Create useful .gitignore files for your project", 5 | "searchPlaceholder": "Search Operating Systems, IDEs, or Programming Languages", 6 | "searchGo": "Create", 7 | "searchDownload": "Download File", 8 | "footer": "%{templateCount} Operating System, IDE, and Programming Language .gitignore templates", 9 | "commandLineTitle": "Command Line Docs", 10 | "commandLineDescription": "Learn how to run .gitignore.io from the command line", 11 | "videoTitle": "Watch Video Tutorial", 12 | "videoDescription": "Watch a video to learn how .gitignore.io works", 13 | "sourceCodeTitle": "Source Code", 14 | "sourceCodeDescription": "GitHub hosted source code for .gitignore.io" 15 | } 16 | -------------------------------------------------------------------------------- /Localizations/pt_BR.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "gitignore.io - Crie Arquivos .gitignore Úteis Para Seu Projeto.", 3 | "description": "Crie arquivos .gitignore úteis para o seu projeto selecionando os %{templateCount} templates de Sistemas Operacionais, IDEs e linguagens de Programação.", 4 | "subtitle": "Crie arquivos .gitignore úteis para o seu projeto.", 5 | "searchPlaceholder": "Pesquise Sistemas Operacionais, IDEs ou Linguagens de Programação.", 6 | "searchGo": "Criar", 7 | "searchDownload": "Baixar Arquivo", 8 | "footer": "%{templateCount} Templates de .gitignore de Sistemas Operacionais, IDEs e Linguagens de Programação.", 9 | "commandLineTitle": "Documentação", 10 | "commandLineDescription": "Saiba como executar o .gitignore.io a partir da Linha de Comando", 11 | "videoTitle": "Assista ao Vídeo Tutorial", 12 | "videoDescription": "Assista a um vídeo para aprender como funciona o .gitignore.io", 13 | "sourceCodeTitle": "Código-fonte", 14 | "sourceCodeDescription": "Código-fonte hospedado no GitHub" 15 | } 16 | -------------------------------------------------------------------------------- /Localizations/fr_FR.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "gitignore.io - Créez des fichiers .gitignore utiles à votre Projet", 3 | "description": "Créez des fichiers .gitignore utiles à votre projet en choisissant l'un des %{templateCount} templates .gitignore.io de Système d'exploitation, IDE et Langage de Programmation", 4 | "subtitle": "Créez des fichiers .gitignore utiles à votre projet", 5 | "searchPlaceholder": "Recherchez des Systèmes d'Exploitation, IDEs ou Langages de Programmation", 6 | "searchGo": "Créer", 7 | "searchDownload": "Téléchargement du fichier", 8 | "footer": "%{templateCount} templates .gitignore.io de Système d'exploitation, IDE et Langage de Programmation", 9 | "commandLineTitle": "Documentation", 10 | "commandLineDescription": "Apprenez comment utiliser .gitignore.io en ligne de commande", 11 | "videoTitle": "Regardez une Vidéo Didacticielle", 12 | "videoDescription": "Regardez une vidéo pour apprendre comment fonctionne .gitignore.io", 13 | "sourceCodeTitle": "Code Source", 14 | "sourceCodeDescription": "Le code source de .gitignore.io est hébergé par GitHub" 15 | } 16 | -------------------------------------------------------------------------------- /Localizations/de_DE.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "gitignore.io - Erstelle nützliche .gitignore Dateien Für Dein Projekt", 3 | "description": "Erstelle nützliche .gitignore Dateien für dein Projekt in dem du eines von {templateCount} Betriebssystem, Entwicklungsumgebung und Programmiersprache .gitignore Templates wählst", 4 | "subtitle": "Erstelle nützliche .gitignore Dateien für dein Projekt", 5 | "searchPlaceholder": "Suche nach Betriebssystemen, Entwicklungsumgebungen oder Programmiersprachen", 6 | "searchGo": "Create", 7 | "searchDownload": "Datei herunterladen", 8 | "footer": "%{templateCount} Betriebssystem, Entwicklungsumgebung und Programmiersprache .gitignore Templates", 9 | "commandLineTitle": "Kommandozeilen Dokumentation", 10 | "commandLineDescription": "Lerne wie man .gitignore.io von der Kommandozeile ausführt", 11 | "videoTitle": "Schau das Video Tutorial", 12 | "videoDescription": "Schau ein Video um zu lernen wie .gitignore.io funktioniert", 13 | "sourceCodeTitle": "Quellcode", 14 | "sourceCodeDescription": "Der Quellcode für .gitignore.io ist bei Github gehosted" 15 | } 16 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2013-2018 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:4.0 2 | import PackageDescription 3 | 4 | let package = Package( 5 | name: "GitignoreIO", 6 | dependencies: [ 7 | .package( 8 | url: "https://github.com/vapor/vapor.git", 9 | from: "3.1.0" 10 | ), 11 | .package( 12 | url: "https://github.com/vapor/leaf.git", 13 | from: "3.0.0" 14 | ), 15 | .package( 16 | url: "https://github.com/vapor-community/lingo-vapor.git", 17 | from: "3.0.0" 18 | ) 19 | ], 20 | targets: [ 21 | .target( 22 | name: "App", 23 | dependencies: ["Vapor", "Leaf", "LingoVapor"], 24 | exclude: ["Config", "Localization", "Public", "Resources", "data", "wiki"] 25 | ), 26 | .target( 27 | name: "Run", 28 | dependencies: ["App"], 29 | exclude: ["Config", "Localization", "Public", "Resources", "data", "wiki"] 30 | ), 31 | .testTarget( 32 | name: "AppTests", 33 | dependencies: ["App"] 34 | ) 35 | ] 36 | ) 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/sk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím, zadajte o jeden znak menej":n>=2&&n<=4?"Prosím, zadajte o "+e[n](!0)+" znaky menej":"Prosím, zadajte o "+n+" znakov menej"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím, zadajte ešte jeden znak":n<=4?"Prosím, zadajte ešte ďalšie "+e[n](!0)+" znaky":"Prosím, zadajte ešte ďalších "+n+" znakov"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(t){return t.maximum==1?"Môžete zvoliť len jednu položku":t.maximum>=2&&t.maximum<=4?"Môžete zvoliť najviac "+e[t.maximum](!1)+" položky":"Môžete zvoliť najviac "+t.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Public/components/select2/dist/js/i18n/cs.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/cs",[],function(){function e(e,t){switch(e){case 2:return t?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím zadejte o jeden znak méně":n<=4?"Prosím zadejte o "+e(n,!0)+" znaky méně":"Prosím zadejte o "+n+" znaků méně"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím zadejte ještě jeden znak":n<=4?"Prosím zadejte ještě další "+e(n,!0)+" znaky":"Prosím zadejte ještě dalších "+n+" znaků"},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(t){var n=t.maximum;return n==1?"Můžete zvolit jen jednu položku":n<=4?"Můžete zvolit maximálně "+e(n,!1)+" položky":"Můžete zvolit maximálně "+n+" položek"},noResults:function(){return"Nenalezeny žádné položky"},searching:function(){return"Vyhledávání…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /Tests/AppTests/Extensions/URL+ExtensionsTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // URL+ExtensionsTests.swift 3 | // GitignoreIO 4 | // 5 | // Created by Joseph Blau on 2/12/17. 6 | // 7 | // 8 | 9 | import XCTest 10 | import Vapor 11 | 12 | @testable import App 13 | 14 | class URL_ExtensionsTests: XCTestCase { 15 | 16 | static let allTests = [ 17 | ("testName", testName), 18 | ("testStackName", testStackName), 19 | ("testFileName", testFileName) 20 | ] 21 | 22 | 23 | func testName() { 24 | guard let mockURL = URL(string: "file://this/is/a/test/file.txt") else { 25 | XCTFail() 26 | return 27 | } 28 | XCTAssertEqual(mockURL.name, "file") 29 | } 30 | 31 | func testStackName() { 32 | guard let mockURL = URL(string: "file://this/is/a/test/file.txt") else { 33 | XCTFail() 34 | return 35 | } 36 | XCTAssertEqual(mockURL.stackName, "file") 37 | } 38 | 39 | func testFileName() { 40 | guard let mockURL = URL(string: "file://this/is/a/test/file.txt") else { 41 | XCTFail() 42 | return 43 | } 44 | XCTAssertEqual(mockURL.fileName, "file.txt") 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Tests/AppTests/Extensions/Sequence+ExtensionsTest.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Sequence+ExtensionsTest.swift 3 | // AppTests 4 | // 5 | // Created by Joe Blau on 6/22/18. 6 | // 7 | 8 | import XCTest 9 | 10 | @testable import App 11 | 12 | class Sequence_ExtensionsTest: XCTestCase { 13 | 14 | static let allTests = [ 15 | ("testUniqueElements_numbers", testUniqueElements_numbers), 16 | ("testUniqueElements_strings", testUniqueElements_strings), 17 | ("testUniqueElements_emoji", testUniqueElements_emoji) 18 | ] 19 | 20 | func testUniqueElements_numbers() { 21 | let sequenceOfDuplciates = [1,2,3,3,4,5,6,1] 22 | let sequenceOfUniques = sequenceOfDuplciates.uniqueElements 23 | XCTAssertEqual(sequenceOfUniques.count, 6) 24 | } 25 | 26 | func testUniqueElements_strings() { 27 | let sequenceOfDuplciates = ["abc","def","hij","abc","abc","xyz","abc","def"] 28 | let sequenceOfUniques = sequenceOfDuplciates.uniqueElements 29 | XCTAssertEqual(sequenceOfUniques.count, 4) 30 | } 31 | 32 | func testUniqueElements_emoji() { 33 | let sequenceOfDuplciates = ["😂","😃","☺️","😂","😅","😘","😅"] 34 | let sequenceOfUniques = sequenceOfDuplciates.uniqueElements 35 | XCTAssertEqual(sequenceOfUniques.count, 5) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | os: osx 2 | language: generic 3 | sudo: required 4 | osx_image: xcode9.4 5 | before_script: 6 | - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-darwin-amd64 > ./cc-test-reporter 7 | - chmod +x ./cc-test-reporter 8 | - ./cc-test-reporter before-build 9 | before_install: 10 | - git config credential.helper "store --file=.git/credentials" 11 | - echo "https://${GH_TOKEN}:@github.com" > .git/credentials 12 | - .travis/update-submodule.sh 13 | install: 14 | - eval "$(curl -sL https://swiftenv.fuller.li/install.sh)" 15 | script: 16 | - brew install vapor/tap/vapor 17 | - swift build 18 | - swift test 19 | after_script: 20 | - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT 21 | notifications: 22 | email: 23 | recipients: 24 | - josephblau@gmail.com 25 | deploy: 26 | provider: heroku 27 | strategy: git 28 | app: gitignoreio-stage-swift 29 | on: master 30 | api_key: 31 | secure: In+pMxDoWCe5h2oCi20pCpLGLdiqvP1SuWqTkFm1G1LPtZ7LIcIbxlCgiWGlWqaPnwC5n0VkpOEkOSnFZz2E7ffKQuzonvEBUPl5EFLzfJxeHUDWaaMGWfadx2kR21cx/wTyEZseSqeBm77wbKJKU7D6RqRbCS+MxaavQhaJnKk= 32 | env: 33 | global: 34 | - CC_TEST_REPORTER_ID=6133dfb857104f811740c22973bcb412866eba231509f7f8f60a8ad95005ee2b 35 | - secure: ZubW/TIAZCjYPJYI1mwUtWhY9iAabIQzyeexKGEbcbUuYhdCzZ2Dj7mIjPyOQ0KPwQm3nwWPRXq8V7YnGJMU3ytofu/PTb0gYDGPguVpLj0k7hN3xlxuODQeP2BtiS4uzuXspMfOb14kEkszFqU0qlF/eKnKBtqvva//Iwi2L3I= 36 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Issue Template 2 | 3 | ## Frequently Asked Questions 4 | 5 | 6 | **Q:** How do I submit a new.gitignore templates?
7 | **A:** Please submit all new templates to [@dvcs/gitignore](https://github.com/dvcs/gitignore).
8 |
9 | **Q:** How do I suggest modifications to existing `.gitignore` templates?
10 | **A:** Modifictions should come in the form of pull requests at [@dvcs/gitignore](https://github.com/dvcs/gitignore).
11 |
12 | **Q:** Why don't Gitignore.io's templates don't look exactly like the templates on [@github/gitignore](https://github.com/github/gitignore)?
13 | **A:** Gitignore.io tried to maintain parity with [@github/gitignore](https://github.com/github/gitignore), but GitHub's template list doesn't include many languages, operating systems, and IDE's that developers use. Gitignore.io's template list has over 100 more templates than GitHub's.
14 |
15 | **Q:** Why is my local site empty?
16 | **A:** When the repository is cloned, the `--recursive` flag is necessary. gitignore.io uses @dvcs/gitignore as it's data source. If the repo isn't cloned recursively, templates will be missing.
17 |
18 | ## Issue
19 |
20 | ### Development Environment:
21 |
22 | - [ ] Machine (Local, Container, Virtual):
23 | - [ ] Operating System (Name/Version):
24 | - [ ] Web Browser (Name/Version):
25 | - [ ] Vapor Version:
26 | - [ ] Swift Version:
27 |
28 | ### Expected Behavior:
29 |
30 | ### Actual Behavior:
31 |
32 | ### Reproduction Steps:
33 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.gitignore.io/api/macos,linux,windows,vapor
3 |
4 | ### Linux ###
5 | *~
6 |
7 | # temporary files which can be created if a process still has a handle open of a deleted file
8 | .fuse_hidden*
9 |
10 | # KDE directory preferences
11 | .directory
12 |
13 | # Linux trash folder which might appear on any partition or disk
14 | .Trash-*
15 |
16 | # .nfs files are created when an open file is removed but is still being accessed
17 | .nfs*
18 |
19 | ### macOS ###
20 | *.DS_Store
21 | .AppleDouble
22 | .LSOverride
23 |
24 | # Icon must end with two \r
25 | Icon
26 |
27 |
28 | # Thumbnails
29 | ._*
30 |
31 | # Files that might appear in the root of a volume
32 | .DocumentRevisions-V100
33 | .fseventsd
34 | .Spotlight-V100
35 | .TemporaryItems
36 | .Trashes
37 | .VolumeIcon.icns
38 | .com.apple.timemachine.donotpresent
39 |
40 | # Directories potentially created on remote AFP share
41 | .AppleDB
42 | .AppleDesktop
43 | Network Trash Folder
44 | Temporary Items
45 | .apdisk
46 |
47 | ### Vapor ###
48 | Config/secrets
49 |
50 | ### Vapor Patch ###
51 | Packages
52 | .build
53 | xcuserdata
54 | *.xcodeproj
55 |
56 | ### Windows ###
57 | # Windows thumbnail cache files
58 | Thumbs.db
59 | ehthumbs.db
60 | ehthumbs_vista.db
61 |
62 | # Folder config file
63 | Desktop.ini
64 |
65 | # Recycle Bin used on file shares
66 | $RECYCLE.BIN/
67 |
68 | # Windows Installer files
69 | *.cab
70 | *.msi
71 | *.msm
72 | *.msp
73 |
74 | # Windows shortcuts
75 | *.lnk
76 |
77 | .git/credentials
78 |
79 | cobertura.xml
80 | # End of https://www.gitignore.io/api/macos,linux,windows,vapor
81 |
--------------------------------------------------------------------------------
/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | disabled_rules: # rule identifiers to exclude from running
2 | - colon
3 | - comma
4 | - control_statement
5 | - line_length
6 | opt_in_rules: # some rules are only opt-in
7 | - empty_count
8 | # Find all the available rules by running:
9 | # swiftlint rules
10 | included: # paths to include during linting. `--path` is ignored if present.
11 | - Sources/App
12 | - Sources/GitignoreIOServer
13 | excluded: # paths to ignore during linting. Takes precedence over `included`.
14 |
15 | # configurable rules can be customized from this configuration file
16 | # binary rules can set their severity level
17 | force_cast: warning # implicitly
18 | force_try:
19 | severity: warning # explicitly
20 | # rules that have both warning and error levels, can set just the warning level
21 | # implicitly
22 | # line_length: 110
23 | # they can set both implicitly with an array
24 | type_body_length:
25 | - 300 # warning
26 | - 400 # error
27 | # or they can set both explicitly
28 | file_length:
29 | warning: 500
30 | error: 1200
31 | # naming rules can set warnings/errors for min_length and max_length
32 | # additionally they can set excluded names
33 | type_name:
34 | min_length: 4 # only warning
35 | max_length: # warning and error
36 | warning: 40
37 | error: 50
38 | excluded: iPhone # excluded via string
39 | identifier_name:
40 | min_length: # only min_length
41 | error: 3 # only error
42 | excluded: # excluded via string array
43 | - id
44 | - URL
45 | - GlobalAPIKey
46 | reporter: "xcode" # reporter type (xcode, json, csv, checkstyle, junit)
47 | cyclomatic_complexity:
48 | warning: 30
49 | error: 50
50 | function_parameter_count:
51 | warning: 7
52 | error: 11
53 |
--------------------------------------------------------------------------------
/.travis/ci.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | VERSION="4.1"
4 | echo "Swift $VERSION Continuous Integration";
5 |
6 | # Determine OS
7 | UNAME=`uname`;
8 | if [[ $UNAME == "Darwin" ]];
9 | then
10 | OS="macos";
11 | else
12 | if [[ $UNAME == "Linux" ]];
13 | then
14 | UBUNTU_RELEASE=`lsb_release -a 2>/dev/null`;
15 | if [[ $UBUNTU_RELEASE == *"16.04"* ]];
16 | then
17 | OS="ubuntu1604";
18 | else
19 | OS="ubuntu1404";
20 | fi
21 | else
22 | echo "Unsupported Operating System: $UNAME";
23 | fi
24 | fi
25 | echo "🖥 Operating System: $OS";
26 |
27 | if [[ $OS != "macos" ]];
28 | then
29 | echo "📚 Installing Dependencies"
30 | sudo apt-get install -y clang libicu-dev uuid-dev
31 |
32 | echo "🐦 Installing Swift";
33 | if [[ $OS == "ubuntu1604" ]];
34 | then
35 | SWIFTFILE="swift-$VERSION-RELEASE-ubuntu16.04";
36 | else
37 | SWIFTFILE="swift-$VERSION-RELEASE-ubuntu14.04";
38 | fi
39 | wget https://swift.org/builds/swift-$VERSION-release/$OS/swift-$VERSION-RELEASE/$SWIFTFILE.tar.gz
40 | tar -zxf $SWIFTFILE.tar.gz
41 | export PATH=$PWD/$SWIFTFILE/usr/bin:"${PATH}"
42 | fi
43 |
44 | echo "📅 Version: `swift --version`";
45 |
46 | echo "🚀 Building";
47 | swift build
48 | if [[ $? != 0 ]];
49 | then
50 | echo "❌ Build failed";
51 | exit 1;
52 | fi
53 |
54 | echo "💼 Building Release";
55 | swift build -c release
56 | if [[ $? != 0 ]];
57 | then
58 | echo "❌ Build for release failed";
59 | exit 1;
60 | fi
61 |
62 | echo "🔎 Testing";
63 |
64 | swift test
65 | if [[ $? != 0 ]];
66 | then
67 | echo "❌ Tests failed";
68 | exit 1;
69 | fi
70 |
71 | echo "✅ Done"
72 |
--------------------------------------------------------------------------------
/Public/img/gi.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Resources/Views/base.leaf:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #get(title)
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | #get(description)
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | #get(headerScripts)
34 |
35 | #get(bodyType)
36 | #get(body)
37 |
38 | #get(footerScripts)
39 |
40 |