From e1378887c41c37d425e134f83424424b76781228 Mon Sep 17 00:00:00 2001 From: kolja Date: Fri, 11 May 2018 21:23:09 +0200 Subject: [PATCH] Update documentation --- help/content/assets/css/main.css | 4647 +++++++++-------- help/content/assets/css/style.css | 391 +- help/content/assets/js/clipboardTooltip.js | 36 + help/content/nuspec-example.xml | 26 + help/markdown/api-slack.md | 7 +- help/markdown/contributing.md | 71 +- help/markdown/core-commandlineparsing.md | 38 +- help/markdown/core-process.md | 5 +- help/markdown/core-targets.md | 43 +- help/markdown/dotnet-assemblyinfo.md | 5 +- help/markdown/dotnet-nuget.md | 37 +- help/markdown/dotnet-testing-opencover.md | 4 +- help/markdown/fake-cache.md | 7 +- help/markdown/fake-commandline.md | 41 +- help/markdown/fake-debugging.md | 39 +- help/markdown/fake-dotnet-testing-specflow.md | 7 +- help/markdown/fake-dotnetcore.md | 33 +- help/markdown/fake-fake5-custom-modules.md | 5 +- help/markdown/fake-fake5-modules.md | 23 +- help/markdown/fake-gettingstarted.md | 42 +- help/markdown/fake-migrate-to-fake-5.md | 26 +- help/markdown/fake-tools-pickles.md | 7 +- help/markdown/legacy-assemblyinfo.md | 5 +- help/markdown/legacy-commandline.md | 7 +- help/markdown/legacy-core-targets.md | 7 +- help/markdown/legacy-customtasks.md | 5 +- help/markdown/legacy-gettingstarted.md | 5 +- help/markdown/legacy-index.md | 5 +- help/markdown/legacy-teamcity.md | 5 +- help/markdown/sql-dacpac.md | 7 +- help/markdown/testing-reportgenerator.md | 6 +- help/markdown/testing-sonarqube.md | 2 +- help/markdown/todo-androidpublisher.md | 5 +- help/markdown/todo-deploy.md | 11 +- help/markdown/todo-fluentmigrator.md | 5 +- help/markdown/todo-fsc.md | 5 +- help/markdown/todo-fxcop.md | 5 +- help/markdown/todo-octopusdeploy.md | 5 +- help/markdown/todo-typescript.md | 5 +- help/markdown/windows-chocolatey.md | 6 +- help/templates/fake5/apidocstemplate.cshtml | 22 +- help/templates/reference/module.cshtml | 12 +- help/templates/reference/part-members.cshtml | 17 +- help/templates/reference/part-nested.cshtml | 24 +- help/templates/reference/type.cshtml | 11 +- help/templates/template.cshtml | 19 +- paket.lock | 8 +- src/legacy/FAKE/Cli.fs | 14 +- src/legacy/FAKE/CommandlineParams.fs | 6 +- src/legacy/FAKE/Program.fs | 14 +- .../Fake.Deploy.Lib/FakeDeployAgentHelper.fs | 48 +- .../Fake.Deploy.Lib/HttpHeaderHelper.fs | 6 +- .../Fake.Deploy.Lib/HttpListenerHelper.fs | 44 +- src/legacy/Fake.Deploy.Lib/Json.fs | 12 +- src/legacy/Fake.Deploy.Lib/SshRsaModule.fs | 18 +- src/legacy/Fake.Deploy/AppConfig.fs | 22 +- src/legacy/Fake.Deploy/AuthModule.fs | 24 +- src/legacy/Fake.Deploy/AuthenticatedUser.fs | 6 +- src/legacy/Fake.Deploy/DeployAgentModule.fs | 22 +- src/legacy/Fake.Deploy/DeploymentAgent.fs | 14 +- src/legacy/Fake.Deploy/DeploymentHelper.fs | 38 +- src/legacy/Fake.Deploy/Installers.fs | 12 +- src/legacy/Fake.Deploy/JSonSerializers.fs | 8 +- src/legacy/Fake.Deploy/Logger.fs | 16 +- src/legacy/Fake.Deploy/NancyBootStrapper.fs | 6 +- src/legacy/Fake.Deploy/Program.fs | 14 +- src/legacy/Fake.Deploy/Services.fs | 16 +- src/legacy/Fake.Deploy/UserMapper.fs | 12 +- .../ComputationExpressions.fs | 40 +- .../FluentMigratorHelper.fs | 32 +- src/legacy/Fake.Gallio/GallioHelper.fs | 12 +- src/legacy/Fake.IIS/IISExpress.fs | 14 +- src/legacy/Fake.IIS/IISHelper.fs | 68 +- src/legacy/Fake.SQL/SQLServer.fs | 44 +- src/legacy/Fake.SQL/SQLServerHelper.fs | 32 +- src/legacy/FakeLib/AndroidPublisher.fs | 32 +- src/legacy/FakeLib/Appcast.fs | 10 +- src/legacy/FakeLib/BitbucketPipelines.fs | 18 +- src/legacy/FakeLib/Boot.fs | 74 +- src/legacy/FakeLib/BowerHelper.fs | 14 +- src/legacy/FakeLib/CMake.fs | 20 +- src/legacy/FakeLib/CSharpHelper.fs | 20 +- src/legacy/FakeLib/CacheHelper.fs | 4 +- src/legacy/FakeLib/Checksum.fs | 8 +- src/legacy/FakeLib/ConfigurationHelper.fs | 18 +- src/legacy/FakeLib/CscHelper.fs | 16 +- src/legacy/FakeLib/DocuHelper.fs | 8 +- src/legacy/FakeLib/DotCover.fs | 42 +- src/legacy/FakeLib/DynamicsCRMHelper.fs | 22 +- src/legacy/FakeLib/DynamicsNavFile.fs | 60 +- src/legacy/FakeLib/DynamicsNavHelper.fs | 74 +- src/legacy/FakeLib/FSIHelper.fs | 50 +- src/legacy/FakeLib/FXCopHelper.fs | 12 +- src/legacy/FakeLib/FixieHelper.fs | 8 +- src/legacy/FakeLib/FscHelper.fs | 28 +- src/legacy/FakeLib/FtpHelper.fs | 22 +- src/legacy/FakeLib/FuchuHelper.fs | 4 +- src/legacy/FakeLib/GACHelper.fs | 12 +- src/legacy/FakeLib/GitVersionHelper.fs | 10 +- src/legacy/FakeLib/HTMLHelpWorkShopHelper.fs | 4 +- .../FakeLib/HipChatNotificationHelper.fs | 10 +- src/legacy/FakeLib/ILMergeHelper.fs | 16 +- src/legacy/FakeLib/MSBuild/ProjectSystem.fs | 60 +- src/legacy/FakeLib/MSBuild/SpecsRemovement.fs | 26 +- src/legacy/FakeLib/MSIHelper.fs | 10 +- src/legacy/FakeLib/MessageHelper.fs | 6 +- src/legacy/FakeLib/NCoverHelper.fs | 8 +- src/legacy/FakeLib/NDependHelper.fs | 12 +- src/legacy/FakeLib/NGenHelper.fs | 16 +- src/legacy/FakeLib/OctoTools.fs | 50 +- .../FakeLib/Office365ConnectorHelper.fs | 46 +- src/legacy/FakeLib/PermissionsHelper.fs | 6 +- src/legacy/FakeLib/PsExecHelper.fs | 4 +- src/legacy/FakeLib/RaygunHelper.fs | 8 +- src/legacy/FakeLib/RegAsmHelper.fs | 14 +- src/legacy/FakeLib/RegistryHelper.fs | 32 +- src/legacy/FakeLib/RoboCopyHelper.fs | 8 +- src/legacy/FakeLib/RoundhouseHelper.fs | 8 +- src/legacy/FakeLib/SCPHelper.fs | 8 +- src/legacy/FakeLib/SSHHelper.fs | 8 +- src/legacy/FakeLib/ServiceControllerHelper.fs | 36 +- src/legacy/FakeLib/SignToolHelper.fs | 12 +- src/legacy/FakeLib/SquirrelHelper.fs | 8 +- src/legacy/FakeLib/StrongNamingHelper.fs | 14 +- src/legacy/FakeLib/StyleCopHelper.fs | 10 +- src/legacy/FakeLib/Sxshelper.fs | 12 +- src/legacy/FakeLib/TestFlightHelper.fs | 8 +- src/legacy/FakeLib/TypeScript.fs | 14 +- .../FakeLib/UnitTest/Expecto/Expecto.fs | 8 +- .../FakeLib/UnitTest/ProcessTestRunner.fs | 12 +- src/legacy/FakeLib/UnitTest/UnitTestHelper.fs | 18 +- src/legacy/FakeLib/UnitTest/VSTest.fs | 16 +- src/legacy/FakeLib/UserInputHelper.fs | 6 +- src/legacy/FakeLib/Utils.fs | 8 +- src/legacy/FakeLib/VSSHelper.fs | 6 +- src/legacy/FakeLib/Vb6helper.fs | 24 +- src/legacy/FakeLib/WiXHelper.fs | 212 +- src/legacy/FakeLib/XCopyHelper.fs | 4 +- src/legacy/FakeLib/XDTHelper.fs | 40 +- src/legacy/FakeLib/XpkgHelper.fs | 10 +- .../AccountModels.fs | 8 +- .../Fake.Deploy.Web.Abstractions/Model.fs | 70 +- .../Fake.Deploy.Web.File/DataProvider.fs | 22 +- .../FileMembershipProvider.fs | 30 +- .../Fake.Deploy.Web.File/Provider.fs | 56 +- .../Fake.Deploy.Web.RavenDb/DataProvider.fs | 22 +- .../MembershipProvider.fs | 34 +- .../deploy.web/Fake.Deploy.Web/AgentProxy.fs | 4 +- .../deploy.web/Fake.Deploy.Web/Api.Agent.fs | 2 +- .../deploy.web/Fake.Deploy.Web/ApiHelpers.fs | 6 +- .../Fake.Deploy.Web/Bootstrapper.fs | 8 +- src/legacy/deploy.web/Fake.Deploy.Web/Data.fs | 34 +- .../deploy.web/Fake.Deploy.Web/Extensions.fs | 4 +- .../deploy.web/Fake.Deploy.Web/Global.fs | 4 +- .../deploy.web/Fake.Deploy.Web/InitialData.fs | 4 +- .../Fake.Deploy.Web/Modules/Account.fs | 6 +- .../Fake.Deploy.Web/Modules/Admin.fs | 2 +- .../Fake.Deploy.Web/Modules/Api.Agent.fs | 4 +- .../Modules/Api.Environment.fs | 2 +- .../Fake.Deploy.Web/Modules/Api.Package.fs | 4 +- .../Fake.Deploy.Web/Modules/Api.User.fs | 2 +- .../Fake.Deploy.Web/Modules/ApiModels.fs | 10 +- .../Fake.Deploy.Web/Modules/FakeModule.fs | 18 +- .../Fake.Deploy.Web/Modules/Home.fs | 2 +- .../Fake.Deploy.Web/Modules/Setup.fs | 2 +- .../deploy.web/Fake.Deploy.Web/UserMapper.fs | 14 +- 166 files changed, 4296 insertions(+), 3870 deletions(-) create mode 100644 help/content/assets/js/clipboardTooltip.js create mode 100644 help/content/nuspec-example.xml diff --git a/help/content/assets/css/main.css b/help/content/assets/css/main.css index e262ac98060..df7b42509d7 100644 --- a/help/content/assets/css/main.css +++ b/help/content/assets/css/main.css @@ -1,6 +1,5 @@ @import url("https://fonts.googleapis.com/css?family=Open+Sans:400,400italic,700,800"); @import url("font-awesome.min.css"); - /* ZeroFour by HTML5 UP html5up.net | @ajlkn @@ -9,2359 +8,2407 @@ /* Reset */ - html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; - } - - article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { - display: block; - } - - body { - line-height: 1; - } - - ol, ul { - list-style: none; - } - - blockquote, q { - quotes: none; - } - - blockquote:before, blockquote:after, q:before, q:after { - content: ''; - content: none; - } - - table { - border-collapse: collapse; - border-spacing: 0; - } - - body { - -webkit-text-size-adjust: none; - } +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +canvas, +details, +embed, +figure, +figcaption, +footer, +header, +hgroup, +menu, +nav, +output, +ruby, +section, +summary, +time, +mark, +audio, +video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +menu, +nav, +section { + display: block; +} + +body { + line-height: 1; +} + +ol, +ul { + list-style: none; +} + +blockquote, +q { + quotes: none; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; + content: none; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +body { + -webkit-text-size-adjust: none; +} /* Box Model */ - *, *:before, *:after { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - } +*, +*:before, +*:after { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} /* Containers */ - .container { - margin-left: auto; - margin-right: auto; - } - - .container.\31 25\25 { - width: 100%; - max-width: 1200px; - min-width: 960px; - } - - .container.\37 5\25 { - width: 720px; - } - - .container.\35 0\25 { - width: 480px; - } - - .container.\32 5\25 { - width: 240px; - } - - .container { - width: 960px; - } - - @media screen and (min-width: 737px) { - - .container.\31 25\25 { - width: 100%; - max-width: 1500px; - min-width: 1200px; - } - - .container.\37 5\25 { - width: 900px; - } - - .container.\35 0\25 { - width: 600px; - } - - .container.\32 5\25 { - width: 300px; - } - - .container { - width: 1200px; - } - - } - - @media screen and (min-width: 737px) and (max-width: 1200px) { - - .container.\31 25\25 { - width: 100%; - max-width: 1250px; - min-width: 1000px; - } - - .container.\37 5\25 { - width: 750px; - } - - .container.\35 0\25 { - width: 500px; - } - - .container.\32 5\25 { - width: 250px; - } - - .container { - width: 1000px; - } - - } - - @media screen and (max-width: 736px) { - - .container.\31 25\25 { - width: 100%; - max-width: 125%; - min-width: 100%; - } - - .container.\37 5\25 { - width: 75%; - } - - .container.\35 0\25 { - width: 50%; - } - - .container.\32 5\25 { - width: 25%; - } - - .container { - width: 100% !important; - } - - } +.container { + margin-left: auto; + margin-right: auto; +} + +.container.\31 25\25 { + width: 100%; + max-width: 1200px; + min-width: 960px; +} + +.container.\37 5\25 { + width: 720px; +} + +.container.\35 0\25 { + width: 480px; +} + +.container.\32 5\25 { + width: 240px; +} + +.container { + width: 960px; +} + +@media screen and (min-width: 737px) { + .container.\31 25\25 { + width: 100%; + max-width: 1500px; + min-width: 1200px; + } + .container.\37 5\25 { + width: 900px; + } + .container.\35 0\25 { + width: 600px; + } + .container.\32 5\25 { + width: 300px; + } + .container { + width: 1200px; + } +} + +@media screen and (min-width: 737px) and (max-width: 1200px) { + .container.\31 25\25 { + width: 100%; + max-width: 1250px; + min-width: 1000px; + } + .container.\37 5\25 { + width: 750px; + } + .container.\35 0\25 { + width: 500px; + } + .container.\32 5\25 { + width: 250px; + } + .container { + width: 1000px; + } +} + +@media screen and (max-width: 736px) { + .container.\31 25\25 { + width: 100%; + max-width: 125%; + min-width: 100%; + } + .container.\37 5\25 { + width: 75%; + } + .container.\35 0\25 { + width: 50%; + } + .container.\32 5\25 { + width: 25%; + } + .container { + width: 100% !important; + } +} /* Grid */ - .row { - border-bottom: solid 1px transparent; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - } - - .row > * { - float: left; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - } - - .row:after, .row:before { - content: ''; - display: block; - clear: both; - height: 0; - } - - .row.uniform > * > :first-child { - margin-top: 0; - } - - .row.uniform > * > :last-child { - margin-bottom: 0; - } - - .row.\30 \25 > * { - padding: 0 0 0 0px; - } - - .row.\30 \25 { - margin: 0 0 -1px 0px; - } - - .row.uniform.\30 \25 > * { - padding: 0px 0 0 0px; - } - - .row.uniform.\30 \25 { - margin: 0px 0 -1px 0px; - } - - .row > * { - padding: 0 0 0 40px; - } - - .row { - margin: 0 0 -1px -40px; - } - - .row.uniform > * { - padding: 40px 0 0 40px; - } - - .row.uniform { - margin: -40px 0 -1px -40px; - } - - .row.\32 00\25 > * { - padding: 0 0 0 80px; - } - - .row.\32 00\25 { - margin: 0 0 -1px -80px; - } - - .row.uniform.\32 00\25 > * { - padding: 80px 0 0 80px; - } - - .row.uniform.\32 00\25 { - margin: -80px 0 -1px -80px; - } - - .row.\31 50\25 > * { - padding: 0 0 0 60px; - } - - .row.\31 50\25 { - margin: 0 0 -1px -60px; - } - - .row.uniform.\31 50\25 > * { - padding: 60px 0 0 60px; - } - - .row.uniform.\31 50\25 { - margin: -60px 0 -1px -60px; - } - - .row.\35 0\25 > * { - padding: 0 0 0 20px; - } - - .row.\35 0\25 { - margin: 0 0 -1px -20px; - } - - .row.uniform.\35 0\25 > * { - padding: 20px 0 0 20px; - } - - .row.uniform.\35 0\25 { - margin: -20px 0 -1px -20px; - } - - .row.\32 5\25 > * { - padding: 0 0 0 10px; - } - - .row.\32 5\25 { - margin: 0 0 -1px -10px; - } - - .row.uniform.\32 5\25 > * { - padding: 10px 0 0 10px; - } - - .row.uniform.\32 5\25 { - margin: -10px 0 -1px -10px; - } - - .\31 2u, .\31 2u\24 { - width: 100%; - clear: none; - margin-left: 0; - } - - .\31 1u, .\31 1u\24 { - width: 91.6666666667%; - clear: none; - margin-left: 0; - } - - .\31 0u, .\31 0u\24 { - width: 83.3333333333%; - clear: none; - margin-left: 0; - } - - .\39 u, .\39 u\24 { - width: 75%; - clear: none; - margin-left: 0; - } - - .\38 u, .\38 u\24 { - width: 66.6666666667%; - clear: none; - margin-left: 0; - } - - .\37 u, .\37 u\24 { - width: 58.3333333333%; - clear: none; - margin-left: 0; - } - - .\36 u, .\36 u\24 { - width: 50%; - clear: none; - margin-left: 0; - } - - .\35 u, .\35 u\24 { - width: 41.6666666667%; - clear: none; - margin-left: 0; - } - - .\34 u, .\34 u\24 { - width: 33.3333333333%; - clear: none; - margin-left: 0; - } - - .\33 u, .\33 u\24 { - width: 25%; - clear: none; - margin-left: 0; - } - - .\32 u, .\32 u\24 { - width: 16.6666666667%; - clear: none; - margin-left: 0; - } - - .\31 u, .\31 u\24 { - width: 8.3333333333%; - clear: none; - margin-left: 0; - } - - .\31 2u\24 + *, - .\31 1u\24 + *, - .\31 0u\24 + *, - .\39 u\24 + *, - .\38 u\24 + *, - .\37 u\24 + *, - .\36 u\24 + *, - .\35 u\24 + *, - .\34 u\24 + *, - .\33 u\24 + *, - .\32 u\24 + *, - .\31 u\24 + * { - clear: left; - } - - .\-11u { - margin-left: 91.66667%; - } - - .\-10u { - margin-left: 83.33333%; - } - - .\-9u { - margin-left: 75%; - } - - .\-8u { - margin-left: 66.66667%; - } - - .\-7u { - margin-left: 58.33333%; - } - - .\-6u { - margin-left: 50%; - } - - .\-5u { - margin-left: 41.66667%; - } - - .\-4u { - margin-left: 33.33333%; - } - - .\-3u { - margin-left: 25%; - } - - .\-2u { - margin-left: 16.66667%; - } - - .\-1u { - margin-left: 8.33333%; - } - - @media screen and (min-width: 737px) { - - .row > * { - padding: 50px 0 0 50px; - } - - .row { - margin: -50px 0 -1px -50px; - } - - .row.uniform > * { - padding: 50px 0 0 50px; - } - - .row.uniform { - margin: -50px 0 -1px -50px; - } - - .row.\32 00\25 > * { - padding: 100px 0 0 100px; - } - - .row.\32 00\25 { - margin: -100px 0 -1px -100px; - } - - .row.uniform.\32 00\25 > * { - padding: 100px 0 0 100px; - } - - .row.uniform.\32 00\25 { - margin: -100px 0 -1px -100px; - } - - .row.\31 50\25 > * { - padding: 75px 0 0 75px; - } - - .row.\31 50\25 { - margin: -75px 0 -1px -75px; - } - - .row.uniform.\31 50\25 > * { - padding: 75px 0 0 75px; - } - - .row.uniform.\31 50\25 { - margin: -75px 0 -1px -75px; - } - - .row.\35 0\25 > * { - padding: 25px 0 0 25px; - } - - .row.\35 0\25 { - margin: -25px 0 -1px -25px; - } - - .row.uniform.\35 0\25 > * { - padding: 25px 0 0 25px; - } - - .row.uniform.\35 0\25 { - margin: -25px 0 -1px -25px; - } - - .row.\32 5\25 > * { - padding: 12.5px 0 0 12.5px; - } - - .row.\32 5\25 { - margin: -12.5px 0 -1px -12.5px; - } - - .row.uniform.\32 5\25 > * { - padding: 12.5px 0 0 12.5px; - } - - .row.uniform.\32 5\25 { - margin: -12.5px 0 -1px -12.5px; - } - - .\31 2u\28desktop\29, .\31 2u\24\28desktop\29 { - width: 100%; - clear: none; - margin-left: 0; - } - - .\31 1u\28desktop\29, .\31 1u\24\28desktop\29 { - width: 91.6666666667%; - clear: none; - margin-left: 0; - } - - .\31 0u\28desktop\29, .\31 0u\24\28desktop\29 { - width: 83.3333333333%; - clear: none; - margin-left: 0; - } - - .\39 u\28desktop\29, .\39 u\24\28desktop\29 { - width: 75%; - clear: none; - margin-left: 0; - } - - .\38 u\28desktop\29, .\38 u\24\28desktop\29 { - width: 66.6666666667%; - clear: none; - margin-left: 0; - } - - .\37 u\28desktop\29, .\37 u\24\28desktop\29 { - width: 58.3333333333%; - clear: none; - margin-left: 0; - } - - .\36 u\28desktop\29, .\36 u\24\28desktop\29 { - width: 50%; - clear: none; - margin-left: 0; - } - - .\35 u\28desktop\29, .\35 u\24\28desktop\29 { - width: 41.6666666667%; - clear: none; - margin-left: 0; - } - - .\34 u\28desktop\29, .\34 u\24\28desktop\29 { - width: 33.3333333333%; - clear: none; - margin-left: 0; - } - - .\33 u\28desktop\29, .\33 u\24\28desktop\29 { - width: 25%; - clear: none; - margin-left: 0; - } - - .\32 u\28desktop\29, .\32 u\24\28desktop\29 { - width: 16.6666666667%; - clear: none; - margin-left: 0; - } - - .\31 u\28desktop\29, .\31 u\24\28desktop\29 { - width: 8.3333333333%; - clear: none; - margin-left: 0; - } - - .\31 2u\24\28desktop\29 + *, - .\31 1u\24\28desktop\29 + *, - .\31 0u\24\28desktop\29 + *, - .\39 u\24\28desktop\29 + *, - .\38 u\24\28desktop\29 + *, - .\37 u\24\28desktop\29 + *, - .\36 u\24\28desktop\29 + *, - .\35 u\24\28desktop\29 + *, - .\34 u\24\28desktop\29 + *, - .\33 u\24\28desktop\29 + *, - .\32 u\24\28desktop\29 + *, - .\31 u\24\28desktop\29 + * { - clear: left; - } - - .\-11u\28desktop\29 { - margin-left: 91.66667%; - } - - .\-10u\28desktop\29 { - margin-left: 83.33333%; - } - - .\-9u\28desktop\29 { - margin-left: 75%; - } - - .\-8u\28desktop\29 { - margin-left: 66.66667%; - } - - .\-7u\28desktop\29 { - margin-left: 58.33333%; - } - - .\-6u\28desktop\29 { - margin-left: 50%; - } - - .\-5u\28desktop\29 { - margin-left: 41.66667%; - } - - .\-4u\28desktop\29 { - margin-left: 33.33333%; - } - - .\-3u\28desktop\29 { - margin-left: 25%; - } - - .\-2u\28desktop\29 { - margin-left: 16.66667%; - } - - .\-1u\28desktop\29 { - margin-left: 8.33333%; - } - - } - - @media screen and (min-width: 737px) and (max-width: 1200px) { - - .row > * { - padding: 35px 0 0 35px; - } - - .row { - margin: -35px 0 -1px -35px; - } - - .row.uniform > * { - padding: 35px 0 0 35px; - } - - .row.uniform { - margin: -35px 0 -1px -35px; - } - - .row.\32 00\25 > * { - padding: 70px 0 0 70px; - } - - .row.\32 00\25 { - margin: -70px 0 -1px -70px; - } - - .row.uniform.\32 00\25 > * { - padding: 70px 0 0 70px; - } - - .row.uniform.\32 00\25 { - margin: -70px 0 -1px -70px; - } - - .row.\31 50\25 > * { - padding: 52.5px 0 0 52.5px; - } - - .row.\31 50\25 { - margin: -52.5px 0 -1px -52.5px; - } - - .row.uniform.\31 50\25 > * { - padding: 52.5px 0 0 52.5px; - } - - .row.uniform.\31 50\25 { - margin: -52.5px 0 -1px -52.5px; - } - - .row.\35 0\25 > * { - padding: 17.5px 0 0 17.5px; - } - - .row.\35 0\25 { - margin: -17.5px 0 -1px -17.5px; - } - - .row.uniform.\35 0\25 > * { - padding: 17.5px 0 0 17.5px; - } - - .row.uniform.\35 0\25 { - margin: -17.5px 0 -1px -17.5px; - } - - .row.\32 5\25 > * { - padding: 8.75px 0 0 8.75px; - } - - .row.\32 5\25 { - margin: -8.75px 0 -1px -8.75px; - } - - .row.uniform.\32 5\25 > * { - padding: 8.75px 0 0 8.75px; - } - - .row.uniform.\32 5\25 { - margin: -8.75px 0 -1px -8.75px; - } - - .\31 2u\28tablet\29, .\31 2u\24\28tablet\29 { - width: 100%; - clear: none; - margin-left: 0; - } - - .\31 1u\28tablet\29, .\31 1u\24\28tablet\29 { - width: 91.6666666667%; - clear: none; - margin-left: 0; - } - - .\31 0u\28tablet\29, .\31 0u\24\28tablet\29 { - width: 83.3333333333%; - clear: none; - margin-left: 0; - } - - .\39 u\28tablet\29, .\39 u\24\28tablet\29 { - width: 75%; - clear: none; - margin-left: 0; - } - - .\38 u\28tablet\29, .\38 u\24\28tablet\29 { - width: 66.6666666667%; - clear: none; - margin-left: 0; - } - - .\37 u\28tablet\29, .\37 u\24\28tablet\29 { - width: 58.3333333333%; - clear: none; - margin-left: 0; - } - - .\36 u\28tablet\29, .\36 u\24\28tablet\29 { - width: 50%; - clear: none; - margin-left: 0; - } - - .\35 u\28tablet\29, .\35 u\24\28tablet\29 { - width: 41.6666666667%; - clear: none; - margin-left: 0; - } - - .\34 u\28tablet\29, .\34 u\24\28tablet\29 { - width: 33.3333333333%; - clear: none; - margin-left: 0; - } - - .\33 u\28tablet\29, .\33 u\24\28tablet\29 { - width: 25%; - clear: none; - margin-left: 0; - } - - .\32 u\28tablet\29, .\32 u\24\28tablet\29 { - width: 16.6666666667%; - clear: none; - margin-left: 0; - } - - .\31 u\28tablet\29, .\31 u\24\28tablet\29 { - width: 8.3333333333%; - clear: none; - margin-left: 0; - } - - .\31 2u\24\28tablet\29 + *, - .\31 1u\24\28tablet\29 + *, - .\31 0u\24\28tablet\29 + *, - .\39 u\24\28tablet\29 + *, - .\38 u\24\28tablet\29 + *, - .\37 u\24\28tablet\29 + *, - .\36 u\24\28tablet\29 + *, - .\35 u\24\28tablet\29 + *, - .\34 u\24\28tablet\29 + *, - .\33 u\24\28tablet\29 + *, - .\32 u\24\28tablet\29 + *, - .\31 u\24\28tablet\29 + * { - clear: left; - } - - .\-11u\28tablet\29 { - margin-left: 91.66667%; - } - - .\-10u\28tablet\29 { - margin-left: 83.33333%; - } - - .\-9u\28tablet\29 { - margin-left: 75%; - } - - .\-8u\28tablet\29 { - margin-left: 66.66667%; - } - - .\-7u\28tablet\29 { - margin-left: 58.33333%; - } - - .\-6u\28tablet\29 { - margin-left: 50%; - } - - .\-5u\28tablet\29 { - margin-left: 41.66667%; - } - - .\-4u\28tablet\29 { - margin-left: 33.33333%; - } - - .\-3u\28tablet\29 { - margin-left: 25%; - } - - .\-2u\28tablet\29 { - margin-left: 16.66667%; - } - - .\-1u\28tablet\29 { - margin-left: 8.33333%; - } - - } - - @media screen and (max-width: 736px) { - - .row > * { - padding: 10px 0 0 10px; - } - - .row { - margin: -10px 0 -1px -10px; - } - - .row.uniform > * { - padding: 10px 0 0 10px; - } - - .row.uniform { - margin: -10px 0 -1px -10px; - } - - .row.\32 00\25 > * { - padding: 20px 0 0 20px; - } - - .row.\32 00\25 { - margin: -20px 0 -1px -20px; - } - - .row.uniform.\32 00\25 > * { - padding: 20px 0 0 20px; - } - - .row.uniform.\32 00\25 { - margin: -20px 0 -1px -20px; - } - - .row.\31 50\25 > * { - padding: 15px 0 0 15px; - } - - .row.\31 50\25 { - margin: -15px 0 -1px -15px; - } - - .row.uniform.\31 50\25 > * { - padding: 15px 0 0 15px; - } - - .row.uniform.\31 50\25 { - margin: -15px 0 -1px -15px; - } - - .row.\35 0\25 > * { - padding: 5px 0 0 5px; - } - - .row.\35 0\25 { - margin: -5px 0 -1px -5px; - } - - .row.uniform.\35 0\25 > * { - padding: 5px 0 0 5px; - } - - .row.uniform.\35 0\25 { - margin: -5px 0 -1px -5px; - } - - .row.\32 5\25 > * { - padding: 2.5px 0 0 2.5px; - } - - .row.\32 5\25 { - margin: -2.5px 0 -1px -2.5px; - } - - .row.uniform.\32 5\25 > * { - padding: 2.5px 0 0 2.5px; - } - - .row.uniform.\32 5\25 { - margin: -2.5px 0 -1px -2.5px; - } - - .\31 2u\28mobile\29, .\31 2u\24\28mobile\29 { - width: 100%; - clear: none; - margin-left: 0; - } - - .\31 1u\28mobile\29, .\31 1u\24\28mobile\29 { - width: 91.6666666667%; - clear: none; - margin-left: 0; - } - - .\31 0u\28mobile\29, .\31 0u\24\28mobile\29 { - width: 83.3333333333%; - clear: none; - margin-left: 0; - } - - .\39 u\28mobile\29, .\39 u\24\28mobile\29 { - width: 75%; - clear: none; - margin-left: 0; - } - - .\38 u\28mobile\29, .\38 u\24\28mobile\29 { - width: 66.6666666667%; - clear: none; - margin-left: 0; - } - - .\37 u\28mobile\29, .\37 u\24\28mobile\29 { - width: 58.3333333333%; - clear: none; - margin-left: 0; - } - - .\36 u\28mobile\29, .\36 u\24\28mobile\29 { - width: 50%; - clear: none; - margin-left: 0; - } - - .\35 u\28mobile\29, .\35 u\24\28mobile\29 { - width: 41.6666666667%; - clear: none; - margin-left: 0; - } - - .\34 u\28mobile\29, .\34 u\24\28mobile\29 { - width: 33.3333333333%; - clear: none; - margin-left: 0; - } - - .\33 u\28mobile\29, .\33 u\24\28mobile\29 { - width: 25%; - clear: none; - margin-left: 0; - } - - .\32 u\28mobile\29, .\32 u\24\28mobile\29 { - width: 16.6666666667%; - clear: none; - margin-left: 0; - } - - .\31 u\28mobile\29, .\31 u\24\28mobile\29 { - width: 8.3333333333%; - clear: none; - margin-left: 0; - } - - .\31 2u\24\28mobile\29 + *, - .\31 1u\24\28mobile\29 + *, - .\31 0u\24\28mobile\29 + *, - .\39 u\24\28mobile\29 + *, - .\38 u\24\28mobile\29 + *, - .\37 u\24\28mobile\29 + *, - .\36 u\24\28mobile\29 + *, - .\35 u\24\28mobile\29 + *, - .\34 u\24\28mobile\29 + *, - .\33 u\24\28mobile\29 + *, - .\32 u\24\28mobile\29 + *, - .\31 u\24\28mobile\29 + * { - clear: left; - } - - .\-11u\28mobile\29 { - margin-left: 91.66667%; - } - - .\-10u\28mobile\29 { - margin-left: 83.33333%; - } - - .\-9u\28mobile\29 { - margin-left: 75%; - } - - .\-8u\28mobile\29 { - margin-left: 66.66667%; - } - - .\-7u\28mobile\29 { - margin-left: 58.33333%; - } - - .\-6u\28mobile\29 { - margin-left: 50%; - } - - .\-5u\28mobile\29 { - margin-left: 41.66667%; - } - - .\-4u\28mobile\29 { - margin-left: 33.33333%; - } - - .\-3u\28mobile\29 { - margin-left: 25%; - } - - .\-2u\28mobile\29 { - margin-left: 16.66667%; - } - - .\-1u\28mobile\29 { - margin-left: 8.33333%; - } - - } +.row { + border-bottom: solid 1px transparent; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.row>* { + float: left; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.row:after, +.row:before { + content: ''; + display: block; + clear: both; + height: 0; +} + +.row.uniform>*> :first-child { + margin-top: 0; +} + +.row.uniform>*> :last-child { + margin-bottom: 0; +} + +.row.\30 \25>* { + padding: 0 0 0 0px; +} + +.row.\30 \25 { + margin: 0 0 -1px 0px; +} + +.row.uniform.\30 \25>* { + padding: 0px 0 0 0px; +} + +.row.uniform.\30 \25 { + margin: 0px 0 -1px 0px; +} + +.row>* { + padding: 0 0 0 40px; +} + +.row { + margin: 0 0 -1px -40px; +} + +.row.uniform>* { + padding: 40px 0 0 40px; +} + +.row.uniform { + margin: -40px 0 -1px -40px; +} + +.row.\32 00\25>* { + padding: 0 0 0 80px; +} + +.row.\32 00\25 { + margin: 0 0 -1px -80px; +} + +.row.uniform.\32 00\25>* { + padding: 80px 0 0 80px; +} + +.row.uniform.\32 00\25 { + margin: -80px 0 -1px -80px; +} + +.row.\31 50\25>* { + padding: 0 0 0 60px; +} + +.row.\31 50\25 { + margin: 0 0 -1px -60px; +} + +.row.uniform.\31 50\25>* { + padding: 60px 0 0 60px; +} + +.row.uniform.\31 50\25 { + margin: -60px 0 -1px -60px; +} + +.row.\35 0\25>* { + padding: 0 0 0 20px; +} + +.row.\35 0\25 { + margin: 0 0 -1px -20px; +} + +.row.uniform.\35 0\25>* { + padding: 20px 0 0 20px; +} + +.row.uniform.\35 0\25 { + margin: -20px 0 -1px -20px; +} + +.row.\32 5\25>* { + padding: 0 0 0 10px; +} + +.row.\32 5\25 { + margin: 0 0 -1px -10px; +} + +.row.uniform.\32 5\25>* { + padding: 10px 0 0 10px; +} + +.row.uniform.\32 5\25 { + margin: -10px 0 -1px -10px; +} + +.\31 2u, +.\31 2u\24 { + width: 100%; + clear: none; + margin-left: 0; +} + +.\31 1u, +.\31 1u\24 { + width: 91.6666666667%; + clear: none; + margin-left: 0; +} + +.\31 0u, +.\31 0u\24 { + width: 83.3333333333%; + clear: none; + margin-left: 0; +} + +.\39 u, +.\39 u\24 { + width: 75%; + clear: none; + margin-left: 0; +} + +.\38 u, +.\38 u\24 { + width: 66.6666666667%; + clear: none; + margin-left: 0; +} + +.\37 u, +.\37 u\24 { + width: 58.3333333333%; + clear: none; + margin-left: 0; +} + +.\36 u, +.\36 u\24 { + width: 50%; + clear: none; + margin-left: 0; +} + +.\35 u, +.\35 u\24 { + width: 41.6666666667%; + clear: none; + margin-left: 0; +} + +.\34 u, +.\34 u\24 { + width: 33.3333333333%; + clear: none; + margin-left: 0; +} + +.\33 u, +.\33 u\24 { + width: 25%; + clear: none; + margin-left: 0; +} + +.\32 u, +.\32 u\24 { + width: 16.6666666667%; + clear: none; + margin-left: 0; +} + +.\31 u, +.\31 u\24 { + width: 8.3333333333%; + clear: none; + margin-left: 0; +} + +.\31 2u\24+*, +.\31 1u\24+*, +.\31 0u\24+*, +.\39 u\24+*, +.\38 u\24+*, +.\37 u\24+*, +.\36 u\24+*, +.\35 u\24+*, +.\34 u\24+*, +.\33 u\24+*, +.\32 u\24+*, +.\31 u\24+* { + clear: left; +} + +.\-11u { + margin-left: 91.66667%; +} + +.\-10u { + margin-left: 83.33333%; +} + +.\-9u { + margin-left: 75%; +} + +.\-8u { + margin-left: 66.66667%; +} + +.\-7u { + margin-left: 58.33333%; +} + +.\-6u { + margin-left: 50%; +} + +.\-5u { + margin-left: 41.66667%; +} + +.\-4u { + margin-left: 33.33333%; +} + +.\-3u { + margin-left: 25%; +} + +.\-2u { + margin-left: 16.66667%; +} + +.\-1u { + margin-left: 8.33333%; +} + +@media screen and (min-width: 737px) { + .row>* { + padding: 50px 0 0 50px; + } + .row { + margin: -50px 0 -1px -50px; + } + .row.uniform>* { + padding: 50px 0 0 50px; + } + .row.uniform { + margin: -50px 0 -1px -50px; + } + .row.\32 00\25>* { + padding: 100px 0 0 100px; + } + .row.\32 00\25 { + margin: -100px 0 -1px -100px; + } + .row.uniform.\32 00\25>* { + padding: 100px 0 0 100px; + } + .row.uniform.\32 00\25 { + margin: -100px 0 -1px -100px; + } + .row.\31 50\25>* { + padding: 75px 0 0 75px; + } + .row.\31 50\25 { + margin: -75px 0 -1px -75px; + } + .row.uniform.\31 50\25>* { + padding: 75px 0 0 75px; + } + .row.uniform.\31 50\25 { + margin: -75px 0 -1px -75px; + } + .row.\35 0\25>* { + padding: 25px 0 0 25px; + } + .row.\35 0\25 { + margin: -25px 0 -1px -25px; + } + .row.uniform.\35 0\25>* { + padding: 25px 0 0 25px; + } + .row.uniform.\35 0\25 { + margin: -25px 0 -1px -25px; + } + .row.\32 5\25>* { + padding: 12.5px 0 0 12.5px; + } + .row.\32 5\25 { + margin: -12.5px 0 -1px -12.5px; + } + .row.uniform.\32 5\25>* { + padding: 12.5px 0 0 12.5px; + } + .row.uniform.\32 5\25 { + margin: -12.5px 0 -1px -12.5px; + } + .\31 2u\28desktop\29, + .\31 2u\24\28desktop\29 { + width: 100%; + clear: none; + margin-left: 0; + } + .\31 1u\28desktop\29, + .\31 1u\24\28desktop\29 { + width: 91.6666666667%; + clear: none; + margin-left: 0; + } + .\31 0u\28desktop\29, + .\31 0u\24\28desktop\29 { + width: 83.3333333333%; + clear: none; + margin-left: 0; + } + .\39 u\28desktop\29, + .\39 u\24\28desktop\29 { + width: 75%; + clear: none; + margin-left: 0; + } + .\38 u\28desktop\29, + .\38 u\24\28desktop\29 { + width: 66.6666666667%; + clear: none; + margin-left: 0; + } + .\37 u\28desktop\29, + .\37 u\24\28desktop\29 { + width: 58.3333333333%; + clear: none; + margin-left: 0; + } + .\36 u\28desktop\29, + .\36 u\24\28desktop\29 { + width: 50%; + clear: none; + margin-left: 0; + } + .\35 u\28desktop\29, + .\35 u\24\28desktop\29 { + width: 41.6666666667%; + clear: none; + margin-left: 0; + } + .\34 u\28desktop\29, + .\34 u\24\28desktop\29 { + width: 33.3333333333%; + clear: none; + margin-left: 0; + } + .\33 u\28desktop\29, + .\33 u\24\28desktop\29 { + width: 25%; + clear: none; + margin-left: 0; + } + .\32 u\28desktop\29, + .\32 u\24\28desktop\29 { + width: 16.6666666667%; + clear: none; + margin-left: 0; + } + .\31 u\28desktop\29, + .\31 u\24\28desktop\29 { + width: 8.3333333333%; + clear: none; + margin-left: 0; + } + .\31 2u\24\28desktop\29+*, + .\31 1u\24\28desktop\29+*, + .\31 0u\24\28desktop\29+*, + .\39 u\24\28desktop\29+*, + .\38 u\24\28desktop\29+*, + .\37 u\24\28desktop\29+*, + .\36 u\24\28desktop\29+*, + .\35 u\24\28desktop\29+*, + .\34 u\24\28desktop\29+*, + .\33 u\24\28desktop\29+*, + .\32 u\24\28desktop\29+*, + .\31 u\24\28desktop\29+* { + clear: left; + } + .\-11u\28desktop\29 { + margin-left: 91.66667%; + } + .\-10u\28desktop\29 { + margin-left: 83.33333%; + } + .\-9u\28desktop\29 { + margin-left: 75%; + } + .\-8u\28desktop\29 { + margin-left: 66.66667%; + } + .\-7u\28desktop\29 { + margin-left: 58.33333%; + } + .\-6u\28desktop\29 { + margin-left: 50%; + } + .\-5u\28desktop\29 { + margin-left: 41.66667%; + } + .\-4u\28desktop\29 { + margin-left: 33.33333%; + } + .\-3u\28desktop\29 { + margin-left: 25%; + } + .\-2u\28desktop\29 { + margin-left: 16.66667%; + } + .\-1u\28desktop\29 { + margin-left: 8.33333%; + } +} + +@media screen and (min-width: 737px) and (max-width: 1200px) { + .row>* { + padding: 35px 0 0 35px; + } + .row { + margin: -35px 0 -1px -35px; + } + .row.uniform>* { + padding: 35px 0 0 35px; + } + .row.uniform { + margin: -35px 0 -1px -35px; + } + .row.\32 00\25>* { + padding: 70px 0 0 70px; + } + .row.\32 00\25 { + margin: -70px 0 -1px -70px; + } + .row.uniform.\32 00\25>* { + padding: 70px 0 0 70px; + } + .row.uniform.\32 00\25 { + margin: -70px 0 -1px -70px; + } + .row.\31 50\25>* { + padding: 52.5px 0 0 52.5px; + } + .row.\31 50\25 { + margin: -52.5px 0 -1px -52.5px; + } + .row.uniform.\31 50\25>* { + padding: 52.5px 0 0 52.5px; + } + .row.uniform.\31 50\25 { + margin: -52.5px 0 -1px -52.5px; + } + .row.\35 0\25>* { + padding: 17.5px 0 0 17.5px; + } + .row.\35 0\25 { + margin: -17.5px 0 -1px -17.5px; + } + .row.uniform.\35 0\25>* { + padding: 17.5px 0 0 17.5px; + } + .row.uniform.\35 0\25 { + margin: -17.5px 0 -1px -17.5px; + } + .row.\32 5\25>* { + padding: 8.75px 0 0 8.75px; + } + .row.\32 5\25 { + margin: -8.75px 0 -1px -8.75px; + } + .row.uniform.\32 5\25>* { + padding: 8.75px 0 0 8.75px; + } + .row.uniform.\32 5\25 { + margin: -8.75px 0 -1px -8.75px; + } + .\31 2u\28tablet\29, + .\31 2u\24\28tablet\29 { + width: 100%; + clear: none; + margin-left: 0; + } + .\31 1u\28tablet\29, + .\31 1u\24\28tablet\29 { + width: 91.6666666667%; + clear: none; + margin-left: 0; + } + .\31 0u\28tablet\29, + .\31 0u\24\28tablet\29 { + width: 83.3333333333%; + clear: none; + margin-left: 0; + } + .\39 u\28tablet\29, + .\39 u\24\28tablet\29 { + width: 75%; + clear: none; + margin-left: 0; + } + .\38 u\28tablet\29, + .\38 u\24\28tablet\29 { + width: 66.6666666667%; + clear: none; + margin-left: 0; + } + .\37 u\28tablet\29, + .\37 u\24\28tablet\29 { + width: 58.3333333333%; + clear: none; + margin-left: 0; + } + .\36 u\28tablet\29, + .\36 u\24\28tablet\29 { + width: 50%; + clear: none; + margin-left: 0; + } + .\35 u\28tablet\29, + .\35 u\24\28tablet\29 { + width: 41.6666666667%; + clear: none; + margin-left: 0; + } + .\34 u\28tablet\29, + .\34 u\24\28tablet\29 { + width: 33.3333333333%; + clear: none; + margin-left: 0; + } + .\33 u\28tablet\29, + .\33 u\24\28tablet\29 { + width: 25%; + clear: none; + margin-left: 0; + } + .\32 u\28tablet\29, + .\32 u\24\28tablet\29 { + width: 16.6666666667%; + clear: none; + margin-left: 0; + } + .\31 u\28tablet\29, + .\31 u\24\28tablet\29 { + width: 8.3333333333%; + clear: none; + margin-left: 0; + } + .\31 2u\24\28tablet\29+*, + .\31 1u\24\28tablet\29+*, + .\31 0u\24\28tablet\29+*, + .\39 u\24\28tablet\29+*, + .\38 u\24\28tablet\29+*, + .\37 u\24\28tablet\29+*, + .\36 u\24\28tablet\29+*, + .\35 u\24\28tablet\29+*, + .\34 u\24\28tablet\29+*, + .\33 u\24\28tablet\29+*, + .\32 u\24\28tablet\29+*, + .\31 u\24\28tablet\29+* { + clear: left; + } + .\-11u\28tablet\29 { + margin-left: 91.66667%; + } + .\-10u\28tablet\29 { + margin-left: 83.33333%; + } + .\-9u\28tablet\29 { + margin-left: 75%; + } + .\-8u\28tablet\29 { + margin-left: 66.66667%; + } + .\-7u\28tablet\29 { + margin-left: 58.33333%; + } + .\-6u\28tablet\29 { + margin-left: 50%; + } + .\-5u\28tablet\29 { + margin-left: 41.66667%; + } + .\-4u\28tablet\29 { + margin-left: 33.33333%; + } + .\-3u\28tablet\29 { + margin-left: 25%; + } + .\-2u\28tablet\29 { + margin-left: 16.66667%; + } + .\-1u\28tablet\29 { + margin-left: 8.33333%; + } +} + +@media screen and (max-width: 736px) { + .row>* { + padding: 10px 0 0 10px; + } + .row { + margin: -10px 0 -1px -10px; + } + .row.uniform>* { + padding: 10px 0 0 10px; + } + .row.uniform { + margin: -10px 0 -1px -10px; + } + .row.\32 00\25>* { + padding: 20px 0 0 20px; + } + .row.\32 00\25 { + margin: -20px 0 -1px -20px; + } + .row.uniform.\32 00\25>* { + padding: 20px 0 0 20px; + } + .row.uniform.\32 00\25 { + margin: -20px 0 -1px -20px; + } + .row.\31 50\25>* { + padding: 15px 0 0 15px; + } + .row.\31 50\25 { + margin: -15px 0 -1px -15px; + } + .row.uniform.\31 50\25>* { + padding: 15px 0 0 15px; + } + .row.uniform.\31 50\25 { + margin: -15px 0 -1px -15px; + } + .row.\35 0\25>* { + padding: 5px 0 0 5px; + } + .row.\35 0\25 { + margin: -5px 0 -1px -5px; + } + .row.uniform.\35 0\25>* { + padding: 5px 0 0 5px; + } + .row.uniform.\35 0\25 { + margin: -5px 0 -1px -5px; + } + .row.\32 5\25>* { + padding: 2.5px 0 0 2.5px; + } + .row.\32 5\25 { + margin: -2.5px 0 -1px -2.5px; + } + .row.uniform.\32 5\25>* { + padding: 2.5px 0 0 2.5px; + } + .row.uniform.\32 5\25 { + margin: -2.5px 0 -1px -2.5px; + } + .\31 2u\28mobile\29, + .\31 2u\24\28mobile\29 { + width: 100%; + clear: none; + margin-left: 0; + } + .\31 1u\28mobile\29, + .\31 1u\24\28mobile\29 { + width: 91.6666666667%; + clear: none; + margin-left: 0; + } + .\31 0u\28mobile\29, + .\31 0u\24\28mobile\29 { + width: 83.3333333333%; + clear: none; + margin-left: 0; + } + .\39 u\28mobile\29, + .\39 u\24\28mobile\29 { + width: 75%; + clear: none; + margin-left: 0; + } + .\38 u\28mobile\29, + .\38 u\24\28mobile\29 { + width: 66.6666666667%; + clear: none; + margin-left: 0; + } + .\37 u\28mobile\29, + .\37 u\24\28mobile\29 { + width: 58.3333333333%; + clear: none; + margin-left: 0; + } + .\36 u\28mobile\29, + .\36 u\24\28mobile\29 { + width: 50%; + clear: none; + margin-left: 0; + } + .\35 u\28mobile\29, + .\35 u\24\28mobile\29 { + width: 41.6666666667%; + clear: none; + margin-left: 0; + } + .\34 u\28mobile\29, + .\34 u\24\28mobile\29 { + width: 33.3333333333%; + clear: none; + margin-left: 0; + } + .\33 u\28mobile\29, + .\33 u\24\28mobile\29 { + width: 25%; + clear: none; + margin-left: 0; + } + .\32 u\28mobile\29, + .\32 u\24\28mobile\29 { + width: 16.6666666667%; + clear: none; + margin-left: 0; + } + .\31 u\28mobile\29, + .\31 u\24\28mobile\29 { + width: 8.3333333333%; + clear: none; + margin-left: 0; + } + .\31 2u\24\28mobile\29+*, + .\31 1u\24\28mobile\29+*, + .\31 0u\24\28mobile\29+*, + .\39 u\24\28mobile\29+*, + .\38 u\24\28mobile\29+*, + .\37 u\24\28mobile\29+*, + .\36 u\24\28mobile\29+*, + .\35 u\24\28mobile\29+*, + .\34 u\24\28mobile\29+*, + .\33 u\24\28mobile\29+*, + .\32 u\24\28mobile\29+*, + .\31 u\24\28mobile\29+* { + clear: left; + } + .\-11u\28mobile\29 { + margin-left: 91.66667%; + } + .\-10u\28mobile\29 { + margin-left: 83.33333%; + } + .\-9u\28mobile\29 { + margin-left: 75%; + } + .\-8u\28mobile\29 { + margin-left: 66.66667%; + } + .\-7u\28mobile\29 { + margin-left: 58.33333%; + } + .\-6u\28mobile\29 { + margin-left: 50%; + } + .\-5u\28mobile\29 { + margin-left: 41.66667%; + } + .\-4u\28mobile\29 { + margin-left: 33.33333%; + } + .\-3u\28mobile\29 { + margin-left: 25%; + } + .\-2u\28mobile\29 { + margin-left: 16.66667%; + } + .\-1u\28mobile\29 { + margin-left: 8.33333%; + } +} /* Basic */ - @-ms-viewport { - width: device-width; - } - - body { - background: #303238 url("images/bg01.png"); - font-family: 'Open Sans', sans-serif; - color: #7b818c; - font-weight: 400; - } - - body.is-loading * { - -moz-transition: none !important; - -webkit-transition: none !important; - -ms-transition: none !important; - transition: none !important; - -moz-animation: none !important; - -webkit-animation: none !important; - -ms-animation: none !important; - animation: none !important; - } - - input, select, textarea { - font-family: 'Open Sans', sans-serif; - color: #7b818c; - font-weight: 400; - } - - a { - color: inherit; - text-decoration: underline; - } - - a:hover { - text-decoration: none; - } - - h1, h2, h3, h4, h5, h6 { - text-transform: uppercase; - font-weight: 800; - letter-spacing: 0.04em; - color: #404248; - margin: 0 0 1em 0; - } - - h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { - color: inherit; - text-decoration: none; - outline: 0; - } - - h2 { - font-size: 2em; - margin: 0 0 1.5em 0; - line-height: 1em; - } - - h2.icon { - line-height: 48px; - } - - h2.icon:before { - position: relative; - top: 0.05em; - margin-right: 0.5em; - opacity: 0.25; - } - - h3 { - font-size: 1.35em; - margin-top: 2em; - } - - b, strong { - color: #404248; - font-weight: 700; - } - - i, em { - font-style: italic; - } - - br.clear { - clear: both; - } - - sub { - position: relative; - top: 0.5em; - font-size: 0.8em; - } - - sup { - position: relative; - top: -0.5em; - font-size: 0.8em; - } - - hr { - border: 0; - border-top: solid 1px #ddd; - } - - blockquote { - border-left: solid 0.5em #ddd; - padding: 1em 0 1em 2em; - font-style: italic; - } - - p, ul, ol, dl, table { - margin-bottom: 2em; - } - - .date { - display: block; - text-transform: uppercase; - font-weight: 700; - letter-spacing: 0.065em; - font-size: 0.9em; - color: #696969; - margin: 0 0 0.25em 0; - } +@-ms-viewport { + width: device-width; +} + +body { + background: #303238 url("images/bg01.png"); + font-family: 'Open Sans', sans-serif; + color: #7b818c; + font-weight: 400; +} + +body.is-loading * { + -moz-transition: none !important; + -webkit-transition: none !important; + -ms-transition: none !important; + transition: none !important; + -moz-animation: none !important; + -webkit-animation: none !important; + -ms-animation: none !important; + animation: none !important; +} + +input, +select, +textarea { + font-family: 'Open Sans', sans-serif; + color: #7b818c; + font-weight: 400; +} + +a { + color: inherit; + text-decoration: underline; +} + +a:hover { + text-decoration: none; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + text-transform: uppercase; + font-weight: 800; + letter-spacing: 0.04em; + color: #404248; + margin: 0 0 1em 0; +} + +h1 a, +h2 a, +h3 a, +h4 a, +h5 a, +h6 a { + color: inherit; + text-decoration: none; + outline: 0; +} + +h2 { + font-size: 2em; + margin: 0 0 1.5em 0; + line-height: 1em; +} + +h2.icon { + line-height: 48px; +} + +h2.icon:before { + position: relative; + top: 0.05em; + margin-right: 0.5em; + opacity: 0.25; +} + +h3 { + font-size: 1.35em; + margin-top: 2em; +} + +b, +strong { + color: #404248; + font-weight: 700; +} + +i, +em { + font-style: italic; +} + +br.clear { + clear: both; +} + +sub { + position: relative; + top: 0.5em; + font-size: 0.8em; +} + +sup { + position: relative; + top: -0.5em; + font-size: 0.8em; +} + +hr { + border: 0; + border-top: solid 1px #ddd; +} + +blockquote { + border-left: solid 0.5em #ddd; + padding: 1em 0 1em 2em; + font-style: italic; +} + +p, +ul, +ol, +dl, +table { + margin-bottom: 2em; +} + +.date { + display: block; + text-transform: uppercase; + font-weight: 700; + letter-spacing: 0.065em; + font-size: 0.9em; + color: #696969; + margin: 0 0 0.25em 0; +} /* Section/Article */ - section, article { - margin-bottom: 5em; - } - - section > :last-child, - article > :last-child, - section:last-child, - article:last-child { - margin-bottom: 0; - } - - header { - margin: 0 0 2em 0; - } - - header h2, header h3 { - margin: 0 0 0.25em 0; - } - - header p { - display: block; - text-transform: uppercase; - font-weight: 700; - letter-spacing: 0.065em; - font-size: 0.9em; - color: #696969; - margin: 0; - } - - header p strong { - color: #404248; - font-weight: 800; - } - - footer { - margin: 2.5em 0 0 0; - } - - header.major { - border-bottom: solid 1px #dbdbdb; - margin: 0 0 3em 0; - } - - header.major:after { - content: ''; - display: block; - border-top: solid 1px #dbdbdb; - height: 8px; - } - - header.major h2, header.major h3 { - margin: 0 0 1.2em 0; - } - - header.major p { - margin: 0 0 1.5em 0; - position: relative; - top: -1em; - } +section, +article { + margin-bottom: 5em; +} + +section> :last-child, +article> :last-child, +section:last-child, +article:last-child { + margin-bottom: 0; +} + +header { + margin: 0 0 2em 0; +} + +header h2, +header h3 { + margin: 0 0 0.25em 0; +} + +header p { + display: block; + text-transform: uppercase; + font-weight: 700; + letter-spacing: 0.065em; + font-size: 0.9em; + color: #696969; + margin: 0; +} + +header p strong { + color: #404248; + font-weight: 800; +} + +footer { + margin: 2.5em 0 0 0; +} + +header.major { + border-bottom: solid 1px #dbdbdb; + margin: 0 0 3em 0; +} + +header.major:after { + content: ''; + display: block; + border-top: solid 1px #dbdbdb; + height: 8px; +} + +header.major h2, +header.major h3 { + margin: 0 0 1.2em 0; +} + +header.major p { + margin: 0 0 1.5em 0; + position: relative; + top: -1em; +} /* Forms */ - form label { - display: block; - text-transform: uppercase; - font-weight: 800; - letter-spacing: 0.04em; - color: #404248; - margin: 0 0 1em 0; - font-size: 0.8em; - } - - form input[type="text"], - form input[type="email"], - form input[type="password"], - form select, - form textarea { - -webkit-appearance: none; - display: block; - width: 100%; - border-radius: 8px; - border: solid 1px #eee; - } - - form input[type="text"]:focus, - form input[type="email"]:focus, - form input[type="password"]:focus, - form select:focus, - form textarea:focus { - box-shadow: 0 0 2px 1px #4091bf; - } - - form input[type="text"], - form input[type="email"], - form input[type="password"] { - line-height: 3em; - padding: 0 1em; - } - - form select { - line-height: 3em; - padding: 0 1em; - } - - form textarea { - min-height: 9em; - padding: 1em; - } - - form .formerize-placeholder, - form ::-webkit-input-placeholder, - form :-moz-placeholder, - form ::-moz-placeholder, - form :-ms-input-placeholder { - color: #555 !important; - } - - form ::-moz-focus-inner { - border: 0; - } +form label { + display: block; + text-transform: uppercase; + font-weight: 800; + letter-spacing: 0.04em; + color: #404248; + margin: 0 0 1em 0; + font-size: 0.8em; +} + +form input[type="text"], +form input[type="email"], +form input[type="password"], +form select, +form textarea { + -webkit-appearance: none; + display: block; + width: 100%; + border-radius: 8px; + border: solid 1px #eee; +} + +form input[type="text"]:focus, +form input[type="email"]:focus, +form input[type="password"]:focus, +form select:focus, +form textarea:focus { + box-shadow: 0 0 2px 1px #4091bf; +} + +form input[type="text"], +form input[type="email"], +form input[type="password"] { + line-height: 3em; + padding: 0 1em; +} + +form select { + line-height: 3em; + padding: 0 1em; +} + +form textarea { + min-height: 9em; + padding: 1em; +} + +form .formerize-placeholder, +form ::-webkit-input-placeholder, +form :-moz-placeholder, +form ::-moz-placeholder, +form :-ms-input-placeholder { + color: #555 !important; +} + +form ::-moz-focus-inner { + border: 0; +} /* Tables */ - table { - width: 100%; - } - - table.default { - width: 100%; - } - - table.default tr { - border-top: solid 1px #eee; - } - - table.default tr:first-child { - border-top: 0; - } - - table.default td { - padding: 0.5em 1em 0.5em 1em; - } - - table.default th { - text-align: left; - padding: 0.5em 1em 0.5em 1em; - text-transform: uppercase; - font-weight: 800; - letter-spacing: 0.04em; - margin: 0 0 1em 0; - font-size: 0.8em; - } - - table.default thead { - background: #404248; - color: #fff; - } +table { + width: 100%; +} + +table.default { + width: 100%; +} + +table.default tr { + border-top: solid 1px #eee; +} + +table.default tr:first-child { + border-top: 0; +} + +table.default td { + padding: 0.5em 1em 0.5em 1em; +} + +table.default th { + text-align: left; + padding: 0.5em 1em 0.5em 1em; + text-transform: uppercase; + font-weight: 800; + letter-spacing: 0.04em; + margin: 0 0 1em 0; + font-size: 0.8em; +} + +table.default thead { + background: #404248; + color: #fff; +} /* Image */ - .image { - position: relative; - display: inline-block; - } - - .image img { - display: block; - width: 100%; - border-radius: 8px; - } - - .image:before { - content: ''; - display: block; - position: absolute; - left: 0; - top: 0; - /*background: url("images/bg01.png");*/ - width: 100%; - height: 100%; - opacity: 0.75; - } - - .image.fit { - display: block; - width: 100%; - } - - .image.featured { - display: block; - width: 100%; - margin: 0 0 2.5em 0; - } - - .image.left { - float: left; - margin: 0 2em 2em 0; - } - - .image.centered { - display: block; - margin: 0 0 2.5em 0; - } - - .image.centered img { - margin: 0 auto; - width: auto; - } +.image { + position: relative; + display: inline-block; +} + +.image img { + display: block; + width: 100%; + border-radius: 8px; +} + +.image:before { + content: ''; + display: block; + position: absolute; + left: 0; + top: 0; + /*background: url("images/bg01.png");*/ + width: 100%; + height: 100%; + opacity: 0.75; +} + +.image.fit { + display: block; + width: 100%; +} + +.image.featured { + display: block; + width: 100%; + margin: 0 0 2.5em 0; +} + +.image.left { + float: left; + margin: 0 2em 2em 0; +} + +.image.centered { + display: block; + margin: 0 0 2.5em 0; +} + +.image.centered img { + margin: 0 auto; + width: auto; +} /* Button */ - input[type="button"], - input[type="submit"], - input[type="reset"], - button, - .button { - background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2)), url("images/bg02.png"); - background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2)), url("images/bg02.png"); - background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2)), url("images/bg02.png"); - background-image: linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2)), url("images/bg02.png"); - -moz-transition: background-color 0.2s ease-in-out; - -webkit-transition: background-color 0.2s ease-in-out; - -ms-transition: background-color 0.2s ease-in-out; - transition: background-color 0.2s ease-in-out; - -webkit-appearance: none; - position: relative; - display: inline-block; - background-color: #4091bf; - border-radius: 8px; - box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.35), inset 0px 2px 1px 0px rgba(255, 255, 255, 0.35); - text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.5); - color: #fff !important; - text-decoration: none; - text-transform: uppercase; - font-weight: 800; - font-size: 0.95em; - letter-spacing: 0.075em; - padding: 1em 2em; - outline: 0; - border: 0; - white-space: nowrap; - cursor: pointer; - } - - input[type="button"].icon:before, - input[type="submit"].icon:before, - input[type="reset"].icon:before, - button.icon:before, - .button.icon:before { - opacity: 0.5; - margin-right: 0.5em; - position: relative; - top: 0.05em; - } - - input[type="button"]:hover, - input[type="submit"]:hover, - input[type="reset"]:hover, - button:hover, - .button:hover { - background-color: #50a1cf; - } - - input[type="button"]:active, - input[type="submit"]:active, - input[type="reset"]:active, - button:active, - .button:active { - background-color: #3081af; - } - - input[type="button"].medium, - input[type="submit"].medium, - input[type="reset"].medium, - button.medium, - .button.medium { - font-size: 1.25em; - padding: 1em 2.25em; - } - - input[type="button"].big, - input[type="submit"].big, - input[type="reset"].big, - button.big, - .button.big { - font-size: 1.5em; - padding: 1em 2.25em; - } - - input[type="button"].alt, - input[type="submit"].alt, - input[type="reset"].alt, - button.alt, - .button.alt { - background-color: #464a52; - } - - input[type="button"].alt:hover, - input[type="submit"].alt:hover, - input[type="reset"].alt:hover, - button.alt:hover, - .button.alt:hover { - background-color: #565a62; - } - - input[type="button"].alt:active, - input[type="submit"].alt:active, - input[type="reset"].alt:active, - button.alt:active, - .button.alt:active { - background-color: #363a42; - } +input[type="button"], +input[type="submit"], +input[type="reset"], +button, +.button { + background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2)), url("images/bg02.png"); + background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2)), url("images/bg02.png"); + background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2)), url("images/bg02.png"); + background-image: linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2)), url("images/bg02.png"); + -moz-transition: background-color 0.2s ease-in-out; + -webkit-transition: background-color 0.2s ease-in-out; + -ms-transition: background-color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out; + -webkit-appearance: none; + position: relative; + display: inline-block; + background-color: #4091bf; + border-radius: 8px; + box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.35), inset 0px 2px 1px 0px rgba(255, 255, 255, 0.35); + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.5); + color: #fff !important; + text-decoration: none; + text-transform: uppercase; + font-weight: 800; + font-size: 0.95em; + letter-spacing: 0.075em; + padding: 1em 2em; + outline: 0; + border: 0; + white-space: nowrap; + cursor: pointer; +} + +input[type="button"].icon:before, +input[type="submit"].icon:before, +input[type="reset"].icon:before, +button.icon:before, +.button.icon:before { + opacity: 0.5; + margin-right: 0.5em; + position: relative; + top: 0.05em; +} + +input[type="button"]:hover, +input[type="submit"]:hover, +input[type="reset"]:hover, +button:hover, +.button:hover { + background-color: #50a1cf; +} + +input[type="button"]:active, +input[type="submit"]:active, +input[type="reset"]:active, +button:active, +.button:active { + background-color: #3081af; +} + +input[type="button"].medium, +input[type="submit"].medium, +input[type="reset"].medium, +button.medium, +.button.medium { + font-size: 1.25em; + padding: 1em 2.25em; +} + +input[type="button"].big, +input[type="submit"].big, +input[type="reset"].big, +button.big, +.button.big { + font-size: 1.5em; + padding: 1em 2.25em; +} + +input[type="button"].alt, +input[type="submit"].alt, +input[type="reset"].alt, +button.alt, +.button.alt { + background-color: #464a52; +} + +input[type="button"].alt:hover, +input[type="submit"].alt:hover, +input[type="reset"].alt:hover, +button.alt:hover, +.button.alt:hover { + background-color: #565a62; +} + +input[type="button"].alt:active, +input[type="submit"].alt:active, +input[type="reset"].alt:active, +button.alt:active, +.button.alt:active { + background-color: #363a42; +} /* List */ - dl.contact dt { - display: block; - text-transform: uppercase; - font-weight: 700; - letter-spacing: 0.065em; - font-size: 0.9em; - color: #696969; - float: left; - width: 6em; - } - - dl.contact dd { - margin: 0 0 1em 6em; - } - - ul.default { - list-style: disc; - padding-left: 1em; - } - - ul.default li { - padding-left: 0.5em; - } - - ul.actions li { - display: inline-block; - padding: 0 0 0 0.25em; - margin: 0 0 0 0.25em; - } - - ul.actions li:first-child { - margin-left: 0; - padding-left: 0; - } - - ul.menu li { - border-left: solid 1px #eee; - display: inline-block; - padding: 0 0 0 1em; - margin: 0 0 0 1em; - } - - ul.menu li:first-child { - border-left: 0; - margin-left: 0; - padding-left: 0; - } - - ul.divided li { - border-top: solid 1px #eee; - padding: 0.5em 0 0 0; - margin: 0.5em 0 0 0; - } - - ul.divided li:first-child { - border-top: 0 !important; - padding-top: 0 !important; - margin-top: 0 !important; - } - - ol.default { - list-style: decimal; - padding-left: 1.25em; - } - - ol.default li { - padding-left: 0.25em; - } +dl.contact dt { + display: block; + text-transform: uppercase; + font-weight: 700; + letter-spacing: 0.065em; + font-size: 0.9em; + color: #696969; + float: left; + width: 6em; +} + +dl.contact dd { + margin: 0 0 1em 6em; +} + +ul.default { + list-style: disc; + padding-left: 1em; +} + +ul.default li { + padding-left: 0.5em; +} + +ul.actions li { + display: inline-block; + padding: 0 0 0 0.25em; + margin: 0 0 0 0.25em; +} + +ul.actions li:first-child { + margin-left: 0; + padding-left: 0; +} + +ul.menu li { + border-left: solid 1px #eee; + display: inline-block; + padding: 0 0 0 1em; + margin: 0 0 0 1em; +} + +ul.menu li:first-child { + border-left: 0; + margin-left: 0; + padding-left: 0; +} + +ul.divided li { + border-top: solid 1px #eee; + padding: 0.5em 0 0 0; + margin: 0.5em 0 0 0; +} + +ul.divided li:first-child { + border-top: 0 !important; + padding-top: 0 !important; + margin-top: 0 !important; +} + +ol.default { + list-style: decimal; + padding-left: 1.25em; +} + +ol.default li { + padding-left: 0.25em; +} /* Box */ - .box.excerpt { - position: relative; - overflow: hidden; - } - - .box.excerpt header { - margin: 0 0 1em 0; - } - - .box.excerpt .image, .box.excerpt p { - margin-bottom: 0; - } - - .box.feature1 { - text-align: center; - } - - .box.feature1 header.first h2 { - font-size: 2.5em; - } - - .box.feature1 header.first p { - font-size: 1.2em; - } - - .box.feature1 header.second { - position: relative; - display: inline-block; - text-align: left; - margin: 0 auto; - white-space: nowrap; - left: 24px; - } - - .box.feature1 header.second p { - line-height: 1em; - } - - .box.feature1 header.second:before { - font-size: 48px; - position: absolute; - right: 100%; - margin-right: 18px; - opacity: 0.5; - bottom: -4px; - } - - .box.feature2 { - text-align: center; - } - - .box.article-list article { - border-bottom: solid 1px #dbdbdb; - margin: 0 0 2.75em 0; - padding: 0 0 2.75em 0; - } - - .box.article-list article:last-child { - border-bottom: 0; - margin-bottom: 0; - padding-bottom: 0; - } +.box.excerpt { + position: relative; + overflow: hidden; +} + +.box.excerpt header { + margin: 0 0 1em 0; +} + +.box.excerpt .image, +.box.excerpt p { + margin-bottom: 0; +} + +.box.feature1 { + text-align: center; +} + +.box.feature1 header.first h2 { + font-size: 2.5em; +} + +.box.feature1 header.first p { + font-size: 1.2em; +} + +.box.feature1 header.second { + position: relative; + display: inline-block; + text-align: left; + margin: 0 auto; + white-space: nowrap; + left: 24px; +} + +.box.feature1 header.second p { + line-height: 1em; +} + +.box.feature1 header.second:before { + font-size: 48px; + position: absolute; + right: 100%; + margin-right: 18px; + opacity: 0.5; + bottom: -4px; +} + +.box.feature2 { + text-align: center; +} + +.box.article-list article { + border-bottom: solid 1px #dbdbdb; + margin: 0 0 2.75em 0; + padding: 0 0 2.75em 0; +} + +.box.article-list article:last-child { + border-bottom: 0; + margin-bottom: 0; + padding-bottom: 0; +} /* Icons */ - .icon { - text-decoration: none; - } - - .icon:before { - display: inline-block; - font-family: FontAwesome; - font-size: 1.25em; - text-decoration: none; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - } - - .icon > .label { - display: none; - } +.icon { + text-decoration: none; +} + +.icon:before { + display: inline-block; + font-family: FontAwesome; + font-size: 1.25em; + text-decoration: none; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon>.label { + display: none; +} /* Banner */ - #banner { - text-align: center; - } - - #banner h2 { - border: solid 1px rgba(255, 255, 255, 0.25); - border-left: 0; - border-right: 0; - color: #fff; - color: rgba(255, 255, 255, 0.75); - font-size: 2.35em; - font-weight: 700; - line-height: 1.3em; - margin: 0 0 1.5em 0; - } - - #banner h2 strong { - font-weight: 800; - color: inherit; - } - - #banner h2:before { - content: ''; - display: block; - border-top: solid 1px; - border-color: #888; - border-color: rgba(255, 255, 255, 0.25); - margin: 10px 0 1.25em 0; - } - - #banner h2:after { - content: ''; - display: block; - border-bottom: solid 1px; - border-color: #888; - border-color: rgba(255, 255, 255, 0.25); - margin: 1.25em 0 10px 0; - } - - #banner p { - text-transform: uppercase; - color: #fff; - color: rgba(255, 255, 255, 0.75); - font-size: 1.5em; - font-weight: 700; - line-height: 1.3em; - letter-spacing: 0.04em; - } +#banner { + text-align: center; +} + +#banner h2 { + border: solid 1px rgba(255, 255, 255, 0.25); + border-left: 0; + border-right: 0; + color: #fff; + color: rgba(255, 255, 255, 0.75); + font-size: 2.35em; + font-weight: 700; + line-height: 1.3em; + margin: 0 0 1.5em 0; +} + +#banner h2 strong { + font-weight: 800; + color: inherit; +} + +#banner h2:before { + content: ''; + display: block; + border-top: solid 1px; + border-color: #888; + border-color: rgba(255, 255, 255, 0.25); + margin: 10px 0 1.25em 0; +} + +#banner h2:after { + content: ''; + display: block; + border-bottom: solid 1px; + border-color: #888; + border-color: rgba(255, 255, 255, 0.25); + margin: 1.25em 0 10px 0; +} + +#banner p { + text-transform: uppercase; + color: #fff; + color: rgba(255, 255, 255, 0.75); + font-size: 1.5em; + font-weight: 700; + line-height: 1.3em; + letter-spacing: 0.04em; +} /* Wrappers */ - #header-wrapper { - background: url("images/bg01.png"), url("../img/header.jpg"); - background-position: top left, center center; - background-size: auto, cover; - } - - #main-wrapper { - background: #fff; - } - - #footer-wrapper { - background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5)), url("images/bg03.png"), url("images/bg02.png"); - background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5)), url("images/bg03.png"), url("images/bg02.png"); - background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5)), url("images/bg03.png"), url("images/bg02.png"); - background-image: linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5)), url("images/bg03.png"), url("images/bg02.png"); - position: relative; - background-repeat: repeat-x, no-repeat, repeat; - background-size: 100% 100%, 100% 15em, auto auto; - background-position: top left, top center, top left; - } - - .wrapper > .inner { - position: relative; - z-index: 2; - } - - .wrapper.style1 { - position: relative; - text-shadow: 1px 1px 0 #fff; - background-color: #fff; - background-image: url("images/bg03.png"), url("images/bg04.png"), url("images/bg02.png"); - background-repeat: no-repeat, no-repeat, repeat; - background-size: 100% 15em, 100% 15em, auto auto; - background-position: top center, bottom center, top left; - } - - .wrapper.style3 { - position: relative; - text-shadow: 1px 1px 0 #fff; - background-color: #fff; - background-image: url("images/bg03.png"), url("images/bg02.png"); - background-repeat: no-repeat, repeat; - background-size: 100% 15em, auto auto; - background-position: top center, top left; - } +#header-wrapper { + background: url("images/bg01.png"), url("../img/header.jpg"); + background-position: top left, center center; + background-size: auto, cover; +} + +#main-wrapper { + background: #fff; +} + +#footer-wrapper { + background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5)), url("images/bg03.png"), url("images/bg02.png"); + background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5)), url("images/bg03.png"), url("images/bg02.png"); + background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5)), url("images/bg03.png"), url("images/bg02.png"); + background-image: linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5)), url("images/bg03.png"), url("images/bg02.png"); + position: relative; + background-repeat: repeat-x, no-repeat, repeat; + background-size: 100% 100%, 100% 15em, auto auto; + background-position: top left, top center, top left; +} + +.wrapper>.inner { + position: relative; + z-index: 2; +} + +.wrapper.style1 { + position: relative; + text-shadow: 1px 1px 0 #fff; + background-color: #fff; + background-image: url("images/bg03.png"), url("images/bg04.png"), url("images/bg02.png"); + background-repeat: no-repeat, no-repeat, repeat; + background-size: 100% 15em, 100% 15em, auto auto; + background-position: top center, bottom center, top left; +} + +.wrapper.style3 { + position: relative; + text-shadow: 1px 1px 0 #fff; + background-color: #fff; + background-image: url("images/bg03.png"), url("images/bg02.png"); + background-repeat: no-repeat, repeat; + background-size: 100% 15em, auto auto; + background-position: top center, top left; +} /* Header */ - #header { - margin-bottom: 0; - } +#header { + margin-bottom: 0; +} /* Footer */ - #footer { - margin-bottom: 0; - text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.5); - position: relative; - z-index: 2; - } - - #footer h2 { - font-size: 1.35em; - color: #fff; - } - - #footer strong { - color: #fff; - } - - #footer a { - color: #acb2bf; - } - - #footer .button.alt { - box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.75), inset 0px 2px 1px 0px rgba(255, 255, 255, 0.25); - } - - #footer ul.divided li, #footer ul.menu li { - border-color: #444; - border-color: rgba(255, 255, 255, 0.075); - } - - #footer ul.divided li a { - text-decoration: none; - } - - #footer ul.menu { - margin: 0; - } - - #footer dl.contact dt { - color: #ddd; - } - - #copyright { - border-top: solid 1px; - border-color: #444; - border-color: rgba(255, 255, 255, 0.075); - text-align: center; - margin-top: 2em; - padding: 3em 0 4em 0; - color: inherit; - } - - #copyright a { - color: inherit; - } +#footer { + margin-bottom: 0; + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.5); + position: relative; + z-index: 2; +} + +#footer h2 { + font-size: 1.35em; + color: #fff; +} + +#footer strong { + color: #fff; +} + +#footer a { + color: #acb2bf; +} + +#footer .button.alt { + box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.75), inset 0px 2px 1px 0px rgba(255, 255, 255, 0.25); +} + +#footer ul.divided li, +#footer ul.menu li { + border-color: #444; + border-color: rgba(255, 255, 255, 0.075); +} + +#footer ul.divided li a { + text-decoration: none; +} + +#footer ul.menu { + margin: 0; +} + +#footer dl.contact dt { + color: #ddd; +} + +#copyright { + border-top: solid 1px; + border-color: #444; + border-color: rgba(255, 255, 255, 0.075); + text-align: center; + margin-top: 2em; + padding: 3em 0 4em 0; + color: inherit; +} + +#copyright a { + color: inherit; +} + +/* Alerts */ + +.alert { + border-left: solid 0.5em #ddd; + padding: 0.1em 0 0.1em 1em; + margin: 1em 0em 1em 0em; +} + +.alert>p, +.alert>ul { + margin-bottom: 0 +} + +.alert>p+p { + margin-top: 5px +} + +.alert-info { + border-left-color: #31708f; +} + +.alert-info h5 { + color: #31708f; +} + +.alert-warning { + border-left-color: #b48129; +} + +.alert-warning h5 { + color: #b48129; +} + +.alert-danger { + border-left-color: #a94442; +} + +.alert-danger h5 { + color: #a94442 +} + +.alert h5 { + text-transform: uppercase; + font-weight: bold; + margin-top: 0; +} + +.alert h5:before { + position: relative; + top: 1px; + display: inline-block; + font-family: FontAwesome; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + margin-right: 5px; + font-weight: normal; +} + +.alert-info h5:before { + content: "\f05a" +} + +.alert-warning h5:before { + content: "\f06a" +} + +.alert-danger h5:before { + content: "\f06a" +} + +/* copy to clipboard */ + +.snippet { + position: relative; + overflow: visible +} + +.snippet a.btn { + -webkit-transition: opacity .3s ease-in-out; + -o-transition: opacity .3s ease-in-out; + transition: opacity .3s ease-in-out; + opacity: 0; + color: #bbb; + padding: 0 .5em; + background: #f5f2f0; + background: rgba(224, 224, 224, .2); + box-shadow: 0 2px 0 0 rgba(0, 0, 0, .2); + border-radius: .5em; + position: absolute; + right: -5px; + top: -5px; + text-align: left; +} + +.snippet:hover .btn, +.snippet .btn:focus { + opacity: 1 +} + +pre.code-toolbar>.toolbar a, +pre.code-toolbar>.toolbar button, +pre.code-toolbar>.toolbar span { + font-size: inherit +} /* Desktop + Tablet */ - @media screen and (min-width: 737px) { - - /* Basic */ - - body, input, select, textarea { - font-size: 11pt; - line-height: 1.85em; - } - - /* Sidebar */ - - #sidebar h2 { - font-size: 1.5em; - } - - /* Wrappers */ - - #header-wrapper { - padding: 3em 0; - } - - .wrapper { - padding: 7em 0 7em 0; - } - - #footer-wrapper { - padding: 7em 0 7em 0; - } - - /* Header */ - - #header { - position: relative; - border-radius: 10px; - background: rgba(255, 255, 255, 0.1); - padding: 0.75em; - } - - #header .inner { - background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); - background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); - background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); - background-image: linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); - position: relative; - height: 5.5em; - background-color: #3B3E45; - background-color: rgba(59, 62, 69, 0.9); - border-radius: 8px; - box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.45), inset 0px 2px 1px 0px rgba(255, 255, 255, 0.15); - text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.5); - } - - #header h1 { - position: absolute; - left: 1.75em; - top: 50%; - margin-top: -0.65em; - font-size: 1.5em; - color: #fff; - } - - /* Nav */ - - #nav { - position: absolute; - right: 2em; - top: 0; - line-height: 5.5em; - } - - #nav > ul > li { - float: left; - padding: 0 0.8em 0 0.8em; - } - - #nav > ul > li > a, #nav > ul > li > span { - color: #fff; - text-decoration: none; - text-transform: uppercase; - font-weight: 800; - font-size: 0.95em; - letter-spacing: 0.075em; - padding: 0.5em 0.8em 0.5em 0.8em; - border-radius: 6px; - outline: 0; - } - - #nav > ul > li.active > a, #nav > ul > li.current_page_item > a, #nav > ul > li.active > span, #nav > ul > li.current_page_item > span { - background: rgba(0, 0, 0, 0.15); - box-shadow: inset 1px 1px 0px 0px rgba(0, 0, 0, 0.025), 1px 1px 0px 0px rgba(255, 255, 255, 0.025); - } - - #nav > ul > li:last-child { - padding-right: 0; - } - - #nav > ul > li > ul { - display: none; - } - - .dropotron { - background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.35), rgba(0, 0, 0, 0)), url("images/bg02.png"); - background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.35), rgba(0, 0, 0, 0)), url("images/bg02.png"); - background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0.35), rgba(0, 0, 0, 0)), url("images/bg02.png"); - background-image: linear-gradient(top, rgba(0, 0, 0, 0.35), rgba(0, 0, 0, 0)), url("images/bg02.png"); - position: relative; - background-color: #3B3E45; - background-color: rgba(59, 62, 69, 0.9); - border-radius: 8px; - box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.5), inset 0px 0px 0px 2px rgba(255, 255, 255, 0.075), inset 0px 2px 1px 0px rgba(255, 255, 255, 0.2), 0px 2px 14px 0px rgba(0, 0, 0, 0.4); - text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.5); - padding: 1.5em; - line-height: 2.5em; - min-width: 15em; - } - - .dropotron.level-0 { - border-top-left-radius: 0; - border-top-right-radius: 0; - margin-top: -2px; - box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.5), inset 0px 0px 0px 2px rgba(255, 255, 255, 0.075), 0px 2px 14px 0px rgba(0, 0, 0, 0.4); - } - - .dropotron a, .dropotron span { - color: #aaa; - text-decoration: none; - text-transform: uppercase; - font-weight: 800; - font-size: 0.8em; - letter-spacing: 0.075em; - outline: 0; - } - - .dropotron li:hover > a, .dropotron li:hover > span { - color: #fff; - } - - /* Banner */ - - #banner { - width: 940px; - margin: 0 auto; - overflow: hidden; - padding: 9em 0 6em 0; - } - - #banner p { - float: left; - text-align: right; - width: 60%; - line-height: 1.5em; - margin: 0; - } - - } +@media screen and (min-width: 737px) { + /* Basic */ + body, + input, + select, + textarea { + font-size: 11pt; + line-height: 1.85em; + } + /* Sidebar */ + #sidebar h2 { + font-size: 1.5em; + } + /* Wrappers */ + #header-wrapper { + padding: 3em 0; + } + .wrapper { + padding: 7em 0 7em 0; + } + #footer-wrapper { + padding: 7em 0 7em 0; + } + /* Header */ + #header { + position: relative; + border-radius: 10px; + background: rgba(255, 255, 255, 0.1); + padding: 0.75em; + } + #header .inner { + background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); + background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); + background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); + background-image: linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); + position: relative; + height: 5.5em; + background-color: #3B3E45; + background-color: rgba(59, 62, 69, 0.9); + border-radius: 8px; + box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.45), inset 0px 2px 1px 0px rgba(255, 255, 255, 0.15); + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.5); + } + #header h1 { + position: absolute; + left: 1.75em; + top: 50%; + margin-top: -0.65em; + font-size: 1.5em; + color: #fff; + } + /* Nav */ + #nav { + position: absolute; + right: 2em; + top: 0; + line-height: 5.5em; + } + #nav>ul>li { + float: left; + padding: 0 0.8em 0 0.8em; + } + #nav>ul>li>a, + #nav>ul>li>span { + color: #fff; + text-decoration: none; + text-transform: uppercase; + font-weight: 800; + font-size: 0.95em; + letter-spacing: 0.075em; + padding: 0.5em 0.8em 0.5em 0.8em; + border-radius: 6px; + outline: 0; + } + #nav>ul>li.active>a, + #nav>ul>li.current_page_item>a, + #nav>ul>li.active>span, + #nav>ul>li.current_page_item>span { + background: rgba(0, 0, 0, 0.15); + box-shadow: inset 1px 1px 0px 0px rgba(0, 0, 0, 0.025), 1px 1px 0px 0px rgba(255, 255, 255, 0.025); + } + #nav>ul>li:last-child { + padding-right: 0; + } + #nav>ul>li>ul { + display: none; + } + .dropotron { + background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.35), rgba(0, 0, 0, 0)), url("images/bg02.png"); + background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.35), rgba(0, 0, 0, 0)), url("images/bg02.png"); + background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0.35), rgba(0, 0, 0, 0)), url("images/bg02.png"); + background-image: linear-gradient(top, rgba(0, 0, 0, 0.35), rgba(0, 0, 0, 0)), url("images/bg02.png"); + position: relative; + background-color: #3B3E45; + background-color: rgba(59, 62, 69, 0.9); + border-radius: 8px; + box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.5), inset 0px 0px 0px 2px rgba(255, 255, 255, 0.075), inset 0px 2px 1px 0px rgba(255, 255, 255, 0.2), 0px 2px 14px 0px rgba(0, 0, 0, 0.4); + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.5); + padding: 1.5em; + line-height: 2.5em; + min-width: 15em; + } + .dropotron.level-0 { + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-top: -2px; + box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.5), inset 0px 0px 0px 2px rgba(255, 255, 255, 0.075), 0px 2px 14px 0px rgba(0, 0, 0, 0.4); + } + .dropotron a, + .dropotron span { + color: #aaa; + text-decoration: none; + text-transform: uppercase; + font-weight: 800; + font-size: 0.8em; + letter-spacing: 0.075em; + outline: 0; + } + .dropotron li:hover>a, + .dropotron li:hover>span { + color: #fff; + } + /* Banner */ + #banner { + width: 940px; + margin: 0 auto; + overflow: hidden; + padding: 9em 0 6em 0; + } + #banner p { + float: left; + text-align: right; + width: 60%; + line-height: 1.5em; + margin: 0; + } +} /* Tablet Only */ - @media screen and (min-width: 737px) and (max-width: 1200px) { - - /* Basic */ - - body { - min-width: 1000px; - line-height: 1.75em; - font-size: 10.75pt; - } - - input, select, textarea { - line-height: 1.75em; - font-size: 10.75pt; - } - - /* Wrappers */ - - #header-wrapper { - padding: 2em 0 0 0; - height: 11em; - } - - body.homepage #header-wrapper { - height: 36em; - } - - #footer-wrapper { - padding: 4.5em 0 4.5em 0; - } - - .wrapper { - padding: 4.5em 0 4.5em 0; - } - - /* Banner */ - - #banner { - width: 940px; - padding: 3em 0 0 0; - } - - #banner h2 { - font-size: 2.2em; - line-height: 1.3em; - margin: 0 0 1em 0; - } - - #banner p { - font-size: 1.25em; - line-height: 1.75em; - letter-spacing: 0.04em; - } - - } +@media screen and (min-width: 737px) and (max-width: 1200px) { + /* Basic */ + body { + min-width: 1000px; + line-height: 1.75em; + font-size: 10.75pt; + } + input, + select, + textarea { + line-height: 1.75em; + font-size: 10.75pt; + } + /* Wrappers */ + #header-wrapper { + padding: 2em 0 0 0; + height: 11em; + } + body.homepage #header-wrapper { + height: 36em; + } + #footer-wrapper { + padding: 4.5em 0 4.5em 0; + } + .wrapper { + padding: 4.5em 0 4.5em 0; + } + /* Banner */ + #banner { + width: 940px; + padding: 3em 0 0 0; + } + #banner h2 { + font-size: 2.2em; + line-height: 1.3em; + margin: 0 0 1em 0; + } + #banner p { + font-size: 1.25em; + line-height: 1.75em; + letter-spacing: 0.04em; + } +} /* Mobile Only */ - #navPanel, #titleBar { - display: none; - } - - @media screen and (max-width: 736px) { - - /* Basic */ - - html, body { - overflow-x: hidden; - } - - body, input, select, textarea { - line-height: 1.75em; - font-size: 10pt; - letter-spacing: 0; - } - - h2, h3, h4, h5, h6 { - font-size: 13pt !important; - } - - h2 { - line-height: 1.5em; - } - - /* Section/Article */ - - section, article { - clear: both; - margin-bottom: 4em !important; - } - - /* Image */ - - .image.left { - width: 25%; - margin-bottom: 2em !important; - } - - /* Button */ - - .button { - width: 100%; - font-size: 1.1em; - text-align: center; - padding: 1em 0 1em 0; - border-radius: 8px; - } - - /* List */ - - ul.menu li { - display: block; - border: 0 !important; - padding: 0 !important; - margin: 0 !important; - } - - ul.actions li { - display: block; - padding: 0; - margin: 1em 0 0 0; - } - - ul.actions li:first-child { - margin-top: 0; - } - - /* Box */ - - .box.excerpt .image-left { - margin-right: 0; - } - - .box.excerpt header { - margin-left: 32%; - } - - .box.excerpt p { - clear: both; - } - - .box.feature1 section { - margin-bottom: 1em !important; - } - - /* Off-Canvas Navigation */ - - #page-wrapper { - -moz-backface-visibility: hidden; - -webkit-backface-visibility: hidden; - -ms-backface-visibility: hidden; - backface-visibility: hidden; - -moz-transition: -moz-transform 0.5s ease; - -webkit-transition: -webkit-transform 0.5s ease; - -ms-transition: -ms-transform 0.5s ease; - transition: transform 0.5s ease; - padding-bottom: 1px; - } - - #titleBar { - -moz-backface-visibility: hidden; - -webkit-backface-visibility: hidden; - -ms-backface-visibility: hidden; - backface-visibility: hidden; - background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); - background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); - background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); - background-image: linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); - -moz-transition: -moz-transform 0.5s ease; - -webkit-transition: -webkit-transform 0.5s ease; - -ms-transition: -ms-transform 0.5s ease; - transition: transform 0.5s ease; - background-color: rgba(59, 62, 69, 0.9); - box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.5), inset 0px 0px 0px 2px rgba(255, 255, 255, 0.075), 0px 1px 6px 0px rgba(0, 0, 0, 0.35); - display: block; - height: 44px; - left: 0; - position: fixed; - text-shadow: -1px -1px 0 black; - top: 0; - width: 100%; - z-index: 10001; - } - - #titleBar .title { - display: block; - text-transform: uppercase; - font-weight: 800; - letter-spacing: 0.04em; - color: #fff; - line-height: 44px; - text-align: center; - } - - #titleBar .toggle { - position: absolute; - left: 0; - top: 0; - width: 60px; - height: 44px; - opacity: 0.25; - } - - #titleBar .toggle:before { - display: inline-block; - font-family: FontAwesome; - text-decoration: none; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - font-size: 18px; - width: 44px; - height: 44px; - line-height: 44px; - text-align: center; - color: #fff; - content: '\f0c9'; - } - - #titleBar .toggle:active { - opacity: 0.5; - } - - #navPanel { - -moz-backface-visibility: hidden; - -webkit-backface-visibility: hidden; - -ms-backface-visibility: hidden; - backface-visibility: hidden; - background-image: -moz-linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg01.png"); - background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg01.png"); - background-image: -ms-linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg01.png"); - background-image: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg01.png"); - -moz-transform: translateX(-275px); - -webkit-transform: translateX(-275px); - -ms-transform: translateX(-275px); - transform: translateX(-275px); - -moz-transition: -moz-transform 0.5s ease; - -webkit-transition: -webkit-transform 0.5s ease; - -ms-transition: -ms-transform 0.5s ease; - transition: transform 0.5s ease; - background-color: #303238; - box-shadow: inset -1px 0px 0px 0px rgba(0, 0, 0, 0.5), inset -2px 0px 0px rgba(255, 255, 255, 0.15), inset -2px 0px 10px 0px rgba(0, 0, 0, 0.35); - display: block; - height: 100%; - left: 0; - overflow-y: auto; - position: fixed; - top: 0; - width: 275px; - z-index: 10002; - } - - #navPanel .link { - display: block; - color: #aaa; - text-decoration: none; - height: 44px; - line-height: 44px; - border-top: solid 1px rgba(255, 255, 255, 0.05); - border-bottom: solid 1px rgba(0, 0, 0, 0.15); - padding: 0 1em 0 1em; - text-transform: uppercase; - font-weight: 700; - font-size: 0.95em; - letter-spacing: 0.075em; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - - #navPanel .link:first-child { - border-top: 0; - } - - #navPanel .link:last-child { - border-bottom: 0; - } - - #navPanel .indent-1 { - display: inline-block; - width: 1em; - } - - #navPanel .indent-2 { - display: inline-block; - width: 2em; - } - - #navPanel .indent-3 { - display: inline-block; - width: 3em; - } - - #navPanel .indent-4 { - display: inline-block; - width: 4em; - } - - #navPanel .indent-5 { - display: inline-block; - width: 5em; - } - - #navPanel .depth-0 { - color: #fff; - } - - body.navPanel-visible #page-wrapper { - -moz-transform: translateX(275px); - -webkit-transform: translateX(275px); - -ms-transform: translateX(275px); - transform: translateX(275px); - } - - body.navPanel-visible #titleBar { - -moz-transform: translateX(275px); - -webkit-transform: translateX(275px); - -ms-transform: translateX(275px); - transform: translateX(275px); - } - - body.navPanel-visible #navPanel { - -moz-transform: translateX(0); - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } - - /* Wrappers */ - - #header-wrapper { - background-position: 35% 50%; - } - - .homepage #header-wrapper, - #main-wrapper { - padding-top: 44px; - } - - .homepage #main-wrapper { - padding-top: 0; - } - - #footer-wrapper { - padding: 2em 20px 0 20px; - } - - .wrapper { - padding: 3em 20px 1em 20px; - } - - /* Header */ - - #header, #nav { - display: none; - } - - /* Banner */ - - #banner { - padding: 40px 20px 40px 20px; - } - - #banner h2 { - font-size: 18pt !important; - } - - #banner h2 br { - display: none; - } - - /* Footer */ - - #copyright { - margin-top: 0; - } - - } \ No newline at end of file +#navPanel, +#titleBar { + display: none; +} + +@media screen and (max-width: 736px) { + /* Basic */ + html, + body { + overflow-x: hidden; + } + body, + input, + select, + textarea { + line-height: 1.75em; + font-size: 10pt; + letter-spacing: 0; + } + h2, + h3, + h4, + h5, + h6 { + font-size: 13pt !important; + } + h2 { + line-height: 1.5em; + } + /* Section/Article */ + section, + article { + clear: both; + margin-bottom: 4em !important; + } + /* Image */ + .image.left { + width: 25%; + margin-bottom: 2em !important; + } + /* Button */ + .button { + width: 100%; + font-size: 1.1em; + text-align: center; + padding: 1em 0 1em 0; + border-radius: 8px; + } + /* List */ + ul.menu li { + display: block; + border: 0 !important; + padding: 0 !important; + margin: 0 !important; + } + ul.actions li { + display: block; + padding: 0; + margin: 1em 0 0 0; + } + ul.actions li:first-child { + margin-top: 0; + } + /* Box */ + .box.excerpt .image-left { + margin-right: 0; + } + .box.excerpt header { + margin-left: 32%; + } + .box.excerpt p { + clear: both; + } + .box.feature1 section { + margin-bottom: 1em !important; + } + /* Off-Canvas Navigation */ + #page-wrapper { + -moz-backface-visibility: hidden; + -webkit-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + -moz-transition: -moz-transform 0.5s ease; + -webkit-transition: -webkit-transform 0.5s ease; + -ms-transition: -ms-transform 0.5s ease; + transition: transform 0.5s ease; + padding-bottom: 1px; + } + #titleBar { + -moz-backface-visibility: hidden; + -webkit-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); + background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); + background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); + background-image: linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg02.png"); + -moz-transition: -moz-transform 0.5s ease; + -webkit-transition: -webkit-transform 0.5s ease; + -ms-transition: -ms-transform 0.5s ease; + transition: transform 0.5s ease; + background-color: rgba(59, 62, 69, 0.9); + box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.5), inset 0px 0px 0px 2px rgba(255, 255, 255, 0.075), 0px 1px 6px 0px rgba(0, 0, 0, 0.35); + display: block; + height: 44px; + left: 0; + position: fixed; + text-shadow: -1px -1px 0 black; + top: 0; + width: 100%; + z-index: 10001; + } + #titleBar .title { + display: block; + text-transform: uppercase; + font-weight: 800; + letter-spacing: 0.04em; + color: #fff; + line-height: 44px; + text-align: center; + } + #titleBar .toggle { + position: absolute; + left: 0; + top: 0; + width: 60px; + height: 44px; + opacity: 0.25; + } + #titleBar .toggle:before { + display: inline-block; + font-family: FontAwesome; + text-decoration: none; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-size: 18px; + width: 44px; + height: 44px; + line-height: 44px; + text-align: center; + color: #fff; + content: '\f0c9'; + } + #titleBar .toggle:active { + opacity: 0.5; + } + #navPanel { + -moz-backface-visibility: hidden; + -webkit-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + background-image: -moz-linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg01.png"); + background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg01.png"); + background-image: -ms-linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg01.png"); + background-image: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.35)), url("images/bg01.png"); + -moz-transform: translateX(-275px); + -webkit-transform: translateX(-275px); + -ms-transform: translateX(-275px); + transform: translateX(-275px); + -moz-transition: -moz-transform 0.5s ease; + -webkit-transition: -webkit-transform 0.5s ease; + -ms-transition: -ms-transform 0.5s ease; + transition: transform 0.5s ease; + background-color: #303238; + box-shadow: inset -1px 0px 0px 0px rgba(0, 0, 0, 0.5), inset -2px 0px 0px rgba(255, 255, 255, 0.15), inset -2px 0px 10px 0px rgba(0, 0, 0, 0.35); + display: block; + height: 100%; + left: 0; + overflow-y: auto; + position: fixed; + top: 0; + width: 275px; + z-index: 10002; + } + #navPanel .link { + display: block; + color: #aaa; + text-decoration: none; + height: 44px; + line-height: 44px; + border-top: solid 1px rgba(255, 255, 255, 0.05); + border-bottom: solid 1px rgba(0, 0, 0, 0.15); + padding: 0 1em 0 1em; + text-transform: uppercase; + font-weight: 700; + font-size: 0.95em; + letter-spacing: 0.075em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + #navPanel .link:first-child { + border-top: 0; + } + #navPanel .link:last-child { + border-bottom: 0; + } + #navPanel .indent-1 { + display: inline-block; + width: 1em; + } + #navPanel .indent-2 { + display: inline-block; + width: 2em; + } + #navPanel .indent-3 { + display: inline-block; + width: 3em; + } + #navPanel .indent-4 { + display: inline-block; + width: 4em; + } + #navPanel .indent-5 { + display: inline-block; + width: 5em; + } + #navPanel .depth-0 { + color: #fff; + } + body.navPanel-visible #page-wrapper { + -moz-transform: translateX(275px); + -webkit-transform: translateX(275px); + -ms-transform: translateX(275px); + transform: translateX(275px); + } + body.navPanel-visible #titleBar { + -moz-transform: translateX(275px); + -webkit-transform: translateX(275px); + -ms-transform: translateX(275px); + transform: translateX(275px); + } + body.navPanel-visible #navPanel { + -moz-transform: translateX(0); + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + /* Wrappers */ + #header-wrapper { + background-position: 35% 50%; + } + .homepage #header-wrapper, + #main-wrapper { + padding-top: 44px; + } + .homepage #main-wrapper { + padding-top: 0; + } + #footer-wrapper { + padding: 2em 20px 0 20px; + } + .wrapper { + padding: 3em 20px 1em 20px; + } + /* Header */ + #header, + #nav { + display: none; + } + /* Banner */ + #banner { + padding: 40px 20px 40px 20px; + } + #banner h2 { + font-size: 18pt !important; + } + #banner h2 br { + display: none; + } + /* Footer */ + #copyright { + margin-top: 0; + } +} diff --git a/help/content/assets/css/style.css b/help/content/assets/css/style.css index e4edbf0a174..d8c11ad5ca6 100644 --- a/help/content/assets/css/style.css +++ b/help/content/assets/css/style.css @@ -1,82 +1,129 @@ @import url(https://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans+Mono|Open+Sans:400,600,700); - /*-------------------------------------------------------------------------- Formatting for F# code snippets /*--------------------------------------------------------------------------*/ /* identifier */ -span.i { color:#d1d1d1; } + +span.i { + color: #d1d1d1; +} + /* string */ -span.s { color:#d4b43c; } + +span.s { + color: #d4b43c; +} + /* keywords */ -span.k { color:#4e98dc; } + +span.k { + color: #4e98dc; +} + /* comment */ -span.c { color:#96C71D; } + +span.c { + color: #96C71D; +} + /* operators */ -span.o { color:#af75c1; } + +span.o { + color: #af75c1; +} + /* numbers */ -span.n { color:#96C71D; } + +span.n { + color: #96C71D; +} + /* line number */ -span.l { color:#80b0b0; } + +span.l { + color: #80b0b0; +} /* inactive code */ -span.inactive { color:#808080; } + +span.inactive { + color: #808080; +} + /* preprocessor */ -span.prep { color:#af75c1; } + +span.prep { + color: #af75c1; +} + /* fsi output */ -span.fsi { color:#808080; } + +span.fsi { + color: #808080; +} /* omitted */ -span.omitted { - background:#3c4e52; - border-radius:5px; - color:#808080; - padding:0px 0px 1px 0px; + +span.omitted { + background: #3c4e52; + border-radius: 5px; + color: #808080; + padding: 0px 0px 1px 0px; } + /* tool tip */ + div.tip { - background:#475b5f; - border-radius:4px; - font:11pt 'Droid Sans', arial, sans-serif; - padding:6px 8px 6px 8px; - display:none; - color:#d1d1d1; + background: #475b5f; + border-radius: 4px; + font: 11pt 'Droid Sans', arial, sans-serif; + padding: 6px 8px 6px 8px; + display: none; + color: #d1d1d1; } + div.tip strong { - color:#d1d1d1; + color: #d1d1d1; } + table.pre pre { - padding:0px; - margin:0px; - border:none; -} -table.pre, pre.fssnip, pre { - line-height:13pt; - border:1px solid #d8d8d8; - border-collapse:separate; - white-space:pre; - font: 9pt 'Droid Sans Mono',consolas,monospace; - width:90%; - margin:10px 20px 20px 20px; - background-color:#212d30; - padding:10px; - border-radius:5px; - color:#d1d1d1; + padding: 0px; + margin: 0px; + border: none; } + +table.pre, +pre.fssnip, +pre { + line-height: 13pt; + border: 1px solid #d8d8d8; + border-collapse: separate; + white-space: pre; + font: 9pt 'Droid Sans Mono', consolas, monospace; + width: 90%; + background-color: #2d2d2d; + padding: 10px; + border-radius: 5px; + color: #d1d1d1; +} + table.pre pre { - padding:0px; - margin:0px; - border-radius:0px; - width: 100%; + padding: 0px; + margin: 0px; + border-radius: 0px; + width: 100%; } + table.pre td { - padding:0px; - white-space:normal; - margin:0px; - border:none; + padding: 0px; + white-space: normal; + margin: 0px; + border: none; } + table.pre td.lines { - width:30px; + width: 30px; } /*-------------------------------------------------------------------------- @@ -84,9 +131,9 @@ table.pre td.lines { /*--------------------------------------------------------------------------*/ body { - font-family: 'Open Sans', serif; - padding-top: 0px; - padding-bottom: 40px; + font-family: 'Open Sans', serif; + padding-top: 0px; + padding-bottom: 40px; } pre { @@ -94,44 +141,56 @@ pre { } /* Format the heading - nicer spacing etc. */ + .masthead { - overflow: hidden; + overflow: hidden; } + .masthead .muted a { - text-decoration:none; - color:#999999; + text-decoration: none; + color: #999999; } -.masthead ul, .masthead li { - margin-bottom:0px; + +.masthead ul, +.masthead li { + margin-bottom: 0px; } + .masthead .nav li { - margin-top: 15px; - font-size:110%; + margin-top: 15px; + font-size: 110%; } + .masthead h3 { - margin-bottom:5px; - font-size:170%; + margin-bottom: 5px; + font-size: 170%; } + hr { - margin:0px 0px 20px 0px; + margin: 0px 0px 20px 0px; } /* Style for articles (content) */ #content h2 { - margin: 1em 0 .5em 0; + margin: 1em 0 .5em 0; } -#content p, #content ul, #content ol, #content dl, #content table { - margin-bottom: 0.9em; +#content p, +#content ul, +#content ol, +#content dl, +#content table { + margin-bottom: 0.9em; } #content ul { - margin-left: 2em; + margin-left: 2em; } -#content ul, #content ol { - list-style: disc; +#content ul, +#content ol { + list-style: disc; } #content blockquote p { @@ -146,95 +205,146 @@ hr { } /* Make table headings and td.title bold */ -td.title, thead tr td { - font-weight:bold; + +td.title, +thead tr td { + font-weight: bold; } /* Format the right-side menu */ + #menu { - margin-top:50px; - font-size:11pt; - padding-left:20px; + margin-top: 50px; + font-size: 11pt; + padding-left: 20px; } #menu .nav-header { - font-size:12pt; - color:#606060; - margin-top:20px; + font-size: 12pt; + color: #606060; + margin-top: 20px; } #menu li { - line-height:25px; + line-height: 25px; } /* Change font sizes for headings etc. */ -#main h1 { font-size: 26pt; margin:10px 0px 15px 0px; font-weight:400; } -#main h2 { font-size: 20pt; margin:20px 0px 0px 0px; font-weight:400; } -#main h3 { font-size: 14pt; margin:15px 0px 0px 0px; font-weight:600; } -#main p { font-size: 11pt; margin:5px 0px 15px 0px; } -#main ul { font-size: 11pt; margin-top:10px; } -#main li { font-size: 11pt; margin: 5px 0px 5px 0px; } -#main strong { font-weight:700; } + +#main h1 { + font-size: 26pt; + margin: 10px 0px 15px 0px; + font-weight: 400; +} + +#main h2 { + font-size: 20pt; + margin: 20px 0px 0px 0px; + font-weight: 400; +} + +#main h3 { + font-size: 14pt; + margin: 15px 0px 0px 0px; + font-weight: 600; +} + +#main p { + font-size: 11pt; + margin: 5px 0px 15px 0px; +} + +#main ul { + font-size: 11pt; + margin-top: 10px; +} + +#main li { + font-size: 11pt; + margin: 5px 0px 5px 0px; +} + +#main strong { + font-weight: 700; +} /*-------------------------------------------------------------------------- Formatting for API reference /*--------------------------------------------------------------------------*/ -.type-list .type-name, .module-list .module-name { - width:25%; - font-weight:bold; +.type-list .type-name, +.module-list .module-name { + width: 25%; + font-weight: bold; } + .member-list .member-name { - width:35%; + width: 35%; } + #main .xmldoc h2 { - font-size:14pt; - margin:10px 0px 0px 0px; + font-size: 14pt; + margin: 10px 0px 0px 0px; } + #main .xmldoc h3 { - font-size:12pt; - margin:10px 0px 0px 0px; + font-size: 12pt; + margin: 10px 0px 0px 0px; } + .github-link { - float:right; - text-decoration:none; + float: right; + text-decoration: none; } + .github-link img { - border-style:none; - margin-left:10px; + border-style: none; + margin-left: 10px; +} + +.github-link .hover { + display: none; +} + +.github-link:hover .hover { + display: block; +} + +.github-link .normal { + display: block; +} + +.github-link:hover .normal { + display: none; } -.github-link .hover { display:none; } -.github-link:hover .hover { display:block; } -.github-link .normal { display: block; } -.github-link:hover .normal { display: none; } #content .member-list .xmldoc h2 { - margin-top: 0; - font-size: 1em; + margin-top: 0; + font-size: 1em; } -.member-list td > code, -.member-list li > code { - padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; - font-family: Monaco,Menlo,Consolas,'Courier New', monospace; - font-size: 12px; - border-radius: 3px; +.member-list td>code, +.member-list li>code { + padding: 2px 4px; + color: #d14; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; + font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; + font-size: 12px; + border-radius: 3px; } table { - max-width: 100%; - background-color: transparent; - border-spacing: 0; + max-width: 100%; + background-color: transparent; + border-spacing: 0; } .table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - border-left: 0; - border-radius: 4px; + border: 1px solid #dddddd; + border-collapse: separate; + border-left: 0; + border-radius: 4px; } .table caption+thead tr:first-child th, @@ -243,39 +353,40 @@ table { .table colgroup+thead tr:first-child td, .table thead:first-child tr:first-child th, .table thead:first-child tr:first-child td { - border-top: 0; + border-top: 0; } -.table th, .table td { - padding: 8px; - line-height: 20px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; } -.table-bordered th, .table-bordered td { - border-left: 1px solid #dddddd; +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; } - /*-------------------------------------------------------------------------- Additional formatting for the homepage /*--------------------------------------------------------------------------*/ -#nuget { - margin-top:20px; - font-size: 11pt; - padding:20px; +#nuget { + margin-top: 20px; + font-size: 11pt; + padding: 20px; } #nuget pre { - font-size:11pt; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - border-radius: 0px; - background: #404040; - border-style:none; - color: #e0e0e0; - margin-top:15px; -} \ No newline at end of file + font-size: 11pt; + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; + background: #404040; + border-style: none; + color: #e0e0e0; + margin-top: 15px; +} diff --git a/help/content/assets/js/clipboardTooltip.js b/help/content/assets/js/clipboardTooltip.js new file mode 100644 index 00000000000..b0224fea7f2 --- /dev/null +++ b/help/content/assets/js/clipboardTooltip.js @@ -0,0 +1,36 @@ +var snippets = document.querySelectorAll('.snippet, pre[class*="language-"]'); + +[].forEach.call(snippets, function (snippet) { + snippet.firstChild.insertAdjacentHTML('beforebegin', ''); +}); +var clipboardSnippets = new ClipboardJS('[data-clipboard-snippet]', { + target: function (trigger) { + return trigger.nextElementSibling; + } +}); +clipboardSnippets.on('success', function (e) { + e.clearSelection(); +}); + + +Prism.plugins.toolbar.registerButton('copy-to-clipboard', function (env) { + var link = document.createElement('div'); + link.innerHTML = '' + + if (!ClipboardJS) { + callbacks.push(registerClipboard); + } else { + registerClipboard(); + } + + return link; + + function registerClipboard() { + var clip = new ClipboardJS(link, { + 'text': function () { + return env.code; + } + }); + } + +}); diff --git a/help/content/nuspec-example.xml b/help/content/nuspec-example.xml new file mode 100644 index 00000000000..63ce0aba6ec --- /dev/null +++ b/help/content/nuspec-example.xml @@ -0,0 +1,26 @@ + + + + @project@ + @build.number@ + @authors@ + @authors@ + @summary@ + https://github.com/octokit/octokit.net/blob/master/LICENSE.txt + https://github.com/octokit/octokit.net + https://github.com/octokit/octokit.net/icon.png + false + @description@ + @releaseNotes@ + Copyright GitHub 2013 + GitHub API Octokit + @dependencies@ + @references@ + + + @files@ + + diff --git a/help/markdown/api-slack.md b/help/markdown/api-slack.md index 30cbd51ae3a..0b3e4a68bd5 100644 --- a/help/markdown/api-slack.md +++ b/help/markdown/api-slack.md @@ -1,11 +1,12 @@ # Sending Notifications to a Slack Webhook -**Note: This documentation is for FAKE version 5.0 or later. The old documentation can be found [here](legacy-slacknotification.html)** +
+
INFO
+This documentation is for FAKE version 5.0 or later. The old documentation can be found here +
In this article you will learn how to create a [Slack](https://slack.com) webhook integration and send a notification to it. This article assumes that you already have a Slack team setup. -**Note: This documentation is for FAKE 5. The old documentation can be found [here](legacy-slacknotification.html)! ** - [API-Reference](apidocs/v5/fake-api-slack.html) ## Adding a Webhook Integration to a Channel diff --git a/help/markdown/contributing.md b/help/markdown/contributing.md index 219082a36cb..771d81962f7 100644 --- a/help/markdown/contributing.md +++ b/help/markdown/contributing.md @@ -30,16 +30,23 @@ It turns `*.md` (Markdown with embedded code snippets) and `*.fsx` files (F# scr * Clone your personal fork locally. * Add a new git remote in order to retrieve upstream changes. - - git remote add upstream https://github.com/fsharp/FAKE.git +
+    
+    git remote add upstream https://github.com/fsharp/FAKE.git
+    
+
#### Build tools * Windows users can install Visual Studio 2017 (the [Community Edition](https://www.visualstudio.com/de/vs/community/) is freely available for open-source projects). - > Make sure to have long path enabled: https://superuser.com/questions/1119883/windows-10-enable-ntfs-long-paths-policy-option-missing - > Otherwise the test-suite will fail (However, the build should work) +
+
INFO
+ Make sure to have long path enabled: https://superuser.com/questions/1119883/windows-10-enable-ntfs-long-paths-policy-option-missing + Otherwise the test-suite will fail (However, the build should work) +
+ * Linux and Mac users can read "[Guide - Cross-Platform Development with F#](http://fsharp.org/guides/mac-linux-cross-platform/)" to find out the required tools. @@ -52,16 +59,24 @@ It turns `*.md` (Markdown with embedded code snippets) and `*.fsx` files (F# scr * Alternately, you can use [Vagrant](https://www.vagrantup.com/) in-pair with [VirtualBox](https://www.virtualbox.org/) to automatically deploy a preconfigured virtual machine. See the [Vagrant docs](vagrant.html) to get in touch with the tool. -> Note: The vagrant file might be outdated at this time, please help updating it and removing this banner. - +
+
WARNING
+ The vagrant file might be outdated at this time, please help updating it and removing this banner. +
* Ubuntu / Windows Subsystem for Linux: + * Install Mono, as of today 2017-09-30 you need at least alpha to have the msbuild package (http://www.mono-project.com/download/beta/#download-lin) - * `apt-get install msbuild mono-complete` - * `apt-cache search libunwind` - * `# apt-get Install the libunwind runtime (one of the search results)` - * `apt-cache search libcurl # Install` - * `# apt-get Install the libcurl library (one of the search results)` - * `./build.sh` + * Run the following +
+        
+        apt-get install msbuild mono-complete
+        apt-cache search libunwind
+        # apt-get Install the libunwind runtime (one of the search results)
+        apt-cache search libcurl # Install
+        # apt-get Install the libcurl library (one of the search results)
+        ./build.sh
+        
+    
### Programming @@ -70,8 +85,11 @@ It turns `*.md` (Markdown with embedded code snippets) and `*.fsx` files (F# scr * Run the build via `fake run build.fsx` in order to check if everything works. * Create a new feature branch. - - git checkout -b myfeature +
+    
+    git checkout -b myfeature
+    
+
* Implement your bugfix/feature. @@ -85,10 +103,13 @@ It turns `*.md` (Markdown with embedded code snippets) and `*.fsx` files (F# scr Write "WIP" into the pull request description if it's not completely ready * If you need to rebase you can do: - - git fetch upstream - git rebase upstream/master - git push origin myfeature -f +
+    
+    git fetch upstream
+    git rebase upstream/master
+    git push origin myfeature -f
+    
+
* The pull request will be updated automatically. @@ -98,9 +119,12 @@ It turns `*.md` (Markdown with embedded code snippets) and `*.fsx` files (F# scr 1. Create a local nuget package for the module you've changed. e.g: Using dotnet cli - - cd path/to/project - dotnet pack +
+    
+    cd path/to/project
+    dotnet pack
+    
+
2. Dotnet pack will create a default nuget package with version of 1.0.0 in the `bin/Debug` of your project. Set an additional paket source in your build script to this directory, and require this exact version in your paket references @@ -177,8 +201,9 @@ Tooling in netcore it not optimal yet so some things have to be done by hand, bu * Add the info about the new module to the `dotnetAssemblyInfos` variable in `build.fsx`. From this point on the build script will let you know if anything is missing. Again, if you have problems let us know. * Mark the old module with the `Obsolete` attribute. -> Note that `src/Fake-netcore.sln` is currently not used (as IDEs don't support that yet). However it is used so speed up the build, `fake run build.fsx` will let you know what to do in the error message. - +
+
INFO
src/Fake-netcore.sln is currently not used (as IDEs don't support that yet). However it is used so speed up the build, fake run build.fsx will let you know what to do in the error message. +
These steps will ensure: * People using the NuGet package will get the warnings to update the new API diff --git a/help/markdown/core-commandlineparsing.md b/help/markdown/core-commandlineparsing.md index 628e7cec6a2..34d5a2040d1 100644 --- a/help/markdown/core-commandlineparsing.md +++ b/help/markdown/core-commandlineparsing.md @@ -36,7 +36,7 @@ match DocoptResult.tryGetArgument "-m" results with | Some arg -> printfn "%s" arg ``` -A more sophisticated example can be in the fake runner: https://github.com/fsharp/FAKE/blob/64d871f5065412fe7b233025e454ccf3b89e46d7/src/app/Fake.netcore/Program.fs#L204-L259 +A more sophisticated example can be found in the fake runner: https://github.com/fsharp/FAKE/blob/64d871f5065412fe7b233025e454ccf3b89e46d7/src/app/Fake.netcore/Program.fs#L204-L259 Or the target module: @@ -55,31 +55,33 @@ You can also take a look at the test-suite: - We return the arguments in the user given order in the result map (difference to `docopt.fs`) - We parse arguments starting with `-` as positional arguments. For example consider: - ```help - usage: prog (NAME | --foo NAME) +```bash +usage: prog (NAME | --foo NAME) - options: --foo - ``` - - > Note that --foo has no argument because it was not specified in the options section! +options: --foo +``` +
+
INFO
+

Note that --foo has no argument because it was not specified in the options section!

+
- In this scenario `prog --foo 10` is parsed as `--foo` and `NAME` argument because that is the only option. However `prog --foo=10` is parsed as `NAME` argument without any `--foo` option. Usually to prefer `--foo` you should put it first in the usage string: +In this scenario `prog --foo 10` is parsed as `--foo` and `NAME` argument because that is the only option. However `prog --foo=10` is parsed as `NAME` argument without any `--foo` option. Usually to prefer `--foo` you should put it first in the usage string: - ```help - usage: prog (--foo NAME | NAME) +```bash +usage: prog (--foo NAME | NAME) - options: --foo - ``` +options: --foo +``` However, in this particular case it doesn't make any difference. - `[]` is not inherited for all items, only for the group. To have all items optional use `[]` on every item. For example `usage: prog [go go]` means to have either two `go` or none. A single one is not allowed. - We do not merge external "options" in the usage string with `[options]`. For example: - ```help - usage: prog [options] [-a] +```bash +usage: prog [options] [-a] - options: -a - -b - ``` +options: -a + -b +``` - Means that `-a` is actually allowed twice. +Means that `-a` is actually allowed twice. diff --git a/help/markdown/core-process.md b/help/markdown/core-process.md index 6ec6b64d062..21e716c7a3e 100644 --- a/help/markdown/core-process.md +++ b/help/markdown/core-process.md @@ -1,6 +1,9 @@ # Starting processes in "FAKE - F# Make" -**Note: This documentation is for FAKE 5! ** +
+
INFO
+

This documentation is for FAKE version 5.0 or later.

+
[API-Reference](apidocs/v5/fake-core-process.html) diff --git a/help/markdown/core-targets.md b/help/markdown/core-targets.md index 93738fe7706..69d7cd411c8 100644 --- a/help/markdown/core-targets.md +++ b/help/markdown/core-targets.md @@ -1,6 +1,9 @@ # Running targets in "FAKE - F# Make" -**Note: This documentation is for FAKE 5. The old documentation can be found [here](legacy-core-targets.html)! ** +
+
INFO
+

This documentation is for FAKE version 5.0 or later. The old documentation can be found here

+
[API-Reference](apidocs/v5/fake-core-target.html), [Operators](apidocs/v5/fake-core-targetoperators.html) @@ -8,7 +11,7 @@ If you use the `Fake.Core.Target` module and call `Target.runOrDefault` or `Target.runOrList` in your build script you will have the following CLI options: -```help +```bash Usage: fake-run --list fake-run --version @@ -24,7 +27,10 @@ Target Module Options [target_opts]: -p, --parallel Run parallel with the given number of tasks. ``` -> please refer to the general [FAKE 5 runner command line interface](fake-commandline.html) or the [Fake.Core.CommandLineParsing documentation](core-commandlineparsing.html) for details. + This means you can - for example - run `fake run build.fsx --list` or `fake build --list` to list your targets. @@ -33,12 +39,18 @@ To run a target `MyTarget` you could use `fake run build.fsx -t MyTarget` or `f All parameters after `--` or `target ` are given to the target as paramters. Note that this feature needs to be enabled by using `Target.runOrDefaultWithArguments` instead of `Target.runOrDefault`! -> Note that the ordering of the parameters matters! This means the following are invalid (which is different to pre FAKE 5 versions): -> - `fake run -t Target build.fsx` - because of ordering fake will assume `-t` to be the script name -> - `fake build -v` - It will not run FAKE in verbose mode but give the parameter `-v` to the target parameters. This is because there is no `-v` in the above CLI. -> -> In general you should use the command-line in a way to not be broken when new parameters are added. -> Use longer forms in your scripts and shorter forms on your shell! +
+
INFO
+

Note that the ordering of the parameters matters! This means the following are invalid (which is different to pre FAKE 5 versions): +

    +
  • fake run -t Target build.fs - because of ordering fake will assume -t to be the script name
  • +
  • fake build -v - It will not run FAKE in verbose mode but give the parameter -v to the target parameters. This is because there is no -v in the above CLI.
  • +
+ In general you should use the command-line in a way to not be broken when new parameters are added. + Use longer forms in your scripts and shorter forms on your shell!

+
+ + ## Running specific targets @@ -74,9 +86,16 @@ open Fake.Core.TargetOperators Target.runOrDefault "Deploy" ``` -> Warning: Previous versions of FAKE 5 used `(fun () -> ...)` instead of `(fun _ -> ...)`. -> We decided to change the syntax here to introduce some parameters or other features at a later point. -> Using the current parameter object is not supported yet. +
+
WARNING
+

+ Previous versions of FAKE 5 used (fun () -> ...) instead of (fun _ -> ...). + We decided to change the syntax here to introduce some parameters or other features at a later point. + Using the current parameter object is not supported yet. +

+
+ + Now we have the following options: diff --git a/help/markdown/dotnet-assemblyinfo.md b/help/markdown/dotnet-assemblyinfo.md index bc4aec0d618..e3f9eeee041 100644 --- a/help/markdown/dotnet-assemblyinfo.md +++ b/help/markdown/dotnet-assemblyinfo.md @@ -1,6 +1,9 @@ # Generating AssemblyInfo files -**Note: This documentation is for FAKE.exe after version 5. The documentation for previous version (<=4) can be found [here](legacy-assemblyinfo.html)! ** +
+
INFO
+

This documentation is for FAKE version 5.0 or later. The old documentation can be found here

+
In this article the AssemblyInfo task is used in order to set specific version information to .NET assemblies. diff --git a/help/markdown/dotnet-nuget.md b/help/markdown/dotnet-nuget.md index f7d57603226..e28b7bf725d 100644 --- a/help/markdown/dotnet-nuget.md +++ b/help/markdown/dotnet-nuget.md @@ -1,6 +1,9 @@ # NuGet package restore -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help! ** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help!

+
If you are using a source control system like [git](http://git-scm.com/) you probably don't want to store all binary dependencies in it. With FAKE you can use [NuGet](http://nuget.codeplex.com/) to download all dependent packages during the build. @@ -21,52 +24,30 @@ If you need to use different parameters please use the [RestorePackage](apidocs/ If you don't want to store FAKE.exe and its components in your repository, you can use a batch file which downloads it before the build: - [lang=batchfile] +

     @echo off
     cls
     "tools\nuget\nuget.exe" "install" "FAKE" "-OutputDirectory" "tools" "-ExcludeVersion"
     "tools\FAKE\tools\Fake.exe" build.fsx
     pause
-
+
# Creating NuGet packages -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help! ** - ## Creating a .nuspec template The basic idea to create nuget packages is to create a .nuspec template and let FAKE fill out the missing parts. The following code shows such .nuspec file from the [OctoKit](https://github.com/octokit/octokit.net) project. - [lang=xml] - - - - @project@ - @build.number@ - @authors@ - @authors@ - @summary@ - https://github.com/octokit/octokit.net/blob/master/LICENSE.txt - https://github.com/octokit/octokit.net - https://github.com/octokit/octokit.net/icon.png - false - @description@ - @releaseNotes@ - Copyright GitHub 2013 - GitHub API Octokit - @dependencies@ - @references@ - - @files@ - +

 
+
The .nuspec template contains some placeholders like `@build.number@` which can be replaced later by the build script. It also contains some specific information like the copyright which is not handled by FAKE. The following table gives the correspondence between the placeholders and the fields of the record type used by the NuGet task. Placeholder | replaced by (`NuGetParams` record field) ---- | --- +:--- | :--- `@build.number@` | `Version` `@authors@` | `Authors` `@project@` | `Project` diff --git a/help/markdown/dotnet-testing-opencover.md b/help/markdown/dotnet-testing-opencover.md index 7f49eb9d6cd..834e365220a 100644 --- a/help/markdown/dotnet-testing-opencover.md +++ b/help/markdown/dotnet-testing-opencover.md @@ -1,7 +1,7 @@ # Analyze your code coverage with OpenCover From the [project](https://github.com/OpenCover/opencover): -"A code coverage tool for .NET 2 and above (WINDOWS OS only), support for 32 and 64 processes with both branch and sequence points." +>"A code coverage tool for .NET 2 and above (WINDOWS OS only), support for 32 and 64 processes with both branch and sequence points." It will analyze the code coverage during testing and generates an XML report which can be used to generates HTML pages or uploaded to online services like [coveralls](https://coveralls.io/) or [codecov](https://codecov.io/). @@ -62,4 +62,4 @@ Target.create "OpenCover" (fun _ -> }) "MyProject.Tests.dll -noshadow" ) -``` \ No newline at end of file +``` diff --git a/help/markdown/fake-cache.md b/help/markdown/fake-cache.md index 27e92ec03bc..a6f81d881c3 100644 --- a/help/markdown/fake-cache.md +++ b/help/markdown/fake-cache.md @@ -1,6 +1,9 @@ # Caching of build scripts -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help! ** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help!

+
Starting with version `4.0.0` of FAKE, the first time a script is run the compiled assembly that is generated is saved into the hidden `.fake` directory. This @@ -14,4 +17,4 @@ which stops FAKE from dumping the compiled assembly to disk. Do note that the assembly is still being compiled by FSI, all you are disabling is the saving to disk. -You should add the `.fake` folder to your `.gitignore` file. \ No newline at end of file +You should add the `.fake` folder to your `.gitignore` file. diff --git a/help/markdown/fake-commandline.md b/help/markdown/fake-commandline.md index 075d4bcc3eb..4e359e9f80a 100644 --- a/help/markdown/fake-commandline.md +++ b/help/markdown/fake-commandline.md @@ -1,36 +1,37 @@ # FAKE Command Line -**Note: This documentation is for FAKE.exe version 5.0 or later. The old documentation can be found [here](legacy-commandline.html)** +
+
INFO
+

This documentation is for FAKE version 5.0 or later. The old documentation can be found here

+
-The `fake.exe` command line interface (CLI) is defined as follows:` - -```help +The `fake.exe` command line interface (CLI) is defined as follows: +```bash Usage: - fake.exe [fake_opts] run [run_opts] [] [--] [...] - fake.exe [fake_opts] build [build_opts] [--] [...] - fake.exe --version - fake.exe --help | -h +fake.exe [fake_opts] run [run_opts] [] [--] [...] +fake.exe [fake_opts] build [build_opts] [--] [...] +fake.exe --version +fake.exe --help | -h Fake Options [fake_opts]: - -v, --verbose [*] Verbose (can be used multiple times) +-v, --verbose [*] Verbose (can be used multiple times) Is ignored if -s is used. * -v: Log verbose but only for FAKE * -vv: Log verbose for Paket as well - -s, --silent Be silent, use this option if you need to pipe your output into another tool or need some additional processing. +-s, --silent Be silent, use this option if you need to pipe your output into another tool or need some additional processing. Fake Run Options [run_opts]: - -d, --debug Debug the script. - -n, --nocache Disable fake cache for this run. - --fsiargs [*] Arguments passed to the f# interactive. +-d, --debug Debug the script. +-n, --nocache Disable fake cache for this run. +--fsiargs [*] Arguments passed to the f# interactive. Fake Build Options [build_opts]: - -d, --debug Debug the script. - -n, --nocache Disable fake cache for this run. - --fsiargs [*] Arguments passed to the f# interactive. - -f, --script +-d, --debug Debug the script. +-n, --nocache Disable fake cache for this run. +--fsiargs [*] Arguments passed to the f# interactive. +-f, --script The script to execute (defaults to `build.fsx`). ``` - Please refer to the [Fake.Core.CommandLineParsing documentation](core-commandlineparsing.html) for a explanation of the synax. For now fake only supports the `run` and `build` subcommands which are basically equivalent to the Fake as you know it, but more are planned in the future. In general you should use the `run` subcommand in scripting when you use parameters, because it is safer in regards to adding options without breaking. Use `build` to have a more dense workflow in the command line @@ -96,7 +97,7 @@ Please refer to the [target module documentation](core-targets.html) For reference the CLI for the targets-module looks like this: -```help +```bash Usage: fake-run --list fake-run --version @@ -112,4 +113,4 @@ Target Module Options [target_opts]: -p, --parallel Run parallel with the given number of tasks. ``` -Basically this means you insert the options as `` parameters at the end. \ No newline at end of file +Basically this means you insert the options as `` parameters at the end. diff --git a/help/markdown/fake-debugging.md b/help/markdown/fake-debugging.md index 42d950442c4..491e9f03f79 100644 --- a/help/markdown/fake-debugging.md +++ b/help/markdown/fake-debugging.md @@ -2,7 +2,11 @@ Currently debugging support (and documentation around it) is limited. Please help to improve the situation by improving the code and the docs! -> Currently debugging via the `chocolatey` installation is not possible. This is because we currently do not distribute the x64 version on x64 versions of windows and the .NET Core debugger currently only supports x64! +
+
WARNING
+

Currently debugging via the chocolatey installation is not possible. This is because we currently do not distribute the x64 version on x64 versions of windows and the .NET Core debugger currently only supports x64!

+
+ ## General considerations @@ -17,21 +21,24 @@ Debugging works (on windows) in the following way: - Open Visual Studio Code - Open "The Debugger" view and add the following configuration - ```json - { - "name": "Debug My Build Script", - "type": "coreclr", - "request": "launch", - "program": "E:\\fake-dotnetcore-portable\\fake.dll", - "args": ["run", "--fsiargs", "--debug:portable --optimize-", "build.fsx"], - "cwd": "${workspaceRoot}", - "stopAtEntry": false, - "console": "internalConsole" - } - ``` - - > It is important to specify `--debug:portable --optimize-`
- > To get debugging support for .NET Core you need [C# for Visual Studio Code](https://github.com/OmniSharp/omnisharp-vscode) +

+  {
+    "name": "Debug My Build Script",
+    "type": "coreclr",
+    "request": "launch",
+    "program": "E:\\fake-dotnetcore-portable\\fake.dll",
+    "args": ["run", "--fsiargs", "--debug:portable --optimize-", "build.fsx"],
+    "cwd": "${workspaceRoot}",
+    "stopAtEntry": false,
+    "console": "internalConsole"
+  }
+  
+
+
INFO
+

It is important to specify --debug:portable --optimize
+ To get debugging support for .NET Core you need C# for Visual Studio Code +

+
- Delete the `.fake` directory - Set a breakpoint in your script and run the new configuration diff --git a/help/markdown/fake-dotnet-testing-specflow.md b/help/markdown/fake-dotnet-testing-specflow.md index cb51dea1fb3..7cc0a9b1bf8 100644 --- a/help/markdown/fake-dotnet-testing-specflow.md +++ b/help/markdown/fake-dotnet-testing-specflow.md @@ -1,6 +1,9 @@ # Make BDD with Gherkin and SpecFlow -**Note: This documentation is for FAKE version 5.0 or later. The old documentation can be found [here](apidocs/v4/fake-specflowhelper.html)** +
+
INFO
+

This documentation is for FAKE version 5.0 or later. The old documentation can be found here

+
Use [SpecFlow] to define, manage and automatically execute human-readable acceptance tests in .NET projects. Writing easily understandable tests is a cornerstone of the BDD paradigm and also helps build up a living documentation of your system. @@ -47,4 +50,4 @@ Target.create "Default" Target.DoNothing Target.runOrDefault "Default" ``` -[SpecFlow]: http://specflow.org \ No newline at end of file +[SpecFlow]: http://specflow.org diff --git a/help/markdown/fake-dotnetcore.md b/help/markdown/fake-dotnetcore.md index 35b1ab806a6..fbff70764ce 100644 --- a/help/markdown/fake-dotnetcore.md +++ b/help/markdown/fake-dotnetcore.md @@ -10,17 +10,21 @@ Just install the corresponding package for your system: - Install chocolatey (a windows package manager) if you have not installed it yet (see https://chocolatey.org). Basically open an admin `cmd.exe` and paste - ```batch - @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" - ``` +
+        
+        @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
+        
+    
- Install fake via chocolatey In an admin `cmd.exe` enter: - ```ps - choco install fake -pre - ``` +
+        
+        choco install fake -pre
+        
+    
- There are [other ways to get started](fake-gettingstarted.html#Install-FAKE) if chocolatey / an administrator-cmd or global installation is not an option. @@ -31,9 +35,7 @@ Just install the corresponding package for your system: now you can use -```ps -fake --help -``` +
fake --help
This is basically it. You can now execute fake commands. Follow the [minimal example below](fake-dotnetcore.html#Minimal-example) for a quick start. @@ -73,9 +75,7 @@ This version assumes an existing dotnet sdk installation while the non-portable Just use the `-portable` version of the downloads, extract it and execute. -```shell -dotnet fake.dll -``` +
dotnet fake.dll 
The advantage of this method is that it is portable (ie. distribute the same binaries) and requires less bandwidth. The disadvantage is that you need to have a dotnet sdk installed. @@ -123,9 +123,9 @@ Target.runOrDefault "Deploy" Run this file by executing -```shell +

 fake run build.fsx
-```
+
## Downloads @@ -135,4 +135,7 @@ Get the latest binaries from chocolatey: https://chocolatey.org/packages/fake Get the latest dotnet-fake cli tool by adding `` to your dependencies (https://www.nuget.org/packages/dotnet-fake) -> Note that `Version="5.*"` is working only after we released the first stable release. For now use `Version="5.0.0-*"` to get the latest non-stable release \ No newline at end of file +
+
INFO
+

Note that `Version="5.*"` is working only after we released the first stable release. For now use `Version="5.0.0-*"` to get the latest non-stable release

+
diff --git a/help/markdown/fake-fake5-custom-modules.md b/help/markdown/fake-fake5-custom-modules.md index 1200ace327a..a8c2e7f3316 100644 --- a/help/markdown/fake-fake5-custom-modules.md +++ b/help/markdown/fake-fake5-custom-modules.md @@ -1,6 +1,9 @@ # FAKE 5 - Custom Modules -**Note: This documentation is for FAKE.exe version 5.0 or later. The old documentation can be found [here](legacy-customtasks.html)** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help!

+
"FAKE - F# Make" is intended to be an extensible build framework and therefore it should be as easy as possible to create custom tasks. This tutorial shows how to create a (very simple) custom task in C#. The same works for other .NET language like Visual Basic or F#. diff --git a/help/markdown/fake-fake5-modules.md b/help/markdown/fake-fake5-modules.md index 7ba18a2d519..375c82160e2 100644 --- a/help/markdown/fake-fake5-modules.md +++ b/help/markdown/fake-fake5-modules.md @@ -40,15 +40,22 @@ and execute `fake run build.fsx`. This works for all FAKE 5 modules, just add ot Please read introduction about [Paket](https://fsprojects.github.io/Paket/) for more information about the `paket.dependencies` file. -> Note: This works because by default FAKE 5 searches for a group annotated with the `// [ FAKE GROUP ]` comment. +
+
NOTE
+ This works because by default FAKE 5 searches for a group annotated with the // [ FAKE GROUP ] comment. +
## Declaring FAKE 5 dependencies within the script To be more independent from paket infrastructure (stand-alone-scripts and similar situations) there is a way to specify dependencies from within the script itself. -> We use the new syntax specified in [FST-1027](https://github.com/fsharp/fslang-design/blob/master/tooling/FST-1027-fsi-references.md). -> However, to be fully compatible with existing tooling and infrastructure make sure to add `//` at the end of the `#r` string. -> See https://github.com/fsharp/FAKE/pull/1770 for details. +
+
INFO
+ We use the new syntax specified in FST-1027. + However, to be fully compatible with existing tooling and infrastructure make sure to add `//` at the end of the `#r` string. + See for details. +
+ ### Reference a paket group @@ -65,8 +72,10 @@ The last line `#load` is not required by FAKE 5, however this way the file can still be edited in editors (after restoring packages initially). Fake will write an `intellisense.fsx` file for you importing all required references. -> Note that in this scenario the `// [ FAKE GROUP ]` comment mentioned above is not required. - +
+
INFO
+ Note that in this scenario the // [ FAKE GROUP ] comment mentioned above is not required. +
### Inline dependencies To write your build dependencies in-line you can put the following at the top of your `build.fsx` script @@ -89,4 +98,4 @@ You use the modules as documented in their corresponding help section. But usually it's: * `open Fake.` for example `open Fake.Core` -* Using the features \ No newline at end of file +* Using the features diff --git a/help/markdown/fake-gettingstarted.md b/help/markdown/fake-gettingstarted.md index 2cb92e879f8..9ffbbdbfa20 100644 --- a/help/markdown/fake-gettingstarted.md +++ b/help/markdown/fake-gettingstarted.md @@ -1,6 +1,9 @@ # Getting started with FAKE - F# Make -**Note: This documentation is for FAKE version 5.0 or later. The old documentation can be found [here](legacy-gettingstarted.html)** +
In this tutorial you will learn how to set up a complete build infrastructure with "FAKE - F# Make". This includes: @@ -22,8 +25,10 @@ There are various ways to install FAKE 5 * Bootstrap via shell script (fake.cmd/fake.sh), see this [example project](https://github.com/matthid/fake-bootstrap) - - > DISCLAIMER: These scripts have no versioning story. You either need to take care of versions yourself (and lock them) or your builds might break on major releases. +
+
WARNING
+

These scripts have no versioning story. You either need to take care of versions yourself (and lock them) or your builds might break on major releases.

+
* Bootstrap via paket `clitool`, basically the same as `DotNetCliToolReference` but managed via paket. See the [`paket_clitool` branch of `fake-bootstrap`](https://github.com/matthid/fake-bootstrap/tree/paket_clitool) in particular the [build.proj](https://github.com/matthid/fake-bootstrap/blob/paket_clitool/build.proj) file. @@ -38,20 +43,28 @@ Once `fake` is available you can start creating your script: nuget Fake.Core.Target prerelease" #load "./.fake/myscript.fsx/intellisense.fsx" ``` - -> Note: `storage: none` is currently required because of a bug, but it will be added by default. +
+
INFO
+

storage: none is currently required because of a bug, but it will be added by default.

+
Where you can add all the [fake modules](fake-fake5-modules.html) you need. * run the script to restore your dependencies and setup the intellisense support: `fake run myscript.fsx`. - This might take some seconds depending on your internet connection - - > The warning `FS0988: Main module of program is empty: nothing will happen when it is run` indicates that you have not written any code into the script yet. + This might take some seconds depending on your internet connection +
+
INFO
+

The warning FS0988: Main module of program is empty: nothing will happen when it is run indicates that you have not written any code into the script yet.

+
* now open the script in VS Code with ionide-fsharp extension or Visual Studio. - -> Note: If you change your dependencies you need to delete `myscript.fsx.lock` and run the script again for intellisense to update. -> Note: Intellisense is shown for the full framework while the script is run as `netcoreapp20` therefore intellisense might show APIs which are not actually usable. +
+
INFO
+

+ If you change your dependencies you need to delete myscript.fsx.lock and run the script again for intellisense to update. + Intellisense is shown for the full framework while the script is run as netcoreapp20 therefore intellisense might show APIs which are not actually usable. +

+
## Example - Compiling and building your .NET application @@ -115,8 +128,6 @@ Now we remove the `build.fsx.lock` file and run `fake build` in order to restore As we can now work with intellisense we can easily discover the various modules and functions in `Fake.IO`, for example the `Shell` module provides various functions you expect from regular shell scripting, but we use `Shell.CleanDir` which will ensure the given directory is empty by deleting everything within or creating the directory if required: -> Hint: you can explore the APIs for example by writing `Fake.IO.` and waiting for intellisense (or pressing `Strg+Space`). -> You can remove `Fake.IO` once you put `open Fake.IO` on top. ```fsharp #r "paket: @@ -148,6 +159,11 @@ open Fake.Core.TargetOperators // start build Target.runOrDefault "Default" ``` +
+
HINT
+ You can explore the APIs for example by writing Fake.IO. and waiting for intellisense (or pressing Strg+Space). + You can remove Fake.IO once you put open Fake.IO on top. +
We introduced some new concepts in this snippet. At first we defined a global property called `buildDir` with the relative path of a temporary build folder. diff --git a/help/markdown/fake-migrate-to-fake-5.md b/help/markdown/fake-migrate-to-fake-5.md index 24108009399..7d1a242f084 100644 --- a/help/markdown/fake-migrate-to-fake-5.md +++ b/help/markdown/fake-migrate-to-fake-5.md @@ -45,21 +45,29 @@ Some warnings indicate how we want the new FAKE version to be used. The most important part to know is that basically every feature/function changes its location and sometimes they were even grouped in different modules as the old API was growing several years now and we never could do breaking changes. -> IMPORTANT NOTE: If you feel like an API is still in the wrong place. Please let us know and open an issue. -> We can make breaking changes as long as we are in the alpha/beta phase. - -> IMPORTANT NOTE: It's obvious from the NOTE above, but we are still figuring out the new API (even if I'm quite happy with its current state). -> So things might break in the alpha phase. However this doesn't mean you should be afraid to use the new FAKE version. -> In fact due to the modular design we hopefully can make breaking changes a lot more often, without breaking your builds! -> So please try it out and if stuff breaks let us know :). -> The good thing is you can always "lock" the versions of the FAKE modules until you are ready to upgrade. +
+
NOTE
+

If you feel like an API is still in the wrong place. Please let us know and open an issue. We can make breaking changes as long as we are in the alpha/beta phase.

+
+ +
+
NOTE
+

It's obvious from the NOTE above, but we are still figuring out the new API (even if I'm quite happy with its current state). +So things might break in the alpha phase. However this doesn't mean you should be afraid to use the new FAKE version. +In fact due to the modular design we hopefully can make breaking changes a lot more often, without breaking your builds! +So please try it out and if stuff breaks let us know :). +The good thing is you can always "lock" the versions of the FAKE modules until you are ready to upgrade.

+
In this new work you should write "Module.Method a b" instead of "MethodModule a b". Which means in the old world we had lots of methods like "ReadFile argument" (the module probably even opened via `[]`), which is considered bad style now. In the new world we would open the `Fake.IO.FileSystem` namespace to indicate that we are using the file-system. At the same time we would write `File.Read argument`, which is only a bit longer but now the IDE can help you a lot better and the code looks a lot more ideomatic and clean. -> If you still find places where we use the "bad" style in the new API, let us know (open an issue). +
+
NOTE
+

If you still find places where we use the "bad" style in the new API, let us know (open an issue).

+
The "open Fake" and AutoOpen modules are completely obsolete. We urge you to finish your API-Migration (after fixing all warnings) by removing "open Fake". diff --git a/help/markdown/fake-tools-pickles.md b/help/markdown/fake-tools-pickles.md index 8abae1c3e32..81967e898e8 100644 --- a/help/markdown/fake-tools-pickles.md +++ b/help/markdown/fake-tools-pickles.md @@ -1,6 +1,9 @@ # Convert Gherkin to HTML with Pickles -**Note: This documentation is for FAKE version 5.0 or later. The old documentation can be found [here](apidocs/v4/fake-pickleshelper.html)** +
+
INFO
+

This documentation is for FAKE version 5.0 or later. The old documentation can be found here

+
[Pickles] is a Living Documentation generator: it takes your Specification (written in Gherkin, with Markdown descriptions) and turns them into an always up-to-date documentation of the current state of your software - in a variety of formats. @@ -33,4 +36,4 @@ Target.create "BuildDoc" (fun _ -> Target.runOrDefault "BuildDoc" ``` -[Pickles]: http://www.picklesdoc.com/ \ No newline at end of file +[Pickles]: http://www.picklesdoc.com/ diff --git a/help/markdown/legacy-assemblyinfo.md b/help/markdown/legacy-assemblyinfo.md index ae0f559f76d..44c75a8b103 100644 --- a/help/markdown/legacy-assemblyinfo.md +++ b/help/markdown/legacy-assemblyinfo.md @@ -1,6 +1,9 @@ # Generating AssemblyInfo files -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation for FAKE 5 can be found [here](dotnet-assemblyinfo.html)! ** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation for FAKE 5 can be found here

+
In this article the AssemblyInfo task is used in order to set specific version information to .NET assemblies. diff --git a/help/markdown/legacy-commandline.md b/help/markdown/legacy-commandline.md index 1d0fe8eb389..bc4e89325ef 100644 --- a/help/markdown/legacy-commandline.md +++ b/help/markdown/legacy-commandline.md @@ -1,8 +1,9 @@ # FAKE Command Line -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The new documentation can be found [here](fake-commandline.html)** - -**Note: This documentation is for FAKE.exe version 2.18 or later.** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation for FAKE 5 can be found here

+
The FAKE.exe command line interface (CLI) is defined as follows: diff --git a/help/markdown/legacy-core-targets.md b/help/markdown/legacy-core-targets.md index 2ce88cc7112..82a6fef4d47 100644 --- a/help/markdown/legacy-core-targets.md +++ b/help/markdown/legacy-core-targets.md @@ -1,6 +1,9 @@ # Running targets in "FAKE - F# Make" -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The new documentation can be [found here](core-targets.html) ** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation for FAKE 5 can be found here

+
## Listing targets Before running any specific target it is useful to know all the targets that are available in a build script. @@ -163,8 +166,6 @@ This is in addition to that that MSBuild may use multiple threads when building # Writing custom C# tasks for FAKE -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help! ** - "FAKE - F# Make" is intended to be an extensible build framework and therefor it should be as easy as possible to create custom tasks. This tutorial shows how to create a (very simple) custom task in C#. diff --git a/help/markdown/legacy-customtasks.md b/help/markdown/legacy-customtasks.md index 8ca65adf25b..096fc327292 100644 --- a/help/markdown/legacy-customtasks.md +++ b/help/markdown/legacy-customtasks.md @@ -1,6 +1,9 @@ # Writing custom C# tasks for FAKE -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The new documentation can be found [here](fake-fake5-custom-modules.html)** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation for FAKE 5 can be found here

+
"FAKE - F# Make" is intended to be an extensible build framework and therefor it should be as easy as possible to create custom tasks. This tutorial shows how to create a (very simple) custom task in C#. diff --git a/help/markdown/legacy-gettingstarted.md b/help/markdown/legacy-gettingstarted.md index 27f26bbe339..9d91a6c5f22 100644 --- a/help/markdown/legacy-gettingstarted.md +++ b/help/markdown/legacy-gettingstarted.md @@ -1,6 +1,9 @@ # Getting started with FAKE - F# Make -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The new documentation can be found [here](fake-gettingstarted.html)** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation for FAKE 5 can be found here

+
In this tutorial you will learn how to set up a complete build infrastructure with "FAKE - F# Make". This includes: diff --git a/help/markdown/legacy-index.md b/help/markdown/legacy-index.md index f63ce45215a..79ef1ad863b 100644 --- a/help/markdown/legacy-index.md +++ b/help/markdown/legacy-index.md @@ -1,6 +1,9 @@ # FAKE - F# Make - A DSL for build tasks -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help! ** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help!

+
"FAKE - F# Make" is a build automation system with capabilities which are similar to **make** and **rake**. It is using an easy domain-specific language (DSL) so that you can start using it without learning F#. diff --git a/help/markdown/legacy-teamcity.md b/help/markdown/legacy-teamcity.md index 89325213571..626d5b73ae0 100644 --- a/help/markdown/legacy-teamcity.md +++ b/help/markdown/legacy-teamcity.md @@ -1,6 +1,9 @@ # Integrating a FAKE build script into TeamCity -**Note: This documentation is for FAKE before version 5 (or the non-netcore version). The new documentation can be found [here](buildserver.html)** +
+
INFO
+

This documentation is for FAKE before version 5 (or the non-netcore version). The new documentation can be found here

+
Easy [TeamCity](http://www.jetbrains.com/teamcity/) integration was one of the major goals for the FAKE build system. diff --git a/help/markdown/sql-dacpac.md b/help/markdown/sql-dacpac.md index d071deef15d..a9140f86bfb 100644 --- a/help/markdown/sql-dacpac.md +++ b/help/markdown/sql-dacpac.md @@ -1,6 +1,9 @@ # Packaging and Deploying SQL Databases -**Note: This documentation is for FAKE version 5.0 or later. The old documentation can be found [here](legacy-dacpac.html)** +
+
INFO
+

This documentation is for FAKE version 5.0 or later. The old documentation can be found here

+
FAKE can be used to create a SQL DACPAC and also deploy it to a SQL Server using the MSDeploy executable. This is installed by default with Visual Studio and with the SQL Server Data Tools (SSDT) package. @@ -28,4 +31,4 @@ You can optionally specify the type of command to use (again, refer to the docum * Script - SQL script * Report - XML report of diff -In addition, you can also elect to deploy to Dacpac files rather than SQL databases - simply pass in the pass to the dacpac that you wish to generate. \ No newline at end of file +In addition, you can also elect to deploy to Dacpac files rather than SQL databases - simply pass in the pass to the dacpac that you wish to generate. diff --git a/help/markdown/testing-reportgenerator.md b/help/markdown/testing-reportgenerator.md index 4b6ba32c9ae..653292d7803 100644 --- a/help/markdown/testing-reportgenerator.md +++ b/help/markdown/testing-reportgenerator.md @@ -1,6 +1,10 @@ # Fake.Testing.ReportGenerator -**Note: This documentation is for FAKE version 5.0 or later. The old documentation can be found [here](apidocs/v4/fake-specflowhelper.html)** +
+
INFO
+

This documentation is for FAKE version 5.0 or later. The old documentation can be found here

+
+ ReportGenerator converts XML reports generated by OpenCover, PartCover, dotCover, Visual Studio, NCover or Cobertura into human readable reports in various formats. diff --git a/help/markdown/testing-sonarqube.md b/help/markdown/testing-sonarqube.md index 5f91d928086..bb74d038233 100644 --- a/help/markdown/testing-sonarqube.md +++ b/help/markdown/testing-sonarqube.md @@ -1,7 +1,7 @@ # Analyze your code with SonarQube From the [web page](http://sonarqube.org): -"The SonarQube® platform is an open source quality management platform, dedicated to continuously analyzing and measuring the technical quality of source code, from project portfolio down to the method level" +>"The SonarQube® platform is an open source quality management platform, dedicated to continuously analyzing and measuring the technical quality of source code, >from project portfolio down to the method level" It can analyze a lot of different programming languages, from PHP, Erlang, CSS to Cobol. C# can be installed with an additional plugin. This must be done on the SonarQube server. diff --git a/help/markdown/todo-androidpublisher.md b/help/markdown/todo-androidpublisher.md index 71f80d10859..c1d224e8ef1 100644 --- a/help/markdown/todo-androidpublisher.md +++ b/help/markdown/todo-androidpublisher.md @@ -1,6 +1,9 @@ # Publish Android apk -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help! ** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help!

+
This module helps android developers to automatically publish their APKs diff --git a/help/markdown/todo-deploy.md b/help/markdown/todo-deploy.md index c3469380a7e..0eebd05f1f7 100644 --- a/help/markdown/todo-deploy.md +++ b/help/markdown/todo-deploy.md @@ -1,12 +1,13 @@ # Deployment using FAKE -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help! ** +
+
INFO
+

Fake.Deploy is no longer part of FAKE 5 and is considered obsolete and fully replaced by modern deployment systems (puppet, chef, PowerShell DSC, ...). Announcement + You can still use fake scripts on those alternative deployment systems. Just download the fake binaries and run your scripts.

+
This introduction assumes Fake.Deploy.exe is available in the current directory or path. -**Note: Fake.Deploy is no longer part of FAKE 5 and is considered obsolete and fully replaced by modern deployment systems (puppet, chef, PowerShell DSC, ...). [Announcement](https://github.com/fsharp/FAKE/issues/1820) -**Tipp: You can still use fake scripts on those alternative deployment systems. Just download the fake binaries and run your scripts. - ## Introduction The FAKE deployment tool allows users to deploy applications to remote computers and to run scripts on these remote agents. A typical scenario maybe as follows: @@ -151,4 +152,4 @@ Then save the public key, you need to put this into Fake.Deploy's authorized key To save the private key, click `Conversions` menu option and then click `Export OpenSSH key` ### Linux - ssh-keygen -t rsa -b 2048 -N password \ No newline at end of file + ssh-keygen -t rsa -b 2048 -N password diff --git a/help/markdown/todo-fluentmigrator.md b/help/markdown/todo-fluentmigrator.md index 2958945298b..2cd47be77bd 100644 --- a/help/markdown/todo-fluentmigrator.md +++ b/help/markdown/todo-fluentmigrator.md @@ -1,6 +1,9 @@ # Running database migrations with FluentMigrator -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help! ** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help!

+
[FluentMigrator](https://github.com/schambers/fluentmigrator/) is a .NET library which helps to version database schema using incremental migrations which are described in C#. The basic idea of the FAKE helper is to run FluentMigrator over the existing database using compiled assembly with migrations. diff --git a/help/markdown/todo-fsc.md b/help/markdown/todo-fsc.md index 8e7d7da2e4f..f114103352b 100644 --- a/help/markdown/todo-fsc.md +++ b/help/markdown/todo-fsc.md @@ -1,6 +1,9 @@ # Compiling F# Sources -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help! ** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help!

+
The [Fsc task set](apidocs/v5/legacy/fake-fschelper.html) in FAKE can be used to build F# source files and output libraries, modules, and executables by using the bundled diff --git a/help/markdown/todo-fxcop.md b/help/markdown/todo-fxcop.md index f7c0947a4c2..6e615cf2920 100644 --- a/help/markdown/todo-fxcop.md +++ b/help/markdown/todo-fxcop.md @@ -1,6 +1,9 @@ # Adding FxCop to a FAKE build script -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help! ** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help!

+
This article is an extension to the [getting started guide](gettingstarted.html). You will improve the same Calculator sample with a task for [FxCop](http://msdn2.microsoft.com/en-us/library/bb429476.aspx). diff --git a/help/markdown/todo-octopusdeploy.md b/help/markdown/todo-octopusdeploy.md index f8e189f3cc7..cc70bde2456 100644 --- a/help/markdown/todo-octopusdeploy.md +++ b/help/markdown/todo-octopusdeploy.md @@ -1,6 +1,9 @@ # Automating Deployment using FAKE and Octopus Deploy -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help! ** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help!

+
[Octopus Deploy](http://octopusdeploy.com/) is a great tool for simple and user-friendly release management. diff --git a/help/markdown/todo-typescript.md b/help/markdown/todo-typescript.md index b0c1f25d864..d4e1f713044 100644 --- a/help/markdown/todo-typescript.md +++ b/help/markdown/todo-typescript.md @@ -1,6 +1,9 @@ # Compiling TypeScript applications -**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help! ** +
+
INFO
+

This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help!

+
FAKE can be used to build a variety of different application types. In this tutorial we are looking at the TypeScript support. diff --git a/help/markdown/windows-chocolatey.md b/help/markdown/windows-chocolatey.md index 4d0e15efd52..56315aef6bc 100644 --- a/help/markdown/windows-chocolatey.md +++ b/help/markdown/windows-chocolatey.md @@ -58,7 +58,7 @@ Target.create "ChocoPack" (fun _ -> It adds Chocolatey specific fields: Placeholder | replaced by (`ChocoPackParams` record field) ---- | --- +:--- | :--- `@docsUrl@` | `DocsUrl`: Url pointing to the location of the wiki or docs of the software. `@mailingListUrl@` | `MailingListUrl`: Url pointing to the forum or email list group for the software. `@bugTrackerUrl@` | `BugTrackerUrl`: Url pointing to the location where issues and tickets can be accessed. @@ -70,7 +70,7 @@ To use a chocolateyInstall.ps1 template, a file with the same name must exists i If it doesn't exists but at least `Title` and `PackageDownloadUrl` are defined, the chocolateyInstall.ps1 will be created Placeholder | replaced by (`ChocoPackParams` record field) ---- | --- +:--- | :--- `@packageName@` | `Title`: Title of the package. `@url@` | `PackageDownloadUrl`: Url pointing to the installer (exe, msi, zip) of the package. `@url64@` | `PackageDownload64Url`: Url pointing to the installer (exe, msi, zip) of the 64 bits version of the package. @@ -87,7 +87,7 @@ To use a chocolateyUninstall.ps1 template, a file with the same name must exists If it doesn't exists but at least `Title` and `UninstallPath` are defined, the chocolateyUninstall.ps1 will be created Placeholder | replaced by (`ChocoPackParams` record field) ---- | --- +:--- | :--- `@packageName@` | `Title`: Title of the package. `@silentArgs@` | `SilentArgs`: Silent args for the installer. `@installerType@` | `InstallerType`: Installer type. Default: Zip. diff --git a/help/templates/fake5/apidocstemplate.cshtml b/help/templates/fake5/apidocstemplate.cshtml index 89fb721f3cd..f51c47f14db 100644 --- a/help/templates/fake5/apidocstemplate.cshtml +++ b/help/templates/fake5/apidocstemplate.cshtml @@ -10,14 +10,20 @@
-

- Note: This API documentation is for FAKE version 5.0 or later. The old API documentation can be found - here for migration or here for fake 4 - -

-

- Note: This is part of the @ViewBag.AssemblyName module. -

+
+
INFO
+

This API documentation is for FAKE version 5.0 or later. The old API documentation can be found + here for migration or here for fake 4 +

+ @if(!string.IsNullOrWhiteSpace(ViewBag.AssemblyName)){ +

+ This is part of the @ViewBag.AssemblyName module. +

+ } +
+ + +
@RenderBody() diff --git a/help/templates/reference/module.cshtml b/help/templates/reference/module.cshtml index b58b088c374..dad67e0c70d 100644 --- a/help/templates/reference/module.cshtml +++ b/help/templates/reference/module.cshtml @@ -32,8 +32,18 @@ var nestModules = (IEnumerable)Model.Module.NestedModules; var nestTypes = (IEnumerable)Model.Module.NestedTypes; } +

+ @if (Model.Module.IsObsolete) + { +

+
OBSOLETE
+

@Html.Encode(@Model.Module.ObsoleteMessage)

+
+ } +

@Model.Module.Name

+
@foreach (var sec in comment.Sections) { // XML comment for the type has multiple sections that can be labelled @@ -106,4 +116,4 @@ TableHeader = "Active pattern", Members = g.Members.Where(m => m.Kind == MemberKind.ActivePattern) }) -} \ No newline at end of file +} diff --git a/help/templates/reference/part-members.cshtml b/help/templates/reference/part-members.cshtml index 29b581f549a..b0b4cea73c4 100644 --- a/help/templates/reference/part-members.cshtml +++ b/help/templates/reference/part-members.cshtml @@ -21,9 +21,24 @@ @if (!it.Details.TypeArguments.IsEmpty) { Type parameters: @it.Details.FormatTypeArguments } + @if (Enumerable.Any(it.Attributes)) { + + Attributes:
+ @foreach (var attr in it.Attributes) + { + @Html.Encode(@attr.Format())
+ } +
+ }
+ @if (it.IsObsolete) { +
+
OBSOLETE
+

@Html.Encode(@it.ObsoleteMessage)

+
+ } @if (!String.IsNullOrEmpty(it.Details.FormatSourceLocation)) { @@ -37,4 +52,4 @@ } -} \ No newline at end of file +} diff --git a/help/templates/reference/part-nested.cshtml b/help/templates/reference/part-nested.cshtml index 78df92fd608..374dee39d67 100644 --- a/help/templates/reference/part-nested.cshtml +++ b/help/templates/reference/part-nested.cshtml @@ -10,7 +10,16 @@ @it.Name - @it.Comment.Blurb + + @if (it.IsObsolete) + { +
+
OBSOLETE
+

@Html.Encode(@it.ObsoleteMessage)

+
+ } + @it.Comment.Blurb + } @@ -28,9 +37,18 @@ @it.Name - @it.Comment.Blurb + + @if (it.IsObsolete) + { +
+
OBSOLETE
+

@Html.Encode(@it.ObsoleteMessage)

+
+ } + @it.Comment.Blurb + } -} \ No newline at end of file +} diff --git a/help/templates/reference/type.cshtml b/help/templates/reference/type.cshtml index 882c81e5e9f..e1957d242b2 100644 --- a/help/templates/reference/type.cshtml +++ b/help/templates/reference/type.cshtml @@ -10,7 +10,7 @@ // Get all the members & comment for the type var members = (IEnumerable)Model.Type.AllMembers; var comment = (Comment)Model.Type.Comment; - + var type = (FSharp.MetadataFormat.Type)Model.Type; // Group all members by their category which is an inline annotation // that can be added to members using special XML comment: // @@ -28,7 +28,16 @@ Name = String.IsNullOrEmpty(g.Key) ? "Other type members" : g.Key }); } +

+ @if (Model.Type.IsObsolete) + { +

+
OBSOLETE
+

@Html.Encode(@Model.Type.ObsoleteMessage)

+
+ } +

@Model.Type.Name

@foreach (var sec in comment.Sections) { diff --git a/help/templates/template.cshtml b/help/templates/template.cshtml index 7792c8487dd..a5da76ad924 100644 --- a/help/templates/template.cshtml +++ b/help/templates/template.cshtml @@ -10,8 +10,12 @@ - + + + + + @@ -97,7 +101,7 @@ Core
  • Targets
  • -
  • Environment
  • +
  • Environment
  • Process
  • String
  • BuildServer
  • @@ -350,6 +354,17 @@ + + + + + + + + + + + diff --git a/paket.lock b/paket.lock index 3d8877b92dc..472b83bca14 100644 --- a/paket.lock +++ b/paket.lock @@ -1218,7 +1218,7 @@ NUGET System.Threading.Timer (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81)) (&& (>= uap10.0) (< uap10.1)) System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81)) (&& (>= net46) (< netstandard1.4)) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= uap10.0) (< uap10.1)) System.Xml.XDocument (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81)) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= uap10.0) (< uap10.1)) - Nuget.CommandLine (4.6.2) + NuGet.CommandLine (4.6.2) Octokit (0.29) - content: none NETStandard.Library (>= 1.6) - restriction: && (< net45) (>= netstandard1.1) runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.2) - content: none, restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) @@ -1753,16 +1753,16 @@ NUGET System.Threading (>= 4.3) - restriction: || (>= dnxcore50) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) System.Xml.ReaderWriter (>= 4.3) - restriction: || (>= dnxcore50) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) remote: https://ci.appveyor.com/nuget/fsharp-formatting - FSharp.Formatting (3.0.0-beta10) + FSharp.Formatting (3.0.0-beta11) FSharp.Compiler.Service (>= 22.0.3 < 23.0) Microsoft.AspNet.Razor (>= 3.2.4 < 4.0) System.ValueTuple (>= 4.4 < 5.0) - FSharp.Formatting.CommandTool (3.0.0-beta10) + FSharp.Formatting.CommandTool (3.0.0-beta11) remote: https://dotnet.myget.org/F/roslyn-tools/api/v3/index.json RoslynTools.ReferenceAssemblies (0.1.3) GITHUB remote: fsharp/FAKE - modules/Octokit/Octokit.fsx (b3961e973484a8dc61ee94af13fc6898d0bee705) + modules/Octokit/Octokit.fsx (38b77b8d3ed67f0b9b0402f5c79774cb477c1c8d) Octokit (>= 0.20) GROUP Docs NUGET diff --git a/src/legacy/FAKE/Cli.fs b/src/legacy/FAKE/Cli.fs index afebb4a70ea..0510a2b3727 100644 --- a/src/legacy/FAKE/Cli.fs +++ b/src/legacy/FAKE/Cli.fs @@ -1,12 +1,12 @@ /// New Command line interface for FAKE that utilises Argu. -[] +[] [] module Cli open System open Argu -[] +[] type FakeArg = | [] EnvVar of string * string | [] EnvFlag of string @@ -19,7 +19,7 @@ type FakeArg = | [] Single_Target | [] NoCache interface IArgParserTemplate with - [] + [] member x.Usage = match x with | EnvVar _ -> "Set environment variable . Supports multiple." @@ -34,7 +34,7 @@ type FakeArg = | NoCache -> "Disables caching of compiled script" /// Return the parsed FAKE args or the parse exception. -[] +[] let parsedArgsOrEx args = try let args = args |> Seq.skip 1 |> Array.ofSeq @@ -43,7 +43,7 @@ let parsedArgsOrEx args = with | ex -> Choice2Of2(ex) /// Prints the FAKE argument usage. -[] +[] let printUsage () = printfn @" fake.exe [] [] [options] @@ -56,11 +56,11 @@ let printUsage () = Options: %s" (defaultArg (ArgumentParser.Create().HelpTextMessage) "") -[] +[] type Args = { Script: string option; Target: string option; Rest: string [] } /// Parses the positional args and provides the remaining tail args. -[] +[] let parsePositionalArgs (args:string []) = //Support this usage. diff --git a/src/legacy/FAKE/CommandlineParams.fs b/src/legacy/FAKE/CommandlineParams.fs index c0b4716c2a9..fbbce62fa8e 100644 --- a/src/legacy/FAKE/CommandlineParams.fs +++ b/src/legacy/FAKE/CommandlineParams.fs @@ -1,12 +1,12 @@ -[] +[] module CommandlineParams open Fake -[] +[] let printAllParams() = printfn "FAKE.exe [buildScript] [Target] Variable1=Value1 Variable2=Value2 ... " -[] +[] let parseArgs cmdArgs = let splitter = [| '=' |] let split (arg:string) = diff --git a/src/legacy/FAKE/Program.fs b/src/legacy/FAKE/Program.fs index 512e43b662d..909cfa54f3a 100644 --- a/src/legacy/FAKE/Program.fs +++ b/src/legacy/FAKE/Program.fs @@ -3,19 +3,19 @@ open Fake open System.IO open Argu -[] +[] let printVersion() = traceFAKE "FakePath: %s" fakePath traceFAKE "%s" fakeVersionStr -[] +[] let printUsage () = printfn "-------------------" printfn " FAKE usage" printfn "-------------------" Cli.printUsage () -[] +[] let printEnvironment cmdArgs args = printVersion() @@ -34,16 +34,16 @@ let printEnvironment cmdArgs args = traceFAKE "FSI-Path: %s" fsiPath traceFAKE "MSBuild-Path: %s" msBuildExe -[] +[] let containsParam param = Seq.map toLower >> Seq.exists ((=) (toLower param)) -[] +[] let paramIsHelp param = containsParam param ["help"; "?"; "/?"; "-h"; "--help"; "/h"; "/help"] -[] +[] let buildScripts = !! "*.fsx" |> Seq.toList -[] +[] let encodingToRestore = Console.OutputEncoding try try diff --git a/src/legacy/Fake.Deploy.Lib/FakeDeployAgentHelper.fs b/src/legacy/Fake.Deploy.Lib/FakeDeployAgentHelper.fs index b36332a4b3a..c3ff0b4e937 100644 --- a/src/legacy/Fake.Deploy.Lib/FakeDeployAgentHelper.fs +++ b/src/legacy/Fake.Deploy.Lib/FakeDeployAgentHelper.fs @@ -1,5 +1,5 @@ /// Contains a http helper functions for FAKE.Deploy. -[] +[] module Fake.FakeDeployAgentHelper open System @@ -11,22 +11,22 @@ open System.Web open HttpListenerHelper open Fake.SshRsaModule -[] +[] /// Authentication token received from a successful login type AuthToken = | AuthToken of Guid -[] +[] let mutable private authToken : Guid option = None -[] +[] /// A http response type. type Response = { Messages : seq Exception : obj IsError : bool } -[] +[] /// Deployment result type. type DeploymentResponse = | Success of Response @@ -47,14 +47,14 @@ let private wrapFailure = Exception = exn } |> Failure -[] +[] type Url = string -[] +[] type Action = string -[] +[] type FilePath = string -[] +[] type Deployment = { PackageFileName : FilePath Url : Url @@ -71,7 +71,7 @@ let private defaultDeployment = Arguments = [] AuthToken = None } -[] +[] [] let scriptArgumentsHeaderName = "X-FAKE-Script-Arguments" @@ -84,7 +84,7 @@ let private httpClient (timeout : TimeSpan) = | Some t -> client.DefaultRequestHeaders.Add("AuthToken", string t) client -[] +[] let parseDeploymentResponse msg = match msg |> Json.tryDeserialize> with | Choice1Of2 m -> match m with @@ -137,17 +137,17 @@ let private post url file timeout = uploadFile url file timeout >> processRespon /// Puts the given body to the given URL. let private put url timeout = uploadData url timeout >> processResponse -[] +[] type DeployStatus = | Active | Inactive -[] +[] type App = { Name : string Version : string } -[] +[] let buildExceptionString (r : Response) = let msgs = r.Messages @@ -155,7 +155,7 @@ let buildExceptionString (r : Response) = |> fun arr -> String.Join("\r\n", arr) sprintf "%O\r\n\r\nDeploy messages\r\n{\r\n%s\r\n}\r\n" r.Exception msgs -[] +[] /// Authenticate against the given server with the given userId and private key let authenticate server userId serverpathToPrivateKeyFile passwordForPrivateKey = let privateKey = loadPrivateKey serverpathToPrivateKeyFile passwordForPrivateKey @@ -176,27 +176,27 @@ let authenticate server userId serverpathToPrivateKeyFile passwordForPrivateKey authToken /// Returns all releases of the given app from the given server. -[] +[] let getReleasesFor server appname status = if String.IsNullOrEmpty(appname) then server + "/deployments?status=" + status else server + "/deployments/" + appname + "?status=" + status |> get defaultTimeout parseDeploymentResponse /// Performs a rollback of the given app on the server. -[] +[] let rollbackTo server appname version = put (server + "/deployments/" + appname + "?version=" + version) [||] defaultTimeout |> wrapFailure /// Returns all active releases from the given server. -[] +[] let getAllActiveReleases server = getReleasesFor server null "active" |> wrapFailure /// Returns the active release of the given app from the given server. -[] +[] let getActiveReleasesFor server appname = getReleasesFor server appname "active" |> wrapFailure /// Returns all releases of the given app from the given server. -[] +[] let getAllReleasesFor server appname = if String.IsNullOrEmpty(appname) then server + "/deployments/" else server + "/deployments/" + appname + "/" @@ -204,16 +204,16 @@ let getAllReleasesFor server appname = |> wrapFailure /// Returns all releases from the given server. -[] +[] let getAllReleases server = getAllReleasesFor server null /// Posts a deployment package to the given URL. -[] +[] let postDeploymentPackage url packageFileName args = post url packageFileName args defaultTimeout |> wrapFailure /// Posts a deployment package to the given URL, executes the script inside it with given arguments and handles the response. -[] +[] let deployPackage (f : Deployment -> Deployment) = let d = f { defaultDeployment with AuthToken = @@ -242,7 +242,7 @@ let DeployPackageWithArgs url packageFileName args = let DeployPackage url packageFileName = DeployPackageWithArgs url packageFileName [||] /// Performs a rollback of the given app at the given URL and handles the response. -[] +[] let RollbackPackage url appName version = match rollbackTo url appName version with | Success _ -> tracefn "Rollback of %s to %s successful" appName version diff --git a/src/legacy/Fake.Deploy.Lib/HttpHeaderHelper.fs b/src/legacy/Fake.Deploy.Lib/HttpHeaderHelper.fs index bf26e06ca07..5fe459c9bc6 100644 --- a/src/legacy/Fake.Deploy.Lib/HttpHeaderHelper.fs +++ b/src/legacy/Fake.Deploy.Lib/HttpHeaderHelper.fs @@ -1,10 +1,10 @@ [] -[] +[] module Fake.HttpHeaderHelper open System open System.Text.RegularExpressions -[] +[] let toHeaderValue (values:string []) : string = values |> Array.map (fun x -> @@ -15,7 +15,7 @@ let toHeaderValue (values:string []) : string = let private regex = Regex("(\"[^\"]*\")(?:,(\"[^\"]*\"))*", RegexOptions.Compiled) -[] +[] let fromHeaderValue (value: string) = match regex.Matches value |> Seq.cast |> Seq.toList with | [] -> diff --git a/src/legacy/Fake.Deploy.Lib/HttpListenerHelper.fs b/src/legacy/Fake.Deploy.Lib/HttpListenerHelper.fs index 002447938be..a84069fcc50 100644 --- a/src/legacy/Fake.Deploy.Lib/HttpListenerHelper.fs +++ b/src/legacy/Fake.Deploy.Lib/HttpListenerHelper.fs @@ -1,5 +1,5 @@ /// Contains basic HTTP listener functions for FAKE.Deploy. -[] +[] module Fake.HttpListenerHelper open System @@ -12,20 +12,20 @@ open System.Text.RegularExpressions open System.Security.Principal /// Represents a route. -[] +[] type Route = { Verb : string Path : string Handler : Map -> HttpListenerContext -> string } override x.ToString() = sprintf "%s %s" x.Verb x.Path -[] +[] type HttpResponseMessage<'a> = | Message of 'a | Exception of string /// Represents a route result. -[] +[] type RouteResult = { Route : Route Parameters : Map } @@ -52,11 +52,11 @@ let private writeResponse (ctx : HttpListenerContext) msg = ctx.Response.Close(response, true) /// [omit] -[] +[] let placeholderRegex = new Regex("{([^}]+)}", RegexOptions.Compiled) /// [omit] -[] +[] let routeMatcher route = let dict = new System.Collections.Generic.Dictionary() let normalized = route.Path.Replace("?", @"\?").Trim '/' @@ -106,11 +106,11 @@ let private routeRequest log (ctx : HttpListenerContext) routeMatchers = let private getStatus args (ctx : HttpListenerContext) = "Http listener is running" /// Contains the default routes. -[] +[] let defaultRoutes = [ "GET", "", getStatus ] /// Creates routes for the http listener. -[] +[] let createRoutes routes = routes |> Seq.map (fun (verb, route : string, func) -> @@ -120,18 +120,18 @@ let createRoutes routes = |> Seq.map routeMatcher /// [omit] -[] +[] let CreateDefaultRequestMap() = createRoutes defaultRoutes /// Matches an URL with the given routes. -[] +[] let matchRoute routes verb url = routes |> Seq.map routeMatcher |> Seq.tryPick (fun r -> r verb url) /// [omit] -[] +[] let getBodyFromContext (ctx : HttpListenerContext) = let readAllBytes (s : Stream) = let ms = new MemoryStream() @@ -148,7 +148,7 @@ let getBodyFromContext (ctx : HttpListenerContext) = else failwith "Attempted to read body from request when there is not one" /// Returns the first free port which can be used for the http listener. -[] +[] let getFirstFreePort() = let defaultPort = 8080 let usedports = @@ -165,32 +165,32 @@ let getFirstFreePort() = port.ToString() /// Returns the specified port from the config or the first free port if no port was specified. -[] +[] let getPort configPort = match configPort with | "*" -> getFirstFreePort() | _ -> configPort /// Represents a http listener. -[] +[] type Listener = { ServerName : string Port : string CancelF : unit -> unit } - [] + [] member x.Cancel() = x.CancelF() - [] + [] member x.RootUrl = sprintf "http://%s:%s/fake/" x.ServerName x.Port /// Creates an empty http listener. -[] +[] let emptyListener = { ServerName = "" Port = "" CancelF = id } /// [omit] -[] +[] let getSetUrlAclArgs port = if Environment.OSVersion.Version.Major > 5 then "netsh", @@ -200,7 +200,7 @@ let getSetUrlAclArgs port = String.Format(@"set urlacl /u http://+:{0}/ /a D:(A;;GX;;;""{1}"")", port, WindowsIdentity.GetCurrent().User) /// Returns if the http listener can listen to the given port. -[] +[] let canListen port = try let httpListener = new HttpListener() @@ -213,7 +213,7 @@ let canListen port = false /// Checks whether the http listener can be bound to the given port. -[] +[] let ensureCanBindHttpPort port = if not <| canListen port then let cmd, args = getSetUrlAclArgs port @@ -222,7 +222,7 @@ let ensureCanBindHttpPort port = | a -> failwithf "Failed to grant rights for listening to http, exit code: %d" a /// Starts a http listener on the given server and port. -[] +[] let start log serverName port requestMap = let cts = new CancellationTokenSource() let usedPort = getPort port @@ -247,5 +247,5 @@ let start log serverName port requestMap = CancelF = cts.Cancel } /// Starts a http listener on the given server and port - uses the console logger. -[] +[] let startWithConsoleLogger serverName port requestMap = start TraceHelper.logToConsole serverName port requestMap diff --git a/src/legacy/Fake.Deploy.Lib/Json.fs b/src/legacy/Fake.Deploy.Lib/Json.fs index 3ff76610d97..9dbe0008a86 100644 --- a/src/legacy/Fake.Deploy.Lib/Json.fs +++ b/src/legacy/Fake.Deploy.Lib/Json.fs @@ -1,5 +1,5 @@ /// Contains extensions for Newtonsoft.Json. **Don't use it directly. It's likely to be changed in further versions.** -[] +[] module Fake.Json open Newtonsoft.Json @@ -8,23 +8,23 @@ open Microsoft.FSharp.Reflection open Microsoft.FSharp.Quotations /// Serializes a object to json -[] +[] let serialize x = JsonConvert.SerializeObject(x, Formatting.Indented) /// Deserializes a text into a object of type 'a -[] +[] let deserialize<'a> text : 'a = JsonConvert.DeserializeObject<'a>(text) /// Deserializes a file into a object of type 'a -[] +[] let deserializeFile<'a> = ReadFileAsString >> deserialize<'a> -[] +[] type ParsingException(input : string, inner : exn) = inherit Exception(sprintf "Faied to parse input: %s" input, inner) /// Tryes to deserialize a text into a object of type 'a and returns either instance of 'a or parsing error -[] +[] let tryDeserialize<'a> (s: string) : Choice<'a, exn> = try deserialize<'a> s |> Choice1Of2 diff --git a/src/legacy/Fake.Deploy.Lib/SshRsaModule.fs b/src/legacy/Fake.Deploy.Lib/SshRsaModule.fs index 48f09328308..d1c6af0a2ce 100644 --- a/src/legacy/Fake.Deploy.Lib/SshRsaModule.fs +++ b/src/legacy/Fake.Deploy.Lib/SshRsaModule.fs @@ -1,4 +1,4 @@ -[] +[] module Fake.SshRsaModule open System @@ -6,40 +6,40 @@ open System.IO open Renci.SshNet open Renci.SshNet.Security open System.IO -[] +[] type PublicKey = { Name : string PublicKey : byte [] UserId : string } -[] +[] type PrivateKey(privateKey : HostAlgorithm) = - [] + [] member this.Sign data = privateKey.Sign(data) - [] + [] member this.Verify data signature = privateKey.VerifySignature(data, signature) -[] +[] let loadPrivateKey (pathToKeyFile : string) (password : string) = let pk = new PrivateKeyFile(pathToKeyFile, password) PrivateKey(pk.HostKey) // Format: // ssh-rsa base_64_encoded_key username -[] +[] let parsePublicKey (publicKey : string) = let cols = publicKey.Split([| ' ' |]) { Name = cols.[0] PublicKey = Convert.FromBase64String(cols.[1]) UserId = cols.[2] } -[] +[] let loadPublicKeys fileName = let lines = File.ReadAllLines fileName lines |> Array.map parsePublicKey -[] +[] let verifySignature data signature (publicKey : PublicKey) = let pk = new KeyHostAlgorithm(publicKey.Name, new RsaKey(), publicKey.PublicKey) pk.VerifySignature(data, signature) diff --git a/src/legacy/Fake.Deploy/AppConfig.fs b/src/legacy/Fake.Deploy/AppConfig.fs index 9fe0ad91911..b88599692bf 100644 --- a/src/legacy/Fake.Deploy/AppConfig.fs +++ b/src/legacy/Fake.Deploy/AppConfig.fs @@ -1,36 +1,36 @@ -[] +[] module Fake.AppConfig open System open System.IO open System.Configuration -[] +[] type Authorization = | Off | On -[] +[] let mutable appSettings = ConfigurationManager.AppSettings -[] +[] let HasKey name = ConfigurationManager.AppSettings.AllKeys |> Seq.exists (fun key -> key = name) -[] +[] let Key<'T>(name : string) = let value = appSettings.[name] Convert.ChangeType(value, typedefof<'T>) :?> 'T -[] +[] let WorkDirectory = match (HasKey "WorkDirectory") with | false -> "." | true -> Key "WorkDirectory" |> Path.GetFullPath -[] +[] let LogDirectory = match (HasKey "LogDirectory") with | false -> WorkDirectory @@ -40,10 +40,10 @@ let LogDirectory = else dir |> Path.GetFullPath -[] +[] let AuthorizedKeysFile = Key "AuthorizedKeysFile" -[] +[] let Authorization = let keyName = "Authorization" match (HasKey keyName) with @@ -54,8 +54,8 @@ let Authorization = | "off" -> Off | x -> failwith (sprintf "'%s' is not a valid value for Authorization" x) -[] +[] let ServerName = Key "ServerName" -[] +[] let Port = Key "Port" diff --git a/src/legacy/Fake.Deploy/AuthModule.fs b/src/legacy/Fake.Deploy/AuthModule.fs index 59068a2041f..4bef79d42b5 100644 --- a/src/legacy/Fake.Deploy/AuthModule.fs +++ b/src/legacy/Fake.Deploy/AuthModule.fs @@ -1,4 +1,4 @@ -[] +[] module Fake.Deploy.Auth open System @@ -10,19 +10,19 @@ open Fake.AppConfig open Nancy open Nancy.Security -[] +[] let AuthTokenName = "AuthToken" -[] +[] type LoginChallange = { UserId : string Challenge : string ValidTo : DateTime } -[] +[] let NotAuthenticated = AuthenticatedUser("anonymous", ["none"]) -[] +[] type LoginRequests() = let requests = ConcurrentDictionary() @@ -30,7 +30,7 @@ type LoginRequests() = let stale = requests |> Seq.filter (fun r -> r.Value.ValidTo <= DateTime.Now) stale |> Seq.iter (fun s -> requests.TryRemove(s.Key) |> ignore) - [] + [] member this.Add (userId : string) (challenge : string) = removeStale() let c = @@ -39,7 +39,7 @@ type LoginRequests() = ValidTo = DateTime.Now.AddMinutes 2. } requests.TryAdd(challenge, c) |> ignore - [] + [] member this.Get challenge = if challenge = null then None else @@ -48,12 +48,12 @@ type LoginRequests() = if c && x.ValidTo > DateTime.Now then Some x.UserId else None - [] + [] member this.Remove challenge = requests.TryRemove challenge |> ignore let private loginRequest = LoginRequests() -[] +[] type AuthModule(userMapper : UserMapper, users : list) as http = inherit FakeModule("/fake") @@ -70,14 +70,14 @@ type AuthModule(userMapper : UserMapper, users : list) as http = http.Logout(http.Request.Headers.Item(AuthTokenName) |> Seq.head) http.Response.AsText("logged out")) - [] + [] member public http.Logout(ticket : string) = (ticket |> Guid.Parse |> userMapper.RemoveByToken) |> ignore - [] + [] member public http.CreateLoginRequest userId = use rnd = new System.Security.Cryptography.RNGCryptoServiceProvider() let bytes = Array.zeroCreate 256 @@ -86,7 +86,7 @@ type AuthModule(userMapper : UserMapper, users : list) as http = loginRequest.Add userId value value - [] + [] member public http.HandleLoginRequest valueToSign signature = let failLogin() = http.Response.AsText("").WithStatusCode 401 match AppConfig.Authorization, (loginRequest.Get valueToSign) with diff --git a/src/legacy/Fake.Deploy/AuthenticatedUser.fs b/src/legacy/Fake.Deploy/AuthenticatedUser.fs index 0a2055088c6..c6c516392bf 100644 --- a/src/legacy/Fake.Deploy/AuthenticatedUser.fs +++ b/src/legacy/Fake.Deploy/AuthenticatedUser.fs @@ -2,10 +2,10 @@ open Nancy.Security -[] +[] type AuthenticatedUser(userName, claims) = interface IUserIdentity with - [] + [] member this.UserName with get () = userName - [] + [] member this.Claims with get () = claims diff --git a/src/legacy/Fake.Deploy/DeployAgentModule.fs b/src/legacy/Fake.Deploy/DeployAgentModule.fs index 2564428459a..96a393fe616 100644 --- a/src/legacy/Fake.Deploy/DeployAgentModule.fs +++ b/src/legacy/Fake.Deploy/DeployAgentModule.fs @@ -1,4 +1,4 @@ -[] +[] module Fake.DeployAgentModule open System open Fake @@ -7,41 +7,41 @@ open Nancy open Nancy.ModelBinding open Microsoft.FSharp.Reflection -[] +[] [] module Op = let private nullString:string = null - [] + [] let (?>) (target : obj) targetKey = let t = target :?> DynamicDictionary let x = t.[targetKey] :?> DynamicDictionaryValue if x.HasValue then x.Value.ToString() else nullString -[] +[] type FakeModule(path) = inherit NancyModule(path) let http (httpMethod:NancyModule.RouteBuilder) urlPart f = httpMethod.[urlPart] <- fun x -> f x |> box - [] + [] new () = FakeModule("") - [] + [] member this.get urlPart f = http this.Get urlPart f - [] + [] member this.post urlPart f = http this.Post urlPart f - [] + [] member this.put urlPart f = http this.Put urlPart f - [] + [] member this.delete urlPart f = http this.Delete urlPart f - [] + [] member this.InternalServerError (e:Exception) = this.Response .AsText(e.ToString()) .WithStatusCode HttpStatusCode.InternalServerError - [] + [] member this.returnAsJson f logError = try this.Response.AsJson (f()) diff --git a/src/legacy/Fake.Deploy/DeploymentAgent.fs b/src/legacy/Fake.Deploy/DeploymentAgent.fs index 21e66def343..19a139bf601 100644 --- a/src/legacy/Fake.Deploy/DeploymentAgent.fs +++ b/src/legacy/Fake.Deploy/DeploymentAgent.fs @@ -1,4 +1,4 @@ -[] +[] module Fake.DeploymentAgent open System.IO @@ -9,13 +9,13 @@ open Nancy open Nancy.Hosting.Self open Nancy.Security -[] +[] let getBodyFromNancyRequest (ctx : Nancy.Request) = use ms = new MemoryStream() ctx.Body.CopyTo ms ms.ToArray() -[] +[] let getScriptArgumentsFromNancyRequest (ctx : Nancy.Request) : string [] = let args = ctx.Headers @@ -31,7 +31,7 @@ let getScriptArgumentsFromNancyRequest (ctx : Nancy.Request) : string [] = | _ -> args |> Seq.collect id |> Seq.map fromHeaderValue |> Seq.collect id |> Array.ofSeq -[] +[] let runDeployment workDir (ctx : Nancy.Request) = let packageBytes = getBodyFromNancyRequest ctx let package, scriptFile = unpack workDir false packageBytes @@ -51,15 +51,15 @@ let runDeployment workDir (ctx : Nancy.Request) = response |> Json.serialize -[] +[] let createNancyHost uri = let config = HostConfiguration() config.UrlReservations.CreateAutomatically <- true new NancyHost(config, uri) -[] +[] let mutable workDir = AppConfig.WorkDirectory -[] +[] type DeployAgentModule() as http = inherit FakeModule("/fake") diff --git a/src/legacy/Fake.Deploy/DeploymentHelper.fs b/src/legacy/Fake.Deploy/DeploymentHelper.fs index ecfb6627a7b..539e678c225 100644 --- a/src/legacy/Fake.Deploy/DeploymentHelper.fs +++ b/src/legacy/Fake.Deploy/DeploymentHelper.fs @@ -1,5 +1,5 @@ /// Contains helper functions for Fake.Deploy -[] +[] module Fake.DeploymentHelper open System @@ -7,16 +7,16 @@ open System.IO open Fake.FakeDeployAgentHelper /// Allows to specify a deployment version -[] +[] let predecessorPrefix = "head~" -[] +[] type VersionInfo = /// Allows to deploy a specific version | Specific of string /// Allows to deploy a version which is a predecessor to the current version | Predecessor of int - [] + [] static member Parse(s : string) = let s = s.ToLower() if s.StartsWith predecessorPrefix then @@ -26,41 +26,41 @@ type VersionInfo = else Specific s /// The root dir for Fake.Deploy - Dafault value is "./deployments" -[] +[] let mutable deploymentRootDir = "deployments/" /// Retrieves the NuSpec information for all active releases. -[] +[] let getActiveReleases dir = !!(dir @@ deploymentRootDir @@ "**/active/*.nupkg") |> Seq.map GetMetaDataFromPackageFile /// Retrieves the NuSpec information for the active release of the given app. -[] +[] let getActiveReleaseFor dir (app : string) = !!(dir @@ deploymentRootDir @@ app @@ "/active/*.nupkg") |> Seq.map GetMetaDataFromPackageFile |> Seq.head /// Retrieves the NuSpec information of all releases. -[] +[] let getAllReleases dir = !!(dir @@ deploymentRootDir @@ "**/*.nupkg") |> Seq.map GetMetaDataFromPackageFile /// Retrieves the NuSpec information for all releases of the given app. -[] +[] let getAllReleasesFor dir (app : string) = !!(dir @@ deploymentRootDir @@ app @@ "/**/*.nupkg") |> Seq.map GetMetaDataFromPackageFile /// Returns statistics about the machine environment. -[] +[] let getStatistics() = getMachineEnvironment() /// Gets the backup package file name for the given app and version -[] +[] let getBackupFor dir (app : string) (version : string) = let backupFileName = app + "." + version + ".nupkg" dir @@ deploymentRootDir @@ app @@ "backups" |> FindFirstMatchingFile backupFileName -[] +[] let findScriptFile dir = let prioFiles = ["deploy.fsx",1; "install.fsx",2; "setup.fsx",3] let getWeight s = @@ -74,7 +74,7 @@ let findScriptFile dir = else new FileNotFoundException(sprintf "Could not find file matching %s in %s" pattern dir) |> raise /// Extracts the NuGet package -[] +[] let unpack workDir isRollback packageBytes = let tempFile = Path.GetTempFileName() WriteBytesToFile tempFile packageBytes @@ -95,7 +95,7 @@ let unpack workDir isRollback packageBytes = package, scriptFile /// Runs a deployment script from the given package -[] +[] let doDeployment scriptFileName scriptArgs = try TargetHelper.reset() @@ -115,7 +115,7 @@ let doDeployment scriptFileName scriptArgs = Exception = e } /// Runs a deployment from the given package file name -[] +[] let runDeploymentFromPackageFile workDir packageFileName scriptArgs = try let packageBytes = ReadFileAsBytes packageFileName @@ -127,7 +127,7 @@ let runDeploymentFromPackageFile workDir packageFileName scriptArgs = Exception = e } /// Rolls the given app back to the specified version -[] +[] let rollback workDir (app : string) (version : string) = try let currentPackageFileName = !!(workDir @@ deploymentRootDir @@ app @@ "/active/*.nupkg") |> Seq.head @@ -160,12 +160,12 @@ let rollback workDir (app : string) (version : string) = Exception = e } /// Returns the version no. which specified in the NuGet package -[] +[] let getVersionFromNugetFileName (app : string) (fileName : string) = Path.GetFileName(fileName).ToLower().Replace(".nupkg", "").Replace(app.ToLower() + ".", "") /// Returns the version no. of the latest backup of the given app -[] +[] let getPreviousPackageVersionFromBackup dir app versions = let currentPackageFileName = !!(dir @@ deploymentRootDir @@ app @@ "/active/*.nupkg") @@ -181,7 +181,7 @@ let getPreviousPackageVersionFromBackup dir app versions = |> Seq.head /// Rolls the given app back to the specified version info -[] +[] let rollbackTo workDir app versionInfo = let previousVersion = predecessorPrefix + "1" let versionInfo = if String.IsNullOrEmpty versionInfo then previousVersion else versionInfo diff --git a/src/legacy/Fake.Deploy/Installers.fs b/src/legacy/Fake.Deploy/Installers.fs index ad371212986..3596f57c4c3 100644 --- a/src/legacy/Fake.Deploy/Installers.fs +++ b/src/legacy/Fake.Deploy/Installers.fs @@ -1,4 +1,4 @@ -[] +[] module Fake.Installers open System.ServiceProcess @@ -9,7 +9,7 @@ open System.Reflection open System.Diagnostics open Fake.Services -[] +[] [] type FakeDeployInstaller() as self = inherit Installer() @@ -26,13 +26,13 @@ type FakeDeployInstaller() as self = self.Installers.Add processInstaller |> ignore self.Installers.Add serviceInstaller |> ignore - [] + [] override x.OnCommitted(savedState) = base.OnCommitted(savedState) let sc = new ServiceController(ServiceName) sc.Start() -[] +[] let getInstaller() = let ti = new TransactedInstaller() let installer = new FakeDeployInstaller() @@ -42,9 +42,9 @@ let getInstaller() = ti /// Installs the Fake listener -[] +[] let installServices() = getInstaller().Install(new System.Collections.Hashtable()) /// Uninstalls the Fake listener -[] +[] let uninstallServices() = getInstaller().Uninstall(null) diff --git a/src/legacy/Fake.Deploy/JSonSerializers.fs b/src/legacy/Fake.Deploy/JSonSerializers.fs index 1cd6047dc3f..3f3bd736da7 100644 --- a/src/legacy/Fake.Deploy/JSonSerializers.fs +++ b/src/legacy/Fake.Deploy/JSonSerializers.fs @@ -3,19 +3,19 @@ open Fake.Json open Newtonsoft.Json open Nancy.Serialization.JsonNet -[] +[] type JsonSerializerForFsharp = inherit JsonNetSerializer - [] + [] new (s:JsonSerializer) = { inherit JsonNetSerializer(s) } -[] +[] type JsonBodySerializerForFsharp = inherit JsonNetBodyDeserializer - [] + [] new (s:JsonSerializer) = { inherit JsonNetBodyDeserializer(s) } diff --git a/src/legacy/Fake.Deploy/Logger.fs b/src/legacy/Fake.Deploy/Logger.fs index 3e77d4d4345..21a92a4ead2 100644 --- a/src/legacy/Fake.Deploy/Logger.fs +++ b/src/legacy/Fake.Deploy/Logger.fs @@ -1,4 +1,4 @@ -[] +[] module Fake.Logger open System @@ -34,37 +34,37 @@ let private configureConsoleLogger (logconfig : LoggerConfiguration) = let private create (logconfig : LoggerConfiguration) = logconfig.CreateLogger() -[] +[] let initLogAsConsole() = log <- LoggerConfiguration() |> configureFileLogger |> configureConsoleLogger |> create -[] +[] let initLogAsService eventLogWriter = writeToEventLog <- eventLogWriter log <- LoggerConfiguration() |> configureFileLogger |> create -[] +[] let debug fmt = Printf.kprintf log.Debug fmt -[] +[] let info fmt = Printf.kprintf log.Information fmt -[] +[] let warn fmt = Printf.kprintf log.Warning fmt -[] +[] let error fmt = let log str = log.Error(str) writeToEventLog str EventLogEntryType.Error Printf.kprintf log fmt -[] +[] let errorEx (ex : Exception) fmt = let log str = log.Error(ex, str) diff --git a/src/legacy/Fake.Deploy/NancyBootStrapper.fs b/src/legacy/Fake.Deploy/NancyBootStrapper.fs index 0225860dc02..2dac790dc0e 100644 --- a/src/legacy/Fake.Deploy/NancyBootStrapper.fs +++ b/src/legacy/Fake.Deploy/NancyBootStrapper.fs @@ -12,7 +12,7 @@ open Fake.Deploy.Auth open Fake.DeployAgentModule open Fake.SshRsaModule -[] +[] type NancyBootStrapper() = inherit DefaultNancyBootstrapper() let dummyUser = AuthenticatedUser("None", []) :> IUserIdentity @@ -33,7 +33,7 @@ type NancyBootStrapper() = | None -> null | Some u -> AuthenticatedUser(u.UserName, u.Claims) :> IUserIdentity) - [] + [] override this.ApplicationStartup(container, pipelines) = StaticConfiguration.EnableRequestTracing <- true StaticConfiguration.DisableErrorTraces <- false @@ -42,7 +42,7 @@ type NancyBootStrapper() = StatelessAuthentication.Enable(pipelines, statelessAuthConfig userMapper) base.ApplicationStartup(container, pipelines) - [] + [] override this.ConfigureApplicationContainer container = base.ConfigureApplicationContainer container container.Register(typedefof, typedefof) |> ignore diff --git a/src/legacy/Fake.Deploy/Program.fs b/src/legacy/Fake.Deploy/Program.fs index 1ee7093185e..e9488ae329b 100644 --- a/src/legacy/Fake.Deploy/Program.fs +++ b/src/legacy/Fake.Deploy/Program.fs @@ -2,7 +2,7 @@ open DeploymentHelper open HttpListenerHelper -[] +[] type DeployCommand = { Name : string; Parameters : string list @@ -10,13 +10,13 @@ type DeployCommand = { Function: string array -> unit } -[] +[] module Main = - [] + [] let registeredCommands = System.Collections.Generic.Dictionary<_,_>() - [] + [] let register command = registeredCommands.Add("/" + command.Name.ToLower(), command) - [] + [] let printUsage() = printfn "---- Usage -----" @@ -25,7 +25,7 @@ module Main = |> Seq.iter (printfn "%s\r\n") printfn "Otherwise the service is just started as a command line process" - [] + [] let listen args = use srv = new Services.FakeDeployService() srv.Start(args) @@ -61,7 +61,7 @@ module Main = Function = listen } |> register - [] + [] let traceDeploymentResult server fileName = function | FakeDeployAgentHelper.Success _ -> tracefn "Deployment of %s to %s successful" fileName server | FakeDeployAgentHelper.Failure exn -> traceError <| sprintf "Deployment of %s to %s failed\r\n%s" fileName server (FakeDeployAgentHelper.buildExceptionString exn) diff --git a/src/legacy/Fake.Deploy/Services.fs b/src/legacy/Fake.Deploy/Services.fs index 850ae7a4530..e357233e392 100644 --- a/src/legacy/Fake.Deploy/Services.fs +++ b/src/legacy/Fake.Deploy/Services.fs @@ -1,14 +1,14 @@ -[] +[] module Fake.Services open Fake open System open System.ServiceProcess -[] +[] let ServiceName = "Fake Deploy Agent" -[] +[] type FakeDeployService() as self = inherit ServiceBase() let mutable nancyHost = null @@ -23,7 +23,7 @@ type FakeDeployService() as self = else Logger.initLogAsService (fun s e -> self.EventLog.WriteEntry(s, e)) - [] + [] override x.OnStart args = let serverName = if args <> null && args.Length > 1 then args.[1] @@ -60,21 +60,21 @@ type FakeDeployService() as self = | ex -> Logger.errorEx ex "Failed to start!" reraise() - [] + [] override x.OnStop() = Logger.info "Stopping..." nancyHost.Stop() - [] + [] member x.Start(args) = Logger.info "Starting..." if Environment.UserInteractive then x.OnStart args else ServiceBase.Run x - [] + [] member x.Stop() = x.OnStop() -[] +[] let getFakeAgentService() = ServiceController.GetServices() |> Array.find (fun (x : ServiceController) -> x.ServiceName = "Fake Deploy Agent") diff --git a/src/legacy/Fake.Deploy/UserMapper.fs b/src/legacy/Fake.Deploy/UserMapper.fs index 102268ae9d1..a187e251d98 100644 --- a/src/legacy/Fake.Deploy/UserMapper.fs +++ b/src/legacy/Fake.Deploy/UserMapper.fs @@ -4,12 +4,12 @@ open System open System.Collections.Concurrent open Nancy.Security -[] +[] type UserMap = { User : IUserIdentity ValidTo : DateTime } -[] +[] type UserMapper(createGuid : unit -> Guid) = let users = ConcurrentDictionary() let expires() = DateTime.Now.AddMinutes(10.) @@ -18,7 +18,7 @@ type UserMapper(createGuid : unit -> Guid) = let stale = users |> Seq.filter (fun r -> r.Value.ValidTo <= DateTime.Now) stale |> Seq.iter (fun s -> users.TryRemove(s.Key) |> ignore) - [] + [] member this.GetUser token = removeStale() match users.TryGetValue token with @@ -26,17 +26,17 @@ type UserMapper(createGuid : unit -> Guid) = | _, u -> users.TryUpdate(token, { u with ValidTo = expires() }, u) |> ignore Some u.User - [] + [] member this.RemoveByToken token = users.TryRemove(token) |> ignore - [] + [] member this.RemoveByUser(user : IUserIdentity) = if user <> null then match users |> Seq.tryFind (fun x -> x.Value.User.UserName = user.UserName) with | None -> () | Some u -> this.RemoveByToken u.Key - [] + [] member this.AddUser user = let id = createGuid() users.TryAdd(id, diff --git a/src/legacy/Fake.Experimental/ComputationExpressions.fs b/src/legacy/Fake.Experimental/ComputationExpressions.fs index 0b96b85f751..99bcff90756 100644 --- a/src/legacy/Fake.Experimental/ComputationExpressions.fs +++ b/src/legacy/Fake.Experimental/ComputationExpressions.fs @@ -1,17 +1,17 @@ [] -[] +[] module Fake.ComputationExpressions -[] +[] type TargetBuilder (name) = - [] + [] member x.Zero () = () - [] + [] member x.Delay f = f - [] + [] member x.Run f = Target name f - [] + [] member x.While (guard, body) : unit = if not (guard()) then x.Zero() @@ -19,13 +19,13 @@ type TargetBuilder (name) = body() x.While (guard, body) - [] + [] member x.TryWith (body, handler) = try body() with e -> handler e - [] + [] member x.TryFinally(body, compensation) = try body() finally compensation() - [] + [] member x.Using (disposable: #System.IDisposable, body) = let body' = fun () -> body disposable x.TryFinally(body', fun () -> @@ -33,37 +33,37 @@ type TargetBuilder (name) = | null -> () | disp -> disp.Dispose()) - [] + [] member x.For(sequence: seq<_>, body) = x.Using(sequence.GetEnumerator(), fun enum -> x.While(enum.MoveNext, x.Delay(fun () -> body enum.Current))) -[] +[] let Target name = TargetBuilder(name) -[] +[] type FileSetBuilder() = - [] + [] member x.Delay f = f - [] + [] member x.Run f = f() - [] + [] member x.Yield (()) = { Include "" with Includes = [] } - [] + [] [] member x.Add (fs, pattern: string) = fs ++ pattern - [] + [] [] member x.AddMany (fs, patterns: string list) = { fs with Includes = fs.Includes @ patterns } - [] + [] [] member x.Exclude (fs: FileIncludes, pattern: string) = fs -- pattern - [] + [] [] member x.ExcludeMany (fs: FileIncludes, patterns: string list) = { fs with Excludes = fs.Excludes @ patterns } -[] +[] let files = FileSetBuilder() diff --git a/src/legacy/Fake.FluentMigrator/FluentMigratorHelper.fs b/src/legacy/Fake.FluentMigrator/FluentMigratorHelper.fs index 18e5a7830a8..30fe74b5f26 100644 --- a/src/legacy/Fake.FluentMigrator/FluentMigratorHelper.fs +++ b/src/legacy/Fake.FluentMigrator/FluentMigratorHelper.fs @@ -1,5 +1,5 @@ /// Contains functions to run FluentMigrator -[] +[] module Fake.FluentMigratorHelper open System @@ -33,7 +33,7 @@ type internal FakeAnnouncer() = log message /// MS SQL Server driver version -[] +[] type SqlServerVersion = | Default | V2000 @@ -44,14 +44,14 @@ type SqlServerVersion = | CE /// Oracle database driver version -[] +[] type OracleVersion = | Default | Managed | DotConnect /// Fluent Migrator SQL syntax provider -[] +[] type DatabaseProvider = | SqlServer of version: SqlServerVersion | Oracle of version: OracleVersion @@ -64,7 +64,7 @@ type DatabaseProvider = | SQLite /// Database connection configuration -[] +[] type DatabaseConnection = ///Explicit connection string | ConnectionString of connectionString: string * provider: DatabaseProvider @@ -72,7 +72,7 @@ type DatabaseConnection = | ConnectionStringFromConfig of name: string * configPath: string * provider: DatabaseProvider /// Fluent Migrator execution mode -[] +[] type MigrationRunningMode = /// Execute migrations on the target database | Execute of connection: DatabaseConnection @@ -84,7 +84,7 @@ type MigrationRunningMode = | Script of startVersion: int64 * outputFileName: string * provider: DatabaseProvider /// Database operation to execute -[] +[] type DatabaseTask = | MigrateUp of mode: MigrationRunningMode * version: Option | MigrateDown of mode: MigrationRunningMode * version: int64 @@ -92,7 +92,7 @@ type DatabaseTask = | ListAppliedMigrations of connection: DatabaseConnection /// Fluent Migrator options -[] +[] type MigrationOptions = { Namespace: Option; Profile: string; @@ -106,7 +106,7 @@ type MigrationOptions = { } /// Default migration options -[] +[] let DefaultMigrationOptions = { Namespace = None; Profile = null; @@ -259,7 +259,7 @@ let private toRunnerContext task assemblies options = /// - `task` - Database task to execute /// - `assemblies` - Assembly files which contain migrations /// - `options` - Migration options which are passed to FluentMigrator -[] +[] let ExecuteDatabaseTask task (assemblies: seq) options = let (context, writer) = toRunnerContext task assemblies options try @@ -274,7 +274,7 @@ let ExecuteDatabaseTask task (assemblies: seq) options = /// - `connection` - Database connection /// - `assemblies` - Assembly files which contain migrations /// - `options` - Migration options which are passed to FluentMigrator -[] +[] let MigrateUp version connection assemblies options = let task = MigrateUp(Execute(connection), Some(version)) ExecuteDatabaseTask task assemblies options @@ -284,7 +284,7 @@ let MigrateUp version connection assemblies options = /// - `connection` - Database connection /// - `assemblies` - Assembly files which contain migrations /// - `options` - Migration options which are passed to FluentMigrator -[] +[] let MigrateToLatest connection assemblies options = let task = DatabaseTask.MigrateUp(Execute(connection), None) ExecuteDatabaseTask task assemblies options @@ -295,7 +295,7 @@ let MigrateToLatest connection assemblies options = /// - `connection` - Database connection /// - `assemblies` - Assembly files which contain migrations /// - `options` - Migration options which are passed to FluentMigrator -[] +[] let MigrateDown version connection assemblies options = let task = MigrateDown(Execute(connection), version) ExecuteDatabaseTask task assemblies options @@ -306,7 +306,7 @@ let MigrateDown version connection assemblies options = /// - `connection` - Database connection /// - `assemblies` - Assembly files which contain migrations /// - `options` - Migration options which are passed to FluentMigrator -[] +[] let Rollback steps connection assemblies options = let task = Rollback(Execute(connection), steps) ExecuteDatabaseTask task assemblies options @@ -315,14 +315,14 @@ let Rollback steps connection assemblies options = /// - `connection` - Database connection /// - `assemblies` - Assembly files which contain migrations /// - `options` - Migration options which are passed to FluentMigrator -[] +[] let RollbackLatest connection assemblies options = Rollback 1 connection assemblies options /// Lists all migrations which were applied to the database /// - `connection` - Database connection /// - `assemblies` - Assembly files which contain migrations -[] +[] let ListAppliedMigrations connection assemblies = let task = ListAppliedMigrations(connection) ExecuteDatabaseTask task assemblies DefaultMigrationOptions diff --git a/src/legacy/Fake.Gallio/GallioHelper.fs b/src/legacy/Fake.Gallio/GallioHelper.fs index 71e2c1bb024..30c41f9275e 100644 --- a/src/legacy/Fake.Gallio/GallioHelper.fs +++ b/src/legacy/Fake.Gallio/GallioHelper.fs @@ -1,4 +1,4 @@ -[] +[] module Fake.Gallio // this module is largely based on Gallio's NAnt task implementation @@ -16,12 +16,12 @@ open Gallio.Common.Reflection open Gallio.Model open Gallio.Model.Filters -[] +[] type ReportArchiveMode = Normal | Zip -[] +[] type Verbosity = Quiet | Normal | Verbose | Debug -[] +[] type GallioParams = /// Sets whether to load the tests but not run them. { DoNotRun: bool @@ -83,7 +83,7 @@ type GallioParams = /// Default Gallio parameters -[] +[] let GallioDefaults = { DoNotRun = false EchoResults = true @@ -208,7 +208,7 @@ let private createLauncher param = /// /// Function that modifies the default parameters /// List of test assemblies -[] +[] let Run (setParam: GallioParams -> GallioParams) assemblies = let param = setParam GallioDefaults let launcher = createLauncher param diff --git a/src/legacy/Fake.IIS/IISExpress.fs b/src/legacy/Fake.IIS/IISExpress.fs index cf5f1eef014..7c21fee0c74 100644 --- a/src/legacy/Fake.IIS/IISExpress.fs +++ b/src/legacy/Fake.IIS/IISExpress.fs @@ -1,5 +1,5 @@ /// Contains tasks to host webprojects in IIS Express. -[] +[] module Fake.IISExpress open System.Diagnostics @@ -8,12 +8,12 @@ open System.IO open System.Xml.Linq /// Options for using IISExpress -[] +[] type IISExpressOptions = { ToolPath : string } /// IISExpress default parameters - tries to locate the iisexpress.exe -[] +[] let IISExpressDefaults = { ToolPath = let root = @@ -24,7 +24,7 @@ let IISExpressDefaults = Path.Combine(root, "IIS Express", "iisexpress.exe") } /// Create a IISExpress config file from a given template -[] +[] let createConfigFile (name, siteId : int, templateFileName, path, hostName, port : int) = let xname s = XName.Get(s) let uniqueConfigFile = Path.Combine(Path.GetTempPath(), "iisexpress-" + Guid.NewGuid().ToString() + ".config") @@ -66,7 +66,7 @@ let createConfigFile (name, siteId : int, templateFileName, path, hostName, port /// ## Sample /// /// HostWebsite (fun p -> { p with ToolPath = "iisexpress.exe" }) "configfile.config" 1 -[] +[] let HostWebsite setParams configFileName siteId = let parameters = setParams IISExpressDefaults @@ -81,9 +81,9 @@ let HostWebsite setParams configFileName siteId = proc /// Opens the given url in the browser -[] +[] let OpenUrlInBrowser url = Process.Start(url:string) |> ignore /// Opens the given website in the browser -[] +[] let OpenWebsiteInBrowser hostName port = sprintf "http://%s:%d/" hostName port |> OpenUrlInBrowser diff --git a/src/legacy/Fake.IIS/IISHelper.fs b/src/legacy/Fake.IIS/IISHelper.fs index 8fbb89f9b06..4c3d213e5c8 100644 --- a/src/legacy/Fake.IIS/IISHelper.fs +++ b/src/legacy/Fake.IIS/IISHelper.fs @@ -1,5 +1,5 @@ [] -[] +[] module Fake.IISHelper open Microsoft.Web.Administration @@ -17,7 +17,7 @@ let private doWithManager (f : ServerManager->unit) (mgr : ServerManager option) f m m.CommitChanges() -[] +[] let SetPhysicalPath (virtualPath : string) physicalPath (siteName : string) (manager : ServerManager option) = doWithManager (fun m -> let site = m.Sites.[siteName] @@ -26,7 +26,7 @@ let SetPhysicalPath (virtualPath : string) physicalPath (siteName : string) (man virtDir.PhysicalPath <- physicalPath ) manager -[] +[] let RemoveBindingFromSite bindingInformation bindingProtocol (siteName : string) (manager : ServerManager option) = doWithManager (fun m -> let site = m.Sites.[siteName] @@ -35,7 +35,7 @@ let RemoveBindingFromSite bindingInformation bindingProtocol (siteName : string) | None -> () ) manager -[] +[] let AddBindingToSite (bindingInformation : string) (bindingProtocol : string) (siteName : string) (manager : ServerManager option) = doWithManager (fun m -> let site = m.Sites.[siteName] @@ -44,53 +44,53 @@ let AddBindingToSite (bindingInformation : string) (bindingProtocol : string) ( | true -> () ) manager -[] +[] let commit (mgr : ServerManager) = mgr.CommitChanges() -[] +[] type ISiteConfig = interface - [] + [] abstract name : string - [] + [] abstract binding : string - [] + [] abstract physicalPath : string - [] + [] abstract appPool : string - [] + [] abstract id : int64 option - [] + [] abstract protocol : string end -[] +[] type SiteConfig(name : string, binding:string, physicalPath:string, appPool:string, ?id: int64, ?protocol:string) = class interface ISiteConfig with - [] + [] member this.name = name - [] + [] member this.binding = binding - [] + [] member this.physicalPath = physicalPath - [] + [] member this.appPool = appPool - [] + [] member this.id = id - [] + [] member this.protocol = defaultArg protocol "http" end -[] +[] type ApplicationPoolConfig(name : string, ?runtime:string, ?allow32on64:bool, ?identity : ProcessModelIdentityType, ?credentials: string * string) = class - [] + [] member this.name = name - [] + [] member this.runtime = defaultArg runtime "v4.0" - [] + [] member this.allow32on64 = defaultArg allow32on64 false - [] + [] member this.identity = defaultArg identity ProcessModelIdentityType.ApplicationPoolIdentity - [] + [] member this.credentials = defaultArg credentials ("","") end @@ -111,7 +111,7 @@ let private MergeSiteProperties(site:Site)(config:ISiteConfig) = | None -> () site -[] +[] let Site (config:ISiteConfig) (mgr : ServerManager) = let mutable site = mgr.Sites.[config.name] match (site) with @@ -121,7 +121,7 @@ let Site (config:ISiteConfig) (mgr : ServerManager) = AddBindingToSite config.binding config.protocol config.name (Some mgr) MergeSiteProperties site config -[] +[] let ApplicationPool (config: ApplicationPoolConfig) (mgr : ServerManager) = let appPool = mgr.ApplicationPools.[config.name] match (appPool) with @@ -131,14 +131,14 @@ let ApplicationPool (config: ApplicationPoolConfig) (mgr : ServerManager) = | _ -> MergeAppPoolProperties appPool config -[] +[] let Application (virtualPath : string) (physicalPath : string) (site : Site) (mgr : ServerManager) = let app = site.Applications.[virtualPath] match (app) with | null -> site.Applications.Add(virtualPath, physicalPath) | _ -> app.VirtualDirectories.[0].PhysicalPath <- physicalPath; app -[] +[] let IIS (site : ServerManager -> Site) (appPool : ServerManager -> ApplicationPool) (app : (Site -> ServerManager -> Application) option) = @@ -150,7 +150,7 @@ let IIS (site : ServerManager -> Site) commit mgr ) -[] +[] let AppCmd (command : string) = System.Console.WriteLine("Applying {0} via appcmd.exe", command) if 0 <> ExecProcess (fun info -> @@ -159,11 +159,11 @@ let AppCmd (command : string) = then failwithf "AppCmd.exe %s failed." command () -[] +[] let UnlockSection (configPath : string) = requiresAdmin (fun _ -> AppCmd (sprintf "unlock config -section:%s" configPath)) -[] +[] let deleteSite (name : string) = use mgr = new ServerManager() let site = mgr.Sites.[name] @@ -171,7 +171,7 @@ let deleteSite (name : string) = site.Delete() commit mgr -[] +[] let deleteApp (name : string) (site : Site) = use mgr = new ServerManager() let app = site.Applications.[name] @@ -179,7 +179,7 @@ let deleteApp (name : string) (site : Site) = app.Delete() commit mgr -[] +[] let deleteApplicationPool (name : string) = use mgr = new ServerManager() let appPool = mgr.ApplicationPools.[name] diff --git a/src/legacy/Fake.SQL/SQLServer.fs b/src/legacy/Fake.SQL/SQLServer.fs index 78c38147afc..a50b3facb76 100644 --- a/src/legacy/Fake.SQL/SQLServer.fs +++ b/src/legacy/Fake.SQL/SQLServer.fs @@ -1,5 +1,5 @@ [] -[] +[] module Fake.SQL.SqlServer open Fake @@ -9,13 +9,13 @@ open Microsoft.SqlServer.Management.Smo open Microsoft.SqlServer.Management.Common open System.IO -[] +[] type ServerInfo ={ Server: Server ConnBuilder: SqlConnectionStringBuilder} /// Gets a connection to the SQL server and an instance to the ConnectionStringBuilder -[] +[] let getServerInfo connectionString = let connbuilder = new SqlConnectionStringBuilder(connectionString) let conn = new ServerConnection() @@ -34,26 +34,26 @@ let getServerInfo connectionString = ConnBuilder = connbuilder} /// gets the DatabaseNames from the server -[] +[] let getDatabasesFromServer (serverInfo:ServerInfo) = seq {for db in serverInfo.Server.Databases -> db} /// gets the DatabaseNames from the server -[] +[] let getDatabaseNamesFromServer (serverInfo:ServerInfo) = getDatabasesFromServer serverInfo |> Seq.map (fun db -> db.Name) /// Gets the initial catalog name -[] +[] let getDBName serverInfo = serverInfo.ConnBuilder.InitialCatalog /// Gets the name of the server -[] +[] let getServerName serverInfo = serverInfo.ConnBuilder.DataSource /// Checks whether the given Database exists on the server -[] +[] let existDBOnServer serverInfo dbName = let names = getDatabaseNamesFromServer serverInfo let searched = getDBName serverInfo @@ -65,17 +65,17 @@ let existDBOnServer serverInfo dbName = |> Seq.exists ((=) dbName) /// Gets the initial catalog as database instance -[] +[] let getDatabase serverInfo = new Database(serverInfo.Server, getDBName serverInfo) /// Checks whether the given InitialCatalog exists on the server -[] +[] let intitialCatalogExistsOnServer serverInfo = getDBName serverInfo |> existDBOnServer serverInfo /// Drops the given InitialCatalog from the server (if it exists) -[] +[] let DropDb serverInfo = if intitialCatalogExistsOnServer serverInfo then logfn "Dropping database %s on server %s" (getDBName serverInfo) (getServerName serverInfo) @@ -84,7 +84,7 @@ let DropDb serverInfo = serverInfo /// Kills all processes with the given server info -[] +[] let KillAllProcesses serverInfo = let dbName = getDBName serverInfo logfn "Killing all processes from database %s on server %s." dbName (getServerName serverInfo) @@ -92,7 +92,7 @@ let KillAllProcesses serverInfo = serverInfo /// Detaches a database -[] +[] let Detach serverInfo = serverInfo |> KillAllProcesses @@ -103,7 +103,7 @@ let Detach serverInfo = si /// Attach a database -[] +[] let Attach serverInfo (attachOptions:AttachOptions) files = let sc = new Collections.Specialized.StringCollection () files |> Seq.iter (fun file -> @@ -117,7 +117,7 @@ let Attach serverInfo (attachOptions:AttachOptions) files = serverInfo /// Creates a new db on the given server -[] +[] let CreateDb serverInfo = logfn "Creating database %s on server %s" (getDBName serverInfo) (getServerName serverInfo) (getDatabase serverInfo).Create() @@ -126,7 +126,7 @@ let CreateDb serverInfo = /// Runs a sql script on the server. /// Used as a connection to the database. /// The script which will be run. -[] +[] let runScript serverInfo sqlFile = logfn "Executing script %s" sqlFile sqlFile @@ -134,7 +134,7 @@ let runScript serverInfo sqlFile = |> (getDatabase serverInfo).ExecuteNonQuery /// Closes the connection to the server -[] +[] let Disconnect serverInfo = logfn "Disconnecting from server %s." (getServerName serverInfo) if serverInfo.Server = null then @@ -152,7 +152,7 @@ let internal replaceDatabaseFiles connectionString attachOptions copyF = |> Disconnect /// Replaces the database files -[] +[] let ReplaceDatabaseFiles connectionString targetDir files attachOptions = replaceDatabaseFiles connectionString attachOptions (fun _ -> @@ -169,14 +169,14 @@ let ReplaceDatabaseFiles connectionString targetDir files attachOptions = /// The file cache. If the files in the cache are not up to date, they will be refreshed. /// The original database files. /// AttachOptions for Sql server. -[] +[] let ReplaceDatabaseFilesWithCache connectionString targetDir cacheDir files attachOptions = replaceDatabaseFiles connectionString attachOptions (fun _ -> CopyCached targetDir cacheDir files) /// Drops and creates the database (dropped if db exists. created nonetheless) /// Used to open the connection to the database. -[] +[] let DropAndCreateDatabase connectionString = connectionString |> getServerInfo @@ -187,7 +187,7 @@ let DropAndCreateDatabase connectionString = /// Runs the given sql scripts on the server. /// Used to open the connection to the database. /// The scripts which will be run. -[] +[] let RunScripts connectionString scripts = let serverInfo = getServerInfo connectionString scripts |> Seq.iter (runScript serverInfo) @@ -196,7 +196,7 @@ let RunScripts connectionString scripts = /// Runs all sql scripts from the given directory on the server. /// Used to open the connection to the database. /// All *.sql files inside this directory and all subdirectories will be run. -[] +[] let RunScriptsFromDirectory connectionString scriptDirectory = Directory.GetFiles(scriptDirectory, "*.sql", SearchOption.AllDirectories) |> RunScripts connectionString diff --git a/src/legacy/Fake.SQL/SQLServerHelper.fs b/src/legacy/Fake.SQL/SQLServerHelper.fs index bfbbefd2be5..5b2cd33ecbd 100644 --- a/src/legacy/Fake.SQL/SQLServerHelper.fs +++ b/src/legacy/Fake.SQL/SQLServerHelper.fs @@ -6,16 +6,16 @@ open Microsoft.SqlServer.Management.Smo open Microsoft.SqlServer.Management.Common open System.IO -[] +[] type ServerInfo = { Server: Server; ConnBuilder: SqlConnectionStringBuilder} [] -[] +[] module SqlServerSmoHelper = /// Gets a connection to the SQL server and an instance to the ConnectionStringBuilder - [] + [] let getServerInfo connectionString = let connbuilder = new SqlConnectionStringBuilder(connectionString) let conn = new ServerConnection() @@ -34,37 +34,37 @@ module SqlServerSmoHelper = {Server = server; ConnBuilder = connbuilder} /// gets the DatabaseNames from the server - [] + [] let getDatabaseNamesFromServer (serverInfo:ServerInfo) = seq {for db in serverInfo.Server.Databases -> db.Name} /// Checks wether the given Database exists on the server - [] + [] let existDBOnServer serverInfo dbName = serverInfo |> getDatabaseNamesFromServer |> Seq.exists (fun d -> d = dbName) /// Gets the name of the sercer - [] + [] let getServerName serverInfo = serverInfo.ConnBuilder.DataSource /// Gets the initial catalog name - [] + [] let getDBName serverInfo = serverInfo.ConnBuilder.InitialCatalog /// Gets the initial catalog as database instance - [] + [] let getDatabase serverInfo = new Database(serverInfo.Server,getDBName serverInfo ) /// Checks wether the given InitialCatalog exists on the server - [] + [] let intitialCatalogExistsOnServer serverInfo = getDBName serverInfo |> existDBOnServer serverInfo /// Drops the given InitialCatalog from the server (if it exists) - [] + [] let DropDb serverInfo = if intitialCatalogExistsOnServer serverInfo then log <| sprintf "Dropping database %s on server %s" (getDBName serverInfo) (getServerName serverInfo) @@ -73,14 +73,14 @@ module SqlServerSmoHelper = serverInfo /// Drops the given InitialCatalog from the server (if it exists) - [] + [] let CreateDb serverInfo = log <| sprintf "Creating database %s on server %s" (getDBName serverInfo) (getServerName serverInfo) (getDatabase serverInfo).Create() serverInfo /// Runs a sql script on the server - [] + [] let runScript serverInfo sqlFile = log <| sprintf "Executing script %s" sqlFile sqlFile @@ -88,12 +88,12 @@ module SqlServerSmoHelper = |> (getDatabase serverInfo).ExecuteNonQuery /// Closes the connection to the server - [] + [] let Disconnect serverInfo = serverInfo.Server.ConnectionContext.Disconnect() /// Drops and creates the database (dropped if db exists. created nonetheless) - [] + [] let DropAndCreateDatabase connectionString = connectionString |> getServerInfo @@ -102,14 +102,14 @@ module SqlServerSmoHelper = |> Disconnect /// Runs the given sql scripts on the server - [] + [] let RunScripts connectionString scripts = let serverInfo = getServerInfo connectionString scripts |> Seq.iter (runScript serverInfo) Disconnect serverInfo /// Runs all sql scripts from the given directory on the server - [] + [] let RunScriptsFromDirectory connectionString scriptDirectory = let scripts = System.IO.Directory.GetFiles(scriptDirectory, "*.sql") RunScripts connectionString scripts diff --git a/src/legacy/FakeLib/AndroidPublisher.fs b/src/legacy/FakeLib/AndroidPublisher.fs index 66b68f82ddb..e94a8ff5b31 100644 --- a/src/legacy/FakeLib/AndroidPublisher.fs +++ b/src/legacy/FakeLib/AndroidPublisher.fs @@ -10,7 +10,7 @@ I would like to use a JsonProvider to parse json but i don't know if it causes a problem with dependency "FSharp.Data.DesignTime.dll" So i used Newtonsoft.Json *) -[] +[] module Fake.AndroidPublisher open System @@ -27,7 +27,7 @@ open ICSharpCode.SharpZipLib.Zip open ICSharpCode.SharpZipLib.Core open System.Xml.Linq -[] +[] type AndroidPublishConfig = { Certificate: X509Certificate2; PackageName: string; @@ -36,19 +36,19 @@ type AndroidPublishConfig = { } [] -[] +[] type AndroidPublishParams = { Track: string; Config: AndroidPublishConfig; } -[] +[] let ProductionSettings = { Track = "production"; Config = { Certificate = null; PackageName = null; AccountId = null; Apk = null; } } -[] +[] let AlphaSettings = { ProductionSettings with Track = "alpha"; } -[] +[] let BetaSettings = { ProductionSettings with Track = "beta"; } -[] +[] let RolloutSettings = { ProductionSettings with Track = "rollout"; } type private ServiceCredentials = { @@ -95,7 +95,7 @@ type private AuthReply = { } [] -[] +[] type EditResourceModel = { [] Id: string; @@ -104,21 +104,21 @@ type EditResourceModel = { } [] -[] +[] type ApkVersion = { [] Code: int; } [] -[] +[] type AppEditListApksResult = { [] Apks: ApkVersion list } [] -[] +[] type TrackModel = { [] VersionCodes: int list; @@ -144,13 +144,13 @@ type private HttpClient() = member x.CreateRequest (address:Uri) = x.GetWebRequest (address) -[] +[] let mutable public AndroidPublisherScope = "https://www.googleapis.com/auth/androidpublisher" -[] +[] let mutable public TokenServerUrl = "https://www.googleapis.com/oauth2/v3/token" -[] +[] let mutable public AndroidPublisherBaseUrl = "https://www.googleapis.com/androidpublisher/v2/applications" -[] +[] let mutable public AndroidUploadApkBaseUrl = "https://www.googleapis.com/upload/androidpublisher/v2/applications" let private ServiceAccountHeader = {Algo = "RS256"; Type = "JWT"} @@ -158,7 +158,7 @@ let private ServiceAccountHeader = {Algo = "RS256"; Type = "JWT"} let private toJson = JsonConvert.SerializeObject let private fromJson<'t> v = JsonConvert.DeserializeObject<'t>(v) -[] +[] let PublishApk (param:AndroidPublishParams)= let getZipEntry (filepath, path) = diff --git a/src/legacy/FakeLib/Appcast.fs b/src/legacy/FakeLib/Appcast.fs index de621008780..4ed1fdc7a03 100644 --- a/src/legacy/FakeLib/Appcast.fs +++ b/src/legacy/FakeLib/Appcast.fs @@ -1,5 +1,5 @@ /// Contains code to configure FAKE for Appcast handling -[] +[] module Fake.Appcast open System.Xml open System.Xml.Linq @@ -17,7 +17,7 @@ let private XAttributeXName expandedName value = Linq.XAttribute(expandedName, v let private sparkle = XNamespace.Get("http://www.andymatuschak.org/xml-namespaces/sparkle") /// Mime type of the download file -[] +[] type MimeType = /// Octetstream use for exe or zip files | OctetStream @@ -25,7 +25,7 @@ type MimeType = | Custom of string /// Download details for the appcast -[] +[] type AppcastItem = { /// The name of the update title : string; @@ -49,7 +49,7 @@ type AppcastItem = { } /// Configuration data for the appcast -[] +[] type Appcast = { /// A titel, usually the app name title : string; @@ -107,7 +107,7 @@ type Appcast = { /// ] /// } |> writeAppcast "build/updates.xml" /// ) -[] +[] let writeAppcast (path : string) (cast : Appcast) = let toXml (cast : Appcast) = let mtToString mimetype = diff --git a/src/legacy/FakeLib/BitbucketPipelines.fs b/src/legacy/FakeLib/BitbucketPipelines.fs index 34afdd032b0..986bef424a1 100644 --- a/src/legacy/FakeLib/BitbucketPipelines.fs +++ b/src/legacy/FakeLib/BitbucketPipelines.fs @@ -1,35 +1,35 @@ /// Contains code to configure FAKE for Bitbucket Pipelines integration -[] +[] module Fake.BitbucketPipelines /// Bitbucket Pipelines environment variables as [described](https://confluence.atlassian.com/bitbucket/environment-variables-in-bitbucket-pipelines-794502608.html) -[] +[] type BitbucketPipelinesEnvironment = /// The commit hash of a commit that kicked off the build - [] + [] static member Commit = environVar "BITBUCKET_COMMIT" /// The branch on which the build was kicked off. This value is only available on branches. - [] + [] static member Branch = environVar "BITBUCKET_BRANCH" /// The tag of a commit that kicked off the build. This value is only available on tags. - [] + [] static member Tag = environVar "BITBUCKET_TAG" /// The URL-friendly version of a repository name. - [] + [] static member RepoSlug = environVar "BITBUCKET_REPO_SLUG" /// The name of the account in which the repository lives - [] + [] static member RepoOwner = environVar "BITBUCKET_REPO_OWNER" /// The absolute path of the directory that the repository is cloned into within the Docker container. - [] + [] static member CloneDir = environVar "BITBUCKET_CLONE_DIR" /// Default value is true. Gets set whenever a pipeline runs. - [] + [] static member CI = environVar "CI" diff --git a/src/legacy/FakeLib/Boot.fs b/src/legacy/FakeLib/Boot.fs index 2c3f8a5fd3e..866b73a5711 100644 --- a/src/legacy/FakeLib/Boot.fs +++ b/src/legacy/FakeLib/Boot.fs @@ -3,7 +3,7 @@ /// download dependencies with NuGet and do other preparatory work in /// the first stage, and have these dependencies available in the /// second stage. -[] +[] module Fake.Boot open System @@ -15,7 +15,7 @@ open System.Text open NuGet /// Specifies which version of the NuGet package to install. -[] +[] type NuGetVersion = /// Pick the latest available version. | Latest @@ -25,7 +25,7 @@ type NuGetVersion = | SemanticVersion of string /// Specifies NuGet package dependencies. -[] +[] type NuGetDependency = { /// The identifer of the package, such as "FAKE". @@ -43,7 +43,7 @@ type NuGetDependency = } /// Configures the boostrapping process. -[] +[] type Config = { /// Framework name for assembly resolution. @@ -82,13 +82,13 @@ type Config = } /// Stage of execution for a boot system. -[] +[] type Stage = | BuildStage | ConfigureStage /// Abstracts over command-line environment features. -[] +[] [] type CommandEnvironment() = abstract SendMessage : message: string -> unit @@ -105,7 +105,7 @@ type CommandEnvironment() = } /// Represents a command line handler. -[] +[] type CommandHandler = { Run : CommandEnvironment -> bool @@ -117,11 +117,11 @@ type CommandHandler = Environment.ExitCode <- 1 [] -[] +[] module private Implementation = [] - [] + [] type CustomHttpClient(uri, cred: option) = inherit HttpClient(uri) @@ -132,7 +132,7 @@ module private Implementation = | None -> () | Some c -> req.Credentials <- c - [] + [] let GetManager (config: Config) = let factory = PackageRepositoryFactory.Default let old = factory.HttpClientFactory @@ -141,7 +141,7 @@ module private Implementation = let repo = factory.CreateRepository(config.NuGetSourceUrl) PackageManager(repo, config.NuGetPackagesDirectory) - [] + [] let Install (mgr: PackageManager) (dep: NuGetDependency) : unit = match dep.Version with | Latest -> @@ -151,7 +151,7 @@ module private Implementation = | SemanticVersion v -> mgr.InstallPackage(dep.PackageId, SemanticVersion.Parse v) - [] + [] let TopologicalSort<'K,'T when 'K : equality> (getKey: 'T -> 'K) (getPreceding: 'T -> seq<'T>) @@ -166,7 +166,7 @@ module private Implementation = Seq.iter visit roots trace.ToArray() :> seq<_> - [] + [] let Memoize (f: 'A -> 'B) : ('A -> 'B) = let d = Dictionary() fun k -> @@ -177,7 +177,7 @@ module private Implementation = d.[k] <- v v - [] + [] let SortAssemblyFilesByReferenceOrder (paths: seq) : seq = let getDefn = Memoize (fun (path: string) -> @@ -197,7 +197,7 @@ module private Implementation = else Seq.empty TopologicalSort getFullName getPreceding paths - [] + [] let MostRecent (pkgs: seq) : seq = pkgs |> Seq.groupBy (fun pkg -> pkg.Id) @@ -205,7 +205,7 @@ module private Implementation = packages |> Seq.maxBy (fun pkg -> pkg.Version)) - [] + [] let CompleteAndSortPackages (config: Config) (mgr: PackageManager) @@ -222,7 +222,7 @@ module private Implementation = |> MostRecent TopologicalSort getKey getPreceding pkgs - [] + [] let IsRequiredPackage (config: Config) (pkg: IPackage) : bool = config.NuGetDependencies |> List.exists (fun dep -> @@ -233,11 +233,11 @@ module private Implementation = | LatestPreRelease -> true | SemanticVersion v -> SemanticVersion.Parse(v) = pkg.Version) - [] + [] let IsSupported (config: Config) (frameworks: seq) = VersionUtility.IsCompatible(config.FrameworkName, frameworks) - [] + [] let ComputeRefs (config: Config) (mgr: PackageManager) : seq = let assemblyRefs = HashSet() let pkgRefs = Queue() @@ -257,7 +257,7 @@ module private Implementation = |> Seq.iter pkgRefs.Enqueue) Seq.append assemblyRefs pkgRefs - [] + [] let GenerateBootScriptText (refs: seq) : string = let fakeDir = Path.GetDirectoryName(typeof.Assembly.Location) use w = new StringWriter() @@ -277,17 +277,17 @@ module private Implementation = writeRef r w.ToString() - [] + [] let UTF8 = UTF8Encoding(false) - [] + [] let MakeBootScriptFile (config: Config) (refs: seq) : unit = let dir = Path.GetDirectoryName(config.IncludesFile) if not (Directory.Exists dir) then Directory.CreateDirectory dir |> ignore File.WriteAllText(config.IncludesFile, GenerateBootScriptText refs, UTF8) - [] + [] type Command = | ConfigureAndRun | ConfigureOnly @@ -295,7 +295,7 @@ module private Implementation = | InitSingle | RunOnly - [] + [] let ParseCommand (args: seq) : option = match Seq.toList args with | [] -> Some RunOnly @@ -306,7 +306,7 @@ module private Implementation = | _ -> None /// Computes extra command-line arguments to enable bootstrapping FAKE scripts. - [] + [] let FsiArgs (env: CommandEnvironment) (stage: Stage) : list = let quote (s: string) : string = String.Format(@"""{0}""", s.Replace(@"""", @"\""")) @@ -320,18 +320,18 @@ module private Implementation = yield "FakeLib" ] - [] + [] let Fsi (env: CommandEnvironment) stage script = FSIHelper.executeFSIWithArgs env.CurrentDirectory script (FsiArgs env stage) [] /// Checks if the F# script file is a bootstrapping script. - [] + [] let IsBootScript (fullPath: string) : bool = File.ReadAllLines(fullPath) |> Array.exists (fun x -> x.StartsWith("#if BOOT")) - [] + [] let DoConfigureOnly (env: CommandEnvironment) = let bootScript = env.CurrentDirectory @@ "conf.fsx" let buildScript = env.CurrentDirectory @@ "build.fsx" @@ -343,7 +343,7 @@ module private Implementation = env.SendMessage("Could not find conf.fsx or boot-aware build.fsx") false - [] + [] let DoRunOnly (env: CommandEnvironment) = let buildScript = env.CurrentDirectory @@ "build.fsx" if File.Exists buildScript then @@ -352,11 +352,11 @@ module private Implementation = env.SendMessage("Could not find build.fsx") false - [] + [] let DoConfigureAndRun (env: CommandEnvironment) = DoConfigureOnly env && DoRunOnly env - [] + [] let DoInit (env: CommandEnvironment) = let bootScript = env.CurrentDirectory @@ "conf.fsx" let buildScript = env.CurrentDirectory @@ "build.fsx" @@ -386,7 +386,7 @@ module private Implementation = env.SendMessage("Generated conf.fsx and build.fsx") true - [] + [] let DoInitSingle (env: CommandEnvironment) = let buildScript = env.CurrentDirectory @@ "build.fsx" if File.Exists buildScript then @@ -414,7 +414,7 @@ module private Implementation = env.SendMessage("Generated a boot-aware build.fsx") true - [] + [] let DoHelp (env: CommandEnvironment) = use w = new StringWriter() w.WriteLine("FAKE boot module: bootstrapping builds. Commands: ") @@ -426,7 +426,7 @@ module private Implementation = env.SendMessage (w.ToString()) true - [] + [] let RunCommandLine (args: list) (env: CommandEnvironment) : bool = match ParseCommand args with | Some ConfigureAndRun -> DoConfigureAndRun env @@ -437,11 +437,11 @@ module private Implementation = | None -> DoHelp env /// Creates the CommandHandler from the -[] +[] let HandlerForArgs args = { Run = RunCommandLine args } /// Detects boot-specific commands. -[] +[] let ParseCommandLine (args: seq) : option = match Seq.toList args with | "boot" :: xs @@ -451,7 +451,7 @@ let ParseCommandLine (args: seq) : option = /// The main function intended to be executed in the BOOT phase of /// boostrapping scripts. -[] +[] let Prepare (config: Config) : unit = let mgr = GetManager config List.iter (Install mgr) config.NuGetDependencies diff --git a/src/legacy/FakeLib/BowerHelper.fs b/src/legacy/FakeLib/BowerHelper.fs index f3ebf36e415..9f16ad0d8f6 100644 --- a/src/legacy/FakeLib/BowerHelper.fs +++ b/src/legacy/FakeLib/BowerHelper.fs @@ -1,5 +1,5 @@ /// Contains function to run bower tasks -[] +[] module Fake.BowerHelper open Fake open System @@ -12,7 +12,7 @@ let private bowerFileName = | _ -> "./packages/Bower.js/tools/bower.cmd" /// Arguments for the Bower install command -[] +[] type InstallArgs = | Standard | Forced @@ -20,14 +20,14 @@ type InstallArgs = /// The list of support Bower commands. The `Custom` alternative /// can be used for other commands not in the list until they are /// implemented -[] +[] type BowerCommand = | Install of InstallArgs | Run of string | Custom of string /// The Bower parameter type -[] +[] [] type BowerParams = { Src: string @@ -37,7 +37,7 @@ type BowerParams = Timeout: TimeSpan } /// Bower default parameters -[] +[] let defaultBowerParams = { Src = "" BowerFilePath = bowerFileName @@ -54,7 +54,7 @@ let private parse = function | Run str -> sprintf "run %s" str | Custom str -> str -[] +[] let run bowerParams = let bowerPath = Path.GetFullPath(bowerParams.BowerFilePath) let arguments = bowerParams.Command |> parse @@ -88,6 +88,6 @@ let run bowerParams = /// WorkingDirectory = "./src/FAKESimple.Web/" /// }) /// ) -[] +[] let Bower setParams = defaultBowerParams |> setParams |> run diff --git a/src/legacy/FakeLib/CMake.fs b/src/legacy/FakeLib/CMake.fs index 54ba60231ab..e2346b6d66d 100644 --- a/src/legacy/FakeLib/CMake.fs +++ b/src/legacy/FakeLib/CMake.fs @@ -6,7 +6,7 @@ open System.Diagnostics open System.IO /// The possible variable value types for CMake variables. -[] +[] type CMakeValue = | CMakeBoolean of bool | CMakeString of string @@ -14,7 +14,7 @@ type CMakeValue = | CMakeDirPath of string /// A CMake variable. -[] +[] type CMakeVariable = { /// The name of the variable. /// It cannot contains spaces and special characters. @@ -26,7 +26,7 @@ type CMakeVariable = { /// The CMakeGenerate parameter type. [] -[] +[] type CMakeGenerateParams = { /// The location of the CMake executable. Automatically found if null or empty. ToolPath:string @@ -70,7 +70,7 @@ type CMakeGenerateParams = { /// The CMakeBuild parameter type. [] -[] +[] type CMakeBuildParams = { /// The location of the CMake executable. Automatically found if null or empty. ToolPath:string @@ -91,10 +91,10 @@ type CMakeBuildParams = { /// Contains tasks which allow to use CMake to build CMakeLists files. /// See `Samples/CMakeSupport` for usage examples. -[] +[] module CMake = /// The default option set given to CMakeGenerate. - [] + [] let CMakeGenerateDefaults = { ToolPath = "" SourceDirectory = currentDirectory @@ -112,7 +112,7 @@ module CMake = } /// The default option set given to CMakeBuild. - [] + [] let CMakeBuildDefaults = { ToolPath = "" BinaryDirectory = currentDirectory @@ "build" @@ -131,7 +131,7 @@ module CMake = /// ## Parameters /// - `exeName` - The name of the CMake executable (e.g. `cmake`, `ctest`, etc.) to find. /// The `.exe` suffix will be automatically appended on Windows. - [] + [] let FindExe exeName = let fullName = exeName + if isUnix then "" else ".exe" [ @@ -182,7 +182,7 @@ module CMake = /// Calls `cmake` to generate a project. /// ## Parameters /// - `setParams` - Function used to manipulate the default CMake parameters. See `CMakeGenerateParams`. - [] + [] let Generate setParams = let parameters = setParams CMakeGenerateDefaults // CMake expects an existing source directory. @@ -217,7 +217,7 @@ module CMake = /// Calls `cmake --build` to build a project. /// ## Parameters /// - `setParams` - Function used to manipulate the default CMake parameters. See `CMakeBuildParams`. - [] + [] let Build setParams = let parameters = setParams CMakeBuildDefaults let targetArgs = diff --git a/src/legacy/FakeLib/CSharpHelper.fs b/src/legacy/FakeLib/CSharpHelper.fs index 10666ad21a7..0ae5028bc10 100644 --- a/src/legacy/FakeLib/CSharpHelper.fs +++ b/src/legacy/FakeLib/CSharpHelper.fs @@ -1,41 +1,41 @@ namespace Test.FAKECore open System.Runtime.CompilerServices -[] +[] [] type public FSharpFuncUtil = [] - [] + [] static member ToFSharpFunc<'a> (func : System.Func<'a>) = fun () -> func.Invoke() [] - [] + [] static member ToFSharpFunc<'a,'b> (func : System.Func<'a,'b>) = fun x -> func.Invoke(x) [] - [] + [] static member ToFSharpFunc<'a,'b,'c> (func : System.Func<'a,'b,'c>) = fun x y -> func.Invoke(x,y) [] - [] + [] static member ToFSharpFunc<'a,'b,'c,'d> (func : System.Func<'a,'b,'c,'d>) = fun x y z -> func.Invoke(x,y,z) [] - [] + [] static member ToFSharpFunc<'a> (func : System.Action) = fun () -> func.Invoke() [] - [] + [] static member ToFSharpFunc<'a> (func : System.Action<'a>) = fun x -> func.Invoke(x) - [] + [] static member Create<'a,'b> (func : System.Func<'a,'b>) = FSharpFuncUtil.ToFSharpFunc func - [] + [] static member Create<'a,'b,'c> (func : System.Func<'a,'b,'c>) = FSharpFuncUtil.ToFSharpFunc func - [] + [] static member Create<'a,'b,'c,'d> (func : System.Func<'a,'b,'c,'d>) = FSharpFuncUtil.ToFSharpFunc func diff --git a/src/legacy/FakeLib/CacheHelper.fs b/src/legacy/FakeLib/CacheHelper.fs index 856c16e188e..f420ca30aea 100644 --- a/src/legacy/FakeLib/CacheHelper.fs +++ b/src/legacy/FakeLib/CacheHelper.fs @@ -1,13 +1,13 @@ [] /// Contains functions which allows to deal with a cache. -[] +[] module Fake.CacheHelper open System.Collections.Generic /// Looks for a key in the cache. /// If it is not found the newValueF function is executed and the result is stored in the cache. -[] +[] let lookup key newValueF (cache : IDictionary<_, _>) = match cache.TryGetValue key with | true, value -> value diff --git a/src/legacy/FakeLib/Checksum.fs b/src/legacy/FakeLib/Checksum.fs index c783d26940a..3c66ca64f05 100644 --- a/src/legacy/FakeLib/Checksum.fs +++ b/src/legacy/FakeLib/Checksum.fs @@ -1,7 +1,7 @@ namespace Fake open System -[] +[] type ChecksumHashAlgorithm = | MD5 @@ -11,11 +11,11 @@ type ChecksumHashAlgorithm = | SHA512 /// Allow to calculate checksum -[] +[] type Checksum = /// Calculate the hash of a file. Default hash algorithm used: SHA256 - [] + [] static member CalculateFileHash (filePath, ?hashAlgorithm) = let hashAlgorithm = defaultArg hashAlgorithm ChecksumHashAlgorithm.SHA256 @@ -29,7 +29,7 @@ type Checksum = BitConverter.ToString(hash).Replace("-", String.Empty) /// Check if the hash in parameter is the valid hash of the file - [] + [] static member CheckFileHash (filepath, hash, ?hashAlgorithm) = let hashAlgorithm = defaultArg hashAlgorithm ChecksumHashAlgorithm.SHA256 diff --git a/src/legacy/FakeLib/ConfigurationHelper.fs b/src/legacy/FakeLib/ConfigurationHelper.fs index b2935622437..0eff49deef1 100644 --- a/src/legacy/FakeLib/ConfigurationHelper.fs +++ b/src/legacy/FakeLib/ConfigurationHelper.fs @@ -1,5 +1,5 @@ [] -[] +[] /// Contains functions which allow to read and write config files. module Fake.ConfigurationHelper @@ -10,7 +10,7 @@ open System.Xml.Xsl /// Reads a config file into an XmlDocument. /// ## Parameters /// - `fileName` - The file name of the config file. -[] +[] let readConfig (fileName:string) = let xmlDocument = new XmlDocument() xmlDocument.Load fileName @@ -20,7 +20,7 @@ let readConfig (fileName:string) = /// ## Parameters /// - `fileName` - The file name of the config file. /// - `config` - The XmlDocument representing the config. -[] +[] let writeConfig (fileName:string) (config:XmlDocument) = config.Save fileName /// Reads a config file from the given file name, replaces an attribute using the given xPath and writes it back. @@ -29,7 +29,7 @@ let writeConfig (fileName:string) (config:XmlDocument) = config.Save fileName /// - `attribute` - The attribute name for which the value should be replaced. /// - `value` - The new attribute value. /// - `config` - The XElement representing the config. -[] +[] let updateConfig xpath attribute value (config:XmlDocument) = let node = config.SelectSingleNode xpath :?> XmlElement if node = null then @@ -44,7 +44,7 @@ let updateConfig xpath attribute value (config:XmlDocument) = /// - `xpath` - An XPath term which can be used to replace the attribute. /// - `attribute` - The attribute name for which the value should be replaced. /// - `value` - The new attribute value. -[] +[] let updateConfigSetting fileName xpath attribute value = readConfig fileName |> updateConfig xpath attribute value @@ -59,7 +59,7 @@ let updateConfigSetting fileName xpath attribute value = /// ## Sample /// /// updateAppSetting "DatabaseName" targetDatabase (navServicePath @@ "CustomSettings.config") -[] +[] let updateAppSetting key value fileName = updateConfigSetting fileName ("//appSettings/add[@key='" + key + "']") "value" value @@ -72,7 +72,7 @@ let updateAppSetting key value fileName = /// ## Sample /// /// updateApplicationSetting "DatabaseName" targetDatabase (navServicePath @@ "CustomSettings.config") -[] +[] let updateApplicationSetting (fileName : string) settingName value = let doc = new XmlDocument() let xpath = "/configuration/applicationSettings//setting[@name=\"" + settingName + "\"]/value" @@ -87,7 +87,7 @@ let updateApplicationSetting (fileName : string) settingName value = /// - `connectionStringKey` - The connection string key name for which the value should be replaced. /// - `value` - The new connection string value. /// - `fileName` - The file name of the config file. -[] +[] let updateConnectionString connectionStringKey value fileName = updateConfigSetting fileName ("//connectionStrings/add[@name='" + connectionStringKey + "']") "connectionString" value @@ -99,7 +99,7 @@ let updateConnectionString connectionStringKey value fileName = /// ## Sample /// /// applyXslOnConfig (navServicePath @@ DEV.xsl) (navServicePath @@ "CustomSettings.config") -[] +[] let applyXslOnConfig (xsl:string) fileName = let xslDoc = new XslCompiledTransform() xslDoc.Load xsl diff --git a/src/legacy/FakeLib/CscHelper.fs b/src/legacy/FakeLib/CscHelper.fs index 404336eb7d7..3d56f123281 100644 --- a/src/legacy/FakeLib/CscHelper.fs +++ b/src/legacy/FakeLib/CscHelper.fs @@ -1,11 +1,11 @@ /// Contains tasks to compile C# source files with CSC.EXE (C# Compiler). -[] +[] module Fake.CscHelper open System open System.IO /// Supported output types -[] +[] type CscTarget = | Exe | Winexe @@ -13,7 +13,7 @@ type CscTarget = | Module /// Supported platforms -[] +[] type CscPlatform = | X86 | Itanium @@ -22,7 +22,7 @@ type CscPlatform = | AnyCpu /// Compiler parameters -[] +[] type CscParams = { /// Specifies the output file name and path. Output : string @@ -40,7 +40,7 @@ type CscParams = OtherParams : string list } /// The default parameters to the compiler. - [] + [] static member Default = { Output = "" Target = Exe @@ -56,7 +56,7 @@ type CscParams = Debug = false OtherParams = [] } -[] +[] let cscExe toolPath (srcFiles : string list) (opts : string list) : int = let processResult = ExecProcessAndReturnMessages (fun p -> @@ -89,7 +89,7 @@ let cscExe toolPath (srcFiles : string list) (opts : string list) : int = /// { parameters with Output = ... /// Target = ... /// ... }) -[] +[] let csc (setParams : CscParams -> CscParams) (inputFiles : string list) : int = // Helper to quote a path with spaces in it, if not already quoted. See https://github.com/fsharp/FAKE/issues/992 let ensureTrimQuotedPath (path : string) = @@ -143,7 +143,7 @@ let csc (setParams : CscParams -> CscParams) (inputFiles : string list) : int = /// { parameters with Output = ... /// Target = ... /// ... }) -[] +[] let Csc (setParams : CscParams -> CscParams) (inputFiles : string list) : unit = let res = csc setParams inputFiles if res <> 0 then raise <| BuildException("Csc: compile failed with exit code", [ string res ]) diff --git a/src/legacy/FakeLib/DocuHelper.fs b/src/legacy/FakeLib/DocuHelper.fs index 39db7f98f44..040b812f3f3 100644 --- a/src/legacy/FakeLib/DocuHelper.fs +++ b/src/legacy/FakeLib/DocuHelper.fs @@ -1,5 +1,5 @@ [] -[] +[] /// Contains helper functions to run the XML documentation tool "docu". module Fake.DocuHelper @@ -7,7 +7,7 @@ open System /// The parameter type for docu. [] -[] +[] type DocuParams = { /// The tool path - FAKE tries to find docu.exe automatically in any sub folder. ToolPath : string @@ -19,7 +19,7 @@ type DocuParams = OutputPath : string } /// The Docu default params -[] +[] let DocuDefaults = let toolPath = findToolInSubPath "docu.exe" (currentDirectory @@ "tools" @@ "Fake") let fi = fileInfo toolPath @@ -33,7 +33,7 @@ let DocuDefaults = /// /// - `setParams` - Function used to manipulate the default docu parameters. /// - `assemblies` - Sequence of one or more assemblies containing the XML docs. -[] +[] let Docu setParams assemblies = let details = assemblies |> separated ", " use __ = traceStartTaskUsing "Docu" details diff --git a/src/legacy/FakeLib/DotCover.fs b/src/legacy/FakeLib/DotCover.fs index f7eb1ae07f6..d2cff314318 100644 --- a/src/legacy/FakeLib/DotCover.fs +++ b/src/legacy/FakeLib/DotCover.fs @@ -1,5 +1,5 @@ /// Contains a task which can be used to run [DotCover](http://www.jetbrains.com/dotcover/) on .NET assemblies. -[] +[] module Fake.DotCover open Fake @@ -9,7 +9,7 @@ open System.Text open Fake.Testing.XUnit2 open Fake.Testing.NUnit3 open Fake.MSTest -[] +[] type DotCoverReportType = | Html = 0 @@ -19,7 +19,7 @@ type DotCoverReportType = /// The dotCover parameter type for running coverage [] -[] +[] type DotCoverParams = { ToolPath: string WorkingDir: string @@ -33,7 +33,7 @@ type DotCoverParams = CustomParameters: string } /// The dotCover default parameters -[] +[] let DotCoverDefaults = { ToolPath = findToolInSubPath "dotCover.exe" (currentDirectory @@ "tools" @@ "DotCover") WorkingDir = "" @@ -47,7 +47,7 @@ let DotCoverDefaults = ErrorLevel = ErrorLevel.Error} [] -[] +[] type DotCoverMergeParams = { ToolPath: string WorkingDir: string @@ -56,7 +56,7 @@ type DotCoverMergeParams = TempDir: string CustomParameters: string } -[] +[] let DotCoverMergeDefaults = { ToolPath = findToolInSubPath "dotCover.exe" (currentDirectory @@ "tools" @@ "DotCover") WorkingDir = "" @@ -66,7 +66,7 @@ let DotCoverMergeDefaults = CustomParameters = "" } [] -[] +[] type DotCoverReportParams = { ToolPath: string WorkingDir: string @@ -75,7 +75,7 @@ type DotCoverReportParams = ReportType: DotCoverReportType CustomParameters: string } -[] +[] let DotCoverReportDefaults : DotCoverReportParams = { ToolPath = findToolInSubPath "dotCover.exe" (currentDirectory @@ "tools" @@ "DotCover") WorkingDir = "" @@ -84,7 +84,7 @@ let DotCoverReportDefaults : DotCoverReportParams = ReportType = DotCoverReportType.Xml CustomParameters = "" } -[] +[] let buildDotCoverArgs parameters = new StringBuilder() |> append "cover" @@ -97,7 +97,7 @@ let buildDotCoverArgs parameters = |> appendWithoutQuotes parameters.CustomParameters |> toText -[] +[] let buildDotCoverMergeArgs (parameters:DotCoverMergeParams) = new StringBuilder() |> append "merge" @@ -107,7 +107,7 @@ let buildDotCoverMergeArgs (parameters:DotCoverMergeParams) = |> appendWithoutQuotes parameters.CustomParameters |> toText -[] +[] let buildDotCoverReportArgs parameters = new StringBuilder() |> append "report" @@ -118,12 +118,12 @@ let buildDotCoverReportArgs parameters = |> toText -[] +[] let getWorkingDir workingDir = Seq.find isNotNullOrEmpty [workingDir; environVar("teamcity.build.workingDir"); "."] |> Path.GetFullPath -[] +[] let buildParamsAndExecute parameters buildArguments toolPath workingDir failBuild = let args = buildArguments parameters trace (toolPath + " " + args) @@ -146,7 +146,7 @@ let buildParamsAndExecute parameters buildArguments toolPath workingDir failBuil /// ## Parameters /// /// - `setParams` - Function used to overwrite the dotCover default parameters. -[] +[] let DotCover (setParams: DotCoverParams -> DotCoverParams) = let parameters = (DotCoverDefaults |> setParams) buildParamsAndExecute parameters buildDotCoverArgs parameters.ToolPath parameters.WorkingDir (parameters.ErrorLevel <> ErrorLevel.DontFailBuild) @@ -163,7 +163,7 @@ let DotCover (setParams: DotCoverParams -> DotCoverParams) = /// Source = [artifactsDir @@ "NUnitDotCoverSnapshot.dcvr" /// artifactsDir @@ "MSpecDotCoverSnapshot.dcvr"] /// Output = artifactsDir @@ "dotCoverSnapshot.dcvr" }) -[] +[] let DotCoverMerge (setParams: DotCoverMergeParams -> DotCoverMergeParams) = let parameters = (DotCoverMergeDefaults |> setParams) buildParamsAndExecute parameters buildDotCoverMergeArgs parameters.ToolPath parameters.WorkingDir false @@ -179,7 +179,7 @@ let DotCoverMerge (setParams: DotCoverMergeParams -> DotCoverMergeParams) = /// Source = artifactsDir @@ "dotCoverSnapshot.dcvr" /// Output = artifactsDir @@ "dotCoverReport.xml" /// ReportType = DotCoverReportType.Xml }) -[] +[] let DotCoverReport (setParams: DotCoverReportParams -> DotCoverReportParams) = let parameters = (DotCoverReportDefaults |> setParams) buildParamsAndExecute parameters buildDotCoverReportArgs parameters.ToolPath parameters.WorkingDir @@ -198,7 +198,7 @@ let DotCoverReport (setParams: DotCoverReportParams -> DotCoverReportParams) = /// Output = artifactsDir @@ "NUnitDotCoverSnapshot.dcvr" }) /// (fun nUnitOptions -> { nUnitOptions with /// DisableShadowCopy = true }) -[] +[] let DotCoverNUnit (setDotCoverParams: DotCoverParams -> DotCoverParams) (setNUnitParams: NUnitParams -> NUnitParams) (assemblies: string seq) = let assemblies = assemblies |> Seq.toArray let details = assemblies |> separated ", " @@ -227,7 +227,7 @@ let DotCoverNUnit (setDotCoverParams: DotCoverParams -> DotCoverParams) (setNUni /// Output = artifactsDir @@ "NUnitDotCoverSnapshot.dcvr" }) /// (fun nUnitOptions -> { nUnitOptions with /// DisableShadowCopy = true }) -[] +[] let DotCoverNUnit3 (setDotCoverParams: DotCoverParams -> DotCoverParams) (setNUnitParams: NUnit3Params -> NUnit3Params) (assemblies: string seq) = let assemblies = assemblies |> Seq.toArray let details = assemblies |> separated ", " @@ -254,7 +254,7 @@ let DotCoverNUnit3 (setDotCoverParams: DotCoverParams -> DotCoverParams) (setNUn /// |> DotCoverXUnit2 /// (fun -> dotCoverOptions ) /// (fun nUnitOptions -> nUnitOptions) -[] +[] let DotCoverXUnit2 (setDotCoverParams: DotCoverParams -> DotCoverParams) (setXUnit2Params: XUnit2Params -> XUnit2Params) (assemblies: string seq) = let assemblies = assemblies |> Seq.toArray let details = assemblies |> separated ", " @@ -300,7 +300,7 @@ let internal buildMSTestArgsForDotCover parameters assemblies = /// |> MSTest /// (fun -> dotCoverOptions ) /// (fun MSTestOptions -> MSTestOptions) -[] +[] let DotCoverMSTest (setDotCoverParams: DotCoverParams -> DotCoverParams) (setMSTestParams: MSTestParams -> MSTestParams) (assemblies: string seq) = let assemblies = assemblies |> Seq.toArray let details = assemblies |> separated ", " @@ -329,7 +329,7 @@ let DotCoverMSTest (setDotCoverParams: DotCoverParams -> DotCoverParams) (setMST /// Output = artifactsDir @@ "MSpecDotCoverSnapshot.dcvr" }) /// (fun mSpecOptions -> { mSpecOptions with /// Silent = true }) -[] +[] let DotCoverMSpec (setDotCoverParams: DotCoverParams -> DotCoverParams) (setMSpecParams: MSpecParams -> MSpecParams) (assemblies: string seq) = let assemblies = assemblies |> Seq.toArray let details = assemblies |> separated ", " diff --git a/src/legacy/FakeLib/DynamicsCRMHelper.fs b/src/legacy/FakeLib/DynamicsCRMHelper.fs index 4b6184c5626..fb36e9177ad 100644 --- a/src/legacy/FakeLib/DynamicsCRMHelper.fs +++ b/src/legacy/FakeLib/DynamicsCRMHelper.fs @@ -1,5 +1,5 @@ /// Contains various functions for interacting with Dynamics CRM. So far there is support for exporting and importing solutions, zipping and unzipping using the Solution Packager, as well as publishing customizations. -[] +[] module Fake.DynamicsCRMHelper open System @@ -7,7 +7,7 @@ open System.Configuration open System.IO /// Specify which action Solution Packager should be invoked with -[] +[] type SolutionPackagerAction = | Extract | Pack @@ -17,7 +17,7 @@ type SolutionPackagerAction = | Pack -> "/a:Pack" /// Specify Package Type for usage with Solution Packager -[] +[] type PackageType = | Unmanaged | Managed @@ -30,7 +30,7 @@ type PackageType = /// Parameters for executing Dynamics CRM Helper functions [] -[] +[] type DynamicsCrmHelperParams = { /// Url of CRM Organization / Discovery Service URL if using AllOrganizations @@ -59,7 +59,7 @@ type DynamicsCrmHelperParams = /// Default values for Dynamics CRM Helper /// You can obtain the solution exchanger as NuGet Package "Dynamics.CRM.SolutionExchanger" -[] +[] let DynamicsCrmHelperDefaults = { Url = "" @@ -77,7 +77,7 @@ let DynamicsCrmHelperDefaults = /// Parameters for invoking Solution Packager [] -[] +[] type SolutionPackagerParams = { /// Action to start, either pack or extract @@ -97,7 +97,7 @@ type SolutionPackagerParams = } /// Default values for invoking Solution Packager -[] +[] let SolutionPackagerDefaults = { ToolDirectory = currentDirectory @@ "tools" @@ "SolutionPackager" @@ -113,7 +113,7 @@ let SolutionPackagerDefaults = /// ## Parameters /// /// - `setParams` - Parameters for invoking solution exchanger -[] +[] let PublishAll (setParams : DynamicsCrmHelperParams -> DynamicsCrmHelperParams) = use __ = traceStartTaskUsing "Publish All" "" let parameters = setParams DynamicsCrmHelperDefaults @@ -157,7 +157,7 @@ let PublishAll (setParams : DynamicsCrmHelperParams -> DynamicsCrmHelperParams) /// ToolDirectory = @".\tools\SolutionPackager\" /// })) /// ) -[] +[] let ExportSolution (setParams : DynamicsCrmHelperParams -> DynamicsCrmHelperParams) = let parameters = setParams DynamicsCrmHelperDefaults use __ = traceStartTaskUsing "Exporting Solution" (parameters.Solution + ": " + if parameters.Managed then "Managed" else "Unmanaged") @@ -175,7 +175,7 @@ let ExportSolution (setParams : DynamicsCrmHelperParams -> DynamicsCrmHelperPara /// ## Parameters /// /// - `setParams` - Parameters for invoking solution exchanger -[] +[] let ImportSolution (setParams : DynamicsCrmHelperParams -> DynamicsCrmHelperParams) = let parameters = setParams DynamicsCrmHelperDefaults use __ = traceStartTaskUsing "Importing Solution" parameters.FileName @@ -192,7 +192,7 @@ let ImportSolution (setParams : DynamicsCrmHelperParams -> DynamicsCrmHelperPara /// ## Parameters /// /// - `setParams` - Parameters for invoking solution packager -[] +[] let SolutionPackager setParams = let parameters = setParams SolutionPackagerDefaults use __ = traceStartTaskUsing "Running Solution Packager" (parameters.Action.ToString() + ": " + parameters.ZipFile) diff --git a/src/legacy/FakeLib/DynamicsNavFile.fs b/src/legacy/FakeLib/DynamicsNavFile.fs index 417fadbad90..e59af1909bf 100644 --- a/src/legacy/FakeLib/DynamicsNavFile.fs +++ b/src/legacy/FakeLib/DynamicsNavFile.fs @@ -1,5 +1,5 @@ /// Provides an abstraction over Dynamics NAV object files. -[] +[] module Fake.DynamicsNavFile open System @@ -10,35 +10,35 @@ open System.Text.RegularExpressions open System.Threading /// A Regex which allows to retrieve the modified flag. -[] +[] let ModifiedRegex = new Regex(@"\s\s\s\sModified\=Yes;(?:\r\n|\r|\n)", RegexOptions.Compiled) /// A Regex which allows to retrieve the version list. -[] +[] let VersionRegex = new Regex(@"\n\s\s\s\sVersion List\=(?[^;\s]*);", RegexOptions.Compiled) /// A Regex which allows to retrieve modified date. -[] +[] let DateRegex = new Regex(@"\n\s\s\s\sDate\=(?[^;]*);", RegexOptions.Compiled) /// A Regex which allows to retrieve the modified time. -[] +[] let TimeRegex = new Regex(@"\n\s\s\s\sTime\=(?