From 2dfb7b797b4be7b4df013945195c7e986191bed1 Mon Sep 17 00:00:00 2001 From: Patrick Andrew Hartnett Date: Tue, 1 Apr 2025 15:26:54 +0200 Subject: [PATCH 01/19] Enhance the consistency, usability, maintainability, and overall developer experience of the api-docs across all RWS products. Make reference to: https://rws-dev.atlassian.net/wiki/spaces/LTApp/pages/930645143/Developer+Documentation+Improvement+Proposal --- .gitignore | 4 +- .../ManagedReference.html.primary.js | 40 - .../ManagedReference.html.primary.tmpl | 13 - RWSDocsTemplate/RestApi.html.primary.tmpl | 3 - RWSDocsTemplate/conceptual.html.primary.tmpl | 4 - RWSDocsTemplate/partials/_affix.liquid | 25 - RWSDocsTemplate/partials/_breadcrumb.liquid | 10 - RWSDocsTemplate/partials/_footer.liquid | 16 - RWSDocsTemplate/partials/_head.liquid | 38 - RWSDocsTemplate/partials/_logo.liquid | 8 - RWSDocsTemplate/partials/_navbar.liquid | 21 - RWSDocsTemplate/partials/_scripts.liquid | 4 - RWSDocsTemplate/partials/_toc.liquid | 7 - .../partials/breadcrumb.tmpl.partial | 11 - .../partials/customMREFContent.tmpl.partial | 2 - RWSDocsTemplate/partials/head.tmpl.partial | 20 - RWSDocsTemplate/partials/logo.tmpl.partial | 5 - RWSDocsTemplate/partials/title.tmpl.partial | 49 - RWSDocsTemplate/styles/docfx.vendor.css | 8196 ----- RWSDocsTemplate/styles/docfx.vendor.js | 51 - RWSDocsTemplate/styles/lunr.js | 2924 -- RWSDocsTemplate/styles/lunr.min.js | 1 - RWSDocsTemplate/styles/main.js | 1 - RWSDocsTemplate/styles/search-worker.js | 80 - RWSDocsTemplate/toc.html.js | 38 - .../ManagedReference.common.js | 29 +- .../ManagedReference.extension.js | 5 +- RWSTemplate/ManagedReference.html.primary.js | 69 + .../ManagedReference.html.primary.tmpl | 22 + .../Plugins/HtmlAgilityPack.dll | Bin .../Plugins/HtmlAgilityPack.pdb | Bin .../Plugins/Microsoft.DocAsCode.Common.dll | Bin .../Plugins/Microsoft.DocAsCode.Dfm.dll | Bin .../Microsoft.DocAsCode.MarkdownLite.dll | Bin .../Plugins/Microsoft.DocAsCode.Plugins.dll | Bin .../Microsoft.DocAsCode.YamlSerialization.dll | Bin .../Plugins/Newtonsoft.Json.dll | Bin .../Plugins/System.Buffers.dll | Bin .../Plugins/System.Collections.Immutable.dll | Bin .../System.Composition.AttributedModel.dll | Bin .../Plugins/System.Composition.Convention.dll | Bin .../Plugins/System.Composition.Hosting.dll | Bin .../Plugins/System.Composition.Runtime.dll | Bin .../Plugins/System.Composition.TypedParts.dll | Bin .../Plugins/System.Memory.dll | Bin .../Plugins/System.Numerics.Vectors.dll | Bin ...System.Runtime.CompilerServices.Unsafe.dll | Bin .../Plugins/TradosStudioDocsPlugin.dll | Bin 7168 -> 7168 bytes .../Plugins/TradosStudioDocsPlugin.pdb | Bin 24064 -> 24064 bytes .../Plugins/YamlDotNet.dll | Bin RWSTemplate/Redirection.html.primary.tmpl | 8 + .../RestApi.common.js | 84 +- .../RestApi.extension.js | 5 +- .../RestApi.html.primary.js | 10 +- RWSTemplate/RestApi.html.primary.tmpl | 3 + .../UniversalReference.common.js | 5 +- .../UniversalReference.extension.js | 5 +- .../UniversalReference.html.primary.js | 10 +- .../UniversalReference.html.primary.tmpl | 2 +- {RWSDocsTemplate => RWSTemplate}/common.js | 9 +- .../conceptual.extension.js | 5 +- .../conceptual.html.primary.js | 9 +- RWSTemplate/conceptual.html.primary.tmpl | 4 + {RWSDocsTemplate => RWSTemplate}/favicon.ico | Bin .../fonts/glyphicons-halflings-regular.eot | Bin .../fonts/glyphicons-halflings-regular.svg | 0 .../fonts/glyphicons-halflings-regular.ttf | Bin .../fonts/glyphicons-halflings-regular.woff | Bin .../fonts/glyphicons-halflings-regular.woff2 | Bin .../layout/_master.tmpl | 22 +- {RWSDocsTemplate => RWSTemplate}/logo.svg | 0 .../partials/affix.tmpl.partial | 4 +- RWSTemplate/partials/breadcrumb.tmpl.partial | 9 + .../partials/class.header.tmpl.partial | 12 +- .../partials/class.memberpage.tmpl.partial | 59 + .../partials/class.tmpl.partial | 20 +- .../partials/classSubtitle.tmpl.partial | 4 +- RWSTemplate/partials/collection.tmpl.partial | 234 + .../partials/customMREFContent.tmpl.partial | 10 + .../partials/dd-li.tmpl.partial | 0 .../partials/enum.tmpl.partial | 4 +- .../partials/footer.tmpl.partial | 2 +- RWSTemplate/partials/head.tmpl.partial | 34 + RWSTemplate/partials/item.tmpl.partial | 3 + .../partials/li.tmpl.partial | 2 +- RWSTemplate/partials/logo.tmpl.partial | 5 + .../partials/namespace.tmpl.partial | 2 +- .../partials/namespaceSubtitle.tmpl.partial | 5 +- .../partials/navbar.tmpl.partial | 3 +- .../partials/rest.child.tmpl.partial | 35 +- .../partials/rest.definition.tmpl.partial | 45 + .../partials/rest.tmpl.partial | 9 +- .../partials/scripts.tmpl.partial | 4 +- .../partials/searchResults.tmpl.partial | 2 +- RWSTemplate/partials/title.tmpl.partial | 2 + .../partials/toc.tmpl.partial | 2 +- .../partials/uref/class.header.tmpl.partial | 4 +- .../partials/uref/class.tmpl.partial | 22 +- .../partials/uref/enum.tmpl.partial | 4 +- .../partials/uref/inheritance.tmpl.partial | 0 .../partials/uref/namespace.tmpl.partial | 18 +- .../partials/uref/parameters.tmpl.partial | 6 +- .../search-stopwords.json | 0 .../styles/docfx.css | 325 +- .../styles/docfx.js | 120 +- RWSTemplate/styles/docfx.vendor.min.css | 25 + RWSTemplate/styles/docfx.vendor.min.css.map | 7 + RWSTemplate/styles/docfx.vendor.min.js | 37 + RWSTemplate/styles/docfx.vendor.min.js.map | 7 + .../glyphicons-halflings-regular-ACNUA6UY.ttf | Bin 0 -> 45404 bytes ...glyphicons-halflings-regular-JOUF32XT.woff | Bin 0 -> 23424 bytes .../glyphicons-halflings-regular-PIHUWCJO.eot | Bin 0 -> 20127 bytes .../glyphicons-halflings-regular-QXYEM3FU.svg | 288 + ...lyphicons-halflings-regular-W4DYDFZM.woff2 | Bin 0 -> 18028 bytes .../styles/main.css | 641 +- RWSTemplate/styles/main.js | 8 + RWSTemplate/styles/search-worker.min.js | 57 + RWSTemplate/styles/search-worker.min.js.map | 7 + .../toc.extension.js | 9 +- RWSTemplate/toc.html.primary.js | 123 + .../toc.html.primary.tmpl | 6 +- RWSTemplate/toc.json.js | 109 + RWSTemplate/toc.json.tmpl | 3 + {RWSDocsTemplate => RWSTemplate}/token.json | 27 +- api/.gitignore | 5 - api/bcm/.manifest | 988 + articles/BCM/API.md | 2 - articles/{ => BCM}/BCM.NET_client_API.md | 31 +- articles/{ => BCM}/intro.md | 0 articles/BCM/toc.yml | 15 +- .../api/Extensibility-API.v1-fv.html | 71 + .../api/Extensibility-API.v1.json | 4081 +++ .../Extensibility/api/Extensibility-API.v1.md | 23 + .../api/bak/api-docs-redoc-ext.html.bak | 34 + .../api/bak/api-docs-redoc.md.bak | 38 + .../Extensibility/api/bak/redocly.yaml.bak | 6 + articles/Extensibility/docs/Whats-New.md | 49 + .../docs/appManagement/Approvals.md | 56 + .../docs/appManagement/Foreword.md | 18 + .../docs/appManagement/Installing.md | 28 + .../docs/appManagement/Publishing.md | 23 + .../docs/appManagement/Registering.md | 35 + .../docs/appManagement/Retiring.md | 49 + .../docs/appManagement/Sharing.md | 19 + .../docs/appManagement/Updating.md | 42 + .../docs/appManagement/Validating.md | 45 + .../Automatic-Task-App-consumer-guide.md | 85 + .../docs/consumer/Dynamic-Preview-guide.md | 38 + .../docs/consumer/MT-App-consumer-guide.md | 71 + .../development/Add-On-To-App-Migration.md | 36 + .../docs/development/App-Descriptor.md | 141 + .../docs/development/App-Versioning.md | 30 + .../development/Authentication-Overview.md | 7 + .../Automatic-Task-App-development-guide.md | 242 + .../docs/development/Concepts.md | 19 + .../docs/development/Deployment-Strategy.md | 34 + .../docs/development/Lifecycle.md | 64 + .../development/MT-App-development-guide.md | 170 + .../docs/development/Multi-Region.md | 154 + .../Preview-App-development-guide.md | 808 + .../development/Request-Authentication.md | 90 + ...chnical-Requirements-And-Best-Practices.md | 70 + .../docs/development/Trados-Cloud-API.md | 40 + .../UI-App-custom-elements-locations.md | 242 + .../development/UI-App-development-guide.md | 248 + .../Verification-App-development-guide.md | 419 + .../docs/development/Webhooks.md | 50 + .../blueprints/Dot-Net-Blueprint.md | 151 + .../blueprints/Dot-Net-Migration-Blueprint.md | 69 + .../development/blueprints/Getting-Started.md | 22 + .../development/blueprints/Java-Blueprint.md | 174 + .../blueprints/Java-Migration-Blueprint.md | 68 + .../blueprints/Testing-with-Docker.md | 130 + .../docs/development/blueprints/Testing.md | 123 + .../development/samples/Dot-Net-Samples.md | 19 + .../docs/development/samples/Java-Samples.md | 18 + .../docs/development/verification-flow.png | Bin 0 -> 56345 bytes articles/Extensibility/toc.yml | 104 + .../api/Global-Public-API.v1-fv.html | 73 + .../LCPublicAPI/api/Global-Public-API.v1.json | 462 + .../LCPublicAPI/api/Global-Public-API.v1.md | 23 + .../LCPublicAPI/api/Public-API.v1-fv.html | 73 + articles/LCPublicAPI/api/Public-API.v1.json | 28514 ++++++++++++++++ articles/LCPublicAPI/api/Public-API.v1.md | 23 + articles/LCPublicAPI/api/Webhooks.v1-fv.html | 73 + articles/LCPublicAPI/api/Webhooks.v1.json | 750 + articles/LCPublicAPI/api/Webhooks.v1.md | 23 + articles/LCPublicAPI/docs/API-rate-limits.md | 84 + articles/LCPublicAPI/docs/Authentication.md | 77 + .../docs/Basic-project-creation-flow.md | 381 + articles/LCPublicAPI/docs/Create-projects.md | 103 + articles/LCPublicAPI/docs/Custom-Fields.md | 172 + .../docs/Developing-Language-Cloud-Add-Ons.md | 166 + .../LCPublicAPI/docs/Export-quote-report.md | 468 + articles/LCPublicAPI/docs/File-formats.md | 68 + .../docs/Headers-considerations.md | 52 + articles/LCPublicAPI/docs/How-to-multipart.md | 47 + .../docs/How-to-report-an-issue.md | 78 + .../docs/How-to-use-location-and-folders.md | 163 + .../LCPublicAPI/docs/Interact-with-tasks.md | 30 + articles/LCPublicAPI/docs/Introduction.md | 29 + articles/LCPublicAPI/docs/Known-Issues.md | 12 + .../docs/Language-Cloud-APIs-for-Postman.md | 69 + articles/LCPublicAPI/docs/Language-codes.md | 13 + articles/LCPublicAPI/docs/Multi-region.md | 23 + .../docs/Public-API-Management-Process.md | 61 + .../LCPublicAPI/docs/Service-credentials.md | 43 + .../Service-users-and-custom-applications.md | 20 + articles/LCPublicAPI/docs/Track-projects.md | 5 + .../LCPublicAPI/docs/Update-project-quote.md | 426 + .../docs/Updating-data-with-PUT.md | 18 + .../docs/Use-fields-in-your-requests.md | 53 + .../docs/Use-paging-and-sorting-for-lists.md | 25 + articles/LCPublicAPI/docs/Whats-New.md | 336 + articles/LCPublicAPI/docs/Whats-deprecated.md | 32 + .../docs/api-clients/java/Java-Client.md | 82 + .../docs/api-clients/java/Java-Samples.md | 193 + .../docs/api-clients/net/NET-Client.md | 180 + .../docs/api-clients/net/Net-Samples.md | 226 + .../docs/termbase/Termbase-entries.md | 285 + .../docs/termbase/Termbase-import-export.md | 66 + .../docs/termbase/Termbase-templates.md | 178 + .../LCPublicAPI/docs/termbase/Termbase.md | 185 + .../Translation-memory-import-export.md | 76 + .../docs/webhooks/Batched-webhooks.md | 54 + .../docs/webhooks/Webhooks-payload.md | 75 + .../docs/webhooks/Webhooks-setup.md | 199 + articles/LCPublicAPI/toc.yml | 114 + articles/toc.yml | 4 - developer_license.md | 29 + docfx.json | 22 +- index.md | 12 +- .../v1.3.1/Sdl.Core.Bcm.BcmModel.dll | Bin .../v1.3.1/Sdl.Core.Bcm.BcmModel.xml | 13120 +++---- .../v1.5.0/Sdl.Core.Bcm.BcmModel.dll | Bin .../v1.5.0/Sdl.Core.Bcm.BcmModel.xml | 13158 +++---- .../v1.6.0/Sdl.Core.Bcm.BcmModel.dll | Bin .../v1.6.0/Sdl.Core.Bcm.BcmModel.xml | 11502 +++---- .../v2.0.0/Sdl.Core.Bcm.BcmModel.dll | Bin .../v2.0.0/Sdl.Core.Bcm.BcmModel.xml | 11536 +++---- .../v2.1.3/Sdl.Core.Bcm.BcmModel.dll | Bin .../v2.1.3/Sdl.Core.Bcm.BcmModel.xml | 0 toc.yml | 10 +- 243 files changed, 70978 insertions(+), 37231 deletions(-) delete mode 100644 RWSDocsTemplate/ManagedReference.html.primary.js delete mode 100644 RWSDocsTemplate/ManagedReference.html.primary.tmpl delete mode 100644 RWSDocsTemplate/RestApi.html.primary.tmpl delete mode 100644 RWSDocsTemplate/conceptual.html.primary.tmpl delete mode 100644 RWSDocsTemplate/partials/_affix.liquid delete mode 100644 RWSDocsTemplate/partials/_breadcrumb.liquid delete mode 100644 RWSDocsTemplate/partials/_footer.liquid delete mode 100644 RWSDocsTemplate/partials/_head.liquid delete mode 100644 RWSDocsTemplate/partials/_logo.liquid delete mode 100644 RWSDocsTemplate/partials/_navbar.liquid delete mode 100644 RWSDocsTemplate/partials/_scripts.liquid delete mode 100644 RWSDocsTemplate/partials/_toc.liquid delete mode 100644 RWSDocsTemplate/partials/breadcrumb.tmpl.partial delete mode 100644 RWSDocsTemplate/partials/customMREFContent.tmpl.partial delete mode 100644 RWSDocsTemplate/partials/head.tmpl.partial delete mode 100644 RWSDocsTemplate/partials/logo.tmpl.partial delete mode 100644 RWSDocsTemplate/partials/title.tmpl.partial delete mode 100644 RWSDocsTemplate/styles/docfx.vendor.css delete mode 100644 RWSDocsTemplate/styles/docfx.vendor.js delete mode 100644 RWSDocsTemplate/styles/lunr.js delete mode 100644 RWSDocsTemplate/styles/lunr.min.js delete mode 100644 RWSDocsTemplate/styles/main.js delete mode 100644 RWSDocsTemplate/styles/search-worker.js delete mode 100644 RWSDocsTemplate/toc.html.js rename {RWSDocsTemplate => RWSTemplate}/ManagedReference.common.js (91%) rename {RWSDocsTemplate => RWSTemplate}/ManagedReference.extension.js (69%) create mode 100644 RWSTemplate/ManagedReference.html.primary.js create mode 100644 RWSTemplate/ManagedReference.html.primary.tmpl rename {RWSDocsTemplate => RWSTemplate}/Plugins/HtmlAgilityPack.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/HtmlAgilityPack.pdb (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/Microsoft.DocAsCode.Common.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/Microsoft.DocAsCode.Dfm.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/Microsoft.DocAsCode.MarkdownLite.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/Microsoft.DocAsCode.Plugins.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/Microsoft.DocAsCode.YamlSerialization.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/Newtonsoft.Json.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/System.Buffers.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/System.Collections.Immutable.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/System.Composition.AttributedModel.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/System.Composition.Convention.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/System.Composition.Hosting.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/System.Composition.Runtime.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/System.Composition.TypedParts.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/System.Memory.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/System.Numerics.Vectors.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/System.Runtime.CompilerServices.Unsafe.dll (100%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/TradosStudioDocsPlugin.dll (62%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/TradosStudioDocsPlugin.pdb (65%) rename {RWSDocsTemplate => RWSTemplate}/Plugins/YamlDotNet.dll (100%) create mode 100644 RWSTemplate/Redirection.html.primary.tmpl rename {RWSDocsTemplate => RWSTemplate}/RestApi.common.js (76%) rename {RWSDocsTemplate => RWSTemplate}/RestApi.extension.js (68%) rename {RWSDocsTemplate => RWSTemplate}/RestApi.html.primary.js (63%) create mode 100644 RWSTemplate/RestApi.html.primary.tmpl rename {RWSDocsTemplate => RWSTemplate}/UniversalReference.common.js (98%) rename {RWSDocsTemplate => RWSTemplate}/UniversalReference.extension.js (69%) rename {RWSDocsTemplate => RWSTemplate}/UniversalReference.html.primary.js (63%) rename {RWSDocsTemplate => RWSTemplate}/UniversalReference.html.primary.tmpl (56%) rename {RWSDocsTemplate => RWSTemplate}/common.js (96%) rename {RWSDocsTemplate => RWSTemplate}/conceptual.extension.js (68%) rename {RWSDocsTemplate => RWSTemplate}/conceptual.html.primary.js (61%) create mode 100644 RWSTemplate/conceptual.html.primary.tmpl rename {RWSDocsTemplate => RWSTemplate}/favicon.ico (100%) rename {RWSDocsTemplate => RWSTemplate}/fonts/glyphicons-halflings-regular.eot (100%) rename {RWSDocsTemplate => RWSTemplate}/fonts/glyphicons-halflings-regular.svg (100%) rename {RWSDocsTemplate => RWSTemplate}/fonts/glyphicons-halflings-regular.ttf (100%) rename {RWSDocsTemplate => RWSTemplate}/fonts/glyphicons-halflings-regular.woff (100%) rename {RWSDocsTemplate => RWSTemplate}/fonts/glyphicons-halflings-regular.woff2 (100%) rename {RWSDocsTemplate => RWSTemplate}/layout/_master.tmpl (76%) rename {RWSDocsTemplate => RWSTemplate}/logo.svg (100%) rename {RWSDocsTemplate => RWSTemplate}/partials/affix.tmpl.partial (77%) create mode 100644 RWSTemplate/partials/breadcrumb.tmpl.partial rename {RWSDocsTemplate => RWSTemplate}/partials/class.header.tmpl.partial (87%) create mode 100644 RWSTemplate/partials/class.memberpage.tmpl.partial rename {RWSDocsTemplate => RWSTemplate}/partials/class.tmpl.partial (87%) rename {RWSDocsTemplate => RWSTemplate}/partials/classSubtitle.tmpl.partial (76%) create mode 100644 RWSTemplate/partials/collection.tmpl.partial create mode 100644 RWSTemplate/partials/customMREFContent.tmpl.partial rename {RWSDocsTemplate => RWSTemplate}/partials/dd-li.tmpl.partial (100%) rename {RWSDocsTemplate => RWSTemplate}/partials/enum.tmpl.partial (83%) rename {RWSDocsTemplate => RWSTemplate}/partials/footer.tmpl.partial (68%) create mode 100644 RWSTemplate/partials/head.tmpl.partial create mode 100644 RWSTemplate/partials/item.tmpl.partial rename {RWSDocsTemplate => RWSTemplate}/partials/li.tmpl.partial (84%) create mode 100644 RWSTemplate/partials/logo.tmpl.partial rename {RWSDocsTemplate => RWSTemplate}/partials/namespace.tmpl.partial (76%) rename {RWSDocsTemplate => RWSTemplate}/partials/namespaceSubtitle.tmpl.partial (75%) rename {RWSDocsTemplate => RWSTemplate}/partials/navbar.tmpl.partial (78%) rename {RWSDocsTemplate => RWSTemplate}/partials/rest.child.tmpl.partial (64%) create mode 100644 RWSTemplate/partials/rest.definition.tmpl.partial rename {RWSDocsTemplate => RWSTemplate}/partials/rest.tmpl.partial (78%) rename {RWSDocsTemplate => RWSTemplate}/partials/scripts.tmpl.partial (55%) rename {RWSDocsTemplate => RWSTemplate}/partials/searchResults.tmpl.partial (71%) create mode 100644 RWSTemplate/partials/title.tmpl.partial rename {RWSDocsTemplate => RWSTemplate}/partials/toc.tmpl.partial (66%) rename {RWSDocsTemplate => RWSTemplate}/partials/uref/class.header.tmpl.partial (89%) rename {RWSDocsTemplate => RWSTemplate}/partials/uref/class.tmpl.partial (88%) rename {RWSDocsTemplate => RWSTemplate}/partials/uref/enum.tmpl.partial (78%) rename {RWSDocsTemplate => RWSTemplate}/partials/uref/inheritance.tmpl.partial (100%) rename {RWSDocsTemplate => RWSTemplate}/partials/uref/namespace.tmpl.partial (89%) rename {RWSDocsTemplate => RWSTemplate}/partials/uref/parameters.tmpl.partial (68%) rename {RWSDocsTemplate => RWSTemplate}/search-stopwords.json (100%) rename {RWSDocsTemplate => RWSTemplate}/styles/docfx.css (85%) rename {RWSDocsTemplate => RWSTemplate}/styles/docfx.js (93%) create mode 100644 RWSTemplate/styles/docfx.vendor.min.css create mode 100644 RWSTemplate/styles/docfx.vendor.min.css.map create mode 100644 RWSTemplate/styles/docfx.vendor.min.js create mode 100644 RWSTemplate/styles/docfx.vendor.min.js.map create mode 100644 RWSTemplate/styles/glyphicons-halflings-regular-ACNUA6UY.ttf create mode 100644 RWSTemplate/styles/glyphicons-halflings-regular-JOUF32XT.woff create mode 100644 RWSTemplate/styles/glyphicons-halflings-regular-PIHUWCJO.eot create mode 100644 RWSTemplate/styles/glyphicons-halflings-regular-QXYEM3FU.svg create mode 100644 RWSTemplate/styles/glyphicons-halflings-regular-W4DYDFZM.woff2 rename {RWSDocsTemplate => RWSTemplate}/styles/main.css (98%) create mode 100644 RWSTemplate/styles/main.js create mode 100644 RWSTemplate/styles/search-worker.min.js create mode 100644 RWSTemplate/styles/search-worker.min.js.map rename {RWSDocsTemplate => RWSTemplate}/toc.extension.js (57%) create mode 100644 RWSTemplate/toc.html.primary.js rename RWSDocsTemplate/toc.html.tmpl => RWSTemplate/toc.html.primary.tmpl (60%) create mode 100644 RWSTemplate/toc.json.js create mode 100644 RWSTemplate/toc.json.tmpl rename {RWSDocsTemplate => RWSTemplate}/token.json (75%) delete mode 100644 api/.gitignore create mode 100644 api/bcm/.manifest delete mode 100644 articles/BCM/API.md rename articles/{ => BCM}/BCM.NET_client_API.md (84%) rename articles/{ => BCM}/intro.md (100%) create mode 100644 articles/Extensibility/api/Extensibility-API.v1-fv.html create mode 100644 articles/Extensibility/api/Extensibility-API.v1.json create mode 100644 articles/Extensibility/api/Extensibility-API.v1.md create mode 100644 articles/Extensibility/api/bak/api-docs-redoc-ext.html.bak create mode 100644 articles/Extensibility/api/bak/api-docs-redoc.md.bak create mode 100644 articles/Extensibility/api/bak/redocly.yaml.bak create mode 100644 articles/Extensibility/docs/Whats-New.md create mode 100644 articles/Extensibility/docs/appManagement/Approvals.md create mode 100644 articles/Extensibility/docs/appManagement/Foreword.md create mode 100644 articles/Extensibility/docs/appManagement/Installing.md create mode 100644 articles/Extensibility/docs/appManagement/Publishing.md create mode 100644 articles/Extensibility/docs/appManagement/Registering.md create mode 100644 articles/Extensibility/docs/appManagement/Retiring.md create mode 100644 articles/Extensibility/docs/appManagement/Sharing.md create mode 100644 articles/Extensibility/docs/appManagement/Updating.md create mode 100644 articles/Extensibility/docs/appManagement/Validating.md create mode 100644 articles/Extensibility/docs/consumer/Automatic-Task-App-consumer-guide.md create mode 100644 articles/Extensibility/docs/consumer/Dynamic-Preview-guide.md create mode 100644 articles/Extensibility/docs/consumer/MT-App-consumer-guide.md create mode 100644 articles/Extensibility/docs/development/Add-On-To-App-Migration.md create mode 100644 articles/Extensibility/docs/development/App-Descriptor.md create mode 100644 articles/Extensibility/docs/development/App-Versioning.md create mode 100644 articles/Extensibility/docs/development/Authentication-Overview.md create mode 100644 articles/Extensibility/docs/development/Automatic-Task-App-development-guide.md create mode 100644 articles/Extensibility/docs/development/Concepts.md create mode 100644 articles/Extensibility/docs/development/Deployment-Strategy.md create mode 100644 articles/Extensibility/docs/development/Lifecycle.md create mode 100644 articles/Extensibility/docs/development/MT-App-development-guide.md create mode 100644 articles/Extensibility/docs/development/Multi-Region.md create mode 100644 articles/Extensibility/docs/development/Preview-App-development-guide.md create mode 100644 articles/Extensibility/docs/development/Request-Authentication.md create mode 100644 articles/Extensibility/docs/development/Technical-Requirements-And-Best-Practices.md create mode 100644 articles/Extensibility/docs/development/Trados-Cloud-API.md create mode 100644 articles/Extensibility/docs/development/UI-App-custom-elements-locations.md create mode 100644 articles/Extensibility/docs/development/UI-App-development-guide.md create mode 100644 articles/Extensibility/docs/development/Verification-App-development-guide.md create mode 100644 articles/Extensibility/docs/development/Webhooks.md create mode 100644 articles/Extensibility/docs/development/blueprints/Dot-Net-Blueprint.md create mode 100644 articles/Extensibility/docs/development/blueprints/Dot-Net-Migration-Blueprint.md create mode 100644 articles/Extensibility/docs/development/blueprints/Getting-Started.md create mode 100644 articles/Extensibility/docs/development/blueprints/Java-Blueprint.md create mode 100644 articles/Extensibility/docs/development/blueprints/Java-Migration-Blueprint.md create mode 100644 articles/Extensibility/docs/development/blueprints/Testing-with-Docker.md create mode 100644 articles/Extensibility/docs/development/blueprints/Testing.md create mode 100644 articles/Extensibility/docs/development/samples/Dot-Net-Samples.md create mode 100644 articles/Extensibility/docs/development/samples/Java-Samples.md create mode 100644 articles/Extensibility/docs/development/verification-flow.png create mode 100644 articles/Extensibility/toc.yml create mode 100644 articles/LCPublicAPI/api/Global-Public-API.v1-fv.html create mode 100644 articles/LCPublicAPI/api/Global-Public-API.v1.json create mode 100644 articles/LCPublicAPI/api/Global-Public-API.v1.md create mode 100644 articles/LCPublicAPI/api/Public-API.v1-fv.html create mode 100644 articles/LCPublicAPI/api/Public-API.v1.json create mode 100644 articles/LCPublicAPI/api/Public-API.v1.md create mode 100644 articles/LCPublicAPI/api/Webhooks.v1-fv.html create mode 100644 articles/LCPublicAPI/api/Webhooks.v1.json create mode 100644 articles/LCPublicAPI/api/Webhooks.v1.md create mode 100644 articles/LCPublicAPI/docs/API-rate-limits.md create mode 100644 articles/LCPublicAPI/docs/Authentication.md create mode 100644 articles/LCPublicAPI/docs/Basic-project-creation-flow.md create mode 100644 articles/LCPublicAPI/docs/Create-projects.md create mode 100644 articles/LCPublicAPI/docs/Custom-Fields.md create mode 100644 articles/LCPublicAPI/docs/Developing-Language-Cloud-Add-Ons.md create mode 100644 articles/LCPublicAPI/docs/Export-quote-report.md create mode 100644 articles/LCPublicAPI/docs/File-formats.md create mode 100644 articles/LCPublicAPI/docs/Headers-considerations.md create mode 100644 articles/LCPublicAPI/docs/How-to-multipart.md create mode 100644 articles/LCPublicAPI/docs/How-to-report-an-issue.md create mode 100644 articles/LCPublicAPI/docs/How-to-use-location-and-folders.md create mode 100644 articles/LCPublicAPI/docs/Interact-with-tasks.md create mode 100644 articles/LCPublicAPI/docs/Introduction.md create mode 100644 articles/LCPublicAPI/docs/Known-Issues.md create mode 100644 articles/LCPublicAPI/docs/Language-Cloud-APIs-for-Postman.md create mode 100644 articles/LCPublicAPI/docs/Language-codes.md create mode 100644 articles/LCPublicAPI/docs/Multi-region.md create mode 100644 articles/LCPublicAPI/docs/Public-API-Management-Process.md create mode 100644 articles/LCPublicAPI/docs/Service-credentials.md create mode 100644 articles/LCPublicAPI/docs/Service-users-and-custom-applications.md create mode 100644 articles/LCPublicAPI/docs/Track-projects.md create mode 100644 articles/LCPublicAPI/docs/Update-project-quote.md create mode 100644 articles/LCPublicAPI/docs/Updating-data-with-PUT.md create mode 100644 articles/LCPublicAPI/docs/Use-fields-in-your-requests.md create mode 100644 articles/LCPublicAPI/docs/Use-paging-and-sorting-for-lists.md create mode 100644 articles/LCPublicAPI/docs/Whats-New.md create mode 100644 articles/LCPublicAPI/docs/Whats-deprecated.md create mode 100644 articles/LCPublicAPI/docs/api-clients/java/Java-Client.md create mode 100644 articles/LCPublicAPI/docs/api-clients/java/Java-Samples.md create mode 100644 articles/LCPublicAPI/docs/api-clients/net/NET-Client.md create mode 100644 articles/LCPublicAPI/docs/api-clients/net/Net-Samples.md create mode 100644 articles/LCPublicAPI/docs/termbase/Termbase-entries.md create mode 100644 articles/LCPublicAPI/docs/termbase/Termbase-import-export.md create mode 100644 articles/LCPublicAPI/docs/termbase/Termbase-templates.md create mode 100644 articles/LCPublicAPI/docs/termbase/Termbase.md create mode 100644 articles/LCPublicAPI/docs/translation-memory/Translation-memory-import-export.md create mode 100644 articles/LCPublicAPI/docs/webhooks/Batched-webhooks.md create mode 100644 articles/LCPublicAPI/docs/webhooks/Webhooks-payload.md create mode 100644 articles/LCPublicAPI/docs/webhooks/Webhooks-setup.md create mode 100644 articles/LCPublicAPI/toc.yml delete mode 100644 articles/toc.yml create mode 100644 developer_license.md rename {articles/BCM/Assembly => resources/bcm/assembly}/v1.3.1/Sdl.Core.Bcm.BcmModel.dll (100%) rename {articles/BCM/Assembly => resources/bcm/assembly}/v1.3.1/Sdl.Core.Bcm.BcmModel.xml (97%) rename {articles/BCM/Assembly => resources/bcm/assembly}/v1.5.0/Sdl.Core.Bcm.BcmModel.dll (100%) rename {articles/BCM/Assembly => resources/bcm/assembly}/v1.5.0/Sdl.Core.Bcm.BcmModel.xml (97%) rename {articles/BCM/Assembly => resources/bcm/assembly}/v1.6.0/Sdl.Core.Bcm.BcmModel.dll (100%) rename {articles/BCM/Assembly => resources/bcm/assembly}/v1.6.0/Sdl.Core.Bcm.BcmModel.xml (97%) rename {articles/BCM/Assembly => resources/bcm/assembly}/v2.0.0/Sdl.Core.Bcm.BcmModel.dll (100%) rename {articles/BCM/Assembly => resources/bcm/assembly}/v2.0.0/Sdl.Core.Bcm.BcmModel.xml (97%) rename {articles/BCM/Assembly => resources/bcm/assembly}/v2.1.3/Sdl.Core.Bcm.BcmModel.dll (100%) rename {articles/BCM/Assembly => resources/bcm/assembly}/v2.1.3/Sdl.Core.Bcm.BcmModel.xml (100%) diff --git a/.gitignore b/.gitignore index 2c448be..b13c45a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,6 @@ /**/bin/ /**/obj/ _site -.vscode/ +.vscode +.vs +/api/bcm/*.yml diff --git a/RWSDocsTemplate/ManagedReference.html.primary.js b/RWSDocsTemplate/ManagedReference.html.primary.js deleted file mode 100644 index 3f86b86..0000000 --- a/RWSDocsTemplate/ManagedReference.html.primary.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. - -var mrefCommon = require('./ManagedReference.common.js'); -var extension = require('./ManagedReference.extension.js'); -var overwrite = require('./ManagedReference.overwrite.js'); - -exports.transform = function (model) { - if (overwrite && overwrite.transform) { - return overwrite.transform(model); - } - - if (extension && extension.preTransform) { - model = extension.preTransform(model); - } - - if (mrefCommon && mrefCommon.transform) { - model = mrefCommon.transform(model); - } - if (model.type.toLowerCase() === "enum") { - model.isClass = false; - model.isEnum = true; - } - model._disableToc = model._disableToc || !model._tocPath || (model._navPath === model._tocPath); - - if (extension && extension.postTransform) { - model = extension.postTransform(model); - } - - return model; -} - -exports.getOptions = function (model) { - if (overwrite && overwrite.getOptions) { - return overwrite.getOptions(model); - } - - return { - "bookmarks": mrefCommon.getBookmarks(model) - }; -} \ No newline at end of file diff --git a/RWSDocsTemplate/ManagedReference.html.primary.tmpl b/RWSDocsTemplate/ManagedReference.html.primary.tmpl deleted file mode 100644 index b497774..0000000 --- a/RWSDocsTemplate/ManagedReference.html.primary.tmpl +++ /dev/null @@ -1,13 +0,0 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} -{{!master(layout/_master.tmpl)}} - -{{#isNamespace}} - {{>partials/namespace}} -{{/isNamespace}} -{{#isClass}} - {{>partials/class}} -{{/isClass}} -{{#isEnum}} - {{>partials/enum}} -{{/isEnum}} -{{>partials/customMREFContent}} \ No newline at end of file diff --git a/RWSDocsTemplate/RestApi.html.primary.tmpl b/RWSDocsTemplate/RestApi.html.primary.tmpl deleted file mode 100644 index 9fd9df0..0000000 --- a/RWSDocsTemplate/RestApi.html.primary.tmpl +++ /dev/null @@ -1,3 +0,0 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} -{{!master(layout/_master.tmpl)}} -{{>partials/rest}} \ No newline at end of file diff --git a/RWSDocsTemplate/conceptual.html.primary.tmpl b/RWSDocsTemplate/conceptual.html.primary.tmpl deleted file mode 100644 index 8ba5203..0000000 --- a/RWSDocsTemplate/conceptual.html.primary.tmpl +++ /dev/null @@ -1,4 +0,0 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} -{{!master(layout/_master.tmpl)}} -{{{rawTitle}}} -{{{conceptual}}} \ No newline at end of file diff --git a/RWSDocsTemplate/partials/_affix.liquid b/RWSDocsTemplate/partials/_affix.liquid deleted file mode 100644 index 15104c0..0000000 --- a/RWSDocsTemplate/partials/_affix.liquid +++ /dev/null @@ -1,25 +0,0 @@ -{% comment -%}Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.{% endcomment -%} -
-
- {%- if not _disableContribution -%} -
-
    - {%- if docurl -%} -
  • - {{__global.improveThisDoc}} -
  • - {%- endif -%} - {%- if sourceurl -%} -
  • - {{__global.viewSource}} -
  • - {%- endif -%} -
-
- {%- endif -%} -
-

{{__global.inThisArticle}}

-
-
-
-
diff --git a/RWSDocsTemplate/partials/_breadcrumb.liquid b/RWSDocsTemplate/partials/_breadcrumb.liquid deleted file mode 100644 index c768bde..0000000 --- a/RWSDocsTemplate/partials/_breadcrumb.liquid +++ /dev/null @@ -1,10 +0,0 @@ -{% comment -%}Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.{% endcomment -%} -
-
-
-
    -
  • {{_tocTitle}}
  • -
-
-
-
diff --git a/RWSDocsTemplate/partials/_footer.liquid b/RWSDocsTemplate/partials/_footer.liquid deleted file mode 100644 index ddc2672..0000000 --- a/RWSDocsTemplate/partials/_footer.liquid +++ /dev/null @@ -1,16 +0,0 @@ -{% comment -%}Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.{% endcomment -%} -
-
-
-
- - Back to top - - {%- if _appFooter -%} - {{_appFooter}} - {%- else -%} - Copyright © Microsoft.
Generated by DocFX
- {%- endif -%} -
-
-
diff --git a/RWSDocsTemplate/partials/_head.liquid b/RWSDocsTemplate/partials/_head.liquid deleted file mode 100644 index 2af71a6..0000000 --- a/RWSDocsTemplate/partials/_head.liquid +++ /dev/null @@ -1,38 +0,0 @@ -{% comment -%}Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.{% endcomment -%} - - - - {%- if title and _appTitle -%} - {{title}} | {{appTitle}} - - {%- else -%} - {%- if title or _appTitle -%} - {{title}}{{appTitle}} - - {%- endif -%} - {%- endif -%} - - - {%- if _description -%} - - {%- endif -%} - {%- if _appFaviconPath -%} - - {%- else -%} - - {%- endif -%} - - - - - - {%- if _noindex -%} - - {%- endif -%} - {%- if _enableSearch -%} - - {%- endif -%} - {%- if _enableNewTab -%} - - {%- endif -%} - diff --git a/RWSDocsTemplate/partials/_logo.liquid b/RWSDocsTemplate/partials/_logo.liquid deleted file mode 100644 index 7bc65a6..0000000 --- a/RWSDocsTemplate/partials/_logo.liquid +++ /dev/null @@ -1,8 +0,0 @@ -{% comment -%}Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.{% endcomment -%} - - {%- if _appLogoPath -%} - {{_appName}} - {%- else -%} - {{_appName}} - {%- endif -%} - diff --git a/RWSDocsTemplate/partials/_navbar.liquid b/RWSDocsTemplate/partials/_navbar.liquid deleted file mode 100644 index bcfde28..0000000 --- a/RWSDocsTemplate/partials/_navbar.liquid +++ /dev/null @@ -1,21 +0,0 @@ -{% comment -%}Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.{% endcomment -%} -
-
-
- - {% include partials/logo -%} -
-
-
-
- -
-
-
-
-
diff --git a/RWSDocsTemplate/partials/_scripts.liquid b/RWSDocsTemplate/partials/_scripts.liquid deleted file mode 100644 index 6640a85..0000000 --- a/RWSDocsTemplate/partials/_scripts.liquid +++ /dev/null @@ -1,4 +0,0 @@ -{% comment -%}Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.{% endcomment -%} - - - diff --git a/RWSDocsTemplate/partials/_toc.liquid b/RWSDocsTemplate/partials/_toc.liquid deleted file mode 100644 index ea6706e..0000000 --- a/RWSDocsTemplate/partials/_toc.liquid +++ /dev/null @@ -1,7 +0,0 @@ -{% comment -%}Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.{% endcomment -%} -
- {{__global.tocToggleButton}} -
-
-
-
diff --git a/RWSDocsTemplate/partials/breadcrumb.tmpl.partial b/RWSDocsTemplate/partials/breadcrumb.tmpl.partial deleted file mode 100644 index a4d3602..0000000 --- a/RWSDocsTemplate/partials/breadcrumb.tmpl.partial +++ /dev/null @@ -1,11 +0,0 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} - -
-
-
-
    -
  • {{_tocTitle}}
  • -
-
-
-
diff --git a/RWSDocsTemplate/partials/customMREFContent.tmpl.partial b/RWSDocsTemplate/partials/customMREFContent.tmpl.partial deleted file mode 100644 index 67395b8..0000000 --- a/RWSDocsTemplate/partials/customMREFContent.tmpl.partial +++ /dev/null @@ -1,2 +0,0 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} -{{!Add your own custom template for the content for ManagedReference here}} \ No newline at end of file diff --git a/RWSDocsTemplate/partials/head.tmpl.partial b/RWSDocsTemplate/partials/head.tmpl.partial deleted file mode 100644 index 4e8cd79..0000000 --- a/RWSDocsTemplate/partials/head.tmpl.partial +++ /dev/null @@ -1,20 +0,0 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} - - - - - {{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}} - - - - {{#_description}}{{/_description}} - - - - - - - {{#_noindex}}{{/_noindex}} - {{#_enableSearch}}{{/_enableSearch}} - {{#_enableNewTab}}{{/_enableNewTab}} - diff --git a/RWSDocsTemplate/partials/logo.tmpl.partial b/RWSDocsTemplate/partials/logo.tmpl.partial deleted file mode 100644 index 8209615..0000000 --- a/RWSDocsTemplate/partials/logo.tmpl.partial +++ /dev/null @@ -1,5 +0,0 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} - - - {{_appName}} - diff --git a/RWSDocsTemplate/partials/title.tmpl.partial b/RWSDocsTemplate/partials/title.tmpl.partial deleted file mode 100644 index 38c62fe..0000000 --- a/RWSDocsTemplate/partials/title.tmpl.partial +++ /dev/null @@ -1,49 +0,0 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} -{{#inPackage}} -Package {{name.0.value}} -{{/inPackage}} -{{#inNamespace}} -Namespace {{name.0.value}} -{{/inNamespace}} -{{#inClass}} -Class {{name.0.value}} -{{/inClass}} -{{#inStruct}} -Struct {{name.0.value}} -{{/inStruct}} -{{#inInterface}} -Interface {{name.0.value}} -{{/inInterface}} -{{#inEnum}} -Enum {{name.0.value}} -{{/inEnum}} -{{#inDelegate}} -Delegate {{name.0.value}} -{{/inDelegate}} -{{#inConstructor}} -Constructor {{name.0.value}} -{{/inConstructor}} -{{#inField}} -Field {{name.0.value}} -{{/inField}} -{{#inProperty}} -Property {{name.0.value}} -{{/inProperty}} -{{#inMethod}} -Method {{name.0.value}} -{{/inMethod}} -{{#inEvent}} -Event {{name.0.value}} -{{/inEvent}} -{{#inOperator}} -Operator {{name.0.value}} -{{/inOperator}} -{{#inEii}} -Explict Interface Implementation {{name.0.value}} -{{/inEii}} -{{#inVariable}} -Variable {{name.0.value}} -{{/inVariable}} -{{#inTypeAlias}} -Type Alias {{name.0.value}} -{{/inTypeAlias}} \ No newline at end of file diff --git a/RWSDocsTemplate/styles/docfx.vendor.css b/RWSDocsTemplate/styles/docfx.vendor.css deleted file mode 100644 index f20c1cb..0000000 --- a/RWSDocsTemplate/styles/docfx.vendor.css +++ /dev/null @@ -1,8196 +0,0 @@ -/*! - * Bootstrap v3.4.1 (https://getbootstrap.com/) - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -/* COLOR VARIABLES*/ -:root { - --header-bg-color: #fff; - --header-ft-color: #979FB2; - --input-text: #758099; - --highlight-light: #008080; - --highlight-dark: #006666; - --accent-dim: #E6E8ED; - --accent-super-dim: #F4F5F7; - --font-color: #282C36; - --card-box-shadow: 0 1px 2px 0 rgba(61, 65, 68, 0.06), 0 1px 3px 1px rgba(61, 65, 68, 0.16); - --search-box-shadow: 0 1px 2px 0 rgba(41, 45, 48, 0.36), 0 1px 3px 1px rgba(41, 45, 48, 0.46); - --transition: 350ms; -} - -.label, -sub, -sup { - vertical-align: baseline -} - -hr, -img { - border: 0 -} - -body, -figure { - margin: 0 -} - -.btn-group>.btn-group, -.btn-toolbar .btn, -.btn-toolbar .btn-group, -.btn-toolbar .input-group, -.col-xs-1, -.col-xs-10, -.col-xs-11, -.col-xs-12, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9, -.dropdown-menu { - float: left -} - -.navbar-fixed-bottom .navbar-collapse, -.navbar-fixed-top .navbar-collapse, -.pre-scrollable { - max-height: 340px -} - -html { - font-family: sans-serif; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100% -} - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block -} - -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline -} - -audio:not([controls]) { - display: none; - height: 0 -} - -[hidden], -template { - display: none -} - -a { - background-color: transparent -} - -a:active, -a:hover { - outline: 0 -} - -abbr[title] { - border-bottom: none; - -webkit-text-decoration: underline dotted; - -moz-text-decoration: underline dotted; - text-decoration: underline dotted -} - -b, -optgroup, -strong { - font-weight: 700 -} - -dfn { - font-style: italic -} - -h1 { - margin: .67em 0 -} - -mark { - background: #ff0; - color: #000 -} - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative -} - -sup { - top: -.5em -} - -sub { - bottom: -.25em -} - -img { - vertical-align: middle -} - -svg:not(:root) { - overflow: hidden -} - -hr { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0 -} - -pre, -textarea { - overflow: auto -} - -code, -kbd, -pre, -samp { - font-size: 1em -} - -button, -input, -optgroup, -select, -textarea { - color: inherit; - font: inherit; - margin: 0 -} - -.glyphicon, -address { - font-style: normal -} - -button { - overflow: visible -} - -button, -select { - text-transform: none -} - -button, -html input[type=button], -input[type=reset], -input[type=submit] { - -webkit-appearance: button; - cursor: pointer -} - -button[disabled], -html input[disabled] { - cursor: default -} - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0 -} - -input[type=checkbox], -input[type=radio] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0 -} - -input[type=number]::-webkit-inner-spin-button, -input[type=number]::-webkit-outer-spin-button { - height: auto -} - -input[type=search]::-webkit-search-cancel-button, -input[type=search]::-webkit-search-decoration { - -webkit-appearance: none -} - -table { - border-collapse: collapse; - border-spacing: 0 -} - -td, -th { - padding: 0 -} - -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - - blockquote, - img, - pre, - tr { - page-break-inside: avoid - } - - *, - :after, - :before { - color: #000 !important; - text-shadow: none !important; - background: 0 0 !important; - -webkit-box-shadow: none !important; - box-shadow: none !important - } - - a, - a:visited { - text-decoration: underline - } - - a[href]:after { - content: " ("attr(href) ")" - } - - abbr[title]:after { - content: " ("attr(title) ")" - } - - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: "" - } - - blockquote, - pre { - border: 1px solid #999 - } - - thead { - display: table-header-group - } - - img { - max-width: 100% !important - } - - h2, - h3, - p { - orphans: 3; - widows: 3 - } - - h2, - h3 { - page-break-after: avoid - } - - .navbar { - display: none - } - - .btn>.caret, - .dropup>.btn>.caret { - border-top-color: #000 !important - } - - .label { - border: 1px solid #000 - } - - .table { - border-collapse: collapse !important - } - - .table td, - .table th { - background-color: #fff !important - } - - .table-bordered td, - .table-bordered th { - border: 1px solid #ddd !important - } -} - -.img-thumbnail, -body { - background-color: #fff -} - -@font-face { - font-family: "Glyphicons Halflings"; - src: url(../fonts/glyphicons-halflings-regular.eot); - src: url(../fonts/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"), url(../fonts/glyphicons-halflings-regular.woff2) format("woff2"), url(../fonts/glyphicons-halflings-regular.woff) format("woff"), url(../fonts/glyphicons-halflings-regular.ttf) format("truetype"), url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format("svg") -} - -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: "Glyphicons Halflings"; - font-weight: 400; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -.glyphicon-asterisk:before { - content: "\002a" -} - -.glyphicon-plus:before { - content: "\002b" -} - -.glyphicon-eur:before, -.glyphicon-euro:before { - content: "\20ac" -} - -.glyphicon-minus:before { - content: "\2212" -} - -.glyphicon-cloud:before { - content: "\2601" -} - -.glyphicon-envelope:before { - content: "\2709" -} - -.glyphicon-pencil:before { - content: "\270f" -} - -.glyphicon-glass:before { - content: "\e001" -} - -.glyphicon-music:before { - content: "\e002" -} - -.glyphicon-search:before { - content: "\e003" -} - -.glyphicon-heart:before { - content: "\e005" -} - -.glyphicon-star:before { - content: "\e006" -} - -.glyphicon-star-empty:before { - content: "\e007" -} - -.glyphicon-user:before { - content: "\e008" -} - -.glyphicon-film:before { - content: "\e009" -} - -.glyphicon-th-large:before { - content: "\e010" -} - -.glyphicon-th:before { - content: "\e011" -} - -.glyphicon-th-list:before { - content: "\e012" -} - -.glyphicon-ok:before { - content: "\e013" -} - -.glyphicon-remove:before { - content: "\e014" -} - -.glyphicon-zoom-in:before { - content: "\e015" -} - -.glyphicon-zoom-out:before { - content: "\e016" -} - -.glyphicon-off:before { - content: "\e017" -} - -.glyphicon-signal:before { - content: "\e018" -} - -.glyphicon-cog:before { - content: "\e019" -} - -.glyphicon-trash:before { - content: "\e020" -} - -.glyphicon-home:before { - content: "\e021" -} - -.glyphicon-file:before { - content: "\e022" -} - -.glyphicon-time:before { - content: "\e023" -} - -.glyphicon-road:before { - content: "\e024" -} - -.glyphicon-download-alt:before { - content: "\e025" -} - -.glyphicon-download:before { - content: "\e026" -} - -.glyphicon-upload:before { - content: "\e027" -} - -.glyphicon-inbox:before { - content: "\e028" -} - -.glyphicon-play-circle:before { - content: "\e029" -} - -.glyphicon-repeat:before { - content: "\e030" -} - -.glyphicon-refresh:before { - content: "\e031" -} - -.glyphicon-list-alt:before { - content: "\e032" -} - -.glyphicon-lock:before { - content: "\e033" -} - -.glyphicon-flag:before { - content: "\e034" -} - -.glyphicon-headphones:before { - content: "\e035" -} - -.glyphicon-volume-off:before { - content: "\e036" -} - -.glyphicon-volume-down:before { - content: "\e037" -} - -.glyphicon-volume-up:before { - content: "\e038" -} - -.glyphicon-qrcode:before { - content: "\e039" -} - -.glyphicon-barcode:before { - content: "\e040" -} - -.glyphicon-tag:before { - content: "\e041" -} - -.glyphicon-tags:before { - content: "\e042" -} - -.glyphicon-book:before { - content: "\e043" -} - -.glyphicon-bookmark:before { - content: "\e044" -} - -.glyphicon-print:before { - content: "\e045" -} - -.glyphicon-camera:before { - content: "\e046" -} - -.glyphicon-font:before { - content: "\e047" -} - -.glyphicon-bold:before { - content: "\e048" -} - -.glyphicon-italic:before { - content: "\e049" -} - -.glyphicon-text-height:before { - content: "\e050" -} - -.glyphicon-text-width:before { - content: "\e051" -} - -.glyphicon-align-left:before { - content: "\e052" -} - -.glyphicon-align-center:before { - content: "\e053" -} - -.glyphicon-align-right:before { - content: "\e054" -} - -.glyphicon-align-justify:before { - content: "\e055" -} - -.glyphicon-list:before { - content: "\e056" -} - -.glyphicon-indent-left:before { - content: "\e057" -} - -.glyphicon-indent-right:before { - content: "\e058" -} - -.glyphicon-facetime-video:before { - content: "\e059" -} - -.glyphicon-picture:before { - content: "\e060" -} - -.glyphicon-map-marker:before { - content: "\e062" -} - -.glyphicon-adjust:before { - content: "\e063" -} - -.glyphicon-tint:before { - content: "\e064" -} - -.glyphicon-edit:before { - content: "\e065" -} - -.glyphicon-share:before { - content: "\e066" -} - -.glyphicon-check:before { - content: "\e067" -} - -.glyphicon-move:before { - content: "\e068" -} - -.glyphicon-step-backward:before { - content: "\e069" -} - -.glyphicon-fast-backward:before { - content: "\e070" -} - -.glyphicon-backward:before { - content: "\e071" -} - -.glyphicon-play:before { - content: "\e072" -} - -.glyphicon-pause:before { - content: "\e073" -} - -.glyphicon-stop:before { - content: "\e074" -} - -.glyphicon-forward:before { - content: "\e075" -} - -.glyphicon-fast-forward:before { - content: "\e076" -} - -.glyphicon-step-forward:before { - content: "\e077" -} - -.glyphicon-eject:before { - content: "\e078" -} - -.glyphicon-chevron-left:before { - content: "\e079" -} - -.glyphicon-chevron-right:before { - content: "\e080" -} - -.glyphicon-plus-sign:before { - content: "\e081" -} - -.glyphicon-minus-sign:before { - content: "\e082" -} - -.glyphicon-remove-sign:before { - content: "\e083" -} - -.glyphicon-ok-sign:before { - content: "\e084" -} - -.glyphicon-question-sign:before { - content: "\e085" -} - -.glyphicon-info-sign:before { - content: "\e086" -} - -.glyphicon-screenshot:before { - content: "\e087" -} - -.glyphicon-remove-circle:before { - content: "\e088" -} - -.glyphicon-ok-circle:before { - content: "\e089" -} - -.glyphicon-ban-circle:before { - content: "\e090" -} - -.glyphicon-arrow-left:before { - content: "\e091" -} - -.glyphicon-arrow-right:before { - content: "\e092" -} - -.glyphicon-arrow-up:before { - content: "\e093" -} - -.glyphicon-arrow-down:before { - content: "\e094" -} - -.glyphicon-share-alt:before { - content: "\e095" -} - -.glyphicon-resize-full:before { - content: "\e096" -} - -.glyphicon-resize-small:before { - content: "\e097" -} - -.glyphicon-exclamation-sign:before { - content: "\e101" -} - -.glyphicon-gift:before { - content: "\e102" -} - -.glyphicon-leaf:before { - content: "\e103" -} - -.glyphicon-fire:before { - content: "\e104" -} - -.glyphicon-eye-open:before { - content: "\e105" -} - -.glyphicon-eye-close:before { - content: "\e106" -} - -.glyphicon-warning-sign:before { - content: "\e107" -} - -.glyphicon-plane:before { - content: "\e108" -} - -.glyphicon-calendar:before { - content: "\e109" -} - -.glyphicon-random:before { - content: "\e110" -} - -.glyphicon-comment:before { - content: "\e111" -} - -.glyphicon-magnet:before { - content: "\e112" -} - -.glyphicon-chevron-up:before { - content: "\e113" -} - -.glyphicon-chevron-down:before { - content: "\e114" -} - -.glyphicon-retweet:before { - content: "\e115" -} - -.glyphicon-shopping-cart:before { - content: "\e116" -} - -.glyphicon-folder-close:before { - content: "\e117" -} - -.glyphicon-folder-open:before { - content: "\e118" -} - -.glyphicon-resize-vertical:before { - content: "\e119" -} - -.glyphicon-resize-horizontal:before { - content: "\e120" -} - -.glyphicon-hdd:before { - content: "\e121" -} - -.glyphicon-bullhorn:before { - content: "\e122" -} - -.glyphicon-bell:before { - content: "\e123" -} - -.glyphicon-certificate:before { - content: "\e124" -} - -.glyphicon-thumbs-up:before { - content: "\e125" -} - -.glyphicon-thumbs-down:before { - content: "\e126" -} - -.glyphicon-hand-right:before { - content: "\e127" -} - -.glyphicon-hand-left:before { - content: "\e128" -} - -.glyphicon-hand-up:before { - content: "\e129" -} - -.glyphicon-hand-down:before { - content: "\e130" -} - -.glyphicon-circle-arrow-right:before { - content: "\e131" -} - -.glyphicon-circle-arrow-left:before { - content: "\e132" -} - -.glyphicon-circle-arrow-up:before { - content: "\e133" -} - -.glyphicon-circle-arrow-down:before { - content: "\e134" -} - -.glyphicon-globe:before { - content: "\e135" -} - -.glyphicon-wrench:before { - content: "\e136" -} - -.glyphicon-tasks:before { - content: "\e137" -} - -.glyphicon-filter:before { - content: "\e138" -} - -.glyphicon-briefcase:before { - content: "\e139" -} - -.glyphicon-fullscreen:before { - content: "\e140" -} - -.glyphicon-dashboard:before { - content: "\e141" -} - -.glyphicon-paperclip:before { - content: "\e142" -} - -.glyphicon-heart-empty:before { - content: "\e143" -} - -.glyphicon-link:before { - content: "\e144" -} - -.glyphicon-phone:before { - content: "\e145" -} - -.glyphicon-pushpin:before { - content: "\e146" -} - -.glyphicon-usd:before { - content: "\e148" -} - -.glyphicon-gbp:before { - content: "\e149" -} - -.glyphicon-sort:before { - content: "\e150" -} - -.glyphicon-sort-by-alphabet:before { - content: "\e151" -} - -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152" -} - -.glyphicon-sort-by-order:before { - content: "\e153" -} - -.glyphicon-sort-by-order-alt:before { - content: "\e154" -} - -.glyphicon-sort-by-attributes:before { - content: "\e155" -} - -.glyphicon-sort-by-attributes-alt:before { - content: "\e156" -} - -.glyphicon-unchecked:before { - content: "\e157" -} - -.glyphicon-expand:before { - content: "\e158" -} - -.glyphicon-collapse-down:before { - content: "\e159" -} - -.glyphicon-collapse-up:before { - content: "\e160" -} - -.glyphicon-log-in:before { - content: "\e161" -} - -.glyphicon-flash:before { - content: "\e162" -} - -.glyphicon-log-out:before { - content: "\e163" -} - -.glyphicon-new-window:before { - content: "\e164" -} - -.glyphicon-record:before { - content: "\e165" -} - -.glyphicon-save:before { - content: "\e166" -} - -.glyphicon-open:before { - content: "\e167" -} - -.glyphicon-saved:before { - content: "\e168" -} - -.glyphicon-import:before { - content: "\e169" -} - -.glyphicon-export:before { - content: "\e170" -} - -.glyphicon-send:before { - content: "\e171" -} - -.glyphicon-floppy-disk:before { - content: "\e172" -} - -.glyphicon-floppy-saved:before { - content: "\e173" -} - -.glyphicon-floppy-remove:before { - content: "\e174" -} - -.glyphicon-floppy-save:before { - content: "\e175" -} - -.glyphicon-floppy-open:before { - content: "\e176" -} - -.glyphicon-credit-card:before { - content: "\e177" -} - -.glyphicon-transfer:before { - content: "\e178" -} - -.glyphicon-cutlery:before { - content: "\e179" -} - -.glyphicon-header:before { - content: "\e180" -} - -.glyphicon-compressed:before { - content: "\e181" -} - -.glyphicon-earphone:before { - content: "\e182" -} - -.glyphicon-phone-alt:before { - content: "\e183" -} - -.glyphicon-tower:before { - content: "\e184" -} - -.glyphicon-stats:before { - content: "\e185" -} - -.glyphicon-sd-video:before { - content: "\e186" -} - -.glyphicon-hd-video:before { - content: "\e187" -} - -.glyphicon-subtitles:before { - content: "\e188" -} - -.glyphicon-sound-stereo:before { - content: "\e189" -} - -.glyphicon-sound-dolby:before { - content: "\e190" -} - -.glyphicon-sound-5-1:before { - content: "\e191" -} - -.glyphicon-sound-6-1:before { - content: "\e192" -} - -.glyphicon-sound-7-1:before { - content: "\e193" -} - -.glyphicon-copyright-mark:before { - content: "\e194" -} - -.glyphicon-registration-mark:before { - content: "\e195" -} - -.glyphicon-cloud-download:before { - content: "\e197" -} - -.glyphicon-cloud-upload:before { - content: "\e198" -} - -.glyphicon-tree-conifer:before { - content: "\e199" -} - -.glyphicon-tree-deciduous:before { - content: "\e200" -} - -.glyphicon-cd:before { - content: "\e201" -} - -.glyphicon-save-file:before { - content: "\e202" -} - -.glyphicon-open-file:before { - content: "\e203" -} - -.glyphicon-level-up:before { - content: "\e204" -} - -.glyphicon-copy:before { - content: "\e205" -} - -.glyphicon-paste:before { - content: "\e206" -} - -.glyphicon-alert:before { - content: "\e209" -} - -.glyphicon-equalizer:before { - content: "\e210" -} - -.glyphicon-king:before { - content: "\e211" -} - -.glyphicon-queen:before { - content: "\e212" -} - -.glyphicon-pawn:before { - content: "\e213" -} - -.glyphicon-bishop:before { - content: "\e214" -} - -.glyphicon-knight:before { - content: "\e215" -} - -.glyphicon-baby-formula:before { - content: "\e216" -} - -.glyphicon-tent:before { - content: "\26fa" -} - -.glyphicon-blackboard:before { - content: "\e218" -} - -.glyphicon-bed:before { - content: "\e219" -} - -.glyphicon-apple:before { - content: "\f8ff" -} - -.glyphicon-erase:before { - content: "\e221" -} - -.glyphicon-hourglass:before { - content: "\231b" -} - -.glyphicon-lamp:before { - content: "\e223" -} - -.glyphicon-duplicate:before { - content: "\e224" -} - -.glyphicon-piggy-bank:before { - content: "\e225" -} - -.glyphicon-scissors:before { - content: "\e226" -} - -.glyphicon-bitcoin:before, -.glyphicon-btc:before, -.glyphicon-xbt:before { - content: "\e227" -} - -.glyphicon-jpy:before, -.glyphicon-yen:before { - content: "\00a5" -} - -.glyphicon-rub:before, -.glyphicon-ruble:before { - content: "\20bd" -} - -.glyphicon-scale:before { - content: "\e230" -} - -.glyphicon-ice-lolly:before { - content: "\e231" -} - -.glyphicon-ice-lolly-tasted:before { - content: "\e232" -} - -.glyphicon-education:before { - content: "\e233" -} - -.glyphicon-option-horizontal:before { - content: "\e234" -} - -.glyphicon-option-vertical:before { - content: "\e235" -} - -.glyphicon-menu-hamburger:before { - content: "\e236" -} - -.glyphicon-modal-window:before { - content: "\e237" -} - -.glyphicon-oil:before { - content: "\e238" -} - -.glyphicon-grain:before { - content: "\e239" -} - -.glyphicon-sunglasses:before { - content: "\e240" -} - -.glyphicon-text-size:before { - content: "\e241" -} - -.glyphicon-text-color:before { - content: "\e242" -} - -.glyphicon-text-background:before { - content: "\e243" -} - -.glyphicon-object-align-top:before { - content: "\e244" -} - -.glyphicon-object-align-bottom:before { - content: "\e245" -} - -.glyphicon-object-align-horizontal:before { - content: "\e246" -} - -.glyphicon-object-align-left:before { - content: "\e247" -} - -.glyphicon-object-align-vertical:before { - content: "\e248" -} - -.glyphicon-object-align-right:before { - content: "\e249" -} - -.glyphicon-triangle-right:before { - content: "\e250" -} - -.glyphicon-triangle-left:before { - content: "\e251" -} - -.glyphicon-triangle-bottom:before { - content: "\e252" -} - -.glyphicon-triangle-top:before { - content: "\e253" -} - -.glyphicon-console:before { - content: "\e254" -} - -.glyphicon-superscript:before { - content: "\e255" -} - -.glyphicon-subscript:before { - content: "\e256" -} - -.glyphicon-menu-left:before { - content: "\e257" -} - -.glyphicon-menu-right:before { - content: "\e258" -} - -.glyphicon-menu-down:before { - content: "\e259" -} - -.glyphicon-menu-up:before { - content: "\e260" -} - -*, -:after, -:before { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box -} - -html { - font-size: 10px; - -webkit-tap-highlight-color: transparent -} - -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.42857143; - color: #333 -} - -button, -input, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit -} - -a { - color: #337ab7; - text-decoration: none -} - -a:focus, -a:hover { - color: #23527c; - text-decoration: underline -} - -a:focus { - outline: -webkit-focus-ring-color auto 5px; - outline-offset: -2px -} - -.carousel-inner>.item>a>img, -.carousel-inner>.item>img, -.img-responsive, -.thumbnail a>img, -.thumbnail>img { - display: block; - max-width: 100%; - height: auto -} - -.img-rounded { - border-radius: 6px -} - -.img-thumbnail { - padding: 4px; - line-height: 1.42857143; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: all .2s ease-in-out; - -o-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; - display: inline-block; - max-width: 100%; - height: auto -} - -.img-circle { - border-radius: 50% -} - -hr { - margin-top: 20px; - margin-bottom: 20px; - border-top: 1px solid #eee -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0 -} - -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto -} - -[role=button] { - cursor: pointer -} - -.h1, -.h2, -.h3, -.h4, -.h5, -.h6, -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit -} - -.h1 .small, -.h1 small, -.h2 .small, -.h2 small, -.h3 .small, -.h3 small, -.h4 .small, -.h4 small, -.h5 .small, -.h5 small, -.h6 .small, -.h6 small, -h1 .small, -h1 small, -h2 .small, -h2 small, -h3 .small, -h3 small, -h4 .small, -h4 small, -h5 .small, -h5 small, -h6 .small, -h6 small { - font-weight: 400; - line-height: 1; - color: #777 -} - -.h1, -.h2, -.h3, -h1, -h2, -h3 { - margin-top: 20px; - margin-bottom: 10px -} - -.h1 .small, -.h1 small, -.h2 .small, -.h2 small, -.h3 .small, -.h3 small, -h1 .small, -h1 small, -h2 .small, -h2 small, -h3 .small, -h3 small { - font-size: 65% -} - -.h4, -.h5, -.h6, -h4, -h5, -h6 { - margin-top: 10px; - margin-bottom: 10px -} - -.h4 .small, -.h4 small, -.h5 .small, -.h5 small, -.h6 .small, -.h6 small, -h4 .small, -h4 small, -h5 .small, -h5 small, -h6 .small, -h6 small { - font-size: 75% -} - -.h1, -h1 { - font-size: 36px -} - -.h2, -h2 { - font-size: 30px -} - -.h3, -h3 { - font-size: 24px -} - -.h4, -h4 { - font-size: 18px -} - -.h5, -h5 { - font-size: 14px -} - -.h6, -h6 { - font-size: 12px -} - -p { - margin: 0 0 10px -} - -.lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 300; - line-height: 1.4 -} - -dt, -kbd kbd, -label { - font-weight: 700 -} - -address, -blockquote .small, -blockquote footer, -blockquote small, -dd, -dt, -pre { - line-height: 1.42857143 -} - -@media (min-width:768px) { - .lead { - font-size: 21px - } -} - -.small, -small { - font-size: 85% -} - -.mark, -mark { - padding: .2em; - background-color: #fcf8e3 -} - -.list-inline, -.list-unstyled { - padding-left: 0; - list-style: none -} - -.text-left { - text-align: left -} - -.text-right { - text-align: right -} - -.text-center { - text-align: center -} - -.text-justify { - text-align: justify -} - -.text-nowrap { - white-space: nowrap -} - -.text-lowercase { - text-transform: lowercase -} - -.text-uppercase { - text-transform: uppercase -} - -.text-capitalize { - text-transform: capitalize -} - -.text-muted { - color: #777 -} - -.text-primary { - color: #337ab7 -} - -a.text-primary:focus, -a.text-primary:hover { - color: #286090 -} - -.text-success { - color: #3c763d -} - -a.text-success:focus, -a.text-success:hover { - color: #2b542c -} - -.text-info { - color: #31708f -} - -a.text-info:focus, -a.text-info:hover { - color: #245269 -} - -.text-warning { - color: #8a6d3b -} - -a.text-warning:focus, -a.text-warning:hover { - color: #66512c -} - -.text-danger { - color: #a94442 -} - -a.text-danger:focus, -a.text-danger:hover { - color: #843534 -} - -.bg-primary { - color: #fff; - background-color: #337ab7 -} - -a.bg-primary:focus, -a.bg-primary:hover { - background-color: #286090 -} - -.bg-success { - background-color: #dff0d8 -} - -a.bg-success:focus, -a.bg-success:hover { - background-color: #c1e2b3 -} - -.bg-info { - background-color: #d9edf7 -} - -a.bg-info:focus, -a.bg-info:hover { - background-color: #afd9ee -} - -.bg-warning { - background-color: #fcf8e3 -} - -a.bg-warning:focus, -a.bg-warning:hover { - background-color: #f7ecb5 -} - -.bg-danger { - background-color: #f2dede -} - -a.bg-danger:focus, -a.bg-danger:hover { - background-color: #e4b9b9 -} - -pre code, -table { - background-color: transparent -} - -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eee -} - -dl, -ol, -ul { - margin-top: 0 -} - -blockquote ol:last-child, -blockquote p:last-child, -blockquote ul:last-child, -ol ol, -ol ul, -ul ol, -ul ul { - margin-bottom: 0 -} - -address, -dl { - margin-bottom: 20px -} - -ol, -ul { - margin: 1rem 0 2rem 0 -} - -.list-inline { - margin-left: -5px -} - -.list-inline>li { - display: inline-block; - padding-right: 5px; - padding-left: 5px -} - -dd { - margin-left: 0 -} - -@media (min-width:768px) { - .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap - } - - .dl-horizontal dd { - margin-left: 180px - } - - .container { - width: 750px - } -} - -abbr[data-original-title], -abbr[title] { - cursor: help -} - -.checkbox.disabled label, -.form-control[disabled], -.radio.disabled label, -fieldset[disabled] .checkbox label, -fieldset[disabled] .form-control, -fieldset[disabled] .radio label, -fieldset[disabled] input[type=checkbox], -fieldset[disabled] input[type=radio], -input[type=checkbox].disabled, -input[type=checkbox][disabled], -input[type=radio].disabled, -input[type=radio][disabled] { - cursor: not-allowed -} - -.initialism { - font-size: 90%; - text-transform: uppercase -} - -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eee -} - -blockquote .small, -blockquote footer, -blockquote small { - display: block; - font-size: 80%; - color: #777 -} - -legend, -pre { - display: block; - color: #333 -} - -blockquote .small:before, -blockquote footer:before, -blockquote small:before { - content: "\2014 \00A0" -} - -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - text-align: right; - border-right: 5px solid #eee; - border-left: 0 -} - -code, -kbd { - padding: 2px 4px; - font-size: 90% -} - -caption, -th { - text-align: left -} - -.blockquote-reverse .small:before, -.blockquote-reverse footer:before, -.blockquote-reverse small:before, -blockquote.pull-right .small:before, -blockquote.pull-right footer:before, -blockquote.pull-right small:before { - content: "" -} - -.blockquote-reverse .small:after, -.blockquote-reverse footer:after, -.blockquote-reverse small:after, -blockquote.pull-right .small:after, -blockquote.pull-right footer:after, -blockquote.pull-right small:after { - content: "\00A0 \2014" -} - -code, -kbd, -pre, -samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace -} - -code { - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px -} - -kbd { - color: #fff; - background-color: #333; - border-radius: 3px; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25) -} - -kbd kbd { - padding: 0; - font-size: 100%; - -webkit-box-shadow: none; - box-shadow: none -} - -pre { - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - word-break: break-all; - word-wrap: break-word; - background-color: #f5f5f5; - border: 1px solid #ccc; - border-radius: 4px -} - -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - border-radius: 0 -} - -.container, -.container-fluid { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto -} - -.pre-scrollable { - overflow-y: scroll -} - -@media (min-width:992px) { - .container { - width: 970px - } -} - -@media (min-width:1200px) { - .container { - width: 1170px - } -} - -.row { - margin-right: -15px; - margin-left: -15px -} - -.row-no-gutters { - margin-right: 0; - margin-left: 0 -} - -.row-no-gutters [class*=col-] { - padding-right: 0; - padding-left: 0 -} - -.col-lg-1, -.col-lg-10, -.col-lg-11, -.col-lg-12, -.col-lg-2, -.col-lg-3, -.col-lg-4, -.col-lg-5, -.col-lg-6, -.col-lg-7, -.col-lg-8, -.col-lg-9, -.col-md-1, -.col-md-10, -.col-md-11, -.col-md-12, -.col-md-2, -.col-md-3, -.col-md-4, -.col-md-5, -.col-md-6, -.col-md-7, -.col-md-8, -.col-md-9, -.col-sm-1, -.col-sm-10, -.col-sm-11, -.col-sm-12, -.col-sm-2, -.col-sm-3, -.col-sm-4, -.col-sm-5, -.col-sm-6, -.col-sm-7, -.col-sm-8, -.col-sm-9, -.col-xs-1, -.col-xs-10, -.col-xs-11, -.col-xs-12, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9 { - position: relative; - min-height: 1px; - padding-right: 15px; - padding-left: 15px -} - -.col-xs-12 { - width: 100% -} - -.col-xs-11 { - width: 91.66666667% -} - -.col-xs-10 { - width: 83.33333333% -} - -.col-xs-9 { - width: 75% -} - -.col-xs-8 { - width: 66.66666667% -} - -.col-xs-7 { - width: 58.33333333% -} - -.col-xs-6 { - width: 50% -} - -.col-xs-5 { - width: 41.66666667% -} - -.col-xs-4 { - width: 33.33333333% -} - -.col-xs-3 { - width: 25% -} - -.col-xs-2 { - width: 16.66666667% -} - -.col-xs-1 { - width: 8.33333333% -} - -.col-xs-pull-12 { - right: 100% -} - -.col-xs-pull-11 { - right: 91.66666667% -} - -.col-xs-pull-10 { - right: 83.33333333% -} - -.col-xs-pull-9 { - right: 75% -} - -.col-xs-pull-8 { - right: 66.66666667% -} - -.col-xs-pull-7 { - right: 58.33333333% -} - -.col-xs-pull-6 { - right: 50% -} - -.col-xs-pull-5 { - right: 41.66666667% -} - -.col-xs-pull-4 { - right: 33.33333333% -} - -.col-xs-pull-3 { - right: 25% -} - -.col-xs-pull-2 { - right: 16.66666667% -} - -.col-xs-pull-1 { - right: 8.33333333% -} - -.col-xs-pull-0 { - right: auto -} - -.col-xs-push-12 { - left: 100% -} - -.col-xs-push-11 { - left: 91.66666667% -} - -.col-xs-push-10 { - left: 83.33333333% -} - -.col-xs-push-9 { - left: 75% -} - -.col-xs-push-8 { - left: 66.66666667% -} - -.col-xs-push-7 { - left: 58.33333333% -} - -.col-xs-push-6 { - left: 50% -} - -.col-xs-push-5 { - left: 41.66666667% -} - -.col-xs-push-4 { - left: 33.33333333% -} - -.col-xs-push-3 { - left: 25% -} - -.col-xs-push-2 { - left: 16.66666667% -} - -.col-xs-push-1 { - left: 8.33333333% -} - -.col-xs-push-0 { - left: auto -} - -.col-xs-offset-12 { - margin-left: 100% -} - -.col-xs-offset-11 { - margin-left: 91.66666667% -} - -.col-xs-offset-10 { - margin-left: 83.33333333% -} - -.col-xs-offset-9 { - margin-left: 75% -} - -.col-xs-offset-8 { - margin-left: 66.66666667% -} - -.col-xs-offset-7 { - margin-left: 58.33333333% -} - -.col-xs-offset-6 { - margin-left: 50% -} - -.col-xs-offset-5 { - margin-left: 41.66666667% -} - -.col-xs-offset-4 { - margin-left: 33.33333333% -} - -.col-xs-offset-3 { - margin-left: 25% -} - -.col-xs-offset-2 { - margin-left: 16.66666667% -} - -.col-xs-offset-1 { - margin-left: 8.33333333% -} - -.col-xs-offset-0 { - margin-left: 0 -} - -@media (min-width:768px) { - - .col-sm-1, - .col-sm-10, - .col-sm-11, - .col-sm-12, - .col-sm-2, - .col-sm-3, - .col-sm-4, - .col-sm-5, - .col-sm-6, - .col-sm-7, - .col-sm-8, - .col-sm-9 { - float: left - } - - .col-sm-12 { - width: 100% - } - - .col-sm-11 { - width: 91.66666667% - } - - .col-sm-10 { - width: 83.33333333% - } - - .col-sm-9 { - width: 75% - } - - .col-sm-8 { - width: 66.66666667% - } - - .col-sm-7 { - width: 58.33333333% - } - - .col-sm-6 { - width: 50% - } - - .col-sm-5 { - width: 41.66666667% - } - - .col-sm-4 { - width: 33.33333333% - } - - .col-sm-3 { - width: 25% - } - - .col-sm-2 { - width: 16.66666667% - } - - .col-sm-1 { - width: 8.33333333% - } - - .col-sm-pull-12 { - right: 100% - } - - .col-sm-pull-11 { - right: 91.66666667% - } - - .col-sm-pull-10 { - right: 83.33333333% - } - - .col-sm-pull-9 { - right: 75% - } - - .col-sm-pull-8 { - right: 66.66666667% - } - - .col-sm-pull-7 { - right: 58.33333333% - } - - .col-sm-pull-6 { - right: 50% - } - - .col-sm-pull-5 { - right: 41.66666667% - } - - .col-sm-pull-4 { - right: 33.33333333% - } - - .col-sm-pull-3 { - right: 25% - } - - .col-sm-pull-2 { - right: 16.66666667% - } - - .col-sm-pull-1 { - right: 8.33333333% - } - - .col-sm-pull-0 { - right: auto - } - - .col-sm-push-12 { - left: 100% - } - - .col-sm-push-11 { - left: 91.66666667% - } - - .col-sm-push-10 { - left: 83.33333333% - } - - .col-sm-push-9 { - left: 75% - } - - .col-sm-push-8 { - left: 66.66666667% - } - - .col-sm-push-7 { - left: 58.33333333% - } - - .col-sm-push-6 { - left: 50% - } - - .col-sm-push-5 { - left: 41.66666667% - } - - .col-sm-push-4 { - left: 33.33333333% - } - - .col-sm-push-3 { - left: 25% - } - - .col-sm-push-2 { - left: 16.66666667% - } - - .col-sm-push-1 { - left: 8.33333333% - } - - .col-sm-push-0 { - left: auto - } - - .col-sm-offset-12 { - margin-left: 100% - } - - .col-sm-offset-11 { - margin-left: 91.66666667% - } - - .col-sm-offset-10 { - margin-left: 83.33333333% - } - - .col-sm-offset-9 { - margin-left: 75% - } - - .col-sm-offset-8 { - margin-left: 66.66666667% - } - - .col-sm-offset-7 { - margin-left: 58.33333333% - } - - .col-sm-offset-6 { - margin-left: 50% - } - - .col-sm-offset-5 { - margin-left: 41.66666667% - } - - .col-sm-offset-4 { - margin-left: 33.33333333% - } - - .col-sm-offset-3 { - margin-left: 25% - } - - .col-sm-offset-2 { - margin-left: 16.66666667% - } - - .col-sm-offset-1 { - margin-left: 8.33333333% - } - - .col-sm-offset-0 { - margin-left: 0 - } -} - -@media (min-width:992px) { - - .col-md-1, - .col-md-10, - .col-md-11, - .col-md-12, - .col-md-2, - .col-md-3, - .col-md-4, - .col-md-5, - .col-md-6, - .col-md-7, - .col-md-8, - .col-md-9 { - float: left - } - - .col-md-12 { - width: 100% - } - - .col-md-11 { - width: 91.66666667% - } - - .col-md-10 { - width: 83.33333333% - } - - .col-md-9 { - width: 75% - } - - .col-md-8 { - width: 66.66666667% - } - - .col-md-7 { - width: 58.33333333% - } - - .col-md-6 { - width: 50% - } - - .col-md-5 { - width: 41.66666667% - } - - .col-md-4 { - width: 33.33333333% - } - - .col-md-3 { - width: 25% - } - - .col-md-2 { - width: 16.66666667% - } - - .col-md-1 { - width: 8.33333333% - } - - .col-md-pull-12 { - right: 100% - } - - .col-md-pull-11 { - right: 91.66666667% - } - - .col-md-pull-10 { - right: 83.33333333% - } - - .col-md-pull-9 { - right: 75% - } - - .col-md-pull-8 { - right: 66.66666667% - } - - .col-md-pull-7 { - right: 58.33333333% - } - - .col-md-pull-6 { - right: 50% - } - - .col-md-pull-5 { - right: 41.66666667% - } - - .col-md-pull-4 { - right: 33.33333333% - } - - .col-md-pull-3 { - right: 25% - } - - .col-md-pull-2 { - right: 16.66666667% - } - - .col-md-pull-1 { - right: 8.33333333% - } - - .col-md-pull-0 { - right: auto - } - - .col-md-push-12 { - left: 100% - } - - .col-md-push-11 { - left: 91.66666667% - } - - .col-md-push-10 { - left: 83.33333333% - } - - .col-md-push-9 { - left: 75% - } - - .col-md-push-8 { - left: 66.66666667% - } - - .col-md-push-7 { - left: 58.33333333% - } - - .col-md-push-6 { - left: 50% - } - - .col-md-push-5 { - left: 41.66666667% - } - - .col-md-push-4 { - left: 33.33333333% - } - - .col-md-push-3 { - left: 25% - } - - .col-md-push-2 { - left: 16.66666667% - } - - .col-md-push-1 { - left: 8.33333333% - } - - .col-md-push-0 { - left: auto - } - - .col-md-offset-12 { - margin-left: 100% - } - - .col-md-offset-11 { - margin-left: 91.66666667% - } - - .col-md-offset-10 { - margin-left: 83.33333333% - } - - .col-md-offset-9 { - margin-left: 75% - } - - .col-md-offset-8 { - margin-left: 66.66666667% - } - - .col-md-offset-7 { - margin-left: 58.33333333% - } - - .col-md-offset-6 { - margin-left: 50% - } - - .col-md-offset-5 { - margin-left: 41.66666667% - } - - .col-md-offset-4 { - margin-left: 33.33333333% - } - - .col-md-offset-3 { - margin-left: 25% - } - - .col-md-offset-2 { - margin-left: 16.66666667% - } - - .col-md-offset-1 { - margin-left: 8.33333333% - } - - .col-md-offset-0 { - margin-left: 0 - } -} - -@media (min-width:1200px) { - - .col-lg-1, - .col-lg-10, - .col-lg-11, - .col-lg-12, - .col-lg-2, - .col-lg-3, - .col-lg-4, - .col-lg-5, - .col-lg-6, - .col-lg-7, - .col-lg-8, - .col-lg-9 { - float: left - } - - .col-lg-12 { - width: 100% - } - - .col-lg-11 { - width: 91.66666667% - } - - .col-lg-10 { - width: 83.33333333% - } - - .col-lg-9 { - width: 75% - } - - .col-lg-8 { - width: 66.66666667% - } - - .col-lg-7 { - width: 58.33333333% - } - - .col-lg-6 { - width: 50% - } - - .col-lg-5 { - width: 41.66666667% - } - - .col-lg-4 { - width: 33.33333333% - } - - .col-lg-3 { - width: 25% - } - - .col-lg-2 { - width: 16.66666667% - } - - .col-lg-1 { - width: 8.33333333% - } - - .col-lg-pull-12 { - right: 100% - } - - .col-lg-pull-11 { - right: 91.66666667% - } - - .col-lg-pull-10 { - right: 83.33333333% - } - - .col-lg-pull-9 { - right: 75% - } - - .col-lg-pull-8 { - right: 66.66666667% - } - - .col-lg-pull-7 { - right: 58.33333333% - } - - .col-lg-pull-6 { - right: 50% - } - - .col-lg-pull-5 { - right: 41.66666667% - } - - .col-lg-pull-4 { - right: 33.33333333% - } - - .col-lg-pull-3 { - right: 25% - } - - .col-lg-pull-2 { - right: 16.66666667% - } - - .col-lg-pull-1 { - right: 8.33333333% - } - - .col-lg-pull-0 { - right: auto - } - - .col-lg-push-12 { - left: 100% - } - - .col-lg-push-11 { - left: 91.66666667% - } - - .col-lg-push-10 { - left: 83.33333333% - } - - .col-lg-push-9 { - left: 75% - } - - .col-lg-push-8 { - left: 66.66666667% - } - - .col-lg-push-7 { - left: 58.33333333% - } - - .col-lg-push-6 { - left: 50% - } - - .col-lg-push-5 { - left: 41.66666667% - } - - .col-lg-push-4 { - left: 33.33333333% - } - - .col-lg-push-3 { - left: 25% - } - - .col-lg-push-2 { - left: 16.66666667% - } - - .col-lg-push-1 { - left: 8.33333333% - } - - .col-lg-push-0 { - left: auto - } - - .col-lg-offset-12 { - margin-left: 100% - } - - .col-lg-offset-11 { - margin-left: 91.66666667% - } - - .col-lg-offset-10 { - margin-left: 83.33333333% - } - - .col-lg-offset-9 { - margin-left: 75% - } - - .col-lg-offset-8 { - margin-left: 66.66666667% - } - - .col-lg-offset-7 { - margin-left: 58.33333333% - } - - .col-lg-offset-6 { - margin-left: 50% - } - - .col-lg-offset-5 { - margin-left: 41.66666667% - } - - .col-lg-offset-4 { - margin-left: 33.33333333% - } - - .col-lg-offset-3 { - margin-left: 25% - } - - .col-lg-offset-2 { - margin-left: 16.66666667% - } - - .col-lg-offset-1 { - margin-left: 8.33333333% - } - - .col-lg-offset-0 { - margin-left: 0 - } -} - -table col[class*=col-] { - position: static; - display: table-column; - float: none -} - -table td[class*=col-], -table th[class*=col-] { - position: static; - display: table-cell; - float: none -} - -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777 -} - -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px -} - -.table>tbody>tr>td, -.table>tbody>tr>th, -.table>tfoot>tr>td, -.table>tfoot>tr>th, -.table>thead>tr>td, -.table>thead>tr>th { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #ddd -} - -.table>thead>tr>th { - vertical-align: bottom; - border-bottom: 2px solid #ddd -} - -.table>caption+thead>tr:first-child>td, -.table>caption+thead>tr:first-child>th, -.table>colgroup+thead>tr:first-child>td, -.table>colgroup+thead>tr:first-child>th, -.table>thead:first-child>tr:first-child>td, -.table>thead:first-child>tr:first-child>th { - border-top: 0 -} - -.table>tbody+tbody { - border-top: 2px solid #ddd -} - -.table .table { - background-color: #fff -} - -.table-condensed>tbody>tr>td, -.table-condensed>tbody>tr>th, -.table-condensed>tfoot>tr>td, -.table-condensed>tfoot>tr>th, -.table-condensed>thead>tr>td, -.table-condensed>thead>tr>th { - padding: 5px -} - -.table-bordered, -.table-bordered>tbody>tr>td, -.table-bordered>tbody>tr>th, -.table-bordered>tfoot>tr>td, -.table-bordered>tfoot>tr>th, -.table-bordered>thead>tr>td, -.table-bordered>thead>tr>th { - border: 1px solid #ddd -} - -.table-bordered>thead>tr>td, -.table-bordered>thead>tr>th { - border-bottom-width: 2px -} - -.table-striped>tbody>tr:nth-of-type(odd) { - background-color: #f9f9f9 -} - -.table-hover>tbody>tr:hover, -.table>tbody>tr.active>td, -.table>tbody>tr.active>th, -.table>tbody>tr>td.active, -.table>tbody>tr>th.active, -.table>tfoot>tr.active>td, -.table>tfoot>tr.active>th, -.table>tfoot>tr>td.active, -.table>tfoot>tr>th.active, -.table>thead>tr.active>td, -.table>thead>tr.active>th, -.table>thead>tr>td.active, -.table>thead>tr>th.active { - background-color: #f5f5f5 -} - -.table-hover>tbody>tr.active:hover>td, -.table-hover>tbody>tr.active:hover>th, -.table-hover>tbody>tr:hover>.active, -.table-hover>tbody>tr>td.active:hover, -.table-hover>tbody>tr>th.active:hover { - background-color: #e8e8e8 -} - -.table>tbody>tr.success>td, -.table>tbody>tr.success>th, -.table>tbody>tr>td.success, -.table>tbody>tr>th.success, -.table>tfoot>tr.success>td, -.table>tfoot>tr.success>th, -.table>tfoot>tr>td.success, -.table>tfoot>tr>th.success, -.table>thead>tr.success>td, -.table>thead>tr.success>th, -.table>thead>tr>td.success, -.table>thead>tr>th.success { - background-color: #dff0d8 -} - -.table-hover>tbody>tr.success:hover>td, -.table-hover>tbody>tr.success:hover>th, -.table-hover>tbody>tr:hover>.success, -.table-hover>tbody>tr>td.success:hover, -.table-hover>tbody>tr>th.success:hover { - background-color: #d0e9c6 -} - -.table>tbody>tr.info>td, -.table>tbody>tr.info>th, -.table>tbody>tr>td.info, -.table>tbody>tr>th.info, -.table>tfoot>tr.info>td, -.table>tfoot>tr.info>th, -.table>tfoot>tr>td.info, -.table>tfoot>tr>th.info, -.table>thead>tr.info>td, -.table>thead>tr.info>th, -.table>thead>tr>td.info, -.table>thead>tr>th.info { - background-color: #d9edf7 -} - -.table-hover>tbody>tr.info:hover>td, -.table-hover>tbody>tr.info:hover>th, -.table-hover>tbody>tr:hover>.info, -.table-hover>tbody>tr>td.info:hover, -.table-hover>tbody>tr>th.info:hover { - background-color: #c4e3f3 -} - -.table>tbody>tr.warning>td, -.table>tbody>tr.warning>th, -.table>tbody>tr>td.warning, -.table>tbody>tr>th.warning, -.table>tfoot>tr.warning>td, -.table>tfoot>tr.warning>th, -.table>tfoot>tr>td.warning, -.table>tfoot>tr>th.warning, -.table>thead>tr.warning>td, -.table>thead>tr.warning>th, -.table>thead>tr>td.warning, -.table>thead>tr>th.warning { - background-color: #fcf8e3 -} - -.table-hover>tbody>tr.warning:hover>td, -.table-hover>tbody>tr.warning:hover>th, -.table-hover>tbody>tr:hover>.warning, -.table-hover>tbody>tr>td.warning:hover, -.table-hover>tbody>tr>th.warning:hover { - background-color: #faf2cc -} - -.table>tbody>tr.danger>td, -.table>tbody>tr.danger>th, -.table>tbody>tr>td.danger, -.table>tbody>tr>th.danger, -.table>tfoot>tr.danger>td, -.table>tfoot>tr.danger>th, -.table>tfoot>tr>td.danger, -.table>tfoot>tr>th.danger, -.table>thead>tr.danger>td, -.table>thead>tr.danger>th, -.table>thead>tr>td.danger, -.table>thead>tr>th.danger { - background-color: #f2dede -} - -.table-hover>tbody>tr.danger:hover>td, -.table-hover>tbody>tr.danger:hover>th, -.table-hover>tbody>tr:hover>.danger, -.table-hover>tbody>tr>td.danger:hover, -.table-hover>tbody>tr>th.danger:hover { - background-color: #ebcccc -} - -.table-responsive { - min-height: .01%; - overflow-x: auto -} - -.checkbox label, -.radio label, -.well { - min-height: 20px -} - -@media screen and (max-width:767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #ddd - } - - .table-responsive>.table { - margin-bottom: 0 - } - - .table-responsive>.table>tbody>tr>td, - .table-responsive>.table>tbody>tr>th, - .table-responsive>.table>tfoot>tr>td, - .table-responsive>.table>tfoot>tr>th, - .table-responsive>.table>thead>tr>td, - .table-responsive>.table>thead>tr>th { - white-space: nowrap - } - - .table-responsive>.table-bordered { - border: 0 - } - - .table-responsive>.table-bordered>tbody>tr>td:first-child, - .table-responsive>.table-bordered>tbody>tr>th:first-child, - .table-responsive>.table-bordered>tfoot>tr>td:first-child, - .table-responsive>.table-bordered>tfoot>tr>th:first-child, - .table-responsive>.table-bordered>thead>tr>td:first-child, - .table-responsive>.table-bordered>thead>tr>th:first-child { - border-left: 0 - } - - .table-responsive>.table-bordered>tbody>tr>td:last-child, - .table-responsive>.table-bordered>tbody>tr>th:last-child, - .table-responsive>.table-bordered>tfoot>tr>td:last-child, - .table-responsive>.table-bordered>tfoot>tr>th:last-child, - .table-responsive>.table-bordered>thead>tr>td:last-child, - .table-responsive>.table-bordered>thead>tr>th:last-child { - border-right: 0 - } - - .table-responsive>.table-bordered>tbody>tr:last-child>td, - .table-responsive>.table-bordered>tbody>tr:last-child>th, - .table-responsive>.table-bordered>tfoot>tr:last-child>td, - .table-responsive>.table-bordered>tfoot>tr:last-child>th { - border-bottom: 0 - } -} - -fieldset, -legend { - padding: 0; - border: 0 -} - -fieldset { - min-width: 0; - margin: 0 -} - -legend { - width: 100%; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - border-bottom: 1px solid #e5e5e5 -} - -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px -} - -input[type=search] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -input[type=checkbox], -input[type=radio] { - margin: 4px 0 0; - margin-top: 1px\9; - line-height: normal -} - -.form-control, -output { - font-size: 14px; - line-height: 1.42857143; - color: #555; - display: block -} - -input[type=file] { - display: block -} - -input[type=range] { - display: block; - width: 100% -} - -select[multiple], -select[size] { - height: auto -} - -input[type=file]:focus, -input[type=checkbox]:focus, -input[type=radio]:focus { - outline: -webkit-focus-ring-color auto 5px; - outline-offset: -2px -} - -output { - padding-top: 7px -} - -.form-control { - width: 100%; - height: 34px; - padding: 6px 12px; - background-color: #fff; - background-image: none; - border-width: 1px; - border-style: solid; - border-color: var(--accent-dim); - border-radius: 5px; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s -} - -.form-control:focus { - border-color: var(--header-ft-color); - outline: 0; -} - -.form-control::-moz-placeholder { - color: var(--header-ft-color); - font-style: italic; - opacity: 1 -} - -.form-control:-ms-input-placeholder { - color: var(--header-ft-color); - font-style: italic; -} - -.form-control::-webkit-input-placeholder { - color: var(--header-ft-color); - font-style: italic; -} - -.has-success .checkbox, -.has-success .checkbox-inline, -.has-success .control-label, -.has-success .form-control-feedback, -.has-success .help-block, -.has-success .radio, -.has-success .radio-inline, -.has-success.checkbox label, -.has-success.checkbox-inline label, -.has-success.radio label, -.has-success.radio-inline label { - color: #3c763d -} - -.form-control::-ms-expand { - background-color: transparent; - border: 0 -} - -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #eee; - opacity: 1 -} - -textarea.form-control { - height: auto -} - -@media screen and (-webkit-min-device-pixel-ratio:0) { - - input[type=date].form-control, - input[type=time].form-control, - input[type=datetime-local].form-control, - input[type=month].form-control { - line-height: 34px - } - - .input-group-sm input[type=date], - .input-group-sm input[type=time], - .input-group-sm input[type=datetime-local], - .input-group-sm input[type=month], - input[type=date].input-sm, - input[type=time].input-sm, - input[type=datetime-local].input-sm, - input[type=month].input-sm { - line-height: 30px - } - - .input-group-lg input[type=date], - .input-group-lg input[type=time], - .input-group-lg input[type=datetime-local], - .input-group-lg input[type=month], - input[type=date].input-lg, - input[type=time].input-lg, - input[type=datetime-local].input-lg, - input[type=month].input-lg { - line-height: 46px - } -} - -.form-group { - margin-bottom: 15px -} - -.checkbox, -.radio { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px -} - -.checkbox label, -.checkbox-inline, -.radio label, -.radio-inline { - padding-left: 20px; - cursor: pointer; - margin-bottom: 0; - font-weight: 400 -} - -.checkbox input[type=checkbox], -.checkbox-inline input[type=checkbox], -.radio input[type=radio], -.radio-inline input[type=radio] { - position: absolute; - margin-top: 4px\9; - margin-left: -20px -} - -.checkbox+.checkbox, -.radio+.radio { - margin-top: -5px -} - -.checkbox-inline, -.radio-inline { - position: relative; - display: inline-block; - vertical-align: middle -} - -.checkbox-inline.disabled, -.radio-inline.disabled, -fieldset[disabled] .checkbox-inline, -fieldset[disabled] .radio-inline { - cursor: not-allowed -} - -.checkbox-inline+.checkbox-inline, -.radio-inline+.radio-inline { - margin-top: 0; - margin-left: 10px -} - -.form-control-static { - min-height: 34px; - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0 -} - -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-right: 0; - padding-left: 0 -} - -.form-group-sm .form-control, -.input-sm { - padding: 5px 10px; - border-radius: 3px; - font-size: 12px -} - -.input-sm { - height: 30px; - line-height: 1.5 -} - -select.input-sm { - height: 30px; - line-height: 30px -} - -select[multiple].input-sm, -textarea.input-sm { - height: auto -} - -.form-group-sm .form-control { - height: 30px; - line-height: 1.5 -} - -.form-group-lg .form-control, -.input-lg { - border-radius: 6px; - padding: 10px 16px; - font-size: 18px -} - -.form-group-sm select.form-control { - height: 30px; - line-height: 30px -} - -.form-group-sm select[multiple].form-control, -.form-group-sm textarea.form-control { - height: auto -} - -.form-group-sm .form-control-static { - height: 30px; - min-height: 32px; - padding: 6px 10px; - font-size: 12px; - line-height: 1.5 -} - -.input-lg { - height: 46px; - line-height: 1.3333333 -} - -select.input-lg { - height: 46px; - line-height: 46px -} - -select[multiple].input-lg, -textarea.input-lg { - height: auto -} - -.form-group-lg .form-control { - height: 46px; - line-height: 1.3333333 -} - -.form-group-lg select.form-control { - height: 46px; - line-height: 46px -} - -.form-group-lg select[multiple].form-control, -.form-group-lg textarea.form-control { - height: auto -} - -.form-group-lg .form-control-static { - height: 46px; - min-height: 38px; - padding: 11px 16px; - font-size: 18px; - line-height: 1.3333333 -} - -.has-feedback { - position: relative -} - -.has-feedback .form-control { - padding-right: 42.5px -} - -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; - pointer-events: none -} - -.collapsing, -.dropdown, -.dropup { - position: relative -} - -.form-group-lg .form-control+.form-control-feedback, -.input-group-lg+.form-control-feedback, -.input-lg+.form-control-feedback { - width: 46px; - height: 46px; - line-height: 46px -} - -.form-group-sm .form-control+.form-control-feedback, -.input-group-sm+.form-control-feedback, -.input-sm+.form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px -} - -.has-success .form-control { - border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075) -} - -.has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168 -} - -.has-success .input-group-addon { - color: #3c763d; - background-color: #dff0d8; - border-color: #3c763d -} - -.has-warning .checkbox, -.has-warning .checkbox-inline, -.has-warning .control-label, -.has-warning .form-control-feedback, -.has-warning .help-block, -.has-warning .radio, -.has-warning .radio-inline, -.has-warning.checkbox label, -.has-warning.checkbox-inline label, -.has-warning.radio label, -.has-warning.radio-inline label { - color: #8a6d3b -} - -.has-warning .form-control { - border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075) -} - -.has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b -} - -.has-warning .input-group-addon { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #8a6d3b -} - -.has-error .checkbox, -.has-error .checkbox-inline, -.has-error .control-label, -.has-error .form-control-feedback, -.has-error .help-block, -.has-error .radio, -.has-error .radio-inline, -.has-error.checkbox label, -.has-error.checkbox-inline label, -.has-error.radio label, -.has-error.radio-inline label { - color: #a94442 -} - -.has-error .form-control { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075) -} - -.has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483 -} - -.has-error .input-group-addon { - color: #a94442; - background-color: #f2dede; - border-color: #a94442 -} - -.has-feedback label~.form-control-feedback { - top: 25px -} - -.has-feedback label.sr-only~.form-control-feedback { - top: 0 -} - -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373 -} - -@media (min-width:768px) { - - .form-inline .form-control-static, - .form-inline .form-group { - display: inline-block - } - - .form-inline .control-label, - .form-inline .form-group { - margin-bottom: 0; - vertical-align: middle - } - - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle - } - - .form-inline .input-group { - display: inline-table; - vertical-align: middle - } - - .form-inline .input-group .form-control, - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn { - width: auto - } - - .form-inline .input-group>.form-control { - width: 100% - } - - .form-inline .checkbox, - .form-inline .radio { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle - } - - .form-inline .checkbox label, - .form-inline .radio label { - padding-left: 0 - } - - .form-inline .checkbox input[type=checkbox], - .form-inline .radio input[type=radio] { - position: relative; - margin-left: 0 - } - - .form-inline .has-feedback .form-control-feedback { - top: 0 - } - - .form-horizontal .control-label { - padding-top: 7px; - margin-bottom: 0; - text-align: right - } -} - -.form-horizontal .checkbox, -.form-horizontal .checkbox-inline, -.form-horizontal .radio, -.form-horizontal .radio-inline { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0 -} - -.form-horizontal .checkbox, -.form-horizontal .radio { - min-height: 27px -} - -.form-horizontal .form-group { - margin-right: -15px; - margin-left: -15px -} - -.form-horizontal .has-feedback .form-control-feedback { - right: 15px -} - -@media (min-width:768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 11px; - font-size: 18px - } - - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - font-size: 12px - } -} - -.btn { - display: inline-block; - margin-bottom: 0; - font-weight: 400; - text-align: center; - white-space: nowrap; - vertical-align: middle; - -ms-touch-action: manipulation; - touch-action: manipulation; - cursor: pointer; - color: var(--highlight-light); - background-image: none; - border: 1px solid var(--highlight-light); - background-color: #fff; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - border-radius: 5px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none -} - -.btn.active.focus, -.btn.active:focus, -.btn:active.focus, -.btn:active:focus { - background-image: none; - outline: 0; - color: #fff; - background-color: var(--highlight-light); - -webkit-box-shadow: none; - box-shadow: none; -} - -.btn.focus, -.btn:focus, -.btn:hover { - color: var(--highlight-dark); - border-color: var(--highlight-dark); - text-decoration: none -} - -.btn.active, -.btn:active { - background-image: none; - outline: 0; - color: #fff; - background-color: var(--highlight-dark); - -webkit-box-shadow: none; - box-shadow: none; -} - -.btn.collapse { - background-image: none; - outline: 0; - color: var(--highlight-light); - background-color: #fff; - border-color: var(--highlight-light); - -webkit-box-shadow: none; - box-shadow: none; -} - -.btn.collapse[aria-expanded="true"] { - background-image: none; - outline: 0; - color: #fff; - background-color: var(--highlight-light); - -webkit-box-shadow: none; - box-shadow: none; -} - -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - filter: alpha(opacity=65); - opacity: .65; - -webkit-box-shadow: none; - box-shadow: none -} - -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none -} - -.btn-default { - color: #333; - background-color: #fff; - border-color: #ccc -} - -.btn-default.focus, -.btn-default:focus { - color: #333; - background-color: #e6e6e6; - border-color: #8c8c8c -} - -.btn-default:hover { - color: #333; - background-color: #e6e6e6; - border-color: #adadad -} - -.btn-default.active, -.btn-default:active, -.open>.dropdown-toggle.btn-default { - color: #333; - background-color: #e6e6e6; - background-image: none; - border-color: #adadad -} - -.btn-default.active.focus, -.btn-default.active:focus, -.btn-default.active:hover, -.btn-default:active.focus, -.btn-default:active:focus, -.btn-default:active:hover, -.open>.dropdown-toggle.btn-default.focus, -.open>.dropdown-toggle.btn-default:focus, -.open>.dropdown-toggle.btn-default:hover { - color: #333; - background-color: #d4d4d4; - border-color: #8c8c8c -} - -.btn-default.disabled.focus, -.btn-default.disabled:focus, -.btn-default.disabled:hover, -.btn-default[disabled].focus, -.btn-default[disabled]:focus, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default.focus, -fieldset[disabled] .btn-default:focus, -fieldset[disabled] .btn-default:hover { - background-color: #fff; - border-color: #ccc -} - -.btn-default .badge { - color: #fff; - background-color: #333 -} - -.btn-primary { - color: #fff; - background-color: #337ab7; - border-color: #2e6da4 -} - -.btn-primary.focus, -.btn-primary:focus { - color: #fff; - background-color: #286090; - border-color: #122b40 -} - -.btn-primary:hover { - color: #fff; - background-color: #286090; - border-color: #204d74 -} - -.btn-primary.active, -.btn-primary:active, -.open>.dropdown-toggle.btn-primary { - color: #fff; - background-color: #286090; - background-image: none; - border-color: #204d74 -} - -.btn-primary.active.focus, -.btn-primary.active:focus, -.btn-primary.active:hover, -.btn-primary:active.focus, -.btn-primary:active:focus, -.btn-primary:active:hover, -.open>.dropdown-toggle.btn-primary.focus, -.open>.dropdown-toggle.btn-primary:focus, -.open>.dropdown-toggle.btn-primary:hover { - color: #fff; - background-color: #204d74; - border-color: #122b40 -} - -.btn-primary.disabled.focus, -.btn-primary.disabled:focus, -.btn-primary.disabled:hover, -.btn-primary[disabled].focus, -.btn-primary[disabled]:focus, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary.focus, -fieldset[disabled] .btn-primary:focus, -fieldset[disabled] .btn-primary:hover { - background-color: #337ab7; - border-color: #2e6da4 -} - -.btn-primary .badge { - color: #337ab7; - background-color: #fff -} - -.btn-success { - color: #fff; - background-color: #5cb85c; - border-color: #4cae4c -} - -.btn-success.focus, -.btn-success:focus { - color: #fff; - background-color: #449d44; - border-color: #255625 -} - -.btn-success:hover { - color: #fff; - background-color: #449d44; - border-color: #398439 -} - -.btn-success.active, -.btn-success:active, -.open>.dropdown-toggle.btn-success { - color: #fff; - background-color: #449d44; - background-image: none; - border-color: #398439 -} - -.btn-success.active.focus, -.btn-success.active:focus, -.btn-success.active:hover, -.btn-success:active.focus, -.btn-success:active:focus, -.btn-success:active:hover, -.open>.dropdown-toggle.btn-success.focus, -.open>.dropdown-toggle.btn-success:focus, -.open>.dropdown-toggle.btn-success:hover { - color: #fff; - background-color: #398439; - border-color: #255625 -} - -.btn-success.disabled.focus, -.btn-success.disabled:focus, -.btn-success.disabled:hover, -.btn-success[disabled].focus, -.btn-success[disabled]:focus, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success.focus, -fieldset[disabled] .btn-success:focus, -fieldset[disabled] .btn-success:hover { - background-color: #5cb85c; - border-color: #4cae4c -} - -.btn-success .badge { - color: #5cb85c; - background-color: #fff -} - -.btn-info { - color: #fff; - background-color: #5bc0de; - border-color: #46b8da -} - -.btn-info.focus, -.btn-info:focus { - color: #fff; - background-color: #31b0d5; - border-color: #1b6d85 -} - -.btn-info:hover { - color: #fff; - background-color: #31b0d5; - border-color: #269abc -} - -.btn-info.active, -.btn-info:active, -.open>.dropdown-toggle.btn-info { - color: #fff; - background-color: #31b0d5; - background-image: none; - border-color: #269abc -} - -.btn-info.active.focus, -.btn-info.active:focus, -.btn-info.active:hover, -.btn-info:active.focus, -.btn-info:active:focus, -.btn-info:active:hover, -.open>.dropdown-toggle.btn-info.focus, -.open>.dropdown-toggle.btn-info:focus, -.open>.dropdown-toggle.btn-info:hover { - color: #fff; - background-color: #269abc; - border-color: #1b6d85 -} - -.btn-info.disabled.focus, -.btn-info.disabled:focus, -.btn-info.disabled:hover, -.btn-info[disabled].focus, -.btn-info[disabled]:focus, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info.focus, -fieldset[disabled] .btn-info:focus, -fieldset[disabled] .btn-info:hover { - background-color: #5bc0de; - border-color: #46b8da -} - -.btn-info .badge { - color: #5bc0de; - background-color: #fff -} - -.btn-warning { - color: #fff; - background-color: #f0ad4e; - border-color: #eea236 -} - -.btn-warning.focus, -.btn-warning:focus { - color: #fff; - background-color: #ec971f; - border-color: #985f0d -} - -.btn-warning:hover { - color: #fff; - background-color: #ec971f; - border-color: #d58512 -} - -.btn-warning.active, -.btn-warning:active, -.open>.dropdown-toggle.btn-warning { - color: #fff; - background-color: #ec971f; - background-image: none; - border-color: #d58512 -} - -.btn-warning.active.focus, -.btn-warning.active:focus, -.btn-warning.active:hover, -.btn-warning:active.focus, -.btn-warning:active:focus, -.btn-warning:active:hover, -.open>.dropdown-toggle.btn-warning.focus, -.open>.dropdown-toggle.btn-warning:focus, -.open>.dropdown-toggle.btn-warning:hover { - color: #fff; - background-color: #d58512; - border-color: #985f0d -} - -.btn-warning.disabled.focus, -.btn-warning.disabled:focus, -.btn-warning.disabled:hover, -.btn-warning[disabled].focus, -.btn-warning[disabled]:focus, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning.focus, -fieldset[disabled] .btn-warning:focus, -fieldset[disabled] .btn-warning:hover { - background-color: #f0ad4e; - border-color: #eea236 -} - -.btn-warning .badge { - color: #f0ad4e; - background-color: #fff -} - -.btn-danger { - color: #fff; - background-color: #d9534f; - border-color: #d43f3a -} - -.btn-danger.focus, -.btn-danger:focus { - color: #fff; - background-color: #c9302c; - border-color: #761c19 -} - -.btn-danger:hover { - color: #fff; - background-color: #c9302c; - border-color: #ac2925 -} - -.btn-danger.active, -.btn-danger:active, -.open>.dropdown-toggle.btn-danger { - color: #fff; - background-color: #c9302c; - background-image: none; - border-color: #ac2925 -} - -.btn-danger.active.focus, -.btn-danger.active:focus, -.btn-danger.active:hover, -.btn-danger:active.focus, -.btn-danger:active:focus, -.btn-danger:active:hover, -.open>.dropdown-toggle.btn-danger.focus, -.open>.dropdown-toggle.btn-danger:focus, -.open>.dropdown-toggle.btn-danger:hover { - color: #fff; - background-color: #ac2925; - border-color: #761c19 -} - -.btn-danger.disabled.focus, -.btn-danger.disabled:focus, -.btn-danger.disabled:hover, -.btn-danger[disabled].focus, -.btn-danger[disabled]:focus, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger.focus, -fieldset[disabled] .btn-danger:focus, -fieldset[disabled] .btn-danger:hover { - background-color: #d9534f; - border-color: #d43f3a -} - -.btn-danger .badge { - color: #d9534f; - background-color: #fff -} - -.btn-link { - font-weight: 400; - color: #337ab7; - border-radius: 0 -} - -.btn-link, -.btn-link.active, -.btn-link:active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none -} - -.btn-link, -.btn-link:active, -.btn-link:focus, -.btn-link:hover { - border-color: transparent -} - -.btn-link:focus, -.btn-link:hover { - color: #23527c; - text-decoration: underline; - background-color: transparent -} - -.btn-link[disabled]:focus, -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:focus, -fieldset[disabled] .btn-link:hover { - color: #777; - text-decoration: none -} - -.btn-group-lg>.btn, -.btn-lg { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px -} - -.btn-group-sm>.btn, -.btn-sm { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px -} - -.btn-group-xs>.btn, -.btn-xs { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px -} - -.btn-block { - display: block; - width: 100% -} - -.btn-block+.btn-block { - margin-top: 5px -} - -input[type=button].btn-block, -input[type=reset].btn-block, -input[type=submit].btn-block { - width: 100% -} - -.fade { - opacity: 0; - -webkit-transition: opacity .15s linear; - -o-transition: opacity .15s linear; - transition: opacity .15s linear -} - -.fade.in { - opacity: 1 -} - -.collapse { - display: none -} - -.collapse.in { - display: block -} - -tr.collapse.in { - display: table-row -} - -tbody.collapse.in { - display: table-row-group -} - -.collapsing { - height: 0; - overflow: hidden; - -webkit-transition-property: height, visibility; - -o-transition-property: height, visibility; - transition-property: height, visibility; - -webkit-transition-duration: .35s; - -o-transition-duration: .35s; - transition-duration: .35s; - -webkit-transition-timing-function: ease; - -o-transition-timing-function: ease; - transition-timing-function: ease -} - -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-top: 4px solid\9; - border-right: 4px solid transparent; - border-left: 4px solid transparent -} - -.dropdown-toggle:focus { - outline: 0 -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - font-size: 14px; - text-align: left; - list-style: none; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - box-shadow: 0 6px 12px rgba(0, 0, 0, .175) -} - -.dropdown-menu-right, -.dropdown-menu.pull-right { - right: 0; - left: auto -} - -.dropdown-header, -.dropdown-menu>li>a { - display: block; - padding: 3px 20px; - line-height: 1.42857143; - white-space: nowrap -} - -.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child, -.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle, -.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child, -.btn-group>.btn:last-child:not(:first-child), -.btn-group>.dropdown-toggle:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.btn-group-vertical>.btn:not(:first-child):not(:last-child), -.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn, -.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0 -} - -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5 -} - -.dropdown-menu>li>a { - clear: both; - font-weight: 400; - color: #333 -} - -.dropdown-menu>li>a:focus, -.dropdown-menu>li>a:hover { - color: #262626; - text-decoration: none; - background-color: #f5f5f5 -} - -.dropdown-menu>.active>a, -.dropdown-menu>.active>a:focus, -.dropdown-menu>.active>a:hover { - color: #fff; - text-decoration: none; - background-color: #337ab7; - outline: 0 -} - -.dropdown-menu>.disabled>a, -.dropdown-menu>.disabled>a:focus, -.dropdown-menu>.disabled>a:hover { - color: #777 -} - -.dropdown-menu>.disabled>a:focus, -.dropdown-menu>.disabled>a:hover { - text-decoration: none; - cursor: not-allowed; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false) -} - -.open>.dropdown-menu { - display: block -} - -.open>a { - outline: 0 -} - -.dropdown-menu-left { - right: auto; - left: 0 -} - -.dropdown-header { - font-size: 12px; - color: #777 -} - -.dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990 -} - -.nav-justified>.dropdown .dropdown-menu, -.nav-tabs.nav-justified>.dropdown .dropdown-menu { - top: auto; - left: auto -} - -.pull-right>.dropdown-menu { - right: 0; - left: auto -} - -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - content: ""; - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid\9 -} - -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px -} - -@media (min-width:768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto - } - - .navbar-right .dropdown-menu-left { - right: auto; - left: 0 - } -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle -} - -.btn-group-vertical>.btn, -.btn-group>.btn { - position: relative; - float: left -} - -.btn-group-vertical>.btn.active, -.btn-group-vertical>.btn:active, -.btn-group-vertical>.btn:focus, -.btn-group-vertical>.btn:hover, -.btn-group>.btn.active, -.btn-group>.btn:active, -.btn-group>.btn:focus, -.btn-group>.btn:hover { - z-index: 2 -} - -.btn-group .btn+.btn, -.btn-group .btn+.btn-group, -.btn-group .btn-group+.btn, -.btn-group .btn-group+.btn-group { - margin-left: -1px -} - -.btn-toolbar { - margin-left: -5px -} - -.btn-toolbar>.btn, -.btn-toolbar>.btn-group, -.btn-toolbar>.input-group { - margin-left: 5px -} - -.btn .caret, -.btn-group>.btn:first-child { - margin-left: 0 -} - -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0 -} - -.btn-group>.btn+.dropdown-toggle { - padding-right: 8px; - padding-left: 8px -} - -.btn-group>.btn-lg+.dropdown-toggle { - padding-right: 12px; - padding-left: 12px -} - -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125) -} - -.btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none -} - -.btn-lg .caret { - border-width: 5px 5px 0 -} - -.dropup .btn-lg .caret { - border-width: 0 5px 5px -} - -.btn-group-vertical>.btn, -.btn-group-vertical>.btn-group, -.btn-group-vertical>.btn-group>.btn { - display: block; - float: none; - width: 100%; - max-width: 100% -} - -.btn-group-vertical>.btn-group>.btn { - float: none -} - -.btn-group-vertical>.btn+.btn, -.btn-group-vertical>.btn+.btn-group, -.btn-group-vertical>.btn-group+.btn, -.btn-group-vertical>.btn-group+.btn-group { - margin-top: -1px; - margin-left: 0 -} - -.btn-group-vertical>.btn:first-child:not(:last-child) { - border-radius: 4px 4px 0 0 -} - -.btn-group-vertical>.btn:last-child:not(:first-child) { - border-radius: 0 0 4px 4px -} - -.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn { - border-radius: 0 -} - -.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child, -.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0 -} - -.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate -} - -.btn-group-justified>.btn, -.btn-group-justified>.btn-group { - display: table-cell; - float: none; - width: 1% -} - -.btn-group-justified>.btn-group .btn { - width: 100% -} - -.btn-group-justified>.btn-group .dropdown-menu { - left: auto -} - -[data-toggle=buttons]>.btn input[type=checkbox], -[data-toggle=buttons]>.btn input[type=radio], -[data-toggle=buttons]>.btn-group>.btn input[type=checkbox], -[data-toggle=buttons]>.btn-group>.btn input[type=radio] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none -} - -.input-group { - position: relative; - display: table; - border-collapse: separate -} - -.input-group[class*=col-] { - float: none; - padding-right: 0; - padding-left: 0 -} - -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0 -} - -.input-group .form-control:focus { - z-index: 3 -} - -.input-group-lg>.form-control, -.input-group-lg>.input-group-addon, -.input-group-lg>.input-group-btn>.btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px -} - -select.input-group-lg>.form-control, -select.input-group-lg>.input-group-addon, -select.input-group-lg>.input-group-btn>.btn { - height: 46px; - line-height: 46px -} - -select[multiple].input-group-lg>.form-control, -select[multiple].input-group-lg>.input-group-addon, -select[multiple].input-group-lg>.input-group-btn>.btn, -textarea.input-group-lg>.form-control, -textarea.input-group-lg>.input-group-addon, -textarea.input-group-lg>.input-group-btn>.btn { - height: auto -} - -.input-group-sm>.form-control, -.input-group-sm>.input-group-addon, -.input-group-sm>.input-group-btn>.btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px -} - -select.input-group-sm>.form-control, -select.input-group-sm>.input-group-addon, -select.input-group-sm>.input-group-btn>.btn { - height: 30px; - line-height: 30px -} - -select[multiple].input-group-sm>.form-control, -select[multiple].input-group-sm>.input-group-addon, -select[multiple].input-group-sm>.input-group-btn>.btn, -textarea.input-group-sm>.form-control, -textarea.input-group-sm>.input-group-addon, -textarea.input-group-sm>.input-group-btn>.btn { - height: auto -} - -.input-group .form-control, -.input-group-addon, -.input-group-btn { - display: table-cell -} - -.nav>li, -.nav>li>a { - display: block; - position: relative -} - -.input-group .form-control:not(:first-child):not(:last-child), -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child) { - border-radius: 0 -} - -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle -} - -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: 400; - line-height: 1; - color: #555; - text-align: center; - background-color: #eee; - border: 1px solid #ccc; - border-radius: 4px -} - -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px -} - -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px -} - -.input-group-addon input[type=checkbox], -.input-group-addon input[type=radio] { - margin-top: 0 -} - -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child>.btn, -.input-group-btn:first-child>.btn-group>.btn, -.input-group-btn:first-child>.dropdown-toggle, -.input-group-btn:last-child>.btn-group:not(:last-child)>.btn, -.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group-addon:first-child { - border-right: 0 -} - -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:first-child>.btn-group:not(:first-child)>.btn, -.input-group-btn:first-child>.btn:not(:first-child), -.input-group-btn:last-child>.btn, -.input-group-btn:last-child>.btn-group>.btn, -.input-group-btn:last-child>.dropdown-toggle { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.input-group-addon:last-child { - border-left: 0 -} - -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap -} - -.input-group-btn>.btn { - position: relative -} - -.input-group-btn>.btn+.btn { - margin-left: -1px -} - -.input-group-btn>.btn:active, -.input-group-btn>.btn:focus, -.input-group-btn>.btn:hover { - z-index: 2 -} - -.input-group-btn:first-child>.btn, -.input-group-btn:first-child>.btn-group { - margin-right: -1px -} - -.input-group-btn:last-child>.btn, -.input-group-btn:last-child>.btn-group { - z-index: 2; - margin-left: -1px -} - -.nav { - padding-left: 0; - margin-bottom: 0; - list-style: none -} - -.nav>li>a { - padding: 10px 15px -} - -.nav>li>a:focus, -.nav>li>a:hover { - text-decoration: none; - background-color: #eee -} - -.nav>li.disabled>a { - color: #777 -} - -.nav>li.disabled>a:focus, -.nav>li.disabled>a:hover { - color: #777; - text-decoration: none; - cursor: not-allowed; - background-color: transparent -} - -.nav .open>a, -.nav .open>a:focus, -.nav .open>a:hover { - background-color: #eee; - border-color: #337ab7 -} - -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5 -} - -.nav>li>a>img { - max-width: none -} - -.nav-tabs { - border-bottom: 1px solid #ddd -} - -.nav-tabs>li { - float: left; - margin-bottom: -1px -} - -.nav-tabs>li>a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0 -} - -.nav-tabs>li>a:hover { - border-color: #eee #eee #ddd -} - -.nav-tabs>li.active>a, -.nav-tabs>li.active>a:focus, -.nav-tabs>li.active>a:hover { - color: #555; - cursor: default; - background-color: #fff; - border: 1px solid #ddd; - border-bottom-color: transparent -} - -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0 -} - -.nav-tabs.nav-justified>li { - float: none -} - -.nav-tabs.nav-justified>li>a { - margin-bottom: 5px; - text-align: center; - margin-right: 0; - border-radius: 4px -} - -.nav-tabs.nav-justified>.active>a, -.nav-tabs.nav-justified>.active>a:focus, -.nav-tabs.nav-justified>.active>a:hover { - border: 1px solid #ddd -} - -@media (min-width:768px) { - .nav-tabs.nav-justified>li { - display: table-cell; - width: 1% - } - - .nav-tabs.nav-justified>li>a { - margin-bottom: 0; - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0 - } - - .nav-tabs.nav-justified>.active>a, - .nav-tabs.nav-justified>.active>a:focus, - .nav-tabs.nav-justified>.active>a:hover { - border-bottom-color: #fff - } -} - -.nav-pills>li { - float: left -} - -.nav-justified>li, -.nav-stacked>li { - float: none -} - -.nav-pills>li>a { - border-radius: 4px -} - -.nav-pills>li+li { - margin-left: 2px -} - -.nav-pills>li.active>a, -.nav-pills>li.active>a:focus, -.nav-pills>li.active>a:hover { - color: #fff; - background-color: #337ab7 -} - -.nav-stacked>li+li { - margin-top: 2px; - margin-left: 0 -} - -.nav-justified { - width: 100% -} - -.nav-justified>li>a { - margin-bottom: 5px; - text-align: center -} - -.nav-tabs-justified { - border-bottom: 0 -} - -.nav-tabs-justified>li>a { - margin-right: 0; - border-radius: 4px -} - -.nav-tabs-justified>.active>a, -.nav-tabs-justified>.active>a:focus, -.nav-tabs-justified>.active>a:hover { - border: 1px solid #ddd -} - -@media (min-width:768px) { - .nav-justified>li { - display: table-cell; - width: 1% - } - - .nav-justified>li>a { - margin-bottom: 0 - } - - .nav-tabs-justified>li>a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0 - } - - .nav-tabs-justified>.active>a, - .nav-tabs-justified>.active>a:focus, - .nav-tabs-justified>.active>a:hover { - border-bottom-color: #fff - } -} - -.tab-content>.tab-pane { - display: none -} - -.tab-content>.active { - display: block -} - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent -} - -.navbar-collapse { - padding-right: 15px; - padding-left: 15px; - overflow-x: visible; - border-top: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); - -webkit-overflow-scrolling: touch -} - -.navbar-collapse.in { - overflow-y: auto -} - -@media (min-width:768px) { - .navbar { - border-radius: 4px - } - - .navbar-header { - float: left - } - - .navbar-collapse { - width: auto; - border-top: 0; - -webkit-box-shadow: none; - box-shadow: none - } - - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important - } - - .navbar-collapse.in { - overflow-y: visible - } - - .navbar-fixed-bottom .navbar-collapse, - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse { - padding-right: 0; - padding-left: 0 - } - - .navbar-fixed-bottom, - .navbar-fixed-top { - border-radius: 0 - } -} - -.embed-responsive, -.modal, -.modal-open, -.progress { - overflow: hidden -} - -.navbar-fixed-bottom, -.navbar-fixed-top { - position: fixed; - right: 0; - left: 0; - z-index: 1030 -} - -@media (max-device-width:480px) and (orientation:landscape) { - - .navbar-fixed-bottom .navbar-collapse, - .navbar-fixed-top .navbar-collapse { - max-height: 200px - } -} - -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px -} - -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0 -} - -.container-fluid>.navbar-collapse, -.container-fluid>.navbar-header, -.container>.navbar-collapse, -.container>.navbar-header { - margin-right: -15px; - margin-left: -15px -} - -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px -} - -.navbar-brand { - float: left; - height: 50px; - padding: 15px; - font-size: 18px; - line-height: 20px -} - -.navbar-brand:focus, -.navbar-brand:hover { - text-decoration: none -} - -.navbar-brand>img { - display: block -} - -@media (min-width:768px) { - - .container-fluid>.navbar-collapse, - .container-fluid>.navbar-header, - .container>.navbar-collapse, - .container>.navbar-header { - margin-right: 0; - margin-left: 0 - } - - .navbar-static-top { - border-radius: 0 - } - - .navbar>.container .navbar-brand, - .navbar>.container-fluid .navbar-brand { - margin-left: -15px - } -} - -.navbar-toggle { - position: relative; - float: right; - padding: 9px 10px; - margin-right: 15px; - margin-top: 8px; - margin-bottom: 8px; - background-color: var(--accent-dim); - background-image: none; - border: 1px solid var(--accent-dim); - border-radius: 4px -} - -.navbar-toggle:focus { - outline: 0 -} - -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px -} - -.navbar-toggle .icon-bar+.icon-bar { - margin-top: 4px -} - -.navbar-nav { - margin: 7.5px -15px -} - -.navbar-nav>li>a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px -} - -@media (max-width:767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - -webkit-box-shadow: none; - box-shadow: none - } - - .navbar-nav .open .dropdown-menu .dropdown-header, - .navbar-nav .open .dropdown-menu>li>a { - padding: 5px 15px 5px 25px - } - - .navbar-nav .open .dropdown-menu>li>a { - line-height: 20px - } - - .navbar-nav .open .dropdown-menu>li>a:focus, - .navbar-nav .open .dropdown-menu>li>a:hover { - background-image: none - } -} - -.progress-bar-striped, -.progress-striped .progress-bar, -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent) -} - -@media (min-width:768px) { - .navbar-toggle { - display: none - } - - .navbar-nav { - float: left; - margin: 0 - } - - .navbar-nav>li { - float: left - } - - .navbar-nav>li>a { - padding-top: 15px; - padding-bottom: 15px - } -} - -.navbar-form { - padding: 10px 15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); - margin: 8px -15px -} - -@media (min-width:768px) { - - .navbar-form .form-control-static, - .navbar-form .form-group { - display: inline-block - } - - .navbar-form .control-label, - .navbar-form .form-group { - margin-bottom: 0; - vertical-align: middle - } - - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle - } - - .navbar-form .input-group { - display: inline-table; - vertical-align: middle - } - - .navbar-form .input-group .form-control, - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn { - width: auto - } - - .navbar-form .input-group>.form-control { - width: 100% - } - - .navbar-form .checkbox, - .navbar-form .radio { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle - } - - .navbar-form .checkbox label, - .navbar-form .radio label { - padding-left: 0 - } - - .navbar-form .checkbox input[type=checkbox], - .navbar-form .radio input[type=radio] { - position: relative; - margin-left: 0 - } - - .navbar-form .has-feedback .form-control-feedback { - top: 0 - } - - .navbar-form { - width: auto; - padding-top: 0; - padding-bottom: 0; - margin-right: 0; - margin-left: 0; - border: 0; - -webkit-box-shadow: none; - box-shadow: none - } -} - -.breadcrumb>li, -.pagination { - display: inline-block -} - -.btn .badge, -.btn .label { - top: -1px; - position: relative -} - -@media (max-width:767px) { - .navbar-form .form-group { - margin-bottom: 5px - } - - .navbar-form .form-group:last-child { - margin-bottom: 0 - } -} - -.navbar-nav>li>.dropdown-menu { - margin-top: 0; - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu { - margin-bottom: 0; - border-radius: 4px 4px 0 0 -} - -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px -} - -.navbar-btn.btn-sm { - margin-top: 10px; - margin-bottom: 10px -} - -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px -} - -.navbar-text { - margin-top: 15px; - margin-bottom: 15px -} - -@media (min-width:768px) { - .navbar-text { - float: left; - margin-right: 15px; - margin-left: 15px - } - - .navbar-left { - float: left !important - } - - .navbar-right { - float: right !important; - margin-right: -15px - } - - .navbar-right~.navbar-right { - margin-right: 0 - } -} - -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7 -} - -.navbar-default .navbar-brand { - color: #777 -} - -.navbar-default .navbar-brand:focus, -.navbar-default .navbar-brand:hover { - color: #5e5e5e; - background-color: transparent -} - -.navbar-default .navbar-nav>li>a, -.navbar-default .navbar-text { - color: #777 -} - -.navbar-default .navbar-nav>li>a:focus, -.navbar-default .navbar-nav>li>a:hover { - color: #333; - background-color: transparent -} - -.navbar-default .navbar-nav>.active>a, -.navbar-default .navbar-nav>.active>a:focus, -.navbar-default .navbar-nav>.active>a:hover { - color: #555; - background-color: #e7e7e7 -} - -.navbar-default .navbar-nav>.disabled>a, -.navbar-default .navbar-nav>.disabled>a:focus, -.navbar-default .navbar-nav>.disabled>a:hover { - color: #ccc; - background-color: transparent -} - -.navbar-default .navbar-nav>.open>a, -.navbar-default .navbar-nav>.open>a:focus, -.navbar-default .navbar-nav>.open>a:hover { - color: #555; - background-color: #e7e7e7 -} - -@media (max-width:767px) { - .navbar-default .navbar-nav .open .dropdown-menu>li>a { - color: #777 - } - - .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus, - .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover { - color: #333; - background-color: transparent - } - - .navbar-default .navbar-nav .open .dropdown-menu>.active>a, - .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus, - .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover { - color: #555; - background-color: #e7e7e7 - } - - .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a, - .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus, - .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover { - color: #ccc; - background-color: transparent - } -} - -.navbar-default .navbar-toggle { - border-color: #ddd -} - -.navbar-default .navbar-toggle:focus, -.navbar-default .navbar-toggle:hover { - background-color: #ddd -} - -.navbar-default .navbar-toggle .icon-bar { - background-color: #888 -} - -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7 -} - -.navbar-default .navbar-link { - color: #fff -} - -.navbar-default .navbar-link:hover { - color: var(--highlight-light); -} - -.navbar-default .btn-link { - color: #fff -} - -.navbar-default .btn-link:focus, -.navbar-default .btn-link:hover { - color: #333 -} - -.navbar-default .btn-link[disabled]:focus, -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:focus, -fieldset[disabled] .navbar-default .btn-link:hover { - color: #ccc -} - -.navbar-inverse { - background-color: var(--highlight-light); - border-color: #fff; -} - -.navbar-inverse .navbar-brand { - color: #9d9d9d -} - -.navbar-inverse .navbar-brand:focus, -.navbar-inverse .navbar-brand:hover { - color: #fff; - background-color: transparent -} - -.navbar-inverse .navbar-nav>li>a, -.navbar-inverse .navbar-text { - color: #fff -} - -.navbar-inverse .navbar-nav>li>a:focus, -.navbar-inverse .navbar-nav>li>a:hover { - color: #fff; - background-color: transparent -} - -.navbar-inverse .navbar-nav>.active>a, -.navbar-inverse .navbar-nav>.active>a:focus, -.navbar-inverse .navbar-nav>.active>a:hover { - color: #fff; - background-color: var(--highlight-light); -} - -.navbar-inverse .navbar-nav>.disabled>a, -.navbar-inverse .navbar-nav>.disabled>a:focus, -.navbar-inverse .navbar-nav>.disabled>a:hover { - color: #444; - background-color: transparent -} - -.navbar-inverse .navbar-nav>.open>a, -.navbar-inverse .navbar-nav>.open>a:focus, -.navbar-inverse .navbar-nav>.open>a:hover { - color: #fff; - background-color: var(--highlight-light); -} - -@media (max-width:767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header { - border-color: var(--highlight-light); - } - - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808 - } - - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a { - color: #9d9d9d - } - - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus, - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover { - color: #fff; - background-color: transparent - } - - .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a, - .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus, - .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover { - color: #fff; - background-color: #080808 - } - - .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a, - .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus, - .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover { - color: #444; - background-color: transparent - } -} - -.navbar-inverse .navbar-toggle { - border-color: transparent; - background-color: transparent -} - -.navbar-inverse .navbar-toggle.collapsed:focus { - border-color: transparent; - background-color: transparent -} - -.navbar-inverse .navbar-toggle[aria-expanded="true"], -.navbar-inverse .navbar-toggle:focus, -.navbar-inverse .navbar-toggle:hover { - background-color: var(--accent-super-dim); -} - -.navbar-inverse .navbar-toggle .icon-bar { - position: relative; - top: 0px; - background-color: var(--font-color); - opacity: 1; - transition: 350ms ease-out; -} - -.navbar-inverse .navbar-toggle[aria-expanded="true"] .icon-bar:nth-of-type(2) { - transform: rotate(+45deg); - top: +6px; -} - -.navbar-inverse .navbar-toggle[aria-expanded="true"] .icon-bar:nth-of-type(3) { - opacity: 0; -} - -.navbar-inverse .navbar-toggle[aria-expanded="true"] .icon-bar:nth-of-type(4) { - transform: rotate(-45deg); - top: -6px; -} - -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010 -} - -.navbar-inverse .navbar-link { - color: #9d9d9d -} - -.navbar-inverse .navbar-link:hover { - color: #fff -} - -.navbar-inverse .btn-link { - color: #9d9d9d -} - -.navbar-inverse .btn-link:focus, -.navbar-inverse .btn-link:hover { - color: #fff -} - -.navbar-inverse .btn-link[disabled]:focus, -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:focus, -fieldset[disabled] .navbar-inverse .btn-link:hover { - color: #444 -} - -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px -} - -.breadcrumb>li+li:before { - padding: 0 5px; - color: #ccc; - content: "/\00a0" -} - -.breadcrumb>.active { - color: #777 -} - -.breadcrumb button, -.breadcrumb a { - color: var(--input-text); -} - -.pagination { - padding-left: 0; - margin: 20px 0; - border-radius: 4px -} - -.pager li, -.pagination>li { - display: inline -} - -.pagination>li>a, -.pagination>li>span { - position: relative; - float: left; - padding: 6px 12px; - margin-left: -1px; - line-height: 1.42857143; - color: #337ab7; - text-decoration: none; - background-color: #fff; - border: 1px solid #ddd -} - -.pagination>li>a:focus, -.pagination>li>a:hover, -.pagination>li>span:focus, -.pagination>li>span:hover { - z-index: 2; - color: #23527c; - background-color: #eee; - border-color: #ddd -} - -.pagination>li:first-child>a, -.pagination>li:first-child>span { - margin-left: 0; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px -} - -.pagination>li:last-child>a, -.pagination>li:last-child>span { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px -} - -.pagination>.active>a, -.pagination>.active>a:focus, -.pagination>.active>a:hover, -.pagination>.active>span, -.pagination>.active>span:focus, -.pagination>.active>span:hover { - z-index: 3; - color: #fff; - cursor: default; - background-color: #337ab7; - border-color: #337ab7 -} - -.pagination>.disabled>a, -.pagination>.disabled>a:focus, -.pagination>.disabled>a:hover, -.pagination>.disabled>span, -.pagination>.disabled>span:focus, -.pagination>.disabled>span:hover { - color: #777; - cursor: not-allowed; - background-color: #fff; - border-color: #ddd -} - -.pagination-lg>li>a, -.pagination-lg>li>span { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333 -} - -.pagination-lg>li:first-child>a, -.pagination-lg>li:first-child>span { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px -} - -.pagination-lg>li:last-child>a, -.pagination-lg>li:last-child>span { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px -} - -.pagination-sm>li>a, -.pagination-sm>li>span { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5 -} - -.badge, -.label { - font-weight: 700; - line-height: 1; - white-space: nowrap; - text-align: center -} - -.pagination-sm>li:first-child>a, -.pagination-sm>li:first-child>span { - border-top-left-radius: 3px; - border-bottom-left-radius: 3px -} - -.pagination-sm>li:last-child>a, -.pagination-sm>li:last-child>span { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px -} - -.pager { - padding-left: 0; - margin: 20px 0; - text-align: center; - list-style: none -} - -.pager li>a, -.pager li>span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 15px -} - -.pager li>a:focus, -.pager li>a:hover { - text-decoration: none; - background-color: #eee -} - -.pager .next>a, -.pager .next>span { - float: right -} - -.pager .previous>a, -.pager .previous>span { - float: left -} - -.pager .disabled>a, -.pager .disabled>a:focus, -.pager .disabled>a:hover, -.pager .disabled>span { - color: #777; - cursor: not-allowed; - background-color: #fff -} - -a.badge:focus, -a.badge:hover, -a.label:focus, -a.label:hover { - color: #fff; - cursor: pointer; - text-decoration: none -} - -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - color: #fff; - border-radius: .25em -} - -.label:empty { - display: none -} - -.label-default { - background-color: #777 -} - -.label-default[href]:focus, -.label-default[href]:hover { - background-color: #5e5e5e -} - -.label-primary { - background-color: #337ab7 -} - -.label-primary[href]:focus, -.label-primary[href]:hover { - background-color: #286090 -} - -.label-success { - background-color: #5cb85c -} - -.label-success[href]:focus, -.label-success[href]:hover { - background-color: #449d44 -} - -.label-info { - background-color: #5bc0de -} - -.label-info[href]:focus, -.label-info[href]:hover { - background-color: #31b0d5 -} - -.label-warning { - background-color: #f0ad4e -} - -.label-warning[href]:focus, -.label-warning[href]:hover { - background-color: #ec971f -} - -.label-danger { - background-color: #d9534f -} - -.label-danger[href]:focus, -.label-danger[href]:hover { - background-color: #c9302c -} - -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - color: #fff; - vertical-align: middle; - background-color: #777; - border-radius: 10px -} - -.badge:empty { - display: none -} - -.media-object, -.thumbnail { - display: block -} - -.btn-group-xs>.btn .badge, -.btn-xs .badge { - top: 0; - padding: 1px 5px -} - -.list-group-item.active>.badge, -.nav-pills>.active>a>.badge { - color: #337ab7; - background-color: #fff -} - -.jumbotron, -.jumbotron .h1, -.jumbotron h1 { - color: inherit -} - -.list-group-item>.badge { - float: right -} - -.list-group-item>.badge+.badge { - margin-right: 5px -} - -.nav-pills>li>a>.badge { - margin-left: 3px -} - -.jumbotron { - padding-top: 30px; - padding-bottom: 30px; - margin-bottom: 30px; - background-color: #eee -} - -.jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200 -} - -.alert, -.thumbnail { - margin-top: 2rem; - margin-bottom: 2rem; -} - -.alert .alert-link, -.close { - font-weight: 700 -} - -.jumbotron>hr { - border-top-color: #d5d5d5 -} - -.container .jumbotron, -.container-fluid .jumbotron { - padding-right: 15px; - padding-left: 15px; - border-radius: 6px -} - -.jumbotron .container { - max-width: 100% -} - -@media screen and (min-width:768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px - } - - .container .jumbotron, - .container-fluid .jumbotron { - padding-right: 60px; - padding-left: 60px - } - - .jumbotron .h1, - .jumbotron h1 { - font-size: 63px - } -} - -.thumbnail { - padding: 4px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: border .2s ease-in-out; - -o-transition: border .2s ease-in-out; - transition: border .2s ease-in-out -} - -.thumbnail a>img, -.thumbnail>img { - margin-right: auto; - margin-left: auto -} - -a.thumbnail.active, -a.thumbnail:focus, -a.thumbnail:hover { - border-color: #337ab7 -} - -.thumbnail .caption { - padding: 9px; - color: #333 -} - -.alert { - padding: 15px; - border: 1px solid transparent; - border-radius: 4px -} - -.alert h4 { - margin-top: 0; - color: inherit -} - -.alert>p, -.alert>ul { - margin-bottom: 0 -} - -.alert>p+p { - margin-top: 5px -} - -.alert-dismissable, -.alert-dismissible { - padding-right: 35px -} - -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit -} - -.modal, -.modal-backdrop { - top: 0; - right: 0; - bottom: 0; - left: 0 -} - -.alert-success { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6 -} - -.alert-success hr { - border-top-color: #c9e2b3 -} - -.alert-success .alert-link { - color: #2b542c -} - -.alert-info { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1 -} - -.alert-info hr { - border-top-color: #a6e1ec -} - -.alert-info .alert-link { - color: #245269 -} - -.alert-warning { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc -} - -.alert-warning hr { - border-top-color: #f7e1b5 -} - -.alert-warning .alert-link { - color: #66512c -} - -.alert-danger { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1 -} - -.alert-danger hr { - border-top-color: #e4b9c0 -} - -.alert-danger .alert-link { - color: #843534 -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0 - } - - to { - background-position: 0 0 - } -} - -@-o-keyframes progress-bar-stripes { - from { - background-position: 40px 0 - } - - to { - background-position: 0 0 - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 40px 0 - } - - to { - background-position: 0 0 - } -} - -.progress { - height: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1) -} - -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #fff; - text-align: center; - background-color: #337ab7; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - -webkit-transition: width .6s ease; - -o-transition: width .6s ease; - transition: width .6s ease -} - -.progress-bar-striped, -.progress-striped .progress-bar { - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - background-size: 40px 40px -} - -.progress-bar.active, -.progress.active .progress-bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite -} - -.progress-bar-success { - background-color: #5cb85c -} - -.progress-striped .progress-bar-success { - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent) -} - -.progress-striped .progress-bar-info, -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent) -} - -.progress-bar-info { - background-color: #5bc0de -} - -.progress-striped .progress-bar-info { - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent) -} - -.progress-bar-warning { - background-color: #f0ad4e -} - -.progress-striped .progress-bar-warning { - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent) -} - -.progress-bar-danger { - background-color: #d9534f -} - -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent) -} - -.media { - margin-top: 15px -} - -.media:first-child { - margin-top: 0 -} - -.media, -.media-body { - overflow: hidden; - zoom: 1 -} - -.media-body { - width: 10000px -} - -.media-object.img-thumbnail { - max-width: none -} - -.media-right, -.media>.pull-right { - padding-left: 10px -} - -.media-left, -.media>.pull-left { - padding-right: 10px -} - -.media-body, -.media-left, -.media-right { - display: table-cell; - vertical-align: top -} - -.media-middle { - vertical-align: middle -} - -.media-bottom { - vertical-align: bottom -} - -.media-heading { - margin-top: 0; - margin-bottom: 5px -} - -.media-list { - padding-left: 0; - list-style: none -} - -.list-group { - padding-left: 0; - margin-bottom: 20px -} - -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid #ddd -} - -.list-group-item:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px -} - -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px -} - -.list-group-item.disabled, -.list-group-item.disabled:focus, -.list-group-item.disabled:hover { - color: #777; - cursor: not-allowed; - background-color: #eee -} - -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading { - color: inherit -} - -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text { - color: #777 -} - -.list-group-item.active, -.list-group-item.active:focus, -.list-group-item.active:hover { - z-index: 2; - color: #fff; - background-color: #337ab7; - border-color: #337ab7 -} - -.list-group-item.active .list-group-item-heading, -.list-group-item.active .list-group-item-heading>.small, -.list-group-item.active .list-group-item-heading>small, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading>.small, -.list-group-item.active:focus .list-group-item-heading>small, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading>.small, -.list-group-item.active:hover .list-group-item-heading>small { - color: inherit -} - -.list-group-item.active .list-group-item-text, -.list-group-item.active:focus .list-group-item-text, -.list-group-item.active:hover .list-group-item-text { - color: #c7ddef -} - -a.list-group-item, -button.list-group-item { - color: #555 -} - -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #333 -} - -a.list-group-item:focus, -a.list-group-item:hover, -button.list-group-item:focus, -button.list-group-item:hover { - color: #555; - text-decoration: none; - background-color: #f5f5f5 -} - -button.list-group-item { - width: 100%; - text-align: left -} - -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8 -} - -a.list-group-item-success, -button.list-group-item-success { - color: #3c763d -} - -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit -} - -a.list-group-item-success:focus, -a.list-group-item-success:hover, -button.list-group-item-success:focus, -button.list-group-item-success:hover { - color: #3c763d; - background-color: #d0e9c6 -} - -a.list-group-item-success.active, -a.list-group-item-success.active:focus, -a.list-group-item-success.active:hover, -button.list-group-item-success.active, -button.list-group-item-success.active:focus, -button.list-group-item-success.active:hover { - color: #fff; - background-color: #3c763d; - border-color: #3c763d -} - -.list-group-item-info { - color: #31708f; - background-color: #d9edf7 -} - -a.list-group-item-info, -button.list-group-item-info { - color: #31708f -} - -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit -} - -a.list-group-item-info:focus, -a.list-group-item-info:hover, -button.list-group-item-info:focus, -button.list-group-item-info:hover { - color: #31708f; - background-color: #c4e3f3 -} - -a.list-group-item-info.active, -a.list-group-item-info.active:focus, -a.list-group-item-info.active:hover, -button.list-group-item-info.active, -button.list-group-item-info.active:focus, -button.list-group-item-info.active:hover { - color: #fff; - background-color: #31708f; - border-color: #31708f -} - -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3 -} - -a.list-group-item-warning, -button.list-group-item-warning { - color: #8a6d3b -} - -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit -} - -a.list-group-item-warning:focus, -a.list-group-item-warning:hover, -button.list-group-item-warning:focus, -button.list-group-item-warning:hover { - color: #8a6d3b; - background-color: #faf2cc -} - -a.list-group-item-warning.active, -a.list-group-item-warning.active:focus, -a.list-group-item-warning.active:hover, -button.list-group-item-warning.active, -button.list-group-item-warning.active:focus, -button.list-group-item-warning.active:hover { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b -} - -.list-group-item-danger { - color: #a94442; - background-color: #f2dede -} - -a.list-group-item-danger, -button.list-group-item-danger { - color: #a94442 -} - -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit -} - -a.list-group-item-danger:focus, -a.list-group-item-danger:hover, -button.list-group-item-danger:focus, -button.list-group-item-danger:hover { - color: #a94442; - background-color: #ebcccc -} - -a.list-group-item-danger.active, -a.list-group-item-danger.active:focus, -a.list-group-item-danger.active:hover, -button.list-group-item-danger.active, -button.list-group-item-danger.active:focus, -button.list-group-item-danger.active:hover { - color: #fff; - background-color: #a94442; - border-color: #a94442 -} - -.panel-heading>.dropdown .dropdown-toggle, -.panel-title, -.panel-title>.small, -.panel-title>.small>a, -.panel-title>a, -.panel-title>small, -.panel-title>small>a { - color: inherit -} - -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px -} - -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3 -} - -.panel { - margin-bottom: 20px; - background-color: #fff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: 0 1px 1px rgba(0, 0, 0, .05) -} - -.panel-title, -.panel>.list-group, -.panel>.panel-collapse>.list-group, -.panel>.panel-collapse>.table, -.panel>.table, -.panel>.table-responsive>.table { - margin-bottom: 0 -} - -.panel-body { - padding: 15px -} - -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-left-radius: 3px; - border-top-right-radius: 3px -} - -.panel-title { - margin-top: 0; - font-size: 16px -} - -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px -} - -.panel>.list-group .list-group-item, -.panel>.panel-collapse>.list-group .list-group-item { - border-width: 1px 0; - border-radius: 0 -} - -.panel-group .panel-heading, -.panel>.table-bordered>tbody>tr:first-child>td, -.panel>.table-bordered>tbody>tr:first-child>th, -.panel>.table-bordered>tbody>tr:last-child>td, -.panel>.table-bordered>tbody>tr:last-child>th, -.panel>.table-bordered>tfoot>tr:last-child>td, -.panel>.table-bordered>tfoot>tr:last-child>th, -.panel>.table-bordered>thead>tr:first-child>td, -.panel>.table-bordered>thead>tr:first-child>th, -.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td, -.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th, -.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td, -.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th, -.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td, -.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th, -.panel>.table-responsive>.table-bordered>thead>tr:first-child>td, -.panel>.table-responsive>.table-bordered>thead>tr:first-child>th { - border-bottom: 0 -} - -.panel>.list-group:first-child .list-group-item:first-child, -.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-left-radius: 3px; - border-top-right-radius: 3px -} - -.panel>.list-group:last-child .list-group-item:last-child, -.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px -} - -.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.list-group+.panel-footer, -.panel-heading+.list-group .list-group-item:first-child { - border-top-width: 0 -} - -.panel>.panel-collapse>.table caption, -.panel>.table caption, -.panel>.table-responsive>.table caption { - padding-right: 15px; - padding-left: 15px -} - -.panel>.table-responsive:first-child>.table:first-child, -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child, -.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child, -.panel>.table:first-child, -.panel>.table:first-child>tbody:first-child>tr:first-child, -.panel>.table:first-child>thead:first-child>tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px -} - -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child, -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child, -.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child, -.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child, -.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child, -.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child, -.panel>.table:first-child>thead:first-child>tr:first-child td:first-child, -.panel>.table:first-child>thead:first-child>tr:first-child th:first-child { - border-top-left-radius: 3px -} - -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child, -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child, -.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child, -.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child, -.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child, -.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child, -.panel>.table:first-child>thead:first-child>tr:first-child td:last-child, -.panel>.table:first-child>thead:first-child>tr:first-child th:last-child { - border-top-right-radius: 3px -} - -.panel>.table-responsive:last-child>.table:last-child, -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child, -.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child, -.panel>.table:last-child, -.panel>.table:last-child>tbody:last-child>tr:last-child, -.panel>.table:last-child>tfoot:last-child>tr:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px -} - -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child, -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child, -.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child, -.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child, -.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child, -.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child, -.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child, -.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child { - border-bottom-left-radius: 3px -} - -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child, -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child, -.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child, -.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child, -.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child, -.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child, -.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child, -.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child { - border-bottom-right-radius: 3px -} - -.panel>.panel-body+.table, -.panel>.panel-body+.table-responsive, -.panel>.table+.panel-body, -.panel>.table-responsive+.panel-body { - border-top: 1px solid #ddd -} - -.panel>.table>tbody:first-child>tr:first-child td, -.panel>.table>tbody:first-child>tr:first-child th { - border-top: 0 -} - -.panel>.table-bordered, -.panel>.table-responsive>.table-bordered { - border: 0 -} - -.panel>.table-bordered>tbody>tr>td:first-child, -.panel>.table-bordered>tbody>tr>th:first-child, -.panel>.table-bordered>tfoot>tr>td:first-child, -.panel>.table-bordered>tfoot>tr>th:first-child, -.panel>.table-bordered>thead>tr>td:first-child, -.panel>.table-bordered>thead>tr>th:first-child, -.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child, -.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child, -.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child, -.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child, -.panel>.table-responsive>.table-bordered>thead>tr>td:first-child, -.panel>.table-responsive>.table-bordered>thead>tr>th:first-child { - border-left: 0 -} - -.panel>.table-bordered>tbody>tr>td:last-child, -.panel>.table-bordered>tbody>tr>th:last-child, -.panel>.table-bordered>tfoot>tr>td:last-child, -.panel>.table-bordered>tfoot>tr>th:last-child, -.panel>.table-bordered>thead>tr>td:last-child, -.panel>.table-bordered>thead>tr>th:last-child, -.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child, -.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child, -.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child, -.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child, -.panel>.table-responsive>.table-bordered>thead>tr>td:last-child, -.panel>.table-responsive>.table-bordered>thead>tr>th:last-child { - border-right: 0 -} - -.panel>.table-responsive { - margin-bottom: 0; - border: 0 -} - -.panel-group { - margin-bottom: 20px -} - -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px -} - -.panel-group .panel+.panel { - margin-top: 5px -} - -.panel-group .panel-heading+.panel-collapse>.list-group, -.panel-group .panel-heading+.panel-collapse>.panel-body { - border-top: 1px solid #ddd -} - -.panel-group .panel-footer { - border-top: 0 -} - -.panel-group .panel-footer+.panel-collapse .panel-body { - border-bottom: 1px solid #ddd -} - -.panel-default { - border-color: #ddd -} - -.panel-default>.panel-heading { - color: #333; - background-color: #f5f5f5; - border-color: #ddd -} - -.panel-default>.panel-heading+.panel-collapse>.panel-body { - border-top-color: #ddd -} - -.panel-default>.panel-heading .badge { - color: #f5f5f5; - background-color: #333 -} - -.panel-default>.panel-footer+.panel-collapse>.panel-body { - border-bottom-color: #ddd -} - -.panel-primary { - border-color: #337ab7 -} - -.panel-primary>.panel-heading { - color: #fff; - background-color: #337ab7; - border-color: #337ab7 -} - -.panel-primary>.panel-heading+.panel-collapse>.panel-body { - border-top-color: #337ab7 -} - -.panel-primary>.panel-heading .badge { - color: #337ab7; - background-color: #fff -} - -.panel-primary>.panel-footer+.panel-collapse>.panel-body { - border-bottom-color: #337ab7 -} - -.panel-success { - border-color: #d6e9c6 -} - -.panel-success>.panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6 -} - -.panel-success>.panel-heading+.panel-collapse>.panel-body { - border-top-color: #d6e9c6 -} - -.panel-success>.panel-heading .badge { - color: #dff0d8; - background-color: #3c763d -} - -.panel-success>.panel-footer+.panel-collapse>.panel-body { - border-bottom-color: #d6e9c6 -} - -.panel-info { - border-color: #bce8f1 -} - -.panel-info>.panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1 -} - -.panel-info>.panel-heading+.panel-collapse>.panel-body { - border-top-color: #bce8f1 -} - -.panel-info>.panel-heading .badge { - color: #d9edf7; - background-color: #31708f -} - -.panel-info>.panel-footer+.panel-collapse>.panel-body { - border-bottom-color: #bce8f1 -} - -.panel-warning { - border-color: #faebcc -} - -.panel-warning>.panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc -} - -.panel-warning>.panel-heading+.panel-collapse>.panel-body { - border-top-color: #faebcc -} - -.panel-warning>.panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b -} - -.panel-warning>.panel-footer+.panel-collapse>.panel-body { - border-bottom-color: #faebcc -} - -.panel-danger { - border-color: #ebccd1 -} - -.panel-danger>.panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1 -} - -.panel-danger>.panel-heading+.panel-collapse>.panel-body { - border-top-color: #ebccd1 -} - -.panel-danger>.panel-heading .badge { - color: #f2dede; - background-color: #a94442 -} - -.panel-danger>.panel-footer+.panel-collapse>.panel-body { - border-bottom-color: #ebccd1 -} - -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0 -} - -.embed-responsive .embed-responsive-item, -.embed-responsive embed, -.embed-responsive iframe, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0 -} - -.embed-responsive-16by9 { - padding-bottom: 56.25% -} - -.embed-responsive-4by3 { - padding-bottom: 75% -} - -.well { - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05) -} - -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, .15) -} - -.well-lg { - padding: 24px; - border-radius: 6px -} - -.well-sm { - padding: 9px; - border-radius: 3px -} - -.close { - float: right; - font-size: 21px; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - filter: alpha(opacity=20); - opacity: .2 -} - -.popover, -.tooltip { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: 400; - line-height: 1.42857143; - line-break: auto; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - text-decoration: none -} - -.close:focus, -.close:hover { - color: #000; - text-decoration: none; - cursor: pointer; - filter: alpha(opacity=50); - opacity: .5 -} - -button.close { - padding: 0; - cursor: pointer; - background: 0 0; - border: 0; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -.modal-content, -.popover { - background-clip: padding-box -} - -.modal { - position: fixed; - z-index: 1050; - display: none; - -webkit-overflow-scrolling: touch; - outline: 0 -} - -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform .3s ease-out; - -o-transition: -o-transform .3s ease-out; - transition: -webkit-transform .3s ease-out; - transition: transform .3s ease-out; - transition: transform .3s ease-out, -webkit-transform .3s ease-out, -o-transform .3s ease-out -} - -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0) -} - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto -} - -.modal-dialog { - position: relative; - width: auto; - margin: 10px -} - -.modal-content { - position: relative; - background-color: #fff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); - box-shadow: 0 3px 9px rgba(0, 0, 0, .5); - outline: 0 -} - -.modal-backdrop { - position: fixed; - z-index: 1040; - background-color: #000 -} - -.modal-backdrop.fade { - filter: alpha(opacity=0); - opacity: 0 -} - -.modal-backdrop.in { - filter: alpha(opacity=50); - opacity: .5 -} - -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5 -} - -.modal-header .close { - margin-top: -2px -} - -.modal-title { - margin: 0; - line-height: 1.42857143 -} - -.modal-body { - position: relative; - padding: 15px -} - -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5 -} - -.modal-footer .btn+.btn { - margin-bottom: 0; - margin-left: 5px -} - -.modal-footer .btn-group .btn+.btn { - margin-left: -1px -} - -.modal-footer .btn-block+.btn-block { - margin-left: 0 -} - -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll -} - -@media (min-width:768px) { - .modal-dialog { - width: 600px; - margin: 30px auto - } - - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - box-shadow: 0 5px 15px rgba(0, 0, 0, .5) - } - - .modal-sm { - width: 300px - } -} - -.tooltip.top-left .tooltip-arrow, -.tooltip.top-right .tooltip-arrow { - bottom: 0; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000 -} - -@media (min-width:992px) { - .modal-lg { - width: 900px - } -} - -.tooltip { - position: absolute; - z-index: 1070; - display: block; - text-align: left; - text-align: start; - font-size: 12px; - filter: alpha(opacity=0); - opacity: 0 -} - -.tooltip.in { - filter: alpha(opacity=90); - opacity: .9 -} - -.tooltip.top { - padding: 5px 0; - margin-top: -3px -} - -.tooltip.right { - padding: 0 5px; - margin-left: 3px -} - -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px -} - -.tooltip.left { - padding: 0 5px; - margin-left: -3px -} - -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000 -} - -.tooltip.top-left .tooltip-arrow { - right: 5px -} - -.tooltip.top-right .tooltip-arrow { - left: 5px -} - -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000 -} - -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000 -} - -.tooltip.bottom .tooltip-arrow, -.tooltip.bottom-left .tooltip-arrow, -.tooltip.bottom-right .tooltip-arrow { - border-width: 0 5px 5px; - border-bottom-color: #000; - top: 0 -} - -.tooltip.bottom .tooltip-arrow { - left: 50%; - margin-left: -5px -} - -.tooltip.bottom-left .tooltip-arrow { - right: 5px; - margin-top: -5px -} - -.tooltip.bottom-right .tooltip-arrow { - left: 5px; - margin-top: -5px -} - -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 4px -} - -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - text-align: start; - font-size: 14px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); - box-shadow: 0 5px 10px rgba(0, 0, 0, .2) -} - -.carousel-caption, -.carousel-control { - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6) -} - -.popover.top { - margin-top: -10px -} - -.popover.right { - margin-left: 10px -} - -.popover.bottom { - margin-top: 10px -} - -.popover.left { - margin-left: -10px -} - -.popover>.arrow { - border-width: 11px -} - -.popover>.arrow, -.popover>.arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid -} - -.carousel, -.carousel-inner { - position: relative -} - -.popover>.arrow:after { - content: ""; - border-width: 10px -} - -.popover.top>.arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, .25); - border-bottom-width: 0 -} - -.popover.top>.arrow:after { - bottom: 1px; - margin-left: -10px; - content: " "; - border-top-color: #fff; - border-bottom-width: 0 -} - -.popover.left>.arrow:after, -.popover.right>.arrow:after { - bottom: -10px; - content: " " -} - -.popover.right>.arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, .25); - border-left-width: 0 -} - -.popover.right>.arrow:after { - left: 1px; - border-right-color: #fff; - border-left-width: 0 -} - -.popover.bottom>.arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, .25) -} - -.popover.bottom>.arrow:after { - top: 1px; - margin-left: -10px; - content: " "; - border-top-width: 0; - border-bottom-color: #fff -} - -.popover.left>.arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, .25) -} - -.popover.left>.arrow:after { - right: 1px; - border-right-width: 0; - border-left-color: #fff -} - -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0 -} - -.popover-content { - padding: 9px 14px -} - -.carousel-inner { - width: 100%; - overflow: hidden -} - -.carousel-inner>.item { - position: relative; - display: none; - -webkit-transition: .6s ease-in-out left; - -o-transition: .6s ease-in-out left; - transition: .6s ease-in-out left -} - -.carousel-inner>.item>a>img, -.carousel-inner>.item>img { - line-height: 1 -} - -@media all and (transform-3d), -(-webkit-transform-3d) { - .carousel-inner>.item { - -webkit-transition: -webkit-transform .6s ease-in-out; - -o-transition: -o-transform .6s ease-in-out; - transition: -webkit-transform .6s ease-in-out; - transition: transform .6s ease-in-out; - transition: transform .6s ease-in-out, -webkit-transform .6s ease-in-out, -o-transform .6s ease-in-out; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000px; - perspective: 1000px - } - - .carousel-inner>.item.active.right, - .carousel-inner>.item.next { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - left: 0 - } - - .carousel-inner>.item.active.left, - .carousel-inner>.item.prev { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - left: 0 - } - - .carousel-inner>.item.active, - .carousel-inner>.item.next.left, - .carousel-inner>.item.prev.right { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - left: 0 - } -} - -.carousel-inner>.active, -.carousel-inner>.next, -.carousel-inner>.prev { - display: block -} - -.carousel-inner>.active { - left: 0 -} - -.carousel-inner>.next, -.carousel-inner>.prev { - position: absolute; - top: 0; - width: 100% -} - -.carousel-inner>.next { - left: 100% -} - -.carousel-inner>.prev { - left: -100% -} - -.carousel-inner>.next.left, -.carousel-inner>.prev.right { - left: 0 -} - -.carousel-inner>.active.left { - left: -100% -} - -.carousel-inner>.active.right { - left: 100% -} - -.carousel-control { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 15%; - font-size: 20px; - background-color: rgba(0, 0, 0, 0); - filter: alpha(opacity=50); - opacity: .5 -} - -.carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0, rgba(0, 0, 0, .0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0, rgba(0, 0, 0, .0001) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); - background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0, rgba(0, 0, 0, .0001) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); - background-repeat: repeat-x -} - -.carousel-control.right { - right: 0; - left: auto; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0, rgba(0, 0, 0, .5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0, rgba(0, 0, 0, .5) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); - background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0, rgba(0, 0, 0, .5) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); - background-repeat: repeat-x -} - -.carousel-control:focus, -.carousel-control:hover { - color: #fff; - text-decoration: none; - outline: 0; - filter: alpha(opacity=90); - opacity: .9 -} - -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right, -.carousel-control .icon-next, -.carousel-control .icon-prev { - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; - margin-top: -10px -} - -.carousel-control .glyphicon-chevron-left, -.carousel-control .icon-prev { - left: 50%; - margin-left: -10px -} - -.carousel-control .glyphicon-chevron-right, -.carousel-control .icon-next { - right: 50%; - margin-right: -10px -} - -.carousel-control .icon-next, -.carousel-control .icon-prev { - width: 20px; - height: 20px; - font-family: serif; - line-height: 1 -} - -.carousel-control .icon-prev:before { - content: "\2039" -} - -.carousel-control .icon-next:before { - content: "\203a" -} - -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - padding-left: 0; - margin-left: -30%; - text-align: center; - list-style: none -} - -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - cursor: pointer; - background-color: #000\9; - background-color: rgba(0, 0, 0, 0); - border: 1px solid #fff; - border-radius: 10px -} - -.carousel-indicators .active { - width: 12px; - height: 12px; - margin: 0; - background-color: #fff -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px -} - -.carousel-caption .btn, -.text-hide { - text-shadow: none -} - -@media screen and (min-width:768px) { - - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next, - .carousel-control .icon-prev { - width: 30px; - height: 30px; - margin-top: -10px; - font-size: 30px - } - - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -10px - } - - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -10px - } - - .carousel-caption { - right: 20%; - left: 20%; - padding-bottom: 30px - } - - .carousel-indicators { - bottom: 20px - } -} - -.btn-group-vertical>.btn-group:after, -.btn-group-vertical>.btn-group:before, -.btn-toolbar:after, -.btn-toolbar:before, -.clearfix:after, -.clearfix:before, -.container-fluid:after, -.container-fluid:before, -.container:after, -.container:before, -.dl-horizontal dd:after, -.dl-horizontal dd:before, -.form-horizontal .form-group:after, -.form-horizontal .form-group:before, -.modal-footer:after, -.modal-footer:before, -.modal-header:after, -.modal-header:before, -.nav:after, -.nav:before, -.navbar-collapse:after, -.navbar-collapse:before, -.navbar-header:after, -.navbar-header:before, -.navbar:after, -.navbar:before, -.pager:after, -.pager:before, -.panel-body:after, -.panel-body:before, -.row:after, -.row:before { - display: table; - content: " " -} - -.btn-group-vertical>.btn-group:after, -.btn-toolbar:after, -.clearfix:after, -.container-fluid:after, -.container:after, -.dl-horizontal dd:after, -.form-horizontal .form-group:after, -.modal-footer:after, -.modal-header:after, -.nav:after, -.navbar-collapse:after, -.navbar-header:after, -.navbar:after, -.pager:after, -.panel-body:after, -.row:after { - clear: both -} - -.center-block { - display: block; - margin-right: auto; - margin-left: auto -} - -.pull-right { - float: right !important -} - -.pull-left { - float: left !important -} - -.hide { - display: none !important -} - -.show { - display: block !important -} - -.hidden, -.visible-lg, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block, -.visible-md, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-sm, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-xs, -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block { - display: none !important -} - -.invisible { - visibility: hidden -} - -.text-hide { - font: 0/0 a; - color: transparent; - background-color: transparent; - border: 0 -} - -.affix { - position: fixed -} - -@-ms-viewport { - width: device-width -} - -@media (max-width:767px) { - .visible-xs { - display: block !important - } - - table.visible-xs { - display: table !important - } - - tr.visible-xs { - display: table-row !important - } - - td.visible-xs, - th.visible-xs { - display: table-cell !important - } - - .visible-xs-block { - display: block !important - } - - .visible-xs-inline { - display: inline !important - } - - .visible-xs-inline-block { - display: inline-block !important - } -} - -@media (min-width:768px) and (max-width:991px) { - .visible-sm { - display: block !important - } - - table.visible-sm { - display: table !important - } - - tr.visible-sm { - display: table-row !important - } - - td.visible-sm, - th.visible-sm { - display: table-cell !important - } - - .visible-sm-block { - display: block !important - } - - .visible-sm-inline { - display: inline !important - } - - .visible-sm-inline-block { - display: inline-block !important - } -} - -@media (min-width:992px) and (max-width:1199px) { - .visible-md { - display: block !important - } - - table.visible-md { - display: table !important - } - - tr.visible-md { - display: table-row !important - } - - td.visible-md, - th.visible-md { - display: table-cell !important - } - - .visible-md-block { - display: block !important - } - - .visible-md-inline { - display: inline !important - } - - .visible-md-inline-block { - display: inline-block !important - } -} - -@media (min-width:1200px) { - .visible-lg { - display: block !important - } - - table.visible-lg { - display: table !important - } - - tr.visible-lg { - display: table-row !important - } - - td.visible-lg, - th.visible-lg { - display: table-cell !important - } - - .visible-lg-block { - display: block !important - } - - .visible-lg-inline { - display: inline !important - } - - .visible-lg-inline-block { - display: inline-block !important - } - - .hidden-lg { - display: none !important - } -} - -@media (max-width:767px) { - .hidden-xs { - display: none !important - } -} - -@media (min-width:768px) and (max-width:991px) { - .hidden-sm { - display: none !important - } -} - -@media (min-width:992px) and (max-width:1199px) { - .hidden-md { - display: none !important - } -} - -.visible-print { - display: none !important -} - -@media print { - .visible-print { - display: block !important - } - - table.visible-print { - display: table !important - } - - tr.visible-print { - display: table-row !important - } - - td.visible-print, - th.visible-print { - display: table-cell !important - } -} - -.visible-print-block { - display: none !important -} - -@media print { - .visible-print-block { - display: block !important - } -} - -.visible-print-inline { - display: none !important -} - -@media print { - .visible-print-inline { - display: inline !important - } -} - -.visible-print-inline-block { - display: none !important -} - -@media print { - .visible-print-inline-block { - display: inline-block !important - } - - .hidden-print { - display: none !important - } -} - -.hljs { - display: block; - background: #fff; - padding: .5em; - color: #333; - overflow-x: auto -} - -.hljs-comment, -.hljs-meta { - color: #969896 -} - -.hljs-emphasis, -.hljs-quote, -.hljs-string, -.hljs-strong, -.hljs-template-variable, -.hljs-variable { - color: #df5000 -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-type { - color: #a71d5d -} - -.hljs-attribute, -.hljs-bullet, -.hljs-literal, -.hljs-symbol { - color: #0086b3 -} - -.hljs-name, -.hljs-section { - color: #63a35c -} - -.hljs-tag { - color: #333 -} - -.hljs-attr, -.hljs-selector-attr, -.hljs-selector-class, -.hljs-selector-id, -.hljs-selector-pseudo, -.hljs-title { - color: #795da3 -} - -.hljs-addition { - color: #55a532; - background-color: #eaffea -} - -.hljs-deletion { - color: #bd2c00; - background-color: #ffecec -} - -.hljs-link { - text-decoration: underline -} \ No newline at end of file diff --git a/RWSDocsTemplate/styles/docfx.vendor.js b/RWSDocsTemplate/styles/docfx.vendor.js deleted file mode 100644 index 154de37..0000000 --- a/RWSDocsTemplate/styles/docfx.vendor.js +++ /dev/null @@ -1,51 +0,0 @@ -/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(idocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},s.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},s.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:t},m.prototype.init=function(t,e,i){if(this.enabled=!0,this.type=t,this.$element=g(e),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&g(document).find(g.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),n=o.length;n--;){var s=o[n];if("click"==s)this.$element.on("click."+this.type,this.options.selector,g.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",r="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,g.proxy(this.enter,this)),this.$element.on(r+"."+this.type,this.options.selector,g.proxy(this.leave,this))}}this.options.selector?this._options=g.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},m.prototype.getDefaults=function(){return m.DEFAULTS},m.prototype.getOptions=function(t){var e=this.$element.data();for(var i in e)e.hasOwnProperty(i)&&-1!==g.inArray(i,o)&&delete e[i];return(t=g.extend({},this.getDefaults(),e,t)).delay&&"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t.sanitize&&(t.template=n(t.template,t.whiteList,t.sanitizeFn)),t},m.prototype.getDelegateOptions=function(){var i={},o=this.getDefaults();return this._options&&g.each(this._options,function(t,e){o[t]!=e&&(i[t]=e)}),i},m.prototype.enter=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusin"==t.type?"focus":"hover"]=!0),e.tip().hasClass("in")||"in"==e.hoverState)e.hoverState="in";else{if(clearTimeout(e.timeout),e.hoverState="in",!e.options.delay||!e.options.delay.show)return e.show();e.timeout=setTimeout(function(){"in"==e.hoverState&&e.show()},e.options.delay.show)}},m.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},m.prototype.leave=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusout"==t.type?"focus":"hover"]=!1),!e.isInStateTrue()){if(clearTimeout(e.timeout),e.hoverState="out",!e.options.delay||!e.options.delay.hide)return e.hide();e.timeout=setTimeout(function(){"out"==e.hoverState&&e.hide()},e.options.delay.hide)}},m.prototype.show=function(){var t=g.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var e=g.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!e)return;var i=this,o=this.tip(),n=this.getUID(this.type);this.setContent(),o.attr("id",n),this.$element.attr("aria-describedby",n),this.options.animation&&o.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,r=a.test(s);r&&(s=s.replace(a,"")||"top"),o.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?o.appendTo(g(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var l=this.getPosition(),h=o[0].offsetWidth,d=o[0].offsetHeight;if(r){var p=s,c=this.getPosition(this.$viewport);s="bottom"==s&&l.bottom+d>c.bottom?"top":"top"==s&&l.top-dc.width?"left":"left"==s&&l.left-ha.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;ha.right&&(n.left=a.left+a.width-d)}return n},m.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},m.prototype.getUID=function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},m.prototype.tip=function(){if(!this.$tip&&(this.$tip=g(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},m.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},m.prototype.enable=function(){this.enabled=!0},m.prototype.disable=function(){this.enabled=!1},m.prototype.toggleEnabled=function(){this.enabled=!this.enabled},m.prototype.toggle=function(t){var e=this;t&&((e=g(t.currentTarget).data("bs."+this.type))||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e))),t?(e.inState.click=!e.inState.click,e.isInStateTrue()?e.enter(e):e.leave(e)):e.tip().hasClass("in")?e.leave(e):e.enter(e)},m.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})},m.prototype.sanitizeHtml=function(t){return n(t,this.options.whiteList,this.options.sanitizeFn)};var e=g.fn.tooltip;g.fn.tooltip=function i(o){return this.each(function(){var t=g(this),e=t.data("bs.tooltip"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.tooltip",e=new m(this,i)),"string"==typeof o&&e[o]())})},g.fn.tooltip.Constructor=m,g.fn.tooltip.noConflict=function(){return g.fn.tooltip=e,this}}(jQuery),function(n){"use strict";var s=function(t,e){this.init("popover",t,e)};if(!n.fn.tooltip)throw new Error("Popover requires tooltip.js");s.VERSION="3.4.1",s.DEFAULTS=n.extend({},n.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'

'}),((s.prototype=n.extend({},n.fn.tooltip.Constructor.prototype)).constructor=s).prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();if(this.options.html){var o=typeof i;this.options.sanitize&&(e=this.sanitizeHtml(e),"string"===o&&(i=this.sanitizeHtml(i))),t.find(".popover-title").html(e),t.find(".popover-content").children().detach().end()["string"===o?"html":"append"](i)}else t.find(".popover-title").text(e),t.find(".popover-content").children().detach().end().text(i);t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},s.prototype.hasContent=function(){return this.getTitle()||this.getContent()},s.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var t=n.fn.popover;n.fn.popover=function e(o){return this.each(function(){var t=n(this),e=t.data("bs.popover"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.popover",e=new s(this,i)),"string"==typeof o&&e[o]())})},n.fn.popover.Constructor=s,n.fn.popover.noConflict=function(){return n.fn.popover=t,this}}(jQuery),function(s){"use strict";function n(t,e){this.$body=s(document.body),this.$scrollElement=s(t).is(document.body)?s(window):s(t),this.options=s.extend({},n.DEFAULTS,e),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",s.proxy(this.process,this)),this.refresh(),this.process()}function e(o){return this.each(function(){var t=s(this),e=t.data("bs.scrollspy"),i="object"==typeof o&&o;e||t.data("bs.scrollspy",e=new n(this,i)),"string"==typeof o&&e[o]()})}n.VERSION="3.4.1",n.DEFAULTS={offset:10},n.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},n.prototype.refresh=function(){var t=this,o="offset",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),s.isWindow(this.$scrollElement[0])||(o="position",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=s(this),e=t.data("target")||t.attr("href"),i=/^#./.test(e)&&s(e);return i&&i.length&&i.is(":visible")&&[[i[o]().top+n,e]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},n.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),o<=e)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e=n[t]&&(n[t+1]===undefined||e .active"),n=i&&r.support.transition&&(o.length&&o.hasClass("fade")||!!e.find("> .fade").length);function s(){o.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),t.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),n?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu").length&&t.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),i&&i()}o.length&&n?o.one("bsTransitionEnd",s).emulateTransitionEnd(a.TRANSITION_DURATION):s(),o.removeClass("in")};var t=r.fn.tab;r.fn.tab=e,r.fn.tab.Constructor=a,r.fn.tab.noConflict=function(){return r.fn.tab=t,this};var i=function(t){t.preventDefault(),e.call(r(this),"show")};r(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery),function(l){"use strict";var h=function(t,e){this.options=l.extend({},h.DEFAULTS,e);var i=this.options.target===h.DEFAULTS.target?l(this.options.target):l(document).find(this.options.target);this.$target=i.on("scroll.bs.affix.data-api",l.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",l.proxy(this.checkPositionWithEventLoop,this)),this.$element=l(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function i(o){return this.each(function(){var t=l(this),e=t.data("bs.affix"),i="object"==typeof o&&o;e||t.data("bs.affix",e=new h(this,i)),"string"==typeof o&&e[o]()})}h.VERSION="3.4.1",h.RESET="affix affix-top affix-bottom",h.DEFAULTS={offset:0,target:window},h.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return n/g,">")}function r(e){return e.nodeName.toLowerCase()}function a(e,t){var r=e&&e.exec(t);return r&&0===r.index}function i(e){return T.test(e)}function n(e){var t,r,a,n,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",r=w.exec(o))return S(r[1])?r[1]:"no-highlight";for(o=o.split(/\s+/),t=0,a=o.length;a>t;t++)if(n=o[t],i(n)||S(n))return n}function o(e){var t,r={},a=Array.prototype.slice.call(arguments,1);for(t in e)r[t]=e[t];return a.forEach(function(e){for(t in e)r[t]=e[t]}),r}function s(e){var t=[];return function a(e,i){for(var n=e.firstChild;n;n=n.nextSibling)3===n.nodeType?i+=n.nodeValue.length:1===n.nodeType&&(t.push({event:"start",offset:i,node:n}),i=a(n,i),r(n).match(/br|hr|img|input/)||t.push({event:"stop",offset:i,node:n}));return i}(e,0),t}function l(e,a,i){function n(){return e.length&&a.length?e[0].offset!==a[0].offset?e[0].offset"}function s(e){d+=""}function l(e){("start"===e.event?o:s)(e.node)}for(var c=0,d="",p=[];e.length||a.length;){var m=n();if(d+=t(i.substring(c,m[0].offset)),c=m[0].offset,m===e){p.reverse().forEach(s);do l(m.splice(0,1)[0]),m=n();while(m===e&&m.length&&m[0].offset===c);p.reverse().forEach(o)}else"start"===m[0].event?p.push(m[0].node):p.pop(),l(m.splice(0,1)[0])}return d+t(i.substr(c))}function c(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(t){return o(e,{v:null},t)})),e.cached_variants||e.eW&&[o(e)]||[e]}function d(e){function t(e){return e&&e.source||e}function r(r,a){return new RegExp(t(r),"m"+(e.cI?"i":"")+(a?"g":""))}function a(i,n){if(!i.compiled){if(i.compiled=!0,i.k=i.k||i.bK,i.k){var o={},s=function(t,r){e.cI&&(r=r.toLowerCase()),r.split(" ").forEach(function(e){var r=e.split("|");o[r[0]]=[t,r[1]?Number(r[1]):1]})};"string"==typeof i.k?s("keyword",i.k):x(i.k).forEach(function(e){s(e,i.k[e])}),i.k=o}i.lR=r(i.l||/\w+/,!0),n&&(i.bK&&(i.b="\\b("+i.bK.split(" ").join("|")+")\\b"),i.b||(i.b=/\B|\b/),i.bR=r(i.b),i.e||i.eW||(i.e=/\B|\b/),i.e&&(i.eR=r(i.e)),i.tE=t(i.e)||"",i.eW&&n.tE&&(i.tE+=(i.e?"|":"")+n.tE)),i.i&&(i.iR=r(i.i)),null==i.r&&(i.r=1),i.c||(i.c=[]),i.c=Array.prototype.concat.apply([],i.c.map(function(e){return c("self"===e?i:e)})),i.c.forEach(function(e){a(e,i)}),i.starts&&a(i.starts,n);var l=i.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([i.tE,i.i]).map(t).filter(Boolean);i.t=l.length?r(l.join("|"),!0):{exec:function(){return null}}}}a(e)}function p(e,r,i,n){function o(e,t){var r,i;for(r=0,i=t.c.length;i>r;r++)if(a(t.c[r].bR,e))return t.c[r]}function s(e,t){if(a(e.eR,t)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?s(e.parent,t):void 0}function l(e,t){return!i&&a(t.iR,e)}function c(e,t){var r=v.cI?t[0].toLowerCase():t[0];return e.k.hasOwnProperty(r)&&e.k[r]}function u(e,t,r,a){var i=a?"":D.classPrefix,n='',n+t+o}function b(){var e,r,a,i;if(!C.k)return t(T);for(i="",r=0,C.lR.lastIndex=0,a=C.lR.exec(T);a;)i+=t(T.substring(r,a.index)),e=c(C,a),e?(w+=e[1],i+=u(e[0],t(a[0]))):i+=t(a[0]),r=C.lR.lastIndex,a=C.lR.exec(T);return i+t(T.substr(r))}function g(){var e="string"==typeof C.sL;if(e&&!E[C.sL])return t(T);var r=e?p(C.sL,T,!0,x[C.sL]):m(T,C.sL.length?C.sL:void 0);return C.r>0&&(w+=r.r),e&&(x[C.sL]=r.top),u(r.language,r.value,!1,!0)}function f(){N+=null!=C.sL?g():b(),T=""}function _(e){N+=e.cN?u(e.cN,"",!0):"",C=Object.create(e,{parent:{value:C}})}function h(e,t){if(T+=e,null==t)return f(),0;var r=o(t,C);if(r)return r.skip?T+=t:(r.eB&&(T+=t),f(),r.rB||r.eB||(T=t)),_(r,t),r.rB?0:t.length;var a=s(C,t);if(a){var i=C;i.skip?T+=t:(i.rE||i.eE||(T+=t),f(),i.eE&&(T=t));do C.cN&&(N+=M),C.skip||(w+=C.r),C=C.parent;while(C!==a.parent);return a.starts&&_(a.starts,""),i.rE?0:t.length}if(l(t,C))throw new Error('Illegal lexeme "'+t+'" for mode "'+(C.cN||"")+'"');return T+=t,t.length||1}var v=S(e);if(!v)throw new Error('Unknown language: "'+e+'"');d(v);var y,C=n||v,x={},N="";for(y=C;y!==v;y=y.parent)y.cN&&(N=u(y.cN,"",!0)+N);var T="",w=0;try{for(var A,I,k=0;;){if(C.t.lastIndex=k,A=C.t.exec(r),!A)break;I=h(r.substring(k,A.index),A[0]),k=A.index+I}for(h(r.substr(k)),y=C;y.parent;y=y.parent)y.cN&&(N+=M);return{r:w,value:N,language:e,top:C}}catch(R){if(R.message&&-1!==R.message.indexOf("Illegal"))return{r:0,value:t(r)};throw R}}function m(e,r){r=r||D.languages||x(E);var a={r:0,value:t(e)},i=a;return r.filter(S).forEach(function(t){var r=p(t,e,!1);r.language=t,r.r>i.r&&(i=r),r.r>a.r&&(i=a,a=r)}),i.language&&(a.second_best=i),a}function u(e){return D.tabReplace||D.useBR?e.replace(A,function(e,t){return D.useBR&&"\n"===e?"
":D.tabReplace?t.replace(/\t/g,D.tabReplace):""}):e}function b(e,t,r){var a=t?N[t]:r,i=[e.trim()];return e.match(/\bhljs\b/)||i.push("hljs"),-1===e.indexOf(a)&&i.push(a),i.join(" ").trim()}function g(e){var t,r,a,o,c,d=n(e);i(d)||(D.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):t=e,c=t.textContent,a=d?p(d,c,!0):m(c),r=s(t),r.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=a.value,a.value=l(r,s(o),c)),a.value=u(a.value),e.innerHTML=a.value,e.className=b(e.className,d,a.language),e.result={language:a.language,re:a.r},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.r}))}function f(e){D=o(D,e)}function _(){if(!_.called){_.called=!0;var e=document.querySelectorAll("pre code");C.forEach.call(e,g)}}function h(){addEventListener("DOMContentLoaded",_,!1),addEventListener("load",_,!1)}function v(t,r){var a=E[t]=r(e);a.aliases&&a.aliases.forEach(function(e){N[e]=t})}function y(){return x(E)}function S(e){return e=(e||"").toLowerCase(),E[e]||E[N[e]]}var C=[],x=Object.keys,E={},N={},T=/^(no-?highlight|plain|text)$/i,w=/\blang(?:uage)?-([\w-]+)\b/i,A=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,M="
",D={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=p,e.highlightAuto=m,e.fixMarkup=u,e.highlightBlock=g,e.configure=f,e.initHighlighting=_,e.initHighlightingOnLoad=h,e.registerLanguage=v,e.listLanguages=y,e.getLanguage=S,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.C=function(t,r,a){var i=e.inherit({cN:"comment",b:t,e:r,c:[]},a||{});return i.c.push(e.PWM),i.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),i},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e.registerLanguage("1c",function(e){var t="[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]+",r="далее ",a="возврат вызватьисключение выполнить для если и из или иначе иначеесли исключение каждого конецесли конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл экспорт ",i=r+a,n="загрузитьизфайла ",o="вебклиент вместо внешнеесоединение клиент конецобласти мобильноеприложениеклиент мобильноеприложениесервер наклиенте наклиентенасервере наклиентенасерверебезконтекста насервере насерверебезконтекста область перед после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент ",s=n+o,l="разделительстраниц разделительстрок символтабуляции ",c="ansitooem oemtoansi ввестивидсубконто ввестиперечисление ввестипериод ввестиплансчетов выбранныйплансчетов датагод датамесяц датачисло заголовоксистемы значениевстроку значениеизстроки каталогиб каталогпользователя кодсимв конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца коннедели лог лог10 максимальноеколичествосубконто названиеинтерфейса названиенабораправ назначитьвид назначитьсчет найтиссылки началопериодаби началостандартногоинтервала начгода начквартала начмесяца начнедели номерднягода номерднянедели номернеделигода обработкаожидания основнойжурналрасчетов основнойплансчетов основнойязык очиститьокносообщений периодстр получитьвремята получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта префиксавтонумерации пропись пустоезначение разм разобратьпозициюдокумента рассчитатьрегистрына рассчитатьрегистрыпо симв создатьобъект статусвозврата стрколичествострок сформироватьпозициюдокумента счетпокоду текущеевремя типзначения типзначениястр установитьтана установитьтапо фиксшаблон шаблон ",d="acos asin atan base64значение base64строка cos exp log log10 pow sin sqrt tan xmlзначение xmlстрока xmlтип xmlтипзнч активноеокно безопасныйрежим безопасныйрежимразделенияданных булево ввестидату ввестизначение ввестистроку ввестичисло возможностьчтенияxml вопрос восстановитьзначение врег выгрузитьжурналрегистрации выполнитьобработкуоповещения выполнитьпроверкуправдоступа вычислить год данныеформывзначение дата день деньгода деньнедели добавитьмесяц заблокироватьданныедляредактирования заблокироватьработупользователя завершитьработусистемы загрузитьвнешнююкомпоненту закрытьсправку записатьjson записатьxml записатьдатуjson записьжурналарегистрации заполнитьзначениясвойств запроситьразрешениепользователя запуститьприложение запуститьсистему зафиксироватьтранзакцию значениевданныеформы значениевстрокувнутр значениевфайл значениезаполнено значениеизстрокивнутр значениеизфайла изxmlтипа импортмоделиxdto имякомпьютера имяпользователя инициализироватьпредопределенныеданные информацияобошибке каталогбиблиотекимобильногоустройства каталогвременныхфайлов каталогдокументов каталогпрограммы кодироватьстроку кодлокализацииинформационнойбазы кодсимвола командасистемы конецгода конецдня конецквартала конецмесяца конецминуты конецнедели конецчаса конфигурациябазыданныхизмененадинамически конфигурацияизменена копироватьданныеформы копироватьфайл краткоепредставлениеошибки лев макс местноевремя месяц мин минута монопольныйрежим найти найтинедопустимыесимволыxml найтиокнопонавигационнойссылке найтипомеченныенаудаление найтипоссылкам найтифайлы началогода началодня началоквартала началомесяца началоминуты началонедели началочаса начатьзапросразрешенияпользователя начатьзапускприложения начатькопированиефайла начатьперемещениефайла начатьподключениевнешнейкомпоненты начатьподключениерасширенияработыскриптографией начатьподключениерасширенияработысфайлами начатьпоискфайлов начатьполучениекаталогавременныхфайлов начатьполучениекаталогадокументов начатьполучениерабочегокаталогаданныхпользователя начатьполучениефайлов начатьпомещениефайла начатьпомещениефайлов начатьсозданиедвоичныхданныхизфайла начатьсозданиекаталога начатьтранзакцию начатьудалениефайлов начатьустановкувнешнейкомпоненты начатьустановкурасширенияработыскриптографией начатьустановкурасширенияработысфайлами неделягода необходимостьзавершениясоединения номерсеансаинформационнойбазы номерсоединенияинформационнойбазы нрег нстр обновитьинтерфейс обновитьнумерациюобъектов обновитьповторноиспользуемыезначения обработкапрерыванияпользователя объединитьфайлы окр описаниеошибки оповестить оповеститьобизменении отключитьобработчикзапросанастроекклиенталицензирования отключитьобработчикожидания отключитьобработчикоповещения открытьзначение открытьиндекссправки открытьсодержаниесправки открытьсправку открытьформу открытьформумодально отменитьтранзакцию очиститьжурналрегистрации очиститьнастройкипользователя очиститьсообщения параметрыдоступа перейтипонавигационнойссылке переместитьфайл подключитьвнешнююкомпоненту подключитьобработчикзапросанастроекклиенталицензирования подключитьобработчикожидания подключитьобработчикоповещения подключитьрасширениеработыскриптографией подключитьрасширениеработысфайлами подробноепредставлениеошибки показатьвводдаты показатьвводзначения показатьвводстроки показатьвводчисла показатьвопрос показатьзначение показатьинформациюобошибке показатьнакарте показатьоповещениепользователя показатьпредупреждение полноеимяпользователя получитьcomобъект получитьxmlтип получитьадреспоместоположению получитьблокировкусеансов получитьвремязавершенияспящегосеанса получитьвремязасыпанияпассивногосеанса получитьвремяожиданияблокировкиданных получитьданныевыбора получитьдополнительныйпараметрклиенталицензирования получитьдопустимыекодылокализации получитьдопустимыечасовыепояса получитьзаголовокклиентскогоприложения получитьзаголовоксистемы получитьзначенияотборажурналарегистрации получитьидентификаторконфигурации получитьизвременногохранилища получитьимявременногофайла получитьимяклиенталицензирования получитьинформациюэкрановклиента получитьиспользованиежурналарегистрации получитьиспользованиесобытияжурналарегистрации получитькраткийзаголовокприложения получитьмакетоформления получитьмаскувсефайлы получитьмаскувсефайлыклиента получитьмаскувсефайлысервера получитьместоположениепоадресу получитьминимальнуюдлинупаролейпользователей получитьнавигационнуюссылку получитьнавигационнуюссылкуинформационнойбазы получитьобновлениеконфигурациибазыданных получитьобновлениепредопределенныхданныхинформационнойбазы получитьобщиймакет получитьобщуюформу получитьокна получитьоперативнуюотметкувремени получитьотключениебезопасногорежима получитьпараметрыфункциональныхопцийинтерфейса получитьполноеимяпредопределенногозначения получитьпредставлениянавигационныхссылок получитьпроверкусложностипаролейпользователей получитьразделительпути получитьразделительпутиклиента получитьразделительпутисервера получитьсеансыинформационнойбазы получитьскоростьклиентскогосоединения получитьсоединенияинформационнойбазы получитьсообщенияпользователю получитьсоответствиеобъектаиформы получитьсоставстандартногоинтерфейсаodata получитьструктурухранениябазыданных получитьтекущийсеансинформационнойбазы получитьфайл получитьфайлы получитьформу получитьфункциональнуюопцию получитьфункциональнуюопциюинтерфейса получитьчасовойпоясинформационнойбазы пользователиос поместитьвовременноехранилище поместитьфайл поместитьфайлы прав праводоступа предопределенноезначение представлениекодалокализации представлениепериода представлениеправа представлениеприложения представлениесобытияжурналарегистрации представлениечасовогопояса предупреждение прекратитьработусистемы привилегированныйрежим продолжитьвызов прочитатьjson прочитатьxml прочитатьдатуjson пустаястрока рабочийкаталогданныхпользователя разблокироватьданныедляредактирования разделитьфайл разорватьсоединениесвнешнимисточникомданных раскодироватьстроку рольдоступна секунда сигнал символ скопироватьжурналрегистрации смещениелетнеговремени смещениестандартноговремени соединитьбуферыдвоичныхданных создатькаталог создатьфабрикуxdto сокрл сокрлп сокрп сообщить состояние сохранитьзначение сохранитьнастройкипользователя сред стрдлина стрзаканчиваетсяна стрзаменить стрнайти стрначинаетсяс строка строкасоединенияинформационнойбазы стрполучитьстроку стрразделить стрсоединить стрсравнить стрчисловхождений стрчислострок стршаблон текущаядата текущаядатасеанса текущаяуниверсальнаядата текущаяуниверсальнаядатавмиллисекундах текущийвариантинтерфейсаклиентскогоприложения текущийвариантосновногошрифтаклиентскогоприложения текущийкодлокализации текущийрежимзапуска текущийязык текущийязыксистемы тип типзнч транзакцияактивна трег удалитьданныеинформационнойбазы удалитьизвременногохранилища удалитьобъекты удалитьфайлы универсальноевремя установитьбезопасныйрежим установитьбезопасныйрежимразделенияданных установитьблокировкусеансов установитьвнешнююкомпоненту установитьвремязавершенияспящегосеанса установитьвремязасыпанияпассивногосеанса установитьвремяожиданияблокировкиданных установитьзаголовокклиентскогоприложения установитьзаголовоксистемы установитьиспользованиежурналарегистрации установитьиспользованиесобытияжурналарегистрации установитькраткийзаголовокприложения установитьминимальнуюдлинупаролейпользователей установитьмонопольныйрежим установитьнастройкиклиенталицензирования установитьобновлениепредопределенныхданныхинформационнойбазы установитьотключениебезопасногорежима установитьпараметрыфункциональныхопцийинтерфейса установитьпривилегированныйрежим установитьпроверкусложностипаролейпользователей установитьрасширениеработыскриптографией установитьрасширениеработысфайлами установитьсоединениесвнешнимисточникомданных установитьсоответствиеобъектаиформы установитьсоставстандартногоинтерфейсаodata установитьчасовойпоясинформационнойбазы установитьчасовойпояссеанса формат цел час часовойпояс часовойпояссеанса число числопрописью этоадресвременногохранилища ",p="wsссылки библиотекакартинок библиотекамакетовоформлениякомпоновкиданных библиотекастилей бизнеспроцессы внешниеисточникиданных внешниеобработки внешниеотчеты встроенныепокупки главныйинтерфейс главныйстиль документы доставляемыеуведомления журналыдокументов задачи информацияобинтернетсоединении использованиерабочейдаты историяработыпользователя константы критерииотбора метаданные обработки отображениерекламы отправкадоставляемыхуведомлений отчеты панельзадачос параметрзапуска параметрысеанса перечисления планывидоврасчета планывидовхарактеристик планыобмена планысчетов полнотекстовыйпоиск пользователиинформационнойбазы последовательности проверкавстроенныхпокупок рабочаядата расширенияконфигурации регистрыбухгалтерии регистрынакопления регистрырасчета регистрысведений регламентныезадания сериализаторxdto справочники средствагеопозиционирования средствакриптографии средствамультимедиа средстваотображениярекламы средствапочты средствателефонии фабрикаxdto файловыепотоки фоновыезадания хранилищанастроек хранилищевариантовотчетов хранилищенастроекданныхформ хранилищеобщихнастроек хранилищепользовательскихнастроекдинамическихсписков хранилищепользовательскихнастроекотчетов хранилищесистемныхнастроек ",m=l+c+d+p,u="webцвета windowsцвета windowsшрифты библиотекакартинок рамкистиля символы цветастиля шрифтыстиля ",b="автоматическоесохранениеданныхформывнастройках автонумерациявформе автораздвижениесерий анимациядиаграммы вариантвыравниванияэлементовизаголовков вариантуправлениявысотойтаблицы вертикальнаяпрокруткаформы вертикальноеположение вертикальноеположениеэлемента видгруппыформы виддекорацииформы виддополненияэлементаформы видизмененияданных видкнопкиформы видпереключателя видподписейкдиаграмме видполяформы видфлажка влияниеразмеранапузырекдиаграммы горизонтальноеположение горизонтальноеположениеэлемента группировкаколонок группировкаподчиненныхэлементовформы группыиэлементы действиеперетаскивания дополнительныйрежимотображения допустимыедействияперетаскивания интервалмеждуэлементамиформы использованиевывода использованиеполосыпрокрутки используемоезначениеточкибиржевойдиаграммы историявыборапривводе источникзначенийоситочекдиаграммы источникзначенияразмерапузырькадиаграммы категориягруппыкоманд максимумсерий начальноеотображениедерева начальноеотображениесписка обновлениетекстаредактирования ориентациядендрограммы ориентациядиаграммы ориентацияметокдиаграммы ориентацияметоксводнойдиаграммы ориентацияэлементаформы отображениевдиаграмме отображениевлегендедиаграммы отображениегруппыкнопок отображениезаголовкашкалыдиаграммы отображениезначенийсводнойдиаграммы отображениезначенияизмерительнойдиаграммы отображениеинтерваладиаграммыганта отображениекнопки отображениекнопкивыбора отображениеобсужденийформы отображениеобычнойгруппы отображениеотрицательныхзначенийпузырьковойдиаграммы отображениепанелипоиска отображениеподсказки отображениепредупрежденияприредактировании отображениеразметкиполосырегулирования отображениестраницформы отображениетаблицы отображениетекстазначениядиаграммыганта отображениеуправленияобычнойгруппы отображениефигурыкнопки палитрацветовдиаграммы поведениеобычнойгруппы поддержкамасштабадендрограммы поддержкамасштабадиаграммыганта поддержкамасштабасводнойдиаграммы поисквтаблицепривводе положениезаголовкаэлементаформы положениекартинкикнопкиформы положениекартинкиэлементаграфическойсхемы положениекоманднойпанелиформы положениекоманднойпанелиэлементаформы положениеопорнойточкиотрисовки положениеподписейкдиаграмме положениеподписейшкалызначенийизмерительнойдиаграммы положениесостоянияпросмотра положениестрокипоиска положениетекстасоединительнойлинии положениеуправленияпоиском положениешкалывремени порядокотображенияточекгоризонтальнойгистограммы порядоксерийвлегендедиаграммы размеркартинки расположениезаголовкашкалыдиаграммы растягиваниеповертикалидиаграммыганта режимавтоотображениясостояния режимвводастроктаблицы режимвыборанезаполненного режимвыделениядаты режимвыделениястрокитаблицы режимвыделениятаблицы режимизмененияразмера режимизменениясвязанногозначения режимиспользованиядиалогапечати режимиспользованияпараметракоманды режиммасштабированияпросмотра режимосновногоокнаклиентскогоприложения режимоткрытияокнаформы режимотображениявыделения режимотображениягеографическойсхемы режимотображениязначенийсерии режимотрисовкисеткиграфическойсхемы режимполупрозрачностидиаграммы режимпробеловдиаграммы режимразмещениянастранице режимредактированияколонки режимсглаживаниядиаграммы режимсглаживанияиндикатора режимсписказадач сквозноевыравнивание сохранениеданныхформывнастройках способзаполнениятекстазаголовкашкалыдиаграммы способопределенияограничивающегозначениядиаграммы стандартнаягруппакоманд стандартноеоформление статусоповещенияпользователя стильстрелки типаппроксимациилиниитрендадиаграммы типдиаграммы типединицышкалывремени типимпортасерийслоягеографическойсхемы типлиниигеографическойсхемы типлиниидиаграммы типмаркерагеографическойсхемы типмаркерадиаграммы типобластиоформления типорганизацииисточникаданныхгеографическойсхемы типотображениясериислоягеографическойсхемы типотображенияточечногообъектагеографическойсхемы типотображенияшкалыэлементалегендыгеографическойсхемы типпоискаобъектовгеографическойсхемы типпроекциигеографическойсхемы типразмещенияизмерений типразмещенияреквизитовизмерений типрамкиэлементауправления типсводнойдиаграммы типсвязидиаграммыганта типсоединениязначенийпосериямдиаграммы типсоединенияточекдиаграммы типсоединительнойлинии типстороныэлементаграфическойсхемы типформыотчета типшкалырадарнойдиаграммы факторлиниитрендадиаграммы фигуракнопки фигурыграфическойсхемы фиксациявтаблице форматдняшкалывремени форматкартинки ширинаподчиненныхэлементовформы ",g="виддвижениябухгалтерии виддвижениянакопления видпериодарегистрарасчета видсчета видточкимаршрутабизнеспроцесса использованиеагрегатарегистранакопления использованиегруппиэлементов использованиережимапроведения использованиесреза периодичностьагрегатарегистранакопления режимавтовремя режимзаписидокумента режимпроведениядокумента ",f="авторегистрацияизменений допустимыйномерсообщения отправкаэлементаданных получениеэлементаданных ",_="использованиерасшифровкитабличногодокумента ориентациястраницы положениеитоговколоноксводнойтаблицы положениеитоговстроксводнойтаблицы положениетекстаотносительнокартинки расположениезаголовкагруппировкитабличногодокумента способчтениязначенийтабличногодокумента типдвустороннейпечати типзаполненияобластитабличногодокумента типкурсоровтабличногодокумента типлиниирисункатабличногодокумента типлинииячейкитабличногодокумента типнаправленияпереходатабличногодокумента типотображениявыделениятабличногодокумента типотображениялинийсводнойтаблицы типразмещениятекстатабличногодокумента типрисункатабличногодокумента типсмещениятабличногодокумента типузоратабличногодокумента типфайлатабличногодокумента точностьпечати чередованиерасположениястраниц ",h="отображениевремениэлементовпланировщика ",v="типфайлаформатированногодокумента ",y="обходрезультатазапроса типзаписизапроса ",S="видзаполнениярасшифровкипостроителяотчета типдобавленияпредставлений типизмеренияпостроителяотчета типразмещенияитогов ",C="доступкфайлу режимдиалогавыборафайла режимоткрытияфайла ",x="типизмеренияпостроителязапроса ",E="видданныханализа методкластеризации типединицыинтервалавременианализаданных типзаполнениятаблицырезультатаанализаданных типиспользованиячисловыхзначенийанализаданных типисточникаданныхпоискаассоциаций типколонкианализаданныхдереворешений типколонкианализаданныхкластеризация типколонкианализаданныхобщаястатистика типколонкианализаданныхпоискассоциаций типколонкианализаданныхпоискпоследовательностей типколонкимоделипрогноза типмерырасстоянияанализаданных типотсеченияправилассоциации типполяанализаданных типстандартизациианализаданных типупорядочиванияправилассоциациианализаданных типупорядочиванияшаблоновпоследовательностейанализаданных типупрощениядереварешений ",N="wsнаправлениепараметра вариантxpathxs вариантзаписидатыjson вариантпростоготипаxs видгруппымоделиxs видфасетаxdto действиепостроителяdom завершенностьпростоготипаxs завершенностьсоставноготипаxs завершенностьсхемыxs запрещенныеподстановкиxs исключениягруппподстановкиxs категорияиспользованияатрибутаxs категорияограниченияидентичностиxs категорияограниченияпространствименxs методнаследованияxs модельсодержимогоxs назначениетипаxml недопустимыеподстановкиxs обработкапробельныхсимволовxs обработкасодержимогоxs ограничениезначенияxs параметрыотбораузловdom переносстрокjson позициявдокументеdom пробельныесимволыxml типатрибутаxml типзначенияjson типканоническогоxml типкомпонентыxs типпроверкиxml типрезультатаdomxpath типузлаdom типузлаxml формаxml формапредставленияxs форматдатыjson экранированиесимволовjson ",T="видсравнениякомпоновкиданных действиеобработкирасшифровкикомпоновкиданных направлениесортировкикомпоновкиданных расположениевложенныхэлементоврезультатакомпоновкиданных расположениеитоговкомпоновкиданных расположениегруппировкикомпоновкиданных расположениеполейгруппировкикомпоновкиданных расположениеполякомпоновкиданных расположениереквизитовкомпоновкиданных расположениересурсовкомпоновкиданных типбухгалтерскогоостаткакомпоновкиданных типвыводатекстакомпоновкиданных типгруппировкикомпоновкиданных типгруппыэлементовотборакомпоновкиданных типдополненияпериодакомпоновкиданных типзаголовкаполейкомпоновкиданных типмакетагруппировкикомпоновкиданных типмакетаобластикомпоновкиданных типостаткакомпоновкиданных типпериодакомпоновкиданных типразмещениятекстакомпоновкиданных типсвязинаборовданныхкомпоновкиданных типэлементарезультатакомпоновкиданных расположениелегендыдиаграммыкомпоновкиданных типпримененияотборакомпоновкиданных режимотображенияэлементанастройкикомпоновкиданных режимотображениянастроеккомпоновкиданных состояниеэлементанастройкикомпоновкиданных способвосстановлениянастроеккомпоновкиданных режимкомпоновкирезультата использованиепараметракомпоновкиданных автопозицияресурсовкомпоновкиданных вариантиспользованиягруппировкикомпоновкиданных расположениересурсоввдиаграммекомпоновкиданных фиксациякомпоновкиданных использованиеусловногооформлениякомпоновкиданных ",w="важностьинтернетпочтовогосообщения обработкатекстаинтернетпочтовогосообщения способкодированияинтернетпочтовоговложения способкодированиянеasciiсимволовинтернетпочтовогосообщения типтекстапочтовогосообщения протоколинтернетпочты статусразборапочтовогосообщения ",A="режимтранзакциизаписижурналарегистрации статустранзакциизаписижурналарегистрации уровеньжурналарегистрации ",M="расположениехранилищасертификатовкриптографии режимвключениясертификатовкриптографии режимпроверкисертификатакриптографии типхранилищасертификатовкриптографии ",D="кодировкаименфайловвzipфайле методсжатияzip методшифрованияzip режимвосстановленияпутейфайловzip режимобработкиподкаталоговzip режимсохраненияпутейzip уровеньсжатияzip ",I="звуковоеоповещение направлениепереходакстроке позициявпотоке порядокбайтов режимблокировкиданных режимуправленияблокировкойданных сервисвстроенныхпокупок состояниефоновогозадания типподписчикадоставляемыхуведомлений уровеньиспользованиязащищенногосоединенияftp ",k="направлениепорядкасхемызапроса типдополненияпериодамисхемызапроса типконтрольнойточкисхемызапроса типобъединениясхемызапроса типпараметрадоступнойтаблицысхемызапроса типсоединениясхемызапроса ",R="httpметод автоиспользованиеобщегореквизита автопрефиксномеразадачи вариантвстроенногоязыка видиерархии видрегистранакопления видтаблицывнешнегоисточникаданных записьдвиженийприпроведении заполнениепоследовательностей индексирование использованиебазыпланавидоврасчета использованиебыстроговыбора использованиеобщегореквизита использованиеподчинения использованиеполнотекстовогопоиска использованиеразделяемыхданныхобщегореквизита использованиереквизита назначениеиспользованияприложения назначениерасширенияконфигурации направлениепередачи обновлениепредопределенныхданных оперативноепроведение основноепредставлениевидарасчета основноепредставлениевидахарактеристики основноепредставлениезадачи основноепредставлениепланаобмена основноепредставлениесправочника основноепредставлениесчета перемещениеграницыприпроведении периодичностьномерабизнеспроцесса периодичностьномерадокумента периодичностьрегистрарасчета периодичностьрегистрасведений повторноеиспользованиевозвращаемыхзначений полнотекстовыйпоискпривводепостроке принадлежностьобъекта проведение разделениеаутентификацииобщегореквизита разделениеданныхобщегореквизита разделениерасширенийконфигурацииобщегореквизита режимавтонумерацииобъектов режимзаписирегистра режимиспользованиямодальности режимиспользованиясинхронныхвызововрасширенийплатформыивнешнихкомпонент режимповторногоиспользованиясеансов режимполученияданныхвыборапривводепостроке режимсовместимости режимсовместимостиинтерфейса режимуправленияблокировкойданныхпоумолчанию сериикодовпланавидовхарактеристик сериикодовпланасчетов сериикодовсправочника созданиепривводе способвыбора способпоискастрокипривводепостроке способредактирования типданныхтаблицывнешнегоисточникаданных типкодапланавидоврасчета типкодасправочника типмакета типномерабизнеспроцесса типномерадокумента типномеразадачи типформы удалениедвижений ",L="важностьпроблемыприменениярасширенияконфигурации вариантинтерфейсаклиентскогоприложения вариантмасштабаформклиентскогоприложения вариантосновногошрифтаклиентскогоприложения вариантстандартногопериода вариантстандартнойдатыначала видграницы видкартинки видотображенияполнотекстовогопоиска видрамки видсравнения видцвета видчисловогозначения видшрифта допустимаядлина допустимыйзнак использованиеbyteordermark использованиеметаданныхполнотекстовогопоиска источникрасширенийконфигурации клавиша кодвозвратадиалога кодировкаxbase кодировкатекста направлениепоиска направлениесортировки обновлениепредопределенныхданных обновлениеприизмененииданных отображениепанелиразделов проверказаполнения режимдиалогавопрос режимзапускаклиентскогоприложения режимокругления режимоткрытияформприложения режимполнотекстовогопоиска скоростьклиентскогосоединения состояниевнешнегоисточникаданных состояниеобновленияконфигурациибазыданных способвыборасертификатаwindows способкодированиястроки статуссообщения типвнешнейкомпоненты типплатформы типповеденияклавишиenter типэлементаинформацииовыполненииобновленияконфигурациибазыданных уровеньизоляциитранзакций хешфункция частидаты",P=u+b+g+f+_+h+v+y+S+C+x+E+N+T+w+A+M+D+I+k+R+L,O="comобъект ftpсоединение httpзапрос httpсервисответ httpсоединение wsопределения wsпрокси xbase анализданных аннотацияxs блокировкаданных буфердвоичныхданных включениеxs выражениекомпоновкиданных генераторслучайныхчисел географическаясхема географическиекоординаты графическаясхема группамоделиxs данныерасшифровкикомпоновкиданных двоичныеданные дендрограмма диаграмма диаграммаганта диалогвыборафайла диалогвыборацвета диалогвыборашрифта диалограсписаниярегламентногозадания диалогредактированиястандартногопериода диапазон документdom документhtml документацияxs доставляемоеуведомление записьdom записьfastinfoset записьhtml записьjson записьxml записьzipфайла записьданных записьтекста записьузловdom запрос защищенноесоединениеopenssl значенияполейрасшифровкикомпоновкиданных извлечениетекста импортxs интернетпочта интернетпочтовоесообщение интернетпочтовыйпрофиль интернетпрокси интернетсоединение информациядляприложенияxs использованиеатрибутаxs использованиесобытияжурналарегистрации источникдоступныхнастроеккомпоновкиданных итераторузловdom картинка квалификаторыдаты квалификаторыдвоичныхданных квалификаторыстроки квалификаторычисла компоновщикмакетакомпоновкиданных компоновщикнастроеккомпоновкиданных конструктормакетаоформлениякомпоновкиданных конструкторнастроеккомпоновкиданных конструкторформатнойстроки линия макеткомпоновкиданных макетобластикомпоновкиданных макетоформлениякомпоновкиданных маскаxs менеджеркриптографии наборсхемxml настройкикомпоновкиданных настройкисериализацииjson обработкакартинок обработкарасшифровкикомпоновкиданных обходдереваdom объявлениеатрибутаxs объявлениенотацииxs объявлениеэлементаxs описаниеиспользованиясобытиядоступжурналарегистрации описаниеиспользованиясобытияотказвдоступежурналарегистрации описаниеобработкирасшифровкикомпоновкиданных описаниепередаваемогофайла описаниетипов определениегруппыатрибутовxs определениегруппымоделиxs определениеограниченияидентичностиxs определениепростоготипаxs определениесоставноготипаxs определениетипадокументаdom определенияxpathxs отборкомпоновкиданных пакетотображаемыхдокументов параметрвыбора параметркомпоновкиданных параметрызаписиjson параметрызаписиxml параметрычтенияxml переопределениеxs планировщик полеанализаданных полекомпоновкиданных построительdom построительзапроса построительотчета построительотчетаанализаданных построительсхемxml поток потоквпамяти почта почтовоесообщение преобразованиеxsl преобразованиекканоническомуxml процессорвыводарезультатакомпоновкиданныхвколлекциюзначений процессорвыводарезультатакомпоновкиданныхвтабличныйдокумент процессоркомпоновкиданных разыменовательпространствименdom рамка расписаниерегламентногозадания расширенноеимяxml результатчтенияданных своднаядиаграмма связьпараметравыбора связьпотипу связьпотипукомпоновкиданных сериализаторxdto сертификатклиентаwindows сертификатклиентафайл сертификаткриптографии сертификатыудостоверяющихцентровwindows сертификатыудостоверяющихцентровфайл сжатиеданных системнаяинформация сообщениепользователю сочетаниеклавиш сравнениезначений стандартнаядатаначала стандартныйпериод схемаxml схемакомпоновкиданных табличныйдокумент текстовыйдокумент тестируемоеприложение типданныхxml уникальныйидентификатор фабрикаxdto файл файловыйпоток фасетдлиныxs фасетколичестваразрядовдробнойчастиxs фасетмаксимальноговключающегозначенияxs фасетмаксимальногоисключающегозначенияxs фасетмаксимальнойдлиныxs фасетминимальноговключающегозначенияxs фасетминимальногоисключающегозначенияxs фасетминимальнойдлиныxs фасетобразцаxs фасетобщегоколичестваразрядовxs фасетперечисленияxs фасетпробельныхсимволовxs фильтрузловdom форматированнаястрока форматированныйдокумент фрагментxs хешированиеданных хранилищезначения цвет чтениеfastinfoset чтениеhtml чтениеjson чтениеxml чтениеzipфайла чтениеданных чтениетекста чтениеузловdom шрифт элементрезультатакомпоновкиданных ",F="comsafearray деревозначений массив соответствие списокзначений структура таблицазначений фиксированнаяструктура фиксированноесоответствие фиксированныймассив ",B=O+F,G="null истина ложь неопределено",q=e.inherit(e.NM),U={ -cN:"string",b:'"|\\|',e:'"|$',c:[{b:'""'}]},z={b:"'",e:"'",eB:!0,eE:!0,c:[{cN:"number",b:"\\d{4}([\\.\\\\/:-]?\\d{2}){0,5}"}]},$=e.inherit(e.CLCM),V={cN:"meta",l:t,b:"#|&",e:"$",k:{"meta-keyword":i+s},c:[$]},W={cN:"symbol",b:"~",e:";|:",eE:!0},H={cN:"function",l:t,v:[{b:"процедура|функция",e:"\\)",k:"процедура функция"},{b:"конецпроцедуры|конецфункции",k:"конецпроцедуры конецфункции"}],c:[{b:"\\(",e:"\\)",endsParent:!0,c:[{cN:"params",l:t,b:t,e:",",eE:!0,eW:!0,k:{keyword:"знач",literal:G},c:[q,U,z]},$]},e.inherit(e.TM,{b:t})]};return{cI:!0,l:t,k:{keyword:i,built_in:m,"class":P,type:B,literal:G},c:[V,H,$,W,q,U,z]}}),e.registerLanguage("abnf",function(e){var t={ruleDeclaration:"^[a-zA-Z][a-zA-Z0-9-]*",unexpectedChars:"[!@#$^&',?+~`|:]"},r=["ALPHA","BIT","CHAR","CR","CRLF","CTL","DIGIT","DQUOTE","HEXDIG","HTAB","LF","LWSP","OCTET","SP","VCHAR","WSP"],a=e.C(";","$"),i={cN:"symbol",b:/%b[0-1]+(-[0-1]+|(\.[0-1]+)+){0,1}/},n={cN:"symbol",b:/%d[0-9]+(-[0-9]+|(\.[0-9]+)+){0,1}/},o={cN:"symbol",b:/%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+){0,1}/},s={cN:"symbol",b:/%[si]/},l={b:t.ruleDeclaration+"\\s*=",rB:!0,e:/=/,r:0,c:[{cN:"attribute",b:t.ruleDeclaration}]};return{i:t.unexpectedChars,k:r.join(" "),c:[l,a,i,n,o,s,e.QSM,e.NM]}}),e.registerLanguage("accesslog",function(e){return{c:[{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+\\b",r:0},{cN:"string",b:'"(GET|POST|HEAD|PUT|DELETE|CONNECT|OPTIONS|PATCH|TRACE)',e:'"',k:"GET POST HEAD PUT DELETE CONNECT OPTIONS PATCH TRACE",i:"\\n",r:10},{cN:"string",b:/\[/,e:/\]/,i:"\\n"},{cN:"string",b:'"',e:'"',i:"\\n"}]}}),e.registerLanguage("actionscript",function(e){var t="[a-zA-Z_$][a-zA-Z0-9_$]*",r="([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)",a={cN:"rest_arg",b:"[.]{3}",e:t,r:10};return{aliases:["as"],k:{keyword:"as break case catch class const continue default delete do dynamic each else extends final finally for function get if implements import in include instanceof interface internal is namespace native new override package private protected public return set static super switch this throw try typeof use var void while with",literal:"true false null undefined"},c:[e.ASM,e.QSM,e.CLCM,e.CBCM,e.CNM,{cN:"class",bK:"package",e:"{",c:[e.TM]},{cN:"class",bK:"class interface",e:"{",eE:!0,c:[{bK:"extends implements"},e.TM]},{cN:"meta",bK:"import include",e:";",k:{"meta-keyword":"import include"}},{cN:"function",bK:"function",e:"[{;]",eE:!0,i:"\\S",c:[e.TM,{cN:"params",b:"\\(",e:"\\)",c:[e.ASM,e.QSM,e.CLCM,e.CBCM,a]},{b:":\\s*"+r}]},e.METHOD_GUARD],i:/#/}}),e.registerLanguage("ada",function(e){var t="\\d(_|\\d)*",r="[eE][-+]?"+t,a=t+"(\\."+t+")?("+r+")?",i="\\w+",n=t+"#"+i+"(\\."+i+")?#("+r+")?",o="\\b("+n+"|"+a+")",s="[A-Za-z](_?[A-Za-z0-9.])*",l="[]{}%#'\"",c=e.C("--","$"),d={b:"\\s+:\\s+",e:"\\s*(:=|;|\\)|=>|$)",i:l,c:[{bK:"loop for declare others",endsParent:!0},{cN:"keyword",bK:"not null constant access function procedure in out aliased exception"},{cN:"type",b:s,endsParent:!0,r:0}]};return{cI:!0,k:{keyword:"abort else new return abs elsif not reverse abstract end accept entry select access exception of separate aliased exit or some all others subtype and for out synchronized array function overriding at tagged generic package task begin goto pragma terminate body private then if procedure type case in protected constant interface is raise use declare range delay limited record when delta loop rem while digits renames with do mod requeue xor",literal:"True False"},c:[c,{cN:"string",b:/"/,e:/"/,c:[{b:/""/,r:0}]},{cN:"string",b:/'.'/},{cN:"number",b:o,r:0},{cN:"symbol",b:"'"+s},{cN:"title",b:"(\\bwith\\s+)?(\\bprivate\\s+)?\\bpackage\\s+(\\bbody\\s+)?",e:"(is|$)",k:"package body",eB:!0,eE:!0,i:l},{b:"(\\b(with|overriding)\\s+)?\\b(function|procedure)\\s+",e:"(\\bis|\\bwith|\\brenames|\\)\\s*;)",k:"overriding function procedure with is renames return",rB:!0,c:[c,{cN:"title",b:"(\\bwith\\s+)?\\b(function|procedure)\\s+",e:"(\\(|\\s+|$)",eB:!0,eE:!0,i:l},d,{cN:"type",b:"\\breturn\\s+",e:"(\\s+|;|$)",k:"return",eB:!0,eE:!0,endsParent:!0,i:l}]},{cN:"type",b:"\\b(sub)?type\\s+",e:"\\s+",k:"type",eB:!0,i:l},d]}}),e.registerLanguage("apache",function(e){var t={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:""},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",t]},t,e.QSM]}}],i:/\S/}}),e.registerLanguage("applescript",function(e){var t=e.inherit(e.QSM,{i:""}),r={cN:"params",b:"\\(",e:"\\)",c:["self",e.CNM,t]},a=e.C("--","$"),i=e.C("\\(\\*","\\*\\)",{c:["self",a]}),n=[a,i,e.HCM];return{aliases:["osascript"],k:{keyword:"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without",literal:"AppleScript false linefeed return pi quote result space tab true",built_in:"alias application boolean class constant date file integer list number real record string text activate beep count delay launch log offset read round run say summarize write character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year"},c:[t,e.CNM,{cN:"built_in",b:"\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\b|^\\s*return\\b"},{cN:"literal",b:"\\b(text item delimiters|current application|missing value)\\b"},{cN:"keyword",b:"\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference)|POSIX file|POSIX path|(date|time) string|quoted form)\\b"},{bK:"on",i:"[${=;\\n]",c:[e.UTM,r]}].concat(n),i:"//|->|=>|\\[\\["}}),e.registerLanguage("cpp",function(e){var t={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U)?L?"',e:'"',i:"\\n",c:[e.BE]},{b:'(u8?|U)?R"',e:'"',c:[e.BE]},{b:"'\\\\?.",e:"'",i:"."}]},a={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},i={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},e.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},e.CLCM,e.CBCM]},n=e.IR+"\\s*\\(",o={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},s=[t,e.CLCM,e.CBCM,a,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:o,i:"",k:o,c:["self",t]},{b:e.IR+"::",k:o},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:o,c:s.concat([{b:/\(/,e:/\)/,k:o,c:s.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+e.IR+"[\\*&\\s]+)+"+n,rB:!0,e:/[{;=]/,eE:!0,k:o,i:/[^\w\s\*&]/,c:[{b:n,rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:o,r:0,c:[e.CLCM,e.CBCM,r,a,t]},e.CLCM,e.CBCM,i]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b://,c:["self"]},e.TM]}]),exports:{preprocessor:i,strings:r,k:o}}}),e.registerLanguage("arduino",function(e){var t=e.getLanguage("cpp").exports;return{k:{keyword:"boolean byte word string String array "+t.k.keyword,built_in:"setup loop while catch for if do goto try switch case else default break continue return KeyboardController MouseController SoftwareSerial EthernetServer EthernetClient LiquidCrystal RobotControl GSMVoiceCall EthernetUDP EsploraTFT HttpClient RobotMotor WiFiClient GSMScanner FileSystem Scheduler GSMServer YunClient YunServer IPAddress GSMClient GSMModem Keyboard Ethernet Console GSMBand Esplora Stepper Process WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage Client Server GSMPIN FileIO Bridge Serial EEPROM Stream Mouse Audio Servo File Task GPRS WiFi Wire TFT GSM SPI SD runShellCommandAsynchronously analogWriteResolution retrieveCallingNumber printFirmwareVersion analogReadResolution sendDigitalPortPair noListenOnLocalhost readJoystickButton setFirmwareVersion readJoystickSwitch scrollDisplayRight getVoiceCallStatus scrollDisplayLeft writeMicroseconds delayMicroseconds beginTransmission getSignalStrength runAsynchronously getAsynchronously listenOnLocalhost getCurrentCarrier readAccelerometer messageAvailable sendDigitalPorts lineFollowConfig countryNameWrite runShellCommand readStringUntil rewindDirectory readTemperature setClockDivider readLightSensor endTransmission analogReference detachInterrupt countryNameRead attachInterrupt encryptionType readBytesUntil robotNameWrite readMicrophone robotNameRead cityNameWrite userNameWrite readJoystickY readJoystickX mouseReleased openNextFile scanNetworks noInterrupts digitalWrite beginSpeaker mousePressed isActionDone mouseDragged displayLogos noAutoscroll addParameter remoteNumber getModifiers keyboardRead userNameRead waitContinue processInput parseCommand printVersion readNetworks writeMessage blinkVersion cityNameRead readMessage setDataMode parsePacket isListening setBitOrder beginPacket isDirectory motorsWrite drawCompass digitalRead clearScreen serialEvent rightToLeft setTextSize leftToRight requestFrom keyReleased compassRead analogWrite interrupts WiFiServer disconnect playMelody parseFloat autoscroll getPINUsed setPINUsed setTimeout sendAnalog readSlider analogRead beginWrite createChar motorsStop keyPressed tempoWrite readButton subnetMask debugPrint macAddress writeGreen randomSeed attachGPRS readString sendString remotePort releaseAll mouseMoved background getXChange getYChange answerCall getResult voiceCall endPacket constrain getSocket writeJSON getButton available connected findUntil readBytes exitValue readGreen writeBlue startLoop IPAddress isPressed sendSysex pauseMode gatewayIP setCursor getOemKey tuneWrite noDisplay loadImage switchPIN onRequest onReceive changePIN playFile noBuffer parseInt overflow checkPIN knobRead beginTFT bitClear updateIR bitWrite position writeRGB highByte writeRed setSpeed readBlue noStroke remoteIP transfer shutdown hangCall beginSMS endWrite attached maintain noCursor checkReg checkPUK shiftOut isValid shiftIn pulseIn connect println localIP pinMode getIMEI display noBlink process getBand running beginSD drawBMP lowByte setBand release bitRead prepare pointTo readRed setMode noFill remove listen stroke detach attach noTone exists buffer height bitSet circle config cursor random IRread setDNS endSMS getKey micros millis begin print write ready flush width isPIN blink clear press mkdir rmdir close point yield image BSSID click delay read text move peek beep rect line open seek fill size turn stop home find step tone sqrt RSSI SSID end bit tan cos sin pow map abs max min get run put",literal:"DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL DEFAULT OUTPUT INPUT HIGH LOW"},c:[t.preprocessor,e.CLCM,e.CBCM,e.ASM,e.QSM,e.CNM]}}),e.registerLanguage("armasm",function(e){return{cI:!0,aliases:["arm"],l:"\\.?"+e.IR,k:{meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},c:[{cN:"keyword",b:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?",e:"\\s"},e.C("[;@]","$",{r:0}),e.CBCM,e.QSM,{cN:"string",b:"'",e:"[^\\\\]'",r:0},{cN:"title",b:"\\|",e:"\\|",i:"\\n",r:0},{cN:"number",v:[{b:"[#$=]?0x[0-9a-f]+"},{b:"[#$=]?0b[01]+"},{b:"[#$=]\\d+"},{b:"\\b\\d+"}],r:0},{cN:"symbol",v:[{b:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{b:"^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{b:"[=#]\\w+"}],r:0}]}}),e.registerLanguage("xml",function(e){var t="[A-Za-z0-9\\._:-]+",r={eW:!0,i:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},e.C("",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"|$)",e:">",k:{name:"style"},c:[r],starts:{e:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"|$)",e:">",k:{name:"script"},c:[r],starts:{e:"",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,r:0},r]}]}}),e.registerLanguage("asciidoc",function(e){return{aliases:["adoc"],c:[e.C("^/{4,}\\n","\\n/{4,}$",{r:10}),e.C("^//","$",{r:0}),{cN:"title",b:"^\\.\\w.*$"},{b:"^[=\\*]{4,}\\n",e:"\\n^[=\\*]{4,}$",r:10},{cN:"section",r:10,v:[{b:"^(={1,5}) .+?( \\1)?$"},{b:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$"}]},{cN:"meta",b:"^:.+?:",e:"\\s",eE:!0,r:10},{cN:"meta",b:"^\\[.+?\\]$",r:0},{cN:"quote",b:"^_{4,}\\n",e:"\\n_{4,}$",r:10},{cN:"code",b:"^[\\-\\.]{4,}\\n",e:"\\n[\\-\\.]{4,}$",r:10},{b:"^\\+{4,}\\n",e:"\\n\\+{4,}$",c:[{b:"<",e:">",sL:"xml",r:0}],r:10},{cN:"bullet",b:"^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+"},{cN:"symbol",b:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",r:10},{cN:"strong",b:"\\B\\*(?![\\*\\s])",e:"(\\n{2}|\\*)",c:[{b:"\\\\*\\w",r:0}]},{cN:"emphasis",b:"\\B'(?!['\\s])",e:"(\\n{2}|')",c:[{b:"\\\\'\\w",r:0}],r:0},{cN:"emphasis",b:"_(?![_\\s])",e:"(\\n{2}|_)",r:0},{cN:"string",v:[{b:"``.+?''"},{b:"`.+?'"}]},{cN:"code",b:"(`.+?`|\\+.+?\\+)",r:0},{cN:"code",b:"^[ \\t]",e:"$",r:0},{b:"^'{3,}[ \\t]*$",r:10},{b:"(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]",rB:!0,c:[{b:"(link|image:?):",r:0},{cN:"link",b:"\\w",e:"[^\\[]+",r:0},{cN:"string",b:"\\[",e:"\\]",eB:!0,eE:!0,r:0}],r:10}]}}),e.registerLanguage("aspectj",function(e){var t="false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else extends implements break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws privileged aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization staticinitialization withincode target within execution getWithinTypeName handler thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents warning error soft precedence thisAspectInstance",r="get set args call";return{k:t,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"aspect",e:/[{;=]/,eE:!0,i:/[:;"\[\]]/,c:[{bK:"extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton"},e.UTM,{b:/\([^\)]*/,e:/[)]+/,k:t+" "+r,eE:!1}]},{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,r:0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"pointcut after before around throwing returning",e:/[)]/,eE:!1,i:/["\[\]]/,c:[{b:e.UIR+"\\s*\\(",rB:!0,c:[e.UTM]}]},{b:/[:]/,rB:!0,e:/[{;]/,r:0,eE:!1,k:t,i:/["\[\]]/,c:[{b:e.UIR+"\\s*\\(",k:t+" "+r,r:0},e.QSM]},{bK:"new throw",r:0},{cN:"function",b:/\w+ +\w+(\.)?\w+\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,rB:!0,e:/[{;=]/,k:t,eE:!0,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,r:0,k:t,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},e.CNM,{cN:"meta",b:"@[A-Za-z]+"}]}}),e.registerLanguage("autohotkey",function(e){var t={b:"`[\\s\\S]"};return{cI:!0,aliases:["ahk"],k:{keyword:"Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group",literal:"A|0 true false NOT AND OR",built_in:"ComSpec Clipboard ClipboardAll ErrorLevel"},c:[{cN:"built_in",b:"A_[a-zA-Z0-9]+"},t,e.inherit(e.QSM,{c:[t]}),e.C(";","$",{r:0}),e.CBCM,{cN:"number",b:e.NR,r:0},{cN:"subst",b:"%(?=[a-zA-Z0-9#_$@])",e:"%",i:"[^a-zA-Z0-9#_$@]"},{cN:"built_in",b:"^\\s*\\w+\\s*,"},{cN:"meta",b:"^\\s*#w+",e:"$",r:0},{cN:"symbol",c:[t],v:[{b:'^[^\\n";]+::(?!=)'},{b:'^[^\\n";]+:(?!=)',r:0}]},{b:",\\s*,"}]}}),e.registerLanguage("autoit",function(e){var t="ByRef Case Const ContinueCase ContinueLoop Default Dim Do Else ElseIf EndFunc EndIf EndSelect EndSwitch EndWith Enum Exit ExitLoop For Func Global If In Local Next ReDim Return Select Static Step Switch Then To Until Volatile WEnd While With",r="True False And Null Not Or",a="Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos ControlGetText ControlHide ControlListView ControlMove ControlSend ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister OnAutoItExitUnRegister Ping PixelChecksum PixelGetColor PixelSearch ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp StringRegExpReplace StringReplace StringReverse StringRight StringSplit StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown, UDPShutdown TCPStartup, UDPStartup TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv UDPSend VarGetType WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait",i={v:[e.C(";","$",{r:0}),e.C("#cs","#ce"),e.C("#comments-start","#comments-end")]},n={b:"\\$[A-z0-9_]+"},o={cN:"string",v:[{b:/"/,e:/"/,c:[{b:/""/,r:0}]},{b:/'/,e:/'/,c:[{b:/''/,r:0}]}]},s={v:[e.BNM,e.CNM]},l={cN:"meta",b:"#",e:"$",k:{"meta-keyword":"comments include include-once NoTrayIcon OnAutoItStartRegister pragma compile RequireAdmin"},c:[{b:/\\\n/,r:0},{bK:"include",k:{"meta-keyword":"include"},e:"$",c:[o,{cN:"meta-string",v:[{b:"<",e:">"},{b:/"/,e:/"/,c:[{b:/""/,r:0}]},{b:/'/,e:/'/,c:[{b:/''/,r:0}]}]}]},o,i]},c={cN:"symbol",b:"@[A-z0-9_]+"},d={cN:"function",bK:"Func",e:"$",i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:[n,o,s]}]};return{cI:!0,i:/\/\*/,k:{keyword:t,built_in:a,literal:r},c:[i,n,o,s,l,c,d]}}),e.registerLanguage("avrasm",function(e){return{cI:!0,l:"\\.?"+e.IR,k:{keyword:"adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub subi swap tst wdr",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf",meta:".byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list .listmac .macro .nolist .org .set"},c:[e.CBCM,e.C(";","$",{r:0}),e.CNM,e.BNM,{cN:"number",b:"\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)"},e.QSM,{cN:"string",b:"'",e:"[^\\\\]'",i:"[^\\\\][^']"},{cN:"symbol",b:"^[A-Za-z0-9_.$]+:"},{cN:"meta",b:"#",e:"$"},{cN:"subst",b:"@[0-9]+"}]}}),e.registerLanguage("awk",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},r="BEGIN END if else while do for in break continue delete next nextfile function func exit|10",a={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,r:10},{b:/(u|b)?r?"""/,e:/"""/,r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},e.ASM,e.QSM]};return{k:{keyword:r},c:[t,a,e.RM,e.HCM,e.NM]}}),e.registerLanguage("axapta",function(e){return{k:"false int abstract private char boolean static null if for true while long throw finally protected final return void enum else break new catch byte super case short default double public try this switch continue reverse firstfast firstonly forupdate nofetch sum avg minof maxof count order group by asc desc index hint like dispaly edit client server ttsbegin ttscommit str real date container anytype common div mod",c:[e.CLCM,e.CBCM,e.ASM,e.QSM,e.CNM,{cN:"meta",b:"#",e:"$"},{cN:"class",bK:"class interface",e:"{",eE:!0,i:":",c:[{bK:"extends implements"},e.UTM]}]}}),e.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},r={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,r,a,t]}}),e.registerLanguage("basic",function(e){return{cI:!0,i:"^.",l:"[a-zA-Z][a-zA-Z0-9_$%!#]*",k:{keyword:"ABS ASC AND ATN AUTO|0 BEEP BLOAD|10 BSAVE|10 CALL CALLS CDBL CHAIN CHDIR CHR$|10 CINT CIRCLE CLEAR CLOSE CLS COLOR COM COMMON CONT COS CSNG CSRLIN CVD CVI CVS DATA DATE$ DEFDBL DEFINT DEFSNG DEFSTR DEF|0 SEG USR DELETE DIM DRAW EDIT END ENVIRON ENVIRON$ EOF EQV ERASE ERDEV ERDEV$ ERL ERR ERROR EXP FIELD FILES FIX FOR|0 FRE GET GOSUB|10 GOTO HEX$ IF|0 THEN ELSE|0 INKEY$ INP INPUT INPUT# INPUT$ INSTR IMP INT IOCTL IOCTL$ KEY ON OFF LIST KILL LEFT$ LEN LET LINE LLIST LOAD LOC LOCATE LOF LOG LPRINT USING LSET MERGE MID$ MKDIR MKD$ MKI$ MKS$ MOD NAME NEW NEXT NOISE NOT OCT$ ON OR PEN PLAY STRIG OPEN OPTION BASE OUT PAINT PALETTE PCOPY PEEK PMAP POINT POKE POS PRINT PRINT] PSET PRESET PUT RANDOMIZE READ REM RENUM RESET|0 RESTORE RESUME RETURN|0 RIGHT$ RMDIR RND RSET RUN SAVE SCREEN SGN SHELL SIN SOUND SPACE$ SPC SQR STEP STICK STOP STR$ STRING$ SWAP SYSTEM TAB TAN TIME$ TIMER TROFF TRON TO USR VAL VARPTR VARPTR$ VIEW WAIT WHILE WEND WIDTH WINDOW WRITE XOR" -},c:[e.QSM,e.C("REM","$",{r:10}),e.C("'","$",{r:0}),{cN:"symbol",b:"^[0-9]+ ",r:10},{cN:"number",b:"\\b([0-9]+[0-9edED.]*[#!]?)",r:0},{cN:"number",b:"(&[hH][0-9a-fA-F]{1,4})"},{cN:"number",b:"(&[oO][0-7]{1,6})"}]}}),e.registerLanguage("bnf",function(e){return{c:[{cN:"attribute",b://},{b:/::=/,starts:{e:/$/,c:[{b://},e.CLCM,e.CBCM,e.ASM,e.QSM]}}]}}),e.registerLanguage("brainfuck",function(e){var t={cN:"literal",b:"[\\+\\-]",r:0};return{aliases:["bf"],c:[e.C("[^\\[\\]\\.,\\+\\-<> \r\n]","[\\[\\]\\.,\\+\\-<> \r\n]",{rE:!0,r:0}),{cN:"title",b:"[\\[\\]]",r:0},{cN:"string",b:"[\\.,]",r:0},{b:/\+\+|\-\-/,rB:!0,c:[t]},t]}}),e.registerLanguage("cal",function(e){var t="div mod in and or not xor asserterror begin case do downto else end exit for if of repeat then to until while with var",r="false true",a=[e.CLCM,e.C(/\{/,/\}/,{r:0}),e.C(/\(\*/,/\*\)/,{r:10})],i={cN:"string",b:/'/,e:/'/,c:[{b:/''/}]},n={cN:"string",b:/(#\d+)+/},o={cN:"number",b:"\\b\\d+(\\.\\d+)?(DT|D|T)",r:0},s={cN:"string",b:'"',e:'"'},l={cN:"function",bK:"procedure",e:/[:;]/,k:"procedure|10",c:[e.TM,{cN:"params",b:/\(/,e:/\)/,k:t,c:[i,n]}].concat(a)},c={cN:"class",b:"OBJECT (Table|Form|Report|Dataport|Codeunit|XMLport|MenuSuite|Page|Query) (\\d+) ([^\\r\\n]+)",rB:!0,c:[e.TM,l]};return{cI:!0,k:{keyword:t,literal:r},i:/\/\*/,c:[i,n,o,s,e.NM,c,l]}}),e.registerLanguage("capnproto",function(e){return{aliases:["capnp"],k:{keyword:"struct enum interface union group import using const annotation extends in of on as with from fixed",built_in:"Void Bool Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64 Float32 Float64 Text Data AnyPointer AnyStruct Capability List",literal:"true false"},c:[e.QSM,e.NM,e.HCM,{cN:"meta",b:/@0x[\w\d]{16};/,i:/\n/},{cN:"symbol",b:/@\d+\b/},{cN:"class",bK:"struct enum",e:/\{/,i:/\n/,c:[e.inherit(e.TM,{starts:{eW:!0,eE:!0}})]},{cN:"class",bK:"interface",e:/\{/,i:/\n/,c:[e.inherit(e.TM,{starts:{eW:!0,eE:!0}})]}]}}),e.registerLanguage("ceylon",function(e){var t="assembly module package import alias class interface object given value assign void function new of extends satisfies abstracts in out return break continue throw assert dynamic if else switch case for while try catch finally then let this outer super is exists nonempty",r="shared abstract formal default actual variable late native deprecatedfinal sealed annotation suppressWarnings small",a="doc by license see throws tagged",i={cN:"subst",eB:!0,eE:!0,b:/``/,e:/``/,k:t,r:10},n=[{cN:"string",b:'"""',e:'"""',r:10},{cN:"string",b:'"',e:'"',c:[i]},{cN:"string",b:"'",e:"'"},{cN:"number",b:"#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?",r:0}];return i.c=n,{k:{keyword:t+" "+r,meta:a},i:"\\$[^01]|#[^0-9a-fA-F]",c:[e.CLCM,e.C("/\\*","\\*/",{c:["self"]}),{cN:"meta",b:'@[a-z]\\w*(?:\\:"[^"]*")?'}].concat(n)}}),e.registerLanguage("clean",function(e){return{aliases:["clean","icl","dcl"],k:{keyword:"if let in with where case of class instance otherwise implementation definition system module from import qualified as special code inline foreign export ccall stdcall generic derive infix infixl infixr",literal:"True False"},c:[e.CLCM,e.CBCM,e.ASM,e.QSM,e.CNM,{b:"->|<-[|:]?|::|#!?|>>=|\\{\\||\\|\\}|:==|=:|\\.\\.|<>|`"}]}}),e.registerLanguage("clojure",function(e){var t={"builtin-name":"def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},r="a-zA-Z_\\-!.?+*=<>&#'",a="["+r+"]["+r+"0-9/;:]*",i="[-+]?\\d+(\\.\\d+)?",n={b:a,r:0},o={cN:"number",b:i,r:0},s=e.inherit(e.QSM,{i:null}),l=e.C(";","$",{r:0}),c={cN:"literal",b:/\b(true|false|nil)\b/},d={b:"[\\[\\{]",e:"[\\]\\}]"},p={cN:"comment",b:"\\^"+a},m=e.C("\\^\\{","\\}"),u={cN:"symbol",b:"[:]{1,2}"+a},b={b:"\\(",e:"\\)"},g={eW:!0,r:0},f={k:t,l:a,cN:"name",b:a,starts:g},_=[b,s,p,m,l,u,d,o,c,n];return b.c=[e.C("comment",""),f,g],g.c=_,d.c=_,m.c=[d],{aliases:["clj"],i:/\S/,c:[b,s,p,m,l,u,d,o,c]}}),e.registerLanguage("clojure-repl",function(e){return{c:[{cN:"meta",b:/^([\w.-]+|\s*#_)=>/,starts:{e:/$/,sL:"clojure"}}]}}),e.registerLanguage("cmake",function(e){return{aliases:["cmake.in"],cI:!0,k:{keyword:"add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_subdirectory add_test aux_source_directory break build_command cmake_minimum_required cmake_policy configure_file create_test_sourcelist define_property else elseif enable_language enable_testing endforeach endfunction endif endmacro endwhile execute_process export find_file find_library find_package find_path find_program fltk_wrap_ui foreach function get_cmake_property get_directory_property get_filename_component get_property get_source_file_property get_target_property get_test_property if include include_directories include_external_msproject include_regular_expression install link_directories load_cache load_command macro mark_as_advanced message option output_required_files project qt_wrap_cpp qt_wrap_ui remove_definitions return separate_arguments set set_directory_properties set_property set_source_files_properties set_target_properties set_tests_properties site_name source_group string target_link_libraries try_compile try_run unset variable_watch while build_name exec_program export_library_dependencies install_files install_programs install_targets link_libraries make_directory remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or equal less greater strless strgreater strequal matches"},c:[{cN:"variable",b:"\\${",e:"}"},e.HCM,e.QSM,e.NM]}}),e.registerLanguage("coffeescript",function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},r="[A-Za-z$_][0-9A-Za-z$_]*",a={cN:"subst",b:/#\{/,e:/}/,k:t},i=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,a]},{b:/"/,e:/"/,c:[e.BE,a]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[a,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+r},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];a.c=i;var n=e.inherit(e.TM,{b:r}),o="(\\(.*\\))?\\s*\\B[-=]>",s={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:t,c:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],k:t,i:/\/\*/,c:i.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+r+"\\s*=\\s*"+o,e:"[-=]>",rB:!0,c:[n,s]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:o,e:"[-=]>",rB:!0,c:[s]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[n]},n]},{b:r+":",e:":",rB:!0,rE:!0,r:0}])}}),e.registerLanguage("coq",function(e){return{k:{keyword:"_ as at cofix else end exists exists2 fix for forall fun if IF in let match mod Prop return Set then Type using where with Abort About Add Admit Admitted All Arguments Assumptions Axiom Back BackTo Backtrack Bind Blacklist Canonical Cd Check Class Classes Close Coercion Coercions CoFixpoint CoInductive Collection Combined Compute Conjecture Conjectures Constant constr Constraint Constructors Context Corollary CreateHintDb Cut Declare Defined Definition Delimit Dependencies DependentDerive Drop eauto End Equality Eval Example Existential Existentials Existing Export exporting Extern Extract Extraction Fact Field Fields File Fixpoint Focus for From Function Functional Generalizable Global Goal Grab Grammar Graph Guarded Heap Hint HintDb Hints Hypotheses Hypothesis ident Identity If Immediate Implicit Import Include Inductive Infix Info Initial Inline Inspect Instance Instances Intro Intros Inversion Inversion_clear Language Left Lemma Let Libraries Library Load LoadPath Local Locate Ltac ML Mode Module Modules Monomorphic Morphism Next NoInline Notation Obligation Obligations Opaque Open Optimize Options Parameter Parameters Parametric Path Paths pattern Polymorphic Preterm Print Printing Program Projections Proof Proposition Pwd Qed Quit Rec Record Recursive Redirect Relation Remark Remove Require Reserved Reset Resolve Restart Rewrite Right Ring Rings Save Scheme Scope Scopes Script Search SearchAbout SearchHead SearchPattern SearchRewrite Section Separate Set Setoid Show Solve Sorted Step Strategies Strategy Structure SubClass Table Tables Tactic Term Test Theorem Time Timeout Transparent Type Typeclasses Types Undelimit Undo Unfocus Unfocused Unfold Universe Universes Unset Unshelve using Variable Variables Variant Verbose Visibility where with",built_in:"abstract absurd admit after apply as assert assumption at auto autorewrite autounfold before bottom btauto by case case_eq cbn cbv change classical_left classical_right clear clearbody cofix compare compute congruence constr_eq constructor contradict contradiction cut cutrewrite cycle decide decompose dependent destruct destruction dintuition discriminate discrR do double dtauto eapply eassumption eauto ecase econstructor edestruct ediscriminate eelim eexact eexists einduction einjection eleft elim elimtype enough equality erewrite eright esimplify_eq esplit evar exact exactly_once exfalso exists f_equal fail field field_simplify field_simplify_eq first firstorder fix fold fourier functional generalize generalizing gfail give_up has_evar hnf idtac in induction injection instantiate intro intro_pattern intros intuition inversion inversion_clear is_evar is_var lapply lazy left lia lra move native_compute nia nsatz omega once pattern pose progress proof psatz quote record red refine reflexivity remember rename repeat replace revert revgoals rewrite rewrite_strat right ring ring_simplify rtauto set setoid_reflexivity setoid_replace setoid_rewrite setoid_symmetry setoid_transitivity shelve shelve_unifiable simpl simple simplify_eq solve specialize split split_Rabs split_Rmult stepl stepr subst sum swap symmetry tactic tauto time timeout top transitivity trivial try tryif unfold unify until using vm_compute with"},c:[e.QSM,e.C("\\(\\*","\\*\\)"),e.CNM,{cN:"type",eB:!0,b:"\\|\\s*",e:"\\w+"},{b:/[-=]>/}]}}),e.registerLanguage("cos",function(e){var t={cN:"string",v:[{b:'"',e:'"',c:[{b:'""',r:0}]}]},r={cN:"number",b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)",r:0},a="property parameter class classmethod clientmethod extends as break catch close continue do d|0 else elseif for goto halt hang h|0 if job j|0 kill k|0 lock l|0 merge new open quit q|0 read r|0 return set s|0 tcommit throw trollback try tstart use view while write w|0 xecute x|0 zkill znspace zn ztrap zwrite zw zzdump zzwrite print zbreak zinsert zload zprint zremove zsave zzprint mv mvcall mvcrt mvdim mvprint zquit zsync ascii";return{cI:!0,aliases:["cos","cls"],k:a,c:[r,t,e.CLCM,e.CBCM,{cN:"comment",b:/;/,e:"$",r:0},{cN:"built_in",b:/(?:\$\$?|\.\.)\^?[a-zA-Z]+/},{cN:"built_in",b:/\$\$\$[a-zA-Z]+/},{cN:"built_in",b:/%[a-z]+(?:\.[a-z]+)*/},{cN:"symbol",b:/\^%?[a-zA-Z][\w]*/},{cN:"keyword",b:/##class|##super|#define|#dim/},{b:/&sql\(/,e:/\)/,eB:!0,eE:!0,sL:"sql"},{b:/&(js|jscript|javascript)/,eB:!0,eE:!0,sL:"javascript"},{b:/&html<\s*\s*>/,sL:"xml"}]}}),e.registerLanguage("crmsh",function(e){var t="primitive rsc_template",r="group clone ms master location colocation order fencing_topology rsc_ticket acl_target acl_group user role tag xml",a="property rsc_defaults op_defaults",i="params meta operations op rule attributes utilization",n="read write deny defined not_defined in_range date spec in ref reference attribute type xpath version and or lt gt tag lte gte eq ne \\",o="number string",s="Master Started Slave Stopped start promote demote stop monitor true false";return{aliases:["crm","pcmk"],cI:!0,k:{keyword:i+" "+n+" "+o,literal:s},c:[e.HCM,{bK:"node",starts:{e:"\\s*([\\w_-]+:)?",starts:{cN:"title",e:"\\s*[\\$\\w_][\\w_-]*"}}},{bK:t,starts:{cN:"title",e:"\\s*[\\$\\w_][\\w_-]*",starts:{e:"\\s*@?[\\w_][\\w_\\.:-]*"}}},{b:"\\b("+r.split(" ").join("|")+")\\s+",k:r,starts:{cN:"title",e:"[\\$\\w_][\\w_-]*"}},{bK:a,starts:{cN:"title",e:"\\s*([\\w_-]+:)?"}},e.QSM,{cN:"meta",b:"(ocf|systemd|service|lsb):[\\w_:-]+",r:0},{cN:"number",b:"\\b\\d+(\\.\\d+)?(ms|s|h|m)?",r:0},{cN:"literal",b:"[-]?(infinity|inf)",r:0},{cN:"attr",b:/([A-Za-z\$_\#][\w_-]+)=/,r:0},{cN:"tag",b:"",r:0}]}}),e.registerLanguage("crystal",function(e){function t(e,t){var r=[{b:e,e:t}];return r[0].c=r,r}var r="(_[uif](8|16|32|64))?",a="[a-zA-Z_]\\w*[!?=]?",i="!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\][=?]?",o={keyword:"abstract alias as as? asm begin break case class def do else elsif end ensure enum extend for fun if include instance_sizeof is_a? lib macro module next nil? of out pointerof private protected rescue responds_to? return require select self sizeof struct super then type typeof union uninitialized unless until when while with yield __DIR__ __END_LINE__ __FILE__ __LINE__",literal:"false nil true"},s={cN:"subst",b:"#{",e:"}",k:o},l={cN:"template-variable",v:[{b:"\\{\\{",e:"\\}\\}"},{b:"\\{%",e:"%\\}"}],k:o},c={cN:"string",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%w?\\(",e:"\\)",c:t("\\(","\\)")},{b:"%w?\\[",e:"\\]",c:t("\\[","\\]")},{b:"%w?{",e:"}",c:t("{","}")},{b:"%w?<",e:">",c:t("<",">")},{b:"%w?/",e:"/"},{b:"%w?%",e:"%"},{b:"%w?-",e:"-"},{b:"%w?\\|",e:"\\|"},{b:/<<-\w+$/,e:/^\s*\w+$/}],r:0},d={cN:"string",v:[{b:"%q\\(",e:"\\)",c:t("\\(","\\)")},{b:"%q\\[",e:"\\]",c:t("\\[","\\]")},{b:"%q{",e:"}",c:t("{","}")},{b:"%q<",e:">",c:t("<",">")},{b:"%q/",e:"/"},{b:"%q%",e:"%"},{b:"%q-",e:"-"},{b:"%q\\|",e:"\\|"},{b:/<<-'\w+'$/,e:/^\s*\w+$/}],r:0},p={b:"("+i+")\\s*",c:[{cN:"regexp",c:[e.BE,s],v:[{b:"//[a-z]*",r:0},{b:"/",e:"/[a-z]*"},{b:"%r\\(",e:"\\)",c:t("\\(","\\)")},{b:"%r\\[",e:"\\]",c:t("\\[","\\]")},{b:"%r{",e:"}",c:t("{","}")},{b:"%r<",e:">",c:t("<",">")},{b:"%r/",e:"/"},{b:"%r%",e:"%"},{b:"%r-",e:"-"},{b:"%r\\|",e:"\\|"}]}],r:0},m={cN:"regexp",c:[e.BE,s],v:[{b:"%r\\(",e:"\\)",c:t("\\(","\\)")},{b:"%r\\[",e:"\\]",c:t("\\[","\\]")},{b:"%r{",e:"}",c:t("{","}")},{b:"%r<",e:">",c:t("<",">")},{b:"%r/",e:"/"},{b:"%r%",e:"%"},{b:"%r-",e:"-"},{b:"%r\\|",e:"\\|"}],r:0},u={cN:"meta",b:"@\\[",e:"\\]",c:[e.inherit(e.QSM,{cN:"meta-string"})]},b=[l,c,d,p,m,u,e.HCM,{cN:"class",bK:"class module struct",e:"$|;",i:/=/,c:[e.HCM,e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<"}]},{cN:"class",bK:"lib enum union",e:"$|;",i:/=/,c:[e.HCM,e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"})],r:10},{cN:"function",bK:"def",e:/\B\b/,c:[e.inherit(e.TM,{b:n,endsParent:!0})]},{cN:"function",bK:"fun macro",e:/\B\b/,c:[e.inherit(e.TM,{b:n,endsParent:!0})],r:5},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":",c:[c,{b:n}],r:0},{cN:"number",v:[{b:"\\b0b([01_]*[01])"+r},{b:"\\b0o([0-7_]*[0-7])"+r},{b:"\\b0x([A-Fa-f0-9_]*[A-Fa-f0-9])"+r},{b:"\\b(([0-9][0-9_]*[0-9]|[0-9])(\\.[0-9_]*[0-9])?([eE][+-]?[0-9_]*[0-9])?)"+r}],r:0}];return s.c=b,l.c=b.slice(1),{aliases:["cr"],l:a,k:o,c:b}}),e.registerLanguage("cs",function(e){var t={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long nameof object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield",literal:"null false true"},r={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},a=e.inherit(r,{i:/\n/}),i={cN:"subst",b:"{",e:"}",k:t},n=e.inherit(i,{i:/\n/}),o={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,n]},s={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},i]},l=e.inherit(s,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},n]});i.c=[s,o,r,e.ASM,e.QSM,e.CNM,e.CBCM],n.c=[l,o,a,e.ASM,e.QSM,e.CNM,e.inherit(e.CBCM,{i:/\n/})];var c={v:[s,o,r,e.ASM,e.QSM]},d=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp"],k:t,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:""},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},c,e.CNM,{bK:"class interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",r:0},{cN:"function",b:"("+d+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,r:0,c:[c,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}}),e.registerLanguage("csp",function(e){return{cI:!1,l:"[a-zA-Z][a-zA-Z0-9_-]*",k:{keyword:"base-uri child-src connect-src default-src font-src form-action frame-ancestors frame-src img-src media-src object-src plugin-types report-uri sandbox script-src style-src"},c:[{cN:"string",b:"'",e:"'"},{cN:"attribute",b:"^Content",e:":",eE:!0}]}}),e.registerLanguage("css",function(e){var t="[a-zA-Z-][a-zA-Z0-9_-]*",r={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:t,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,r]}]}}),e.registerLanguage("d",function(e){var t={keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},r="(0|[1-9][\\d_]*)",a="(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)",i="0[bB][01_]+",n="([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)",o="0[xX]"+n,s="([eE][+-]?"+a+")",l="("+a+"(\\.\\d*|"+s+")|\\d+\\."+a+a+"|\\."+r+s+"?)",c="(0[xX]("+n+"\\."+n+"|\\.?"+n+")[pP][+-]?"+a+")",d="("+r+"|"+i+"|"+o+")",p="("+c+"|"+l+")",m="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",u={cN:"number",b:"\\b"+d+"(L|u|U|Lu|LU|uL|UL)?",r:0},b={cN:"number",b:"\\b("+p+"([fF]|L|i|[fF]i|Li)?|"+d+"(i|[fF]i|Li))",r:0},g={cN:"string",b:"'("+m+"|.)",e:"'",i:"."},f={b:m,r:0},_={cN:"string",b:'"',c:[f],e:'"[cwd]?'},h={cN:"string",b:'[rq]"',e:'"[cwd]?',r:5},v={cN:"string",b:"`",e:"`[cwd]?"},y={cN:"string",b:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',r:10},S={cN:"string",b:'q"\\{',e:'\\}"'},C={cN:"meta",b:"^#!",e:"$",r:5},x={cN:"meta",b:"#(line)",e:"$",r:5},E={cN:"keyword",b:"@[a-zA-Z_][a-zA-Z_\\d]*"},N=e.C("\\/\\+","\\+\\/",{c:["self"],r:10});return{l:e.UIR,k:t,c:[e.CLCM,e.CBCM,N,y,_,h,v,S,b,u,g,C,x,E]}}),e.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}}),e.registerLanguage("dart",function(e){var t={cN:"subst",b:"\\$\\{",e:"}",k:"true false null this is new super"},r={cN:"string",v:[{b:"r'''",e:"'''"},{b:'r"""',e:'"""'},{b:"r'",e:"'",i:"\\n"},{b:'r"',e:'"',i:"\\n"},{b:"'''",e:"'''",c:[e.BE,t]},{b:'"""',e:'"""',c:[e.BE,t]},{b:"'",e:"'",i:"\\n",c:[e.BE,t]},{b:'"',e:'"',i:"\\n",c:[e.BE,t]}]};t.c=[e.CNM,r];var a={keyword:"assert async await break case catch class const continue default do else enum extends false final finally for if in is new null rethrow return super switch sync this throw true try var void while with yield abstract as dynamic export external factory get implements import library operator part set static typedef",built_in:"print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num document window querySelector querySelectorAll Element ElementList"};return{k:a,c:[r,e.C("/\\*\\*","\\*/",{sL:"markdown"}),e.C("///","$",{sL:"markdown"}),e.CLCM,e.CBCM,{cN:"class",bK:"class interface",e:"{",eE:!0,c:[{bK:"extends implements"},e.UTM]},e.CNM,{cN:"meta",b:"@[A-Za-z]+"},{b:"=>"}]}}),e.registerLanguage("delphi",function(e){var t="exports register file shl array record property for mod while set ally label uses raise not stored class safecall var interface or private static exit index inherited to else stdcall override shr asm far resourcestring finalization packed virtual out and protected library do xorwrite goto near function end div overload object unit begin string on inline repeat until destructor write message program with read initialization except default nil if case cdecl in downto threadvar of try pascal const external constructor type public then implementation finally published procedure absolute reintroduce operator as is abstract alias assembler bitpacked break continue cppdecl cvar enumerator experimental platform deprecated unimplemented dynamic export far16 forward generic helper implements interrupt iochecks local name nodefault noreturn nostackframe oldfpccall otherwise saveregisters softfloat specialize strict unaligned varargs ",r=[e.CLCM,e.C(/\{/,/\}/,{r:0}),e.C(/\(\*/,/\*\)/,{r:10})],a={cN:"meta",v:[{b:/\{\$/,e:/\}/},{b:/\(\*\$/,e:/\*\)/}]},i={cN:"string",b:/'/,e:/'/,c:[{b:/''/}]},n={cN:"string",b:/(#\d+)+/},o={b:e.IR+"\\s*=\\s*class\\s*\\(",rB:!0,c:[e.TM]},s={cN:"function",bK:"function constructor destructor procedure",e:/[:;]/,k:"function constructor|10 destructor|10 procedure|10",c:[e.TM,{cN:"params",b:/\(/,e:/\)/,k:t,c:[i,n,a].concat(r)},a].concat(r)};return{aliases:["dpr","dfm","pas","pascal","freepascal","lazarus","lpr","lfm"],cI:!0,k:t,i:/"|\$[G-Zg-z]|\/\*|<\/|\|/,c:[i,n,e.NM,o,s,a].concat(r)}}),e.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}}),e.registerLanguage("django",function(e){var t={b:/\|[A-Za-z]+:?/,k:{name:"truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone"},c:[e.QSM,e.ASM]};return{aliases:["jinja"],cI:!0,sL:"xml",c:[e.C(/\{%\s*comment\s*%}/,/\{%\s*endcomment\s*%}/),e.C(/\{#/,/#}/),{cN:"template-tag",b:/\{%/,e:/%}/,c:[{cN:"name",b:/\w+/,k:{name:"comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim"},starts:{eW:!0,k:"in by as",c:[t],r:0}}]},{cN:"template-variable",b:/\{\{/,e:/}}/,c:[t]}]}}),e.registerLanguage("dns",function(e){return{aliases:["bind","zone"],k:{keyword:"IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT"},c:[e.C(";","$",{r:0}),{cN:"meta",b:/^\$(TTL|GENERATE|INCLUDE|ORIGIN)\b/},{cN:"number",b:"((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))\\b"},{cN:"number",b:"((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\b"},e.inherit(e.NM,{b:/\b\d+[dhwm]?/})]}}),e.registerLanguage("dockerfile",function(e){return{aliases:["docker"],cI:!0,k:"from maintainer expose env arg user onbuild stopsignal",c:[e.HCM,e.ASM,e.QSM,e.NM,{bK:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{e:/[^\\]\n/,sL:"bash"}}],i:"", -i:"\\n"}]},t,e.CLCM,e.CBCM]},i={cN:"variable",b:"\\&[a-z\\d_]*\\b"},n={cN:"meta-keyword",b:"/[a-z][a-z\\d-]*/"},o={cN:"symbol",b:"^\\s*[a-zA-Z_][a-zA-Z\\d_]*:"},s={cN:"params",b:"<",e:">",c:[r,i]},l={cN:"class",b:/[a-zA-Z_][a-zA-Z\d_@]*\s{/,e:/[{;=]/,rB:!0,eE:!0},c={cN:"class",b:"/\\s*{",e:"};",r:10,c:[i,n,o,l,s,e.CLCM,e.CBCM,r,t]};return{k:"",c:[c,i,n,o,l,s,e.CLCM,e.CBCM,r,t,a,{b:e.IR+"::",k:""}]}}),e.registerLanguage("dust",function(e){var t="if eq ne lt lte gt gte select default math sep";return{aliases:["dst"],cI:!0,sL:"xml",c:[{cN:"template-tag",b:/\{[#\/]/,e:/\}/,i:/;/,c:[{cN:"name",b:/[a-zA-Z\.-]+/,starts:{eW:!0,r:0,c:[e.QSM]}}]},{cN:"template-variable",b:/\{/,e:/\}/,i:/;/,k:t}]}}),e.registerLanguage("ebnf",function(e){var t=e.C(/\(\*/,/\*\)/),r={cN:"attribute",b:/^[ ]*[a-zA-Z][a-zA-Z-]*([\s-]+[a-zA-Z][a-zA-Z]*)*/},a={cN:"meta",b:/\?.*\?/},i={b:/=/,e:/;/,c:[t,a,e.ASM,e.QSM]};return{i:/\S/,c:[t,r,i]}}),e.registerLanguage("elixir",function(e){var t="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?",r="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",a="and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote",i={cN:"subst",b:"#\\{",e:"}",l:t,k:a},n={cN:"string",c:[e.BE,i],v:[{b:/'/,e:/'/},{b:/"/,e:/"/}]},o={cN:"function",bK:"def defp defmacro",e:/\B\b/,c:[e.inherit(e.TM,{b:t,endsParent:!0})]},s=e.inherit(o,{cN:"class",bK:"defimpl defmodule defprotocol defrecord",e:/\bdo\b|$|;/}),l=[n,e.HCM,s,o,{cN:"symbol",b:":(?!\\s)",c:[n,{b:r}],r:0},{cN:"symbol",b:t+":",r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"->"},{b:"("+e.RSR+")\\s*",c:[e.HCM,{cN:"regexp",i:"\\n",c:[e.BE,i],v:[{b:"/",e:"/[a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}],r:0}];return i.c=l,{l:t,k:a,c:l}}),e.registerLanguage("elm",function(e){var t={v:[e.C("--","$"),e.C("{-","-}",{c:["self"]})]},r={cN:"type",b:"\\b[A-Z][\\w']*",r:0},a={b:"\\(",e:"\\)",i:'"',c:[{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},t]},i={b:"{",e:"}",c:a.c};return{k:"let in if then else case of where module import exposing type alias as infix infixl infixr port effect command subscription",c:[{bK:"port effect module",e:"exposing",k:"port effect module where command subscription exposing",c:[a,t],i:"\\W\\.|;"},{b:"import",e:"$",k:"import as exposing",c:[a,t],i:"\\W\\.|;"},{b:"type",e:"$",k:"type alias",c:[r,a,i,t]},{bK:"infix infixl infixr",e:"$",c:[e.CNM,t]},{b:"port",e:"$",k:"port",c:[t]},e.QSM,e.CNM,r,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),t,{b:"->|<-"}],i:/;/}}),e.registerLanguage("ruby",function(e){var t="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},a={cN:"doctag",b:"@[A-Za-z]+"},i={b:"#<",e:">"},n=[e.C("#","$",{c:[a]}),e.C("^\\=begin","^\\=end",{c:[a],r:10}),e.C("^__END__","\\n$")],o={cN:"subst",b:"#\\{",e:"}",k:r},s={cN:"string",c:[e.BE,o],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},l={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},c=[s,i,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(n)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:t}),l].concat(n)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[s,{b:t}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[i,{cN:"regexp",c:[e.BE,o],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(n),r:0}].concat(n);o.c=c,l.c=c;var d="[>?]>",p="[\\w#]+\\(\\w+\\):\\d+:\\d+>",m="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",u=[{b:/^\s*=>/,starts:{e:"$",c:c}},{cN:"meta",b:"^("+d+"|"+p+"|"+m+")",starts:{e:"$",c:c}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:n.concat(u).concat(c)}}),e.registerLanguage("erb",function(e){return{sL:"xml",c:[e.C("<%#","%>"),{b:"<%[%=-]?",e:"[%-]?%>",sL:"ruby",eB:!0,eE:!0}]}}),e.registerLanguage("erlang-repl",function(e){return{k:{built_in:"spawn spawn_link self",keyword:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},c:[{cN:"meta",b:"^[0-9]+> ",r:10},e.C("%","$"),{cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},e.ASM,e.QSM,{b:"\\?(::)?([A-Z]\\w*(::)?)+"},{b:"->"},{b:"ok"},{b:"!"},{b:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",r:0},{b:"[A-Z][a-zA-Z0-9_']*",r:0}]}}),e.registerLanguage("erlang",function(e){var t="[a-z'][a-zA-Z0-9_']*",r="("+t+":"+t+"|"+t+")",a={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},i=e.C("%","$"),n={cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},o={b:"fun\\s+"+t+"/\\d+"},s={b:r+"\\(",e:"\\)",rB:!0,r:0,c:[{b:r,r:0},{b:"\\(",e:"\\)",eW:!0,rE:!0,r:0}]},l={b:"{",e:"}",r:0},c={b:"\\b_([A-Z][A-Za-z0-9_]*)?",r:0},d={b:"[A-Z][a-zA-Z0-9_]*",r:0},p={b:"#"+e.UIR,r:0,rB:!0,c:[{b:"#"+e.UIR,r:0},{b:"{",e:"}",r:0}]},m={bK:"fun receive if try case",e:"end",k:a};m.c=[i,o,e.inherit(e.ASM,{cN:""}),m,s,e.QSM,n,l,c,d,p];var u=[i,o,m,s,e.QSM,n,l,c,d,p];s.c[1].c=u,l.c=u,p.c[1].c=u;var b={cN:"params",b:"\\(",e:"\\)",c:u};return{aliases:["erl"],k:a,i:"(",rB:!0,i:"\\(|#|//|/\\*|\\\\|:|;",c:[b,e.inherit(e.TM,{b:t})],starts:{e:";|\\.",k:a,c:u}},i,{b:"^-",e:"\\.",r:0,eE:!0,rB:!0,l:"-"+e.IR,k:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",c:[b]},n,e.QSM,p,c,d,l,{b:/\.$/}]}}),e.registerLanguage("excel",function(e){return{aliases:["xlsx","xls"],cI:!0,l:/[a-zA-Z][\w\.]*/,k:{built_in:"ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH AGGREGATE ADDRESS AMORDEGRC AMORLINC AND ARABIC AREAS ASC ASIN ASINH ATAN ATAN2 ATANH AVEDEV AVERAGE AVERAGEA AVERAGEIF AVERAGEIFS BAHTTEXT BASE BESSELI BESSELJ BESSELK BESSELY BETADIST BETA.DIST BETAINV BETA.INV BIN2DEC BIN2HEX BIN2OCT BINOMDIST BINOM.DIST BINOM.DIST.RANGE BINOM.INV BITAND BITLSHIFT BITOR BITRSHIFT BITXOR CALL CEILING CEILING.MATH CEILING.PRECISE CELL CHAR CHIDIST CHIINV CHITEST CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CHOOSE CLEAN CODE COLUMN COLUMNS COMBIN COMBINA COMPLEX CONCAT CONCATENATE CONFIDENCE CONFIDENCE.NORM CONFIDENCE.T CONVERT CORREL COS COSH COT COTH COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS COUPDAYBS COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD COVAR COVARIANCE.P COVARIANCE.S CRITBINOM CSC CSCH CUBEKPIMEMBER CUBEMEMBER CUBEMEMBERPROPERTY CUBERANKEDMEMBER CUBESET CUBESETCOUNT CUBEVALUE CUMIPMT CUMPRINC DATE DATEDIF DATEVALUE DAVERAGE DAY DAYS DAYS360 DB DBCS DCOUNT DCOUNTA DDB DEC2BIN DEC2HEX DEC2OCT DECIMAL DEGREES DELTA DEVSQ DGET DISC DMAX DMIN DOLLAR DOLLARDE DOLLARFR DPRODUCT DSTDEV DSTDEVP DSUM DURATION DVAR DVARP EDATE EFFECT ENCODEURL EOMONTH ERF ERF.PRECISE ERFC ERFC.PRECISE ERROR.TYPE EUROCONVERT EVEN EXACT EXP EXPON.DIST EXPONDIST FACT FACTDOUBLE FALSE|0 F.DIST FDIST F.DIST.RT FILTERXML FIND FINDB F.INV F.INV.RT FINV FISHER FISHERINV FIXED FLOOR FLOOR.MATH FLOOR.PRECISE FORECAST FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR FORMULATEXT FREQUENCY F.TEST FTEST FV FVSCHEDULE GAMMA GAMMA.DIST GAMMADIST GAMMA.INV GAMMAINV GAMMALN GAMMALN.PRECISE GAUSS GCD GEOMEAN GESTEP GETPIVOTDATA GROWTH HARMEAN HEX2BIN HEX2DEC HEX2OCT HLOOKUP HOUR HYPERLINK HYPGEOM.DIST HYPGEOMDIST IF|0 IFERROR IFNA IFS IMABS IMAGINARY IMARGUMENT IMCONJUGATE IMCOS IMCOSH IMCOT IMCSC IMCSCH IMDIV IMEXP IMLN IMLOG10 IMLOG2 IMPOWER IMPRODUCT IMREAL IMSEC IMSECH IMSIN IMSINH IMSQRT IMSUB IMSUM IMTAN INDEX INDIRECT INFO INT INTERCEPT INTRATE IPMT IRR ISBLANK ISERR ISERROR ISEVEN ISFORMULA ISLOGICAL ISNA ISNONTEXT ISNUMBER ISODD ISREF ISTEXT ISO.CEILING ISOWEEKNUM ISPMT JIS KURT LARGE LCM LEFT LEFTB LEN LENB LINEST LN LOG LOG10 LOGEST LOGINV LOGNORM.DIST LOGNORMDIST LOGNORM.INV LOOKUP LOWER MATCH MAX MAXA MAXIFS MDETERM MDURATION MEDIAN MID MIDBs MIN MINIFS MINA MINUTE MINVERSE MIRR MMULT MOD MODE MODE.MULT MODE.SNGL MONTH MROUND MULTINOMIAL MUNIT N NA NEGBINOM.DIST NEGBINOMDIST NETWORKDAYS NETWORKDAYS.INTL NOMINAL NORM.DIST NORMDIST NORMINV NORM.INV NORM.S.DIST NORMSDIST NORM.S.INV NORMSINV NOT NOW NPER NPV NUMBERVALUE OCT2BIN OCT2DEC OCT2HEX ODD ODDFPRICE ODDFYIELD ODDLPRICE ODDLYIELD OFFSET OR PDURATION PEARSON PERCENTILE.EXC PERCENTILE.INC PERCENTILE PERCENTRANK.EXC PERCENTRANK.INC PERCENTRANK PERMUT PERMUTATIONA PHI PHONETIC PI PMT POISSON.DIST POISSON POWER PPMT PRICE PRICEDISC PRICEMAT PROB PRODUCT PROPER PV QUARTILE QUARTILE.EXC QUARTILE.INC QUOTIENT RADIANS RAND RANDBETWEEN RANK.AVG RANK.EQ RANK RATE RECEIVED REGISTER.ID REPLACE REPLACEB REPT RIGHT RIGHTB ROMAN ROUND ROUNDDOWN ROUNDUP ROW ROWS RRI RSQ RTD SEARCH SEARCHB SEC SECH SECOND SERIESSUM SHEET SHEETS SIGN SIN SINH SKEW SKEW.P SLN SLOPE SMALL SQL.REQUEST SQRT SQRTPI STANDARDIZE STDEV STDEV.P STDEV.S STDEVA STDEVP STDEVPA STEYX SUBSTITUTE SUBTOTAL SUM SUMIF SUMIFS SUMPRODUCT SUMSQ SUMX2MY2 SUMX2PY2 SUMXMY2 SWITCH SYD T TAN TANH TBILLEQ TBILLPRICE TBILLYIELD T.DIST T.DIST.2T T.DIST.RT TDIST TEXT TEXTJOIN TIME TIMEVALUE T.INV T.INV.2T TINV TODAY TRANSPOSE TREND TRIM TRIMMEAN TRUE|0 TRUNC T.TEST TTEST TYPE UNICHAR UNICODE UPPER VALUE VAR VAR.P VAR.S VARA VARP VARPA VDB VLOOKUP WEBSERVICE WEEKDAY WEEKNUM WEIBULL WEIBULL.DIST WORKDAY WORKDAY.INTL XIRR XNPV XOR YEAR YEARFRAC YIELD YIELDDISC YIELDMAT Z.TEST ZTEST"},c:[{b:/^=/,e:/[^=]/,rE:!0,i:/=/,r:10},{cN:"symbol",b:/\b[A-Z]{1,2}\d+\b/,e:/[^\d]/,eE:!0,r:0},{cN:"symbol",b:/[A-Z]{0,2}\d*:[A-Z]{0,2}\d*/,r:0},e.BE,e.QSM,{cN:"number",b:e.NR+"(%)?",r:0},e.C(/\bN\(/,/\)/,{eB:!0,eE:!0,i:/\n/})]}}),e.registerLanguage("fix",function(e){return{c:[{b:/[^\u2401\u0001]+/,e:/[\u2401\u0001]/,eE:!0,rB:!0,rE:!1,c:[{b:/([^\u2401\u0001=]+)/,e:/=([^\u2401\u0001=]+)/,rE:!0,rB:!1,cN:"attr"},{b:/=/,e:/([\u2401\u0001])/,eE:!0,eB:!0,cN:"string"}]}],cI:!0}}),e.registerLanguage("flix",function(e){var t={cN:"string",b:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},r={cN:"string",v:[{b:'"',e:'"'}]},a={cN:"title",b:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/},i={cN:"function",bK:"def",e:/[:={\[(\n;]/,eE:!0,c:[a]};return{k:{literal:"true false",keyword:"case class def else enum if impl import in lat rel index let match namespace switch type yield with"},c:[e.CLCM,e.CBCM,t,r,i,e.CNM]}}),e.registerLanguage("fortran",function(e){var t={cN:"params",b:"\\(",e:"\\)"},r={literal:".False. .True.",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image"};return{cI:!0,aliases:["f90","f95"],k:r,i:/\/\*/,c:[e.inherit(e.ASM,{cN:"string",r:0}),e.inherit(e.QSM,{cN:"string",r:0}),{cN:"function",bK:"subroutine function program",i:"[${=\\n]",c:[e.UTM,t]},e.C("!","$",{r:0}),{cN:"number",b:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",r:0}]}}),e.registerLanguage("fsharp",function(e){var t={b:"<",e:">",c:[e.inherit(e.TM,{b:/'[a-zA-Z0-9_]+/})]};return{aliases:["fs"],k:"abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun function global if in inherit inline interface internal lazy let match member module mutable namespace new null of open or override private public rec return sig static struct then to true try type upcast use val void when while with yield",i:/\/\*/,c:[{cN:"keyword",b:/\b(yield|return|let|do)!/},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},{cN:"string",b:'"""',e:'"""'},e.C("\\(\\*","\\*\\)"),{cN:"class",bK:"type",e:"\\(|=|$",eE:!0,c:[e.UTM,t]},{cN:"meta",b:"\\[<",e:">\\]",r:10},{cN:"symbol",b:"\\B('[A-Za-z])\\b",c:[e.BE]},e.CLCM,e.inherit(e.QSM,{i:null}),e.CNM]}}),e.registerLanguage("gams",function(e){var t={keyword:"abort acronym acronyms alias all and assign binary card diag display else eq file files for free ge gt if integer le loop lt maximizing minimizing model models ne negative no not option options or ord positive prod put putpage puttl repeat sameas semicont semiint smax smin solve sos1 sos2 sum system table then until using while xor yes",literal:"eps inf na","built-in":"abs arccos arcsin arctan arctan2 Beta betaReg binomial ceil centropy cos cosh cvPower div div0 eDist entropy errorf execSeed exp fact floor frac gamma gammaReg log logBeta logGamma log10 log2 mapVal max min mod ncpCM ncpF ncpVUpow ncpVUsin normal pi poly power randBinomial randLinear randTriangle round rPower sigmoid sign signPower sin sinh slexp sllog10 slrec sqexp sqlog10 sqr sqrec sqrt tan tanh trunc uniform uniformInt vcPower bool_and bool_eqv bool_imp bool_not bool_or bool_xor ifThen rel_eq rel_ge rel_gt rel_le rel_lt rel_ne gday gdow ghour gleap gmillisec gminute gmonth gsecond gyear jdate jnow jstart jtime errorLevel execError gamsRelease gamsVersion handleCollect handleDelete handleStatus handleSubmit heapFree heapLimit heapSize jobHandle jobKill jobStatus jobTerminate licenseLevel licenseStatus maxExecError sleep timeClose timeComp timeElapsed timeExec timeStart"},r={cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0},a={cN:"symbol",v:[{b:/\=[lgenxc]=/},{b:/\$/}]},i={cN:"comment",v:[{b:"'",e:"'"},{b:'"',e:'"'}],i:"\\n",c:[e.BE]},n={b:"/",e:"/",k:t,c:[i,e.CLCM,e.CBCM,e.QSM,e.ASM,e.CNM]},o={b:/[a-z][a-z0-9_]*(\([a-z0-9_, ]*\))?[ \t]+/,eB:!0,e:"$",eW:!0,c:[i,n,{cN:"comment",b:/([ ]*[a-z0-9&#*=?@>\\<:\-,()$\[\]_.{}!+%^]+)+/,r:0}]};return{aliases:["gms"],cI:!0,k:t,c:[e.C(/^\$ontext/,/^\$offtext/),{cN:"meta",b:"^\\$[a-z0-9]+",e:"$",rB:!0,c:[{cN:"meta-keyword",b:"^\\$[a-z0-9]+"}]},e.C("^\\*","$"),e.CLCM,e.CBCM,e.QSM,e.ASM,{bK:"set sets parameter parameters variable variables scalar scalars equation equations",e:";",c:[e.C("^\\*","$"),e.CLCM,e.CBCM,e.QSM,e.ASM,n,o]},{bK:"table",e:";",rB:!0,c:[{bK:"table",e:"$",c:[o]},e.C("^\\*","$"),e.CLCM,e.CBCM,e.QSM,e.ASM,e.CNM]},{cN:"function",b:/^[a-z][a-z0-9_,\-+' ()$]+\.{2}/,rB:!0,c:[{cN:"title",b:/^[a-z0-9_]+/},r,a]},e.CNM,a]}}),e.registerLanguage("gauss",function(e){var t={keyword:"and bool break call callexe checkinterrupt clear clearg closeall cls comlog compile continue create debug declare delete disable dlibrary dllcall do dos ed edit else elseif enable end endfor endif endp endo errorlog errorlogat expr external fn for format goto gosub graph if keyword let lib library line load loadarray loadexe loadf loadk loadm loadp loads loadx local locate loopnextindex lprint lpwidth lshow matrix msym ndpclex new not open or output outwidth plot plotsym pop prcsn print printdos proc push retp return rndcon rndmod rndmult rndseed run save saveall screen scroll setarray show sparse stop string struct system trace trap threadfor threadendfor threadbegin threadjoin threadstat threadend until use while winprint",built_in:"abs acf aconcat aeye amax amean AmericanBinomCall AmericanBinomCall_Greeks AmericanBinomCall_ImpVol AmericanBinomPut AmericanBinomPut_Greeks AmericanBinomPut_ImpVol AmericanBSCall AmericanBSCall_Greeks AmericanBSCall_ImpVol AmericanBSPut AmericanBSPut_Greeks AmericanBSPut_ImpVol amin amult annotationGetDefaults annotationSetBkd annotationSetFont annotationSetLineColor annotationSetLineStyle annotationSetLineThickness annualTradingDays arccos arcsin areshape arrayalloc arrayindex arrayinit arraytomat asciiload asclabel astd astds asum atan atan2 atranspose axmargin balance band bandchol bandcholsol bandltsol bandrv bandsolpd bar base10 begwind besselj bessely beta box boxcox cdfBeta cdfBetaInv cdfBinomial cdfBinomialInv cdfBvn cdfBvn2 cdfBvn2e cdfCauchy cdfCauchyInv cdfChic cdfChii cdfChinc cdfChincInv cdfExp cdfExpInv cdfFc cdfFnc cdfFncInv cdfGam cdfGenPareto cdfHyperGeo cdfLaplace cdfLaplaceInv cdfLogistic cdfLogisticInv cdfmControlCreate cdfMvn cdfMvn2e cdfMvnce cdfMvne cdfMvt2e cdfMvtce cdfMvte cdfN cdfN2 cdfNc cdfNegBinomial cdfNegBinomialInv cdfNi cdfPoisson cdfPoissonInv cdfRayleigh cdfRayleighInv cdfTc cdfTci cdfTnc cdfTvn cdfWeibull cdfWeibullInv cdir ceil ChangeDir chdir chiBarSquare chol choldn cholsol cholup chrs close code cols colsf combinate combinated complex con cond conj cons ConScore contour conv convertsatostr convertstrtosa corrm corrms corrvc corrx corrxs cos cosh counts countwts crossprd crout croutp csrcol csrlin csvReadM csvReadSA cumprodc cumsumc curve cvtos datacreate datacreatecomplex datalist dataload dataloop dataopen datasave date datestr datestring datestrymd dayinyr dayofweek dbAddDatabase dbClose dbCommit dbCreateQuery dbExecQuery dbGetConnectOptions dbGetDatabaseName dbGetDriverName dbGetDrivers dbGetHostName dbGetLastErrorNum dbGetLastErrorText dbGetNumericalPrecPolicy dbGetPassword dbGetPort dbGetTableHeaders dbGetTables dbGetUserName dbHasFeature dbIsDriverAvailable dbIsOpen dbIsOpenError dbOpen dbQueryBindValue dbQueryClear dbQueryCols dbQueryExecPrepared dbQueryFetchAllM dbQueryFetchAllSA dbQueryFetchOneM dbQueryFetchOneSA dbQueryFinish dbQueryGetBoundValue dbQueryGetBoundValues dbQueryGetField dbQueryGetLastErrorNum dbQueryGetLastErrorText dbQueryGetLastInsertID dbQueryGetLastQuery dbQueryGetPosition dbQueryIsActive dbQueryIsForwardOnly dbQueryIsNull dbQueryIsSelect dbQueryIsValid dbQueryPrepare dbQueryRows dbQuerySeek dbQuerySeekFirst dbQuerySeekLast dbQuerySeekNext dbQuerySeekPrevious dbQuerySetForwardOnly dbRemoveDatabase dbRollback dbSetConnectOptions dbSetDatabaseName dbSetHostName dbSetNumericalPrecPolicy dbSetPort dbSetUserName dbTransaction DeleteFile delif delrows denseToSp denseToSpRE denToZero design det detl dfft dffti diag diagrv digamma doswin DOSWinCloseall DOSWinOpen dotfeq dotfeqmt dotfge dotfgemt dotfgt dotfgtmt dotfle dotflemt dotflt dotfltmt dotfne dotfnemt draw drop dsCreate dstat dstatmt dstatmtControlCreate dtdate dtday dttime dttodtv dttostr dttoutc dtvnormal dtvtodt dtvtoutc dummy dummybr dummydn eig eigh eighv eigv elapsedTradingDays endwind envget eof eqSolve eqSolvemt eqSolvemtControlCreate eqSolvemtOutCreate eqSolveset erf erfc erfccplx erfcplx error etdays ethsec etstr EuropeanBinomCall EuropeanBinomCall_Greeks EuropeanBinomCall_ImpVol EuropeanBinomPut EuropeanBinomPut_Greeks EuropeanBinomPut_ImpVol EuropeanBSCall EuropeanBSCall_Greeks EuropeanBSCall_ImpVol EuropeanBSPut EuropeanBSPut_Greeks EuropeanBSPut_ImpVol exctsmpl exec execbg exp extern eye fcheckerr fclearerr feq feqmt fflush fft ffti fftm fftmi fftn fge fgemt fgets fgetsa fgetsat fgetst fgt fgtmt fileinfo filesa fle flemt floor flt fltmt fmod fne fnemt fonts fopen formatcv formatnv fputs fputst fseek fstrerror ftell ftocv ftos ftostrC gamma gammacplx gammaii gausset gdaAppend gdaCreate gdaDStat gdaDStatMat gdaGetIndex gdaGetName gdaGetNames gdaGetOrders gdaGetType gdaGetTypes gdaGetVarInfo gdaIsCplx gdaLoad gdaPack gdaRead gdaReadByIndex gdaReadSome gdaReadSparse gdaReadStruct gdaReportVarInfo gdaSave gdaUpdate gdaUpdateAndPack gdaVars gdaWrite gdaWrite32 gdaWriteSome getarray getdims getf getGAUSShome getmatrix getmatrix4D getname getnamef getNextTradingDay getNextWeekDay getnr getorders getpath getPreviousTradingDay getPreviousWeekDay getRow getscalar3D getscalar4D getTrRow getwind glm gradcplx gradMT gradMTm gradMTT gradMTTm gradp graphprt graphset hasimag header headermt hess hessMT hessMTg hessMTgw hessMTm hessMTmw hessMTT hessMTTg hessMTTgw hessMTTm hessMTw hessp hist histf histp hsec imag indcv indexcat indices indices2 indicesf indicesfn indnv indsav integrate1d integrateControlCreate intgrat2 intgrat3 inthp1 inthp2 inthp3 inthp4 inthpControlCreate intquad1 intquad2 intquad3 intrleav intrleavsa intrsect intsimp inv invpd invswp iscplx iscplxf isden isinfnanmiss ismiss key keyav keyw lag lag1 lagn lapEighb lapEighi lapEighvb lapEighvi lapgEig lapgEigh lapgEighv lapgEigv lapgSchur lapgSvdcst lapgSvds lapgSvdst lapSvdcusv lapSvds lapSvdusv ldlp ldlsol linSolve listwise ln lncdfbvn lncdfbvn2 lncdfmvn lncdfn lncdfn2 lncdfnc lnfact lngammacplx lnpdfmvn lnpdfmvt lnpdfn lnpdft loadd loadstruct loadwind loess loessmt loessmtControlCreate log loglog logx logy lower lowmat lowmat1 ltrisol lu lusol machEpsilon make makevars makewind margin matalloc matinit mattoarray maxbytes maxc maxindc maxv maxvec mbesselei mbesselei0 mbesselei1 mbesseli mbesseli0 mbesseli1 meanc median mergeby mergevar minc minindc minv miss missex missrv moment momentd movingave movingaveExpwgt movingaveWgt nextindex nextn nextnevn nextwind ntos null null1 numCombinations ols olsmt olsmtControlCreate olsqr olsqr2 olsqrmt ones optn optnevn orth outtyp pacf packedToSp packr parse pause pdfCauchy pdfChi pdfExp pdfGenPareto pdfHyperGeo pdfLaplace pdfLogistic pdfn pdfPoisson pdfRayleigh pdfWeibull pi pinv pinvmt plotAddArrow plotAddBar plotAddBox plotAddHist plotAddHistF plotAddHistP plotAddPolar plotAddScatter plotAddShape plotAddTextbox plotAddTS plotAddXY plotArea plotBar plotBox plotClearLayout plotContour plotCustomLayout plotGetDefaults plotHist plotHistF plotHistP plotLayout plotLogLog plotLogX plotLogY plotOpenWindow plotPolar plotSave plotScatter plotSetAxesPen plotSetBar plotSetBarFill plotSetBarStacked plotSetBkdColor plotSetFill plotSetGrid plotSetLegend plotSetLineColor plotSetLineStyle plotSetLineSymbol plotSetLineThickness plotSetNewWindow plotSetTitle plotSetWhichYAxis plotSetXAxisShow plotSetXLabel plotSetXRange plotSetXTicInterval plotSetXTicLabel plotSetYAxisShow plotSetYLabel plotSetYRange plotSetZAxisShow plotSetZLabel plotSurface plotTS plotXY polar polychar polyeval polygamma polyint polymake polymat polymroot polymult polyroot pqgwin previousindex princomp printfm printfmt prodc psi putarray putf putvals pvCreate pvGetIndex pvGetParNames pvGetParVector pvLength pvList pvPack pvPacki pvPackm pvPackmi pvPacks pvPacksi pvPacksm pvPacksmi pvPutParVector pvTest pvUnpack QNewton QNewtonmt QNewtonmtControlCreate QNewtonmtOutCreate QNewtonSet QProg QProgmt QProgmtInCreate qqr qqre qqrep qr qre qrep qrsol qrtsol qtyr qtyre qtyrep quantile quantiled qyr qyre qyrep qz rank rankindx readr real reclassify reclassifyCuts recode recserar recsercp recserrc rerun rescale reshape rets rev rfft rffti rfftip rfftn rfftnp rfftp rndBernoulli rndBeta rndBinomial rndCauchy rndChiSquare rndCon rndCreateState rndExp rndGamma rndGeo rndGumbel rndHyperGeo rndi rndKMbeta rndKMgam rndKMi rndKMn rndKMnb rndKMp rndKMu rndKMvm rndLaplace rndLCbeta rndLCgam rndLCi rndLCn rndLCnb rndLCp rndLCu rndLCvm rndLogNorm rndMTu rndMVn rndMVt rndn rndnb rndNegBinomial rndp rndPoisson rndRayleigh rndStateSkip rndu rndvm rndWeibull rndWishart rotater round rows rowsf rref sampleData satostrC saved saveStruct savewind scale scale3d scalerr scalinfnanmiss scalmiss schtoc schur searchsourcepath seekr select selif seqa seqm setdif setdifsa setvars setvwrmode setwind shell shiftr sin singleindex sinh sleep solpd sortc sortcc sortd sorthc sorthcc sortind sortindc sortmc sortr sortrc spBiconjGradSol spChol spConjGradSol spCreate spDenseSubmat spDiagRvMat spEigv spEye spLDL spline spLU spNumNZE spOnes spreadSheetReadM spreadSheetReadSA spreadSheetWrite spScale spSubmat spToDense spTrTDense spTScalar spZeros sqpSolve sqpSolveMT sqpSolveMTControlCreate sqpSolveMTlagrangeCreate sqpSolveMToutCreate sqpSolveSet sqrt statements stdc stdsc stocv stof strcombine strindx strlen strput strrindx strsect strsplit strsplitPad strtodt strtof strtofcplx strtriml strtrimr strtrunc strtruncl strtruncpad strtruncr submat subscat substute subvec sumc sumr surface svd svd1 svd2 svdcusv svds svdusv sysstate tab tan tanh tempname threadBegin threadEnd threadEndFor threadFor threadJoin threadStat time timedt timestr timeutc title tkf2eps tkf2ps tocart todaydt toeplitz token topolar trapchk trigamma trimr trunc type typecv typef union unionsa uniqindx uniqindxsa unique uniquesa upmat upmat1 upper utctodt utctodtv utrisol vals varCovMS varCovXS varget vargetl varmall varmares varput varputl vartypef vcm vcms vcx vcxs vec vech vecr vector vget view viewxyz vlist vnamecv volume vput vread vtypecv wait waitc walkindex where window writer xlabel xlsGetSheetCount xlsGetSheetSize xlsGetSheetTypes xlsMakeRange xlsReadM xlsReadSA xlsWrite xlsWriteM xlsWriteSA xpnd xtics xy xyz ylabel ytics zeros zeta zlabel ztics cdfEmpirical dot h5create h5open h5read h5readAttribute h5write h5writeAttribute ldl plotAddErrorBar plotAddSurface plotCDFEmpirical plotSetColormap plotSetContourLabels plotSetLegendFont plotSetTextInterpreter plotSetXTicCount plotSetYTicCount plotSetZLevels powerm strjoin strtrim sylvester",literal:"DB_AFTER_LAST_ROW DB_ALL_TABLES DB_BATCH_OPERATIONS DB_BEFORE_FIRST_ROW DB_BLOB DB_EVENT_NOTIFICATIONS DB_FINISH_QUERY DB_HIGH_PRECISION DB_LAST_INSERT_ID DB_LOW_PRECISION_DOUBLE DB_LOW_PRECISION_INT32 DB_LOW_PRECISION_INT64 DB_LOW_PRECISION_NUMBERS DB_MULTIPLE_RESULT_SETS DB_NAMED_PLACEHOLDERS DB_POSITIONAL_PLACEHOLDERS DB_PREPARED_QUERIES DB_QUERY_SIZE DB_SIMPLE_LOCKING DB_SYSTEM_TABLES DB_TABLES DB_TRANSACTIONS DB_UNICODE DB_VIEWS"},r={cN:"meta",b:"#",e:"$",k:{"meta-keyword":"define definecs|10 undef ifdef ifndef iflight ifdllcall ifmac ifos2win ifunix else endif lineson linesoff srcfile srcline"},c:[{b:/\\\n/,r:0},{bK:"include",e:"$",k:{"meta-keyword":"include"},c:[{cN:"meta-string",b:'"',e:'"',i:"\\n"}]},e.CLCM,e.CBCM]},a=e.UIR+"\\s*\\(?",i=[{cN:"params",b:/\(/,e:/\)/,k:t,r:0,c:[e.CNM,e.CLCM,e.CBCM]}];return{aliases:["gss"],cI:!0,k:t,i:"(\\{[%#]|[%#]\\})",c:[e.CNM,e.CLCM,e.CBCM,e.C("@","@"),r,{cN:"string",b:'"',e:'"',c:[e.BE]},{cN:"function",bK:"proc keyword",e:";",eE:!0,k:t,c:[{b:a,rB:!0,c:[e.UTM],r:0},e.CNM,e.CLCM,e.CBCM,r].concat(i)},{cN:"function",bK:"fn",e:";",eE:!0,k:t,c:[{b:a+e.IR+"\\)?\\s*\\=\\s*",rB:!0,c:[e.UTM],r:0},e.CNM,e.CLCM,e.CBCM].concat(i)},{cN:"function",b:"\\bexternal (proc|keyword|fn)\\s+",e:";",eE:!0,k:t,c:[{b:a,rB:!0,c:[e.UTM],r:0},e.CLCM,e.CBCM]},{cN:"function",b:"\\bexternal (matrix|string|array|sparse matrix|struct "+e.IR+")\\s+",e:";",eE:!0,k:t,c:[e.CLCM,e.CBCM]}]}}),e.registerLanguage("gcode",function(e){var t="[A-Z_][A-Z0-9_.]*",r="\\%",a="IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT EQ LT GT NE GE LE OR XOR",i={cN:"meta",b:"([O])([0-9]+)"},n=[e.CLCM,e.CBCM,e.C(/\(/,/\)/),e.inherit(e.CNM,{b:"([-+]?([0-9]*\\.?[0-9]+\\.?))|"+e.CNR}),e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null}),{cN:"name",b:"([G])([0-9]+\\.?[0-9]?)"},{cN:"name",b:"([M])([0-9]+\\.?[0-9]?)"},{cN:"attr",b:"(VC|VS|#)",e:"(\\d+)"},{cN:"attr",b:"(VZOFX|VZOFY|VZOFZ)"},{cN:"built_in",b:"(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\[)",e:"([-+]?([0-9]*\\.?[0-9]+\\.?))(\\])"},{cN:"symbol",v:[{b:"N",e:"\\d+",i:"\\W"}]}];return{aliases:["nc"],cI:!0,l:t,k:a,c:[{cN:"meta",b:r},i].concat(n)}}),e.registerLanguage("gherkin",function(e){return{aliases:["feature"],k:"Feature Background Ability Business Need Scenario Scenarios Scenario Outline Scenario Template Examples Given And Then But When",c:[{cN:"symbol",b:"\\*",r:0},{cN:"meta",b:"@[^@\\s]+"},{b:"\\|",e:"\\|\\w*$",c:[{cN:"string",b:"[^|]+"}]},{cN:"variable",b:"<",e:">"},e.HCM,{cN:"string",b:'"""',e:'"""'},e.QSM]}}),e.registerLanguage("glsl",function(e){return{k:{keyword:"break continue discard do else for if return while switch case default attribute binding buffer ccw centroid centroid varying coherent column_major const cw depth_any depth_greater depth_less depth_unchanged early_fragment_tests equal_spacing flat fractional_even_spacing fractional_odd_spacing highp in index inout invariant invocations isolines layout line_strip lines lines_adjacency local_size_x local_size_y local_size_z location lowp max_vertices mediump noperspective offset origin_upper_left out packed patch pixel_center_integer point_mode points precise precision quads r11f_g11f_b10f r16 r16_snorm r16f r16i r16ui r32f r32i r32ui r8 r8_snorm r8i r8ui readonly restrict rg16 rg16_snorm rg16f rg16i rg16ui rg32f rg32i rg32ui rg8 rg8_snorm rg8i rg8ui rgb10_a2 rgb10_a2ui rgba16 rgba16_snorm rgba16f rgba16i rgba16ui rgba32f rgba32i rgba32ui rgba8 rgba8_snorm rgba8i rgba8ui row_major sample shared smooth std140 std430 stream triangle_strip triangles triangles_adjacency uniform varying vertices volatile writeonly", -type:"atomic_uint bool bvec2 bvec3 bvec4 dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 double dvec2 dvec3 dvec4 float iimage1D iimage1DArray iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBufferiimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect image3D imageBuffer imageCube imageCubeArray int isampler1D isampler1DArray isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow image1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint usampler1D usampler1DArray usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D samplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 vec2 vec3 vec4 void",built_in:"gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxComputeAtomicCounterBuffers gl_MaxComputeAtomicCounters gl_MaxComputeImageUniforms gl_MaxComputeTextureImageUnits gl_MaxComputeUniformComponents gl_MaxComputeWorkGroupCount gl_MaxComputeWorkGroupSize gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentInputVectors gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexOutputVectors gl_MaxVertexTextureImageUnits gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffset gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial gl_FrontSecondaryColor gl_GlobalInvocationID gl_InstanceID gl_InvocationID gl_Layer gl_LightModel gl_LightSource gl_LocalInvocationID gl_LocalInvocationIndex gl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix gl_NormalScale gl_NumSamples gl_NumWorkGroups gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor gl_TextureMatrix gl_TextureMatrixInverse gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_WorkGroupID gl_WorkGroupSize gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin asinh atan atanh atomicAdd atomicAnd atomicCompSwap atomicCounter atomicCounterDecrement atomicCounterIncrement atomicExchange atomicMax atomicMin atomicOr atomicXor barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan greaterThanEqual groupMemoryBarrier imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageSize imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer memoryBarrierImage memoryBarrierShared min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod textureProjLodOffset textureProjOffset textureQueryLevels textureQueryLod textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow",literal:"true false"},i:'"',c:[e.CLCM,e.CBCM,e.CNM,{cN:"meta",b:"#",e:"$"}]}}),e.registerLanguage("go",function(e){var t={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],k:t,i:"",e:",\\s+",rB:!0,eW:!0,c:[{cN:"attr",b:":\\w+"},e.ASM,e.QSM,{b:"\\w+",r:0}]}]},{b:"\\(\\s*",e:"\\s*\\)",eE:!0,c:[{b:"\\w+\\s*=",e:"\\s+",rB:!0,eW:!0,c:[{cN:"attr",b:"\\w+",r:0},e.ASM,e.QSM,{b:"\\w+",r:0}]}]}]},{b:"^\\s*[=~]\\s*"},{b:"#{",starts:{e:"}",sL:"ruby"}}]}}),e.registerLanguage("handlebars",function(e){var t={"builtin-name":"each in with if else unless bindattr action collection debugger log outlet template unbound view yield"};return{aliases:["hbs","html.hbs","html.handlebars"],cI:!0,sL:"xml",c:[e.C("{{!(--)?","(--)?}}"),{cN:"template-tag",b:/\{\{[#\/]/,e:/\}\}/,c:[{cN:"name",b:/[a-zA-Z\.-]+/,k:t,starts:{eW:!0,r:0,c:[e.QSM]}}]},{cN:"template-variable",b:/\{\{/,e:/\}\}/,k:t}]}}),e.registerLanguage("haskell",function(e){var t={v:[e.C("--","$"),e.C("{-","-}",{c:["self"]})]},r={cN:"meta",b:"{-#",e:"#-}"},a={cN:"meta",b:"^#",e:"$"},i={cN:"type",b:"\\b[A-Z][\\w']*",r:0},n={b:"\\(",e:"\\)",i:'"',c:[r,a,{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TM,{b:"[_a-z][\\w']*"}),t]},o={b:"{",e:"}",c:n.c};return{aliases:["hs"],k:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",c:[{bK:"module",e:"where",k:"module where",c:[n,t],i:"\\W\\.|;"},{b:"\\bimport\\b",e:"$",k:"import qualified as hiding",c:[n,t],i:"\\W\\.|;"},{cN:"class",b:"^(\\s*)?(class|instance)\\b",e:"where",k:"class family instance where",c:[i,n,t]},{cN:"class",b:"\\b(data|(new)?type)\\b",e:"$",k:"data family type newtype deriving",c:[r,i,n,o,t]},{bK:"default",e:"$",c:[i,n,t]},{bK:"infix infixl infixr",e:"$",c:[e.CNM,t]},{b:"\\bforeign\\b",e:"$",k:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",c:[i,e.QSM,t]},{cN:"meta",b:"#!\\/usr\\/bin\\/env runhaskell",e:"$"},r,a,e.QSM,e.CNM,i,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),t,{b:"->|<-"}]}}),e.registerLanguage("haxe",function(e){var t="Int Float String Bool Dynamic Void Array ";return{aliases:["hx"],k:{keyword:"break case cast catch continue default do dynamic else enum extern for function here if import in inline never new override package private get set public return static super switch this throw trace try typedef untyped using var while "+t,built_in:"trace this",literal:"true false null _"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"},{cN:"subst",b:"\\$",e:"\\W}"}]},e.QSM,e.CLCM,e.CBCM,e.CNM,{cN:"meta",b:"@:",e:"$"},{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elseif end error"}},{cN:"type",b:":[ ]*",e:"[^A-Za-z0-9_ \\->]",eB:!0,eE:!0,r:0},{cN:"type",b:":[ ]*",e:"\\W",eB:!0,eE:!0},{cN:"type",b:"new *",e:"\\W",eB:!0,eE:!0},{cN:"class",bK:"enum",e:"\\{",c:[e.TM]},{cN:"class",bK:"abstract",e:"[\\{$]",c:[{cN:"type",b:"\\(",e:"\\)",eB:!0,eE:!0},{cN:"type",b:"from +",e:"\\W",eB:!0,eE:!0},{cN:"type",b:"to +",e:"\\W",eB:!0,eE:!0},e.TM],k:{keyword:"abstract from to"}},{cN:"class",b:"\\b(class|interface) +",e:"[\\{$]",eE:!0,k:"class interface",c:[{cN:"keyword",b:"\\b(extends|implements) +",k:"extends implements",c:[{cN:"type",b:e.IR,r:0}]},e.TM]},{cN:"function",bK:"function",e:"\\(",eE:!0,i:"\\S",c:[e.TM]}],i:/<\//}}),e.registerLanguage("hsp",function(e){return{cI:!0,l:/[\w\._]+/,k:"goto gosub return break repeat loop continue wait await dim sdim foreach dimtype dup dupptr end stop newmod delmod mref run exgoto on mcall assert logmes newlab resume yield onexit onerror onkey onclick oncmd exist delete mkdir chdir dirlist bload bsave bcopy memfile if else poke wpoke lpoke getstr chdpm memexpand memcpy memset notesel noteadd notedel noteload notesave randomize noteunsel noteget split strrep setease button chgdisp exec dialog mmload mmplay mmstop mci pset pget syscolor mes print title pos circle cls font sysfont objsize picload color palcolor palette redraw width gsel gcopy gzoom gmode bmpsave hsvcolor getkey listbox chkbox combox input mesbox buffer screen bgscr mouse objsel groll line clrobj boxf objprm objmode stick grect grotate gsquare gradf objimage objskip objenable celload celdiv celput newcom querycom delcom cnvstow comres axobj winobj sendmsg comevent comevarg sarrayconv callfunc cnvwtos comevdisp libptr system hspstat hspver stat cnt err strsize looplev sublev iparam wparam lparam refstr refdval int rnd strlen length length2 length3 length4 vartype gettime peek wpeek lpeek varptr varuse noteinfo instr abs limit getease str strmid strf getpath strtrim sin cos tan atan sqrt double absf expf logf limitf powf geteasef mousex mousey mousew hwnd hinstance hdc ginfo objinfo dirinfo sysinfo thismod __hspver__ __hsp30__ __date__ __time__ __line__ __file__ _debug __hspdef__ and or xor not screen_normal screen_palette screen_hide screen_fixedsize screen_tool screen_frame gmode_gdi gmode_mem gmode_rgb0 gmode_alpha gmode_rgb0alpha gmode_add gmode_sub gmode_pixela ginfo_mx ginfo_my ginfo_act ginfo_sel ginfo_wx1 ginfo_wy1 ginfo_wx2 ginfo_wy2 ginfo_vx ginfo_vy ginfo_sizex ginfo_sizey ginfo_winx ginfo_winy ginfo_mesx ginfo_mesy ginfo_r ginfo_g ginfo_b ginfo_paluse ginfo_dispx ginfo_dispy ginfo_cx ginfo_cy ginfo_intid ginfo_newid ginfo_sx ginfo_sy objinfo_mode objinfo_bmscr objinfo_hwnd notemax notesize dir_cur dir_exe dir_win dir_sys dir_cmdline dir_desktop dir_mydoc dir_tv font_normal font_bold font_italic font_underline font_strikeout font_antialias objmode_normal objmode_guifont objmode_usefont gsquare_grad msgothic msmincho do until while wend for next _break _continue switch case default swbreak swend ddim ldim alloc m_pi rad2deg deg2rad ease_linear ease_quad_in ease_quad_out ease_quad_inout ease_cubic_in ease_cubic_out ease_cubic_inout ease_quartic_in ease_quartic_out ease_quartic_inout ease_bounce_in ease_bounce_out ease_bounce_inout ease_shake_in ease_shake_out ease_shake_inout ease_loop",c:[e.CLCM,e.CBCM,e.QSM,e.ASM,{cN:"string",b:'{"',e:'"}',c:[e.BE]},e.C(";","$",{r:0}),{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"addion cfunc cmd cmpopt comfunc const defcfunc deffunc define else endif enum epack func global if ifdef ifndef include modcfunc modfunc modinit modterm module pack packopt regcmd runtime undef usecom uselib"},c:[e.inherit(e.QSM,{cN:"meta-string"}),e.NM,e.CNM,e.CLCM,e.CBCM]},{cN:"symbol",b:"^\\*(\\w+|@)"},e.NM,e.CNM]}}),e.registerLanguage("htmlbars",function(e){var t="action collection component concat debugger each each-in else get hash if input link-to loc log mut outlet partial query-params render textarea unbound unless with yield view",r={i:/\}\}/,b:/[a-zA-Z0-9_]+=/,rB:!0,r:0,c:[{cN:"attr",b:/[a-zA-Z0-9_]+/}]},a=({i:/\}\}/,b:/\)/,e:/\)/,c:[{b:/[a-zA-Z\.\-]+/,k:{built_in:t},starts:{eW:!0,r:0,c:[e.QSM]}}]},{eW:!0,r:0,k:{keyword:"as",built_in:t},c:[e.QSM,r,e.NM]});return{cI:!0,sL:"xml",c:[e.C("{{!(--)?","(--)?}}"),{cN:"template-tag",b:/\{\{[#\/]/,e:/\}\}/,c:[{cN:"name",b:/[a-zA-Z\.\-]+/,k:{"builtin-name":t},starts:a}]},{cN:"template-variable",b:/\{\{[a-zA-Z][a-zA-Z\-]+/,e:/\}\}/,k:{keyword:"as",built_in:t},c:[e.QSM]}]}}),e.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}}),e.registerLanguage("hy",function(e){var t={"builtin-name":"!= % %= & &= * ** **= *= *map + += , --build-class-- --import-- -= . / // //= /= < << <<= <= = > >= >> >>= @ @= ^ ^= abs accumulate all and any ap-compose ap-dotimes ap-each ap-each-while ap-filter ap-first ap-if ap-last ap-map ap-map-when ap-pipe ap-reduce ap-reject apply as-> ascii assert assoc bin break butlast callable calling-module-name car case cdr chain chr coll? combinations compile compress cond cons cons? continue count curry cut cycle dec def default-method defclass defmacro defmacro-alias defmacro/g! defmain defmethod defmulti defn defn-alias defnc defnr defreader defseq del delattr delete-route dict-comp dir disassemble dispatch-reader-macro distinct divmod do doto drop drop-last drop-while empty? end-sequence eval eval-and-compile eval-when-compile even? every? except exec filter first flatten float? fn fnc fnr for for* format fraction genexpr gensym get getattr global globals group-by hasattr hash hex id identity if if* if-not if-python2 import in inc input instance? integer integer-char? integer? interleave interpose is is-coll is-cons is-empty is-even is-every is-float is-instance is-integer is-integer-char is-iterable is-iterator is-keyword is-neg is-none is-not is-numeric is-odd is-pos is-string is-symbol is-zero isinstance islice issubclass iter iterable? iterate iterator? keyword keyword? lambda last len let lif lif-not list* list-comp locals loop macro-error macroexpand macroexpand-1 macroexpand-all map max merge-with method-decorator min multi-decorator multicombinations name neg? next none? nonlocal not not-in not? nth numeric? oct odd? open or ord partition permutations pos? post-route postwalk pow prewalk print product profile/calls profile/cpu put-route quasiquote quote raise range read read-str recursive-replace reduce remove repeat repeatedly repr require rest round route route-with-methods rwm second seq set-comp setattr setv some sorted string string? sum switch symbol? take take-nth take-while tee try unless unquote unquote-splicing vars walk when while with with* with-decorator with-gensyms xi xor yield yield-from zero? zip zip-longest | |= ~"},r="a-zA-Z_\\-!.?+*=<>&#'",a="["+r+"]["+r+"0-9/;:]*",i="[-+]?\\d+(\\.\\d+)?",n={cN:"meta",b:"^#!",e:"$"},o={b:a,r:0},s={cN:"number",b:i,r:0},l=e.inherit(e.QSM,{i:null}),c=e.C(";","$",{r:0}),d={cN:"literal",b:/\b([Tt]rue|[Ff]alse|nil|None)\b/},p={b:"[\\[\\{]",e:"[\\]\\}]"},m={cN:"comment",b:"\\^"+a},u=e.C("\\^\\{","\\}"),b={cN:"symbol",b:"[:]{1,2}"+a},g={b:"\\(",e:"\\)"},f={eW:!0,r:0},_={k:t,l:a,cN:"name",b:a,starts:f},h=[g,l,m,u,c,b,p,s,d,o];return g.c=[e.C("comment",""),_,f],f.c=h,p.c=h,{aliases:["hylang"],i:/\S/,c:[n,g,l,m,u,c,b,p,s,d]}}),e.registerLanguage("inform7",function(e){var t="\\[",r="\\]";return{aliases:["i7"],cI:!0,k:{keyword:"thing room person man woman animal container supporter backdrop door scenery open closed locked inside gender is are say understand kind of rule"},c:[{cN:"string",b:'"',e:'"',r:0,c:[{cN:"subst",b:t,e:r}]},{cN:"section",b:/^(Volume|Book|Part|Chapter|Section|Table)\b/,e:"$"},{b:/^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\b/,e:":",c:[{b:"\\(This",e:"\\)"}]},{cN:"comment",b:t,e:r,c:["self"]}]}}),e.registerLanguage("ini",function(e){var t={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},t,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}}),e.registerLanguage("irpf90",function(e){var t={cN:"params",b:"\\(",e:"\\)"},r={literal:".False. .True.",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data begin_provider &begin_provider end_provider begin_shell end_shell begin_template end_template subst assert touch soft_touch provide no_dep free irp_if irp_else irp_endif irp_write irp_read",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image IRP_ALIGN irp_here"};return{cI:!0,k:r,i:/\/\*/,c:[e.inherit(e.ASM,{cN:"string",r:0}),e.inherit(e.QSM,{cN:"string",r:0}),{cN:"function",bK:"subroutine function program",i:"[${=\\n]",c:[e.UTM,t]},e.C("!","$",{r:0}),e.C("begin_doc","end_doc",{r:10}),{cN:"number",b:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",r:0}]}}),e.registerLanguage("java",function(e){var t="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",r=t+"(<"+t+"(\\s*,\\s*"+t+")*>)?",a="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",i="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",n={cN:"number",b:i,r:0};return{aliases:["jsp"],k:a,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+r+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:a,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:a,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},n,{cN:"meta",b:"@[A-Za-z]+"}]}}),e.registerLanguage("javascript",function(e){var t="[A-Za-z$_][0-9A-Za-z$_]*",r={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},i={cN:"subst",b:"\\$\\{",e:"\\}",k:r,c:[]},n={cN:"string",b:"`",e:"`",c:[e.BE,i]};i.c=[e.ASM,e.QSM,n,a,e.RM];var o=i.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:r,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,n,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:t+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:t,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+t+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:t},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,c:o}]}]},{b://,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:t}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:o}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}}),e.registerLanguage("jboss-cli",function(e){var t={b:/[\w-]+ *=/,rB:!0,r:0,c:[{cN:"attr",b:/[\w-]+/}]},r={cN:"params",b:/\(/,e:/\)/,c:[t],r:0},a={cN:"function",b:/:[\w\-.]+/,r:0},i={cN:"string",b:/\B(([\/.])[\w\-.\/=]+)+/},n={cN:"params",b:/--[\w\-=\/]+/};return{aliases:["wildfly-cli"],l:"[a-z-]+",k:{keyword:"alias batch cd clear command connect connection-factory connection-info data-source deploy deployment-info deployment-overlay echo echo-dmr help history if jdbc-driver-info jms-queue|20 jms-topic|20 ls patch pwd quit read-attribute read-operation reload rollout-plan run-batch set shutdown try unalias undeploy unset version xa-data-source",literal:"true false"},c:[e.HCM,e.QSM,n,a,i,r]}}),e.registerLanguage("json",function(e){var t={literal:"true false null"},r=[e.QSM,e.CNM],a={e:",",eW:!0,eE:!0,c:r,k:t},i={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(a,{b:/:/})],i:"\\S"},n={b:"\\[",e:"\\]",c:[e.inherit(a)],i:"\\S"};return r.splice(r.length,0,i,n),{c:r,k:t,i:"\\S"}}),e.registerLanguage("julia",function(e){var t={keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool " -},r="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",a={l:r,k:t,i:/<\//},i={cN:"number",b:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,r:0},n={cN:"string",b:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},o={cN:"subst",b:/\$\(/,e:/\)/,k:t},s={cN:"variable",b:"\\$"+r},l={cN:"string",c:[e.BE,o,s],v:[{b:/\w*"""/,e:/"""\w*/,r:10},{b:/\w*"/,e:/"\w*/}]},c={cN:"string",c:[e.BE,o,s],b:"`",e:"`"},d={cN:"meta",b:"@"+r},p={cN:"comment",v:[{b:"#=",e:"=#",r:10},{b:"#",e:"$"}]};return a.c=[i,n,l,c,d,p,e.HCM,{cN:"keyword",b:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{b:/<:/}],o.c=a.c,a}),e.registerLanguage("julia-repl",function(e){return{c:[{cN:"meta",b:/^julia>/,r:10,starts:{e:/^(?![ ]{6})/,sL:"julia"},aliases:["jldoctest"]}]}}),e.registerLanguage("kotlin",function(e){var t={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit initinterface annotation data sealed internal infix operator out by constructor super trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},r={cN:"keyword",b:/\b(break|continue|return|this)\b/,starts:{c:[{cN:"symbol",b:/@\w+/}]}},a={cN:"symbol",b:e.UIR+"@"},i={cN:"subst",b:"\\${",e:"}",c:[e.ASM,e.CNM]},n={cN:"variable",b:"\\$"+e.UIR},o={cN:"string",v:[{b:'"""',e:'"""',c:[n,i]},{b:"'",e:"'",i:/\n/,c:[e.BE]},{b:'"',e:'"',i:/\n/,c:[e.BE,n,i]}]},s={cN:"meta",b:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UIR+")?"},l={cN:"meta",b:"@"+e.UIR,c:[{b:/\(/,e:/\)/,c:[e.inherit(o,{cN:"meta-string"})]}]};return{k:t,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,r,a,s,l,{cN:"function",bK:"fun",e:"[(]|$",rB:!0,eE:!0,k:t,i:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,r:5,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"type",b://,k:"reified",r:0},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:t,r:0,c:[{b:/:/,e:/[=,\/]/,eW:!0,c:[{cN:"type",b:e.UIR},e.CLCM,e.CBCM],r:0},e.CLCM,e.CBCM,s,l,o,e.CNM]},e.CBCM]},{cN:"class",bK:"class interface trait",e:/[:\{(]|$/,eE:!0,i:"extends implements",c:[{bK:"public protected internal private constructor"},e.UTM,{cN:"type",b://,eB:!0,eE:!0,r:0},{cN:"type",b:/[,:]\s*/,e:/[<\(,]|$/,eB:!0,rE:!0},s,l]},o,{cN:"meta",b:"^#!/usr/bin/env",e:"$",i:"\n"},e.CNM]}}),e.registerLanguage("lasso",function(e){var t="[a-zA-Z_][\\w.]*",r="<\\?(lasso(script)?|=)",a="\\]|\\?>",i={literal:"true false none minimal full all void and or not bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft",built_in:"array date decimal duration integer map pair string tag xml null boolean bytes keyword list locale queue set stack staticarray local var variable global data self inherited currentcapture givenblock",keyword:"cache database_names database_schemanames database_tablenames define_tag define_type email_batch encode_set html_comment handle handle_error header if inline iterate ljax_target link link_currentaction link_currentgroup link_currentrecord link_detail link_firstgroup link_firstrecord link_lastgroup link_lastrecord link_nextgroup link_nextrecord link_prevgroup link_prevrecord log loop namespace_using output_none portal private protect records referer referrer repeating resultset rows search_args search_arguments select sort_args sort_arguments thread_atomic value_list while abort case else fail_if fail_ifnot fail if_empty if_false if_null if_true loop_abort loop_continue loop_count params params_up return return_value run_children soap_definetag soap_lastrequest soap_lastresponse tag_name ascending average by define descending do equals frozen group handle_failure import in into join let match max min on order parent protected provide public require returnhome skip split_thread sum take thread to trait type where with yield yieldhome"},n=e.C("",{r:0}),o={cN:"meta",b:"\\[noprocess\\]",starts:{e:"\\[/noprocess\\]",rE:!0,c:[n]}},s={cN:"meta",b:"\\[/noprocess|"+r},l={cN:"symbol",b:"'"+t+"'"},c=[e.CLCM,e.CBCM,e.inherit(e.CNM,{b:e.CNR+"|(-?infinity|NaN)\\b"}),e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null}),{cN:"string",b:"`",e:"`"},{v:[{b:"[#$]"+t},{b:"#",e:"\\d+",i:"\\W"}]},{cN:"type",b:"::\\s*",e:t,i:"\\W"},{cN:"params",v:[{b:"-(?!infinity)"+t,r:0},{b:"(\\.\\.\\.)"}]},{b:/(->|\.)\s*/,r:0,c:[l]},{cN:"class",bK:"define",rE:!0,e:"\\(|=>",c:[e.inherit(e.TM,{b:t+"(=(?!>))?|[-+*/%](?!>)"})]}];return{aliases:["ls","lassoscript"],cI:!0,l:t+"|&[lg]t;",k:i,c:[{cN:"meta",b:a,r:0,starts:{e:"\\[|"+r,rE:!0,r:0,c:[n]}},o,s,{cN:"meta",b:"\\[no_square_brackets",starts:{e:"\\[/no_square_brackets\\]",l:t+"|&[lg]t;",k:i,c:[{cN:"meta",b:a,r:0,starts:{e:"\\[noprocess\\]|"+r,rE:!0,c:[n]}},o,s].concat(c)}},{cN:"meta",b:"\\[",r:0},{cN:"meta",b:"^#!",e:"lasso9$",r:10}].concat(c)}}),e.registerLanguage("ldif",function(e){return{c:[{cN:"attribute",b:"^dn",e:": ",eE:!0,starts:{e:"$",r:0},r:10},{cN:"attribute",b:"^\\w",e:": ",eE:!0,starts:{e:"$",r:0}},{cN:"literal",b:"^-",e:"$"},e.HCM]}}),e.registerLanguage("leaf",function(e){return{c:[{cN:"function",b:"#+[A-Za-z_0-9]*\\(",e:" {",rB:!0,eE:!0,c:[{cN:"keyword",b:"#+"},{cN:"title",b:"[A-Za-z_][A-Za-z_0-9]*"},{cN:"params",b:"\\(",e:"\\)",endsParent:!0,c:[{cN:"string",b:'"',e:'"'},{cN:"variable",b:"[A-Za-z_][A-Za-z_0-9]*"}]}]}]}}),e.registerLanguage("less",function(e){var t="[\\w-]+",r="("+t+"|@{"+t+"})",a=[],i=[],n=function(e){return{cN:"string",b:"~?"+e+".*?"+e}},o=function(e,t,r){return{cN:e,b:t,r:r}},s={b:"\\(",e:"\\)",c:i,r:0};i.push(e.CLCM,e.CBCM,n("'"),n('"'),e.CSSNM,{b:"(url|data-uri)\\(",starts:{cN:"string",e:"[\\)\\n]",eE:!0}},o("number","#[0-9A-Fa-f]+\\b"),s,o("variable","@@?"+t,10),o("variable","@{"+t+"}"),o("built_in","~?`[^`]*?`"),{cN:"attribute",b:t+"\\s*:",e:":",rB:!0,eE:!0},{cN:"meta",b:"!important"});var l=i.concat({b:"{",e:"}",c:a}),c={bK:"when",eW:!0,c:[{bK:"and not"}].concat(i)},d={b:r+"\\s*:",rB:!0,e:"[;}]",r:0,c:[{cN:"attribute",b:r,e:":",eE:!0,starts:{eW:!0,i:"[<=$]",r:0,c:i}}]},p={cN:"keyword",b:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{e:"[;{}]",rE:!0,c:i,r:0}},m={cN:"variable",v:[{b:"@"+t+"\\s*:",r:15},{b:"@"+t}],starts:{e:"[;}]",rE:!0,c:l}},u={v:[{b:"[\\.#:&\\[>]",e:"[;{}]"},{b:r,e:"{"}],rB:!0,rE:!0,i:"[<='$\"]",r:0,c:[e.CLCM,e.CBCM,c,o("keyword","all\\b"),o("variable","@{"+t+"}"),o("selector-tag",r+"%?",0),o("selector-id","#"+r),o("selector-class","\\."+r,0),o("selector-tag","&",0),{cN:"selector-attr",b:"\\[",e:"\\]"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"\\(",e:"\\)",c:l},{b:"!important"}]};return a.push(e.CLCM,e.CBCM,p,m,d,u),{cI:!0,i:"[=>'/<($\"]",c:a}}),e.registerLanguage("lisp",function(e){var t="[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*",r="\\|[^]*?\\|",a="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?",i={cN:"meta",b:"^#!",e:"$"},n={cN:"literal",b:"\\b(t{1}|nil)\\b"},o={cN:"number",v:[{b:a,r:0},{b:"#(b|B)[0-1]+(/[0-1]+)?"},{b:"#(o|O)[0-7]+(/[0-7]+)?"},{b:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{b:"#(c|C)\\("+a+" +"+a,e:"\\)"}]},s=e.inherit(e.QSM,{i:null}),l=e.C(";","$",{r:0}),c={b:"\\*",e:"\\*"},d={cN:"symbol",b:"[:&]"+t},p={b:t,r:0},m={b:r},u={b:"\\(",e:"\\)",c:["self",n,s,o,p]},b={c:[o,s,c,d,u,p],v:[{b:"['`]\\(",e:"\\)"},{b:"\\(quote ",e:"\\)",k:{name:"quote"}},{b:"'"+r}]},g={v:[{b:"'"+t},{b:"#'"+t+"(::"+t+")*"}]},f={b:"\\(\\s*",e:"\\)"},_={eW:!0,r:0};return f.c=[{cN:"name",v:[{b:t},{b:r}]},_],_.c=[b,g,f,n,o,s,l,c,d,m,p],{i:/\S/,c:[o,i,n,s,l,b,g,f,p]}}),e.registerLanguage("livecodeserver",function(e){var t={b:"\\b[gtps][A-Z]+[A-Za-z0-9_\\-]*\\b|\\$_[A-Z]+",r:0},r=[e.CBCM,e.HCM,e.C("--","$"),e.C("[^:]//","$")],a=e.inherit(e.TM,{v:[{b:"\\b_*rig[A-Z]+[A-Za-z0-9_\\-]*"},{b:"\\b_[a-z0-9\\-]+"}]}),i=e.inherit(e.TM,{b:"\\b([A-Za-z0-9_\\-]+)\\b"});return{cI:!1,k:{keyword:"$_COOKIE $_FILES $_GET $_GET_BINARY $_GET_RAW $_POST $_POST_BINARY $_POST_RAW $_SESSION $_SERVER codepoint codepoints segment segments codeunit codeunits sentence sentences trueWord trueWords paragraph after byte bytes english the until http forever descending using line real8 with seventh for stdout finally element word words fourth before black ninth sixth characters chars stderr uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat end repeat URL in try into switch to words https token binfile each tenth as ticks tick system real4 by dateItems without char character ascending eighth whole dateTime numeric short first ftp integer abbreviated abbr abbrev private case while if div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within contains ends with begins the keys of keys",literal:"SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five quote empty one true return cr linefeed right backslash null seven tab three two RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK",built_in:"put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg avgDev base64Decode base64Encode baseConvert binaryDecode binaryEncode byteOffset byteToNum cachedURL cachedURLs charToNum cipherNames codepointOffset codepointProperty codepointToNum codeunitOffset commandNames compound compress constantNames cos date dateFormat decompress directories diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames geometricMean global globals hasMemory harmonicMean hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge millisec millisecs millisecond milliseconds min monthNames nativeCharToNum normalizeText num number numToByte numToChar numToCodepoint numToNativeChar offset open openfiles openProcesses openProcessIDs openSockets paragraphOffset paramCount param params peerAddress pendingMessages platform popStdDev populationStandardDeviation populationVariance popVariance processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLCreateTreeFromFileWithNamespaces revXMLCreateTreeWithNamespaces revXMLDataFromXPathQuery revXMLEvaluateXPath revXMLFirstChild revXMLMatchingNode revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_Execute revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sampVariance sec secs seconds sentenceOffset sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound stdDev sum sysError systemVersion tan tempName textDecode textEncode tick ticks time to tokenOffset toLower toUpper transpose truewordOffset trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus uuid value variableNames variance version waitDepth weekdayNames wordOffset xsltApplyStylesheet xsltApplyStylesheetFromFile xsltLoadStylesheet xsltLoadStylesheetFromFile add breakpoint cancel clear local variable file word line folder directory URL close socket process combine constant convert create new alias folder directory decrypt delete variable word line folder directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime libURLSetStatusCallback load multiply socket prepare process post seek rel relative read from process rename replace require resetAll resolve revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split start stop subtract union unload wait write"},c:[t,{cN:"keyword",b:"\\bend\\sif\\b"},{cN:"function",bK:"function",e:"$",c:[t,i,e.ASM,e.QSM,e.BNM,e.CNM,a]},{cN:"function",b:"\\bend\\s+",e:"$",k:"end",c:[i,a],r:0},{bK:"command on",e:"$",c:[t,i,e.ASM,e.QSM,e.BNM,e.CNM,a]},{cN:"meta",v:[{b:"<\\?(rev|lc|livecode)",r:10},{b:"<\\?"},{b:"\\?>"}]},e.ASM,e.QSM,e.BNM,e.CNM,a].concat(r),i:";$|^\\[|^=|&|{"}}),e.registerLanguage("livescript",function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger case default function var with then unless until loop of by when and or is isnt not it that otherwise from to til fallthrough super case default function var void const let enum export import native __hasProp __extends __slice __bind __indexOf",literal:"true false null undefined yes no on off it that void",built_in:"npm require console print module global window document"},r="[A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*",a=e.inherit(e.TM,{b:r}),i={cN:"subst",b:/#\{/,e:/}/,k:t},n={cN:"subst",b:/#[A-Za-z$_]/,e:/(?:\-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,k:t},o=[e.BNM,{cN:"number",b:"(\\b0[xX][a-fA-F0-9_]+)|(\\b\\d(\\d|_\\d)*(\\.(\\d(\\d|_\\d)*)?)?(_*[eE]([-+]\\d(_\\d|\\d)*)?)?[_a-z]*)",r:0,starts:{e:"(\\s*/)?",r:0}},{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,i,n]},{b:/"/,e:/"/,c:[e.BE,i,n]},{b:/\\/,e:/(\s|$)/,eE:!0}]},{cN:"regexp",v:[{b:"//",e:"//[gim]*",c:[i,e.HCM]},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+r},{b:"``",e:"``",eB:!0,eE:!0,sL:"javascript"}];i.c=o;var s={cN:"params",b:"\\(",rB:!0,c:[{b:/\(/,e:/\)/,k:t,c:["self"].concat(o)}]};return{aliases:["ls"],k:t,i:/\/\*/,c:o.concat([e.C("\\/\\*","\\*\\/"),e.HCM,{cN:"function",c:[a,s],rB:!0,v:[{b:"("+r+"\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B\\->\\*?",e:"\\->\\*?"},{b:"("+r+"\\s*(?:=|:=)\\s*)?!?(\\(.*\\))?\\s*\\B[-~]{1,2}>\\*?",e:"[-~]{1,2}>\\*?"},{b:"("+r+"\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B!?[-~]{1,2}>\\*?",e:"!?[-~]{1,2}>\\*?"}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[a]},a]},{b:r+":",e:":",rB:!0,rE:!0,r:0}])}}),e.registerLanguage("llvm",function(e){var t="([-a-zA-Z$._][\\w\\-$.]*)";return{k:"begin end true false declare define global constant private linker_private internal available_externally linkonce linkonce_odr weak weak_odr appending dllimport dllexport common default hidden protected extern_weak external thread_local zeroinitializer undef null to tail target triple datalayout volatile nuw nsw nnan ninf nsz arcp fast exact inbounds align addrspace section alias module asm sideeffect gc dbg linker_private_weak attributes blockaddress initialexec localdynamic localexec prefix unnamed_addr ccc fastcc coldcc x86_stdcallcc x86_fastcallcc arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device ptx_kernel intel_ocl_bicc msp430_intrcc spir_func spir_kernel x86_64_sysvcc x86_64_win64cc x86_thiscallcc cc c signext zeroext inreg sret nounwind noreturn noalias nocapture byval nest readnone readonly inlinehint noinline alwaysinline optsize ssp sspreq noredzone noimplicitfloat naked builtin cold nobuiltin noduplicate nonlazybind optnone returns_twice sanitize_address sanitize_memory sanitize_thread sspstrong uwtable returned type opaque eq ne slt sgt sle sge ult ugt ule uge oeq one olt ogt ole oge ord uno ueq une x acq_rel acquire alignstack atomic catch cleanup filter inteldialect max min monotonic nand personality release seq_cst singlethread umax umin unordered xchg add fadd sub fsub mul fmul udiv sdiv fdiv urem srem frem shl lshr ashr and or xor icmp fcmp phi call trunc zext sext fptrunc fpext uitofp sitofp fptoui fptosi inttoptr ptrtoint bitcast addrspacecast select va_arg ret br switch invoke unwind unreachable indirectbr landingpad resume malloc alloca free load store getelementptr extractelement insertelement shufflevector getresult extractvalue insertvalue atomicrmw cmpxchg fence argmemonly double",c:[{cN:"keyword",b:"i\\d+"},e.C(";","\\n",{r:0}),e.QSM,{cN:"string",v:[{b:'"',e:'[^\\\\]"'}],r:0},{cN:"title",v:[{b:"@"+t},{b:"@\\d+"},{b:"!"+t},{b:"!\\d+"+t}]},{cN:"symbol",v:[{b:"%"+t},{b:"%\\d+"},{b:"#\\d+"}]},{cN:"number",v:[{b:"0[xX][a-fA-F0-9]+"},{b:"-?\\d+(?:[.]\\d+)?(?:[eE][-+]?\\d+(?:[.]\\d+)?)?"}],r:0}]}}),e.registerLanguage("lsl",function(e){var t={cN:"subst",b:/\\[tn"\\]/},r={cN:"string",b:'"',e:'"',c:[t]},a={cN:"number",b:e.CNR},i={cN:"literal",v:[{b:"\\b(?:PI|TWO_PI|PI_BY_TWO|DEG_TO_RAD|RAD_TO_DEG|SQRT2)\\b"},{b:"\\b(?:XP_ERROR_(?:EXPERIENCES_DISABLED|EXPERIENCE_(?:DISABLED|SUSPENDED)|INVALID_(?:EXPERIENCE|PARAMETERS)|KEY_NOT_FOUND|MATURITY_EXCEEDED|NONE|NOT_(?:FOUND|PERMITTED(?:_LAND)?)|NO_EXPERIENCE|QUOTA_EXCEEDED|RETRY_UPDATE|STORAGE_EXCEPTION|STORE_DISABLED|THROTTLED|UNKNOWN_ERROR)|JSON_APPEND|STATUS_(?:PHYSICS|ROTATE_[XYZ]|PHANTOM|SANDBOX|BLOCK_GRAB(?:_OBJECT)?|(?:DIE|RETURN)_AT_EDGE|CAST_SHADOWS|OK|MALFORMED_PARAMS|TYPE_MISMATCH|BOUNDS_ERROR|NOT_(?:FOUND|SUPPORTED)|INTERNAL_ERROR|WHITELIST_FAILED)|AGENT(?:_(?:BY_(?:LEGACY_|USER)NAME|FLYING|ATTACHMENTS|SCRIPTED|MOUSELOOK|SITTING|ON_OBJECT|AWAY|WALKING|IN_AIR|TYPING|CROUCHING|BUSY|ALWAYS_RUN|AUTOPILOT|LIST_(?:PARCEL(?:_OWNER)?|REGION)))?|CAMERA_(?:PITCH|DISTANCE|BEHINDNESS_(?:ANGLE|LAG)|(?:FOCUS|POSITION)(?:_(?:THRESHOLD|LOCKED|LAG))?|FOCUS_OFFSET|ACTIVE)|ANIM_ON|LOOP|REVERSE|PING_PONG|SMOOTH|ROTATE|SCALE|ALL_SIDES|LINK_(?:ROOT|SET|ALL_(?:OTHERS|CHILDREN)|THIS)|ACTIVE|PASS(?:IVE|_(?:ALWAYS|IF_NOT_HANDLED|NEVER))|SCRIPTED|CONTROL_(?:FWD|BACK|(?:ROT_)?(?:LEFT|RIGHT)|UP|DOWN|(?:ML_)?LBUTTON)|PERMISSION_(?:RETURN_OBJECTS|DEBIT|OVERRIDE_ANIMATIONS|SILENT_ESTATE_MANAGEMENT|TAKE_CONTROLS|TRIGGER_ANIMATION|ATTACH|CHANGE_LINKS|(?:CONTROL|TRACK)_CAMERA|TELEPORT)|INVENTORY_(?:TEXTURE|SOUND|OBJECT|SCRIPT|LANDMARK|CLOTHING|NOTECARD|BODYPART|ANIMATION|GESTURE|ALL|NONE)|CHANGED_(?:INVENTORY|COLOR|SHAPE|SCALE|TEXTURE|LINK|ALLOWED_DROP|OWNER|REGION(?:_START)?|TELEPORT|MEDIA)|OBJECT_(?:CLICK_ACTION|HOVER_HEIGHT|LAST_OWNER_ID|(?:PHYSICS|SERVER|STREAMING)_COST|UNKNOWN_DETAIL|CHARACTER_TIME|PHANTOM|PHYSICS|TEMP_ON_REZ|NAME|DESC|POS|PRIM_(?:COUNT|EQUIVALENCE)|RETURN_(?:PARCEL(?:_OWNER)?|REGION)|REZZER_KEY|ROO?T|VELOCITY|OMEGA|OWNER|GROUP|CREATOR|ATTACHED_POINT|RENDER_WEIGHT|(?:BODY_SHAPE|PATHFINDING)_TYPE|(?:RUNNING|TOTAL)_SCRIPT_COUNT|TOTAL_INVENTORY_COUNT|SCRIPT_(?:MEMORY|TIME))|TYPE_(?:INTEGER|FLOAT|STRING|KEY|VECTOR|ROTATION|INVALID)|(?:DEBUG|PUBLIC)_CHANNEL|ATTACH_(?:AVATAR_CENTER|CHEST|HEAD|BACK|PELVIS|MOUTH|CHIN|NECK|NOSE|BELLY|[LR](?:SHOULDER|HAND|FOOT|EAR|EYE|[UL](?:ARM|LEG)|HIP)|(?:LEFT|RIGHT)_PEC|HUD_(?:CENTER_[12]|TOP_(?:RIGHT|CENTER|LEFT)|BOTTOM(?:_(?:RIGHT|LEFT))?)|[LR]HAND_RING1|TAIL_(?:BASE|TIP)|[LR]WING|FACE_(?:JAW|[LR]EAR|[LR]EYE|TOUNGE)|GROIN|HIND_[LR]FOOT)|LAND_(?:LEVEL|RAISE|LOWER|SMOOTH|NOISE|REVERT)|DATA_(?:ONLINE|NAME|BORN|SIM_(?:POS|STATUS|RATING)|PAYINFO)|PAYMENT_INFO_(?:ON_FILE|USED)|REMOTE_DATA_(?:CHANNEL|REQUEST|REPLY)|PSYS_(?:PART_(?:BF_(?:ZERO|ONE(?:_MINUS_(?:DEST_COLOR|SOURCE_(ALPHA|COLOR)))?|DEST_COLOR|SOURCE_(ALPHA|COLOR))|BLEND_FUNC_(DEST|SOURCE)|FLAGS|(?:START|END)_(?:COLOR|ALPHA|SCALE|GLOW)|MAX_AGE|(?:RIBBON|WIND|INTERP_(?:COLOR|SCALE)|BOUNCE|FOLLOW_(?:SRC|VELOCITY)|TARGET_(?:POS|LINEAR)|EMISSIVE)_MASK)|SRC_(?:MAX_AGE|PATTERN|ANGLE_(?:BEGIN|END)|BURST_(?:RATE|PART_COUNT|RADIUS|SPEED_(?:MIN|MAX))|ACCEL|TEXTURE|TARGET_KEY|OMEGA|PATTERN_(?:DROP|EXPLODE|ANGLE(?:_CONE(?:_EMPTY)?)?)))|VEHICLE_(?:REFERENCE_FRAME|TYPE_(?:NONE|SLED|CAR|BOAT|AIRPLANE|BALLOON)|(?:LINEAR|ANGULAR)_(?:FRICTION_TIMESCALE|MOTOR_DIRECTION)|LINEAR_MOTOR_OFFSET|HOVER_(?:HEIGHT|EFFICIENCY|TIMESCALE)|BUOYANCY|(?:LINEAR|ANGULAR)_(?:DEFLECTION_(?:EFFICIENCY|TIMESCALE)|MOTOR_(?:DECAY_)?TIMESCALE)|VERTICAL_ATTRACTION_(?:EFFICIENCY|TIMESCALE)|BANKING_(?:EFFICIENCY|MIX|TIMESCALE)|FLAG_(?:NO_DEFLECTION_UP|LIMIT_(?:ROLL_ONLY|MOTOR_UP)|HOVER_(?:(?:WATER|TERRAIN|UP)_ONLY|GLOBAL_HEIGHT)|MOUSELOOK_(?:STEER|BANK)|CAMERA_DECOUPLED))|PRIM_(?:ALPHA_MODE(?:_(?:BLEND|EMISSIVE|MASK|NONE))?|NORMAL|SPECULAR|TYPE(?:_(?:BOX|CYLINDER|PRISM|SPHERE|TORUS|TUBE|RING|SCULPT))?|HOLE_(?:DEFAULT|CIRCLE|SQUARE|TRIANGLE)|MATERIAL(?:_(?:STONE|METAL|GLASS|WOOD|FLESH|PLASTIC|RUBBER))?|SHINY_(?:NONE|LOW|MEDIUM|HIGH)|BUMP_(?:NONE|BRIGHT|DARK|WOOD|BARK|BRICKS|CHECKER|CONCRETE|TILE|STONE|DISKS|GRAVEL|BLOBS|SIDING|LARGETILE|STUCCO|SUCTION|WEAVE)|TEXGEN_(?:DEFAULT|PLANAR)|SCULPT_(?:TYPE_(?:SPHERE|TORUS|PLANE|CYLINDER|MASK)|FLAG_(?:MIRROR|INVERT))|PHYSICS(?:_(?:SHAPE_(?:CONVEX|NONE|PRIM|TYPE)))?|(?:POS|ROT)_LOCAL|SLICE|TEXT|FLEXIBLE|POINT_LIGHT|TEMP_ON_REZ|PHANTOM|POSITION|SIZE|ROTATION|TEXTURE|NAME|OMEGA|DESC|LINK_TARGET|COLOR|BUMP_SHINY|FULLBRIGHT|TEXGEN|GLOW|MEDIA_(?:ALT_IMAGE_ENABLE|CONTROLS|(?:CURRENT|HOME)_URL|AUTO_(?:LOOP|PLAY|SCALE|ZOOM)|FIRST_CLICK_INTERACT|(?:WIDTH|HEIGHT)_PIXELS|WHITELIST(?:_ENABLE)?|PERMS_(?:INTERACT|CONTROL)|PARAM_MAX|CONTROLS_(?:STANDARD|MINI)|PERM_(?:NONE|OWNER|GROUP|ANYONE)|MAX_(?:URL_LENGTH|WHITELIST_(?:SIZE|COUNT)|(?:WIDTH|HEIGHT)_PIXELS)))|MASK_(?:BASE|OWNER|GROUP|EVERYONE|NEXT)|PERM_(?:TRANSFER|MODIFY|COPY|MOVE|ALL)|PARCEL_(?:MEDIA_COMMAND_(?:STOP|PAUSE|PLAY|LOOP|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC|LOOP_SET)|FLAG_(?:ALLOW_(?:FLY|(?:GROUP_)?SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|CREATE_(?:GROUP_)?OBJECTS)|USE_(?:ACCESS_(?:GROUP|LIST)|BAN_LIST|LAND_PASS_LIST)|LOCAL_SOUND_ONLY|RESTRICT_PUSHOBJECT|ALLOW_(?:GROUP|ALL)_OBJECT_ENTRY)|COUNT_(?:TOTAL|OWNER|GROUP|OTHER|SELECTED|TEMP)|DETAILS_(?:NAME|DESC|OWNER|GROUP|AREA|ID|SEE_AVATARS))|LIST_STAT_(?:MAX|MIN|MEAN|MEDIAN|STD_DEV|SUM(?:_SQUARES)?|NUM_COUNT|GEOMETRIC_MEAN|RANGE)|PAY_(?:HIDE|DEFAULT)|REGION_FLAG_(?:ALLOW_DAMAGE|FIXED_SUN|BLOCK_TERRAFORM|SANDBOX|DISABLE_(?:COLLISIONS|PHYSICS)|BLOCK_FLY|ALLOW_DIRECT_TELEPORT|RESTRICT_PUSHOBJECT)|HTTP_(?:METHOD|MIMETYPE|BODY_(?:MAXLENGTH|TRUNCATED)|CUSTOM_HEADER|PRAGMA_NO_CACHE|VERBOSE_THROTTLE|VERIFY_CERT)|STRING_(?:TRIM(?:_(?:HEAD|TAIL))?)|CLICK_ACTION_(?:NONE|TOUCH|SIT|BUY|PAY|OPEN(?:_MEDIA)?|PLAY|ZOOM)|TOUCH_INVALID_FACE|PROFILE_(?:NONE|SCRIPT_MEMORY)|RC_(?:DATA_FLAGS|DETECT_PHANTOM|GET_(?:LINK_NUM|NORMAL|ROOT_KEY)|MAX_HITS|REJECT_(?:TYPES|AGENTS|(?:NON)?PHYSICAL|LAND))|RCERR_(?:CAST_TIME_EXCEEDED|SIM_PERF_LOW|UNKNOWN)|ESTATE_ACCESS_(?:ALLOWED_(?:AGENT|GROUP)_(?:ADD|REMOVE)|BANNED_AGENT_(?:ADD|REMOVE))|DENSITY|FRICTION|RESTITUTION|GRAVITY_MULTIPLIER|KFM_(?:COMMAND|CMD_(?:PLAY|STOP|PAUSE)|MODE|FORWARD|LOOP|PING_PONG|REVERSE|DATA|ROTATION|TRANSLATION)|ERR_(?:GENERIC|PARCEL_PERMISSIONS|MALFORMED_PARAMS|RUNTIME_PERMISSIONS|THROTTLED)|CHARACTER_(?:CMD_(?:(?:SMOOTH_)?STOP|JUMP)|DESIRED_(?:TURN_)?SPEED|RADIUS|STAY_WITHIN_PARCEL|LENGTH|ORIENTATION|ACCOUNT_FOR_SKIPPED_FRAMES|AVOIDANCE_MODE|TYPE(?:_(?:[ABCD]|NONE))?|MAX_(?:DECEL|TURN_RADIUS|(?:ACCEL|SPEED)))|PURSUIT_(?:OFFSET|FUZZ_FACTOR|GOAL_TOLERANCE|INTERCEPT)|REQUIRE_LINE_OF_SIGHT|FORCE_DIRECT_PATH|VERTICAL|HORIZONTAL|AVOID_(?:CHARACTERS|DYNAMIC_OBSTACLES|NONE)|PU_(?:EVADE_(?:HIDDEN|SPOTTED)|FAILURE_(?:DYNAMIC_PATHFINDING_DISABLED|INVALID_(?:GOAL|START)|NO_(?:NAVMESH|VALID_DESTINATION)|OTHER|TARGET_GONE|(?:PARCEL_)?UNREACHABLE)|(?:GOAL|SLOWDOWN_DISTANCE)_REACHED)|TRAVERSAL_TYPE(?:_(?:FAST|NONE|SLOW))?|CONTENT_TYPE_(?:ATOM|FORM|HTML|JSON|LLSD|RSS|TEXT|XHTML|XML)|GCNP_(?:RADIUS|STATIC)|(?:PATROL|WANDER)_PAUSE_AT_WAYPOINTS|OPT_(?:AVATAR|CHARACTER|EXCLUSION_VOLUME|LEGACY_LINKSET|MATERIAL_VOLUME|OTHER|STATIC_OBSTACLE|WALKABLE)|SIM_STAT_PCT_CHARS_STEPPED)\\b"},{b:"\\b(?:FALSE|TRUE)\\b"},{b:"\\b(?:ZERO_ROTATION)\\b"},{b:"\\b(?:EOF|JSON_(?:ARRAY|DELETE|FALSE|INVALID|NULL|NUMBER|OBJECT|STRING|TRUE)|NULL_KEY|TEXTURE_(?:BLANK|DEFAULT|MEDIA|PLYWOOD|TRANSPARENT)|URL_REQUEST_(?:GRANTED|DENIED))\\b"},{b:"\\b(?:ZERO_VECTOR|TOUCH_INVALID_(?:TEXCOORD|VECTOR))\\b"}]},n={cN:"built_in",b:"\\b(?:ll(?:AgentInExperience|(?:Create|DataSize|Delete|KeyCount|Keys|Read|Update)KeyValue|GetExperience(?:Details|ErrorMessage)|ReturnObjectsBy(?:ID|Owner)|Json(?:2List|[GS]etValue|ValueType)|Sin|Cos|Tan|Atan2|Sqrt|Pow|Abs|Fabs|Frand|Floor|Ceil|Round|Vec(?:Mag|Norm|Dist)|Rot(?:Between|2(?:Euler|Fwd|Left|Up))|(?:Euler|Axes)2Rot|Whisper|(?:Region|Owner)?Say|Shout|Listen(?:Control|Remove)?|Sensor(?:Repeat|Remove)?|Detected(?:Name|Key|Owner|Type|Pos|Vel|Grab|Rot|Group|LinkNumber)|Die|Ground|Wind|(?:[GS]et)(?:AnimationOverride|MemoryLimit|PrimMediaParams|ParcelMusicURL|Object(?:Desc|Name)|PhysicsMaterial|Status|Scale|Color|Alpha|Texture|Pos|Rot|Force|Torque)|ResetAnimationOverride|(?:Scale|Offset|Rotate)Texture|(?:Rot)?Target(?:Remove)?|(?:Stop)?MoveToTarget|Apply(?:Rotational)?Impulse|Set(?:KeyframedMotion|ContentType|RegionPos|(?:Angular)?Velocity|Buoyancy|HoverHeight|ForceAndTorque|TimerEvent|ScriptState|Damage|TextureAnim|Sound(?:Queueing|Radius)|Vehicle(?:Type|(?:Float|Vector|Rotation)Param)|(?:Touch|Sit)?Text|Camera(?:Eye|At)Offset|PrimitiveParams|ClickAction|Link(?:Alpha|Color|PrimitiveParams(?:Fast)?|Texture(?:Anim)?|Camera|Media)|RemoteScriptAccessPin|PayPrice|LocalRot)|ScaleByFactor|Get(?:(?:Max|Min)ScaleFactor|ClosestNavPoint|StaticPath|SimStats|Env|PrimitiveParams|Link(?:PrimitiveParams|Number(?:OfSides)?|Key|Name|Media)|HTTPHeader|FreeURLs|Object(?:Details|PermMask|PrimCount)|Parcel(?:MaxPrims|Details|Prim(?:Count|Owners))|Attached(?:List)?|(?:SPMax|Free|Used)Memory|Region(?:Name|TimeDilation|FPS|Corner|AgentCount)|Root(?:Position|Rotation)|UnixTime|(?:Parcel|Region)Flags|(?:Wall|GMT)clock|SimulatorHostname|BoundingBox|GeometricCenter|Creator|NumberOf(?:Prims|NotecardLines|Sides)|Animation(?:List)?|(?:Camera|Local)(?:Pos|Rot)|Vel|Accel|Omega|Time(?:stamp|OfDay)|(?:Object|CenterOf)?Mass|MassMKS|Energy|Owner|(?:Owner)?Key|SunDirection|Texture(?:Offset|Scale|Rot)|Inventory(?:Number|Name|Key|Type|Creator|PermMask)|Permissions(?:Key)?|StartParameter|List(?:Length|EntryType)|Date|Agent(?:Size|Info|Language|List)|LandOwnerAt|NotecardLine|Script(?:Name|State))|(?:Get|Reset|GetAndReset)Time|PlaySound(?:Slave)?|LoopSound(?:Master|Slave)?|(?:Trigger|Stop|Preload)Sound|(?:(?:Get|Delete)Sub|Insert)String|To(?:Upper|Lower)|Give(?:InventoryList|Money)|RezObject|(?:Stop)?LookAt|Sleep|CollisionFilter|(?:Take|Release)Controls|DetachFromAvatar|AttachToAvatar(?:Temp)?|InstantMessage|(?:GetNext)?Email|StopHover|MinEventDelay|RotLookAt|String(?:Length|Trim)|(?:Start|Stop)Animation|TargetOmega|Request(?:Experience)?Permissions|(?:Create|Break)Link|BreakAllLinks|(?:Give|Remove)Inventory|Water|PassTouches|Request(?:Agent|Inventory)Data|TeleportAgent(?:Home|GlobalCoords)?|ModifyLand|CollisionSound|ResetScript|MessageLinked|PushObject|PassCollisions|AxisAngle2Rot|Rot2(?:Axis|Angle)|A(?:cos|sin)|AngleBetween|AllowInventoryDrop|SubStringIndex|List2(?:CSV|Integer|Json|Float|String|Key|Vector|Rot|List(?:Strided)?)|DeleteSubList|List(?:Statistics|Sort|Randomize|(?:Insert|Find|Replace)List)|EdgeOfWorld|AdjustSoundVolume|Key2Name|TriggerSoundLimited|EjectFromLand|(?:CSV|ParseString)2List|OverMyLand|SameGroup|UnSit|Ground(?:Slope|Normal|Contour)|GroundRepel|(?:Set|Remove)VehicleFlags|(?:AvatarOn)?(?:Link)?SitTarget|Script(?:Danger|Profiler)|Dialog|VolumeDetect|ResetOtherScript|RemoteLoadScriptPin|(?:Open|Close)RemoteDataChannel|SendRemoteData|RemoteDataReply|(?:Integer|String)ToBase64|XorBase64|Log(?:10)?|Base64To(?:String|Integer)|ParseStringKeepNulls|RezAtRoot|RequestSimulatorData|ForceMouselook|(?:Load|Release|(?:E|Une)scape)URL|ParcelMedia(?:CommandList|Query)|ModPow|MapDestination|(?:RemoveFrom|AddTo|Reset)Land(?:Pass|Ban)List|(?:Set|Clear)CameraParams|HTTP(?:Request|Response)|TextBox|DetectedTouch(?:UV|Face|Pos|(?:N|Bin)ormal|ST)|(?:MD5|SHA1|DumpList2)String|Request(?:Secure)?URL|Clear(?:Prim|Link)Media|(?:Link)?ParticleSystem|(?:Get|Request)(?:Username|DisplayName)|RegionSayTo|CastRay|GenerateKey|TransferLindenDollars|ManageEstateAccess|(?:Create|Delete)Character|ExecCharacterCmd|Evade|FleeFrom|NavigateTo|PatrolPoints|Pursue|UpdateCharacter|WanderWithin))\\b"};return{i:":",c:[r,{cN:"comment",v:[e.C("//","$"),e.C("/\\*","\\*/")]},a,{cN:"section",v:[{b:"\\b(?:state|default)\\b"},{b:"\\b(?:state_(?:entry|exit)|touch(?:_(?:start|end))?|(?:land_)?collision(?:_(?:start|end))?|timer|listen|(?:no_)?sensor|control|(?:not_)?at_(?:rot_)?target|money|email|experience_permissions(?:_denied)?|run_time_permissions|changed|attach|dataserver|moving_(?:start|end)|link_message|(?:on|object)_rez|remote_data|http_re(?:sponse|quest)|path_update|transaction_result)\\b"}]},n,i,{cN:"type",b:"\\b(?:integer|float|string|key|vector|quaternion|rotation|list)\\b"}]}}),e.registerLanguage("lua",function(e){var t="\\[=*\\[",r="\\]=*\\]",a={b:t,e:r,c:["self"]},i=[e.C("--(?!"+t+")","$"),e.C("--"+t,r,{c:[a],r:10})];return{l:e.UIR,k:{literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstringmodule next pairs pcall print rawequal rawget rawset require select setfenvsetmetatable tonumber tostring type unpack xpcall arg selfcoroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove" -},c:i.concat([{cN:"function",bK:"function",e:"\\)",c:[e.inherit(e.TM,{b:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{cN:"params",b:"\\(",eW:!0,c:i}].concat(i)},e.CNM,e.ASM,e.QSM,{cN:"string",b:t,e:r,c:[a],r:5}])}}),e.registerLanguage("makefile",function(e){var t={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%"},{b:"<=",r:0},{b:"=>",r:0},{b:"/\\\\"},{b:"\\\\/"}]},l={cN:"built_in",v:[{b:":-\\|-->"},{b:"=",r:0}]};return{aliases:["m","moo"],k:t,c:[s,l,r,e.CBCM,a,e.NM,i,n,{b:/:-/}]}}),e.registerLanguage("mipsasm",function(e){return{cI:!0,aliases:["mips"],l:"\\.?"+e.IR,k:{meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .ltorg ",built_in:"$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 zero at v0 v1 a0 a1 a2 a3 a4 a5 a6 a7 t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 s0 s1 s2 s3 s4 s5 s6 s7 s8 k0 k1 gp sp fp ra $f0 $f1 $f2 $f2 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15 $f16 $f17 $f18 $f19 $f20 $f21 $f22 $f23 $f24 $f25 $f26 $f27 $f28 $f29 $f30 $f31 Context Random EntryLo0 EntryLo1 Context PageMask Wired EntryHi HWREna BadVAddr Count Compare SR IntCtl SRSCtl SRSMap Cause EPC PRId EBase Config Config1 Config2 Config3 LLAddr Debug DEPC DESAVE CacheErr ECC ErrorEPC TagLo DataLo TagHi DataHi WatchLo WatchHi PerfCtl PerfCnt "},c:[{cN:"keyword",b:"\\b(addi?u?|andi?|b(al)?|beql?|bgez(al)?l?|bgtzl?|blezl?|bltz(al)?l?|bnel?|cl[oz]|divu?|ext|ins|j(al)?|jalr(.hb)?|jr(.hb)?|lbu?|lhu?|ll|lui|lw[lr]?|maddu?|mfhi|mflo|movn|movz|move|msubu?|mthi|mtlo|mul|multu?|nop|nor|ori?|rotrv?|sb|sc|se[bh]|sh|sllv?|slti?u?|srav?|srlv?|subu?|sw[lr]?|xori?|wsbh|abs.[sd]|add.[sd]|alnv.ps|bc1[ft]l?|c.(s?f|un|u?eq|[ou]lt|[ou]le|ngle?|seq|l[et]|ng[et]).[sd]|(ceil|floor|round|trunc).[lw].[sd]|cfc1|cvt.d.[lsw]|cvt.l.[dsw]|cvt.ps.s|cvt.s.[dlw]|cvt.s.p[lu]|cvt.w.[dls]|div.[ds]|ldx?c1|luxc1|lwx?c1|madd.[sd]|mfc1|mov[fntz]?.[ds]|msub.[sd]|mth?c1|mul.[ds]|neg.[ds]|nmadd.[ds]|nmsub.[ds]|p[lu][lu].ps|recip.fmt|r?sqrt.[ds]|sdx?c1|sub.[ds]|suxc1|swx?c1|break|cache|d?eret|[de]i|ehb|mfc0|mtc0|pause|prefx?|rdhwr|rdpgpr|sdbbp|ssnop|synci?|syscall|teqi?|tgei?u?|tlb(p|r|w[ir])|tlti?u?|tnei?|wait|wrpgpr)",e:"\\s"},e.C("[;#]","$"),e.CBCM,e.QSM,{cN:"string",b:"'",e:"[^\\\\]'",r:0},{cN:"title",b:"\\|",e:"\\|",i:"\\n",r:0},{cN:"number",v:[{b:"0x[0-9a-f]+"},{b:"\\b-?\\d+"}],r:0},{cN:"symbol",v:[{b:"^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{b:"^\\s*[0-9]+:"},{b:"[0-9]+[bf]"}],r:0}],i:"/"}}),e.registerLanguage("mizar",function(e){return{k:"environ vocabularies notations constructors definitions registrations theorems schemes requirements begin end definition registration cluster existence pred func defpred deffunc theorem proof let take assume then thus hence ex for st holds consider reconsider such that and in provided of as from be being by means equals implies iff redefine define now not or attr is mode suppose per cases set thesis contradiction scheme reserve struct correctness compatibility coherence symmetry assymetry reflexivity irreflexivity connectedness uniqueness commutativity idempotence involutiveness projectivity",c:[e.C("::","$")]}}),e.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},a={b:"->{",e:"}"},i={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},n=[e.BE,r,i],o=[i,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),a,{cN:"string",c:n,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,r:5,c:[e.TM]},{b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=o,a.c=o,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:o}}),e.registerLanguage("mojolicious",function(e){return{sL:"xml",c:[{cN:"meta",b:"^__(END|DATA)__$"},{b:"^\\s*%{1,2}={0,2}",e:"$",sL:"perl"},{b:"<%{1,2}={0,2}",e:"={0,1}%>",sL:"perl",eB:!0,eE:!0}]}}),e.registerLanguage("monkey",function(e){var t={cN:"number",r:0,v:[{b:"[$][a-fA-F0-9]+"},e.NM]};return{cI:!0,k:{keyword:"public private property continue exit extern new try catch eachin not abstract final select case default const local global field end if then else elseif endif while wend repeat until forever for to step next return module inline throw import",built_in:"DebugLog DebugStop Error Print ACos ACosr ASin ASinr ATan ATan2 ATan2r ATanr Abs Abs Ceil Clamp Clamp Cos Cosr Exp Floor Log Max Max Min Min Pow Sgn Sgn Sin Sinr Sqrt Tan Tanr Seed PI HALFPI TWOPI",literal:"true false null and or shl shr mod"},i:/\/\*/,c:[e.C("#rem","#end"),e.C("'","$",{r:0}),{cN:"function",bK:"function method",e:"[(=:]|$",i:/\n/,c:[e.UTM]},{cN:"class",bK:"class interface",e:"$",c:[{bK:"extends implements"},e.UTM]},{cN:"built_in",b:"\\b(self|super)\\b"},{cN:"meta",b:"\\s*#",e:"$",k:{"meta-keyword":"if else elseif endif end then"}},{cN:"meta",b:"^\\s*strict\\b"},{bK:"alias",e:"=",c:[e.UTM]},e.QSM,t]}}),e.registerLanguage("moonscript",function(e){var t={keyword:"if then not for in while do return else elseif break continue switch and or unless when class extends super local import export from using",literal:"true false nil",built_in:"_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table"},r="[A-Za-z$_][0-9A-Za-z$_]*",a={cN:"subst",b:/#\{/,e:/}/,k:t},i=[e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'/,e:/'/,c:[e.BE]},{b:/"/,e:/"/,c:[e.BE,a]}]},{cN:"built_in",b:"@__"+e.IR},{b:"@"+e.IR},{b:e.IR+"\\\\"+e.IR}];a.c=i;var n=e.inherit(e.TM,{b:r}),o="(\\(.*\\))?\\s*\\B[-=]>",s={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:t,c:["self"].concat(i)}]};return{aliases:["moon"],k:t,i:/\/\*/,c:i.concat([e.C("--","$"),{cN:"function",b:"^\\s*"+r+"\\s*=\\s*"+o,e:"[-=]>",rB:!0,c:[n,s]},{b:/[\(,:=]\s*/,r:0,c:[{cN:"function",b:o,e:"[-=]>",rB:!0,c:[s]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[n]},n]},{cN:"name",b:r+":",e:":",rB:!0,rE:!0,r:0}])}}),e.registerLanguage("n1ql",function(e){return{cI:!0,c:[{bK:"build create index delete drop explain infer|10 insert merge prepare select update upsert|10",e:/;/,eW:!0,k:{keyword:"all alter analyze and any array as asc begin between binary boolean break bucket build by call case cast cluster collate collection commit connect continue correlate cover create database dataset datastore declare decrement delete derived desc describe distinct do drop each element else end every except exclude execute exists explain fetch first flatten for force from function grant group gsi having if ignore ilike in include increment index infer inline inner insert intersect into is join key keys keyspace known last left let letting like limit lsm map mapping matched materialized merge minus namespace nest not number object offset on option or order outer over parse partition password path pool prepare primary private privilege procedure public raw realm reduce rename return returning revoke right role rollback satisfies schema select self semi set show some start statistics string system then to transaction trigger truncate under union unique unknown unnest unset update upsert use user using validate value valued values via view when where while with within work xor",literal:"true false null missing|5",built_in:"array_agg array_append array_concat array_contains array_count array_distinct array_ifnull array_length array_max array_min array_position array_prepend array_put array_range array_remove array_repeat array_replace array_reverse array_sort array_sum avg count max min sum greatest least ifmissing ifmissingornull ifnull missingif nullif ifinf ifnan ifnanorinf naninf neginfif posinfif clock_millis clock_str date_add_millis date_add_str date_diff_millis date_diff_str date_part_millis date_part_str date_trunc_millis date_trunc_str duration_to_str millis str_to_millis millis_to_str millis_to_utc millis_to_zone_name now_millis now_str str_to_duration str_to_utc str_to_zone_name decode_json encode_json encoded_size poly_length base64 base64_encode base64_decode meta uuid abs acos asin atan atan2 ceil cos degrees e exp ln log floor pi power radians random round sign sin sqrt tan trunc object_length object_names object_pairs object_inner_pairs object_values object_inner_values object_add object_put object_remove object_unwrap regexp_contains regexp_like regexp_position regexp_replace contains initcap length lower ltrim position repeat replace rtrim split substr title trim upper isarray isatom isboolean isnumber isobject isstring type toarray toatom toboolean tonumber toobject tostring"},c:[{cN:"string",b:"'",e:"'",c:[e.BE],r:0},{cN:"string",b:'"',e:'"',c:[e.BE],r:0},{cN:"symbol",b:"`",e:"`",c:[e.BE],r:2},e.CNM,e.CBCM]},e.CBCM]}}),e.registerLanguage("nginx",function(e){var t={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},r={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,t],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[t]},{cN:"regexp",c:[e.BE,t],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},t]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:r}],r:0}],i:"[^\\s\\}]"}}),e.registerLanguage("nimrod",function(e){return{aliases:["nim"],k:{keyword:"addr and as asm bind block break case cast const continue converter discard distinct div do elif else end enum except export finally for from generic if import in include interface is isnot iterator let macro method mixin mod nil not notin object of or out proc ptr raise ref return shl shr static template try tuple type using var when while with without xor yield",literal:"shared guarded stdin stdout stderr result true false",built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool char string cstring pointer expr stmt void auto any range array openarray varargs seq set clong culong cchar cschar cshort cint csize clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong cstringarray semistatic"},c:[{cN:"meta",b:/{\./,e:/\.}/,r:10},{cN:"string",b:/[a-zA-Z]\w*"/,e:/"/,c:[{b:/""/}]},{cN:"string",b:/([a-zA-Z]\w*)?"""/,e:/"""/},e.QSM,{cN:"type",b:/\b[A-Z]\w+\b/,r:0},{cN:"number",r:0,v:[{b:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},{b:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},{b:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},{b:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}]},e.HCM]}}),e.registerLanguage("nix",function(e){var t={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},r={cN:"subst",b:/\$\{/,e:/}/,k:t},a={b:/[a-zA-Z0-9-_]+(\s*=)/,rB:!0,r:0,c:[{cN:"attr",b:/\S+/}]},i={cN:"string",c:[r],v:[{b:"''",e:"''"},{b:'"',e:'"'}]},n=[e.NM,e.HCM,e.CBCM,i,a];return r.c=n,{aliases:["nixos"],k:t,c:n}}),e.registerLanguage("nsis",function(e){var t={cN:"variable",b:/\$(ADMINTOOLS|APPDATA|CDBURN_AREA|CMDLINE|COMMONFILES32|COMMONFILES64|COMMONFILES|COOKIES|DESKTOP|DOCUMENTS|EXEDIR|EXEFILE|EXEPATH|FAVORITES|FONTS|HISTORY|HWNDPARENT|INSTDIR|INTERNET_CACHE|LANGUAGE|LOCALAPPDATA|MUSIC|NETHOOD|OUTDIR|PICTURES|PLUGINSDIR|PRINTHOOD|PROFILE|PROGRAMFILES32|PROGRAMFILES64|PROGRAMFILES|QUICKLAUNCH|RECENT|RESOURCES_LOCALIZED|RESOURCES|SENDTO|SMPROGRAMS|SMSTARTUP|STARTMENU|SYSDIR|TEMP|TEMPLATES|VIDEOS|WINDIR)/},r={cN:"variable",b:/\$+{[\w\.:-]+}/},a={cN:"variable",b:/\$+\w+/,i:/\(\){}/},i={cN:"variable",b:/\$+\([\w\^\.:-]+\)/},n={cN:"params",b:"(ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)"},o={cN:"keyword",b:/\!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversionsystem|ifdef|ifmacrodef|ifmacrondef|ifndef|if|include|insertmacro|macroend|macro|makensis|packhdr|searchparse|searchreplace|tempfile|undef|verbose|warning)/},s={cN:"subst",b:/\$(\\[nrt]|\$)/},l={cN:"class",b:/\w+\:\:\w+/},c={cN:"string",v:[{b:'"',e:'"'},{b:"'",e:"'"},{b:"`",e:"`"}],i:/\n/,c:[s,t,r,a,i]};return{cI:!1,k:{keyword:"Abort AddBrandingImage AddSize AllowRootDirInstall AllowSkipFiles AutoCloseWindow BGFont BGGradient BrandingText BringToFront Call CallInstDLL Caption ChangeUI CheckBitmap ClearErrors CompletedText ComponentText CopyFiles CRCCheck CreateDirectory CreateFont CreateShortCut Delete DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue DetailPrint DetailsButtonText DirText DirVar DirVerify EnableWindow EnumRegKey EnumRegValue Exch Exec ExecShell ExecWait ExpandEnvStrings File FileBufSize FileClose FileErrorText FileOpen FileRead FileReadByte FileReadUTF16LE FileReadWord FileSeek FileWrite FileWriteByte FileWriteUTF16LE FileWriteWord FindClose FindFirst FindNext FindWindow FlushINI FunctionEnd GetCurInstType GetCurrentAddress GetDlgItem GetDLLVersion GetDLLVersionLocal GetErrorLevel GetFileTime GetFileTimeLocal GetFullPathName GetFunctionAddress GetInstDirError GetLabelAddress GetTempFileName Goto HideWindow Icon IfAbort IfErrors IfFileExists IfRebootFlag IfSilent InitPluginsDir InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType InstTypeGetText InstTypeSetText IntCmp IntCmpU IntFmt IntOp IsWindow LangString LicenseBkColor LicenseData LicenseForceSelection LicenseLangString LicenseText LoadLanguageFile LockWindow LogSet LogText ManifestDPIAware ManifestSupportedOS MessageBox MiscButtonText Name Nop OutFile Page PageCallbacks PageExEnd Pop Push Quit ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr Reboot RegDLL Rename RequestExecutionLevel ReserveFile Return RMDir SearchPath SectionEnd SectionGetFlags SectionGetInstTypes SectionGetSize SectionGetText SectionGroupEnd SectionIn SectionSetFlags SectionSetInstTypes SectionSetSize SectionSetText SendMessage SetAutoClose SetBrandingImage SetCompress SetCompressor SetCompressorDictSize SetCtlColors SetCurInstType SetDatablockOptimize SetDateSave SetDetailsPrint SetDetailsView SetErrorLevel SetErrors SetFileAttributes SetFont SetOutPath SetOverwrite SetRebootFlag SetRegView SetShellVarContext SetSilent ShowInstDetails ShowUninstDetails ShowWindow SilentInstall SilentUnInstall Sleep SpaceTexts StrCmp StrCmpS StrCpy StrLen SubCaption Unicode UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText UninstPage UnRegDLL Var VIAddVersionKey VIFileVersion VIProductVersion WindowIcon WriteINIStr WriteRegBin WriteRegDWORD WriteRegExpandStr WriteRegStr WriteUninstaller XPStyle",literal:"admin all auto both bottom bzip2 colored components current custom directory false force hide highest ifdiff ifnewer instfiles lastused leave left license listonly lzma nevershow none normal notset off on open print right show silent silentlog smooth textonly top true try un.components un.custom un.directory un.instfiles un.license uninstConfirm user Win10 Win7 Win8 WinVista zlib"},c:[e.HCM,e.CBCM,e.C(";","$",{r:0}),{cN:"function",bK:"Function PageEx Section SectionGroup",e:"$"},c,o,r,a,i,n,l,e.NM]}}),e.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},r={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},a=/[a-zA-Z@][a-zA-Z0-9_]*/,i="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:r,l:a,i:""}]}]},{cN:"class",b:"("+i.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:i,l:a,c:[e.UTM]},{b:"\\."+e.UIR,r:0}]}}),e.registerLanguage("ocaml",function(e){return{aliases:["ml"],k:{keyword:"and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref",literal:"true false"},i:/\/\/|>>/,l:"[a-z_]\\w*!?",c:[{cN:"literal",b:"\\[(\\|\\|)?\\]|\\(\\)",r:0},e.C("\\(\\*","\\*\\)",{c:["self"]}),{cN:"symbol",b:"'[A-Za-z_](?!')[\\w']*"},{cN:"type",b:"`[A-Z][\\w']*"},{cN:"type",b:"\\b[A-Z][\\w']*",r:0},{b:"[a-z_]\\w*'[\\w']*",r:0},e.inherit(e.ASM,{cN:"string",r:0}),e.inherit(e.QSM,{i:null}),{cN:"number",b:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",r:0},{b:/[-=]>/}]}}),e.registerLanguage("openscad",function(e){var t={cN:"keyword",b:"\\$(f[asn]|t|vp[rtd]|children)"},r={cN:"literal",b:"false|true|PI|undef"},a={cN:"number",b:"\\b\\d+(\\.\\d+)?(e-?\\d+)?",r:0},i=e.inherit(e.QSM,{i:null}),n={cN:"meta",k:{"meta-keyword":"include use"},b:"include|use <",e:">"},o={cN:"params",b:"\\(",e:"\\)",c:["self",a,i,t,r]},s={b:"[*!#%]",r:0},l={cN:"function",bK:"module function",e:"\\=|\\{",c:[o,e.UTM]};return{aliases:["scad"],k:{keyword:"function module include use for intersection_for if else \\%",literal:"false true PI undef",built_in:"circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign"},c:[e.CLCM,e.CBCM,a,n,i,t,s,l]}}),e.registerLanguage("oxygene",function(e){var t="abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained",r=e.C("{","}",{r:0}),a=e.C("\\(\\*","\\*\\)",{r:10}),i={cN:"string",b:"'",e:"'",c:[{b:"''"}]},n={cN:"string",b:"(#\\d+)+"},o={cN:"function",bK:"function constructor destructor procedure method",e:"[:;]",k:"function constructor|10 destructor|10 procedure|10 method|10",c:[e.TM,{cN:"params",b:"\\(",e:"\\)",k:t,c:[i,n]},r,a]};return{cI:!0,l:/\.?\w+/,k:t,i:'("|\\$[G-Zg-z]|\\/\\*||->)',c:[r,a,e.CLCM,i,n,e.NM,o,{cN:"class",b:"=\\bclass\\b",e:"end;",k:t,c:[i,n,r,a,e.CLCM,o]}]}}),e.registerLanguage("parser3",function(e){var t=e.C("{","}",{c:["self"]});return{sL:"xml",r:0,c:[e.C("^#","$"),e.C("\\^rem{","}",{r:10,c:[t]}),{cN:"meta",b:"^@(?:BASE|USE|CLASS|OPTIONS)$",r:10},{cN:"title",b:"@[\\w\\-]+\\[[\\w^;\\-]*\\](?:\\[[\\w^;\\-]*\\])?(?:.*)$"},{cN:"variable",b:"\\$\\{?[\\w\\-\\.\\:]+\\}?"},{cN:"keyword",b:"\\^[\\w\\-\\.\\:]+"},{cN:"number",b:"\\^#[0-9a-fA-F]+"},e.CNM]}}),e.registerLanguage("pf",function(e){var t={cN:"variable",b:/\$[\w\d#@][\w\d_]*/},r={cN:"variable",b:/<(?!\/)/,e:/>/};return{aliases:["pf.conf"],l:/[a-z0-9_<>-]+/,k:{built_in:"block match pass load anchor|5 antispoof|10 set table",keyword:"in out log quick on rdomain inet inet6 proto from port os to routeallow-opts divert-packet divert-reply divert-to flags group icmp-typeicmp6-type label once probability recieved-on rtable prio queuetos tag tagged user keep fragment for os dropaf-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robinsource-hash static-portdup-to reply-to route-toparent bandwidth default min max qlimitblock-policy debug fingerprints hostid limit loginterface optimizationreassemble ruleset-optimization basic none profile skip state-defaultsstate-policy timeoutconst counters persistno modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppysource-track global rule max-src-nodes max-src-states max-src-connmax-src-conn-rate overload flushscrub|5 max-mss min-ttl no-df|10 random-id",literal:"all any no-route self urpf-failed egress|5 unknown"},c:[e.HCM,e.NM,e.QSM,t,r]}}),e.registerLanguage("php",function(e){var t={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},r={cN:"meta",b:/<\?(php)?|\?>/},a={cN:"string",c:[e.BE,r],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},i={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[r]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},r,{cN:"keyword",b:/\$this\b/},t,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",t,e.CBCM,a,i]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},a,i]}}),e.registerLanguage("pony",function(e){var t={keyword:"actor addressof and as be break class compile_error compile_intrinsicconsume continue delegate digestof do else elseif embed end errorfor fun if ifdef in interface is isnt lambda let match new not objector primitive recover repeat return struct then trait try type until use var where while with xor",meta:"iso val tag trn box ref",literal:"this false true"},r={cN:"string",b:'"""',e:'"""',r:10},a={cN:"string",b:'"',e:'"',c:[e.BE]},i={cN:"string",b:"'",e:"'",c:[e.BE],r:0},n={cN:"type",b:"\\b_?[A-Z][\\w]*",r:0},o={b:e.IR+"'",r:0},s={cN:"class",bK:"class actor",e:"$",c:[e.TM,e.CLCM]},l={cN:"function",bK:"new fun",e:"=>",c:[e.TM,{b:/\(/,e:/\)/,c:[n,o,e.CNM,e.CBCM]},{b:/:/,eW:!0,c:[n]},e.CLCM]};return{k:t,c:[s,l,n,r,a,i,o,e.CNM,e.CLCM,e.CBCM]}}),e.registerLanguage("powershell",function(e){var t={b:"`[\\s\\S]",r:0},r={cN:"variable",v:[{b:/\$[\w\d][\w\d_:]*/}]},a={cN:"literal",b:/\$(null|true|false)\b/},i={cN:"string",v:[{b:/"/,e:/"/},{b:/@"/,e:/^"@/}],c:[t,r,{cN:"variable",b:/\$[A-z]/,e:/[^A-z]/}]},n={cN:"string",v:[{b:/'/,e:/'/},{b:/@'/,e:/^'@/}]},o={cN:"doctag",v:[{b:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{b:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]},s=e.inherit(e.C(null,null),{v:[{b:/#/,e:/$/},{b:/<#/,e:/#>/}],c:[o]});return{aliases:["ps"],l:/-?[A-z\.\-]+/,cI:!0,k:{keyword:"if else foreach return function do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch",built_in:"Add-Computer Add-Content Add-History Add-JobTrigger Add-Member Add-PSSnapin Add-Type Checkpoint-Computer Clear-Content Clear-EventLog Clear-History Clear-Host Clear-Item Clear-ItemProperty Clear-Variable Compare-Object Complete-Transaction Connect-PSSession Connect-WSMan Convert-Path ConvertFrom-Csv ConvertFrom-Json ConvertFrom-SecureString ConvertFrom-StringData ConvertTo-Csv ConvertTo-Html ConvertTo-Json ConvertTo-SecureString ConvertTo-Xml Copy-Item Copy-ItemProperty Debug-Process Disable-ComputerRestore Disable-JobTrigger Disable-PSBreakpoint Disable-PSRemoting Disable-PSSessionConfiguration Disable-WSManCredSSP Disconnect-PSSession Disconnect-WSMan Disable-ScheduledJob Enable-ComputerRestore Enable-JobTrigger Enable-PSBreakpoint Enable-PSRemoting Enable-PSSessionConfiguration Enable-ScheduledJob Enable-WSManCredSSP Enter-PSSession Exit-PSSession Export-Alias Export-Clixml Export-Console Export-Counter Export-Csv Export-FormatData Export-ModuleMember Export-PSSession ForEach-Object Format-Custom Format-List Format-Table Format-Wide Get-Acl Get-Alias Get-AuthenticodeSignature Get-ChildItem Get-Command Get-ComputerRestorePoint Get-Content Get-ControlPanelItem Get-Counter Get-Credential Get-Culture Get-Date Get-Event Get-EventLog Get-EventSubscriber Get-ExecutionPolicy Get-FormatData Get-Host Get-HotFix Get-Help Get-History Get-IseSnippet Get-Item Get-ItemProperty Get-Job Get-JobTrigger Get-Location Get-Member Get-Module Get-PfxCertificate Get-Process Get-PSBreakpoint Get-PSCallStack Get-PSDrive Get-PSProvider Get-PSSession Get-PSSessionConfiguration Get-PSSnapin Get-Random Get-ScheduledJob Get-ScheduledJobOption Get-Service Get-TraceSource Get-Transaction Get-TypeData Get-UICulture Get-Unique Get-Variable Get-Verb Get-WinEvent Get-WmiObject Get-WSManCredSSP Get-WSManInstance Group-Object Import-Alias Import-Clixml Import-Counter Import-Csv Import-IseSnippet Import-LocalizedData Import-PSSession Import-Module Invoke-AsWorkflow Invoke-Command Invoke-Expression Invoke-History Invoke-Item Invoke-RestMethod Invoke-WebRequest Invoke-WmiMethod Invoke-WSManAction Join-Path Limit-EventLog Measure-Command Measure-Object Move-Item Move-ItemProperty New-Alias New-Event New-EventLog New-IseSnippet New-Item New-ItemProperty New-JobTrigger New-Object New-Module New-ModuleManifest New-PSDrive New-PSSession New-PSSessionConfigurationFile New-PSSessionOption New-PSTransportOption New-PSWorkflowExecutionOption New-PSWorkflowSession New-ScheduledJobOption New-Service New-TimeSpan New-Variable New-WebServiceProxy New-WinEvent New-WSManInstance New-WSManSessionOption Out-Default Out-File Out-GridView Out-Host Out-Null Out-Printer Out-String Pop-Location Push-Location Read-Host Receive-Job Register-EngineEvent Register-ObjectEvent Register-PSSessionConfiguration Register-ScheduledJob Register-WmiEvent Remove-Computer Remove-Event Remove-EventLog Remove-Item Remove-ItemProperty Remove-Job Remove-JobTrigger Remove-Module Remove-PSBreakpoint Remove-PSDrive Remove-PSSession Remove-PSSnapin Remove-TypeData Remove-Variable Remove-WmiObject Remove-WSManInstance Rename-Computer Rename-Item Rename-ItemProperty Reset-ComputerMachinePassword Resolve-Path Restart-Computer Restart-Service Restore-Computer Resume-Job Resume-Service Save-Help Select-Object Select-String Select-Xml Send-MailMessage Set-Acl Set-Alias Set-AuthenticodeSignature Set-Content Set-Date Set-ExecutionPolicy Set-Item Set-ItemProperty Set-JobTrigger Set-Location Set-PSBreakpoint Set-PSDebug Set-PSSessionConfiguration Set-ScheduledJob Set-ScheduledJobOption Set-Service Set-StrictMode Set-TraceSource Set-Variable Set-WmiInstance Set-WSManInstance Set-WSManQuickConfig Show-Command Show-ControlPanelItem Show-EventLog Sort-Object Split-Path Start-Job Start-Process Start-Service Start-Sleep Start-Transaction Start-Transcript Stop-Computer Stop-Job Stop-Process Stop-Service Stop-Transcript Suspend-Job Suspend-Service Tee-Object Test-ComputerSecureChannel Test-Connection Test-ModuleManifest Test-Path Test-PSSessionConfigurationFile Trace-Command Unblock-File Undo-Transaction Unregister-Event Unregister-PSSessionConfiguration Unregister-ScheduledJob Update-FormatData Update-Help Update-List Update-TypeData Use-Transaction Wait-Event Wait-Job Wait-Process Where-Object Write-Debug Write-Error Write-EventLog Write-Host Write-Output Write-Progress Write-Verbose Write-Warning Add-MDTPersistentDrive Disable-MDTMonitorService Enable-MDTMonitorService Get-MDTDeploymentShareStatistics Get-MDTMonitorData Get-MDTOperatingSystemCatalog Get-MDTPersistentDrive Import-MDTApplication Import-MDTDriver Import-MDTOperatingSystem Import-MDTPackage Import-MDTTaskSequence New-MDTDatabase Remove-MDTMonitorData Remove-MDTPersistentDrive Restore-MDTPersistentDrive Set-MDTMonitorData Test-MDTDeploymentShare Test-MDTMonitorData Update-MDTDatabaseSchema Update-MDTDeploymentShare Update-MDTLinkedDS Update-MDTMedia Update-MDTMedia Add-VamtProductKey Export-VamtData Find-VamtManagedMachine Get-VamtConfirmationId Get-VamtProduct Get-VamtProductKey Import-VamtData Initialize-VamtData Install-VamtConfirmationId Install-VamtProductActivation Install-VamtProductKey Update-VamtProduct", -nomarkup:"-ne -eq -lt -gt -ge -le -not -like -notlike -match -notmatch -contains -notcontains -in -notin -replace"},c:[t,e.NM,i,n,a,r,s]}}),e.registerLanguage("processing",function(e){return{k:{keyword:"BufferedReader PVector PFont PImage PGraphics HashMap boolean byte char color double float int long String Array FloatDict FloatList IntDict IntList JSONArray JSONObject Object StringDict StringList Table TableRow XML false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",literal:"P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI",title:"setup draw",built_in:"displayHeight displayWidth mouseY mouseX mousePressed pmouseX pmouseY key keyCode pixels focused frameCount frameRate height width size createGraphics beginDraw createShape loadShape PShape arc ellipse line point quad rect triangle bezier bezierDetail bezierPoint bezierTangent curve curveDetail curvePoint curveTangent curveTightness shape shapeMode beginContour beginShape bezierVertex curveVertex endContour endShape quadraticVertex vertex ellipseMode noSmooth rectMode smooth strokeCap strokeJoin strokeWeight mouseClicked mouseDragged mouseMoved mousePressed mouseReleased mouseWheel keyPressed keyPressedkeyReleased keyTyped print println save saveFrame day hour millis minute month second year background clear colorMode fill noFill noStroke stroke alpha blue brightness color green hue lerpColor red saturation modelX modelY modelZ screenX screenY screenZ ambient emissive shininess specular add createImage beginCamera camera endCamera frustum ortho perspective printCamera printProjection cursor frameRate noCursor exit loop noLoop popStyle pushStyle redraw binary boolean byte char float hex int str unbinary unhex join match matchAll nf nfc nfp nfs split splitTokens trim append arrayCopy concat expand reverse shorten sort splice subset box sphere sphereDetail createInput createReader loadBytes loadJSONArray loadJSONObject loadStrings loadTable loadXML open parseXML saveTable selectFolder selectInput beginRaw beginRecord createOutput createWriter endRaw endRecord PrintWritersaveBytes saveJSONArray saveJSONObject saveStream saveStrings saveXML selectOutput popMatrix printMatrix pushMatrix resetMatrix rotate rotateX rotateY rotateZ scale shearX shearY translate ambientLight directionalLight lightFalloff lights lightSpecular noLights normal pointLight spotLight image imageMode loadImage noTint requestImage tint texture textureMode textureWrap blend copy filter get loadPixels set updatePixels blendMode loadShader PShaderresetShader shader createFont loadFont text textFont textAlign textLeading textMode textSize textWidth textAscent textDescent abs ceil constrain dist exp floor lerp log mag map max min norm pow round sq sqrt acos asin atan atan2 cos degrees radians sin tan noise noiseDetail noiseSeed random randomGaussian randomSeed"},c:[e.CLCM,e.CBCM,e.ASM,e.QSM,e.CNM]}}),e.registerLanguage("profile",function(e){return{c:[e.CNM,{b:"[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}",e:":",eE:!0},{b:"(ncalls|tottime|cumtime)",e:"$",k:"ncalls tottime|10 cumtime|10 filename",r:10},{b:"function calls",e:"$",c:[e.CNM],r:10},e.ASM,e.QSM,{cN:"string",b:"\\(",e:"\\)$",eB:!0,eE:!0,r:0}]}}),e.registerLanguage("prolog",function(e){var t={b:/[a-z][A-Za-z0-9_]*/,r:0},r={cN:"symbol",v:[{b:/[A-Z][a-zA-Z0-9_]*/},{b:/_[A-Za-z0-9_]*/}],r:0},a={b:/\(/,e:/\)/,r:0},i={b:/\[/,e:/\]/},n={cN:"comment",b:/%/,e:/$/,c:[e.PWM]},o={cN:"string",b:/`/,e:/`/,c:[e.BE]},s={cN:"string",b:/0\'(\\\'|.)/},l={cN:"string",b:/0\'\\s/},c={b:/:-/},d=[t,r,a,c,i,n,e.CBCM,e.QSM,e.ASM,o,s,l,e.CNM];return a.c=d,i.c=d,{c:d.concat([{b:/\.$/}])}}),e.registerLanguage("protobuf",function(e){return{k:{keyword:"package import option optional required repeated group",built_in:"double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes",literal:"true false"},c:[e.QSM,e.NM,e.CLCM,{cN:"class",bK:"message enum service",e:/\{/,i:/\n/,c:[e.inherit(e.TM,{starts:{eW:!0,eE:!0}})]},{cN:"function",bK:"rpc",e:/;/,eE:!0,k:"rpc returns"},{b:/^\s*[A-Z_]+/,e:/\s*=/,eE:!0}]}}),e.registerLanguage("puppet",function(e){var t={keyword:"and case default else elsif false if in import enherits node or true undef unless main settings $string ",literal:"alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted",built_in:"architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version"},r=e.C("#","$"),a="([A-Za-z_]|::)(\\w|::)*",i=e.inherit(e.TM,{b:a}),n={cN:"variable",b:"\\$"+a},o={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/}]};return{aliases:["pp"],c:[r,n,o,{bK:"class",e:"\\{|;",i:/=/,c:[i,r]},{bK:"define",e:/\{/,c:[{cN:"section",b:e.IR,endsParent:!0}]},{b:e.IR+"\\s+\\{",rB:!0,e:/\S/,c:[{cN:"keyword",b:e.IR},{b:/\{/,e:/\}/,k:t,r:0,c:[o,r,{b:"[a-zA-Z_]+\\s*=>",rB:!0,e:"=>",c:[{cN:"attr",b:e.IR}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},n]}],r:0}]}}),e.registerLanguage("purebasic",function(e){var t={cN:"string",b:'(~)?"',e:'"',i:"\\n"},r={cN:"symbol",b:"#[a-zA-Z_]\\w*\\$?"};return{aliases:["pb","pbi"],k:"And As Break CallDebugger Case CompilerCase CompilerDefault CompilerElse CompilerEndIf CompilerEndSelect CompilerError CompilerIf CompilerSelect Continue Data DataSection EndDataSection Debug DebugLevel Default Define Dim DisableASM DisableDebugger DisableExplicit Else ElseIf EnableASM EnableDebugger EnableExplicit End EndEnumeration EndIf EndImport EndInterface EndMacro EndProcedure EndSelect EndStructure EndStructureUnion EndWith Enumeration Extends FakeReturn For Next ForEach ForEver Global Gosub Goto If Import ImportC IncludeBinary IncludeFile IncludePath Interface Macro NewList Not Or ProcedureReturn Protected Prototype PrototypeC Read ReDim Repeat Until Restore Return Select Shared Static Step Structure StructureUnion Swap To Wend While With XIncludeFile XOr Procedure ProcedureC ProcedureCDLL ProcedureDLL Declare DeclareC DeclareCDLL DeclareDLL",c:[e.C(";","$",{r:0}),{cN:"function",b:"\\b(Procedure|Declare)(C|CDLL|DLL)?\\b",e:"\\(",eE:!0,rB:!0,c:[{cN:"keyword",b:"(Procedure|Declare)(C|CDLL|DLL)?",eE:!0},{cN:"type",b:"\\.\\w*"},e.UTM]},t,r]}}),e.registerLanguage("python",function(e){var t={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},r={cN:"meta",b:/^(>>>|\.\.\.) /},a={cN:"subst",b:/\{/,e:/\}/,k:t,i:/#/},i={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[r],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[r,a]},{b:/(fr|rf|f)"""/,e:/"""/,c:[r,a]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[a]},{b:/(fr|rf|f)"/,e:/"/,c:[a]},e.ASM,e.QSM]},n={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},o={cN:"params",b:/\(/,e:/\)/,c:["self",r,n,i]};return a.c=[i,n,r],{aliases:["py","gyp"],k:t,i:/(<\/|->|\?)|=>/,c:[r,n,i,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,o,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}}),e.registerLanguage("q",function(e){var t={keyword:"do while select delete by update from",literal:"0b 1b",built_in:"neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum",type:"`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid"};return{aliases:["k","kdb"],k:t,l:/(`?)[A-Za-z0-9_]+\b/,c:[e.CLCM,e.QSM,e.CNM]}}),e.registerLanguage("qml",function(e){var t={keyword:"in of on if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await import",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Behavior bool color coordinate date double enumeration font geocircle georectangle geoshape int list matrix4x4 parent point quaternion real rect size string url variant vector2d vector3d vector4dPromise"},r="[a-zA-Z_][a-zA-Z0-9\\._]*",a={cN:"keyword",b:"\\bproperty\\b",starts:{cN:"string",e:"(:|=|;|,|//|/\\*|$)",rE:!0}},i={cN:"keyword",b:"\\bsignal\\b",starts:{cN:"string",e:"(\\(|:|=|;|,|//|/\\*|$)",rE:!0}},n={cN:"attribute",b:"\\bid\\s*:",starts:{cN:"string",e:r,rE:!1}},o={b:r+"\\s*:",rB:!0,c:[{cN:"attribute",b:r,e:"\\s*:",eE:!0,r:0}],r:0},s={b:r+"\\s*{",e:"{",rB:!0,r:0,c:[e.inherit(e.TM,{b:r})]};return{aliases:["qt"],cI:!1,k:t,c:[{cN:"meta",b:/^\s*['"]use (strict|asm)['"]/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{b:/\s*[);\]]/,r:0,sL:"xml"}],r:0},i,a,{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM]}],i:/\[|%/},{b:"\\."+e.IR,r:0},n,o,s],i:/#/}}),e.registerLanguage("r",function(e){var t="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{c:[e.HCM,{b:t,l:t,k:{keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},r:0},{cN:"number",b:"0[xX][0-9a-fA-F]+[Li]?\\b",r:0},{cN:"number",b:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",r:0},{cN:"number",b:"\\d+\\.(?!\\d)(?:i\\b)?",r:0},{cN:"number",b:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{b:"`",e:"`",r:0},{cN:"string",c:[e.BE],v:[{b:'"',e:'"'},{b:"'",e:"'"}]}]}}),e.registerLanguage("rib",function(e){return{k:"ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry Hider Hyperboloid Identity Illuminate Imager Interior LightSource MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd TransformPoints Translate TrimCurve WorldBegin WorldEnd",i:"\]$/},{b:/<\//,e:/>/},{b:/^facet /,e:/\}/},{b:"^1\\.\\.(\\d+)$",e:/$/}],i:/./},e.C("^#","$"),s,l,o,{b:/[\w-]+\=([^\s\{\}\[\]\(\)]+)/,r:0,rB:!0,c:[{cN:"attribute",b:/[^=]+/},{b:/=/,eW:!0,r:0,c:[s,l,o,{cN:"literal",b:"\\b("+i.split(" ").join("|")+")\\b"},{b:/("[^"]*"|[^\s\{\}\[\]]+)/}]}]},{cN:"number",b:/\*[0-9a-fA-F]+/},{b:"\\b("+a.split(" ").join("|")+")([\\s[(]|])",rB:!0,c:[{cN:"builtin-name",b:/\w+/}]},{cN:"built_in",v:[{b:"(\\.\\./|/|\\s)(("+n.split(" ").join("|")+");?\\s)+",r:10},{b:/\.\./}]}]}}),e.registerLanguage("rsl",function(e){return{k:{keyword:"float color point normal vector matrix while for if do return else break extern continue",built_in:"abs acos ambient area asin atan atmosphere attribute calculatenormal ceil cellnoise clamp comp concat cos degrees depth Deriv diffuse distance Du Dv environment exp faceforward filterstep floor format fresnel incident length lightsource log match max min mod noise normalize ntransform opposite option phong pnoise pow printf ptlined radians random reflect refract renderinfo round setcomp setxcomp setycomp setzcomp shadow sign sin smoothstep specular specularbrdf spline sqrt step tan texture textureinfo trace transform vtransform xcomp ycomp zcomp"},i:""}]}}),e.registerLanguage("scala",function(e){var t={cN:"meta",b:"@[A-Za-z]+"},r={cN:"subst",v:[{b:"\\$[A-Za-z0-9_]+"},{b:"\\${",e:"}"}]},a={cN:"string",v:[{b:'"',e:'"',i:"\\n",c:[e.BE]},{b:'"""',e:'"""',r:10},{b:'[a-z]+"',e:'"',i:"\\n",c:[e.BE,r]},{cN:"string",b:'[a-z]+"""',e:'"""',c:[r],r:10}]},i={cN:"symbol",b:"'\\w[\\w\\d_]*(?!')"},n={cN:"type",b:"\\b[A-Z][A-Za-z0-9_]*",r:0},o={cN:"title",b:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,r:0},s={cN:"class",bK:"class object trait type",e:/[:={\[\n;]/,eE:!0,c:[{bK:"extends with",r:10},{b:/\[/,e:/\]/,eB:!0,eE:!0,r:0,c:[n]},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,r:0,c:[n]},o]},l={cN:"function",bK:"def",e:/[:={\[(\n;]/,eE:!0,c:[o]};return{k:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},c:[e.CLCM,e.CBCM,a,i,n,l,s,e.CNM,t]}}),e.registerLanguage("scheme",function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",r="(\\-|\\+)?\\d+([./]\\d+)?",a=r+"[+\\-]"+r+"i",i={"builtin-name":"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"},n={cN:"meta",b:"^#!",e:"$"},o={cN:"literal",b:"(#t|#f|#\\\\"+t+"|#\\\\.)"},s={cN:"number",v:[{b:r,r:0},{b:a,r:0},{b:"#b[0-1]+(/[0-1]+)?"},{b:"#o[0-7]+(/[0-7]+)?"},{b:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},l=e.QSM,c=[e.C(";","$",{r:0}),e.C("#\\|","\\|#")],d={b:t,r:0},p={cN:"symbol",b:"'"+t},m={eW:!0,r:0},u={v:[{b:/'/},{b:"`"}],c:[{b:"\\(",e:"\\)",c:["self",o,l,s,d,p]}]},b={cN:"name",b:t,l:t,k:i},g={b:/lambda/,eW:!0,rB:!0,c:[b,{b:/\(/,e:/\)/,endsParent:!0,c:[d]}]},f={v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}],c:[g,b,m]};return m.c=[o,s,l,d,p,u,f].concat(c),{i:/\S/,c:[n,s,l,p,u,f].concat(c)}}),e.registerLanguage("scilab",function(e){var t=[e.CNM,{cN:"string",b:"'|\"",e:"'|\"",c:[e.BE,{b:"''"}]}];return{aliases:["sci"],l:/%?\w+/,k:{keyword:"abort break case clear catch continue do elseif else endfunction end for function global if pause return resume select try then while",literal:"%f %F %t %T %pi %eps %inf %nan %e %i %z %s",built_in:"abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp error exec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isempty isinfisnan isvector lasterror length load linspace list listfiles log10 log2 log max min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand real round sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tan type typename warning zeros matrix"},i:'("|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function",e:"$",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)"}]},{b:"[a-zA-Z_][a-zA-Z_0-9]*('+[\\.']*|[\\.']+)",e:"",r:0},{b:"\\[",e:"\\]'*[\\.']*",r:0,c:t},e.C("//","$")].concat(t)}}),e.registerLanguage("scss",function(e){var t="[a-zA-Z-][a-zA-Z0-9_-]*",r={cN:"variable",b:"(\\$"+t+")\\b"},a={cN:"number",b:"#[0-9A-Fa-f]+"};({cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:!0,i:"[^\\s]",starts:{eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"meta",b:"!important"}]}});return{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,{cN:"selector-id",b:"\\#[A-Za-z0-9_-]+",r:0},{cN:"selector-class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"selector-attr",b:"\\[",e:"\\]",i:"$"},{cN:"selector-tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",r:0},{b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},r,{cN:"attribute",b:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b", -i:"[^\\s]"},{b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{b:":",e:";",c:[r,a,e.CSSNM,e.QSM,e.ASM,{cN:"meta",b:"!important"}]},{b:"@",e:"[{;]",k:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",c:[r,e.QSM,e.ASM,a,e.CSSNM,{b:"\\s[A-Za-z0-9_.-]+",r:0}]}]}}),e.registerLanguage("shell",function(e){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}}),e.registerLanguage("smali",function(e){var t=["add","and","cmp","cmpg","cmpl","const","div","double","float","goto","if","int","long","move","mul","neg","new","nop","not","or","rem","return","shl","shr","sput","sub","throw","ushr","xor"],r=["aget","aput","array","check","execute","fill","filled","goto/16","goto/32","iget","instance","invoke","iput","monitor","packed","sget","sparse"],a=["transient","constructor","abstract","final","synthetic","public","private","protected","static","bridge","system"];return{aliases:["smali"],c:[{cN:"string",b:'"',e:'"',r:0},e.C("#","$",{r:0}),{cN:"keyword",v:[{b:"\\s*\\.end\\s[a-zA-Z0-9]*"},{b:"^[ ]*\\.[a-zA-Z]*",r:0},{b:"\\s:[a-zA-Z_0-9]*",r:0},{b:"\\s("+a.join("|")+")"}]},{cN:"built_in",v:[{b:"\\s("+t.join("|")+")\\s"},{b:"\\s("+t.join("|")+")((\\-|/)[a-zA-Z0-9]+)+\\s",r:10},{b:"\\s("+r.join("|")+")((\\-|/)[a-zA-Z0-9]+)*\\s",r:10}]},{cN:"class",b:"L[^(;:\n]*;",r:0},{b:"[vp][0-9]+"}]}}),e.registerLanguage("smalltalk",function(e){var t="[a-z][a-zA-Z0-9_]*",r={cN:"string",b:"\\$.{1}"},a={cN:"symbol",b:"#"+e.UIR};return{aliases:["st"],k:"self super nil true false thisContext",c:[e.C('"','"'),e.ASM,{cN:"type",b:"\\b[A-Z][A-Za-z0-9_]*",r:0},{b:t+":",r:0},e.CNM,a,r,{b:"\\|[ ]*"+t+"([ ]+"+t+")*[ ]*\\|",rB:!0,e:/\|/,i:/\S/,c:[{b:"(\\|[ ]*)?"+t}]},{b:"\\#\\(",e:"\\)",c:[e.ASM,r,e.CNM,a]}]}}),e.registerLanguage("sml",function(e){return{aliases:["ml"],k:{keyword:"abstype and andalso as case datatype do else end eqtype exception fn fun functor handle if in include infix infixr let local nonfix of op open orelse raise rec sharing sig signature struct structure then type val with withtype where while",built_in:"array bool char exn int list option order real ref string substring vector unit word",literal:"true false NONE SOME LESS EQUAL GREATER nil"},i:/\/\/|>>/,l:"[a-z_]\\w*!?",c:[{cN:"literal",b:/\[(\|\|)?\]|\(\)/,r:0},e.C("\\(\\*","\\*\\)",{c:["self"]}),{cN:"symbol",b:"'[A-Za-z_](?!')[\\w']*"},{cN:"type",b:"`[A-Z][\\w']*"},{cN:"type",b:"\\b[A-Z][\\w']*",r:0},{b:"[a-z_]\\w*'[\\w']*"},e.inherit(e.ASM,{cN:"string",r:0}),e.inherit(e.QSM,{i:null}),{cN:"number",b:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",r:0},{b:/[-=]>/}]}}),e.registerLanguage("sqf",function(e){var t=e.getLanguage("cpp").exports,r={cN:"variable",b:/\b_+[a-zA-Z_]\w*/},a={cN:"title",b:/[a-zA-Z][a-zA-Z0-9]+_fnc_\w*/},i={cN:"string",v:[{b:'"',e:'"',c:[{b:'""',r:0}]},{b:"'",e:"'",c:[{b:"''",r:0}]}]};return{aliases:["sqf"],cI:!0,k:{keyword:"case catch default do else exit exitWith for forEach from if switch then throw to try waitUntil while with",built_in:"abs accTime acos action actionIDs actionKeys actionKeysImages actionKeysNames actionKeysNamesArray actionName actionParams activateAddons activatedAddons activateKey add3DENConnection add3DENEventHandler add3DENLayer addAction addBackpack addBackpackCargo addBackpackCargoGlobal addBackpackGlobal addCamShake addCuratorAddons addCuratorCameraArea addCuratorEditableObjects addCuratorEditingArea addCuratorPoints addEditorObject addEventHandler addGoggles addGroupIcon addHandgunItem addHeadgear addItem addItemCargo addItemCargoGlobal addItemPool addItemToBackpack addItemToUniform addItemToVest addLiveStats addMagazine addMagazineAmmoCargo addMagazineCargo addMagazineCargoGlobal addMagazineGlobal addMagazinePool addMagazines addMagazineTurret addMenu addMenuItem addMissionEventHandler addMPEventHandler addMusicEventHandler addOwnedMine addPlayerScores addPrimaryWeaponItem addPublicVariableEventHandler addRating addResources addScore addScoreSide addSecondaryWeaponItem addSwitchableUnit addTeamMember addToRemainsCollector addUniform addVehicle addVest addWaypoint addWeapon addWeaponCargo addWeaponCargoGlobal addWeaponGlobal addWeaponItem addWeaponPool addWeaponTurret agent agents AGLToASL aimedAtTarget aimPos airDensityRTD airportSide AISFinishHeal alive all3DENEntities allControls allCurators allCutLayers allDead allDeadMen allDisplays allGroups allMapMarkers allMines allMissionObjects allow3DMode allowCrewInImmobile allowCuratorLogicIgnoreAreas allowDamage allowDammage allowFileOperations allowFleeing allowGetIn allowSprint allPlayers allSites allTurrets allUnits allUnitsUAV allVariables ammo and animate animateDoor animateSource animationNames animationPhase animationSourcePhase animationState append apply armoryPoints arrayIntersect asin ASLToAGL ASLToATL assert assignAsCargo assignAsCargoIndex assignAsCommander assignAsDriver assignAsGunner assignAsTurret assignCurator assignedCargo assignedCommander assignedDriver assignedGunner assignedItems assignedTarget assignedTeam assignedVehicle assignedVehicleRole assignItem assignTeam assignToAirport atan atan2 atg ATLToASL attachedObject attachedObjects attachedTo attachObject attachTo attackEnabled backpack backpackCargo backpackContainer backpackItems backpackMagazines backpackSpaceFor behaviour benchmark binocular blufor boundingBox boundingBoxReal boundingCenter breakOut breakTo briefingName buildingExit buildingPos buttonAction buttonSetAction cadetMode call callExtension camCommand camCommit camCommitPrepared camCommitted camConstuctionSetParams camCreate camDestroy cameraEffect cameraEffectEnableHUD cameraInterest cameraOn cameraView campaignConfigFile camPreload camPreloaded camPrepareBank camPrepareDir camPrepareDive camPrepareFocus camPrepareFov camPrepareFovRange camPreparePos camPrepareRelPos camPrepareTarget camSetBank camSetDir camSetDive camSetFocus camSetFov camSetFovRange camSetPos camSetRelPos camSetTarget camTarget camUseNVG canAdd canAddItemToBackpack canAddItemToUniform canAddItemToVest cancelSimpleTaskDestination canFire canMove canSlingLoad canStand canSuspend canUnloadInCombat canVehicleCargo captive captiveNum cbChecked cbSetChecked ceil channelEnabled cheatsEnabled checkAIFeature checkVisibility civilian className clearAllItemsFromBackpack clearBackpackCargo clearBackpackCargoGlobal clearGroupIcons clearItemCargo clearItemCargoGlobal clearItemPool clearMagazineCargo clearMagazineCargoGlobal clearMagazinePool clearOverlay clearRadio clearWeaponCargo clearWeaponCargoGlobal clearWeaponPool clientOwner closeDialog closeDisplay closeOverlay collapseObjectTree collect3DENHistory combatMode commandArtilleryFire commandChat commander commandFire commandFollow commandFSM commandGetOut commandingMenu commandMove commandRadio commandStop commandSuppressiveFire commandTarget commandWatch comment commitOverlay compile compileFinal completedFSM composeText configClasses configFile configHierarchy configName configNull configProperties configSourceAddonList configSourceMod configSourceModList connectTerminalToUAV controlNull controlsGroupCtrl copyFromClipboard copyToClipboard copyWaypoints cos count countEnemy countFriendly countSide countType countUnknown create3DENComposition create3DENEntity createAgent createCenter createDialog createDiaryLink createDiaryRecord createDiarySubject createDisplay createGearDialog createGroup createGuardedPoint createLocation createMarker createMarkerLocal createMenu createMine createMissionDisplay createMPCampaignDisplay createSimpleObject createSimpleTask createSite createSoundSource createTask createTeam createTrigger createUnit createVehicle createVehicleCrew createVehicleLocal crew ctrlActivate ctrlAddEventHandler ctrlAngle ctrlAutoScrollDelay ctrlAutoScrollRewind ctrlAutoScrollSpeed ctrlChecked ctrlClassName ctrlCommit ctrlCommitted ctrlCreate ctrlDelete ctrlEnable ctrlEnabled ctrlFade ctrlHTMLLoaded ctrlIDC ctrlIDD ctrlMapAnimAdd ctrlMapAnimClear ctrlMapAnimCommit ctrlMapAnimDone ctrlMapCursor ctrlMapMouseOver ctrlMapScale ctrlMapScreenToWorld ctrlMapWorldToScreen ctrlModel ctrlModelDirAndUp ctrlModelScale ctrlParent ctrlParentControlsGroup ctrlPosition ctrlRemoveAllEventHandlers ctrlRemoveEventHandler ctrlScale ctrlSetActiveColor ctrlSetAngle ctrlSetAutoScrollDelay ctrlSetAutoScrollRewind ctrlSetAutoScrollSpeed ctrlSetBackgroundColor ctrlSetChecked ctrlSetEventHandler ctrlSetFade ctrlSetFocus ctrlSetFont ctrlSetFontH1 ctrlSetFontH1B ctrlSetFontH2 ctrlSetFontH2B ctrlSetFontH3 ctrlSetFontH3B ctrlSetFontH4 ctrlSetFontH4B ctrlSetFontH5 ctrlSetFontH5B ctrlSetFontH6 ctrlSetFontH6B ctrlSetFontHeight ctrlSetFontHeightH1 ctrlSetFontHeightH2 ctrlSetFontHeightH3 ctrlSetFontHeightH4 ctrlSetFontHeightH5 ctrlSetFontHeightH6 ctrlSetFontHeightSecondary ctrlSetFontP ctrlSetFontPB ctrlSetFontSecondary ctrlSetForegroundColor ctrlSetModel ctrlSetModelDirAndUp ctrlSetModelScale ctrlSetPosition ctrlSetScale ctrlSetStructuredText ctrlSetText ctrlSetTextColor ctrlSetTooltip ctrlSetTooltipColorBox ctrlSetTooltipColorShade ctrlSetTooltipColorText ctrlShow ctrlShown ctrlText ctrlTextHeight ctrlType ctrlVisible curatorAddons curatorCamera curatorCameraArea curatorCameraAreaCeiling curatorCoef curatorEditableObjects curatorEditingArea curatorEditingAreaType curatorMouseOver curatorPoints curatorRegisteredObjects curatorSelected curatorWaypointCost current3DENOperation currentChannel currentCommand currentMagazine currentMagazineDetail currentMagazineDetailTurret currentMagazineTurret currentMuzzle currentNamespace currentTask currentTasks currentThrowable currentVisionMode currentWaypoint currentWeapon currentWeaponMode currentWeaponTurret currentZeroing cursorObject cursorTarget customChat customRadio cutFadeOut cutObj cutRsc cutText damage date dateToNumber daytime deActivateKey debriefingText debugFSM debugLog deg delete3DENEntities deleteAt deleteCenter deleteCollection deleteEditorObject deleteGroup deleteIdentity deleteLocation deleteMarker deleteMarkerLocal deleteRange deleteResources deleteSite deleteStatus deleteTeam deleteVehicle deleteVehicleCrew deleteWaypoint detach detectedMines diag_activeMissionFSMs diag_activeScripts diag_activeSQFScripts diag_activeSQSScripts diag_captureFrame diag_captureSlowFrame diag_codePerformance diag_drawMode diag_enable diag_enabled diag_fps diag_fpsMin diag_frameNo diag_list diag_log diag_logSlowFrame diag_mergeConfigFile diag_recordTurretLimits diag_tickTime diag_toggle dialog diarySubjectExists didJIP didJIPOwner difficulty difficultyEnabled difficultyEnabledRTD difficultyOption direction directSay disableAI disableCollisionWith disableConversation disableDebriefingStats disableNVGEquipment disableRemoteSensors disableSerialization disableTIEquipment disableUAVConnectability disableUserInput displayAddEventHandler displayCtrl displayNull displayParent displayRemoveAllEventHandlers displayRemoveEventHandler displaySetEventHandler dissolveTeam distance distance2D distanceSqr distributionRegion do3DENAction doArtilleryFire doFire doFollow doFSM doGetOut doMove doorPhase doStop doSuppressiveFire doTarget doWatch drawArrow drawEllipse drawIcon drawIcon3D drawLine drawLine3D drawLink drawLocation drawPolygon drawRectangle driver drop east echo edit3DENMissionAttributes editObject editorSetEventHandler effectiveCommander emptyPositions enableAI enableAIFeature enableAimPrecision enableAttack enableAudioFeature enableCamShake enableCaustics enableChannel enableCollisionWith enableCopilot enableDebriefingStats enableDiagLegend enableEndDialog enableEngineArtillery enableEnvironment enableFatigue enableGunLights enableIRLasers enableMimics enablePersonTurret enableRadio enableReload enableRopeAttach enableSatNormalOnDetail enableSaving enableSentences enableSimulation enableSimulationGlobal enableStamina enableTeamSwitch enableUAVConnectability enableUAVWaypoints enableVehicleCargo endLoadingScreen endMission engineOn enginesIsOnRTD enginesRpmRTD enginesTorqueRTD entities estimatedEndServerTime estimatedTimeLeft evalObjectArgument everyBackpack everyContainer exec execEditorScript execFSM execVM exp expectedDestination exportJIPMessages eyeDirection eyePos face faction fadeMusic fadeRadio fadeSound fadeSpeech failMission fillWeaponsFromPool find findCover findDisplay findEditorObject findEmptyPosition findEmptyPositionReady findNearestEnemy finishMissionInit finite fire fireAtTarget firstBackpack flag flagOwner flagSide flagTexture fleeing floor flyInHeight flyInHeightASL fog fogForecast fogParams forceAddUniform forcedMap forceEnd forceMap forceRespawn forceSpeed forceWalk forceWeaponFire forceWeatherChange forEachMember forEachMemberAgent forEachMemberTeam format formation formationDirection formationLeader formationMembers formationPosition formationTask formatText formLeader freeLook fromEditor fuel fullCrew gearIDCAmmoCount gearSlotAmmoCount gearSlotData get3DENActionState get3DENAttribute get3DENCamera get3DENConnections get3DENEntity get3DENEntityID get3DENGrid get3DENIconsVisible get3DENLayerEntities get3DENLinesVisible get3DENMissionAttribute get3DENMouseOver get3DENSelected getAimingCoef getAllHitPointsDamage getAllOwnedMines getAmmoCargo getAnimAimPrecision getAnimSpeedCoef getArray getArtilleryAmmo getArtilleryComputerSettings getArtilleryETA getAssignedCuratorLogic getAssignedCuratorUnit getBackpackCargo getBleedingRemaining getBurningValue getCameraViewDirection getCargoIndex getCenterOfMass getClientState getClientStateNumber getConnectedUAV getCustomAimingCoef getDammage getDescription getDir getDirVisual getDLCs getEditorCamera getEditorMode getEditorObjectScope getElevationOffset getFatigue getFriend getFSMVariable getFuelCargo getGroupIcon getGroupIconParams getGroupIcons getHideFrom getHit getHitIndex getHitPointDamage getItemCargo getMagazineCargo getMarkerColor getMarkerPos getMarkerSize getMarkerType getMass getMissionConfig getMissionConfigValue getMissionDLCs getMissionLayerEntities getModelInfo getMousePosition getNumber getObjectArgument getObjectChildren getObjectDLC getObjectMaterials getObjectProxy getObjectTextures getObjectType getObjectViewDistance getOxygenRemaining getPersonUsedDLCs getPilotCameraDirection getPilotCameraPosition getPilotCameraRotation getPilotCameraTarget getPlayerChannel getPlayerScores getPlayerUID getPos getPosASL getPosASLVisual getPosASLW getPosATL getPosATLVisual getPosVisual getPosWorld getRelDir getRelPos getRemoteSensorsDisabled getRepairCargo getResolution getShadowDistance getShotParents getSlingLoad getSpeed getStamina getStatValue getSuppression getTerrainHeightASL getText getUnitLoadout getUnitTrait getVariable getVehicleCargo getWeaponCargo getWeaponSway getWPPos glanceAt globalChat globalRadio goggles goto group groupChat groupFromNetId groupIconSelectable groupIconsVisible groupId groupOwner groupRadio groupSelectedUnits groupSelectUnit grpNull gunner gusts halt handgunItems handgunMagazine handgunWeapon handsHit hasInterface hasPilotCamera hasWeapon hcAllGroups hcGroupParams hcLeader hcRemoveAllGroups hcRemoveGroup hcSelected hcSelectGroup hcSetGroup hcShowBar hcShownBar headgear hideBody hideObject hideObjectGlobal hideSelection hint hintC hintCadet hintSilent hmd hostMission htmlLoad HUDMovementLevels humidity image importAllGroups importance in inArea inAreaArray incapacitatedState independent inflame inflamed inGameUISetEventHandler inheritsFrom initAmbientLife inPolygon inputAction inRangeOfArtillery insertEditorObject intersect is3DEN is3DENMultiplayer isAbleToBreathe isAgent isArray isAutoHoverOn isAutonomous isAutotest isBleeding isBurning isClass isCollisionLightOn isCopilotEnabled isDedicated isDLCAvailable isEngineOn isEqualTo isEqualType isEqualTypeAll isEqualTypeAny isEqualTypeArray isEqualTypeParams isFilePatchingEnabled isFlashlightOn isFlatEmpty isForcedWalk isFormationLeader isHidden isInRemainsCollector isInstructorFigureEnabled isIRLaserOn isKeyActive isKindOf isLightOn isLocalized isManualFire isMarkedForCollection isMultiplayer isMultiplayerSolo isNil isNull isNumber isObjectHidden isObjectRTD isOnRoad isPipEnabled isPlayer isRealTime isRemoteExecuted isRemoteExecutedJIP isServer isShowing3DIcons isSprintAllowed isStaminaEnabled isSteamMission isStreamFriendlyUIEnabled isText isTouchingGround isTurnedOut isTutHintsEnabled isUAVConnectable isUAVConnected isUniformAllowed isVehicleCargo isWalking isWeaponDeployed isWeaponRested itemCargo items itemsWithMagazines join joinAs joinAsSilent joinSilent joinString kbAddDatabase kbAddDatabaseTargets kbAddTopic kbHasTopic kbReact kbRemoveTopic kbTell kbWasSaid keyImage keyName knowsAbout land landAt landResult language laserTarget lbAdd lbClear lbColor lbCurSel lbData lbDelete lbIsSelected lbPicture lbSelection lbSetColor lbSetCurSel lbSetData lbSetPicture lbSetPictureColor lbSetPictureColorDisabled lbSetPictureColorSelected lbSetSelectColor lbSetSelectColorRight lbSetSelected lbSetTooltip lbSetValue lbSize lbSort lbSortByValue lbText lbValue leader leaderboardDeInit leaderboardGetRows leaderboardInit leaveVehicle libraryCredits libraryDisclaimers lifeState lightAttachObject lightDetachObject lightIsOn lightnings limitSpeed linearConversion lineBreak lineIntersects lineIntersectsObjs lineIntersectsSurfaces lineIntersectsWith linkItem list listObjects ln lnbAddArray lnbAddColumn lnbAddRow lnbClear lnbColor lnbCurSelRow lnbData lnbDeleteColumn lnbDeleteRow lnbGetColumnsPosition lnbPicture lnbSetColor lnbSetColumnsPos lnbSetCurSelRow lnbSetData lnbSetPicture lnbSetText lnbSetValue lnbSize lnbText lnbValue load loadAbs loadBackpack loadFile loadGame loadIdentity loadMagazine loadOverlay loadStatus loadUniform loadVest local localize locationNull locationPosition lock lockCameraTo lockCargo lockDriver locked lockedCargo lockedDriver lockedTurret lockIdentity lockTurret lockWP log logEntities logNetwork logNetworkTerminate lookAt lookAtPos magazineCargo magazines magazinesAllTurrets magazinesAmmo magazinesAmmoCargo magazinesAmmoFull magazinesDetail magazinesDetailBackpack magazinesDetailUniform magazinesDetailVest magazinesTurret magazineTurretAmmo mapAnimAdd mapAnimClear mapAnimCommit mapAnimDone mapCenterOnCamera mapGridPosition markAsFinishedOnSteam markerAlpha markerBrush markerColor markerDir markerPos markerShape markerSize markerText markerType max members menuAction menuAdd menuChecked menuClear menuCollapse menuData menuDelete menuEnable menuEnabled menuExpand menuHover menuPicture menuSetAction menuSetCheck menuSetData menuSetPicture menuSetValue menuShortcut menuShortcutText menuSize menuSort menuText menuURL menuValue min mineActive mineDetectedBy missionConfigFile missionDifficulty missionName missionNamespace missionStart missionVersion mod modelToWorld modelToWorldVisual modParams moonIntensity moonPhase morale move move3DENCamera moveInAny moveInCargo moveInCommander moveInDriver moveInGunner moveInTurret moveObjectToEnd moveOut moveTime moveTo moveToCompleted moveToFailed musicVolume name nameSound nearEntities nearestBuilding nearestLocation nearestLocations nearestLocationWithDubbing nearestObject nearestObjects nearestTerrainObjects nearObjects nearObjectsReady nearRoads nearSupplies nearTargets needReload netId netObjNull newOverlay nextMenuItemIndex nextWeatherChange nMenuItems not numberToDate objectCurators objectFromNetId objectParent objNull objStatus onBriefingGroup onBriefingNotes onBriefingPlan onBriefingTeamSwitch onCommandModeChanged onDoubleClick onEachFrame onGroupIconClick onGroupIconOverEnter onGroupIconOverLeave onHCGroupSelectionChanged onMapSingleClick onPlayerConnected onPlayerDisconnected onPreloadFinished onPreloadStarted onShowNewObject onTeamSwitch openCuratorInterface openDLCPage openMap openYoutubeVideo opfor or orderGetIn overcast overcastForecast owner param params parseNumber parseText parsingNamespace particlesQuality pi pickWeaponPool pitch pixelGrid pixelGridBase pixelGridNoUIScale pixelH pixelW playableSlotsNumber playableUnits playAction playActionNow player playerRespawnTime playerSide playersNumber playGesture playMission playMove playMoveNow playMusic playScriptedMission playSound playSound3D position positionCameraToWorld posScreenToWorld posWorldToScreen ppEffectAdjust ppEffectCommit ppEffectCommitted ppEffectCreate ppEffectDestroy ppEffectEnable ppEffectEnabled ppEffectForceInNVG precision preloadCamera preloadObject preloadSound preloadTitleObj preloadTitleRsc preprocessFile preprocessFileLineNumbers primaryWeapon primaryWeaponItems primaryWeaponMagazine priority private processDiaryLink productVersion profileName profileNamespace profileNameSteam progressLoadingScreen progressPosition progressSetPosition publicVariable publicVariableClient publicVariableServer pushBack pushBackUnique putWeaponPool queryItemsPool queryMagazinePool queryWeaponPool rad radioChannelAdd radioChannelCreate radioChannelRemove radioChannelSetCallSign radioChannelSetLabel radioVolume rain rainbow random rank rankId rating rectangular registeredTasks registerTask reload reloadEnabled remoteControl remoteExec remoteExecCall remove3DENConnection remove3DENEventHandler remove3DENLayer removeAction removeAll3DENEventHandlers removeAllActions removeAllAssignedItems removeAllContainers removeAllCuratorAddons removeAllCuratorCameraAreas removeAllCuratorEditingAreas removeAllEventHandlers removeAllHandgunItems removeAllItems removeAllItemsWithMagazines removeAllMissionEventHandlers removeAllMPEventHandlers removeAllMusicEventHandlers removeAllOwnedMines removeAllPrimaryWeaponItems removeAllWeapons removeBackpack removeBackpackGlobal removeCuratorAddons removeCuratorCameraArea removeCuratorEditableObjects removeCuratorEditingArea removeDrawIcon removeDrawLinks removeEventHandler removeFromRemainsCollector removeGoggles removeGroupIcon removeHandgunItem removeHeadgear removeItem removeItemFromBackpack removeItemFromUniform removeItemFromVest removeItems removeMagazine removeMagazineGlobal removeMagazines removeMagazinesTurret removeMagazineTurret removeMenuItem removeMissionEventHandler removeMPEventHandler removeMusicEventHandler removeOwnedMine removePrimaryWeaponItem removeSecondaryWeaponItem removeSimpleTask removeSwitchableUnit removeTeamMember removeUniform removeVest removeWeapon removeWeaponGlobal removeWeaponTurret requiredVersion resetCamShake resetSubgroupDirection resistance resize resources respawnVehicle restartEditorCamera reveal revealMine reverse reversedMouseY roadAt roadsConnectedTo roleDescription ropeAttachedObjects ropeAttachedTo ropeAttachEnabled ropeAttachTo ropeCreate ropeCut ropeDestroy ropeDetach ropeEndPosition ropeLength ropes ropeUnwind ropeUnwound rotorsForcesRTD rotorsRpmRTD round runInitScript safeZoneH safeZoneW safeZoneWAbs safeZoneX safeZoneXAbs safeZoneY save3DENInventory saveGame saveIdentity saveJoysticks saveOverlay saveProfileNamespace saveStatus saveVar savingEnabled say say2D say3D scopeName score scoreSide screenshot screenToWorld scriptDone scriptName scriptNull scudState secondaryWeapon secondaryWeaponItems secondaryWeaponMagazine select selectBestPlaces selectDiarySubject selectedEditorObjects selectEditorObject selectionNames selectionPosition selectLeader selectMax selectMin selectNoPlayer selectPlayer selectRandom selectWeapon selectWeaponTurret sendAUMessage sendSimpleCommand sendTask sendTaskResult sendUDPMessage serverCommand serverCommandAvailable serverCommandExecutable serverName serverTime set set3DENAttribute set3DENAttributes set3DENGrid set3DENIconsVisible set3DENLayer set3DENLinesVisible set3DENMissionAttributes set3DENModelsVisible set3DENObjectType set3DENSelected setAccTime setAirportSide setAmmo setAmmoCargo setAnimSpeedCoef setAperture setApertureNew setArmoryPoints setAttributes setAutonomous setBehaviour setBleedingRemaining setCameraInterest setCamShakeDefParams setCamShakeParams setCamUseTi setCaptive setCenterOfMass setCollisionLight setCombatMode setCompassOscillation setCuratorCameraAreaCeiling setCuratorCoef setCuratorEditingAreaType setCuratorWaypointCost setCurrentChannel setCurrentTask setCurrentWaypoint setCustomAimCoef setDamage setDammage setDate setDebriefingText setDefaultCamera setDestination setDetailMapBlendPars setDir setDirection setDrawIcon setDropInterval setEditorMode setEditorObjectScope setEffectCondition setFace setFaceAnimation setFatigue setFlagOwner setFlagSide setFlagTexture setFog setFormation setFormationTask setFormDir setFriend setFromEditor setFSMVariable setFuel setFuelCargo setGroupIcon setGroupIconParams setGroupIconsSelectable setGroupIconsVisible setGroupId setGroupIdGlobal setGroupOwner setGusts setHideBehind setHit setHitIndex setHitPointDamage setHorizonParallaxCoef setHUDMovementLevels setIdentity setImportance setLeader setLightAmbient setLightAttenuation setLightBrightness setLightColor setLightDayLight setLightFlareMaxDistance setLightFlareSize setLightIntensity setLightnings setLightUseFlare setLocalWindParams setMagazineTurretAmmo setMarkerAlpha setMarkerAlphaLocal setMarkerBrush setMarkerBrushLocal setMarkerColor setMarkerColorLocal setMarkerDir setMarkerDirLocal setMarkerPos setMarkerPosLocal setMarkerShape setMarkerShapeLocal setMarkerSize setMarkerSizeLocal setMarkerText setMarkerTextLocal setMarkerType setMarkerTypeLocal setMass setMimic setMousePosition setMusicEffect setMusicEventHandler setName setNameSound setObjectArguments setObjectMaterial setObjectMaterialGlobal setObjectProxy setObjectTexture setObjectTextureGlobal setObjectViewDistance setOvercast setOwner setOxygenRemaining setParticleCircle setParticleClass setParticleFire setParticleParams setParticleRandom setPilotCameraDirection setPilotCameraRotation setPilotCameraTarget setPilotLight setPiPEffect setPitch setPlayable setPlayerRespawnTime setPos setPosASL setPosASL2 setPosASLW setPosATL setPosition setPosWorld setRadioMsg setRain setRainbow setRandomLip setRank setRectangular setRepairCargo setShadowDistance setShotParents setSide setSimpleTaskAlwaysVisible setSimpleTaskCustomData setSimpleTaskDescription setSimpleTaskDestination setSimpleTaskTarget setSimpleTaskType setSimulWeatherLayers setSize setSkill setSlingLoad setSoundEffect setSpeaker setSpeech setSpeedMode setStamina setStaminaScheme setStatValue setSuppression setSystemOfUnits setTargetAge setTaskResult setTaskState setTerrainGrid setText setTimeMultiplier setTitleEffect setTriggerActivation setTriggerArea setTriggerStatements setTriggerText setTriggerTimeout setTriggerType setType setUnconscious setUnitAbility setUnitLoadout setUnitPos setUnitPosWeak setUnitRank setUnitRecoilCoefficient setUnitTrait setUnloadInCombat setUserActionText setVariable setVectorDir setVectorDirAndUp setVectorUp setVehicleAmmo setVehicleAmmoDef setVehicleArmor setVehicleCargo setVehicleId setVehicleLock setVehiclePosition setVehicleTiPars setVehicleVarName setVelocity setVelocityTransformation setViewDistance setVisibleIfTreeCollapsed setWaves setWaypointBehaviour setWaypointCombatMode setWaypointCompletionRadius setWaypointDescription setWaypointForceBehaviour setWaypointFormation setWaypointHousePosition setWaypointLoiterRadius setWaypointLoiterType setWaypointName setWaypointPosition setWaypointScript setWaypointSpeed setWaypointStatements setWaypointTimeout setWaypointType setWaypointVisible setWeaponReloadingTime setWind setWindDir setWindForce setWindStr setWPPos show3DIcons showChat showCinemaBorder showCommandingMenu showCompass showCuratorCompass showGPS showHUD showLegend showMap shownArtilleryComputer shownChat shownCompass shownCuratorCompass showNewEditorObject shownGPS shownHUD shownMap shownPad shownRadio shownScoretable shownUAVFeed shownWarrant shownWatch showPad showRadio showScoretable showSubtitles showUAVFeed showWarrant showWatch showWaypoint showWaypoints side sideAmbientLife sideChat sideEmpty sideEnemy sideFriendly sideLogic sideRadio sideUnknown simpleTasks simulationEnabled simulCloudDensity simulCloudOcclusion simulInClouds simulWeatherSync sin size sizeOf skill skillFinal skipTime sleep sliderPosition sliderRange sliderSetPosition sliderSetRange sliderSetSpeed sliderSpeed slingLoadAssistantShown soldierMagazines someAmmo sort soundVolume spawn speaker speed speedMode splitString sqrt squadParams stance startLoadingScreen step stop stopEngineRTD stopped str sunOrMoon supportInfo suppressFor surfaceIsWater surfaceNormal surfaceType swimInDepth switchableUnits switchAction switchCamera switchGesture switchLight switchMove synchronizedObjects synchronizedTriggers synchronizedWaypoints synchronizeObjectsAdd synchronizeObjectsRemove synchronizeTrigger synchronizeWaypoint systemChat systemOfUnits tan targetKnowledge targetsAggregate targetsQuery taskAlwaysVisible taskChildren taskCompleted taskCustomData taskDescription taskDestination taskHint taskMarkerOffset taskNull taskParent taskResult taskState taskType teamMember teamMemberNull teamName teams teamSwitch teamSwitchEnabled teamType terminate terrainIntersect terrainIntersectASL text textLog textLogFormat tg time timeMultiplier titleCut titleFadeOut titleObj titleRsc titleText toArray toFixed toLower toString toUpper triggerActivated triggerActivation triggerArea triggerAttachedVehicle triggerAttachObject triggerAttachVehicle triggerStatements triggerText triggerTimeout triggerTimeoutCurrent triggerType turretLocal turretOwner turretUnit tvAdd tvClear tvCollapse tvCount tvCurSel tvData tvDelete tvExpand tvPicture tvSetCurSel tvSetData tvSetPicture tvSetPictureColor tvSetPictureColorDisabled tvSetPictureColorSelected tvSetPictureRight tvSetPictureRightColor tvSetPictureRightColorDisabled tvSetPictureRightColorSelected tvSetText tvSetTooltip tvSetValue tvSort tvSortByValue tvText tvTooltip tvValue type typeName typeOf UAVControl uiNamespace uiSleep unassignCurator unassignItem unassignTeam unassignVehicle underwater uniform uniformContainer uniformItems uniformMagazines unitAddons unitAimPosition unitAimPositionVisual unitBackpack unitIsUAV unitPos unitReady unitRecoilCoefficient units unitsBelowHeight unlinkItem unlockAchievement unregisterTask updateDrawIcon updateMenuItem updateObjectTree useAISteeringComponent useAudioTimeForMoves vectorAdd vectorCos vectorCrossProduct vectorDiff vectorDir vectorDirVisual vectorDistance vectorDistanceSqr vectorDotProduct vectorFromTo vectorMagnitude vectorMagnitudeSqr vectorMultiply vectorNormalized vectorUp vectorUpVisual vehicle vehicleCargoEnabled vehicleChat vehicleRadio vehicles vehicleVarName velocity velocityModelSpace verifySignature vest vestContainer vestItems vestMagazines viewDistance visibleCompass visibleGPS visibleMap visiblePosition visiblePositionASL visibleScoretable visibleWatch waves waypointAttachedObject waypointAttachedVehicle waypointAttachObject waypointAttachVehicle waypointBehaviour waypointCombatMode waypointCompletionRadius waypointDescription waypointForceBehaviour waypointFormation waypointHousePosition waypointLoiterRadius waypointLoiterType waypointName waypointPosition waypoints waypointScript waypointsEnabledUAV waypointShow waypointSpeed waypointStatements waypointTimeout waypointTimeoutCurrent waypointType waypointVisible weaponAccessories weaponAccessoriesCargo weaponCargo weaponDirection weaponInertia weaponLowered weapons weaponsItems weaponsItemsCargo weaponState weaponsTurret weightRTD west WFSideText wind", -literal:"true false nil"},c:[e.CLCM,e.CBCM,e.NM,r,a,i,t.preprocessor],i:/#/}}),e.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*#]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}}),e.registerLanguage("stan",function(e){return{c:[e.HCM,e.CLCM,e.CBCM,{b:e.UIR,l:e.UIR,k:{name:"for in while repeat until if then else",symbol:"bernoulli bernoulli_logit binomial binomial_logit beta_binomial hypergeometric categorical categorical_logit ordered_logistic neg_binomial neg_binomial_2 neg_binomial_2_log poisson poisson_log multinomial normal exp_mod_normal skew_normal student_t cauchy double_exponential logistic gumbel lognormal chi_square inv_chi_square scaled_inv_chi_square exponential inv_gamma weibull frechet rayleigh wiener pareto pareto_type_2 von_mises uniform multi_normal multi_normal_prec multi_normal_cholesky multi_gp multi_gp_cholesky multi_student_t gaussian_dlm_obs dirichlet lkj_corr lkj_corr_cholesky wishart inv_wishart","selector-tag":"int real vector simplex unit_vector ordered positive_ordered row_vector matrix cholesky_factor_corr cholesky_factor_cov corr_matrix cov_matrix",title:"functions model data parameters quantities transformed generated",literal:"true false"},r:0},{cN:"number",b:"0[xX][0-9a-fA-F]+[Li]?\\b",r:0},{cN:"number",b:"0[xX][0-9a-fA-F]+[Li]?\\b",r:0},{cN:"number",b:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",r:0},{cN:"number",b:"\\d+\\.(?!\\d)(?:i\\b)?",r:0},{cN:"number",b:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",r:0}]}}),e.registerLanguage("stata",function(e){return{aliases:["do","ado"],cI:!0,k:"if else in foreach for forv forva forval forvalu forvalue forvalues by bys bysort xi quietly qui capture about ac ac_7 acprplot acprplot_7 adjust ado adopath adoupdate alpha ameans an ano anov anova anova_estat anova_terms anovadef aorder ap app appe appen append arch arch_dr arch_estat arch_p archlm areg areg_p args arima arima_dr arima_estat arima_p as asmprobit asmprobit_estat asmprobit_lf asmprobit_mfx__dlg asmprobit_p ass asse asser assert avplot avplot_7 avplots avplots_7 bcskew0 bgodfrey binreg bip0_lf biplot bipp_lf bipr_lf bipr_p biprobit bitest bitesti bitowt blogit bmemsize boot bootsamp bootstrap bootstrap_8 boxco_l boxco_p boxcox boxcox_6 boxcox_p bprobit br break brier bro brow brows browse brr brrstat bs bs_7 bsampl_w bsample bsample_7 bsqreg bstat bstat_7 bstat_8 bstrap bstrap_7 ca ca_estat ca_p cabiplot camat canon canon_8 canon_8_p canon_estat canon_p cap caprojection capt captu captur capture cat cc cchart cchart_7 cci cd censobs_table centile cf char chdir checkdlgfiles checkestimationsample checkhlpfiles checksum chelp ci cii cl class classutil clear cli clis clist clo clog clog_lf clog_p clogi clogi_sw clogit clogit_lf clogit_p clogitp clogl_sw cloglog clonevar clslistarray cluster cluster_measures cluster_stop cluster_tree cluster_tree_8 clustermat cmdlog cnr cnre cnreg cnreg_p cnreg_sw cnsreg codebook collaps4 collapse colormult_nb colormult_nw compare compress conf confi confir confirm conren cons const constr constra constrai constrain constraint continue contract copy copyright copysource cor corc corr corr2data corr_anti corr_kmo corr_smc corre correl correla correlat correlate corrgram cou coun count cox cox_p cox_sw coxbase coxhaz coxvar cprplot cprplot_7 crc cret cretu cretur creturn cross cs cscript cscript_log csi ct ct_is ctset ctst_5 ctst_st cttost cumsp cumsp_7 cumul cusum cusum_7 cutil d|0 datasig datasign datasigna datasignat datasignatu datasignatur datasignature datetof db dbeta de dec deco decod decode deff des desc descr descri describ describe destring dfbeta dfgls dfuller di di_g dir dirstats dis discard disp disp_res disp_s displ displa display distinct do doe doed doedi doedit dotplot dotplot_7 dprobit drawnorm drop ds ds_util dstdize duplicates durbina dwstat dydx e|0 ed edi edit egen eivreg emdef en enc enco encod encode eq erase ereg ereg_lf ereg_p ereg_sw ereghet ereghet_glf ereghet_glf_sh ereghet_gp ereghet_ilf ereghet_ilf_sh ereghet_ip eret eretu eretur ereturn err erro error est est_cfexist est_cfname est_clickable est_expand est_hold est_table est_unhold est_unholdok estat estat_default estat_summ estat_vce_only esti estimates etodow etof etomdy ex exi exit expand expandcl fac fact facto factor factor_estat factor_p factor_pca_rotated factor_rotate factormat fcast fcast_compute fcast_graph fdades fdadesc fdadescr fdadescri fdadescrib fdadescribe fdasav fdasave fdause fh_st file open file read file close file filefilter fillin find_hlp_file findfile findit findit_7 fit fl fli flis flist for5_0 form forma format fpredict frac_154 frac_adj frac_chk frac_cox frac_ddp frac_dis frac_dv frac_in frac_mun frac_pp frac_pq frac_pv frac_wgt frac_xo fracgen fracplot fracplot_7 fracpoly fracpred fron_ex fron_hn fron_p fron_tn fron_tn2 frontier ftodate ftoe ftomdy ftowdate g|0 gamhet_glf gamhet_gp gamhet_ilf gamhet_ip gamma gamma_d2 gamma_p gamma_sw gammahet gdi_hexagon gdi_spokes ge gen gene gener genera generat generate genrank genstd genvmean gettoken gl gladder gladder_7 glim_l01 glim_l02 glim_l03 glim_l04 glim_l05 glim_l06 glim_l07 glim_l08 glim_l09 glim_l10 glim_l11 glim_l12 glim_lf glim_mu glim_nw1 glim_nw2 glim_nw3 glim_p glim_v1 glim_v2 glim_v3 glim_v4 glim_v5 glim_v6 glim_v7 glm glm_6 glm_p glm_sw glmpred glo glob globa global glogit glogit_8 glogit_p gmeans gnbre_lf gnbreg gnbreg_5 gnbreg_p gomp_lf gompe_sw gomper_p gompertz gompertzhet gomphet_glf gomphet_glf_sh gomphet_gp gomphet_ilf gomphet_ilf_sh gomphet_ip gphdot gphpen gphprint gprefs gprobi_p gprobit gprobit_8 gr gr7 gr_copy gr_current gr_db gr_describe gr_dir gr_draw gr_draw_replay gr_drop gr_edit gr_editviewopts gr_example gr_example2 gr_export gr_print gr_qscheme gr_query gr_read gr_rename gr_replay gr_save gr_set gr_setscheme gr_table gr_undo gr_use graph graph7 grebar greigen greigen_7 greigen_8 grmeanby grmeanby_7 gs_fileinfo gs_filetype gs_graphinfo gs_stat gsort gwood h|0 hadimvo hareg hausman haver he heck_d2 heckma_p heckman heckp_lf heckpr_p heckprob hel help hereg hetpr_lf hetpr_p hetprob hettest hexdump hilite hist hist_7 histogram hlogit hlu hmeans hotel hotelling hprobit hreg hsearch icd9 icd9_ff icd9p iis impute imtest inbase include inf infi infil infile infix inp inpu input ins insheet insp inspe inspec inspect integ inten intreg intreg_7 intreg_p intrg2_ll intrg_ll intrg_ll2 ipolate iqreg ir irf irf_create irfm iri is_svy is_svysum isid istdize ivprob_1_lf ivprob_lf ivprobit ivprobit_p ivreg ivreg_footnote ivtob_1_lf ivtob_lf ivtobit ivtobit_p jackknife jacknife jknife jknife_6 jknife_8 jkstat joinby kalarma1 kap kap_3 kapmeier kappa kapwgt kdensity kdensity_7 keep ksm ksmirnov ktau kwallis l|0 la lab labe label labelbook ladder levels levelsof leverage lfit lfit_p li lincom line linktest lis list lloghet_glf lloghet_glf_sh lloghet_gp lloghet_ilf lloghet_ilf_sh lloghet_ip llogi_sw llogis_p llogist llogistic llogistichet lnorm_lf lnorm_sw lnorma_p lnormal lnormalhet lnormhet_glf lnormhet_glf_sh lnormhet_gp lnormhet_ilf lnormhet_ilf_sh lnormhet_ip lnskew0 loadingplot loc loca local log logi logis_lf logistic logistic_p logit logit_estat logit_p loglogs logrank loneway lookfor lookup lowess lowess_7 lpredict lrecomp lroc lroc_7 lrtest ls lsens lsens_7 lsens_x lstat ltable ltable_7 ltriang lv lvr2plot lvr2plot_7 m|0 ma mac macr macro makecns man manova manova_estat manova_p manovatest mantel mark markin markout marksample mat mat_capp mat_order mat_put_rr mat_rapp mata mata_clear mata_describe mata_drop mata_matdescribe mata_matsave mata_matuse mata_memory mata_mlib mata_mosave mata_rename mata_which matalabel matcproc matlist matname matr matri matrix matrix_input__dlg matstrik mcc mcci md0_ md1_ md1debug_ md2_ md2debug_ mds mds_estat mds_p mdsconfig mdslong mdsmat mdsshepard mdytoe mdytof me_derd mean means median memory memsize meqparse mer merg merge mfp mfx mhelp mhodds minbound mixed_ll mixed_ll_reparm mkassert mkdir mkmat mkspline ml ml_5 ml_adjs ml_bhhhs ml_c_d ml_check ml_clear ml_cnt ml_debug ml_defd ml_e0 ml_e0_bfgs ml_e0_cycle ml_e0_dfp ml_e0i ml_e1 ml_e1_bfgs ml_e1_bhhh ml_e1_cycle ml_e1_dfp ml_e2 ml_e2_cycle ml_ebfg0 ml_ebfr0 ml_ebfr1 ml_ebh0q ml_ebhh0 ml_ebhr0 ml_ebr0i ml_ecr0i ml_edfp0 ml_edfr0 ml_edfr1 ml_edr0i ml_eds ml_eer0i ml_egr0i ml_elf ml_elf_bfgs ml_elf_bhhh ml_elf_cycle ml_elf_dfp ml_elfi ml_elfs ml_enr0i ml_enrr0 ml_erdu0 ml_erdu0_bfgs ml_erdu0_bhhh ml_erdu0_bhhhq ml_erdu0_cycle ml_erdu0_dfp ml_erdu0_nrbfgs ml_exde ml_footnote ml_geqnr ml_grad0 ml_graph ml_hbhhh ml_hd0 ml_hold ml_init ml_inv ml_log ml_max ml_mlout ml_mlout_8 ml_model ml_nb0 ml_opt ml_p ml_plot ml_query ml_rdgrd ml_repor ml_s_e ml_score ml_searc ml_technique ml_unhold mleval mlf_ mlmatbysum mlmatsum mlog mlogi mlogit mlogit_footnote mlogit_p mlopts mlsum mlvecsum mnl0_ mor more mov move mprobit mprobit_lf mprobit_p mrdu0_ mrdu1_ mvdecode mvencode mvreg mvreg_estat n|0 nbreg nbreg_al nbreg_lf nbreg_p nbreg_sw nestreg net newey newey_7 newey_p news nl nl_7 nl_9 nl_9_p nl_p nl_p_7 nlcom nlcom_p nlexp2 nlexp2_7 nlexp2a nlexp2a_7 nlexp3 nlexp3_7 nlgom3 nlgom3_7 nlgom4 nlgom4_7 nlinit nllog3 nllog3_7 nllog4 nllog4_7 nlog_rd nlogit nlogit_p nlogitgen nlogittree nlpred no nobreak noi nois noisi noisil noisily note notes notes_dlg nptrend numlabel numlist odbc old_ver olo olog ologi ologi_sw ologit ologit_p ologitp on one onew onewa oneway op_colnm op_comp op_diff op_inv op_str opr opro oprob oprob_sw oprobi oprobi_p oprobit oprobitp opts_exclusive order orthog orthpoly ou out outf outfi outfil outfile outs outsh outshe outshee outsheet ovtest pac pac_7 palette parse parse_dissim pause pca pca_8 pca_display pca_estat pca_p pca_rotate pcamat pchart pchart_7 pchi pchi_7 pcorr pctile pentium pergram pergram_7 permute permute_8 personal peto_st pkcollapse pkcross pkequiv pkexamine pkexamine_7 pkshape pksumm pksumm_7 pl plo plot plugin pnorm pnorm_7 poisgof poiss_lf poiss_sw poisso_p poisson poisson_estat post postclose postfile postutil pperron pr prais prais_e prais_e2 prais_p predict predictnl preserve print pro prob probi probit probit_estat probit_p proc_time procoverlay procrustes procrustes_estat procrustes_p profiler prog progr progra program prop proportion prtest prtesti pwcorr pwd q\\s qby qbys qchi qchi_7 qladder qladder_7 qnorm qnorm_7 qqplot qqplot_7 qreg qreg_c qreg_p qreg_sw qu quadchk quantile quantile_7 que quer query range ranksum ratio rchart rchart_7 rcof recast reclink recode reg reg3 reg3_p regdw regr regre regre_p2 regres regres_p regress regress_estat regriv_p remap ren rena renam rename renpfix repeat replace report reshape restore ret retu retur return rm rmdir robvar roccomp roccomp_7 roccomp_8 rocf_lf rocfit rocfit_8 rocgold rocplot rocplot_7 roctab roctab_7 rolling rologit rologit_p rot rota rotat rotate rotatemat rreg rreg_p ru run runtest rvfplot rvfplot_7 rvpplot rvpplot_7 sa safesum sample sampsi sav save savedresults saveold sc sca scal scala scalar scatter scm_mine sco scob_lf scob_p scobi_sw scobit scor score scoreplot scoreplot_help scree screeplot screeplot_help sdtest sdtesti se search separate seperate serrbar serrbar_7 serset set set_defaults sfrancia sh she shel shell shewhart shewhart_7 signestimationsample signrank signtest simul simul_7 simulate simulate_8 sktest sleep slogit slogit_d2 slogit_p smooth snapspan so sor sort spearman spikeplot spikeplot_7 spikeplt spline_x split sqreg sqreg_p sret sretu sretur sreturn ssc st st_ct st_hc st_hcd st_hcd_sh st_is st_issys st_note st_promo st_set st_show st_smpl st_subid stack statsby statsby_8 stbase stci stci_7 stcox stcox_estat stcox_fr stcox_fr_ll stcox_p stcox_sw stcoxkm stcoxkm_7 stcstat stcurv stcurve stcurve_7 stdes stem stepwise stereg stfill stgen stir stjoin stmc stmh stphplot stphplot_7 stphtest stphtest_7 stptime strate strate_7 streg streg_sw streset sts sts_7 stset stsplit stsum sttocc sttoct stvary stweib su suest suest_8 sum summ summa summar summari summariz summarize sunflower sureg survcurv survsum svar svar_p svmat svy svy_disp svy_dreg svy_est svy_est_7 svy_estat svy_get svy_gnbreg_p svy_head svy_header svy_heckman_p svy_heckprob_p svy_intreg_p svy_ivreg_p svy_logistic_p svy_logit_p svy_mlogit_p svy_nbreg_p svy_ologit_p svy_oprobit_p svy_poisson_p svy_probit_p svy_regress_p svy_sub svy_sub_7 svy_x svy_x_7 svy_x_p svydes svydes_8 svygen svygnbreg svyheckman svyheckprob svyintreg svyintreg_7 svyintrg svyivreg svylc svylog_p svylogit svymarkout svymarkout_8 svymean svymlog svymlogit svynbreg svyolog svyologit svyoprob svyoprobit svyopts svypois svypois_7 svypoisson svyprobit svyprobt svyprop svyprop_7 svyratio svyreg svyreg_p svyregress svyset svyset_7 svyset_8 svytab svytab_7 svytest svytotal sw sw_8 swcnreg swcox swereg swilk swlogis swlogit swologit swoprbt swpois swprobit swqreg swtobit swweib symmetry symmi symplot symplot_7 syntax sysdescribe sysdir sysuse szroeter ta tab tab1 tab2 tab_or tabd tabdi tabdis tabdisp tabi table tabodds tabodds_7 tabstat tabu tabul tabula tabulat tabulate te tempfile tempname tempvar tes test testnl testparm teststd tetrachoric time_it timer tis tob tobi tobit tobit_p tobit_sw token tokeni tokeniz tokenize tostring total translate translator transmap treat_ll treatr_p treatreg trim trnb_cons trnb_mean trpoiss_d2 trunc_ll truncr_p truncreg tsappend tset tsfill tsline tsline_ex tsreport tsrevar tsrline tsset tssmooth tsunab ttest ttesti tut_chk tut_wait tutorial tw tware_st two twoway twoway__fpfit_serset twoway__function_gen twoway__histogram_gen twoway__ipoint_serset twoway__ipoints_serset twoway__kdensity_gen twoway__lfit_serset twoway__normgen_gen twoway__pci_serset twoway__qfit_serset twoway__scatteri_serset twoway__sunflower_gen twoway_ksm_serset ty typ type typeof u|0 unab unabbrev unabcmd update us use uselabel var var_mkcompanion var_p varbasic varfcast vargranger varirf varirf_add varirf_cgraph varirf_create varirf_ctable varirf_describe varirf_dir varirf_drop varirf_erase varirf_graph varirf_ograph varirf_rename varirf_set varirf_table varlist varlmar varnorm varsoc varstable varstable_w varstable_w2 varwle vce vec vec_fevd vec_mkphi vec_p vec_p_w vecirf_create veclmar veclmar_w vecnorm vecnorm_w vecrank vecstable verinst vers versi versio version view viewsource vif vwls wdatetof webdescribe webseek webuse weib1_lf weib2_lf weib_lf weib_lf0 weibhet_glf weibhet_glf_sh weibhet_glfa weibhet_glfa_sh weibhet_gp weibhet_ilf weibhet_ilf_sh weibhet_ilfa weibhet_ilfa_sh weibhet_ip weibu_sw weibul_p weibull weibull_c weibull_s weibullhet wh whelp whi which whil while wilc_st wilcoxon win wind windo window winexec wntestb wntestb_7 wntestq xchart xchart_7 xcorr xcorr_7 xi xi_6 xmlsav xmlsave xmluse xpose xsh xshe xshel xshell xt_iis xt_tis xtab_p xtabond xtbin_p xtclog xtcloglog xtcloglog_8 xtcloglog_d2 xtcloglog_pa_p xtcloglog_re_p xtcnt_p xtcorr xtdata xtdes xtfront_p xtfrontier xtgee xtgee_elink xtgee_estat xtgee_makeivar xtgee_p xtgee_plink xtgls xtgls_p xthaus xthausman xtht_p xthtaylor xtile xtint_p xtintreg xtintreg_8 xtintreg_d2 xtintreg_p xtivp_1 xtivp_2 xtivreg xtline xtline_ex xtlogit xtlogit_8 xtlogit_d2 xtlogit_fe_p xtlogit_pa_p xtlogit_re_p xtmixed xtmixed_estat xtmixed_p xtnb_fe xtnb_lf xtnbreg xtnbreg_pa_p xtnbreg_refe_p xtpcse xtpcse_p xtpois xtpoisson xtpoisson_d2 xtpoisson_pa_p xtpoisson_refe_p xtpred xtprobit xtprobit_8 xtprobit_d2 xtprobit_re_p xtps_fe xtps_lf xtps_ren xtps_ren_8 xtrar_p xtrc xtrc_p xtrchh xtrefe_p xtreg xtreg_be xtreg_fe xtreg_ml xtreg_pa_p xtreg_re xtregar xtrere_p xtset xtsf_ll xtsf_llti xtsum xttab xttest0 xttobit xttobit_8 xttobit_p xttrans yx yxview__barlike_draw yxview_area_draw yxview_bar_draw yxview_dot_draw yxview_dropline_draw yxview_function_draw yxview_iarrow_draw yxview_ilabels_draw yxview_normal_draw yxview_pcarrow_draw yxview_pcbarrow_draw yxview_pccapsym_draw yxview_pcscatter_draw yxview_pcspike_draw yxview_rarea_draw yxview_rbar_draw yxview_rbarm_draw yxview_rcap_draw yxview_rcapsym_draw yxview_rconnected_draw yxview_rline_draw yxview_rscatter_draw yxview_rspike_draw yxview_spike_draw yxview_sunflower_draw zap_s zinb zinb_llf zinb_plf zip zip_llf zip_p zip_plf zt_ct_5 zt_hc_5 zt_hcd_5 zt_is_5 zt_iss_5 zt_sho_5 zt_smp_5 ztbase_5 ztcox_5 ztdes_5 ztereg_5 ztfill_5 ztgen_5 ztir_5 ztjoin_5 ztnb ztnb_p ztp ztp_p zts_5 ztset_5 ztspli_5 ztsum_5 zttoct_5 ztvary_5 ztweib_5",c:[{cN:"symbol",b:/`[a-zA-Z0-9_]+'/},{cN:"variable",b:/\$\{?[a-zA-Z0-9_]+\}?/},{cN:"string",v:[{b:'`"[^\r\n]*?"\''},{b:'"[^\r\n"]*"'}]},{cN:"built_in",v:[{b:"\\b(abs|acos|asin|atan|atan2|atanh|ceil|cloglog|comb|cos|digamma|exp|floor|invcloglog|invlogit|ln|lnfact|lnfactorial|lngamma|log|log10|max|min|mod|reldif|round|sign|sin|sqrt|sum|tan|tanh|trigamma|trunc|betaden|Binomial|binorm|binormal|chi2|chi2tail|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|F|Fden|Ftail|gammaden|gammap|ibeta|invbinomial|invchi2|invchi2tail|invF|invFtail|invgammap|invibeta|invnchi2|invnFtail|invnibeta|invnorm|invnormal|invttail|nbetaden|nchi2|nFden|nFtail|nibeta|norm|normal|normalden|normd|npnchi2|tden|ttail|uniform|abbrev|char|index|indexnot|length|lower|ltrim|match|plural|proper|real|regexm|regexr|regexs|reverse|rtrim|string|strlen|strlower|strltrim|strmatch|strofreal|strpos|strproper|strreverse|strrtrim|strtrim|strupper|subinstr|subinword|substr|trim|upper|word|wordcount|_caller|autocode|byteorder|chop|clip|cond|e|epsdouble|epsfloat|group|inlist|inrange|irecode|matrix|maxbyte|maxdouble|maxfloat|maxint|maxlong|mi|minbyte|mindouble|minfloat|minint|minlong|missing|r|recode|replay|return|s|scalar|d|date|day|dow|doy|halfyear|mdy|month|quarter|week|year|d|daily|dofd|dofh|dofm|dofq|dofw|dofy|h|halfyearly|hofd|m|mofd|monthly|q|qofd|quarterly|tin|twithin|w|weekly|wofd|y|yearly|yh|ym|yofd|yq|yw|cholesky|colnumb|colsof|corr|det|diag|diag0cnt|el|get|hadamard|I|inv|invsym|issym|issymmetric|J|matmissing|matuniform|mreldif|nullmat|rownumb|rowsof|sweep|syminv|trace|vec|vecdiag)(?=\\(|$)"}]},e.C("^[ ]*\\*.*$",!1),e.CLCM,e.CBCM]}}),e.registerLanguage("step21",function(e){var t="[A-Z_][A-Z0-9_.]*",r={keyword:"HEADER ENDSEC DATA"},a={cN:"meta",b:"ISO-10303-21;",r:10},i={cN:"meta",b:"END-ISO-10303-21;",r:10};return{aliases:["p21","step","stp"],cI:!0,l:t,k:r,c:[a,i,e.CLCM,e.CBCM,e.C("/\\*\\*!","\\*/"),e.CNM,e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null}),{cN:"string",b:"'",e:"'"},{cN:"symbol",v:[{b:"#",e:"\\d+",i:"\\W"}]}]}}),e.registerLanguage("stylus",function(e){var t={cN:"variable",b:"\\$"+e.IR},r={cN:"number",b:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"},a=["charset","css","debug","extend","font-face","for","import","include","media","mixin","page","warn","while"],i=["after","before","first-letter","first-line","active","first-child","focus","hover","lang","link","visited"],n=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],o="[\\.\\s\\n\\[\\:,]",s=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-variant-ligatures","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"],l=["\\?","(\\bReturn\\b)","(\\bEnd\\b)","(\\bend\\b)","(\\bdef\\b)",";","#\\s","\\*\\s","===\\s","\\|","%"]; -return{aliases:["styl"],cI:!1,k:"if else for in",i:"("+l.join("|")+")",c:[e.QSM,e.ASM,e.CLCM,e.CBCM,r,{b:"\\.[a-zA-Z][a-zA-Z0-9_-]*"+o,rB:!0,c:[{cN:"selector-class",b:"\\.[a-zA-Z][a-zA-Z0-9_-]*"}]},{b:"\\#[a-zA-Z][a-zA-Z0-9_-]*"+o,rB:!0,c:[{cN:"selector-id",b:"\\#[a-zA-Z][a-zA-Z0-9_-]*"}]},{b:"\\b("+n.join("|")+")"+o,rB:!0,c:[{cN:"selector-tag",b:"\\b[a-zA-Z][a-zA-Z0-9_-]*"}]},{b:"&?:?:\\b("+i.join("|")+")"+o},{b:"@("+a.join("|")+")\\b"},t,e.CSSNM,e.NM,{cN:"function",b:"^[a-zA-Z][a-zA-Z0-9_-]*\\(.*\\)",i:"[\\n]",rB:!0,c:[{cN:"title",b:"\\b[a-zA-Z][a-zA-Z0-9_-]*"},{cN:"params",b:/\(/,e:/\)/,c:[r,t,e.ASM,e.CSSNM,e.NM,e.QSM]}]},{cN:"attribute",b:"\\b("+s.reverse().join("|")+")\\b",starts:{e:/;|$/,c:[r,t,e.ASM,e.QSM,e.CSSNM,e.NM,e.CBCM],i:/\./,r:0}}]}}),e.registerLanguage("subunit",function(e){var t={cN:"string",b:"\\[\n(multipart)?",e:"\\]\n"},r={cN:"string",b:"\\d{4}-\\d{2}-\\d{2}(\\s+)\\d{2}:\\d{2}:\\d{2}.\\d+Z"},a={cN:"string",b:"(\\+|-)\\d+"},i={cN:"keyword",r:10,v:[{b:"^(test|testing|success|successful|failure|error|skip|xfail|uxsuccess)(:?)\\s+(test)?"},{b:"^progress(:?)(\\s+)?(pop|push)?"},{b:"^tags:"},{b:"^time:"}]};return{cI:!0,c:[t,r,a,i]}}),e.registerLanguage("swift",function(e){var t={keyword:"__COLUMN__ __FILE__ __FUNCTION__ __LINE__ as as! as? associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},r={cN:"type",b:"\\b[A-Z][\\wÀ-ʸ']*",r:0},a=e.C("/\\*","\\*/",{c:["self"]}),i={cN:"subst",b:/\\\(/,e:"\\)",k:t,c:[]},n={cN:"number",b:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",r:0},o=e.inherit(e.QSM,{c:[i,e.BE]});return i.c=[n],{k:t,c:[o,e.CLCM,a,r,n,{cN:"function",bK:"func",e:"{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{b://},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:t,c:["self",n,o,e.CBCM,{b:":"}],i:/["']/}],i:/\[|%/},{cN:"class",bK:"struct protocol class extension enum",k:t,e:"\\{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{cN:"meta",b:"(@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain)"},{bK:"import",e:/$/,c:[e.CLCM,a]}]}}),e.registerLanguage("taggerscript",function(e){var t={cN:"comment",b:/\$noop\(/,e:/\)/,c:[{b:/\(/,e:/\)/,c:["self",{b:/\\./}]}],r:10},r={cN:"keyword",b:/\$(?!noop)[a-zA-Z][_a-zA-Z0-9]*/,e:/\(/,eE:!0},a={cN:"variable",b:/%[_a-zA-Z0-9:]*/,e:"%"},i={cN:"symbol",b:/\\./};return{c:[t,r,a,i]}}),e.registerLanguage("yaml",function(e){var t="true false yes no null",r="^[ \\-]*",a="[a-zA-Z_][\\w\\-]*",i={cN:"attr",v:[{b:r+a+":"},{b:r+'"'+a+'":'},{b:r+"'"+a+"':"}]},n={cN:"template-variable",v:[{b:"{{",e:"}}"},{b:"%{",e:"}"}]},o={cN:"string",r:0,v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/\S+/}],c:[e.BE,n]};return{cI:!0,aliases:["yml","YAML","yaml"],c:[i,{cN:"meta",b:"^---s*$",r:10},{cN:"string",b:"[\\|>] *$",rE:!0,c:o.c,e:i.v[0].b},{b:"<%[%=-]?",e:"[%-]?%>",sL:"ruby",eB:!0,eE:!0,r:0},{cN:"type",b:"!!"+e.UIR},{cN:"meta",b:"&"+e.UIR+"$"},{cN:"meta",b:"\\*"+e.UIR+"$"},{cN:"bullet",b:"^ *-",r:0},e.HCM,{bK:t,k:{literal:t}},e.CNM,o]}}),e.registerLanguage("tap",function(e){return{cI:!0,c:[e.HCM,{cN:"meta",v:[{b:"^TAP version (\\d+)$"},{b:"^1\\.\\.(\\d+)$"}]},{b:"(s+)?---$",e:"\\.\\.\\.$",sL:"yaml",r:0},{cN:"number",b:" (\\d+) "},{cN:"symbol",v:[{b:"^ok"},{b:"^not ok"}]}]}}),e.registerLanguage("tcl",function(e){return{aliases:["tk"],k:"after append apply array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock close concat continue dde dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent filename flush for foreach format gets glob global history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename return safe scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update uplevel upvar variable vwait while",c:[e.C(";[ \\t]*#","$"),e.C("^[ \\t]*#","$"),{bK:"proc",e:"[\\{]",eE:!0,c:[{cN:"title",b:"[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"[ \\t\\n\\r]",eW:!0,eE:!0}]},{eE:!0,v:[{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)",e:"[^a-zA-Z0-9_\\}\\$]"},{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"(\\))?[^a-zA-Z0-9_\\}\\$]"}]},{cN:"string",c:[e.BE],v:[e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},{cN:"number",v:[e.BNM,e.CNM]}]}}),e.registerLanguage("tex",function(e){var t={cN:"tag",b:/\\/,r:0,c:[{cN:"name",v:[{b:/[a-zA-Zа-яА-я]+[*]?/},{b:/[^a-zA-Zа-яА-я0-9]/}],starts:{eW:!0,r:0,c:[{cN:"string",v:[{b:/\[/,e:/\]/},{b:/\{/,e:/\}/}]},{b:/\s*=\s*/,eW:!0,r:0,c:[{cN:"number",b:/-?\d*\.?\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?/}]}]}}]};return{c:[t,{cN:"formula",c:[t],r:0,v:[{b:/\$\$/,e:/\$\$/},{b:/\$/,e:/\$/}]},e.C("%","$",{r:0})]}}),e.registerLanguage("thrift",function(e){var t="bool byte i16 i32 i64 double string binary";return{k:{keyword:"namespace const typedef struct enum service exception void oneway set list map required optional",built_in:t,literal:"true false"},c:[e.QSM,e.NM,e.CLCM,e.CBCM,{cN:"class",bK:"struct enum service exception",e:/\{/,i:/\n/,c:[e.inherit(e.TM,{starts:{eW:!0,eE:!0}})]},{b:"\\b(set|list|map)\\s*<",e:">",k:t,c:["self"]}]}}),e.registerLanguage("tp",function(e){var t={cN:"number",b:"[1-9][0-9]*",r:0},r={cN:"symbol",b:":[^\\]]+"},a={cN:"built_in",b:"(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER| TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\[",e:"\\]",c:["self",t,r]},i={cN:"built_in",b:"(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\[",e:"\\]",c:["self",t,e.QSM,r]};return{k:{keyword:"ABORT ACC ADJUST AND AP_LD BREAK CALL CNT COL CONDITION CONFIG DA DB DIV DETECT ELSE END ENDFOR ERR_NUM ERROR_PROG FINE FOR GP GUARD INC IF JMP LINEAR_MAX_SPEED LOCK MOD MONITOR OFFSET Offset OR OVERRIDE PAUSE PREG PTH RT_LD RUN SELECT SKIP Skip TA TB TO TOOL_OFFSET Tool_Offset UF UT UFRAME_NUM UTOOL_NUM UNLOCK WAIT X Y Z W P R STRLEN SUBSTR FINDSTR VOFFSET PROG ATTR MN POS",literal:"ON OFF max_speed LPOS JPOS ENABLE DISABLE START STOP RESET"},c:[a,i,{cN:"keyword",b:"/(PROG|ATTR|MN|POS|END)\\b"},{cN:"keyword",b:"(CALL|RUN|POINT_LOGIC|LBL)\\b"},{cN:"keyword",b:"\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)"},{cN:"number",b:"\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\b",r:0},e.C("//","[;$]"),e.C("!","[;$]"),e.C("--eg:","$"),e.QSM,{cN:"string",b:"'",e:"'"},e.CNM,{cN:"variable",b:"\\$[A-Za-z0-9_]+"}]}}),e.registerLanguage("twig",function(e){var t={cN:"params",b:"\\(",e:"\\)"},r="attribute block constant cycle date dump include max min parent random range source template_from_string",a={bK:r,k:{name:r},r:0,c:[t]},i={b:/\|[A-Za-z_]+:?/,k:"abs batch capitalize convert_encoding date date_modify default escape first format join json_encode keys last length lower merge nl2br number_format raw replace reverse round slice sort split striptags title trim upper url_encode",c:[a]},n="autoescape block do embed extends filter flush for if import include macro sandbox set spaceless use verbatim";return n=n+" "+n.split(" ").map(function(e){return"end"+e}).join(" "),{aliases:["craftcms"],cI:!0,sL:"xml",c:[e.C(/\{#/,/#}/),{cN:"template-tag",b:/\{%/,e:/%}/,c:[{cN:"name",b:/\w+/,k:n,starts:{eW:!0,c:[i,a],r:0}}]},{cN:"template-variable",b:/\{\{/,e:/}}/,c:["self",i,a]}]}}),e.registerLanguage("typescript",function(e){var t={keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise"};return{aliases:["ts"],k:t,c:[{cN:"meta",b:/^\s*['"]use strict['"]/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+e.IR+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:e.IR},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:["self",e.CLCM,e.CBCM]}]}]}],r:0},{cN:"function",b:"function",e:/[\{;]/,eE:!0,k:t,c:["self",e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:[e.CLCM,e.CBCM],i:/["'\(]/}],i:/%/,r:0},{bK:"constructor",e:/\{/,eE:!0,c:["self",{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:[e.CLCM,e.CBCM],i:/["'\(]/}]},{b:/module\./,k:{built_in:"module"},r:0},{bK:"module",e:/\{/,eE:!0},{bK:"interface",e:/\{/,eE:!0,k:"interface extends"},{b:/\$[(.]/},{b:"\\."+e.IR,r:0},{cN:"meta",b:"@[A-Za-z]+"}]}}),e.registerLanguage("vala",function(e){return{k:{keyword:"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override virtual delegate if while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var",built_in:"DBus GLib CCode Gee Object Gtk Posix",literal:"false true null"},c:[{cN:"class",bK:"class interface namespace",e:"{",eE:!0,i:"[^,:\\n\\s\\.]",c:[e.UTM]},e.CLCM,e.CBCM,{cN:"string",b:'"""',e:'"""',r:5},e.ASM,e.QSM,e.CNM,{cN:"meta",b:"^#",e:"$",r:2}]}}),e.registerLanguage("vbnet",function(e){return{aliases:["vb"],cI:!0,k:{keyword:"addhandler addressof alias and andalso aggregate ansi as assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass namespace narrowing new next not notinheritable notoverridable of off on operator option optional or order orelse overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim rem removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly xor",built_in:"boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype date decimal directcast double gettype getxmlnamespace iif integer long object sbyte short single string trycast typeof uinteger ulong ushort",literal:"true false nothing"},i:"//|{|}|endif|gosub|variant|wend",c:[e.inherit(e.QSM,{c:[{b:'""'}]}),e.C("'","$",{rB:!0,c:[{cN:"doctag",b:"'''|",c:[e.PWM]},{cN:"doctag",b:"",c:[e.PWM]}]}),e.CNM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elseif end region externalsource"}}]}}),e.registerLanguage("vbscript",function(e){return{aliases:["vbs"],cI:!0,k:{keyword:"call class const dim do loop erase execute executeglobal exit for each next function if then else on error option explicit new private property let get public randomize redim rem select case set stop sub while wend with end to elseif is or xor and not class_initialize class_terminate default preserve in me byval byref step resume goto",built_in:"lcase month vartype instrrev ubound setlocale getobject rgb getref string weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency conversions csng timevalue second year space abs clng timeserial fixs len asc isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion scriptengine split scriptengineminorversion cint sin datepart ltrim sqr scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw chrw regexp server response request cstr err",literal:"true false null nothing empty"},i:"//",c:[e.inherit(e.QSM,{c:[{b:'""'}]}),e.C(/'/,/$/,{r:0}),e.CNM]}}),e.registerLanguage("vbscript-html",function(e){return{sL:"xml",c:[{b:"<%",e:"%>",sL:"vbscript"}]}}),e.registerLanguage("verilog",function(e){var t={keyword:"accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind bins binsof bit break buf|0 bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin function generate|5 genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import incdir include initial inout input inside instance int integer interconnect interface intersect join join_any join_none large let liblist library local localparam logic longint macromodule matches medium modport module nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 or output package packed parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor",literal:"null",built_in:"$finish $stop $exit $fatal $error $warning $info $realtime $time $printtimescale $bitstoreal $bitstoshortreal $itor $signed $cast $bits $stime $timeformat $realtobits $shortrealtobits $rtoi $unsigned $asserton $assertkill $assertpasson $assertfailon $assertnonvacuouson $assertoff $assertcontrol $assertpassoff $assertfailoff $assertvacuousoff $isunbounded $sampled $fell $changed $past_gclk $fell_gclk $changed_gclk $rising_gclk $steady_gclk $coverage_control $coverage_get $coverage_save $set_coverage_db_name $rose $stable $past $rose_gclk $stable_gclk $future_gclk $falling_gclk $changing_gclk $display $coverage_get_max $coverage_merge $get_coverage $load_coverage_db $typename $unpacked_dimensions $left $low $increment $clog2 $ln $log10 $exp $sqrt $pow $floor $ceil $sin $cos $tan $countbits $onehot $isunknown $fatal $warning $dimensions $right $high $size $asin $acos $atan $atan2 $hypot $sinh $cosh $tanh $asinh $acosh $atanh $countones $onehot0 $error $info $random $dist_chi_square $dist_erlang $dist_exponential $dist_normal $dist_poisson $dist_t $dist_uniform $q_initialize $q_remove $q_exam $async$and$array $async$nand$array $async$or$array $async$nor$array $sync$and$array $sync$nand$array $sync$or$array $sync$nor$array $q_add $q_full $psprintf $async$and$plane $async$nand$plane $async$or$plane $async$nor$plane $sync$and$plane $sync$nand$plane $sync$or$plane $sync$nor$plane $system $display $displayb $displayh $displayo $strobe $strobeb $strobeh $strobeo $write $readmemb $readmemh $writememh $value$plusargs $dumpvars $dumpon $dumplimit $dumpports $dumpportson $dumpportslimit $writeb $writeh $writeo $monitor $monitorb $monitorh $monitoro $writememb $dumpfile $dumpoff $dumpall $dumpflush $dumpportsoff $dumpportsall $dumpportsflush $fclose $fdisplay $fdisplayb $fdisplayh $fdisplayo $fstrobe $fstrobeb $fstrobeh $fstrobeo $swrite $swriteb $swriteh $swriteo $fscanf $fread $fseek $fflush $feof $fopen $fwrite $fwriteb $fwriteh $fwriteo $fmonitor $fmonitorb $fmonitorh $fmonitoro $sformat $sformatf $fgetc $ungetc $fgets $sscanf $rewind $ftell $ferror"};return{aliases:["v","sv","svh"],cI:!1,k:t,l:/[\w\$]+/,c:[e.CBCM,e.CLCM,e.QSM,{cN:"number",c:[e.BE],v:[{b:"\\b((\\d+'(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{b:"\\B(('(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{b:"\\b([0-9_])+",r:0}]},{cN:"variable",v:[{b:"#\\((?!parameter).+\\)"},{b:"\\.\\w+",r:0}]},{cN:"meta",b:"`",e:"$",k:{"meta-keyword":"define __FILE__ __LINE__ begin_keywords celldefine default_nettype define else elsif end_keywords endcelldefine endif ifdef ifndef include line nounconnected_drive pragma resetall timescale unconnected_drive undef undefineall"},r:0}]}}),e.registerLanguage("vhdl",function(e){var t="\\d(_|\\d)*",r="[eE][-+]?"+t,a=t+"(\\."+t+")?("+r+")?",i="\\w+",n=t+"#"+i+"(\\."+i+")?#("+r+")?",o="\\b("+n+"|"+a+")";return{cI:!0,k:{keyword:"abs access after alias all and architecture array assert assume assume_guarantee attribute begin block body buffer bus case component configuration constant context cover disconnect downto default else elsif end entity exit fairness file for force function generate generic group guarded if impure in inertial inout is label library linkage literal loop map mod nand new next nor not null of on open or others out package port postponed procedure process property protected pure range record register reject release rem report restrict restrict_guarantee return rol ror select sequence severity shared signal sla sll sra srl strong subtype then to transport type unaffected units until use variable vmode vprop vunit wait when while with xnor xor",built_in:"boolean bit character integer time delay_length natural positive string bit_vector file_open_kind file_open_status std_logic std_logic_vector unsigned signed boolean_vector integer_vector std_ulogic std_ulogic_vector unresolved_unsigned u_unsigned unresolved_signed u_signedreal_vector time_vector",literal:"false true note warning error failure line text side width"},i:"{",c:[e.CBCM,e.C("--","$"),e.QSM,{cN:"number",b:o,r:0},{cN:"string",b:"'(U|X|0|1|Z|W|L|H|-)'",c:[e.BE]},{cN:"symbol",b:"'[A-Za-z](_?[A-Za-z0-9])*",c:[e.BE]}]}}),e.registerLanguage("vim",function(e){return{l:/[!#@\w]+/,k:{keyword:"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank",built_in:"synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv complete_check add getwinposx getqflist getwinposy screencol clearmatches empty extend getcmdpos mzeval garbagecollect setreg ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable shiftwidth max sinh isdirectory synID system inputrestore winline atan visualmode inputlist tabpagewinnr round getregtype mapcheck hasmapto histdel argidx findfile sha256 exists toupper getcmdline taglist string getmatches bufnr strftime winwidth bufexists strtrans tabpagebuflist setcmdpos remote_read printf setloclist getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval resolve libcallnr foldclosedend reverse filter has_key bufname str2float strlen setline getcharmod setbufvar index searchpos shellescape undofile foldclosed setqflist buflisted strchars str2nr virtcol floor remove undotree remote_expr winheight gettabwinvar reltime cursor tabpagenr finddir localtime acos getloclist search tanh matchend rename gettabvar strdisplaywidth type abs py3eval setwinvar tolower wildmenumode log10 spellsuggest bufloaded synconcealed nextnonblank server2client complete settabwinvar executable input wincol setmatches getftype hlID inputsave searchpair or screenrow line settabvar histadd deepcopy strpart remote_peek and eval getftime submatch screenchar winsaveview matchadd mkdir screenattr getfontname libcall reltimestr getfsize winnr invert pow getbufline byte2line soundfold repeat fnameescape tagfiles sin strwidth spellbadword trunc maparg log lispindent hostname setpos globpath remote_foreground getchar synIDattr fnamemodify cscope_connection stridx winbufnr indent min complete_add nr2char searchpairpos inputdialog values matchlist items hlexists strridx browsedir expand fmod pathshorten line2byte argc count getwinvar glob foldtextresult getreg foreground cosh matchdelete has char2nr simplify histget searchdecl iconv winrestcmd pumvisible writefile foldlevel haslocaldir keys cos matchstr foldtext histnr tan tempname getcwd byteidx getbufvar islocked escape eventhandler remote_send serverlist winrestview synstack pyeval prevnonblank readfile cindent filereadable changenr exp"},i:/;/,c:[e.NM,e.ASM,{cN:"string",b:/"(\\"|\n\\|[^"\n])*"/},e.C('"',"$"),{cN:"variable",b:/[bwtglsav]:[\w\d_]*/},{cN:"function",bK:"function function!",e:"$",r:0,c:[e.TM,{cN:"params",b:"\\(",e:"\\)"}]},{cN:"symbol",b:/<[\w-]+>/}]}}),e.registerLanguage("x86asm",function(e){return{cI:!0,l:"[.%]?"+e.IR,k:{keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63", -built_in:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr",meta:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},c:[e.C(";","$",{r:0}),{cN:"number",v:[{b:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",r:0},{b:"\\$[0-9][0-9A-Fa-f]*",r:0},{b:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{b:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},e.QSM,{cN:"string",v:[{b:"'",e:"[^\\\\]'"},{b:"`",e:"[^\\\\]`"}],r:0},{cN:"symbol",v:[{b:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{b:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],r:0},{cN:"subst",b:"%[0-9]+",r:0},{cN:"subst",b:"%!S+",r:0},{cN:"meta",b:/^\s*\.[\w_-]+/}]}}),e.registerLanguage("xl",function(e){var t="ObjectLoader Animate MovieCredits Slides Filters Shading Materials LensFlare Mapping VLCAudioVideo StereoDecoder PointCloud NetworkAccess RemoteControl RegExp ChromaKey Snowfall NodeJS Speech Charts",r={keyword:"if then else do while until for loop import with is as where when by data constant integer real text name boolean symbol infix prefix postfix block tree",literal:"true false nil",built_in:"in mod rem and or xor not abs sign floor ceil sqrt sin cos tan asin acos atan exp expm1 log log2 log10 log1p pi at text_length text_range text_find text_replace contains page slide basic_slide title_slide title subtitle fade_in fade_out fade_at clear_color color line_color line_width texture_wrap texture_transform texture scale_?x scale_?y scale_?z? translate_?x translate_?y translate_?z? rotate_?x rotate_?y rotate_?z? rectangle circle ellipse sphere path line_to move_to quad_to curve_to theme background contents locally time mouse_?x mouse_?y mouse_buttons "+t},a={cN:"string",b:'"',e:'"',i:"\\n"},i={cN:"string",b:"'",e:"'",i:"\\n"},n={cN:"string",b:"<<",e:">>"},o={cN:"number",b:"[0-9]+#[0-9A-Z_]+(\\.[0-9-A-Z_]+)?#?([Ee][+-]?[0-9]+)?"},s={bK:"import",e:"$",k:r,c:[a]},l={cN:"function",b:/[a-z][^\n]*->/,rB:!0,e:/->/,c:[e.inherit(e.TM,{starts:{eW:!0,k:r}})]};return{aliases:["tao"],l:/[a-zA-Z][a-zA-Z0-9_?]*/,k:r,c:[e.CLCM,e.CBCM,a,i,n,l,s,o,e.NM]}}),e.registerLanguage("xquery",function(e){var t="for let if while then else return where group by xquery encoding versionmodule namespace boundary-space preserve strip default collation base-uri orderingcopy-namespaces order declare import schema namespace function option in allowing emptyat tumbling window sliding window start when only end when previous next stable ascendingdescending empty greatest least some every satisfies switch case typeswitch try catch andor to union intersect instance of treat as castable cast map array delete insert intoreplace value rename copy modify update",r="false true xs:string xs:integer element item xs:date xs:datetime xs:float xs:double xs:decimal QName xs:anyURI xs:long xs:int xs:short xs:byte attribute",a={b:/\$[a-zA-Z0-9\-]+/},i={cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},n={cN:"string",v:[{b:/"/,e:/"/,c:[{b:/""/,r:0}]},{b:/'/,e:/'/,c:[{b:/''/,r:0}]}]},o={cN:"meta",b:"%\\w+"},s={cN:"comment",b:"\\(:",e:":\\)",r:10,c:[{cN:"doctag",b:"@\\w+"}]},l={b:"{",e:"}"},c=[a,n,i,s,o,l];return l.c=c,{aliases:["xpath","xq"],cI:!1,l:/[a-zA-Z\$][a-zA-Z0-9_:\-]*/,i:/(proc)|(abstract)|(extends)|(until)|(#)/,k:{keyword:t,literal:r},c:c}}),e.registerLanguage("zephir",function(e){var t={cN:"string",c:[e.BE],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},r={v:[e.BNM,e.CNM]};return{aliases:["zep"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var let while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally int uint long ulong char uchar double float bool boolean stringlikely unlikely",c:[e.CLCM,e.HCM,e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:"<<<['\"]?\\w+['\"]?$",e:"^\\w+;",c:[e.BE]},{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",e.CBCM,t,r]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,r]}}),e}); -/*! url - v1.8.6 - 2013-11-22 */window.url=function(){function a(a){return!isNaN(parseFloat(a))&&isFinite(a)}return function(b,c){var d=c||window.location.toString();if(!b)return d;b=b.toString(),"//"===d.substring(0,2)?d="http:"+d:1===d.split("://").length&&(d="http://"+d),c=d.split("/");var e={auth:""},f=c[2].split("@");1===f.length?f=f[0].split(":"):(e.auth=f[0],f=f[1].split(":")),e.protocol=c[0],e.hostname=f[0],e.port=f[1]||("https"===e.protocol.split(":")[0].toLowerCase()?"443":"80"),e.pathname=(c.length>3?"/":"")+c.slice(3,c.length).join("/").split("?")[0].split("#")[0];var g=e.pathname;"/"===g.charAt(g.length-1)&&(g=g.substring(0,g.length-1));var h=e.hostname,i=h.split("."),j=g.split("/");if("hostname"===b)return h;if("domain"===b)return/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/.test(h)?h:i.slice(-2).join(".");if("sub"===b)return i.slice(0,i.length-2).join(".");if("port"===b)return e.port;if("protocol"===b)return e.protocol.split(":")[0];if("auth"===b)return e.auth;if("user"===b)return e.auth.split(":")[0];if("pass"===b)return e.auth.split(":")[1]||"";if("path"===b)return e.pathname;if("."===b.charAt(0)){if(b=b.substring(1),a(b))return b=parseInt(b,10),i[0>b?i.length+b:b-1]||""}else{if(a(b))return b=parseInt(b,10),j[0>b?j.length+b:b]||"";if("file"===b)return j.slice(-1)[0];if("filename"===b)return j.slice(-1)[0].split(".")[0];if("fileext"===b)return j.slice(-1)[0].split(".")[1]||"";if("?"===b.charAt(0)||"#"===b.charAt(0)){var k=d,l=null;if("?"===b.charAt(0)?k=(k.split("?")[1]||"").split("#")[0]:"#"===b.charAt(0)&&(k=k.split("#")[1]||""),!b.charAt(1))return k;b=b.substring(1),k=k.split("&");for(var m=0,n=k.length;n>m;m++)if(l=k[m].split("="),l[0]===b)return l[1]||"";return null}}return""}}(),"undefined"!=typeof jQuery&&jQuery.extend({url:function(a,b){return window.url(a,b)}}); -/* - * jQuery Bootstrap Pagination v1.3.1 - * https://github.com/esimakin/twbs-pagination - * - * Copyright 2014-2015 Eugene Simakin - * Released under Apache 2.0 license - * http://apache.org/licenses/LICENSE-2.0.html - */ -!function(a,b,c,d){"use strict";var e=a.fn.twbsPagination,f=function(c,d){if(this.$element=a(c),this.options=a.extend({},a.fn.twbsPagination.defaults,d),this.options.startPage<1||this.options.startPage>this.options.totalPages)throw new Error("Start page option is incorrect");if(this.options.totalPages=parseInt(this.options.totalPages),isNaN(this.options.totalPages))throw new Error("Total pages option is not correct!");if(this.options.visiblePages=parseInt(this.options.visiblePages),isNaN(this.options.visiblePages))throw new Error("Visible pages option is not correct!");if(this.options.totalPages"),this.$listContainer.addClass(this.options.paginationClass),"UL"!==g&&this.$element.append(this.$listContainer),this.render(this.getPages(this.options.startPage)),this.setupEvents(),this.options.initiateStartPageClick&&this.$element.trigger("page",this.options.startPage),this};f.prototype={constructor:f,destroy:function(){return this.$element.empty(),this.$element.removeData("twbs-pagination"),this.$element.off("page"),this},show:function(a){if(1>a||a>this.options.totalPages)throw new Error("Page is incorrect.");return this.render(this.getPages(a)),this.setupEvents(),this.$element.trigger("page",a),this},buildListItems:function(a){var b=[];if(this.options.first&&b.push(this.buildItem("first",1)),this.options.prev){var c=a.currentPage>1?a.currentPage-1:this.options.loop?this.options.totalPages:1;b.push(this.buildItem("prev",c))}for(var d=0;d"),e=a(""),f=null;switch(b){case"page":f=c,d.addClass(this.options.pageClass);break;case"first":f=this.options.first,d.addClass(this.options.firstClass);break;case"prev":f=this.options.prev,d.addClass(this.options.prevClass);break;case"next":f=this.options.next,d.addClass(this.options.nextClass);break;case"last":f=this.options.last,d.addClass(this.options.lastClass)}return d.data("page",c),d.data("page-type",b),d.append(e.attr("href",this.makeHref(c)).html(f)),d},getPages:function(a){var b=[],c=Math.floor(this.options.visiblePages/2),d=a-c+1-this.options.visiblePages%2,e=a+c;0>=d&&(d=1,e=this.options.visiblePages),e>this.options.totalPages&&(d=this.options.totalPages-this.options.visiblePages+1,e=this.options.totalPages);for(var f=d;e>=f;)b.push(f),f++;return{currentPage:a,numeric:b}},render:function(b){var c=this;this.$listContainer.children().remove(),this.$listContainer.append(this.buildListItems(b)),this.$listContainer.children().each(function(){var d=a(this),e=d.data("page-type");switch(e){case"page":d.data("page")===b.currentPage&&d.addClass(c.options.activeClass);break;case"first":d.toggleClass(c.options.disabledClass,1===b.currentPage);break;case"last":d.toggleClass(c.options.disabledClass,b.currentPage===c.options.totalPages);break;case"prev":d.toggleClass(c.options.disabledClass,!c.options.loop&&1===b.currentPage);break;case"next":d.toggleClass(c.options.disabledClass,!c.options.loop&&b.currentPage===c.options.totalPages)}})},setupEvents:function(){var b=this;this.$listContainer.find("li").each(function(){var c=a(this);return c.off(),c.hasClass(b.options.disabledClass)||c.hasClass(b.options.activeClass)?void c.on("click",!1):void c.click(function(a){!b.options.href&&a.preventDefault(),b.show(parseInt(c.data("page")))})})},makeHref:function(a){return this.options.href?this.options.href.replace(this.options.hrefVariable,a):"#"}},a.fn.twbsPagination=function(b){var c,e=Array.prototype.slice.call(arguments,1),g=a(this),h=g.data("twbs-pagination"),i="object"==typeof b&&b;return h||g.data("twbs-pagination",h=new f(this,i)),"string"==typeof b&&(c=h[b].apply(h,e)),c===d?g:c},a.fn.twbsPagination.defaults={totalPages:0,startPage:1,visiblePages:5,initiateStartPageClick:!0,href:!1,hrefVariable:"{{number}}",first:"First",prev:"Previous",next:"Next",last:"Last",loop:!1,onPageClick:null,paginationClass:"pagination",nextClass:"next",prevClass:"prev",lastClass:"last",firstClass:"first",pageClass:"page",activeClass:"active",disabledClass:"disabled"},a.fn.twbsPagination.Constructor=f,a.fn.twbsPagination.noConflict=function(){return a.fn.twbsPagination=e,this}}(window.jQuery,window,document); -/*!*************************************************** -* mark.js v8.11.1 -* https://markjs.io/ -* Copyright (c) 2014–2018, Julian Kühnel -* Released under the MIT license https://git.io/vwTVl -*****************************************************/ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],t):e.Mark=t(e.jQuery)}(this,function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},r=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;n(this,e),this.ctx=t,this.iframes=r,this.exclude=i,this.iframesTimeout=o}return r(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach(function(t){var n=e.filter(function(e){return e.contains(t)}).length>0;-1!==e.indexOf(t)||n||e.push(t)}),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var i=e.contentWindow;if(r=i.document,!i||!r)throw new Error("iframe inaccessible")}catch(e){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t=e.getAttribute("src").trim();return"about:blank"===e.contentWindow.location.href&&"about:blank"!==t&&t}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,i=!1,o=null,a=function a(){if(!i){i=!0,clearTimeout(o);try{r.isIframeBlank(e)||(e.removeEventListener("load",a),r.getIframeContents(e,t,n))}catch(e){n()}}};e.addEventListener("load",a),o=setTimeout(a,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(e){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,function(){return!0},function(e){r++,n.waitForIframes(e.querySelector("html"),function(){--r||t()})},function(e){e||t()})}},{key:"forEachIframe",value:function(t,n,r){var i=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=t.querySelectorAll("iframe"),s=a.length,c=0;a=Array.prototype.slice.call(a);var u=function(){--s<=0&&o(c)};s||u(),a.forEach(function(t){e.matches(t,i.exclude)?u():i.onIframeReady(t,function(e){n(t)&&(c++,r(e)),u()},u)})}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:null===t?e.nextNode():e.nextNode()&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var i=!1,o=!1;return r.forEach(function(e,t){e.val===n&&(i=t,o=e.handled)}),this.compareNodeIframe(e,t,n)?(!1!==i||o?!1===i||o||(r[i].handled=!0):r.push({val:n,handled:!0}),!0):(!1===i&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var i=this;e.forEach(function(e){e.handled||i.getIframeContents(e.val,function(e){i.createInstanceOnIframe(e).forEachNode(t,n,r)})})}},{key:"iterateThroughNodes",value:function(e,t,n,r,i){for(var o,a=this,s=this.createIterator(t,e,r),c=[],u=[],l=void 0,h=void 0;void 0,o=a.getIteratorNode(s),h=o.prevNode,l=o.node;)this.iframes&&this.forEachIframe(t,function(e){return a.checkIframeFilter(l,h,e,c)},function(t){a.createInstanceOnIframe(t).forEachNode(e,function(e){return u.push(e)},r)}),u.push(l);u.forEach(function(e){n(e)}),this.iframes&&this.handleOpenIframes(c,e,n,r),i()}},{key:"forEachNode",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},o=this.getContexts(),a=o.length;a||i(),o.forEach(function(o){var s=function(){r.iterateThroughNodes(e,o,t,n,function(){--a<=0&&i()})};r.iframes?r.waitForIframes(o,s):s()})}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var i=!1;return n.every(function(t){return!r.call(e,t)||(i=!0,!1)}),i}return!1}}]),e}(),a=function(){function e(t){n(this,e),this.ctx=t,this.ie=!1;var r=window.navigator.userAgent;(r.indexOf("MSIE")>-1||r.indexOf("Trident")>-1)&&(this.ie=!0)}return r(e,[{key:"log",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":t(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+e)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var i in t)if(t.hasOwnProperty(i)){var o=t[i],a="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(i):this.escapeStr(i),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o);""!==a&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(a)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynomyms(a)+"|"+this.processSynomyms(s)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,function(e){return"\\"===e.charAt(0)?"?":""})).replace(/(?:\\)*\*/g,function(e){return"\\"===e.charAt(0)?"*":""})}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"})}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"],r=[];return e.split("").forEach(function(i){n.every(function(n){if(-1!==n.indexOf(i)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0})}),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n=this.opt.accuracy,r="string"==typeof n?n:n.value,i="";switch(("string"==typeof n?[]:n.limiters).forEach(function(e){i+="|"+t.escapeStr(e)}),r){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿")))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach(function(e){t.opt.separateWordSearch?e.split(" ").forEach(function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)}):e.trim()&&-1===n.indexOf(e)&&n.push(e)}),{keywords:n.sort(function(e,t){return t.length-e.length}),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort(function(e,t){return e.start-t.start}).forEach(function(e){var i=t.callNoMatchOnInvalidRanges(e,r),o=i.start,a=i.end;i.valid&&(e.start=o,e.length=a-o,n.push(e),r=a)}),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,i=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?i=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:i}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,i=!0,o=n.length,a=t-o,s=parseInt(e.start,10)-a;return(r=(s=s>o?o:s)+parseInt(e.length,10))>o&&(r=o,this.log("End range automatically set to the max value of "+o)),s<0||r-s<0||s>o||r>o?(i=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(i=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:i}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})},function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},function(){e({value:n,nodes:r})})}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",i=e.splitText(t),o=i.splitText(n-t),a=document.createElement(r);return a.setAttribute("data-markjs","true"),this.opt.className&&a.setAttribute("class",this.opt.className),a.textContent=i.textContent,i.parentNode.replaceChild(a,i),o}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,i){var o=this;e.nodes.every(function(a,s){var c=e.nodes[s+1];if(void 0===c||c.start>t){if(!r(a.node))return!1;var u=t-a.start,l=(n>a.end?a.end:n)-a.start,h=e.value.substr(0,a.start),f=e.value.substr(l+a.start);if(a.node=o.wrapRangeInTextNode(a.node,u,l),e.value=h+f,e.nodes.forEach(function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=l),e.nodes[n].end-=l)}),n-=l,i(a.node.previousSibling,a.start),!(n>a.end))return!1;t=a.end}return!0})}},{key:"wrapMatches",value:function(e,t,n,r,i){var o=this,a=0===t?0:t+1;this.getTextNodes(function(t){t.nodes.forEach(function(t){t=t.node;for(var i=void 0;null!==(i=e.exec(t.textContent))&&""!==i[a];)if(n(i[a],t)){var s=i.index;if(0!==a)for(var c=1;c.anchorjs-link,.anchorjs-link:focus{opacity:1}",e.sheet.cssRules.length),e.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",e.sheet.cssRules.length),e.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',e.sheet.cssRules.length)}(),t=document.querySelectorAll("[id]"),o=[].map.call(t,function(A){return A.id}),i=0;i\]./()*\\\n\t\b\v\u00A0]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),t=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||t||!1}}}); -// @license-end \ No newline at end of file diff --git a/RWSDocsTemplate/styles/lunr.js b/RWSDocsTemplate/styles/lunr.js deleted file mode 100644 index 35dae2f..0000000 --- a/RWSDocsTemplate/styles/lunr.js +++ /dev/null @@ -1,2924 +0,0 @@ -/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.1.2 - * Copyright (C) 2017 Oliver Nightingale - * @license MIT - */ - -;(function(){ - -/** - * A convenience function for configuring and constructing - * a new lunr Index. - * - * A lunr.Builder instance is created and the pipeline setup - * with a trimmer, stop word filter and stemmer. - * - * This builder object is yielded to the configuration function - * that is passed as a parameter, allowing the list of fields - * and other builder parameters to be customised. - * - * All documents _must_ be added within the passed config function. - * - * @example - * var idx = lunr(function () { - * this.field('title') - * this.field('body') - * this.ref('id') - * - * documents.forEach(function (doc) { - * this.add(doc) - * }, this) - * }) - * - * @see {@link lunr.Builder} - * @see {@link lunr.Pipeline} - * @see {@link lunr.trimmer} - * @see {@link lunr.stopWordFilter} - * @see {@link lunr.stemmer} - * @namespace {function} lunr - */ -var lunr = function (config) { - var builder = new lunr.Builder - - builder.pipeline.add( - lunr.trimmer, - lunr.stopWordFilter, - lunr.stemmer - ) - - builder.searchPipeline.add( - lunr.stemmer - ) - - config.call(builder, builder) - return builder.build() -} - -lunr.version = "2.1.2" -/*! - * lunr.utils - * Copyright (C) 2017 Oliver Nightingale - */ - -/** - * A namespace containing utils for the rest of the lunr library - */ -lunr.utils = {} - -/** - * Print a warning message to the console. - * - * @param {String} message The message to be printed. - * @memberOf Utils - */ -lunr.utils.warn = (function (global) { - /* eslint-disable no-console */ - return function (message) { - if (global.console && console.warn) { - console.warn(message) - } - } - /* eslint-enable no-console */ -})(this) - -/** - * Convert an object to a string. - * - * In the case of `null` and `undefined` the function returns - * the empty string, in all other cases the result of calling - * `toString` on the passed object is returned. - * - * @param {Any} obj The object to convert to a string. - * @return {String} string representation of the passed object. - * @memberOf Utils - */ -lunr.utils.asString = function (obj) { - if (obj === void 0 || obj === null) { - return "" - } else { - return obj.toString() - } -} -lunr.FieldRef = function (docRef, fieldName) { - this.docRef = docRef - this.fieldName = fieldName - this._stringValue = fieldName + lunr.FieldRef.joiner + docRef -} - -lunr.FieldRef.joiner = "/" - -lunr.FieldRef.fromString = function (s) { - var n = s.indexOf(lunr.FieldRef.joiner) - - if (n === -1) { - throw "malformed field ref string" - } - - var fieldRef = s.slice(0, n), - docRef = s.slice(n + 1) - - return new lunr.FieldRef (docRef, fieldRef) -} - -lunr.FieldRef.prototype.toString = function () { - return this._stringValue -} -/** - * A function to calculate the inverse document frequency for - * a posting. This is shared between the builder and the index - * - * @private - * @param {object} posting - The posting for a given term - * @param {number} documentCount - The total number of documents. - */ -lunr.idf = function (posting, documentCount) { - var documentsWithTerm = 0 - - for (var fieldName in posting) { - if (fieldName == '_index') continue // Ignore the term index, its not a field - documentsWithTerm += Object.keys(posting[fieldName]).length - } - - var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5) - - return Math.log(1 + Math.abs(x)) -} - -/** - * A token wraps a string representation of a token - * as it is passed through the text processing pipeline. - * - * @constructor - * @param {string} [str=''] - The string token being wrapped. - * @param {object} [metadata={}] - Metadata associated with this token. - */ -lunr.Token = function (str, metadata) { - this.str = str || "" - this.metadata = metadata || {} -} - -/** - * Returns the token string that is being wrapped by this object. - * - * @returns {string} - */ -lunr.Token.prototype.toString = function () { - return this.str -} - -/** - * A token update function is used when updating or optionally - * when cloning a token. - * - * @callback lunr.Token~updateFunction - * @param {string} str - The string representation of the token. - * @param {Object} metadata - All metadata associated with this token. - */ - -/** - * Applies the given function to the wrapped string token. - * - * @example - * token.update(function (str, metadata) { - * return str.toUpperCase() - * }) - * - * @param {lunr.Token~updateFunction} fn - A function to apply to the token string. - * @returns {lunr.Token} - */ -lunr.Token.prototype.update = function (fn) { - this.str = fn(this.str, this.metadata) - return this -} - -/** - * Creates a clone of this token. Optionally a function can be - * applied to the cloned token. - * - * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token. - * @returns {lunr.Token} - */ -lunr.Token.prototype.clone = function (fn) { - fn = fn || function (s) { return s } - return new lunr.Token (fn(this.str, this.metadata), this.metadata) -} -/*! - * lunr.tokenizer - * Copyright (C) 2017 Oliver Nightingale - */ - -/** - * A function for splitting a string into tokens ready to be inserted into - * the search index. Uses `lunr.tokenizer.separator` to split strings, change - * the value of this property to change how strings are split into tokens. - * - * This tokenizer will convert its parameter to a string by calling `toString` and - * then will split this string on the character in `lunr.tokenizer.separator`. - * Arrays will have their elements converted to strings and wrapped in a lunr.Token. - * - * @static - * @param {?(string|object|object[])} obj - The object to convert into tokens - * @returns {lunr.Token[]} - */ -lunr.tokenizer = function (obj) { - if (obj == null || obj == undefined) { - return [] - } - - if (Array.isArray(obj)) { - return obj.map(function (t) { - return new lunr.Token(lunr.utils.asString(t).toLowerCase()) - }) - } - - var str = obj.toString().trim().toLowerCase(), - len = str.length, - tokens = [] - - for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { - var char = str.charAt(sliceEnd), - sliceLength = sliceEnd - sliceStart - - if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) { - - if (sliceLength > 0) { - tokens.push( - new lunr.Token (str.slice(sliceStart, sliceEnd), { - position: [sliceStart, sliceLength], - index: tokens.length - }) - ) - } - - sliceStart = sliceEnd + 1 - } - - } - - return tokens -} - -/** - * The separator used to split a string into tokens. Override this property to change the behaviour of - * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens. - * - * @static - * @see lunr.tokenizer - */ -lunr.tokenizer.separator = /[\s\-]+/ -/*! - * lunr.Pipeline - * Copyright (C) 2017 Oliver Nightingale - */ - -/** - * lunr.Pipelines maintain an ordered list of functions to be applied to all - * tokens in documents entering the search index and queries being ran against - * the index. - * - * An instance of lunr.Index created with the lunr shortcut will contain a - * pipeline with a stop word filter and an English language stemmer. Extra - * functions can be added before or after either of these functions or these - * default functions can be removed. - * - * When run the pipeline will call each function in turn, passing a token, the - * index of that token in the original list of all tokens and finally a list of - * all the original tokens. - * - * The output of functions in the pipeline will be passed to the next function - * in the pipeline. To exclude a token from entering the index the function - * should return undefined, the rest of the pipeline will not be called with - * this token. - * - * For serialisation of pipelines to work, all functions used in an instance of - * a pipeline should be registered with lunr.Pipeline. Registered functions can - * then be loaded. If trying to load a serialised pipeline that uses functions - * that are not registered an error will be thrown. - * - * If not planning on serialising the pipeline then registering pipeline functions - * is not necessary. - * - * @constructor - */ -lunr.Pipeline = function () { - this._stack = [] -} - -lunr.Pipeline.registeredFunctions = Object.create(null) - -/** - * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token - * string as well as all known metadata. A pipeline function can mutate the token string - * or mutate (or add) metadata for a given token. - * - * A pipeline function can indicate that the passed token should be discarded by returning - * null. This token will not be passed to any downstream pipeline functions and will not be - * added to the index. - * - * Multiple tokens can be returned by returning an array of tokens. Each token will be passed - * to any downstream pipeline functions and all will returned tokens will be added to the index. - * - * Any number of pipeline functions may be chained together using a lunr.Pipeline. - * - * @interface lunr.PipelineFunction - * @param {lunr.Token} token - A token from the document being processed. - * @param {number} i - The index of this token in the complete list of tokens for this document/field. - * @param {lunr.Token[]} tokens - All tokens for this document/field. - * @returns {(?lunr.Token|lunr.Token[])} - */ - -/** - * Register a function with the pipeline. - * - * Functions that are used in the pipeline should be registered if the pipeline - * needs to be serialised, or a serialised pipeline needs to be loaded. - * - * Registering a function does not add it to a pipeline, functions must still be - * added to instances of the pipeline for them to be used when running a pipeline. - * - * @param {lunr.PipelineFunction} fn - The function to check for. - * @param {String} label - The label to register this function with - */ -lunr.Pipeline.registerFunction = function (fn, label) { - if (label in this.registeredFunctions) { - lunr.utils.warn('Overwriting existing registered function: ' + label) - } - - fn.label = label - lunr.Pipeline.registeredFunctions[fn.label] = fn -} - -/** - * Warns if the function is not registered as a Pipeline function. - * - * @param {lunr.PipelineFunction} fn - The function to check for. - * @private - */ -lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) { - var isRegistered = fn.label && (fn.label in this.registeredFunctions) - - if (!isRegistered) { - lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn) - } -} - -/** - * Loads a previously serialised pipeline. - * - * All functions to be loaded must already be registered with lunr.Pipeline. - * If any function from the serialised data has not been registered then an - * error will be thrown. - * - * @param {Object} serialised - The serialised pipeline to load. - * @returns {lunr.Pipeline} - */ -lunr.Pipeline.load = function (serialised) { - var pipeline = new lunr.Pipeline - - serialised.forEach(function (fnName) { - var fn = lunr.Pipeline.registeredFunctions[fnName] - - if (fn) { - pipeline.add(fn) - } else { - throw new Error('Cannot load unregistered function: ' + fnName) - } - }) - - return pipeline -} - -/** - * Adds new functions to the end of the pipeline. - * - * Logs a warning if the function has not been registered. - * - * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline. - */ -lunr.Pipeline.prototype.add = function () { - var fns = Array.prototype.slice.call(arguments) - - fns.forEach(function (fn) { - lunr.Pipeline.warnIfFunctionNotRegistered(fn) - this._stack.push(fn) - }, this) -} - -/** - * Adds a single function after a function that already exists in the - * pipeline. - * - * Logs a warning if the function has not been registered. - * - * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. - * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. - */ -lunr.Pipeline.prototype.after = function (existingFn, newFn) { - lunr.Pipeline.warnIfFunctionNotRegistered(newFn) - - var pos = this._stack.indexOf(existingFn) - if (pos == -1) { - throw new Error('Cannot find existingFn') - } - - pos = pos + 1 - this._stack.splice(pos, 0, newFn) -} - -/** - * Adds a single function before a function that already exists in the - * pipeline. - * - * Logs a warning if the function has not been registered. - * - * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. - * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. - */ -lunr.Pipeline.prototype.before = function (existingFn, newFn) { - lunr.Pipeline.warnIfFunctionNotRegistered(newFn) - - var pos = this._stack.indexOf(existingFn) - if (pos == -1) { - throw new Error('Cannot find existingFn') - } - - this._stack.splice(pos, 0, newFn) -} - -/** - * Removes a function from the pipeline. - * - * @param {lunr.PipelineFunction} fn The function to remove from the pipeline. - */ -lunr.Pipeline.prototype.remove = function (fn) { - var pos = this._stack.indexOf(fn) - if (pos == -1) { - return - } - - this._stack.splice(pos, 1) -} - -/** - * Runs the current list of functions that make up the pipeline against the - * passed tokens. - * - * @param {Array} tokens The tokens to run through the pipeline. - * @returns {Array} - */ -lunr.Pipeline.prototype.run = function (tokens) { - var stackLength = this._stack.length - - for (var i = 0; i < stackLength; i++) { - var fn = this._stack[i] - - tokens = tokens.reduce(function (memo, token, j) { - var result = fn(token, j, tokens) - - if (result === void 0 || result === '') return memo - - return memo.concat(result) - }, []) - } - - return tokens -} - -/** - * Convenience method for passing a string through a pipeline and getting - * strings out. This method takes care of wrapping the passed string in a - * token and mapping the resulting tokens back to strings. - * - * @param {string} str - The string to pass through the pipeline. - * @returns {string[]} - */ -lunr.Pipeline.prototype.runString = function (str) { - var token = new lunr.Token (str) - - return this.run([token]).map(function (t) { - return t.toString() - }) -} - -/** - * Resets the pipeline by removing any existing processors. - * - */ -lunr.Pipeline.prototype.reset = function () { - this._stack = [] -} - -/** - * Returns a representation of the pipeline ready for serialisation. - * - * Logs a warning if the function has not been registered. - * - * @returns {Array} - */ -lunr.Pipeline.prototype.toJSON = function () { - return this._stack.map(function (fn) { - lunr.Pipeline.warnIfFunctionNotRegistered(fn) - - return fn.label - }) -} -/*! - * lunr.Vector - * Copyright (C) 2017 Oliver Nightingale - */ - -/** - * A vector is used to construct the vector space of documents and queries. These - * vectors support operations to determine the similarity between two documents or - * a document and a query. - * - * Normally no parameters are required for initializing a vector, but in the case of - * loading a previously dumped vector the raw elements can be provided to the constructor. - * - * For performance reasons vectors are implemented with a flat array, where an elements - * index is immediately followed by its value. E.g. [index, value, index, value]. This - * allows the underlying array to be as sparse as possible and still offer decent - * performance when being used for vector calculations. - * - * @constructor - * @param {Number[]} [elements] - The flat list of element index and element value pairs. - */ -lunr.Vector = function (elements) { - this._magnitude = 0 - this.elements = elements || [] -} - - -/** - * Calculates the position within the vector to insert a given index. - * - * This is used internally by insert and upsert. If there are duplicate indexes then - * the position is returned as if the value for that index were to be updated, but it - * is the callers responsibility to check whether there is a duplicate at that index - * - * @param {Number} insertIdx - The index at which the element should be inserted. - * @returns {Number} - */ -lunr.Vector.prototype.positionForIndex = function (index) { - // For an empty vector the tuple can be inserted at the beginning - if (this.elements.length == 0) { - return 0 - } - - var start = 0, - end = this.elements.length / 2, - sliceLength = end - start, - pivotPoint = Math.floor(sliceLength / 2), - pivotIndex = this.elements[pivotPoint * 2] - - while (sliceLength > 1) { - if (pivotIndex < index) { - start = pivotPoint - } - - if (pivotIndex > index) { - end = pivotPoint - } - - if (pivotIndex == index) { - break - } - - sliceLength = end - start - pivotPoint = start + Math.floor(sliceLength / 2) - pivotIndex = this.elements[pivotPoint * 2] - } - - if (pivotIndex == index) { - return pivotPoint * 2 - } - - if (pivotIndex > index) { - return pivotPoint * 2 - } - - if (pivotIndex < index) { - return (pivotPoint + 1) * 2 - } -} - -/** - * Inserts an element at an index within the vector. - * - * Does not allow duplicates, will throw an error if there is already an entry - * for this index. - * - * @param {Number} insertIdx - The index at which the element should be inserted. - * @param {Number} val - The value to be inserted into the vector. - */ -lunr.Vector.prototype.insert = function (insertIdx, val) { - this.upsert(insertIdx, val, function () { - throw "duplicate index" - }) -} - -/** - * Inserts or updates an existing index within the vector. - * - * @param {Number} insertIdx - The index at which the element should be inserted. - * @param {Number} val - The value to be inserted into the vector. - * @param {function} fn - A function that is called for updates, the existing value and the - * requested value are passed as arguments - */ -lunr.Vector.prototype.upsert = function (insertIdx, val, fn) { - this._magnitude = 0 - var position = this.positionForIndex(insertIdx) - - if (this.elements[position] == insertIdx) { - this.elements[position + 1] = fn(this.elements[position + 1], val) - } else { - this.elements.splice(position, 0, insertIdx, val) - } -} - -/** - * Calculates the magnitude of this vector. - * - * @returns {Number} - */ -lunr.Vector.prototype.magnitude = function () { - if (this._magnitude) return this._magnitude - - var sumOfSquares = 0, - elementsLength = this.elements.length - - for (var i = 1; i < elementsLength; i += 2) { - var val = this.elements[i] - sumOfSquares += val * val - } - - return this._magnitude = Math.sqrt(sumOfSquares) -} - -/** - * Calculates the dot product of this vector and another vector. - * - * @param {lunr.Vector} otherVector - The vector to compute the dot product with. - * @returns {Number} - */ -lunr.Vector.prototype.dot = function (otherVector) { - var dotProduct = 0, - a = this.elements, b = otherVector.elements, - aLen = a.length, bLen = b.length, - aVal = 0, bVal = 0, - i = 0, j = 0 - - while (i < aLen && j < bLen) { - aVal = a[i], bVal = b[j] - if (aVal < bVal) { - i += 2 - } else if (aVal > bVal) { - j += 2 - } else if (aVal == bVal) { - dotProduct += a[i + 1] * b[j + 1] - i += 2 - j += 2 - } - } - - return dotProduct -} - -/** - * Calculates the cosine similarity between this vector and another - * vector. - * - * @param {lunr.Vector} otherVector - The other vector to calculate the - * similarity with. - * @returns {Number} - */ -lunr.Vector.prototype.similarity = function (otherVector) { - return this.dot(otherVector) / (this.magnitude() * otherVector.magnitude()) -} - -/** - * Converts the vector to an array of the elements within the vector. - * - * @returns {Number[]} - */ -lunr.Vector.prototype.toArray = function () { - var output = new Array (this.elements.length / 2) - - for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) { - output[j] = this.elements[i] - } - - return output -} - -/** - * A JSON serializable representation of the vector. - * - * @returns {Number[]} - */ -lunr.Vector.prototype.toJSON = function () { - return this.elements -} -/* eslint-disable */ -/*! - * lunr.stemmer - * Copyright (C) 2017 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - */ - -/** - * lunr.stemmer is an english language stemmer, this is a JavaScript - * implementation of the PorterStemmer taken from http://tartarus.org/~martin - * - * @static - * @implements {lunr.PipelineFunction} - * @param {lunr.Token} token - The string to stem - * @returns {lunr.Token} - * @see {@link lunr.Pipeline} - */ -lunr.stemmer = (function(){ - var step2list = { - "ational" : "ate", - "tional" : "tion", - "enci" : "ence", - "anci" : "ance", - "izer" : "ize", - "bli" : "ble", - "alli" : "al", - "entli" : "ent", - "eli" : "e", - "ousli" : "ous", - "ization" : "ize", - "ation" : "ate", - "ator" : "ate", - "alism" : "al", - "iveness" : "ive", - "fulness" : "ful", - "ousness" : "ous", - "aliti" : "al", - "iviti" : "ive", - "biliti" : "ble", - "logi" : "log" - }, - - step3list = { - "icate" : "ic", - "ative" : "", - "alize" : "al", - "iciti" : "ic", - "ical" : "ic", - "ful" : "", - "ness" : "" - }, - - c = "[^aeiou]", // consonant - v = "[aeiouy]", // vowel - C = c + "[^aeiouy]*", // consonant sequence - V = v + "[aeiou]*", // vowel sequence - - mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 - meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 - mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 - s_v = "^(" + C + ")?" + v; // vowel in stem - - var re_mgr0 = new RegExp(mgr0); - var re_mgr1 = new RegExp(mgr1); - var re_meq1 = new RegExp(meq1); - var re_s_v = new RegExp(s_v); - - var re_1a = /^(.+?)(ss|i)es$/; - var re2_1a = /^(.+?)([^s])s$/; - var re_1b = /^(.+?)eed$/; - var re2_1b = /^(.+?)(ed|ing)$/; - var re_1b_2 = /.$/; - var re2_1b_2 = /(at|bl|iz)$/; - var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$"); - var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - - var re_1c = /^(.+?[^aeiou])y$/; - var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - - var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - - var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - var re2_4 = /^(.+?)(s|t)(ion)$/; - - var re_5 = /^(.+?)e$/; - var re_5_1 = /ll$/; - var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - - var porterStemmer = function porterStemmer(w) { - var stem, - suffix, - firstch, - re, - re2, - re3, - re4; - - if (w.length < 3) { return w; } - - firstch = w.substr(0,1); - if (firstch == "y") { - w = firstch.toUpperCase() + w.substr(1); - } - - // Step 1a - re = re_1a - re2 = re2_1a; - - if (re.test(w)) { w = w.replace(re,"$1$2"); } - else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } - - // Step 1b - re = re_1b; - re2 = re2_1b; - if (re.test(w)) { - var fp = re.exec(w); - re = re_mgr0; - if (re.test(fp[1])) { - re = re_1b_2; - w = w.replace(re,""); - } - } else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = re_s_v; - if (re2.test(stem)) { - w = stem; - re2 = re2_1b_2; - re3 = re3_1b_2; - re4 = re4_1b_2; - if (re2.test(w)) { w = w + "e"; } - else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); } - else if (re4.test(w)) { w = w + "e"; } - } - } - - // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say) - re = re_1c; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - w = stem + "i"; - } - - // Step 2 - re = re_2; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = re_mgr0; - if (re.test(stem)) { - w = stem + step2list[suffix]; - } - } - - // Step 3 - re = re_3; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = re_mgr0; - if (re.test(stem)) { - w = stem + step3list[suffix]; - } - } - - // Step 4 - re = re_4; - re2 = re2_4; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = re_mgr1; - if (re.test(stem)) { - w = stem; - } - } else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = re_mgr1; - if (re2.test(stem)) { - w = stem; - } - } - - // Step 5 - re = re_5; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = re_mgr1; - re2 = re_meq1; - re3 = re3_5; - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { - w = stem; - } - } - - re = re_5_1; - re2 = re_mgr1; - if (re.test(w) && re2.test(w)) { - re = re_1b_2; - w = w.replace(re,""); - } - - // and turn initial Y back to y - - if (firstch == "y") { - w = firstch.toLowerCase() + w.substr(1); - } - - return w; - }; - - return function (token) { - return token.update(porterStemmer); - } -})(); - -lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer') -/*! - * lunr.stopWordFilter - * Copyright (C) 2017 Oliver Nightingale - */ - -/** - * lunr.generateStopWordFilter builds a stopWordFilter function from the provided - * list of stop words. - * - * The built in lunr.stopWordFilter is built using this generator and can be used - * to generate custom stopWordFilters for applications or non English languages. - * - * @param {Array} token The token to pass through the filter - * @returns {lunr.PipelineFunction} - * @see lunr.Pipeline - * @see lunr.stopWordFilter - */ -lunr.generateStopWordFilter = function (stopWords) { - var words = stopWords.reduce(function (memo, stopWord) { - memo[stopWord] = stopWord - return memo - }, {}) - - return function (token) { - if (token && words[token.toString()] !== token.toString()) return token - } -} - -/** - * lunr.stopWordFilter is an English language stop word list filter, any words - * contained in the list will not be passed through the filter. - * - * This is intended to be used in the Pipeline. If the token does not pass the - * filter then undefined will be returned. - * - * @implements {lunr.PipelineFunction} - * @params {lunr.Token} token - A token to check for being a stop word. - * @returns {lunr.Token} - * @see {@link lunr.Pipeline} - */ -lunr.stopWordFilter = lunr.generateStopWordFilter([ - 'a', - 'able', - 'about', - 'across', - 'after', - 'all', - 'almost', - 'also', - 'am', - 'among', - 'an', - 'and', - 'any', - 'are', - 'as', - 'at', - 'be', - 'because', - 'been', - 'but', - 'by', - 'can', - 'cannot', - 'could', - 'dear', - 'did', - 'do', - 'does', - 'either', - 'else', - 'ever', - 'every', - 'for', - 'from', - 'get', - 'got', - 'had', - 'has', - 'have', - 'he', - 'her', - 'hers', - 'him', - 'his', - 'how', - 'however', - 'i', - 'if', - 'in', - 'into', - 'is', - 'it', - 'its', - 'just', - 'least', - 'let', - 'like', - 'likely', - 'may', - 'me', - 'might', - 'most', - 'must', - 'my', - 'neither', - 'no', - 'nor', - 'not', - 'of', - 'off', - 'often', - 'on', - 'only', - 'or', - 'other', - 'our', - 'own', - 'rather', - 'said', - 'say', - 'says', - 'she', - 'should', - 'since', - 'so', - 'some', - 'than', - 'that', - 'the', - 'their', - 'them', - 'then', - 'there', - 'these', - 'they', - 'this', - 'tis', - 'to', - 'too', - 'twas', - 'us', - 'wants', - 'was', - 'we', - 'were', - 'what', - 'when', - 'where', - 'which', - 'while', - 'who', - 'whom', - 'why', - 'will', - 'with', - 'would', - 'yet', - 'you', - 'your' -]) - -lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') -/*! - * lunr.trimmer - * Copyright (C) 2017 Oliver Nightingale - */ - -/** - * lunr.trimmer is a pipeline function for trimming non word - * characters from the beginning and end of tokens before they - * enter the index. - * - * This implementation may not work correctly for non latin - * characters and should either be removed or adapted for use - * with languages with non-latin characters. - * - * @static - * @implements {lunr.PipelineFunction} - * @param {lunr.Token} token The token to pass through the filter - * @returns {lunr.Token} - * @see lunr.Pipeline - */ -lunr.trimmer = function (token) { - return token.update(function (s) { - return s.replace(/^\W+/, '').replace(/\W+$/, '') - }) -} - -lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') -/*! - * lunr.TokenSet - * Copyright (C) 2017 Oliver Nightingale - */ - -/** - * A token set is used to store the unique list of all tokens - * within an index. Token sets are also used to represent an - * incoming query to the index, this query token set and index - * token set are then intersected to find which tokens to look - * up in the inverted index. - * - * A token set can hold multiple tokens, as in the case of the - * index token set, or it can hold a single token as in the - * case of a simple query token set. - * - * Additionally token sets are used to perform wildcard matching. - * Leading, contained and trailing wildcards are supported, and - * from this edit distance matching can also be provided. - * - * Token sets are implemented as a minimal finite state automata, - * where both common prefixes and suffixes are shared between tokens. - * This helps to reduce the space used for storing the token set. - * - * @constructor - */ -lunr.TokenSet = function () { - this.final = false - this.edges = {} - this.id = lunr.TokenSet._nextId - lunr.TokenSet._nextId += 1 -} - -/** - * Keeps track of the next, auto increment, identifier to assign - * to a new tokenSet. - * - * TokenSets require a unique identifier to be correctly minimised. - * - * @private - */ -lunr.TokenSet._nextId = 1 - -/** - * Creates a TokenSet instance from the given sorted array of words. - * - * @param {String[]} arr - A sorted array of strings to create the set from. - * @returns {lunr.TokenSet} - * @throws Will throw an error if the input array is not sorted. - */ -lunr.TokenSet.fromArray = function (arr) { - var builder = new lunr.TokenSet.Builder - - for (var i = 0, len = arr.length; i < len; i++) { - builder.insert(arr[i]) - } - - builder.finish() - return builder.root -} - -/** - * Creates a token set from a query clause. - * - * @private - * @param {Object} clause - A single clause from lunr.Query. - * @param {string} clause.term - The query clause term. - * @param {number} [clause.editDistance] - The optional edit distance for the term. - * @returns {lunr.TokenSet} - */ -lunr.TokenSet.fromClause = function (clause) { - if ('editDistance' in clause) { - return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance) - } else { - return lunr.TokenSet.fromString(clause.term) - } -} - -/** - * Creates a token set representing a single string with a specified - * edit distance. - * - * Insertions, deletions, substitutions and transpositions are each - * treated as an edit distance of 1. - * - * Increasing the allowed edit distance will have a dramatic impact - * on the performance of both creating and intersecting these TokenSets. - * It is advised to keep the edit distance less than 3. - * - * @param {string} str - The string to create the token set from. - * @param {number} editDistance - The allowed edit distance to match. - * @returns {lunr.Vector} - */ -lunr.TokenSet.fromFuzzyString = function (str, editDistance) { - var root = new lunr.TokenSet - - var stack = [{ - node: root, - editsRemaining: editDistance, - str: str - }] - - while (stack.length) { - var frame = stack.pop() - - // no edit - if (frame.str.length > 0) { - var char = frame.str.charAt(0), - noEditNode - - if (char in frame.node.edges) { - noEditNode = frame.node.edges[char] - } else { - noEditNode = new lunr.TokenSet - frame.node.edges[char] = noEditNode - } - - if (frame.str.length == 1) { - noEditNode.final = true - } else { - stack.push({ - node: noEditNode, - editsRemaining: frame.editsRemaining, - str: frame.str.slice(1) - }) - } - } - - // deletion - // can only do a deletion if we have enough edits remaining - // and if there are characters left to delete in the string - if (frame.editsRemaining > 0 && frame.str.length > 1) { - var char = frame.str.charAt(1), - deletionNode - - if (char in frame.node.edges) { - deletionNode = frame.node.edges[char] - } else { - deletionNode = new lunr.TokenSet - frame.node.edges[char] = deletionNode - } - - if (frame.str.length <= 2) { - deletionNode.final = true - } else { - stack.push({ - node: deletionNode, - editsRemaining: frame.editsRemaining - 1, - str: frame.str.slice(2) - }) - } - } - - // deletion - // just removing the last character from the str - if (frame.editsRemaining > 0 && frame.str.length == 1) { - frame.node.final = true - } - - // substitution - // can only do a substitution if we have enough edits remaining - // and if there are characters left to substitute - if (frame.editsRemaining > 0 && frame.str.length >= 1) { - if ("*" in frame.node.edges) { - var substitutionNode = frame.node.edges["*"] - } else { - var substitutionNode = new lunr.TokenSet - frame.node.edges["*"] = substitutionNode - } - - if (frame.str.length == 1) { - substitutionNode.final = true - } else { - stack.push({ - node: substitutionNode, - editsRemaining: frame.editsRemaining - 1, - str: frame.str.slice(1) - }) - } - } - - // insertion - // can only do insertion if there are edits remaining - if (frame.editsRemaining > 0) { - if ("*" in frame.node.edges) { - var insertionNode = frame.node.edges["*"] - } else { - var insertionNode = new lunr.TokenSet - frame.node.edges["*"] = insertionNode - } - - if (frame.str.length == 0) { - insertionNode.final = true - } else { - stack.push({ - node: insertionNode, - editsRemaining: frame.editsRemaining - 1, - str: frame.str - }) - } - } - - // transposition - // can only do a transposition if there are edits remaining - // and there are enough characters to transpose - if (frame.editsRemaining > 0 && frame.str.length > 1) { - var charA = frame.str.charAt(0), - charB = frame.str.charAt(1), - transposeNode - - if (charB in frame.node.edges) { - transposeNode = frame.node.edges[charB] - } else { - transposeNode = new lunr.TokenSet - frame.node.edges[charB] = transposeNode - } - - if (frame.str.length == 1) { - transposeNode.final = true - } else { - stack.push({ - node: transposeNode, - editsRemaining: frame.editsRemaining - 1, - str: charA + frame.str.slice(2) - }) - } - } - } - - return root -} - -/** - * Creates a TokenSet from a string. - * - * The string may contain one or more wildcard characters (*) - * that will allow wildcard matching when intersecting with - * another TokenSet. - * - * @param {string} str - The string to create a TokenSet from. - * @returns {lunr.TokenSet} - */ -lunr.TokenSet.fromString = function (str) { - var node = new lunr.TokenSet, - root = node, - wildcardFound = false - - /* - * Iterates through all characters within the passed string - * appending a node for each character. - * - * As soon as a wildcard character is found then a self - * referencing edge is introduced to continually match - * any number of any characters. - */ - for (var i = 0, len = str.length; i < len; i++) { - var char = str[i], - final = (i == len - 1) - - if (char == "*") { - wildcardFound = true - node.edges[char] = node - node.final = final - - } else { - var next = new lunr.TokenSet - next.final = final - - node.edges[char] = next - node = next - - // TODO: is this needed anymore? - if (wildcardFound) { - node.edges["*"] = root - } - } - } - - return root -} - -/** - * Converts this TokenSet into an array of strings - * contained within the TokenSet. - * - * @returns {string[]} - */ -lunr.TokenSet.prototype.toArray = function () { - var words = [] - - var stack = [{ - prefix: "", - node: this - }] - - while (stack.length) { - var frame = stack.pop(), - edges = Object.keys(frame.node.edges), - len = edges.length - - if (frame.node.final) { - words.push(frame.prefix) - } - - for (var i = 0; i < len; i++) { - var edge = edges[i] - - stack.push({ - prefix: frame.prefix.concat(edge), - node: frame.node.edges[edge] - }) - } - } - - return words -} - -/** - * Generates a string representation of a TokenSet. - * - * This is intended to allow TokenSets to be used as keys - * in objects, largely to aid the construction and minimisation - * of a TokenSet. As such it is not designed to be a human - * friendly representation of the TokenSet. - * - * @returns {string} - */ -lunr.TokenSet.prototype.toString = function () { - // NOTE: Using Object.keys here as this.edges is very likely - // to enter 'hash-mode' with many keys being added - // - // avoiding a for-in loop here as it leads to the function - // being de-optimised (at least in V8). From some simple - // benchmarks the performance is comparable, but allowing - // V8 to optimize may mean easy performance wins in the future. - - if (this._str) { - return this._str - } - - var str = this.final ? '1' : '0', - labels = Object.keys(this.edges).sort(), - len = labels.length - - for (var i = 0; i < len; i++) { - var label = labels[i], - node = this.edges[label] - - str = str + label + node.id - } - - return str -} - -/** - * Returns a new TokenSet that is the intersection of - * this TokenSet and the passed TokenSet. - * - * This intersection will take into account any wildcards - * contained within the TokenSet. - * - * @param {lunr.TokenSet} b - An other TokenSet to intersect with. - * @returns {lunr.TokenSet} - */ -lunr.TokenSet.prototype.intersect = function (b) { - var output = new lunr.TokenSet, - frame = undefined - - var stack = [{ - qNode: b, - output: output, - node: this - }] - - while (stack.length) { - frame = stack.pop() - - // NOTE: As with the #toString method, we are using - // Object.keys and a for loop instead of a for-in loop - // as both of these objects enter 'hash' mode, causing - // the function to be de-optimised in V8 - var qEdges = Object.keys(frame.qNode.edges), - qLen = qEdges.length, - nEdges = Object.keys(frame.node.edges), - nLen = nEdges.length - - for (var q = 0; q < qLen; q++) { - var qEdge = qEdges[q] - - for (var n = 0; n < nLen; n++) { - var nEdge = nEdges[n] - - if (nEdge == qEdge || qEdge == '*') { - var node = frame.node.edges[nEdge], - qNode = frame.qNode.edges[qEdge], - final = node.final && qNode.final, - next = undefined - - if (nEdge in frame.output.edges) { - // an edge already exists for this character - // no need to create a new node, just set the finality - // bit unless this node is already final - next = frame.output.edges[nEdge] - next.final = next.final || final - - } else { - // no edge exists yet, must create one - // set the finality bit and insert it - // into the output - next = new lunr.TokenSet - next.final = final - frame.output.edges[nEdge] = next - } - - stack.push({ - qNode: qNode, - output: next, - node: node - }) - } - } - } - } - - return output -} -lunr.TokenSet.Builder = function () { - this.previousWord = "" - this.root = new lunr.TokenSet - this.uncheckedNodes = [] - this.minimizedNodes = {} -} - -lunr.TokenSet.Builder.prototype.insert = function (word) { - var node, - commonPrefix = 0 - - if (word < this.previousWord) { - throw new Error ("Out of order word insertion") - } - - for (var i = 0; i < word.length && i < this.previousWord.length; i++) { - if (word[i] != this.previousWord[i]) break - commonPrefix++ - } - - this.minimize(commonPrefix) - - if (this.uncheckedNodes.length == 0) { - node = this.root - } else { - node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child - } - - for (var i = commonPrefix; i < word.length; i++) { - var nextNode = new lunr.TokenSet, - char = word[i] - - node.edges[char] = nextNode - - this.uncheckedNodes.push({ - parent: node, - char: char, - child: nextNode - }) - - node = nextNode - } - - node.final = true - this.previousWord = word -} - -lunr.TokenSet.Builder.prototype.finish = function () { - this.minimize(0) -} - -lunr.TokenSet.Builder.prototype.minimize = function (downTo) { - for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) { - var node = this.uncheckedNodes[i], - childKey = node.child.toString() - - if (childKey in this.minimizedNodes) { - node.parent.edges[node.char] = this.minimizedNodes[childKey] - } else { - // Cache the key for this node since - // we know it can't change anymore - node.child._str = childKey - - this.minimizedNodes[childKey] = node.child - } - - this.uncheckedNodes.pop() - } -} -/*! - * lunr.Index - * Copyright (C) 2017 Oliver Nightingale - */ - -/** - * An index contains the built index of all documents and provides a query interface - * to the index. - * - * Usually instances of lunr.Index will not be created using this constructor, instead - * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be - * used to load previously built and serialized indexes. - * - * @constructor - * @param {Object} attrs - The attributes of the built search index. - * @param {Object} attrs.invertedIndex - An index of term/field to document reference. - * @param {Object} attrs.documentVectors - Document vectors keyed by document reference. - * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens. - * @param {string[]} attrs.fields - The names of indexed document fields. - * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms. - */ -lunr.Index = function (attrs) { - this.invertedIndex = attrs.invertedIndex - this.fieldVectors = attrs.fieldVectors - this.tokenSet = attrs.tokenSet - this.fields = attrs.fields - this.pipeline = attrs.pipeline -} - -/** - * A result contains details of a document matching a search query. - * @typedef {Object} lunr.Index~Result - * @property {string} ref - The reference of the document this result represents. - * @property {number} score - A number between 0 and 1 representing how similar this document is to the query. - * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match. - */ - -/** - * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple - * query language which itself is parsed into an instance of lunr.Query. - * - * For programmatically building queries it is advised to directly use lunr.Query, the query language - * is best used for human entered text rather than program generated text. - * - * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported - * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello' - * or 'world', though those that contain both will rank higher in the results. - * - * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can - * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding - * wildcards will increase the number of documents that will be found but can also have a negative - * impact on query performance, especially with wildcards at the beginning of a term. - * - * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term - * hello in the title field will match this query. Using a field not present in the index will lead - * to an error being thrown. - * - * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term - * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported - * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2. - * Avoid large values for edit distance to improve query performance. - * - * To escape special characters the backslash character '\' can be used, this allows searches to include - * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead - * of attempting to apply a boost of 2 to the search term "foo". - * - * @typedef {string} lunr.Index~QueryString - * @example Simple single term query - * hello - * @example Multiple term query - * hello world - * @example term scoped to a field - * title:hello - * @example term with a boost of 10 - * hello^10 - * @example term with an edit distance of 2 - * hello~2 - */ - -/** - * Performs a search against the index using lunr query syntax. - * - * Results will be returned sorted by their score, the most relevant results - * will be returned first. - * - * For more programmatic querying use lunr.Index#query. - * - * @param {lunr.Index~QueryString} queryString - A string containing a lunr query. - * @throws {lunr.QueryParseError} If the passed query string cannot be parsed. - * @returns {lunr.Index~Result[]} - */ -lunr.Index.prototype.search = function (queryString) { - return this.query(function (query) { - var parser = new lunr.QueryParser(queryString, query) - parser.parse() - }) -} - -/** - * A query builder callback provides a query object to be used to express - * the query to perform on the index. - * - * @callback lunr.Index~queryBuilder - * @param {lunr.Query} query - The query object to build up. - * @this lunr.Query - */ - -/** - * Performs a query against the index using the yielded lunr.Query object. - * - * If performing programmatic queries against the index, this method is preferred - * over lunr.Index#search so as to avoid the additional query parsing overhead. - * - * A query object is yielded to the supplied function which should be used to - * express the query to be run against the index. - * - * Note that although this function takes a callback parameter it is _not_ an - * asynchronous operation, the callback is just yielded a query object to be - * customized. - * - * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query. - * @returns {lunr.Index~Result[]} - */ -lunr.Index.prototype.query = function (fn) { - // for each query clause - // * process terms - // * expand terms from token set - // * find matching documents and metadata - // * get document vectors - // * score documents - - var query = new lunr.Query(this.fields), - matchingFields = Object.create(null), - queryVectors = Object.create(null) - - fn.call(query, query) - - for (var i = 0; i < query.clauses.length; i++) { - /* - * Unless the pipeline has been disabled for this term, which is - * the case for terms with wildcards, we need to pass the clause - * term through the search pipeline. A pipeline returns an array - * of processed terms. Pipeline functions may expand the passed - * term, which means we may end up performing multiple index lookups - * for a single query term. - */ - var clause = query.clauses[i], - terms = null - - if (clause.usePipeline) { - terms = this.pipeline.runString(clause.term) - } else { - terms = [clause.term] - } - - for (var m = 0; m < terms.length; m++) { - var term = terms[m] - - /* - * Each term returned from the pipeline needs to use the same query - * clause object, e.g. the same boost and or edit distance. The - * simplest way to do this is to re-use the clause object but mutate - * its term property. - */ - clause.term = term - - /* - * From the term in the clause we create a token set which will then - * be used to intersect the indexes token set to get a list of terms - * to lookup in the inverted index - */ - var termTokenSet = lunr.TokenSet.fromClause(clause), - expandedTerms = this.tokenSet.intersect(termTokenSet).toArray() - - for (var j = 0; j < expandedTerms.length; j++) { - /* - * For each term get the posting and termIndex, this is required for - * building the query vector. - */ - var expandedTerm = expandedTerms[j], - posting = this.invertedIndex[expandedTerm], - termIndex = posting._index - - for (var k = 0; k < clause.fields.length; k++) { - /* - * For each field that this query term is scoped by (by default - * all fields are in scope) we need to get all the document refs - * that have this term in that field. - * - * The posting is the entry in the invertedIndex for the matching - * term from above. - */ - var field = clause.fields[k], - fieldPosting = posting[field], - matchingDocumentRefs = Object.keys(fieldPosting) - - /* - * To support field level boosts a query vector is created per - * field. This vector is populated using the termIndex found for - * the term and a unit value with the appropriate boost applied. - * - * If the query vector for this field does not exist yet it needs - * to be created. - */ - if (!(field in queryVectors)) { - queryVectors[field] = new lunr.Vector - } - - /* - * Using upsert because there could already be an entry in the vector - * for the term we are working with. In that case we just add the scores - * together. - */ - queryVectors[field].upsert(termIndex, 1 * clause.boost, function (a, b) { return a + b }) - - for (var l = 0; l < matchingDocumentRefs.length; l++) { - /* - * All metadata for this term/field/document triple - * are then extracted and collected into an instance - * of lunr.MatchData ready to be returned in the query - * results - */ - var matchingDocumentRef = matchingDocumentRefs[l], - matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field), - documentMetadata, matchData - - documentMetadata = fieldPosting[matchingDocumentRef] - matchData = new lunr.MatchData (expandedTerm, field, documentMetadata) - - if (matchingFieldRef in matchingFields) { - matchingFields[matchingFieldRef].combine(matchData) - } else { - matchingFields[matchingFieldRef] = matchData - } - - } - } - } - } - } - - var matchingFieldRefs = Object.keys(matchingFields), - results = {} - - for (var i = 0; i < matchingFieldRefs.length; i++) { - /* - * Currently we have document fields that match the query, but we - * need to return documents. The matchData and scores are combined - * from multiple fields belonging to the same document. - * - * Scores are calculated by field, using the query vectors created - * above, and combined into a final document score using addition. - */ - var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]), - docRef = fieldRef.docRef, - fieldVector = this.fieldVectors[fieldRef], - score = queryVectors[fieldRef.fieldName].similarity(fieldVector) - - if (docRef in results) { - results[docRef].score += score - results[docRef].matchData.combine(matchingFields[fieldRef]) - } else { - results[docRef] = { - ref: docRef, - score: score, - matchData: matchingFields[fieldRef] - } - } - } - - /* - * The results object needs to be converted into a list - * of results, sorted by score before being returned. - */ - return Object.keys(results) - .map(function (key) { - return results[key] - }) - .sort(function (a, b) { - return b.score - a.score - }) -} - -/** - * Prepares the index for JSON serialization. - * - * The schema for this JSON blob will be described in a - * separate JSON schema file. - * - * @returns {Object} - */ -lunr.Index.prototype.toJSON = function () { - var invertedIndex = Object.keys(this.invertedIndex) - .sort() - .map(function (term) { - return [term, this.invertedIndex[term]] - }, this) - - var fieldVectors = Object.keys(this.fieldVectors) - .map(function (ref) { - return [ref, this.fieldVectors[ref].toJSON()] - }, this) - - return { - version: lunr.version, - fields: this.fields, - fieldVectors: fieldVectors, - invertedIndex: invertedIndex, - pipeline: this.pipeline.toJSON() - } -} - -/** - * Loads a previously serialized lunr.Index - * - * @param {Object} serializedIndex - A previously serialized lunr.Index - * @returns {lunr.Index} - */ -lunr.Index.load = function (serializedIndex) { - var attrs = {}, - fieldVectors = {}, - serializedVectors = serializedIndex.fieldVectors, - invertedIndex = {}, - serializedInvertedIndex = serializedIndex.invertedIndex, - tokenSetBuilder = new lunr.TokenSet.Builder, - pipeline = lunr.Pipeline.load(serializedIndex.pipeline) - - if (serializedIndex.version != lunr.version) { - lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'") - } - - for (var i = 0; i < serializedVectors.length; i++) { - var tuple = serializedVectors[i], - ref = tuple[0], - elements = tuple[1] - - fieldVectors[ref] = new lunr.Vector(elements) - } - - for (var i = 0; i < serializedInvertedIndex.length; i++) { - var tuple = serializedInvertedIndex[i], - term = tuple[0], - posting = tuple[1] - - tokenSetBuilder.insert(term) - invertedIndex[term] = posting - } - - tokenSetBuilder.finish() - - attrs.fields = serializedIndex.fields - - attrs.fieldVectors = fieldVectors - attrs.invertedIndex = invertedIndex - attrs.tokenSet = tokenSetBuilder.root - attrs.pipeline = pipeline - - return new lunr.Index(attrs) -} -/*! - * lunr.Builder - * Copyright (C) 2017 Oliver Nightingale - */ - -/** - * lunr.Builder performs indexing on a set of documents and - * returns instances of lunr.Index ready for querying. - * - * All configuration of the index is done via the builder, the - * fields to index, the document reference, the text processing - * pipeline and document scoring parameters are all set on the - * builder before indexing. - * - * @constructor - * @property {string} _ref - Internal reference to the document reference field. - * @property {string[]} _fields - Internal reference to the document fields to index. - * @property {object} invertedIndex - The inverted index maps terms to document fields. - * @property {object} documentTermFrequencies - Keeps track of document term frequencies. - * @property {object} documentLengths - Keeps track of the length of documents added to the index. - * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing. - * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing. - * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index. - * @property {number} documentCount - Keeps track of the total number of documents indexed. - * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75. - * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2. - * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space. - * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index. - */ -lunr.Builder = function () { - this._ref = "id" - this._fields = [] - this.invertedIndex = Object.create(null) - this.fieldTermFrequencies = {} - this.fieldLengths = {} - this.tokenizer = lunr.tokenizer - this.pipeline = new lunr.Pipeline - this.searchPipeline = new lunr.Pipeline - this.documentCount = 0 - this._b = 0.75 - this._k1 = 1.2 - this.termIndex = 0 - this.metadataWhitelist = [] -} - -/** - * Sets the document field used as the document reference. Every document must have this field. - * The type of this field in the document should be a string, if it is not a string it will be - * coerced into a string by calling toString. - * - * The default ref is 'id'. - * - * The ref should _not_ be changed during indexing, it should be set before any documents are - * added to the index. Changing it during indexing can lead to inconsistent results. - * - * @param {string} ref - The name of the reference field in the document. - */ -lunr.Builder.prototype.ref = function (ref) { - this._ref = ref -} - -/** - * Adds a field to the list of document fields that will be indexed. Every document being - * indexed should have this field. Null values for this field in indexed documents will - * not cause errors but will limit the chance of that document being retrieved by searches. - * - * All fields should be added before adding documents to the index. Adding fields after - * a document has been indexed will have no effect on already indexed documents. - * - * @param {string} field - The name of a field to index in all documents. - */ -lunr.Builder.prototype.field = function (field) { - this._fields.push(field) -} - -/** - * A parameter to tune the amount of field length normalisation that is applied when - * calculating relevance scores. A value of 0 will completely disable any normalisation - * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b - * will be clamped to the range 0 - 1. - * - * @param {number} number - The value to set for this tuning parameter. - */ -lunr.Builder.prototype.b = function (number) { - if (number < 0) { - this._b = 0 - } else if (number > 1) { - this._b = 1 - } else { - this._b = number - } -} - -/** - * A parameter that controls the speed at which a rise in term frequency results in term - * frequency saturation. The default value is 1.2. Setting this to a higher value will give - * slower saturation levels, a lower value will result in quicker saturation. - * - * @param {number} number - The value to set for this tuning parameter. - */ -lunr.Builder.prototype.k1 = function (number) { - this._k1 = number -} - -/** - * Adds a document to the index. - * - * Before adding fields to the index the index should have been fully setup, with the document - * ref and all fields to index already having been specified. - * - * The document must have a field name as specified by the ref (by default this is 'id') and - * it should have all fields defined for indexing, though null or undefined values will not - * cause errors. - * - * @param {object} doc - The document to add to the index. - */ -lunr.Builder.prototype.add = function (doc) { - var docRef = doc[this._ref] - - this.documentCount += 1 - - for (var i = 0; i < this._fields.length; i++) { - var fieldName = this._fields[i], - field = doc[fieldName], - tokens = this.tokenizer(field), - terms = this.pipeline.run(tokens), - fieldRef = new lunr.FieldRef (docRef, fieldName), - fieldTerms = Object.create(null) - - this.fieldTermFrequencies[fieldRef] = fieldTerms - this.fieldLengths[fieldRef] = 0 - - // store the length of this field for this document - this.fieldLengths[fieldRef] += terms.length - - // calculate term frequencies for this field - for (var j = 0; j < terms.length; j++) { - var term = terms[j] - - if (fieldTerms[term] == undefined) { - fieldTerms[term] = 0 - } - - fieldTerms[term] += 1 - - // add to inverted index - // create an initial posting if one doesn't exist - if (this.invertedIndex[term] == undefined) { - var posting = Object.create(null) - posting["_index"] = this.termIndex - this.termIndex += 1 - - for (var k = 0; k < this._fields.length; k++) { - posting[this._fields[k]] = Object.create(null) - } - - this.invertedIndex[term] = posting - } - - // add an entry for this term/fieldName/docRef to the invertedIndex - if (this.invertedIndex[term][fieldName][docRef] == undefined) { - this.invertedIndex[term][fieldName][docRef] = Object.create(null) - } - - // store all whitelisted metadata about this token in the - // inverted index - for (var l = 0; l < this.metadataWhitelist.length; l++) { - var metadataKey = this.metadataWhitelist[l], - metadata = term.metadata[metadataKey] - - if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) { - this.invertedIndex[term][fieldName][docRef][metadataKey] = [] - } - - this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata) - } - } - - } -} - -/** - * Calculates the average document length for this index - * - * @private - */ -lunr.Builder.prototype.calculateAverageFieldLengths = function () { - - var fieldRefs = Object.keys(this.fieldLengths), - numberOfFields = fieldRefs.length, - accumulator = {}, - documentsWithField = {} - - for (var i = 0; i < numberOfFields; i++) { - var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), - field = fieldRef.fieldName - - documentsWithField[field] || (documentsWithField[field] = 0) - documentsWithField[field] += 1 - - accumulator[field] || (accumulator[field] = 0) - accumulator[field] += this.fieldLengths[fieldRef] - } - - for (var i = 0; i < this._fields.length; i++) { - var field = this._fields[i] - accumulator[field] = accumulator[field] / documentsWithField[field] - } - - this.averageFieldLength = accumulator -} - -/** - * Builds a vector space model of every document using lunr.Vector - * - * @private - */ -lunr.Builder.prototype.createFieldVectors = function () { - var fieldVectors = {}, - fieldRefs = Object.keys(this.fieldTermFrequencies), - fieldRefsLength = fieldRefs.length - - for (var i = 0; i < fieldRefsLength; i++) { - var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), - field = fieldRef.fieldName, - fieldLength = this.fieldLengths[fieldRef], - fieldVector = new lunr.Vector, - termFrequencies = this.fieldTermFrequencies[fieldRef], - terms = Object.keys(termFrequencies), - termsLength = terms.length - - for (var j = 0; j < termsLength; j++) { - var term = terms[j], - tf = termFrequencies[term], - termIndex = this.invertedIndex[term]._index, - idf = lunr.idf(this.invertedIndex[term], this.documentCount), - score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[field])) + tf), - scoreWithPrecision = Math.round(score * 1000) / 1000 - // Converts 1.23456789 to 1.234. - // Reducing the precision so that the vectors take up less - // space when serialised. Doing it now so that they behave - // the same before and after serialisation. Also, this is - // the fastest approach to reducing a number's precision in - // JavaScript. - - fieldVector.insert(termIndex, scoreWithPrecision) - } - - fieldVectors[fieldRef] = fieldVector - } - - this.fieldVectors = fieldVectors -} - -/** - * Creates a token set of all tokens in the index using lunr.TokenSet - * - * @private - */ -lunr.Builder.prototype.createTokenSet = function () { - this.tokenSet = lunr.TokenSet.fromArray( - Object.keys(this.invertedIndex).sort() - ) -} - -/** - * Builds the index, creating an instance of lunr.Index. - * - * This completes the indexing process and should only be called - * once all documents have been added to the index. - * - * @private - * @returns {lunr.Index} - */ -lunr.Builder.prototype.build = function () { - this.calculateAverageFieldLengths() - this.createFieldVectors() - this.createTokenSet() - - return new lunr.Index({ - invertedIndex: this.invertedIndex, - fieldVectors: this.fieldVectors, - tokenSet: this.tokenSet, - fields: this._fields, - pipeline: this.searchPipeline - }) -} - -/** - * Applies a plugin to the index builder. - * - * A plugin is a function that is called with the index builder as its context. - * Plugins can be used to customise or extend the behaviour of the index - * in some way. A plugin is just a function, that encapsulated the custom - * behaviour that should be applied when building the index. - * - * The plugin function will be called with the index builder as its argument, additional - * arguments can also be passed when calling use. The function will be called - * with the index builder as its context. - * - * @param {Function} plugin The plugin to apply. - */ -lunr.Builder.prototype.use = function (fn) { - var args = Array.prototype.slice.call(arguments, 1) - args.unshift(this) - fn.apply(this, args) -} -/** - * Contains and collects metadata about a matching document. - * A single instance of lunr.MatchData is returned as part of every - * lunr.Index~Result. - * - * @constructor - * @param {string} term - The term this match data is associated with - * @param {string} field - The field in which the term was found - * @param {object} metadata - The metadata recorded about this term in this field - * @property {object} metadata - A cloned collection of metadata associated with this document. - * @see {@link lunr.Index~Result} - */ -lunr.MatchData = function (term, field, metadata) { - var clonedMetadata = Object.create(null), - metadataKeys = Object.keys(metadata) - - // Cloning the metadata to prevent the original - // being mutated during match data combination. - // Metadata is kept in an array within the inverted - // index so cloning the data can be done with - // Array#slice - for (var i = 0; i < metadataKeys.length; i++) { - var key = metadataKeys[i] - clonedMetadata[key] = metadata[key].slice() - } - - this.metadata = Object.create(null) - this.metadata[term] = Object.create(null) - this.metadata[term][field] = clonedMetadata -} - -/** - * An instance of lunr.MatchData will be created for every term that matches a - * document. However only one instance is required in a lunr.Index~Result. This - * method combines metadata from another instance of lunr.MatchData with this - * objects metadata. - * - * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one. - * @see {@link lunr.Index~Result} - */ -lunr.MatchData.prototype.combine = function (otherMatchData) { - var terms = Object.keys(otherMatchData.metadata) - - for (var i = 0; i < terms.length; i++) { - var term = terms[i], - fields = Object.keys(otherMatchData.metadata[term]) - - if (this.metadata[term] == undefined) { - this.metadata[term] = Object.create(null) - } - - for (var j = 0; j < fields.length; j++) { - var field = fields[j], - keys = Object.keys(otherMatchData.metadata[term][field]) - - if (this.metadata[term][field] == undefined) { - this.metadata[term][field] = Object.create(null) - } - - for (var k = 0; k < keys.length; k++) { - var key = keys[k] - - if (this.metadata[term][field][key] == undefined) { - this.metadata[term][field][key] = otherMatchData.metadata[term][field][key] - } else { - this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key]) - } - - } - } - } -} -/** - * A lunr.Query provides a programmatic way of defining queries to be performed - * against a {@link lunr.Index}. - * - * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method - * so the query object is pre-initialized with the right index fields. - * - * @constructor - * @property {lunr.Query~Clause[]} clauses - An array of query clauses. - * @property {string[]} allFields - An array of all available fields in a lunr.Index. - */ -lunr.Query = function (allFields) { - this.clauses = [] - this.allFields = allFields -} - -/** - * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause. - * - * This allows wildcards to be added to the beginning and end of a term without having to manually do any string - * concatenation. - * - * The wildcard constants can be bitwise combined to select both leading and trailing wildcards. - * - * @constant - * @default - * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour - * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists - * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists - * @see lunr.Query~Clause - * @see lunr.Query#clause - * @see lunr.Query#term - * @example query term with trailing wildcard - * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING }) - * @example query term with leading and trailing wildcard - * query.term('foo', { - * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING - * }) - */ -lunr.Query.wildcard = new String ("*") -lunr.Query.wildcard.NONE = 0 -lunr.Query.wildcard.LEADING = 1 -lunr.Query.wildcard.TRAILING = 2 - -/** - * A single clause in a {@link lunr.Query} contains a term and details on how to - * match that term against a {@link lunr.Index}. - * - * @typedef {Object} lunr.Query~Clause - * @property {string[]} fields - The fields in an index this clause should be matched against. - * @property {number} [boost=1] - Any boost that should be applied when matching this clause. - * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be. - * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline. - * @property {number} [wildcard=0] - Whether the term should have wildcards appended or prepended. - */ - -/** - * Adds a {@link lunr.Query~Clause} to this query. - * - * Unless the clause contains the fields to be matched all fields will be matched. In addition - * a default boost of 1 is applied to the clause. - * - * @param {lunr.Query~Clause} clause - The clause to add to this query. - * @see lunr.Query~Clause - * @returns {lunr.Query} - */ -lunr.Query.prototype.clause = function (clause) { - if (!('fields' in clause)) { - clause.fields = this.allFields - } - - if (!('boost' in clause)) { - clause.boost = 1 - } - - if (!('usePipeline' in clause)) { - clause.usePipeline = true - } - - if (!('wildcard' in clause)) { - clause.wildcard = lunr.Query.wildcard.NONE - } - - if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) { - clause.term = "*" + clause.term - } - - if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) { - clause.term = "" + clause.term + "*" - } - - this.clauses.push(clause) - - return this -} - -/** - * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause} - * to the list of clauses that make up this query. - * - * @param {string} term - The term to add to the query. - * @param {Object} [options] - Any additional properties to add to the query clause. - * @returns {lunr.Query} - * @see lunr.Query#clause - * @see lunr.Query~Clause - * @example adding a single term to a query - * query.term("foo") - * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard - * query.term("foo", { - * fields: ["title"], - * boost: 10, - * wildcard: lunr.Query.wildcard.TRAILING - * }) - */ -lunr.Query.prototype.term = function (term, options) { - var clause = options || {} - clause.term = term - - this.clause(clause) - - return this -} -lunr.QueryParseError = function (message, start, end) { - this.name = "QueryParseError" - this.message = message - this.start = start - this.end = end -} - -lunr.QueryParseError.prototype = new Error -lunr.QueryLexer = function (str) { - this.lexemes = [] - this.str = str - this.length = str.length - this.pos = 0 - this.start = 0 - this.escapeCharPositions = [] -} - -lunr.QueryLexer.prototype.run = function () { - var state = lunr.QueryLexer.lexText - - while (state) { - state = state(this) - } -} - -lunr.QueryLexer.prototype.sliceString = function () { - var subSlices = [], - sliceStart = this.start, - sliceEnd = this.pos - - for (var i = 0; i < this.escapeCharPositions.length; i++) { - sliceEnd = this.escapeCharPositions[i] - subSlices.push(this.str.slice(sliceStart, sliceEnd)) - sliceStart = sliceEnd + 1 - } - - subSlices.push(this.str.slice(sliceStart, this.pos)) - this.escapeCharPositions.length = 0 - - return subSlices.join('') -} - -lunr.QueryLexer.prototype.emit = function (type) { - this.lexemes.push({ - type: type, - str: this.sliceString(), - start: this.start, - end: this.pos - }) - - this.start = this.pos -} - -lunr.QueryLexer.prototype.escapeCharacter = function () { - this.escapeCharPositions.push(this.pos - 1) - this.pos += 1 -} - -lunr.QueryLexer.prototype.next = function () { - if (this.pos >= this.length) { - return lunr.QueryLexer.EOS - } - - var char = this.str.charAt(this.pos) - this.pos += 1 - return char -} - -lunr.QueryLexer.prototype.width = function () { - return this.pos - this.start -} - -lunr.QueryLexer.prototype.ignore = function () { - if (this.start == this.pos) { - this.pos += 1 - } - - this.start = this.pos -} - -lunr.QueryLexer.prototype.backup = function () { - this.pos -= 1 -} - -lunr.QueryLexer.prototype.acceptDigitRun = function () { - var char, charCode - - do { - char = this.next() - charCode = char.charCodeAt(0) - } while (charCode > 47 && charCode < 58) - - if (char != lunr.QueryLexer.EOS) { - this.backup() - } -} - -lunr.QueryLexer.prototype.more = function () { - return this.pos < this.length -} - -lunr.QueryLexer.EOS = 'EOS' -lunr.QueryLexer.FIELD = 'FIELD' -lunr.QueryLexer.TERM = 'TERM' -lunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE' -lunr.QueryLexer.BOOST = 'BOOST' - -lunr.QueryLexer.lexField = function (lexer) { - lexer.backup() - lexer.emit(lunr.QueryLexer.FIELD) - lexer.ignore() - return lunr.QueryLexer.lexText -} - -lunr.QueryLexer.lexTerm = function (lexer) { - if (lexer.width() > 1) { - lexer.backup() - lexer.emit(lunr.QueryLexer.TERM) - } - - lexer.ignore() - - if (lexer.more()) { - return lunr.QueryLexer.lexText - } -} - -lunr.QueryLexer.lexEditDistance = function (lexer) { - lexer.ignore() - lexer.acceptDigitRun() - lexer.emit(lunr.QueryLexer.EDIT_DISTANCE) - return lunr.QueryLexer.lexText -} - -lunr.QueryLexer.lexBoost = function (lexer) { - lexer.ignore() - lexer.acceptDigitRun() - lexer.emit(lunr.QueryLexer.BOOST) - return lunr.QueryLexer.lexText -} - -lunr.QueryLexer.lexEOS = function (lexer) { - if (lexer.width() > 0) { - lexer.emit(lunr.QueryLexer.TERM) - } -} - -// This matches the separator used when tokenising fields -// within a document. These should match otherwise it is -// not possible to search for some tokens within a document. -// -// It is possible for the user to change the separator on the -// tokenizer so it _might_ clash with any other of the special -// characters already used within the search string, e.g. :. -// -// This means that it is possible to change the separator in -// such a way that makes some words unsearchable using a search -// string. -lunr.QueryLexer.termSeparator = lunr.tokenizer.separator - -lunr.QueryLexer.lexText = function (lexer) { - while (true) { - var char = lexer.next() - - if (char == lunr.QueryLexer.EOS) { - return lunr.QueryLexer.lexEOS - } - - // Escape character is '\' - if (char.charCodeAt(0) == 92) { - lexer.escapeCharacter() - continue - } - - if (char == ":") { - return lunr.QueryLexer.lexField - } - - if (char == "~") { - lexer.backup() - if (lexer.width() > 0) { - lexer.emit(lunr.QueryLexer.TERM) - } - return lunr.QueryLexer.lexEditDistance - } - - if (char == "^") { - lexer.backup() - if (lexer.width() > 0) { - lexer.emit(lunr.QueryLexer.TERM) - } - return lunr.QueryLexer.lexBoost - } - - if (char.match(lunr.QueryLexer.termSeparator)) { - return lunr.QueryLexer.lexTerm - } - } -} - -lunr.QueryParser = function (str, query) { - this.lexer = new lunr.QueryLexer (str) - this.query = query - this.currentClause = {} - this.lexemeIdx = 0 -} - -lunr.QueryParser.prototype.parse = function () { - this.lexer.run() - this.lexemes = this.lexer.lexemes - - var state = lunr.QueryParser.parseFieldOrTerm - - while (state) { - state = state(this) - } - - return this.query -} - -lunr.QueryParser.prototype.peekLexeme = function () { - return this.lexemes[this.lexemeIdx] -} - -lunr.QueryParser.prototype.consumeLexeme = function () { - var lexeme = this.peekLexeme() - this.lexemeIdx += 1 - return lexeme -} - -lunr.QueryParser.prototype.nextClause = function () { - var completedClause = this.currentClause - this.query.clause(completedClause) - this.currentClause = {} -} - -lunr.QueryParser.parseFieldOrTerm = function (parser) { - var lexeme = parser.peekLexeme() - - if (lexeme == undefined) { - return - } - - switch (lexeme.type) { - case lunr.QueryLexer.FIELD: - return lunr.QueryParser.parseField - case lunr.QueryLexer.TERM: - return lunr.QueryParser.parseTerm - default: - var errorMessage = "expected either a field or a term, found " + lexeme.type - - if (lexeme.str.length >= 1) { - errorMessage += " with value '" + lexeme.str + "'" - } - - throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) - } -} - -lunr.QueryParser.parseField = function (parser) { - var lexeme = parser.consumeLexeme() - - if (lexeme == undefined) { - return - } - - if (parser.query.allFields.indexOf(lexeme.str) == -1) { - var possibleFields = parser.query.allFields.map(function (f) { return "'" + f + "'" }).join(', '), - errorMessage = "unrecognised field '" + lexeme.str + "', possible fields: " + possibleFields - - throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) - } - - parser.currentClause.fields = [lexeme.str] - - var nextLexeme = parser.peekLexeme() - - if (nextLexeme == undefined) { - var errorMessage = "expecting term, found nothing" - throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) - } - - switch (nextLexeme.type) { - case lunr.QueryLexer.TERM: - return lunr.QueryParser.parseTerm - default: - var errorMessage = "expecting term, found '" + nextLexeme.type + "'" - throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) - } -} - -lunr.QueryParser.parseTerm = function (parser) { - var lexeme = parser.consumeLexeme() - - if (lexeme == undefined) { - return - } - - parser.currentClause.term = lexeme.str.toLowerCase() - - if (lexeme.str.indexOf("*") != -1) { - parser.currentClause.usePipeline = false - } - - var nextLexeme = parser.peekLexeme() - - if (nextLexeme == undefined) { - parser.nextClause() - return - } - - switch (nextLexeme.type) { - case lunr.QueryLexer.TERM: - parser.nextClause() - return lunr.QueryParser.parseTerm - case lunr.QueryLexer.FIELD: - parser.nextClause() - return lunr.QueryParser.parseField - case lunr.QueryLexer.EDIT_DISTANCE: - return lunr.QueryParser.parseEditDistance - case lunr.QueryLexer.BOOST: - return lunr.QueryParser.parseBoost - default: - var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" - throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) - } -} - -lunr.QueryParser.parseEditDistance = function (parser) { - var lexeme = parser.consumeLexeme() - - if (lexeme == undefined) { - return - } - - var editDistance = parseInt(lexeme.str, 10) - - if (isNaN(editDistance)) { - var errorMessage = "edit distance must be numeric" - throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) - } - - parser.currentClause.editDistance = editDistance - - var nextLexeme = parser.peekLexeme() - - if (nextLexeme == undefined) { - parser.nextClause() - return - } - - switch (nextLexeme.type) { - case lunr.QueryLexer.TERM: - parser.nextClause() - return lunr.QueryParser.parseTerm - case lunr.QueryLexer.FIELD: - parser.nextClause() - return lunr.QueryParser.parseField - case lunr.QueryLexer.EDIT_DISTANCE: - return lunr.QueryParser.parseEditDistance - case lunr.QueryLexer.BOOST: - return lunr.QueryParser.parseBoost - default: - var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" - throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) - } -} - -lunr.QueryParser.parseBoost = function (parser) { - var lexeme = parser.consumeLexeme() - - if (lexeme == undefined) { - return - } - - var boost = parseInt(lexeme.str, 10) - - if (isNaN(boost)) { - var errorMessage = "boost must be numeric" - throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) - } - - parser.currentClause.boost = boost - - var nextLexeme = parser.peekLexeme() - - if (nextLexeme == undefined) { - parser.nextClause() - return - } - - switch (nextLexeme.type) { - case lunr.QueryLexer.TERM: - parser.nextClause() - return lunr.QueryParser.parseTerm - case lunr.QueryLexer.FIELD: - parser.nextClause() - return lunr.QueryParser.parseField - case lunr.QueryLexer.EDIT_DISTANCE: - return lunr.QueryParser.parseEditDistance - case lunr.QueryLexer.BOOST: - return lunr.QueryParser.parseBoost - default: - var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" - throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) - } -} - - /** - * export the module via AMD, CommonJS or as a browser global - * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js - */ - ;(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(factory) - } else if (typeof exports === 'object') { - /** - * Node. Does not work with strict CommonJS, but - * only CommonJS-like enviroments that support module.exports, - * like Node. - */ - module.exports = factory() - } else { - // Browser globals (root is window) - root.lunr = factory() - } - }(this, function () { - /** - * Just return a value to define the module export. - * This example returns an object, but the module - * can return a function as the exported value. - */ - return lunr - })) -})(); diff --git a/RWSDocsTemplate/styles/lunr.min.js b/RWSDocsTemplate/styles/lunr.min.js deleted file mode 100644 index 77c29c2..0000000 --- a/RWSDocsTemplate/styles/lunr.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(){var e,t,r,i,n,s,o,a,u,l,d,h,c,f,p,y,m,g,x,v,w,k,Q,L,T,S,b,P,E=function(e){var t=new E.Builder;return t.pipeline.add(E.trimmer,E.stopWordFilter,E.stemmer),t.searchPipeline.add(E.stemmer),e.call(t,t),t.build()};E.version="2.1.2",E.utils={},E.utils.warn=(e=this,function(t){e.console&&console.warn&&console.warn(t)}),E.utils.asString=function(e){return null==e?"":e.toString()},E.FieldRef=function(e,t){this.docRef=e,this.fieldName=t,this._stringValue=t+E.FieldRef.joiner+e},E.FieldRef.joiner="/",E.FieldRef.fromString=function(e){var t=e.indexOf(E.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var r=e.slice(0,t),i=e.slice(t+1);return new E.FieldRef(i,r)},E.FieldRef.prototype.toString=function(){return this._stringValue},E.idf=function(e,t){var r=0;for(var i in e)"_index"!=i&&(r+=Object.keys(e[i]).length);var n=(t-r+.5)/(r+.5);return Math.log(1+Math.abs(n))},E.Token=function(e,t){this.str=e||"",this.metadata=t||{}},E.Token.prototype.toString=function(){return this.str},E.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},E.Token.prototype.clone=function(e){return e=e||function(e){return e},new E.Token(e(this.str,this.metadata),this.metadata)},E.tokenizer=function(e){if(null==e||null==e)return[];if(Array.isArray(e))return e.map(function(e){return new E.Token(E.utils.asString(e).toLowerCase())});for(var t=e.toString().trim().toLowerCase(),r=t.length,i=[],n=0,s=0;n<=r;n++){var o=n-s;(t.charAt(n).match(E.tokenizer.separator)||n==r)&&(o>0&&i.push(new E.Token(t.slice(s,n),{position:[s,o],index:i.length})),s=n+1)}return i},E.tokenizer.separator=/[\s\-]+/,E.Pipeline=function(){this._stack=[]},E.Pipeline.registeredFunctions=Object.create(null),E.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&E.utils.warn("Overwriting existing registered function: "+t),e.label=t,E.Pipeline.registeredFunctions[e.label]=e},E.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||E.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},E.Pipeline.load=function(e){var t=new E.Pipeline;return e.forEach(function(e){var r=E.Pipeline.registeredFunctions[e];if(!r)throw new Error("Cannot load unregistered function: "+e);t.add(r)}),t},E.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(e){E.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},E.Pipeline.prototype.after=function(e,t){E.Pipeline.warnIfFunctionNotRegistered(t);var r=this._stack.indexOf(e);if(-1==r)throw new Error("Cannot find existingFn");r+=1,this._stack.splice(r,0,t)},E.Pipeline.prototype.before=function(e,t){E.Pipeline.warnIfFunctionNotRegistered(t);var r=this._stack.indexOf(e);if(-1==r)throw new Error("Cannot find existingFn");this._stack.splice(r,0,t)},E.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},E.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},E.Vector.prototype.similarity=function(e){return this.dot(e)/(this.magnitude()*e.magnitude())},E.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0)(s=a.str.charAt(0))in a.node.edges?n=a.node.edges[s]:(n=new E.TokenSet,a.node.edges[s]=n),1==a.str.length?n.final=!0:i.push({node:n,editsRemaining:a.editsRemaining,str:a.str.slice(1)});if(a.editsRemaining>0&&a.str.length>1)(s=a.str.charAt(1))in a.node.edges?o=a.node.edges[s]:(o=new E.TokenSet,a.node.edges[s]=o),a.str.length<=2?o.final=!0:i.push({node:o,editsRemaining:a.editsRemaining-1,str:a.str.slice(2)});if(a.editsRemaining>0&&1==a.str.length&&(a.node.final=!0),a.editsRemaining>0&&a.str.length>=1){if("*"in a.node.edges)var u=a.node.edges["*"];else{u=new E.TokenSet;a.node.edges["*"]=u}1==a.str.length?u.final=!0:i.push({node:u,editsRemaining:a.editsRemaining-1,str:a.str.slice(1)})}if(a.editsRemaining>0){if("*"in a.node.edges)var l=a.node.edges["*"];else{l=new E.TokenSet;a.node.edges["*"]=l}0==a.str.length?l.final=!0:i.push({node:l,editsRemaining:a.editsRemaining-1,str:a.str})}if(a.editsRemaining>0&&a.str.length>1){var d,h=a.str.charAt(0),c=a.str.charAt(1);c in a.node.edges?d=a.node.edges[c]:(d=new E.TokenSet,a.node.edges[c]=d),1==a.str.length?d.final=!0:i.push({node:d,editsRemaining:a.editsRemaining-1,str:h+a.str.slice(2)})}}return r},E.TokenSet.fromString=function(e){for(var t=new E.TokenSet,r=t,i=!1,n=0,s=e.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},E.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},E.Index.prototype.search=function(e){return this.query(function(t){new E.QueryParser(e,t).parse()})},E.Index.prototype.query=function(e){var t=new E.Query(this.fields),r=Object.create(null),i=Object.create(null);e.call(t,t);for(var n=0;n1?1:e},E.Builder.prototype.k1=function(e){this._k1=e},E.Builder.prototype.add=function(e){var t=e[this._ref];this.documentCount+=1;for(var r=0;r=this.length)return E.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},E.QueryLexer.prototype.width=function(){return this.pos-this.start},E.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},E.QueryLexer.prototype.backup=function(){this.pos-=1},E.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=E.QueryLexer.EOS&&this.backup()},E.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(E.QueryLexer.TERM)),e.ignore(),e.more())return E.QueryLexer.lexText},E.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(E.QueryLexer.EDIT_DISTANCE),E.QueryLexer.lexText},E.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(E.QueryLexer.BOOST),E.QueryLexer.lexText},E.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(E.QueryLexer.TERM)},E.QueryLexer.termSeparator=E.tokenizer.separator,E.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==E.QueryLexer.EOS)return E.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return E.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(E.QueryLexer.TERM),E.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(E.QueryLexer.TERM),E.QueryLexer.lexBoost;if(t.match(E.QueryLexer.termSeparator))return E.QueryLexer.lexTerm}else e.escapeCharacter()}},E.QueryParser=function(e,t){this.lexer=new E.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},E.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=E.QueryParser.parseFieldOrTerm;e;)e=e(this);return this.query},E.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},E.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},E.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},E.QueryParser.parseFieldOrTerm=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case E.QueryLexer.FIELD:return E.QueryParser.parseField;case E.QueryLexer.TERM:return E.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(r+=" with value '"+t.str+"'"),new E.QueryParseError(r,t.start,t.end)}},E.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var r=e.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),i="unrecognised field '"+t.str+"', possible fields: "+r;throw new E.QueryParseError(i,t.start,t.end)}e.currentClause.fields=[t.str];var n=e.peekLexeme();if(null==n){i="expecting term, found nothing";throw new E.QueryParseError(i,t.start,t.end)}switch(n.type){case E.QueryLexer.TERM:return E.QueryParser.parseTerm;default:i="expecting term, found '"+n.type+"'";throw new E.QueryParseError(i,n.start,n.end)}}},E.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(null!=r)switch(r.type){case E.QueryLexer.TERM:return e.nextClause(),E.QueryParser.parseTerm;case E.QueryLexer.FIELD:return e.nextClause(),E.QueryParser.parseField;case E.QueryLexer.EDIT_DISTANCE:return E.QueryParser.parseEditDistance;case E.QueryLexer.BOOST:return E.QueryParser.parseBoost;default:var i="Unexpected lexeme type '"+r.type+"'";throw new E.QueryParseError(i,r.start,r.end)}else e.nextClause()}},E.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new E.QueryParseError(i,t.start,t.end)}e.currentClause.editDistance=r;var n=e.peekLexeme();if(null!=n)switch(n.type){case E.QueryLexer.TERM:return e.nextClause(),E.QueryParser.parseTerm;case E.QueryLexer.FIELD:return e.nextClause(),E.QueryParser.parseField;case E.QueryLexer.EDIT_DISTANCE:return E.QueryParser.parseEditDistance;case E.QueryLexer.BOOST:return E.QueryParser.parseBoost;default:i="Unexpected lexeme type '"+n.type+"'";throw new E.QueryParseError(i,n.start,n.end)}else e.nextClause()}},E.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var i="boost must be numeric";throw new E.QueryParseError(i,t.start,t.end)}e.currentClause.boost=r;var n=e.peekLexeme();if(null!=n)switch(n.type){case E.QueryLexer.TERM:return e.nextClause(),E.QueryParser.parseTerm;case E.QueryLexer.FIELD:return e.nextClause(),E.QueryParser.parseField;case E.QueryLexer.EDIT_DISTANCE:return E.QueryParser.parseEditDistance;case E.QueryLexer.BOOST:return E.QueryParser.parseBoost;default:i="Unexpected lexeme type '"+n.type+"'";throw new E.QueryParseError(i,n.start,n.end)}else e.nextClause()}},b=this,P=function(){return E},"function"==typeof define&&define.amd?define(P):"object"==typeof exports?module.exports=P():b.lunr=P()}(); \ No newline at end of file diff --git a/RWSDocsTemplate/styles/main.js b/RWSDocsTemplate/styles/main.js deleted file mode 100644 index aeca70d..0000000 --- a/RWSDocsTemplate/styles/main.js +++ /dev/null @@ -1 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. diff --git a/RWSDocsTemplate/styles/search-worker.js b/RWSDocsTemplate/styles/search-worker.js deleted file mode 100644 index 60852af..0000000 --- a/RWSDocsTemplate/styles/search-worker.js +++ /dev/null @@ -1,80 +0,0 @@ -(function () { - importScripts('lunr.min.js'); - - var lunrIndex; - - var stopWords = null; - var searchData = {}; - - lunr.tokenizer.separator = /[\s\-\.\(\)]+/; - - var stopWordsRequest = new XMLHttpRequest(); - stopWordsRequest.open('GET', '../search-stopwords.json'); - stopWordsRequest.onload = function () { - if (this.status != 200) { - return; - } - stopWords = JSON.parse(this.responseText); - buildIndex(); - } - stopWordsRequest.send(); - - var searchDataRequest = new XMLHttpRequest(); - - searchDataRequest.open('GET', '../index.json'); - searchDataRequest.onload = function () { - if (this.status != 200) { - return; - } - searchData = JSON.parse(this.responseText); - - buildIndex(); - - postMessage({ e: 'index-ready' }); - } - searchDataRequest.send(); - - onmessage = function (oEvent) { - var q = oEvent.data.q; - var hits = lunrIndex.search(q); - var results = []; - hits.forEach(function (hit) { - var item = searchData[hit.ref]; - results.push({ 'href': item.href, 'title': item.title, 'keywords': item.keywords }); - }); - postMessage({ e: 'query-ready', q: q, d: results }); - } - - function buildIndex() { - if (stopWords !== null && !isEmpty(searchData)) { - lunrIndex = lunr(function () { - this.pipeline.remove(lunr.stopWordFilter); - this.ref('href'); - this.field('title', { boost: 50 }); - this.field('keywords', { boost: 20 }); - - for (var prop in searchData) { - if (searchData.hasOwnProperty(prop)) { - this.add(searchData[prop]); - } - } - - var docfxStopWordFilter = lunr.generateStopWordFilter(stopWords); - lunr.Pipeline.registerFunction(docfxStopWordFilter, 'docfxStopWordFilter'); - this.pipeline.add(docfxStopWordFilter); - this.searchPipeline.add(docfxStopWordFilter); - }); - } - } - - function isEmpty(obj) { - if(!obj) return true; - - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) - return false; - } - - return true; - } -})(); diff --git a/RWSDocsTemplate/toc.html.js b/RWSDocsTemplate/toc.html.js deleted file mode 100644 index 8761d78..0000000 --- a/RWSDocsTemplate/toc.html.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. -var extension = require('./toc.extension.js') - -exports.transform = function (model) { - - if (extension && extension.preTransform) { - model = extension.preTransform(model); - } - - transformItem(model, 1); - if (model.items && model.items.length > 0) model.leaf = false; - model.title = "Table of Content"; - model._disableToc = true; - - if (extension && extension.postTransform) { - model = extension.postTransform(model); - } - - return model; - - function transformItem(item, level) { - // set to null incase mustache looks up - item.topicHref = item.topicHref || null; - item.tocHref = item.tocHref || null; - item.name = item.name || null; - - item.level = level; - if (item.items && item.items.length > 0) { - var length = item.items.length; - for (var i = 0; i < length; i++) { - transformItem(item.items[i], level + 1); - }; - } else { - item.items = []; - item.leaf = true; - } - } -} diff --git a/RWSDocsTemplate/ManagedReference.common.js b/RWSTemplate/ManagedReference.common.js similarity index 91% rename from RWSDocsTemplate/ManagedReference.common.js rename to RWSTemplate/ManagedReference.common.js index 8f05591..0acc61b 100644 --- a/RWSDocsTemplate/ManagedReference.common.js +++ b/RWSTemplate/ManagedReference.common.js @@ -1,4 +1,5 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. var common = require('./common.js'); var classCategory = 'class'; var namespaceCategory = 'ns'; @@ -20,7 +21,6 @@ exports.transform = function (model) { case 'namespace': model.isNamespace = true; if (model.children) groupChildren(model, namespaceCategory); - model[getTypePropertyName(model.type)] = true; break; case 'class': case 'interface': @@ -36,6 +36,10 @@ exports.transform = function (model) { } } + if (model.summary && !model.description) { + model.description = model.summary.replace(/<.*?>/gi, '').replace(/(\r\n|\n|\r)/gm, ' ').trim(); + } + return model; } @@ -193,12 +197,14 @@ function handleItem(vm, gitContribute, gitUrlPattern) { vm.sourceurl = common.getViewSourceHref(vm, null, gitUrlPattern); // set to null incase mustache looks up - vm.summary = vm.summary || null; - vm.remarks = vm.remarks || null; - vm.conceptual = vm.conceptual || null; - vm.syntax = vm.syntax || null; - vm.implements = vm.implements || null; - vm.example = vm.example || null; + vm.summary = vm.summary || ""; + vm.description = vm.description || ""; + vm.remarks = vm.remarks || ""; + vm.conceptual = vm.conceptual || ""; + vm.syntax = vm.syntax || ""; + vm.implements = vm.implements || ""; + vm.example = vm.example || ""; + vm.seealso = vm.seealso || []; common.processSeeAlso(vm); // id is used as default template's bookmark @@ -255,4 +261,9 @@ function handleItem(vm, gitContribute, gitUrlPattern) { return array; } -} \ No newline at end of file + if(vm.syntax.typeParameters) { + vm.syntax.typeParameters.forEach(item => { + item.description = item.description || ""; + }); + } +} diff --git a/RWSDocsTemplate/ManagedReference.extension.js b/RWSTemplate/ManagedReference.extension.js similarity index 69% rename from RWSDocsTemplate/ManagedReference.extension.js rename to RWSTemplate/ManagedReference.extension.js index 50fdc6a..740e3b1 100644 --- a/RWSDocsTemplate/ManagedReference.extension.js +++ b/RWSTemplate/ManagedReference.extension.js @@ -1,4 +1,5 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. /** * This method will be called at the start of exports.transform in ManagedReference.html.primary.js @@ -12,4 +13,4 @@ exports.preTransform = function (model) { */ exports.postTransform = function (model) { return model; -} \ No newline at end of file +} diff --git a/RWSTemplate/ManagedReference.html.primary.js b/RWSTemplate/ManagedReference.html.primary.js new file mode 100644 index 0000000..f5b306e --- /dev/null +++ b/RWSTemplate/ManagedReference.html.primary.js @@ -0,0 +1,69 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +var common = require('./ManagedReference.common.js'); +var extension = require('./ManagedReference.extension.js'); +var overwrite = require('./ManagedReference.overwrite.js'); + +exports.transform = function (model) { + model.yamlmime = "ManagedReference"; + + if (overwrite && overwrite.transform) { + return overwrite.transform(model); + } + + if (extension && extension.preTransform) { + model = extension.preTransform(model); + } + + if (common && common.transform) { + model = common.transform(model); + } + if (model.type.toLowerCase() === "enum") { + model.isClass = false; + model.isEnum = true; + } + if(model._disableToc === undefined) { + model._disableToc = model._disableToc || !model._tocPath || (model._navPath === model._tocPath); + } + model._disableNextArticle = true; + + if (extension && extension.postTransform) { + if (model._splitReference) { + model = postTransformMemberPage(model); + } + + model = extension.postTransform(model); + } + + return model; +} + +exports.getOptions = function (model) { + if (overwrite && overwrite.getOptions) { + return overwrite.getOptions(model); + } + var ignoreChildrenBookmarks = model._splitReference && model.type && common.getCategory(model.type) === 'ns'; + + return { + "bookmarks": common.getBookmarks(model, ignoreChildrenBookmarks) + }; +} + +function postTransformMemberPage(model) { + var type = model.type.toLowerCase(); + var category = common.getCategory(type); + if (category == 'class') { + var typePropertyName = common.getTypePropertyName(type); + if (typePropertyName) { + model[typePropertyName] = true; + } + if (model.children && model.children.length > 0) { + model.isCollection = true; + common.groupChildren(model, 'class'); + } else { + model.isItem = true; + } + } + return model; +} diff --git a/RWSTemplate/ManagedReference.html.primary.tmpl b/RWSTemplate/ManagedReference.html.primary.tmpl new file mode 100644 index 0000000..22f565f --- /dev/null +++ b/RWSTemplate/ManagedReference.html.primary.tmpl @@ -0,0 +1,22 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} +{{!master(layout/_master.tmpl)}} + +{{#isNamespace}} + {{>partials/namespace}} +{{/isNamespace}} + +{{#_splitReference}} +{{#isClass}} + {{>partials/class.memberpage}} +{{/isClass}} +{{/_splitReference}} +{{^_splitReference}} +{{#isClass}} + {{>partials/class}} +{{/isClass}} +{{/_splitReference}} + +{{#isEnum}} + {{>partials/enum}} +{{/isEnum}} +{{>partials/customMREFContent}} diff --git a/RWSDocsTemplate/Plugins/HtmlAgilityPack.dll b/RWSTemplate/Plugins/HtmlAgilityPack.dll similarity index 100% rename from RWSDocsTemplate/Plugins/HtmlAgilityPack.dll rename to RWSTemplate/Plugins/HtmlAgilityPack.dll diff --git a/RWSDocsTemplate/Plugins/HtmlAgilityPack.pdb b/RWSTemplate/Plugins/HtmlAgilityPack.pdb similarity index 100% rename from RWSDocsTemplate/Plugins/HtmlAgilityPack.pdb rename to RWSTemplate/Plugins/HtmlAgilityPack.pdb diff --git a/RWSDocsTemplate/Plugins/Microsoft.DocAsCode.Common.dll b/RWSTemplate/Plugins/Microsoft.DocAsCode.Common.dll similarity index 100% rename from RWSDocsTemplate/Plugins/Microsoft.DocAsCode.Common.dll rename to RWSTemplate/Plugins/Microsoft.DocAsCode.Common.dll diff --git a/RWSDocsTemplate/Plugins/Microsoft.DocAsCode.Dfm.dll b/RWSTemplate/Plugins/Microsoft.DocAsCode.Dfm.dll similarity index 100% rename from RWSDocsTemplate/Plugins/Microsoft.DocAsCode.Dfm.dll rename to RWSTemplate/Plugins/Microsoft.DocAsCode.Dfm.dll diff --git a/RWSDocsTemplate/Plugins/Microsoft.DocAsCode.MarkdownLite.dll b/RWSTemplate/Plugins/Microsoft.DocAsCode.MarkdownLite.dll similarity index 100% rename from RWSDocsTemplate/Plugins/Microsoft.DocAsCode.MarkdownLite.dll rename to RWSTemplate/Plugins/Microsoft.DocAsCode.MarkdownLite.dll diff --git a/RWSDocsTemplate/Plugins/Microsoft.DocAsCode.Plugins.dll b/RWSTemplate/Plugins/Microsoft.DocAsCode.Plugins.dll similarity index 100% rename from RWSDocsTemplate/Plugins/Microsoft.DocAsCode.Plugins.dll rename to RWSTemplate/Plugins/Microsoft.DocAsCode.Plugins.dll diff --git a/RWSDocsTemplate/Plugins/Microsoft.DocAsCode.YamlSerialization.dll b/RWSTemplate/Plugins/Microsoft.DocAsCode.YamlSerialization.dll similarity index 100% rename from RWSDocsTemplate/Plugins/Microsoft.DocAsCode.YamlSerialization.dll rename to RWSTemplate/Plugins/Microsoft.DocAsCode.YamlSerialization.dll diff --git a/RWSDocsTemplate/Plugins/Newtonsoft.Json.dll b/RWSTemplate/Plugins/Newtonsoft.Json.dll similarity index 100% rename from RWSDocsTemplate/Plugins/Newtonsoft.Json.dll rename to RWSTemplate/Plugins/Newtonsoft.Json.dll diff --git a/RWSDocsTemplate/Plugins/System.Buffers.dll b/RWSTemplate/Plugins/System.Buffers.dll similarity index 100% rename from RWSDocsTemplate/Plugins/System.Buffers.dll rename to RWSTemplate/Plugins/System.Buffers.dll diff --git a/RWSDocsTemplate/Plugins/System.Collections.Immutable.dll b/RWSTemplate/Plugins/System.Collections.Immutable.dll similarity index 100% rename from RWSDocsTemplate/Plugins/System.Collections.Immutable.dll rename to RWSTemplate/Plugins/System.Collections.Immutable.dll diff --git a/RWSDocsTemplate/Plugins/System.Composition.AttributedModel.dll b/RWSTemplate/Plugins/System.Composition.AttributedModel.dll similarity index 100% rename from RWSDocsTemplate/Plugins/System.Composition.AttributedModel.dll rename to RWSTemplate/Plugins/System.Composition.AttributedModel.dll diff --git a/RWSDocsTemplate/Plugins/System.Composition.Convention.dll b/RWSTemplate/Plugins/System.Composition.Convention.dll similarity index 100% rename from RWSDocsTemplate/Plugins/System.Composition.Convention.dll rename to RWSTemplate/Plugins/System.Composition.Convention.dll diff --git a/RWSDocsTemplate/Plugins/System.Composition.Hosting.dll b/RWSTemplate/Plugins/System.Composition.Hosting.dll similarity index 100% rename from RWSDocsTemplate/Plugins/System.Composition.Hosting.dll rename to RWSTemplate/Plugins/System.Composition.Hosting.dll diff --git a/RWSDocsTemplate/Plugins/System.Composition.Runtime.dll b/RWSTemplate/Plugins/System.Composition.Runtime.dll similarity index 100% rename from RWSDocsTemplate/Plugins/System.Composition.Runtime.dll rename to RWSTemplate/Plugins/System.Composition.Runtime.dll diff --git a/RWSDocsTemplate/Plugins/System.Composition.TypedParts.dll b/RWSTemplate/Plugins/System.Composition.TypedParts.dll similarity index 100% rename from RWSDocsTemplate/Plugins/System.Composition.TypedParts.dll rename to RWSTemplate/Plugins/System.Composition.TypedParts.dll diff --git a/RWSDocsTemplate/Plugins/System.Memory.dll b/RWSTemplate/Plugins/System.Memory.dll similarity index 100% rename from RWSDocsTemplate/Plugins/System.Memory.dll rename to RWSTemplate/Plugins/System.Memory.dll diff --git a/RWSDocsTemplate/Plugins/System.Numerics.Vectors.dll b/RWSTemplate/Plugins/System.Numerics.Vectors.dll similarity index 100% rename from RWSDocsTemplate/Plugins/System.Numerics.Vectors.dll rename to RWSTemplate/Plugins/System.Numerics.Vectors.dll diff --git a/RWSDocsTemplate/Plugins/System.Runtime.CompilerServices.Unsafe.dll b/RWSTemplate/Plugins/System.Runtime.CompilerServices.Unsafe.dll similarity index 100% rename from RWSDocsTemplate/Plugins/System.Runtime.CompilerServices.Unsafe.dll rename to RWSTemplate/Plugins/System.Runtime.CompilerServices.Unsafe.dll diff --git a/RWSDocsTemplate/Plugins/TradosStudioDocsPlugin.dll b/RWSTemplate/Plugins/TradosStudioDocsPlugin.dll similarity index 62% rename from RWSDocsTemplate/Plugins/TradosStudioDocsPlugin.dll rename to RWSTemplate/Plugins/TradosStudioDocsPlugin.dll index c28fc7c31932321859dd2dc9cef5c0fc6afb74c9..ec0783b605cc9fc0a5a32b3af4712434c64b000e 100644 GIT binary patch delta 410 zcmZp$Xt0>j!7_cWdCSBe8AhRrE5jN0PG)3OXZ>Noz+f?1kx6HAB%?Z`#N3FfdMb6fxf%z{Jd`#>&J{P^1kc^5q#AxKxX#g7~`;d}(GN z-+FQ-bFowkGXsNiXfVSY9tH*hpoz-vp`I>4`VY@$HkLP>EJh3rvXkp1Wd#I-8A=#R z8B!QB8S)tn8O$du^C>c#Pj=;tXEtImn!KD(MJQ91!I7Z=2wfNwfr=9uR42dXGXyG< z=l8)axu1U}P)VkMw?N8vO@6UP2B!rfRnButKHb}VL?D7m^#7snmq8w80^(jEHURqH zV6vgGvc~5}d2A`Zo1ELi{an^`NKIk{$~s%cIOnIN#)K3lrsNmvItF;^x=gMUP850y x4K|<}hW{Y8!bC+erjLe`IYl%#8;IOvoNU0Pu$fQn7c-NH(PlxZ_ly$_*a2O)Wi$W) delta 440 zcmZp$Xt0>j!SeRJ%c_YzGK@wOSB5j*pUlXp&MINZz+f?1kx6HAB%?Z`#pFiDdP!j; z1~Bjdl1vP&3@a2F7z+3q7#JrjikNQ>U}9!e6J=s3D6$3;`SJ`5T&hJ|LHyeYzBMzD zA3eE}xmc=&nSnt$G?;;hmw`b5Xri)vsHY2%mf_vZ#`1=f1?T|T$#s&l0)oK|B@Cqu zDGZqm`3!~(W|Niq6dBDXyYj^|8!}ir-uXsNHN}v``0dIlKBnPJX0ov~Sbmnnh;Q8CXd5J&-lc>et zGn+sG!UV+qKpX&ca=>IkVP&n;S$+@OH?4Bm;9)sCZo{bzMxd;-Rg8OPiAQNtOmRtR zN@l)pVnL>E%H$Z~L?L!)zyehO_KIueV;z!6shVd83G+VuxOc+5c&q;hJVR@WK;*Iq!L% z=bZDr=lP#^w!mi#{B)O2VvKDAg{}FTd!08(Pq?s2dJQ`<|C%qB#B4k@vV5xyb1hogbgl|B!@)>6 z6;DJa4@TpuLypkIsAE{9J`M`2rBUo_HP^<-dwAI^qLv|Xx~)-MQ;p3PCw^o$l})k- zS}ILAULOla)^2h(u%l9ZP^c5;@;Q4A3#h1{UTL)*JrgpUW-vf$*%kbS5HNxMF~&Oa zmv!po*40q5+VO0@ukhb=vvZ&0nWByY@+Huh8m&@_wLclUL9w(t#ggyMSW2f9yL7$3 zlVT}NiiNNKU%@ltl+CCk7bTs@hN^k4f7aY zDgJ;MbZtE!adTB>Bqz=!{P^<8No>#R)^T{Afr^#?*<&)SC#DnYT9*r1xymd0+bkx1 zoxCQ0%%||Q+Qxf?MI9)U*NP^)%k1_*SDEc>U~G-;Q!yUYTb|NQMY{y_U?ZT5+lsfZ z6RDuNt{PzhSrM>2{eF1W9+t7x1PI|A;2Bx+Mp(JLbSkB{B|m;8=@)GV8d^Dk~=d-nYP zeocHV7yf!`eE9M=t?Bnu9teNXXC@; zmCYF|=Cwz!TsN}SFFsc|q_3Mj*4xaj6x~w#O-bXU;|0H8f@S>v2p_YoGIzWB(UyDfLxBTUfYDUlnr3YI#%e7LA4rYP#ktAkc;;tx0K%u-1!$umS67 zjF&M!O20@_!gMBlcjdeOt^bA0IUKU`#WI0L|`1A852yAhy;#x=yi_ z0>zSVYb@;;i2b;bpGmQl3B|&v{4Kbik7j5TlsLI5`A&~Dig~l9BiIJNliM#RAGKu> zCs=3Rycl`1T1cIU6Esc@k{E{H3I9Iug=d!>W-8uZGRBnrU5SIm`sPa+D~k|FGE5Kw z{a^gKXcw%XKv+FcmBSZvqC8yLT0)l7pljm~jG0X4du}XdlMO9Xrc_qQ(@f?dO?2}m zlQPIk+Dhc6L!mq_{Sj@E<5GK3m%XpkQ52-iM#EWy6lYa#-h?3Bqt_JeA&3SV5XJk= z+5{bLCk9Uo=oRQmF>>E6vyJ7%W2gr+sFV@?819w&K$GHG!gyX~;eHZcDo6v7AQ_|p zErZ3qjN$-gLz^XlM6eqqd93w}>7WBYbE`x?P%87us;b4EA?ex} z$-fAf&zIhJ9}w9YZY@jV&a#>y5#vUL%U}icp;Tc-Y)cI5`d@uF@!5u~tvZ$@8^1mE zA`4-u_r&UT?~G-xuEKSG?n%#%)As@n@n?P8bO_rE@&M^O8{`7|_HEa925bgE?*x5` Vb^$%uuJ%mWvOo^lRJ*$+@;f1oxPbrw diff --git a/RWSDocsTemplate/Plugins/YamlDotNet.dll b/RWSTemplate/Plugins/YamlDotNet.dll similarity index 100% rename from RWSDocsTemplate/Plugins/YamlDotNet.dll rename to RWSTemplate/Plugins/YamlDotNet.dll diff --git a/RWSTemplate/Redirection.html.primary.tmpl b/RWSTemplate/Redirection.html.primary.tmpl new file mode 100644 index 0000000..bd8c4ab --- /dev/null +++ b/RWSTemplate/Redirection.html.primary.tmpl @@ -0,0 +1,8 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + + + + + + + diff --git a/RWSDocsTemplate/RestApi.common.js b/RWSTemplate/RestApi.common.js similarity index 76% rename from RWSDocsTemplate/RestApi.common.js rename to RWSTemplate/RestApi.common.js index 2e33dbe..cdb0759 100644 --- a/RWSDocsTemplate/RestApi.common.js +++ b/RWSTemplate/RestApi.common.js @@ -1,4 +1,5 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. var common = require('./common.js'); exports.transform = function (model) { @@ -80,6 +81,21 @@ exports.transform = function (model) { model.children = model.children.filter(function (o) { return o; }); } } + model.definitions = []; + if (model.tags) { + model.tags.forEach(function(tag) { + (tag.children || []).forEach(function(child) { + (child.parameters || []).forEach(function(parameter) { addComplexTypeMetadata(parameter.schema, model.definitions); }); + (child.responses || []).forEach(function(response) { addComplexTypeMetadata(response.schema, model.definitions); }); + }); + }); + } + if (model.children) { + model.children.forEach(function(child) { + (child.parameters || []).forEach(function(parameter) { addComplexTypeMetadata(parameter.schema, model.definitions); }); + (child.responses || []).forEach(function(response) { addComplexTypeMetadata(response.schema, model.definitions); }); + }); + } return model; @@ -256,6 +272,72 @@ exports.transform = function (model) { } return path; } + + function addDefinition(definition, definitions) { + + if (!definition) { + return; + } + + var xRefName = definition.items && definition.items['x-internal-ref-name'] + ? definition.items['x-internal-ref-name'] + : definition['x-internal-ref-name']; + + // Not complex type. + if (!xRefName) { + return; + } + + // Definition already exists return. + if (definitions.some(function(d) { return d['x-internal-ref-name'] == xRefName; })) { + return; + } + + // Create clone to not affect object structure used in original location + definition = JSON.parse(JSON.stringify(definition)); + + // Unify different object structure to be the same + + // Sometimes properties is under items sometimes not + if (definition.items && definition.items.properties) { + definition.properties = definition.items.properties; + } + + // Sometimes ref-name is under items sometimes not + definition['x-internal-ref-name'] = xRefName; + + // Sometimes properties are key/value pairs sometimes not + if (definition.properties && !Array.isArray(definition.properties)) { + definition.properties = Object.keys(definition.properties).map(function(key) { + return { + key: key, + value: definition.properties[key] + } + }); + } + + // Add definition to definitions list. + definitions.push(definition); + + // Loop through properties that refer to other definitions. + (definition.properties || []).forEach(function(property) { + addComplexTypeMetadata(property.value, definitions); + }); + } + + function addComplexTypeMetadata(child, definitions) { + // Add variations of x-internal-ref-name to support + if (child && child['x-internal-ref-name']) { + child.cTypeId = child['x-internal-ref-name'].replace(/\./g, '_'); + child.cType = child['x-internal-ref-name'].replace(/([A-Z])/g, '$1'); + } + if (child && child.items && child.items['x-internal-ref-name']) { + child.cTypeId = child.items['x-internal-ref-name'].replace(/\./g, '_'); + child.cType = child.items['x-internal-ref-name'].replace(/([A-Z])/g, '$1'); + child.cTypeIsArray = true; + } + addDefinition(child, definitions); + } } exports.getBookmarks = function (model) { diff --git a/RWSDocsTemplate/RestApi.extension.js b/RWSTemplate/RestApi.extension.js similarity index 68% rename from RWSDocsTemplate/RestApi.extension.js rename to RWSTemplate/RestApi.extension.js index ffb0062..5cf4c92 100644 --- a/RWSDocsTemplate/RestApi.extension.js +++ b/RWSTemplate/RestApi.extension.js @@ -1,4 +1,5 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. /** * This method will be called at the start of exports.transform in RestApi.html.primary.js @@ -12,4 +13,4 @@ exports.preTransform = function (model) { */ exports.postTransform = function (model) { return model; -} \ No newline at end of file +} diff --git a/RWSDocsTemplate/RestApi.html.primary.js b/RWSTemplate/RestApi.html.primary.js similarity index 63% rename from RWSDocsTemplate/RestApi.html.primary.js rename to RWSTemplate/RestApi.html.primary.js index e64616a..b148bb2 100644 --- a/RWSDocsTemplate/RestApi.html.primary.js +++ b/RWSTemplate/RestApi.html.primary.js @@ -1,4 +1,5 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. var restApiCommon = require('./RestApi.common.js'); var extension = require('./RestApi.extension.js') @@ -11,7 +12,10 @@ exports.transform = function (model) { if (restApiCommon && restApiCommon.transform) { model = restApiCommon.transform(model); } - model._disableToc = model._disableToc || !model._tocPath || (model._navPath === model._tocPath); + if(model._disableToc === undefined) { + model._disableToc = model._disableToc || !model._tocPath || (model._navPath === model._tocPath); + } + model._disableNextArticle = true; if (extension && extension.postTransform) { model = extension.postTransform(model); @@ -22,4 +26,4 @@ exports.transform = function (model) { exports.getOptions = function (model) { return { "bookmarks": restApiCommon.getBookmarks(model) }; -} \ No newline at end of file +} diff --git a/RWSTemplate/RestApi.html.primary.tmpl b/RWSTemplate/RestApi.html.primary.tmpl new file mode 100644 index 0000000..6c6a074 --- /dev/null +++ b/RWSTemplate/RestApi.html.primary.tmpl @@ -0,0 +1,3 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} +{{!master(layout/_master.tmpl)}} +{{>partials/rest}} diff --git a/RWSDocsTemplate/UniversalReference.common.js b/RWSTemplate/UniversalReference.common.js similarity index 98% rename from RWSDocsTemplate/UniversalReference.common.js rename to RWSTemplate/UniversalReference.common.js index 76e186d..a9dbe06 100644 --- a/RWSDocsTemplate/UniversalReference.common.js +++ b/RWSTemplate/UniversalReference.common.js @@ -1,4 +1,5 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. var common = require('./common.js');; var classCategory = 'class'; @@ -81,7 +82,7 @@ function handleItem(vm, gitContribute, gitUrlPattern) { if (vm.inheritance) { normalizeLanguageValuePairs(vm.inheritance).forEach(handleInheritance); } - + common.processSeeAlso(vm); // id is used as default template's bookmark diff --git a/RWSDocsTemplate/UniversalReference.extension.js b/RWSTemplate/UniversalReference.extension.js similarity index 69% rename from RWSDocsTemplate/UniversalReference.extension.js rename to RWSTemplate/UniversalReference.extension.js index f00e096..5867c38 100644 --- a/RWSDocsTemplate/UniversalReference.extension.js +++ b/RWSTemplate/UniversalReference.extension.js @@ -1,4 +1,5 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. /** * This method will be called at the start of exports.transform in UniversalReference.html.primary.js @@ -12,4 +13,4 @@ exports.preTransform = function (model) { */ exports.postTransform = function (model) { return model; -} \ No newline at end of file +} diff --git a/RWSDocsTemplate/UniversalReference.html.primary.js b/RWSTemplate/UniversalReference.html.primary.js similarity index 63% rename from RWSDocsTemplate/UniversalReference.html.primary.js rename to RWSTemplate/UniversalReference.html.primary.js index 61b9cff..535fbf4 100644 --- a/RWSDocsTemplate/UniversalReference.html.primary.js +++ b/RWSTemplate/UniversalReference.html.primary.js @@ -1,4 +1,5 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. var urefCommon = require('./UniversalReference.common.js'); var extension = require('./UniversalReference.extension.js'); @@ -12,7 +13,10 @@ exports.transform = function (model) { model = urefCommon.transform(model); } - model._disableToc = model._disableToc || !model._tocPath || (model._navPath === model._tocPath); + if(model._disableToc === undefined) { + model._disableToc = model._disableToc || !model._tocPath || (model._navPath === model._tocPath); + } + model._disableNextArticle = true; if (extension && extension.postTransform) { model = extension.postTransform(model); @@ -25,4 +29,4 @@ exports.getOptions = function (model) { return { "bookmarks": urefCommon.getBookmarks(model) }; -} \ No newline at end of file +} diff --git a/RWSDocsTemplate/UniversalReference.html.primary.tmpl b/RWSTemplate/UniversalReference.html.primary.tmpl similarity index 56% rename from RWSDocsTemplate/UniversalReference.html.primary.tmpl rename to RWSTemplate/UniversalReference.html.primary.tmpl index 2855391..d2b1b2f 100644 --- a/RWSDocsTemplate/UniversalReference.html.primary.tmpl +++ b/RWSTemplate/UniversalReference.html.primary.tmpl @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} {{!master(layout/_master.tmpl)}} {{#isNamespace}} diff --git a/RWSDocsTemplate/common.js b/RWSTemplate/common.js similarity index 96% rename from RWSDocsTemplate/common.js rename to RWSTemplate/common.js index 5929301..1797700 100644 --- a/RWSDocsTemplate/common.js +++ b/RWSTemplate/common.js @@ -1,4 +1,5 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. exports.path = {}; exports.path.getFileNameWithoutExtension = getFileNameWithoutExtension; exports.path.getDirectoryName = getDirectoryName; @@ -31,7 +32,9 @@ function getHtmlId(input) { // Note: the parameter `gitContribute` won't be used in this function function getViewSourceHref(item, gitContribute, gitUrlPattern) { - if (!item || !item.source || !item.source.remote) return ''; + if (!item || !item.source) return ''; + if (item.source.href) return item.source.href; + if (!item.source.remote) return ''; return getRemoteUrl(item.source.remote, item.source.startLine - '0' + 1, null, gitUrlPattern); } @@ -234,4 +237,4 @@ function addIsCref(seealso) { if (!seealso.linkType || seealso.linkType.toLowerCase() == "cref") { seealso.isCref = true; } -} \ No newline at end of file +} diff --git a/RWSDocsTemplate/conceptual.extension.js b/RWSTemplate/conceptual.extension.js similarity index 68% rename from RWSDocsTemplate/conceptual.extension.js rename to RWSTemplate/conceptual.extension.js index 61a5370..1a5532c 100644 --- a/RWSDocsTemplate/conceptual.extension.js +++ b/RWSTemplate/conceptual.extension.js @@ -1,4 +1,5 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. /** * This method will be called at the start of exports.transform in conceptual.html.primary.js @@ -12,4 +13,4 @@ exports.preTransform = function (model) { */ exports.postTransform = function (model) { return model; -} \ No newline at end of file +} diff --git a/RWSDocsTemplate/conceptual.html.primary.js b/RWSTemplate/conceptual.html.primary.js similarity index 61% rename from RWSDocsTemplate/conceptual.html.primary.js rename to RWSTemplate/conceptual.html.primary.js index 486f1cd..19d2479 100644 --- a/RWSDocsTemplate/conceptual.html.primary.js +++ b/RWSTemplate/conceptual.html.primary.js @@ -1,4 +1,5 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. var common = require('./common.js'); var extension = require('./conceptual.extension.js') @@ -8,7 +9,9 @@ exports.transform = function (model) { model = extension.preTransform(model); } - model._disableToc = model._disableToc || !model._tocPath || (model._navPath === model._tocPath); + if(model._disableToc === undefined) { + model._disableToc = model._disableToc || !model._tocPath || (model._navPath === model._tocPath); + } model.docurl = model.docurl || common.getImproveTheDocHref(model, model._gitContribute, model._gitUrlPattern); if (extension && extension.postTransform) { @@ -16,4 +19,4 @@ exports.transform = function (model) { } return model; -} \ No newline at end of file +} diff --git a/RWSTemplate/conceptual.html.primary.tmpl b/RWSTemplate/conceptual.html.primary.tmpl new file mode 100644 index 0000000..18b3789 --- /dev/null +++ b/RWSTemplate/conceptual.html.primary.tmpl @@ -0,0 +1,4 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} +{{!master(layout/_master.tmpl)}} +{{{rawTitle}}} +{{{conceptual}}} diff --git a/RWSDocsTemplate/favicon.ico b/RWSTemplate/favicon.ico similarity index 100% rename from RWSDocsTemplate/favicon.ico rename to RWSTemplate/favicon.ico diff --git a/RWSDocsTemplate/fonts/glyphicons-halflings-regular.eot b/RWSTemplate/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from RWSDocsTemplate/fonts/glyphicons-halflings-regular.eot rename to RWSTemplate/fonts/glyphicons-halflings-regular.eot diff --git a/RWSDocsTemplate/fonts/glyphicons-halflings-regular.svg b/RWSTemplate/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from RWSDocsTemplate/fonts/glyphicons-halflings-regular.svg rename to RWSTemplate/fonts/glyphicons-halflings-regular.svg diff --git a/RWSDocsTemplate/fonts/glyphicons-halflings-regular.ttf b/RWSTemplate/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from RWSDocsTemplate/fonts/glyphicons-halflings-regular.ttf rename to RWSTemplate/fonts/glyphicons-halflings-regular.ttf diff --git a/RWSDocsTemplate/fonts/glyphicons-halflings-regular.woff b/RWSTemplate/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from RWSDocsTemplate/fonts/glyphicons-halflings-regular.woff rename to RWSTemplate/fonts/glyphicons-halflings-regular.woff diff --git a/RWSDocsTemplate/fonts/glyphicons-halflings-regular.woff2 b/RWSTemplate/fonts/glyphicons-halflings-regular.woff2 similarity index 100% rename from RWSDocsTemplate/fonts/glyphicons-halflings-regular.woff2 rename to RWSTemplate/fonts/glyphicons-halflings-regular.woff2 diff --git a/RWSDocsTemplate/layout/_master.tmpl b/RWSTemplate/layout/_master.tmpl similarity index 76% rename from RWSDocsTemplate/layout/_master.tmpl rename to RWSTemplate/layout/_master.tmpl index 1145dc2..300f810 100644 --- a/RWSDocsTemplate/layout/_master.tmpl +++ b/RWSTemplate/layout/_master.tmpl @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} {{!include(/^styles/.*/)}} {{!include(/^fonts/.*/)}} {{!include(favicon.ico)}} @@ -6,23 +6,26 @@ {{!include(search-stopwords.json)}} - + {{>partials/head}} + {{^redirect_url}}
-
+
{{^_disableNavbar}} {{>partials/navbar}} {{/_disableNavbar}} {{^_disableBreadcrumb}} {{>partials/breadcrumb}} - {{/_disableBreadcrumb}} + {{/_disableBreadcrumb}}
+ {{#_enableSearch}} -
- {{>partials/searchResults}} -
+
+ {{>partials/searchResults}} +
{{/_enableSearch}} +
{{^_disableToc}} {{>partials/toc}} @@ -30,7 +33,7 @@ {{/_disableToc}} {{#_disableToc}}
- {{/_disableToc}} + {{/_disableToc}} {{#_disableAffix}}
{{/_disableAffix}} @@ -52,4 +55,5 @@
{{>partials/scripts}} - + {{/redirect_url}} + \ No newline at end of file diff --git a/RWSDocsTemplate/logo.svg b/RWSTemplate/logo.svg similarity index 100% rename from RWSDocsTemplate/logo.svg rename to RWSTemplate/logo.svg diff --git a/RWSDocsTemplate/partials/affix.tmpl.partial b/RWSTemplate/partials/affix.tmpl.partial similarity index 77% rename from RWSDocsTemplate/partials/affix.tmpl.partial rename to RWSTemplate/partials/affix.tmpl.partial index 3e55e8a..92d5d31 100644 --- a/RWSDocsTemplate/partials/affix.tmpl.partial +++ b/RWSTemplate/partials/affix.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}}
@@ -19,7 +19,7 @@
{{/_disableContribution}}
-

{{__global.inThisArticle}}

+
{{__global.inThisArticle}}
diff --git a/RWSTemplate/partials/breadcrumb.tmpl.partial b/RWSTemplate/partials/breadcrumb.tmpl.partial new file mode 100644 index 0000000..5e9367c --- /dev/null +++ b/RWSTemplate/partials/breadcrumb.tmpl.partial @@ -0,0 +1,9 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + +
+
+
    +
  • {{_tocTitle}}
  • +
+
+
diff --git a/RWSDocsTemplate/partials/class.header.tmpl.partial b/RWSTemplate/partials/class.header.tmpl.partial similarity index 87% rename from RWSDocsTemplate/partials/class.header.tmpl.partial rename to RWSTemplate/partials/class.header.tmpl.partial index a8ed088..d743484 100644 --- a/RWSDocsTemplate/partials/class.header.tmpl.partial +++ b/RWSTemplate/partials/class.header.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}}

{{>partials/title}}

{{{summary}}}
@@ -16,7 +16,7 @@
{{/inClass}} {{#implements.0}} -
+
{{__global.implements}}
{{/implements.0}} {{#implements}} @@ -46,11 +46,11 @@
{{__global.assembly}}: {{assemblies.0}}.dll
{{__global.syntax}}
-
{{syntax.content.0.value}}
+
{{syntax.content.0.value}}
{{#syntax.parameters.0}}
{{__global.parameters}}
- +
@@ -73,7 +73,7 @@ {{/syntax.parameters.0}} {{#syntax.return}}
{{__global.returns}}
-
{{__global.type}}
+
@@ -90,7 +90,7 @@ {{/syntax.return}} {{#syntax.typeParameters.0}}
{{__global.typeParameters}}
-
{{__global.type}}
+
diff --git a/RWSTemplate/partials/class.memberpage.tmpl.partial b/RWSTemplate/partials/class.memberpage.tmpl.partial new file mode 100644 index 0000000..54ce161 --- /dev/null +++ b/RWSTemplate/partials/class.memberpage.tmpl.partial @@ -0,0 +1,59 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + +{{>partials/class.header}} +{{#children}} +{{#overload}} + +{{/overload}} +

{{>partials/classSubtitle}}

+{{#children.0}} +
{{__global.name}}
+ + + + + + + + {{/children.0}} + {{#children}} + + + + + {{/children}} + {{#children.0}} + +
{{__global.name}}{{__global.description}}
+ + {{{summary}}}
+{{/children.0}} +{{/children}} +{{#extensionMethods.0}} +

{{__global.extensionMethods}}

+{{/extensionMethods.0}} +{{#extensionMethods}} +
+ {{#definition}} + + {{/definition}} + {{^definition}} + + {{/definition}} +
+{{/extensionMethods}} +{{#seealso.0}} +

{{__global.seealso}}

+
+{{/seealso.0}} +{{#seealso}} + {{#isCref}} +
{{{type.specName.0.value}}}
+ {{/isCref}} + {{^isCref}} +
{{{url}}}
+ {{/isCref}} +{{/seealso}} +{{#seealso.0}} +
+{{/seealso.0}} diff --git a/RWSDocsTemplate/partials/class.tmpl.partial b/RWSTemplate/partials/class.tmpl.partial similarity index 87% rename from RWSDocsTemplate/partials/class.tmpl.partial rename to RWSTemplate/partials/class.tmpl.partial index 7490fbe..6b61910 100644 --- a/RWSDocsTemplate/partials/class.tmpl.partial +++ b/RWSTemplate/partials/class.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} {{>partials/class.header}} {{#children}} @@ -21,14 +21,14 @@

{{name.0.value}}

{{{summary}}}
{{{conceptual}}}
-
{{__global.declaration}}
+
{{__global.declaration}}
{{#syntax}}
-
{{syntax.content.0.value}}
+
{{syntax.content.0.value}}
{{#parameters.0}}
{{__global.parameters}}
- +
@@ -51,7 +51,7 @@ {{/parameters.0}} {{#return}}
{{__global.returns}}
-
{{__global.type}}
+
@@ -68,7 +68,7 @@ {{/return}} {{#typeParameters.0}}
{{__global.typeParameters}}
-
{{__global.type}}
+
@@ -89,7 +89,7 @@ {{/typeParameters.0}} {{#fieldValue}}
{{__global.fieldValue}}
-
{{__global.name}}
+
@@ -106,7 +106,7 @@ {{/fieldValue}} {{#propertyValue}}
{{__global.propertyValue}}
-
{{__global.type}}
+
@@ -123,7 +123,7 @@ {{/propertyValue}} {{#eventType}}
{{__global.eventType}}
-
{{__global.type}}
+
@@ -155,7 +155,7 @@ {{/example}} {{#exceptions.0}}
{{__global.exceptions}}
-
{{__global.type}}
+
diff --git a/RWSDocsTemplate/partials/classSubtitle.tmpl.partial b/RWSTemplate/partials/classSubtitle.tmpl.partial similarity index 76% rename from RWSDocsTemplate/partials/classSubtitle.tmpl.partial rename to RWSTemplate/partials/classSubtitle.tmpl.partial index 5caea36..1c17e00 100644 --- a/RWSDocsTemplate/partials/classSubtitle.tmpl.partial +++ b/RWSTemplate/partials/classSubtitle.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} {{#inConstructor}} {{__global.constructorsInSubtitle}} {{/inConstructor}} @@ -25,4 +25,4 @@ {{/inFunction}} {{#inMember}} {{__global.membersInSubtitle}} -{{/inMember}} \ No newline at end of file +{{/inMember}} diff --git a/RWSTemplate/partials/collection.tmpl.partial b/RWSTemplate/partials/collection.tmpl.partial new file mode 100644 index 0000000..7e573f8 --- /dev/null +++ b/RWSTemplate/partials/collection.tmpl.partial @@ -0,0 +1,234 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + +

{{>partials/title}}

+
{{{summary}}}
+
{{{conceptual}}}
+ +{{#children}} +{{#children}} +{{^_disableContribution}} +{{#docurl}} + + | + {{__global.improveThisDoc}} +{{/docurl}} +{{#sourceurl}} + + {{__global.viewSource}} +{{/sourceurl}} +{{/_disableContribution}} +{{#overload}} + +{{/overload}} +

{{name.0.value}}

+
{{{summary}}}
+
{{{conceptual}}}
+
{{__global.declaration}}
+{{#syntax}} +
+
{{syntax.content.0.value}}
+
+{{#parameters.0}} +
{{__global.parameters}}
+
{{__global.type}}
+ + + + + + + + +{{/parameters.0}} +{{#parameters}} + + + + + +{{/parameters}} +{{#parameters.0}} + +
{{__global.type}}{{__global.name}}{{__global.description}}
{{{type.specName.0.value}}}{{{id}}}{{{description}}}
+{{/parameters.0}} +{{#return}} +
{{__global.returns}}
+ + + + + + + + + + + + + +
{{__global.type}}{{__global.description}}
{{{type.specName.0.value}}}{{{description}}}
+{{/return}} +{{#typeParameters.0}} +
{{__global.typeParameters}}
+ + + + + + + + +{{/typeParameters.0}} +{{#typeParameters}} + + + + +{{/typeParameters}} +{{#typeParameters.0}} + +
{{__global.name}}{{__global.description}}
{{{id}}}{{{description}}}
+{{/typeParameters.0}} +{{#fieldValue}} +
{{__global.fieldValue}}
+ + + + + + + + + + + + + +
{{__global.type}}{{__global.description}}
{{{type.specName.0.value}}}{{{description}}}
+{{/fieldValue}} +{{#propertyValue}} +
{{__global.propertyValue}}
+ + + + + + + + + + + + + +
{{__global.type}}{{__global.description}}
{{{type.specName.0.value}}}{{{description}}}
+{{/propertyValue}} +{{#eventType}} +
{{__global.eventType}}
+ + + + + + + + + + + + + +
{{__global.type}}{{__global.description}}
{{{type.specName.0.value}}}{{{description}}}
+{{/eventType}} +{{/syntax}} +{{#overridden}} +
{{__global.overrides}}
+
+{{/overridden}} +{{#implements.0}} +
{{__global.implements}}
+{{/implements.0}} +{{#implements}} + {{#definition}} +
+ {{/definition}} + {{^definition}} +
+ {{/definition}} +{{/implements}} +{{#remarks}} +
{{__global.remarks}}
+
{{{remarks}}}
+{{/remarks}} +{{#example.0}} +
{{__global.examples}}
+{{/example.0}} +{{#example}} +{{{.}}} +{{/example}} +{{#exceptions.0}} +
{{__global.exceptions}}
+ + + + + + + + +{{/exceptions.0}} +{{#exceptions}} + + + + +{{/exceptions}} +{{#exceptions.0}} + +
{{__global.type}}{{__global.condition}}
{{{type.specName.0.value}}}{{{description}}}
+{{/exceptions.0}} +{{#seealso.0}} +
{{__global.seealso}}
+
+{{/seealso.0}} +{{#seealso}} + {{#isCref}} +
{{{type.specName.0.value}}}
+ {{/isCref}} + {{^isCref}} +
{{{url}}}
+ {{/isCref}} +{{/seealso}} +{{#seealso.0}} +
+{{/seealso.0}} +{{/children}} +{{/children}} +{{#extensionMethods.0}} +

{{__global.extensionMethods}}

+{{/extensionMethods.0}} +{{#extensionMethods}} +
+ {{#definition}} + + {{/definition}} + {{^definition}} + + {{/definition}} +
+{{/extensionMethods}} +{{#seealso.0}} +

{{__global.seealso}}

+
+{{/seealso.0}} +{{#seealso}} + {{#isCref}} +
{{{type.specName.0.value}}}
+ {{/isCref}} + {{^isCref}} +
{{{url}}}
+ {{/isCref}} +{{/seealso}} +{{#seealso.0}} +
+{{/seealso.0}} diff --git a/RWSTemplate/partials/customMREFContent.tmpl.partial b/RWSTemplate/partials/customMREFContent.tmpl.partial new file mode 100644 index 0000000..abb7b6f --- /dev/null +++ b/RWSTemplate/partials/customMREFContent.tmpl.partial @@ -0,0 +1,10 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} +{{!Add your own custom template for the content for ManagedReference here}} +{{#_splitReference}} +{{#isCollection}} +{{>partials/collection}} +{{/isCollection}} +{{#isItem}} +{{>partials/item}} +{{/isItem}} +{{/_splitReference}} diff --git a/RWSDocsTemplate/partials/dd-li.tmpl.partial b/RWSTemplate/partials/dd-li.tmpl.partial similarity index 100% rename from RWSDocsTemplate/partials/dd-li.tmpl.partial rename to RWSTemplate/partials/dd-li.tmpl.partial diff --git a/RWSDocsTemplate/partials/enum.tmpl.partial b/RWSTemplate/partials/enum.tmpl.partial similarity index 83% rename from RWSDocsTemplate/partials/enum.tmpl.partial rename to RWSTemplate/partials/enum.tmpl.partial index b5584ad..7afb282 100644 --- a/RWSDocsTemplate/partials/enum.tmpl.partial +++ b/RWSTemplate/partials/enum.tmpl.partial @@ -1,9 +1,9 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} {{>partials/class.header}} {{#children}}

{{>partials/classSubtitle}}

- +
diff --git a/RWSDocsTemplate/partials/footer.tmpl.partial b/RWSTemplate/partials/footer.tmpl.partial similarity index 68% rename from RWSDocsTemplate/partials/footer.tmpl.partial rename to RWSTemplate/partials/footer.tmpl.partial index f4b9a7e..cff40ee 100644 --- a/RWSDocsTemplate/partials/footer.tmpl.partial +++ b/RWSTemplate/partials/footer.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}}
diff --git a/RWSTemplate/partials/head.tmpl.partial b/RWSTemplate/partials/head.tmpl.partial new file mode 100644 index 0000000..c801f7e --- /dev/null +++ b/RWSTemplate/partials/head.tmpl.partial @@ -0,0 +1,34 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + + + + {{#_googleAnalyticsTagId}} + + + {{/_googleAnalyticsTagId}} + {{#redirect_url}} + + {{/redirect_url}} + {{^redirect_url}} + + {{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}} + + + {{#_description}}{{/_description}} + {{#description}}{{/description}} + + + + + + + {{#_noindex}}{{/_noindex}} + {{#_enableSearch}}{{/_enableSearch}} + {{#_enableNewTab}}{{/_enableNewTab}} + {{/redirect_url}} + diff --git a/RWSTemplate/partials/item.tmpl.partial b/RWSTemplate/partials/item.tmpl.partial new file mode 100644 index 0000000..547889a --- /dev/null +++ b/RWSTemplate/partials/item.tmpl.partial @@ -0,0 +1,3 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + +{{>partials/class.header}} diff --git a/RWSDocsTemplate/partials/li.tmpl.partial b/RWSTemplate/partials/li.tmpl.partial similarity index 84% rename from RWSDocsTemplate/partials/li.tmpl.partial rename to RWSTemplate/partials/li.tmpl.partial index 7e2d689..c6e0b4a 100644 --- a/RWSDocsTemplate/partials/li.tmpl.partial +++ b/RWSTemplate/partials/li.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}}
    {{#items}} diff --git a/RWSTemplate/partials/logo.tmpl.partial b/RWSTemplate/partials/logo.tmpl.partial new file mode 100644 index 0000000..1d30a2c --- /dev/null +++ b/RWSTemplate/partials/logo.tmpl.partial @@ -0,0 +1,5 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + + + {{_appName}} + diff --git a/RWSDocsTemplate/partials/namespace.tmpl.partial b/RWSTemplate/partials/namespace.tmpl.partial similarity index 76% rename from RWSDocsTemplate/partials/namespace.tmpl.partial rename to RWSTemplate/partials/namespace.tmpl.partial index e8b6b14..f52f692 100644 --- a/RWSDocsTemplate/partials/namespace.tmpl.partial +++ b/RWSTemplate/partials/namespace.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}}

    {{>partials/title}}

    {{{summary}}}
    diff --git a/RWSDocsTemplate/partials/namespaceSubtitle.tmpl.partial b/RWSTemplate/partials/namespaceSubtitle.tmpl.partial similarity index 75% rename from RWSDocsTemplate/partials/namespaceSubtitle.tmpl.partial rename to RWSTemplate/partials/namespaceSubtitle.tmpl.partial index b3a30d8..823597b 100644 --- a/RWSDocsTemplate/partials/namespaceSubtitle.tmpl.partial +++ b/RWSTemplate/partials/namespaceSubtitle.tmpl.partial @@ -1,9 +1,8 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} -{{^isNamespace}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + {{#inNamespace}} {{__global.namespacesInSubtitle}} {{/inNamespace}} -{{/isNamespace}} {{#inClass}} {{__global.classesInSubtitle}} {{/inClass}} diff --git a/RWSDocsTemplate/partials/navbar.tmpl.partial b/RWSTemplate/partials/navbar.tmpl.partial similarity index 78% rename from RWSDocsTemplate/partials/navbar.tmpl.partial rename to RWSTemplate/partials/navbar.tmpl.partial index be0dc46..995c57a 100644 --- a/RWSDocsTemplate/partials/navbar.tmpl.partial +++ b/RWSTemplate/partials/navbar.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}}
    @@ -14,7 +14,6 @@
    -
    diff --git a/RWSDocsTemplate/partials/rest.child.tmpl.partial b/RWSTemplate/partials/rest.child.tmpl.partial similarity index 64% rename from RWSDocsTemplate/partials/rest.child.tmpl.partial rename to RWSTemplate/partials/rest.child.tmpl.partial index b8be203..a64d6b7 100644 --- a/RWSDocsTemplate/partials/rest.child.tmpl.partial +++ b/RWSTemplate/partials/rest.child.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} {{^_disableContribution}} {{#docurl}} @@ -11,7 +11,7 @@ View Source {{/sourceurl}} {{/_disableContribution}} -

    {{operationId}}

    +

    {{operationId}}

    {{#summary}}
    {{{summary}}}
    {{/summary}} @@ -27,12 +27,12 @@
    {{#parameters.0}}
    Parameters
    -
{{__global.name}}
+
- + @@ -41,7 +41,18 @@ {{#parameters}} - + @@ -53,10 +64,11 @@ {{#responses.0}}
Responses
-
Name TypeValueDefault Notes
{{#required}}*{{/required}}{{name}}{{type}} + {{^schema.cType}} + {{schema.type}} + {{#schema.format}} + ({{schema.format}}) + {{/schema.format}} + {{/schema.cType}} + + {{#schema.cType}} + {{{schema.cType}}}{{#schema.cTypeIsArray}}[]{{/schema.cTypeIsArray}} + {{/schema.cType}} + {{default}} {{{description}}}
+
+ @@ -66,6 +78,15 @@ {{#responses}} +
Status CodeType Description Samples
{{statusCode}} + {{^schema.cType}} + {{schema.type}} + {{/schema.cType}} + + {{#schema.cType}} + {{{schema.cType}}}{{#schema.cTypeIsArray}}[]{{/schema.cTypeIsArray}} + {{/schema.cType}} + {{{description}}} {{#examples}} @@ -84,4 +105,4 @@ {{/responses.0}} {{#footer}}
{{{footer}}}
-{{/footer}} \ No newline at end of file +{{/footer}} diff --git a/RWSTemplate/partials/rest.definition.tmpl.partial b/RWSTemplate/partials/rest.definition.tmpl.partial new file mode 100644 index 0000000..83cc77e --- /dev/null +++ b/RWSTemplate/partials/rest.definition.tmpl.partial @@ -0,0 +1,45 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + +

{{{cType}}}

+{{#description}} +
{{{description}}}
+{{/description}} +{{#properties.0}} + + + + + + + + + + {{/properties.0}} + {{#properties}} + + + + + + {{/properties}} + {{#properties.0}} + +
NameTypeNotes
{{key}} + {{^value.cType}} + {{value.type}} + {{#value.format}} + ({{value.format}}) + {{/value.format}} + {{/value.cType}} + + {{#value.cType}} + {{{value.cType}}}{{#value.cTypeIsArray}}[]{{/value.cTypeIsArray}} + {{/value.cType}} + {{{value.description}}}
+{{/properties.0}} +{{#enum.0}} +
Enum Values
+{{#enum}} +{{.}}
+{{/enum}} +{{/enum.0}} diff --git a/RWSDocsTemplate/partials/rest.tmpl.partial b/RWSTemplate/partials/rest.tmpl.partial similarity index 78% rename from RWSDocsTemplate/partials/rest.tmpl.partial rename to RWSTemplate/partials/rest.tmpl.partial index a7c73ec..9ebedcc 100644 --- a/RWSDocsTemplate/partials/rest.tmpl.partial +++ b/RWSTemplate/partials/rest.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}}

{{name}}

{{#summary}} @@ -31,7 +31,12 @@ {{#children}} {{>partials/rest.child}} {{/children}} +{{#definitions.0}} +

Definitions

+{{/definitions.0}} +{{#definitions}} + {{>partials/rest.definition}} +{{/definitions}} {{#footer}}
{{{footer}}}
{{/footer}} - diff --git a/RWSDocsTemplate/partials/scripts.tmpl.partial b/RWSTemplate/partials/scripts.tmpl.partial similarity index 55% rename from RWSDocsTemplate/partials/scripts.tmpl.partial rename to RWSTemplate/partials/scripts.tmpl.partial index ab3204e..c3a28aa 100644 --- a/RWSDocsTemplate/partials/scripts.tmpl.partial +++ b/RWSTemplate/partials/scripts.tmpl.partial @@ -1,5 +1,5 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} - + diff --git a/RWSDocsTemplate/partials/searchResults.tmpl.partial b/RWSTemplate/partials/searchResults.tmpl.partial similarity index 71% rename from RWSDocsTemplate/partials/searchResults.tmpl.partial rename to RWSTemplate/partials/searchResults.tmpl.partial index 26a2881..8858184 100644 --- a/RWSDocsTemplate/partials/searchResults.tmpl.partial +++ b/RWSTemplate/partials/searchResults.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}}
{{__global.searchResults}}
diff --git a/RWSTemplate/partials/title.tmpl.partial b/RWSTemplate/partials/title.tmpl.partial new file mode 100644 index 0000000..51f83cc --- /dev/null +++ b/RWSTemplate/partials/title.tmpl.partial @@ -0,0 +1,2 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} +{{#inPackage}}Package {{name.0.value}}{{/inPackage}}{{#isNamespace}}Namespace {{name.0.value}}{{/isNamespace}}{{#inClass}}Class {{name.0.value}}{{/inClass}}{{#inStruct}}Struct {{name.0.value}}{{/inStruct}}{{#inInterface}}Interface {{name.0.value}}{{/inInterface}}{{#inEnum}}Enum {{name.0.value}}{{/inEnum}}{{#inDelegate}}Delegate {{name.0.value}}{{/inDelegate}}{{#inConstructor}}Constructor {{name.0.value}}{{/inConstructor}}{{#inField}}Field {{name.0.value}}{{/inField}}{{#inProperty}}Property {{name.0.value}}{{/inProperty}}{{#inMethod}}Method {{name.0.value}}{{/inMethod}}{{#inEvent}}Event {{name.0.value}}{{/inEvent}}{{#inOperator}}Operator {{name.0.value}}{{/inOperator}}{{#inEii}}Explicit Interface Implementation {{name.0.value}}{{/inEii}}{{#inVariable}}Variable {{name.0.value}}{{/inVariable}}{{#inTypeAlias}}Type Alias {{name.0.value}}{{/inTypeAlias}} \ No newline at end of file diff --git a/RWSDocsTemplate/partials/toc.tmpl.partial b/RWSTemplate/partials/toc.tmpl.partial similarity index 66% rename from RWSDocsTemplate/partials/toc.tmpl.partial rename to RWSTemplate/partials/toc.tmpl.partial index 540543f..507a128 100644 --- a/RWSDocsTemplate/partials/toc.tmpl.partial +++ b/RWSTemplate/partials/toc.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}}
{{__global.tocToggleButton}} diff --git a/RWSDocsTemplate/partials/uref/class.header.tmpl.partial b/RWSTemplate/partials/uref/class.header.tmpl.partial similarity index 89% rename from RWSDocsTemplate/partials/uref/class.header.tmpl.partial rename to RWSTemplate/partials/uref/class.header.tmpl.partial index 8754c71..85aaf8f 100644 --- a/RWSDocsTemplate/partials/uref/class.header.tmpl.partial +++ b/RWSTemplate/partials/uref/class.header.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}}

{{>partials/title}}

{{{summary}}}
@@ -46,4 +46,4 @@ {{/example.0}} {{#example}} {{{.}}} -{{/example}} \ No newline at end of file +{{/example}} diff --git a/RWSDocsTemplate/partials/uref/class.tmpl.partial b/RWSTemplate/partials/uref/class.tmpl.partial similarity index 88% rename from RWSDocsTemplate/partials/uref/class.tmpl.partial rename to RWSTemplate/partials/uref/class.tmpl.partial index f4eb119..385cb93 100644 --- a/RWSDocsTemplate/partials/uref/class.tmpl.partial +++ b/RWSTemplate/partials/uref/class.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} {{>partials/uref/class.header}} {{#children}} @@ -21,14 +21,14 @@

{{name.0.value}}

{{{summary}}}
{{{conceptual}}}
-
{{__global.declaration}}
+
{{__global.declaration}}
{{#syntax}}
{{syntax.content.0.value}}
{{#parameters.0}}
{{__global.parameters}}
- +
@@ -54,7 +54,7 @@ {{/parameters.0}} {{#return}}
{{__global.returns}}
-
{{__global.type}}
+
@@ -71,7 +71,7 @@ {{/return}} {{#typeParameters.0}}
{{__global.typeParameters}}
-
{{__global.type}}
+
@@ -92,7 +92,7 @@ {{/typeParameters.0}} {{#fieldValue}}
{{__global.fieldValue}}
-
{{__global.name}}
+
@@ -109,7 +109,7 @@ {{/fieldValue}} {{#propertyValue}}
{{__global.propertyValue}}
-
{{__global.type}}
+
@@ -126,7 +126,7 @@ {{/propertyValue}} {{#eventType}}
{{__global.eventType}}
-
{{__global.type}}
+
@@ -143,7 +143,7 @@ {{/eventType}} {{#variableValue}}
{{__global.variableValue}}
-
{{__global.type}}
+
@@ -160,7 +160,7 @@ {{/variableValue}} {{#typeAliasType}}
{{__global.typeAliasType}}
-
{{__global.type}}
+
@@ -203,7 +203,7 @@ {{/example}} {{#exceptions.0}}
{{__global.exceptions}}
-
{{__global.type}}
+
diff --git a/RWSDocsTemplate/partials/uref/enum.tmpl.partial b/RWSTemplate/partials/uref/enum.tmpl.partial similarity index 78% rename from RWSDocsTemplate/partials/uref/enum.tmpl.partial rename to RWSTemplate/partials/uref/enum.tmpl.partial index ef9fcb3..acbb412 100644 --- a/RWSDocsTemplate/partials/uref/enum.tmpl.partial +++ b/RWSTemplate/partials/uref/enum.tmpl.partial @@ -1,9 +1,9 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} {{>partials/uref/class.header}} {{#children}}

{{>partials/classSubtitle}}

-
{{__global.type}}
+
diff --git a/RWSDocsTemplate/partials/uref/inheritance.tmpl.partial b/RWSTemplate/partials/uref/inheritance.tmpl.partial similarity index 100% rename from RWSDocsTemplate/partials/uref/inheritance.tmpl.partial rename to RWSTemplate/partials/uref/inheritance.tmpl.partial diff --git a/RWSDocsTemplate/partials/uref/namespace.tmpl.partial b/RWSTemplate/partials/uref/namespace.tmpl.partial similarity index 89% rename from RWSDocsTemplate/partials/uref/namespace.tmpl.partial rename to RWSTemplate/partials/uref/namespace.tmpl.partial index 5891009..e1aa75d 100644 --- a/RWSDocsTemplate/partials/uref/namespace.tmpl.partial +++ b/RWSTemplate/partials/uref/namespace.tmpl.partial @@ -1,4 +1,4 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}}

{{>partials/title}}

{{{summary}}}
@@ -34,14 +34,14 @@

{{name.0.value}}

{{{summary}}}
{{{conceptual}}}
-
{{__global.declaration}}
+
{{__global.declaration}}
{{#syntax}}
{{syntax.content.0.value}}
{{#parameters.0}}
{{__global.parameters}}
-
{{__global.name}}
+
@@ -67,7 +67,7 @@ {{/parameters.0}} {{#return}}
{{__global.returns}}
-
{{__global.type}}
+
@@ -84,7 +84,7 @@ {{/return}} {{#typeParameters.0}}
{{__global.typeParameters}}
-
{{__global.type}}
+
@@ -105,7 +105,7 @@ {{/typeParameters.0}} {{#fieldValue}}
{{__global.fieldValue}}
-
{{__global.name}}
+
@@ -122,7 +122,7 @@ {{/fieldValue}} {{#propertyValue}}
{{__global.propertyValue}}
-
{{__global.type}}
+
@@ -139,7 +139,7 @@ {{/propertyValue}} {{#eventType}}
{{__global.eventType}}
-
{{__global.type}}
+
@@ -182,7 +182,7 @@ {{/example}} {{#exceptions.0}}
{{__global.exceptions}}
-
{{__global.type}}
+
diff --git a/RWSDocsTemplate/partials/uref/parameters.tmpl.partial b/RWSTemplate/partials/uref/parameters.tmpl.partial similarity index 68% rename from RWSDocsTemplate/partials/uref/parameters.tmpl.partial rename to RWSTemplate/partials/uref/parameters.tmpl.partial index 25feab9..74999df 100644 --- a/RWSDocsTemplate/partials/uref/parameters.tmpl.partial +++ b/RWSTemplate/partials/uref/parameters.tmpl.partial @@ -1,8 +1,8 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} {{#properties.0}}
Properties
-
{{__global.type}}
+
@@ -25,4 +25,4 @@ {{#properties.0}}
{{__global.type}}
-{{/properties.0}} \ No newline at end of file +{{/properties.0}} diff --git a/RWSDocsTemplate/search-stopwords.json b/RWSTemplate/search-stopwords.json similarity index 100% rename from RWSDocsTemplate/search-stopwords.json rename to RWSTemplate/search-stopwords.json diff --git a/RWSDocsTemplate/styles/docfx.css b/RWSTemplate/styles/docfx.css similarity index 85% rename from RWSDocsTemplate/styles/docfx.css rename to RWSTemplate/styles/docfx.css index 3c3780b..b02c64f 100644 --- a/RWSDocsTemplate/styles/docfx.css +++ b/RWSTemplate/styles/docfx.css @@ -66,33 +66,53 @@ h6 mark { .inheritance .level2:before, .inheritance .level3:before, .inheritance .level4:before, -.inheritance .level5:before { - content: '↳'; - margin-right: 5px; +.inheritance .level5:before, +.inheritance .level6:before, +.inheritance .level7:before, +.inheritance .level8:before, +.inheritance .level9:before { + content: '↳'; + margin-right: 5px; } .inheritance .level0 { - margin-left: 0em; + margin-left: 0em; } .inheritance .level1 { - margin-left: 1em; + margin-left: 1em; } .inheritance .level2 { - margin-left: 2em; + margin-left: 2em; } .inheritance .level3 { - margin-left: 3em; + margin-left: 3em; } .inheritance .level4 { - margin-left: 4em; + margin-left: 4em; } .inheritance .level5 { - margin-left: 5em; + margin-left: 5em; +} + +.inheritance .level6 { + margin-left: 6em; +} + +.inheritance .level7 { + margin-left: 7em; +} + +.inheritance .level8 { + margin-left: 8em; +} + +.inheritance .level9 { + margin-left: 9em; } .level0.summary { @@ -106,11 +126,10 @@ h6 mark { span.parametername, span.paramref, span.typeparamref { - font-style: italic; + font-style: italic; } - -span.languagekeyword { - font-weight: bold; +span.languagekeyword{ + font-weight: bold; } .hljs { @@ -118,25 +137,20 @@ span.languagekeyword { background-color: inherit; padding: 0; } - /* additional spacing fixes */ -.btn+.btn { +.btn + .btn { margin-left: 10px; } - .btn.pull-right { margin-left: 10px; margin-top: 5px; } - .table { margin-bottom: 10px; } - table p { margin-bottom: 0; } - table a { display: inline-block; } @@ -156,7 +170,6 @@ h3, margin-bottom: 10px; font-weight: 400; } - h4, .h4, h5, @@ -166,16 +179,13 @@ h6, margin-top: 10px; margin-bottom: 5px; } - .navbar { margin-bottom: 0; } - #wrapper { min-height: 100%; position: relative; } - /* blends header footer and content together with gradient effect */ .grad-top { /* For Safari 5.1 to 6.0 */ @@ -185,7 +195,6 @@ h6, /* Standard syntax */ height: 5px; } - .grad-bottom { /* For Safari 5.1 to 6.0 */ /* For Opera 11.1 to 12.0 */ @@ -194,16 +203,13 @@ h6, /* Standard syntax */ height: 5px; } - .divider { margin: 0 5px; color: #cccccc; } - hr { border-color: #cccccc; } - header { position: fixed; top: 0; @@ -211,23 +217,19 @@ header { right: 0; z-index: 1000; } - header .navbar { border-width: 0 0 1px 0; border-radius: 0; border-color: var(--accent-dim); border-style: solid; } - .navbar-brand { font-size: inherit; padding: 0; } - .navbar-collapse { margin: 0 -15px; } - .subnav { min-height: 40px; } @@ -256,13 +258,13 @@ article h4 { margin-top: 25px; } -article h4 { +article h4{ border: 0; font-weight: bold; margin-top: 2em; } -article span.small.pull-right { +article span.small.pull-right{ margin-top: 20px; } @@ -278,13 +280,10 @@ article section { padding: 10px 0; background-color: inherit; white-space: nowrap; - font-size: .8125rem; } .breadcrumb>li+li:before { content: "›"; - font-size: 1.2rem; - line-height: 1rem; color: var(--highlight-light); } @@ -295,58 +294,46 @@ article section { #autocollapse.collapsed .navbar-header { float: none; } - #autocollapse.collapsed .navbar-toggle { display: block; } - #autocollapse.collapsed .navbar-collapse { border-top: 1px solid transparent; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); } - #autocollapse.collapsed .navbar-collapse.collapse { display: none !important; } - #autocollapse.collapsed .navbar-nav { float: none !important; margin: 7.5px -15px; } - -#autocollapse.collapsed .navbar-nav>li { +#autocollapse.collapsed .navbar-nav > li { float: none; } - -#autocollapse.collapsed .navbar-nav>li>a { +#autocollapse.collapsed .navbar-nav > li > a { padding-top: 10px; padding-bottom: 10px; } - #autocollapse.collapsed .collapse.in, #autocollapse.collapsed .collapsing { display: block !important; } - #autocollapse.collapsed .collapse.in .navbar-right, #autocollapse.collapsed .collapsing .navbar-right { float: none !important; } - #autocollapse .form-group { position: relative; width: 100%; } - #autocollapse .form-control { width: 100%; } - #autocollapse .navbar-header { margin-left: 0; margin-right: 2rem; } - #autocollapse .navbar-brand { margin-left: 0; } @@ -374,61 +361,50 @@ article section { padding: 10px 15px; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); } - .collapsed .collapse.in .navbar-form { margin: 0 auto; max-width: 400px; padding: 10px 15px; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); } - .navbar .navbar-nav { display: inline-block; } - .docs-search { background: white; vertical-align: middle; } - -.docs-search>.search-query { +.docs-search > .search-query { font-size: 14px; border: 0; width: 120%; color: #555; } - -.docs-search>.search-query:focus { +.docs-search > .search-query:focus { outline: 0; } - .search-results-frame { clear: both; display: table; width: 100%; } - .search-results.ng-hide { display: none; } - .search-results-container { padding-bottom: 1em; border-top: 1px solid #111; background: rgba(25, 25, 25, 0.5); } - .search-results-container .search-results-group { padding-top: 50px !important; padding: 10px; } - .search-results-group-heading { font-family: "Open Sans"; padding-left: 10px; color: white; } - .search-close { position: absolute; left: 50%; @@ -442,7 +418,6 @@ article section { width: 200px; box-shadow: 0 0 10px #111; } - #search { display: none; } @@ -578,20 +553,17 @@ body .toc { .sidetoggle.ng-hide { display: block !important; } - -.sidetoc-expand>.caret { +.sidetoc-expand > .caret { margin-left: 0px; margin-top: -2px; } - -.sidetoc-expand>.caret-side { +.sidetoc-expand > .caret-side { border-left: 4px solid; border-top: 4px solid transparent; border-bottom: 4px solid transparent; margin-left: 4px; margin-top: -4px; } - .sidetoc-heading { font-weight: 500; } @@ -611,31 +583,27 @@ body .toc { top: 0; left: 0; } - -.toc .nav>li>a { +.toc .nav > li > a { color: #666666; margin-left: 5px; display: block; padding: 0; } - -.toc .nav>li>a:hover, -.toc .nav>li>a:focus { +.toc .nav > li > a:hover, +.toc .nav > li > a:focus { color: #000000; background: none; text-decoration: inherit; } - -.toc .nav>li.active>a { +.toc .nav > li.active > a { color: #337ab7; } - -.toc .nav>li.active>a:hover, -.toc .nav>li.active>a:focus { +.toc .nav > li.active > a:hover, +.toc .nav > li.active > a:focus { color: #23527c; } -.toc .nav>li>.expand-stub { +.toc .nav > li> .expand-stub { cursor: pointer; } @@ -662,16 +630,16 @@ body .toc { transition: 350ms ease-out; } -.toc .nav>li.filtered>ul, -.toc .nav>li.in>ul { +.toc .nav > li.filtered > ul, +.toc .nav > li.in > ul { display: block; } -.toc .nav>li>ul { +.toc .nav > li > ul { display: none; } -.toc ul { +.toc ul{ font-size: 12px; margin: 0 auto 0 5%; max-width: 80%; @@ -761,7 +729,6 @@ body .toc { display: none; margin: 0 15px 0px 15px; } - .sidefilter { position: fixed; top: 90px; @@ -787,37 +754,47 @@ body .toc { margin: 0 5px 0 5px; } -.toc-filter>input { +.toc-filter > input { color: var(--input-text); padding-left: 2.3rem; padding-right: 1rem; width: 100%; + height: calc(1.5em + 8px); /* Adjust height by adding 5 pixels */ + line-height: calc(1.5em + 8px); /* Match line height for vertical centering */ + border: 1px solid #d0d0d0; /* Add gray border */ + border-radius: 5px; /* Round corners */ } -.toc-filter>input:focus { +.toc-filter > input:focus { outline: 0; } -.toc-filter>.filter-icon { +.toc-filter > .filter-icon { position: absolute; + top: 2px; + left: 5px; } + + .toc-filter>.clear-icon { position: absolute; text-align: center; height: 1rem; width: 1.5rem; - top: .9rem; + top: 1.2rem; right: 1.2rem; background-color: #fff; } + .article { margin-top: 120px; margin-bottom: 115px; } -#_content>a { + +#_content>a{ margin-top: 105px; } @@ -829,13 +806,11 @@ body .toc { margin-top: 5px; margin-bottom: 5px; } - .article img { max-width: 100%; margin-top: 2rem; margin-bottom: 2rem; } - .sideaffix { margin-top: 50px; font-size: 12px; @@ -845,53 +820,43 @@ body .toc { bottom: 10px; position: fixed; } - .sideaffix.shiftup { bottom: 70px; } - .affix { position: relative; height: 100%; } - -.sideaffix>div.contribution { +.sideaffix > div.contribution { margin-bottom: 20px; } - -.sideaffix>div.contribution>ul>li>a.contribution-link { +.sideaffix > div.contribution > ul > li > a.contribution-link { padding: 6px 10px; font-weight: bold; font-size: 14px; } - -.sideaffix>div.contribution>ul>li>a.contribution-link:hover { +.sideaffix > div.contribution > ul > li > a.contribution-link:hover { background-color: #ffffff; } - -.sideaffix ul.nav>li>a:focus { +.sideaffix ul.nav > li > a:focus { background: none; } - .affix h5 { font-weight: bold; text-transform: uppercase; padding-left: 10px; font-size: 12px; } - -.affix>ul.level1 { +.affix > ul.level1 { overflow: hidden; padding-bottom: 10px; height: calc(100% - 100px); } - -.affix ul>li>a:before { +.affix ul > li > a:before { color: #cccccc; position: absolute; } - -.affix ul>li>a:hover { +.affix ul > li > a:hover { background: none; color: var(--highlight-light); } @@ -910,55 +875,45 @@ body .toc { padding: 5px 12px; color: var(--font-color); } - -.affix>ul>li.active:last-child { +.affix > ul > li.active:last-child { margin-bottom: 50px; } - -.affix>ul>li>a:before { +.affix > ul > li > a:before { content: "|"; font-size: 16px; top: 1px; left: 0; } - -.affix>ul>li.active>a, -.affix>ul>li.active>a:before { +.affix > ul > li.active > a, +.affix > ul > li.active > a:before { color: #337ab7; font-weight: bold; } - -.affix ul ul>li>a { +.affix ul ul > li > a { padding: 2px 15px; } - -.affix ul ul>li>a:before { +.affix ul ul > li > a:before { content: ">"; font-size: 14px; top: -1px; left: 5px; } - -.affix ul>li>a:before, +.affix ul > li > a:before, .affix ul ul { display: none; } - -.affix ul>li.active>ul, -.affix ul>li.active>a:before, -.affix ul>li>a:hover:before { +.affix ul > li.active > ul, +.affix ul > li.active > a:before, +.affix ul > li > a:hover:before { display: block; white-space: nowrap; } - .codewrapper { position: relative; } - .trydiv { height: 0px; } - .tryspan { position: absolute; top: 0px; @@ -977,21 +932,17 @@ body .toc { display: none; color: #767676; } - .tryspan:hover { background-color: #3b8bd0; color: white; border-color: #3b8bd0; } - .codewrapper:hover .tryspan { display: block; } - -.sample-response .response-content { +.sample-response .response-content{ max-height: 200px; } - footer { position: absolute; left: 0; @@ -999,60 +950,49 @@ footer { bottom: 0; z-index: 1000; } - .footer { border-top: 1px solid #e7e7e7; background-color: #f8f8f8; padding: 15px 0; } - @media (min-width: 768px) { #sidetoggle.collapse { display: block; } - .topnav .navbar-nav { float: none; white-space: nowrap; } - - .topnav .navbar-nav>li { + .topnav .navbar-nav > li { float: none; display: inline-block; } } - @media only screen and (max-width: 768px) { #mobile-indicator { display: block; } - /* TOC display for responsive */ .article { margin-top: 30px !important; } - header { position: static; } - .topnav { text-align: center; } - .sidenav { padding: 15px 0; margin-left: -15px; margin-right: -15px; } - .sidefilter { position: static; width: auto; float: none; border: none; } - .sidetoc { position: static; width: auto; @@ -1060,54 +1000,44 @@ footer { padding-bottom: 0px; border: none; } - - .toc .nav>li>a { + .toc .nav > li, .toc .nav > li >a { display: inline-block; } - .toc li:after { margin-left: -3px; margin-right: 5px; - content: " "; + content: ", "; color: #666666; } - - .toc .level1>li { + .toc .level1 > li { display: block; } - .toc .level1>li:after { + .toc .level1 > li:after { display: none; } - .article.grid-right { margin-left: 0; } - .grad-top, .grad-bottom { display: none; } - .toc-toggle { display: block; } - .sidetoggle.ng-hide { display: none !important; } - /*.expand-all { display: none; }*/ .sideaffix { display: none; } - .mobile-hide { display: none; } - .breadcrumb { white-space: inherit; } @@ -1117,18 +1047,18 @@ footer { h2:before, h3:before, h4:before { - content: ''; - display: none; + content: ''; + display: none; } } /* For toc iframe */ @media (max-width: 260px) { - .toc .level2>li { + .toc .level2 > li { display: block; } - .toc .level2>li:after { + .toc .level2 > li:after { display: none; } } @@ -1149,7 +1079,7 @@ a code:hover { } .hljs-keyword { - color: rgb(86, 156, 214); + color: rgb(86,156,214); } .hljs-string { @@ -1161,73 +1091,70 @@ pre { } /* For code snippet line highlight */ -pre>code .line-highlight { +pre > code .line-highlight { background-color: #ffffcc; } /* Alerts */ .alert h5 { - text-transform: uppercase; - font-weight: bold; - margin-top: 0; + text-transform: uppercase; + font-weight: bold; + margin-top: 0; } .alert h5:before { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - margin-right: 5px; - font-weight: normal; + position:relative; + top:1px; + display:inline-block; + font-family:'Glyphicons Halflings'; + line-height:1; + -webkit-font-smoothing:antialiased; + -moz-osx-font-smoothing:grayscale; + margin-right: 5px; + font-weight: normal; } .alert-info h5:before { - content: "\e086" + content:"\e086" } .alert-warning h5:before { - content: "\e127" + content:"\e127" } .alert-danger h5:before { - content: "\e107" + content:"\e107" } /* For Embedded Video */ div.embeddedvideo { - padding-top: 56.25%; - position: relative; - width: 100%; + padding-top: 56.25%; + position: relative; + width: 100%; } div.embeddedvideo iframe { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - width: 100%; - height: 100%; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; } /* For printer */ -@media print { +@media print{ .article.grid-right { margin-top: 0px; margin-left: 0px; } - .sideaffix { display: none; } - .mobile-hide { display: none; } - .footer { display: none; } @@ -1328,4 +1255,10 @@ div.embeddedvideo iframe { #events { font-weight: bold; margin-top: 2em; -} \ No newline at end of file +} + +@media print { + @page { + margin: .4in; + } +} diff --git a/RWSDocsTemplate/styles/docfx.js b/RWSTemplate/styles/docfx.js similarity index 93% rename from RWSDocsTemplate/styles/docfx.js rename to RWSTemplate/styles/docfx.js index b095cf6..3994350 100644 --- a/RWSDocsTemplate/styles/docfx.js +++ b/RWSTemplate/styles/docfx.js @@ -1,4 +1,5 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information. +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. $(function () { var active = 'active'; var expanded = 'in'; @@ -51,7 +52,7 @@ $(function () { // Styling for tables in conceptual documents using Bootstrap. // See http://getbootstrap.com/css/#tables function renderTables() { - $('table').addClass('table table-bordered table-striped table-condensed').wrap('
'); + $('table').addClass('table table-bordered table-condensed').wrap('
'); } // Styling for alerts. @@ -65,7 +66,7 @@ $(function () { (function () { anchors.options = { placement: 'left', - visible: 'touch' + visible: 'hover' }; anchors.add('article h2:not(.no-anchor), article h3:not(.no-anchor), article h4:not(.no-anchor)'); })(); @@ -82,7 +83,7 @@ $(function () { // Enable highlight.js function highlight() { $('pre code').each(function (i, block) { - hljs.highlightBlock(block); + hljs.highlightElement(block); }); $('pre code[highlight-lines]').each(function (i, block) { if (block.innerHTML === "") return; @@ -127,13 +128,10 @@ $(function () { return; } try { - var worker = new Worker(relHref + 'styles/search-worker.js'); - if (!worker && !window.worker) { - localSearch(); - } else { - webWorkerSearch(); + if(!window.Worker){ + return; } - + webWorkerSearch(); renderSearchBox(); highlightKeywords(); addSearchEvent(); @@ -163,50 +161,14 @@ $(function () { } } - // Search factory - function localSearch() { - console.log("using local search"); - var lunrIndex = lunr(function () { - this.ref('href'); - this.field('title', { boost: 50 }); - this.field('keywords', { boost: 20 }); - }); - lunr.tokenizer.seperator = /[\s\-\.]+/; - var searchData = {}; - var searchDataRequest = new XMLHttpRequest(); - - var indexPath = relHref + "index.json"; - if (indexPath) { - searchDataRequest.open('GET', indexPath); - searchDataRequest.onload = function () { - if (this.status != 200) { - return; - } - searchData = JSON.parse(this.responseText); - for (var prop in searchData) { - if (searchData.hasOwnProperty(prop)) { - lunrIndex.add(searchData[prop]); - } - } - } - searchDataRequest.send(); - } - - $("body").bind("queryReady", function () { - var hits = lunrIndex.search(query); - var results = []; - hits.forEach(function (hit) { - var item = searchData[hit.ref]; - results.push({ 'href': item.href, 'title': item.title, 'keywords': item.keywords }); - }); - handleSearchResults(results); - }); - } - function webWorkerSearch() { - console.log("using Web Worker"); var indexReady = $.Deferred(); + var worker = new Worker(relHref + 'styles/search-worker.min.js'); + worker.onerror = function (oEvent) { + console.error('Error occurred at search-worker. message: ' + oEvent.message); + } + worker.onmessage = function (oEvent) { switch (oEvent.data.e) { case 'index-ready': @@ -232,7 +194,7 @@ $(function () { // Highlight the searching keywords function highlightKeywords() { var q = url('?q'); - if (q !== null) { + if (q) { var keywords = q.split("%20"); keywords.forEach(function (keyword) { if (keyword !== "") { @@ -251,7 +213,7 @@ $(function () { $('#search-query').keyup(function () { query = $(this).val(); - if (query.length < 3) { + if (query === '') { flipContents("show"); } else { flipContents("hide"); @@ -288,6 +250,9 @@ $(function () { } function extractContentBrief(content) { + if (!content) { + return + } var briefOffset = 512; var words = query.split(/\s+/g); var queryIndex = content.indexOf(words[0]); @@ -306,7 +271,7 @@ $(function () { pagination.removeData("twbs-pagination"); if (hits.length === 0) { $('#search-results>.sr-items').html('

No results found

'); - } else { + } else { pagination.twbsPagination({ first: pagination.data('first'), prev: pagination.data('prev'), @@ -323,10 +288,10 @@ $(function () { var itemRawHref = relativeUrlToAbsoluteUrl(currentUrl, relHref + hit.href); var itemHref = relHref + hit.href + "?q=" + query; var itemTitle = hit.title; - var itemBrief = extractContentBrief(hit.keywords); + var itemBrief = extractContentBrief(hit.summary || ''); var itemNode = $('
').attr('class', 'sr-item'); - var itemTitleNode = $('
').attr('class', 'item-title').append($('').attr('href', itemHref).attr("target", "_blank").text(itemTitle)); + var itemTitleNode = $('
').attr('class', 'item-title').append($('').attr('href', itemHref).attr("target", "_blank").attr("rel", "noopener noreferrer").text(itemTitle)); var itemHrefNode = $('
').attr('class', 'item-href').text(itemRawHref); var itemBriefNode = $('
').attr('class', 'item-brief').text(itemBrief); itemNode.append(itemTitleNode).append(itemHrefNode).append(itemBriefNode); @@ -354,7 +319,7 @@ $(function () { renderBreadcrumb(); showSearch(); } - + function showSearch() { if ($('#search-results').length !== 0) { $('#search').show(); @@ -379,7 +344,7 @@ $(function () { navrel = navbarPath.substr(0, index + 1); } $('#navbar>ul').addClass('navbar-nav'); - var currentAbsPath = util.getAbsolutePath(window.location.pathname); + var currentAbsPath = util.getCurrentWindowAbsolutePath(); // set active item $('#navbar').find('a[href]').each(function (i, e) { var href = $(e).attr("href"); @@ -443,7 +408,7 @@ $(function () { function registerTocEvents() { var tocFilterInput = $('#toc_filter_input'); var tocFilterClearButton = $('#toc_filter_clear'); - + $('.toc .nav > li > .expand-stub').click(function (e) { $(e.target).parent().toggleClass(expanded); }); @@ -477,7 +442,7 @@ $(function () { parent.removeClass(show); parent.removeClass(filtered); }) - + // Get leaf nodes $('#toc li>a').filter(function (i, e) { return $(e).siblings().length === 0 @@ -518,7 +483,7 @@ $(function () { return false; } }); - + // toc filter clear button tocFilterClearButton.hide(); tocFilterClearButton.on("click", function(e){ @@ -556,7 +521,10 @@ $(function () { if (index > -1) { tocrel = tocPath.substr(0, index + 1); } - var currentHref = util.getAbsolutePath(window.location.pathname); + var currentHref = util.getCurrentWindowAbsolutePath(); + if(!currentHref.endsWith('.html')) { + currentHref += '.html'; + } $('#sidetoc').find('a[href]').each(function (i, e) { var href = $(e).attr("href"); if (util.isRelativePath(href)) { @@ -987,7 +955,7 @@ $(function () { } function readTabsQueryStringParam() { - var qs = parseQueryString(); + var qs = parseQueryString(window.location.search); var t = qs.tabs; if (t === undefined || t === '') { return []; @@ -996,7 +964,7 @@ $(function () { } function updateTabsQueryStringParam(state) { - var qs = parseQueryString(); + var qs = parseQueryString(window.location.search); qs.tabs = state.selectedTabs.join(); var url = location.protocol + "//" + location.host + location.pathname + "?" + toQueryString(qs) + location.hash; if (location.href === url) { @@ -1054,14 +1022,25 @@ $(function () { this.getAbsolutePath = getAbsolutePath; this.isRelativePath = isRelativePath; this.isAbsolutePath = isAbsolutePath; + this.getCurrentWindowAbsolutePath = getCurrentWindowAbsolutePath; this.getDirectory = getDirectory; this.formList = formList; function getAbsolutePath(href) { - // Use anchor to normalize href - var anchor = $('')[0]; - // Ignore protocal, remove search and query - return anchor.host + anchor.pathname; + if (isAbsolutePath(href)) return href; + var currentAbsPath = getCurrentWindowAbsolutePath(); + var stack = currentAbsPath.split("/"); + stack.pop(); + var parts = href.split("/"); + for (var i=0; i< parts.length; i++) { + if (parts[i] == ".") continue; + if (parts[i] == ".." && stack.length > 0) + stack.pop(); + else + stack.push(parts[i]); + } + var p = stack.join("/"); + return p; } function isRelativePath(href) { @@ -1075,6 +1054,9 @@ $(function () { return (/^(?:[a-z]+:)?\/\//i).test(href); } + function getCurrentWindowAbsolutePath() { + return window.location.origin + window.location.pathname; + } function getDirectory(href) { if (!href) return ''; var index = href.lastIndexOf('/'); @@ -1126,7 +1108,7 @@ $(function () { * If the jQuery element contains tags, this function will not change the element. */ $.fn.breakWord = function () { - if (this.html() == this.text()) { + if (!this.html().match(/(<\w*)((\s\/>)|(.*<\/\w*>))/g)) { this.html(function (index, text) { return breakPlainText(text); }) diff --git a/RWSTemplate/styles/docfx.vendor.min.css b/RWSTemplate/styles/docfx.vendor.min.css new file mode 100644 index 0000000..c19c2f9 --- /dev/null +++ b/RWSTemplate/styles/docfx.vendor.min.css @@ -0,0 +1,25 @@ +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*,*:before,*:after{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:Glyphicons Halflings;src:url("./glyphicons-halflings-regular-PIHUWCJO.eot");src:url("./glyphicons-halflings-regular-PIHUWCJO.eot?#iefix") format("embedded-opentype"),url("./glyphicons-halflings-regular-W4DYDFZM.woff2") format("woff2"),url("./glyphicons-halflings-regular-JOUF32XT.woff") format("woff"),url("./glyphicons-halflings-regular-ACNUA6UY.ttf") format("truetype"),url("./glyphicons-halflings-regular-QXYEM3FU.svg#glyphicons_halflingsregular") format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:Glyphicons Halflings;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"*"}.glyphicon-plus:before{content:"+"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\a5"}.glyphicon-jpy:before{content:"\a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eeeeee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width: 768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover,a.text-primary:focus{color:#286090}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eeeeee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width: 768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eeeeee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:"\2014\a0"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eeeeee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:""}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:"\a0\2014"}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Courier New,monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px #00000040}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width: 768px){.container{width:750px}}@media (min-width: 992px){.container{width:970px}}@media (min-width: 1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*=col-]{padding-right:0;padding-left:0}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0%}@media (min-width: 768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0%}}@media (min-width: 992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0%}}@media (min-width: 1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0%}}table{background-color:transparent}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width: 767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \ ;line-height:normal}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px #00000013;-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px #00000013,0 0 8px #66afe999}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month]{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \ ;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px #00000013}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px #00000013,0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px #00000013}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px #00000013,0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px #00000013}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px #00000013,0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width: 768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width: 768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px #00000020}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);opacity:.65;-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;background-image:none;border-color:#adadad}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;background-image:none;border-color:#204d74}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;background-image:none;border-color:#398439}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#fff;background-color:#398439;border-color:#255625}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;background-image:none;border-color:#269abc}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;background-image:none;border-color:#d58512}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;background-image:none;border-color:#ac2925}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \ ;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px #0000002d}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;inset:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid \ }.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px #00000020}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 4px 4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=radio],[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width: 768px){.navbar{border-radius:4px}}@media (min-width: 768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px #ffffff1a;-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width: 768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width: 480px) and (orientation: landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}@media (min-width: 768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width: 768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width: 768px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:15px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width: 768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width: 767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width: 768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin:8px -15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px #ffffff1a,0 1px #ffffff1a}@media (min-width: 768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width: 767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width: 768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width: 768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width: 768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width: 767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width: 767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width: 768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px #0000001a}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px #00000026;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px #0000000d}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-right:15px;padding-left:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px #0000000d}.well blockquote{border-color:#ddd;border-color:#00000026}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;inset:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translateY(-25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px #00000080;outline:0}.modal-backdrop{position:fixed;inset:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px #00000080}.modal-sm{width:300px}}@media (min-width: 992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px #0003}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover>.arrow{border-width:11px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:#00000040;border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:#00000040;border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:#00000040}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:#00000040}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out,-o-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0,0,0);transform:translateZ(0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:#0000;filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0%,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0%,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,#00000080,#0000);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#80000000",endColorstr="#00000000",GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0%,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0%,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,#0000,#00000080);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000",endColorstr="#80000000",GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;outline:0;filter:alpha(opacity=90);opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:"\2039"}.carousel-control .icon-next:before{content:"\203a"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \ ;background-color:#0000;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width: 768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-header:before,.modal-header:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-header:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width: 767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width: 767px){.visible-xs-block{display:block!important}}@media (max-width: 767px){.visible-xs-inline{display:inline!important}}@media (max-width: 767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-block{display:block!important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline{display:inline!important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-block{display:block!important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline{display:inline!important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width: 1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width: 1200px){.visible-lg-block{display:block!important}}@media (min-width: 1200px){.visible-lg-inline{display:inline!important}}@media (min-width: 1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width: 767px){.hidden-xs{display:none!important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display:none!important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display:none!important}}@media (min-width: 1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#005cc5}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-code,.hljs-comment,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0} +/*! Bundled license information: + +@default/bootstrap/dist/css/bootstrap.css: + (*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *) + (*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css *) + (*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css *) + +@default/highlight.js/styles/github.css: + (*! + Theme: GitHub + Description: Light theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-light + Current colors taken from GitHub's CSS + *) +*/ +/*# sourceMappingURL=docfx.vendor.min.css.map */ diff --git a/RWSTemplate/styles/docfx.vendor.min.css.map b/RWSTemplate/styles/docfx.vendor.min.css.map new file mode 100644 index 0000000..abba940 --- /dev/null +++ b/RWSTemplate/styles/docfx.vendor.min.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/@default/bootstrap/dist/css/bootstrap.css", "../../node_modules/@default/bootstrap/dist/css/less/normalize.less", "../../node_modules/@default/bootstrap/dist/css/less/print.less", "../../node_modules/@default/bootstrap/dist/css/less/glyphicons.less", "../../node_modules/@default/bootstrap/dist/css/less/scaffolding.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/vendor-prefixes.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/tab-focus.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/image.less", "../../node_modules/@default/bootstrap/dist/css/less/type.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/text-emphasis.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/background-variant.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/text-overflow.less", "../../node_modules/@default/bootstrap/dist/css/less/code.less", "../../node_modules/@default/bootstrap/dist/css/less/grid.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/grid.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/grid-framework.less", "../../node_modules/@default/bootstrap/dist/css/less/tables.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/table-row.less", "../../node_modules/@default/bootstrap/dist/css/less/forms.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/forms.less", "../../node_modules/@default/bootstrap/dist/css/less/buttons.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/buttons.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/opacity.less", "../../node_modules/@default/bootstrap/dist/css/less/component-animations.less", "../../node_modules/@default/bootstrap/dist/css/less/dropdowns.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/nav-divider.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/reset-filter.less", "../../node_modules/@default/bootstrap/dist/css/less/button-groups.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/border-radius.less", "../../node_modules/@default/bootstrap/dist/css/less/input-groups.less", "../../node_modules/@default/bootstrap/dist/css/less/navs.less", "../../node_modules/@default/bootstrap/dist/css/less/navbar.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/nav-vertical-align.less", "../../node_modules/@default/bootstrap/dist/css/less/utilities.less", "../../node_modules/@default/bootstrap/dist/css/less/breadcrumbs.less", "../../node_modules/@default/bootstrap/dist/css/less/pagination.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/pagination.less", "../../node_modules/@default/bootstrap/dist/css/less/pager.less", "../../node_modules/@default/bootstrap/dist/css/less/labels.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/labels.less", "../../node_modules/@default/bootstrap/dist/css/less/badges.less", "../../node_modules/@default/bootstrap/dist/css/less/jumbotron.less", "../../node_modules/@default/bootstrap/dist/css/less/thumbnails.less", "../../node_modules/@default/bootstrap/dist/css/less/alerts.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/alerts.less", "../../node_modules/@default/bootstrap/dist/css/less/progress-bars.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/gradients.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/progress-bar.less", "../../node_modules/@default/bootstrap/dist/css/less/media.less", "../../node_modules/@default/bootstrap/dist/css/less/list-group.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/list-group.less", "../../node_modules/@default/bootstrap/dist/css/less/panels.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/panels.less", "../../node_modules/@default/bootstrap/dist/css/less/responsive-embed.less", "../../node_modules/@default/bootstrap/dist/css/less/wells.less", "../../node_modules/@default/bootstrap/dist/css/less/close.less", "../../node_modules/@default/bootstrap/dist/css/less/modals.less", "../../node_modules/@default/bootstrap/dist/css/less/tooltip.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/reset-text.less", "../../node_modules/@default/bootstrap/dist/css/less/popovers.less", "../../node_modules/@default/bootstrap/dist/css/less/carousel.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/clearfix.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/center-block.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/hide-text.less", "../../node_modules/@default/bootstrap/dist/css/less/responsive-utilities.less", "../../node_modules/@default/bootstrap/dist/css/less/mixins/responsive-visibility.less", "../../node_modules/@default/highlight.js/styles/github.css"], + "sourcesContent": ["/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: none;\n text-decoration: underline;\n text-decoration: underline dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n color: #000 !important;\n text-shadow: none !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: \"Glyphicons Halflings\";\n src: url(\"../fonts/glyphicons-halflings-regular.eot\");\n src: url(\"../fonts/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/glyphicons-halflings-regular.woff2\") format(\"woff2\"), url(\"../fonts/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"../fonts/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\") format(\"svg\");\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: \"Glyphicons Halflings\";\n font-style: normal;\n font-weight: 400;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: 400;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-right: 5px;\n padding-left: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: 700;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: \"\\2014 \\00A0\";\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n text-align: right;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: \"\";\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: \"\\00A0 \\2014\";\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n color: #333333;\n word-break: break-all;\n word-wrap: break-word;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n.row {\n margin-right: -15px;\n margin-left: -15px;\n}\n.row-no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n.row-no-gutters [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n.col-xs-1,\n.col-sm-1,\n.col-md-1,\n.col-lg-1,\n.col-xs-2,\n.col-sm-2,\n.col-md-2,\n.col-lg-2,\n.col-xs-3,\n.col-sm-3,\n.col-md-3,\n.col-lg-3,\n.col-xs-4,\n.col-sm-4,\n.col-md-4,\n.col-lg-4,\n.col-xs-5,\n.col-sm-5,\n.col-md-5,\n.col-lg-5,\n.col-xs-6,\n.col-sm-6,\n.col-md-6,\n.col-lg-6,\n.col-xs-7,\n.col-sm-7,\n.col-md-7,\n.col-lg-7,\n.col-xs-8,\n.col-sm-8,\n.col-md-8,\n.col-lg-8,\n.col-xs-9,\n.col-sm-9,\n.col-md-9,\n.col-lg-9,\n.col-xs-10,\n.col-sm-10,\n.col-md-10,\n.col-lg-10,\n.col-xs-11,\n.col-sm-11,\n.col-md-11,\n.col-lg-11,\n.col-xs-12,\n.col-sm-12,\n.col-md-12,\n.col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1,\n .col-sm-2,\n .col-sm-3,\n .col-sm-4,\n .col-sm-5,\n .col-sm-6,\n .col-sm-7,\n .col-sm-8,\n .col-sm-9,\n .col-sm-10,\n .col-sm-11,\n .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1,\n .col-md-2,\n .col-md-3,\n .col-md-4,\n .col-md-5,\n .col-md-6,\n .col-md-7,\n .col-md-8,\n .col-md-9,\n .col-md-10,\n .col-md-11,\n .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1,\n .col-lg-2,\n .col-lg-3,\n .col-lg-4,\n .col-lg-5,\n .col-lg-6,\n .col-lg-7,\n .col-lg-8,\n .col-lg-9,\n .col-lg-10,\n .col-lg-11,\n .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ntable col[class*=\"col-\"] {\n position: static;\n display: table-column;\n float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n display: table-cell;\n float: none;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n min-height: 0.01%;\n overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: 700;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-appearance: none;\n appearance: none;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-top: 4px \\9;\n margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n vertical-align: middle;\n cursor: pointer;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\n.form-control-static {\n min-height: 34px;\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-right: 0;\n padding-left: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n background-color: #f2dede;\n border-color: #a94442;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n padding-top: 7px;\n margin-top: 0;\n margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n padding-top: 7px;\n margin-bottom: 0;\n text-align: right;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n filter: alpha(opacity=65);\n opacity: 0.65;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n background-image: none;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n background-image: none;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n background-image: none;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n background-image: none;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n background-image: none;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n background-image: none;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n font-weight: 400;\n color: #337ab7;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n font-size: 14px;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: 400;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n color: #262626;\n text-decoration: none;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n background-color: #337ab7;\n outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n content: \"\";\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n right: 0;\n left: auto;\n }\n .navbar-right .dropdown-menu-left {\n right: auto;\n left: 0;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-right: 8px;\n padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-right: 12px;\n padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n display: table-cell;\n float: none;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: 400;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n cursor: default;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n padding-right: 15px;\n padding-left: 15px;\n overflow-x: visible;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-right: 0;\n padding-left: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-brand {\n float: left;\n height: 50px;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n padding: 9px 10px;\n margin-right: 15px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n padding: 10px 15px;\n margin-right: -15px;\n margin-left: -15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n padding-top: 0;\n padding-bottom: 0;\n margin-right: 0;\n margin-left: 0;\n border: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-right: 15px;\n margin-left: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n color: #fff;\n background-color: #080808;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n padding: 0 5px;\n color: #ccc;\n content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n margin-left: -1px;\n line-height: 1.42857143;\n color: #337ab7;\n text-decoration: none;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n cursor: default;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n cursor: not-allowed;\n background-color: #fff;\n border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-top-left-radius: 6px;\n border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n text-align: center;\n list-style: none;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n cursor: not-allowed;\n background-color: #fff;\n}\n.label {\n display: inline;\n padding: 0.2em 0.6em 0.3em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n padding-right: 15px;\n padding-left: 15px;\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-right: 60px;\n padding-left: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-right: auto;\n margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n height: 20px;\n margin-bottom: 20px;\n overflow: hidden;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n padding-left: 0;\n margin-bottom: 20px;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n color: #777777;\n cursor: not-allowed;\n background-color: #eeeeee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n color: #555;\n text-decoration: none;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-right: 15px;\n padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n margin-bottom: 0;\n border: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n filter: alpha(opacity=20);\n opacity: 0.2;\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n display: none;\n overflow: hidden;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.modal-backdrop.in {\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-bottom: 0;\n margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n line-break: auto;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n font-size: 12px;\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.tooltip.in {\n filter: alpha(opacity=90);\n opacity: 0.9;\n}\n.tooltip.top {\n padding: 5px 0;\n margin-top: -3px;\n}\n.tooltip.right {\n padding: 0 5px;\n margin-left: 3px;\n}\n.tooltip.bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n.tooltip.left {\n padding: 0 5px;\n margin-left: -3px;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n right: 5px;\n bottom: 0;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n line-break: auto;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow:after {\n content: \"\";\n border-width: 10px;\n}\n.popover.top > .arrow {\n bottom: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n bottom: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-color: #fff;\n border-bottom-width: 0;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n border-left-width: 0;\n}\n.popover.right > .arrow:after {\n bottom: -10px;\n left: 1px;\n content: \" \";\n border-right-color: #fff;\n border-left-width: 0;\n}\n.popover.bottom > .arrow {\n top: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.popover.bottom > .arrow:after {\n top: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n right: 1px;\n bottom: -10px;\n content: \" \";\n border-right-width: 0;\n border-left-color: #fff;\n}\n.popover-title {\n padding: 8px 14px;\n margin: 0;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner > .item {\n position: relative;\n display: none;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 15%;\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control.right {\n right: 0;\n left: auto;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n filter: alpha(opacity=90);\n opacity: 0.9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n font-family: serif;\n line-height: 1;\n}\n.carousel-control .icon-prev:before {\n content: \"\\2039\";\n}\n.carousel-control .icon-next:before {\n content: \"\\203a\";\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n padding-left: 0;\n margin-left: -30%;\n text-align: center;\n list-style: none;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n border: 1px solid #fff;\n border-radius: 10px;\n}\n.carousel-indicators .active {\n width: 12px;\n height: 12px;\n margin: 0;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n right: 20%;\n left: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n display: table;\n content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-right: auto;\n margin-left: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */", "// stylelint-disable\n\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n//\n\nabbr[title] {\n border-bottom: none; // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n", "// stylelint-disable declaration-no-important, selector-no-qualifying-type\n\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n color: #000 !important; // Black prints faster: h5bp.com/s\n text-shadow: none !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n}\n", "// stylelint-disable value-list-comma-newline-after, value-list-comma-space-after, indentation, declaration-colon-newline-after, font-family-no-missing-generic-family-keyword\n\n//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: \"Glyphicons Halflings\";\n src: url(\"@{icon-font-path}@{icon-font-name}.eot\");\n src: url(\"@{icon-font-path}@{icon-font-name}.eot?#iefix\") format(\"embedded-opentype\"),\n url(\"@{icon-font-path}@{icon-font-name}.woff2\") format(\"woff2\"),\n url(\"@{icon-font-path}@{icon-font-name}.woff\") format(\"woff\"),\n url(\"@{icon-font-path}@{icon-font-name}.ttf\") format(\"truetype\"),\n url(\"@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}\") format(\"svg\");\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: \"Glyphicons Halflings\";\n font-style: normal;\n font-weight: 400;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\002a\"; } }\n.glyphicon-plus { &:before { content: \"\\002b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n", "//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// https://getbootstrap.com/docs/3.4/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: https://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n", "// stylelint-disable indentation, property-no-vendor-prefix, selector-no-vendor-prefix\n\n// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n word-wrap: break-word;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n", "// WebKit-style focus\n\n.tab-focus() {\n // WebKit-specific. Other browsers will keep their default outline style.\n // (Initially tried to also force default via `outline: initial`,\n // but that seems to erroneously remove the outline in Firefox altogether.)\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n", "// stylelint-disable media-feature-name-no-vendor-prefix, media-feature-parentheses-space-inside, media-feature-name-no-unknown, indentation, at-rule-name-space-after\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n", "// stylelint-disable selector-list-comma-newline-after, selector-no-qualifying-type\n\n//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: 400;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n padding: .2em;\n background-color: @state-warning-bg;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-right: 5px;\n padding-left: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: 700;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n}\n\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: \"\\2014 \\00A0\"; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n text-align: right;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: \"\"; }\n &:after {\n content: \"\\00A0 \\2014\"; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n", "// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n", "// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n", "// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n", "//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n color: @pre-color;\n word-break: break-all;\n word-wrap: break-word;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n", "//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n.row-no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n", "// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n padding-right: ceil((@gutter / 2));\n padding-left: floor((@gutter / 2));\n margin-right: auto;\n margin-left: auto;\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-right: floor((@gutter / -2));\n margin-left: ceil((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n", "// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-right: floor((@grid-gutter-width / 2));\n padding-left: ceil((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n", "// stylelint-disable selector-max-type, selector-max-compound-selectors, selector-no-qualifying-type\n\n//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n\n // Table cell sizing\n //\n // Reset default table behavior\n\n col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n display: table-column;\n float: none;\n }\n\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n display: table-cell;\n float: none;\n }\n }\n}\n\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\n\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n min-height: .01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n overflow-x: auto;\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * .75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n", "// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n", "// stylelint-disable selector-no-qualifying-type, property-no-vendor-prefix, media-feature-name-no-vendor-prefix\n\n//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: 700;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\ninput[type=\"search\"] {\n // Override content-box in Normalize (* isn't specific enough)\n .box-sizing(border-box);\n\n // Search inputs in iOS\n //\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n -webkit-appearance: none;\n appearance: none;\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n\n // Apply same disabled cursor tweak as for inputs\n // Some special care is needed because
^ViB2&_DtcdL^I-|a!&-TsYlD=6C z=0Ps<20HW|>paAlq>H*@DaFeGbPNJ2cZ^L7X<&pX5^zvWUaU=y)d3^BL?)bLsMrzV zh6a$fwQ%`_-~twP#RA0Z`sWStBu(&RO2kS98shYItcLKHmfQr~ z3VCD(mZXSz7j?nAG1oJM%?#64*p%9Yr0u3-7<%(SLtDG)G&^bZ@9HvZQ3RBejtX9c!V=9~KOZRkcNBo|)9#pr#t4lP`RDX!frgs++ zHnJg%Ay&ZP)=~onFR9P!6m}Bf-cGO~2Y@Nio`*JVVA13Y@>n`G(3pSXpTW-4Dr_NK&prlXP(GyZGUc8 z)NyOm8q_-?R!7{$(_yeQBCB3O%r`J5*2ybWjChs;>NaH22!FK zNbSxH3=M2a7qLSKKgGU5yqWu!^yNbt2>f;=LvN-KI*Yj->1<(h3R|;1CcT^6p>VK} zH5A0*ZYwxfkHyHY8A8_NU@c9bGn8YrOrZl654|m@M79U}8t5?1#Sg|NZ*G_5y^3us z@ow%%Qz9IDIfg1^xYYs~!^LUco$ekgrrWcjRjUW;h{bsend=BxP`kJ1b6E^G=w}Gm zF@T7Co3U*E61in4Tg(ik)xW$g?6(y=y1G`Wt=5Kt;L4G1PL_vsSUmrRYkfBLs?psI2sk9hpI8T$RJ2 zMOCQRru44L0c2+V6_c=gDm4VQ>h8*6tFYr+ImGf8-DNA!RAyv3dJD)pjX5 z=v70#y_KTJHX_PWRkn(k7pnAKj^CKN48mPmwi`28Fv`(wS?mbAV+Uo4LjKiKC{Nnb zpGj3fw}BqB#SXCgG`6fNL;&Gcz-|WD25(Ej4j>$yl^{yDC5@wvNWXe}x_ifY+cP*Jf$5h<@9LYCpm0|ZY!>2xM2frx&!6!< zyO^2A>j1}0Ytiq-N%(i^YXr zs3UeoG(umLn%ncrKl`yw5r$?UYjOdNA*B;qaWG;yj8|~k$!Li5ZVLJ$hU=e`+oer0 z1dmC;mXyzIqncvHdo-_os91oY&q31#6z-y|q>AKz#A?)BIGU>po1(KoT;yMNHiGmPEI3nuyIc9kcNexyj4aF=cvSOE8tuj&rF)|^d$8E zMO|H4;+WG$bbYEX4Xs+=c5A0~clY*G7I<%DO&SsjDQ}tmt@$o6Sf>~kHN6Pb33J2QIVraZY$2;hzmEDm3 zg~41wa)c<5&)~R@;9+1$7p{BBQ!VDaJSHt9N9zUkWFsGlgi*QmW5c)0j5Mm_n@;de za08T0s{px?6ecRAv`k%&pw$Nx7Y=1XBSmB7M2&jbFP=uK$;DjeGU4{3AA^%Ew7k)- zX7krAOh0D9%cmekvozA26eA8|U@S@xY@?uz{m9--x+e??MPBxYV3B`z4U8_>=h&$j z^jjF8+!PkORDXzBi=AEZ3}VYt=$+hv(s&ppu3c*n#1w8*hW{6YdEx|L+cymajeQR)|8;7rsANGKIC7e4!|A83{EI=wMhk+hz?1CTnrvBHLIV#9AEM!knk4t*{Y0)|q~~ zGoG6nI|Bm()Y4#JC&k*=Psj)yPAOI#o*W>4oa%Oa&f?cBt)viQSR1uU=#Y8d$mve{ z!eYuI^Y-Ac^*V!`gcXMR`s4&xSb~_ILLXVMcsSof54OU=STzH8*brPHOy%q&QpeD< z&00-NxN1oP*z$A@3zN60xkLQx(nVpY;@Rm=$D8)vF!q{sH|8URY8Ss<)c>tCsq_zf z_!5j*T_p{;(ttR)I*21WcOc##bP-SDLroQbr@w8e7`CzutFqvx+#2j<$^nV87&QU!JOiWOIo7-IKsRT)#fFbq=~7k9W{E52^` z1&jK0k3igFl@V84VQm2iHoyZ4VeVn=SIH4~@;Pw=313b0A2Etc+UMR89&19TcmCx<^v_g(a>KpC6 z?y5BU)XLf_W{MpHr@0Mh-fA!|x`nS~cVfn*@ClHIwEDh7b=x3l%#uzu1(Lbc*_xZg zADtQ&uj<2V^(?AJ$VDF`f&Z6%pk!j_pj`}}iI(cpnudAYmgRmCaBad7u>A0pYPgdY zNk|Rq#8Q(V7R_#yUiOrCoT$;I2o;lYae^R@KS`iS`X!FEw1I- zvMc8YY)lPrOS9XexMC}fqrgU24;6~Jfhd-%$yu2m=)n;_%n%&aL&KWHEaS-5-7qH8 z{vRcGZCDF6;9T7tC=YDQ>e_;oss0gTp$pwcL6n79E|98V$G$Tcg}L3$jgZ=L2G9vD zGG9t@oWP|xJH(}EE;8Y|6wkE+8s-WfMJNt$!Eu5@6kQHW*~OC*xEHjxAEx>!rcO&) zOtz%^Q@h3Gg}W}+P3>Zo5ThJHA!1NVKJVkWjjBgSqj*s*@i}SM%fRXvtS8#P4f1@^3r&S%+p%gG zoUt<}FOe3tM%O}Ym#t7b-q%;_+%lDkoCl`gJww6O*vK~dlie~mLbEaPC;+Y7DJ1z zrVI60tiRxEiVO|>I7CclumLM^KYEl0COUI|OtJK8B8VQ)s?`l8j1;CG5HaVbdMNFy z3*4{EZL-RcgdP$lwp~;q;kY9QO#^$WI=rTe*rnK=R8>p|BnntAqTx{kbT}p^rr8^N zvbc2Q%ueNXQL;=Sa`!mHfR#jG9Kv8hs~%-3cbc4&`x~so2~&}EywD)0mJxwwEa?0s z7&zEvkaIJ;(>)zH@?f^{%!Rmccmz_lINjQs_UX)?iGdKbI=`WJlu90|08A4vdBA9S z9>S^V${)j_+Rl`Wfr^2Zx?K>KScO!z(1X#Fq9z=O{fINie_!cQjO)M?h z9%3v>&?y8?hn@2@!0;1l2?Limy#z%@(8FbVGzwG6;2_*m`SRR)P7OUA$It`&&friH z+p5my8ioi_lgIKrKD07QOKn-0nh`&Yl;*eXEP?hEO7G|?F5x6bXDr&tvrdcyQF+vG zyTc@Th59oHOU&rZpvNiIK9bGxg{koLlXP+A5X|x3OdoWk%E3KqMZtFaN& zViOiLYac^quval4Zp&)0lbRty2VD3qo0m5F{vrQMY!``|sB?#FoI|j5(1Gv8V0suX zz?Jn(PXn?_-9c<$f_ta)uC&*hH}zw0>oS%ntZQnqrIzlT(H4rs4A@9*h4a$={jf?5 zqSRz5!7Fq^!z(IHh9}v36 z!8uU3>EksJX7f;CJIv0-?FK>ykf6-)WR8q@^K^$qEAnObVn0uzNk(lT!Sl1 zwxdT{3f-BE8O%6#g<&x;5Gjva1xX#tz z{1eizc4wh%nAondoONdgYlg5!^I=!oGOgr}hiG&>2!&WOzh>Kz~&PaC* z4{Xcz%N$UCv#VpjG(%33N)i(tZ@ikDe@MLoT{b%#Il=XNboGI zY?vYvr5BbZaR@=Xh_baIXg_&`&9HD?h#K!)Pbd?@5<=wz z3M~drPbpD(jjnN0Rw_rt40^UZ&GQ;ONv5c?bD6C4rXIyK-EtyRF!4i}(#Itz*4QpC zSkG`UG4${_qVs@usGqqNCB|ah*lxk`X^n+-BJ!|+XvYN~Xbo)ZNqLC=QiSSZYD)3q ziCuu(BOY#R7T<+=ek+Unx&?YxPhF4rWf(UFV<{@igiel>nSw4>sZxFJM2Pjt=@4~W zF;N$w%oQ=DwNu1z^cZn+ju_COd<|c$#aB)lD~OW3tpkj4D@++Yb`Kr~ALY@~_%`my zH+z_r<~B+U{{U0GvFTp>QLq1jFKAS*JBrr0X#3E^iFEGyA)bXAvWG6FaN^W`L1@;& zM2h2_pJ8(7tnbBT$0%_HiLV+Dj8;{^^2+iNlpI z^e{WiZ$jLlJ@stbVB$lCgkj6sSrct2@fblo?5yEI7+Yz9FAIuxWy*rWTWQKduyv8n zQ@bk*p)gp65;RH?6W8&w(Lh}A#)x#k5HMow*#9CAj)710^ti6Pl`*aRGeT-+9il!cYOulsSB&P!zERG;5Y?)I9~j!Yw9Qp z!U<3yLt&SKw7Pl>2dM~$HljGPI~jSE6GwiRuZUR@+U8t>P4kq4lr$867Ekk03*9zvYo5&A50Gua)Eo9xQ*44JtgGia!>+H=0)MQMg&WucfF7&M!6 zgCj4+uR(zBM1HbVnH@V(c=~du3gS%D<)MuO_CkKkmp9wk3SL&B1f!oEYJV%n|HRJ6 z>p?sH5W(U_mW^SoJ<<Sy93fY17VJ3no7s!-NBvYMg< zw2p?DgEwkP%)c?~5}THvCC|nC@h=Z=&f|S0t z(swB9=!_J>LevlIFGgQJSuMy0WW`#9qqP}(RvX!h_=nXL=ci03^cd>|SqVnvLdSMd z^_@6voHuPUg+nivl@!jYx}~pjgasysV<@N&J{kcGc`@ubJTaQbag<6IwZWDn7wgDw z_F%4`qMr`xS#qK_k4*)B1g_d7vVp21ANpbtNtjsO4aiU4vbf8^aIB8Pc;!4}9%Z1$ zdWovuiREML+GYdV^dy$`QF@6XY;8+$VeYmMY-*7QtlJK?y%YjkF}u(Cw86Uiqdnvl zVvXXld{~Uc2#0qVp__ZbdBkkf!7$YQDG|ufn2dX~SFC$bgF=2Qmjj7S%S!IyjX?${ z(e>^ip)6h5k&7PYdmR@Gv7z$226bpB2oKh&Y@OVIx6WNWlZ`;kYLGCUuQO9^z;21+ zw8g!$=MsxR+K$JObMkRiCp$Qf(!%37s18;gj^oLAh6dv}wM~Gb#A?I(aT6$pEXI5g z0i))*PSKAPBRu<+cXCA-#*AaS-8oaSDX@jg@i_{^F<-CP^N4pJt-;})OU2iBzK={g zhM<}pLtvIsB#+_PW@T@VZBc4qp`v;E1@NPXSX!MJag_FC443vZ;oTFigtRS5sKsrt z8+&?<6$^2YTkT=)5Y<+?GjBS}F~|ctGISZ}0A-<8CN9IX;bllDKWv6G*I-YpEQ)2% z7<^qL%41kMD@&P$^*`2Ll0}DIHE4M*3$zr*V|TGImJmaLZe#wU->v+>05UrkGq*y) zEe0YFA&W;TlD6+s92Ddsd=cg@3>OAo`SWgTJFRpds%$p8>({)@+Pq~Hm1GyjFf#Zt z46P>EU_uX-MK0~$iV?gnE(>?v>>WnM^r;xF3`y2khExKNtYqa8M9M8gb8Kxzxg}WA zDJt8Sp`-KOWkDW=#yV5$Cnw3u(r8$8ZC6=@Y-zoe#$p9TR2D-sFQKy-Hl)57R>bP^ z$U>H}h*3Ak&?3RbFx>cdv=|HE$9FMA)cP12xADjYh-RqL2l%?F!B6pJuBfajbHh3* zo`?Xd>ZrqNrq(Blr*mUgS|`O*>x3@B!!Oo{V<|f`xgqD(4FVgMldlpAtA?#VrG;~4 zk?joZPGD0*D!Y+88U_YbK(ST9Fp@98!+i_9>2;mtwhgD&HoC_};?DWp*`aOC^^O;2>(9J$M$t0;nYU%Mj> z*;X3BAeCmjhbsoE9x3LD%BjkNT-M&*na-dQk#Kln6wZf)9B;W5(s)bM@=j+goF9FD zuwn)7nUcLiut@fQDAhR||ET#^Djqf#@77fRWQ>TWA`%oDAj^ka1h2IcWZ(9LPKE9N z1_qOF97GenE-UE|?`}iet?VTl-ED_a8IYda$dfFsS`ID96eL=@94auFsj zX-D|deTaDWw2H{~x%{S2f%}7x>?AUhGFXT$Hu~JY}W4q49 z3oFJtFP2|BHf?z+6pu8jS)5iTth@zl<;AztxT#C52|iXCX((V@3!CXIx4IcComU89 zWe>*q&MF;LJlpz%jthYu8#g2VfRCsO(4P(z&GrvACi;g8IFwSMsU`hYA%-Xq5Vk4= z>9-Y5Xp}9}3bAZ0WHl&M2!~=Tx7Jh$%9VY!r=NGbVeP{j;9oH$>qQJ9GKPyT1{9}u zIV2S%=iaG5kOWJK({N>@0wRVO6~QwkKT@%WBN=<%ZPe*b(<2pTXB|0*4SvFm;)bNr)5klNh zLxYvBj{B`5f-sJYNQWw1(co(DIy`f7+9bGe9ULXxSv zQj*b#8R+$t1-AgN$)xZN6wX_A7i2oiWhFA|;?#DKGvtr~yYg{~bp|?jY7SmqbP*T9&883LiYN%eM@qF9>lKmsOfh26DJFX!y zbA#y8ow%B$ESNSXe87|s!}IPEl7jFY$b`_zVY9WjgXl;rHo~EPh!y!OGj@a1$;#q! zj{-NtTVdIyas|@l)*^Q^-Gv|pm~i>k9Of>qUj-u*6~_j|!>+Pg;G2_hau_1(r7Oyv3G3fXQM>>29^k$MP=h+uN000pSW4 zC4kO=X-r8TEgoU#H;SDeeYJ=pjyNZ@8={C9zC5cpVuG!_X@JrL&tk?dUbXCpL8W)H zdO;vsoh}|uCs%mqs27svcXQq7SiRrV3qd}Xv^}I9Nl$Rmh1y9xp-HxbmtYj|YXjW0 zvL5Pj*mF{1EZ~5&_g#Cz$UYbc8AKq)v>xF(@IntF0dl3^n$7EPhlPP84LOBe9t6dS zLYB+M5|8uB!o++bk8$3I=M4%5hcI%xJijoKg6WBFDJ9P>cw47Z$w*>jr(oKYd>|=2 zs}e4rkl&rz?ocNup)T>F5_*T6IC(`*^UnofZpETt_(<;IZXp`tJ{~ILQt<^L{HREm zBwy>p*FTDMdZKE4f@XbDA&$QO)`WbGD4TMabLv4Al?PbMWr61>LN`J~_kbSuFBmze z#%aSd7_wbyahuX?A5Q!^EGdQi*C?$lOk^&QB+jHF*wI?#hwiHZh&Y;{2t^cxLa=2dE zCm4Wm+3N)Z?XHbCFc?T3fE<&G7d46)Q8~n8QKI(B-ZB$COCHgni`U!B$u zp`b&^*K|%S;O=sR`+TUO)qU`bl_~x`u@|BP>mj1EogUJ%t4Ln+!ytv}=7lo~c!5~D z^EuIlpbufGz9Q)RG6?-2K9nQJZ{Q6E4+A-70yHAPyl}E%R^XG z2hW6{C$Y8($%ca=T@CGfh{tZc;Jo*1BVY&0L+}-bJ+K%GJ)x8&0%92RK+(z#Fmn1| zIJ`$6Bd>v_O1P!&iZ_U=99%i5)Tl;=0FLhq40`cOAw0P&a)xJe8zqTSWe1L27hNup zKeIhJW{5t=$A5AnQR^=3QJvf%R++CgzWC~q4_PIg)0=|2{|$y^uhwQZviWQ$w_8my zk5c`(#{+^E#2*?WpzKD0SeZPZmw%k~hlY5~o$IoPqJgjk720CFXvKJ{Zns@H3WF2V zn&r`>L}TGj7#t-U2Rj~>RXWIoK9!78hOEr-xT49%Q9YiFs$E+79^1;+btRVy*WLfIbD+Q8lA(mAR6rrzDs&b9N+B8O~zNh?z zk<0U`6suEy6Wo5zA=)0l7{g~OstQ7=E--K)Rm8|T6QQ2<^`$gxwqKL!%OD~f?gX`X z2x-U4kOg7Vp$GFAaxbnthO$AWQ>m6pu(K*jwsC|Xs+1=7Cm9yEBSJx1@3awCXBQJ^ z*k>_v_TNVoyKF3yMHJw1FV8NobAmhESO-y|PKaiZ@pb!FP4}S0bPq)s>*X&DV8&P< zSfrIcEn+(^y8vb6V8I!-DA*_PDPRdQt%b^VkSFJzm0?xvw{Y$VskZ{Ra>7C%vb$MQ zf9&y~_Qh0xI{YLP!zjwU2IDBNEKpofR`aE4^BB8)|lI${WP zfDOWNMI;ybrgb+~8-6uIRo>b=qCj!4+>Q%C#|i?k3Tk-d0Z$kg+SAx@9GumYS{yU|>W zA;mB<>MqxILogV0&YWWU)4lAIo-Mos#mG%4{Njwl5<$r3{rCHwr^`d76Cy5TC+Pd z_;C|)E3Z|)Em=Euj?Et2^DMG`h;j_xg!{ErmF1`|kLTIbc53mDyya>GY|ye6g!{qR zemt1{U|s7fa*WsMIP1EtjTPIekC4%q zh24w5e4@oj10*XqT@)1^D6@Vm>28>0&Pwk_ClRuN zl>c_CiXblChbB%g(9mEUCP+aXB$hgfx-#NNUGy?|HA#w$jNj~o4N|h-jJ@W}ZYr33 z317lzGjJC4C0|CZ8ny?!WQ43cI$q0jsv3g(FctPDM!D#6+==ffSS9A1ODOG-Z z+TgP!`~yz?vFKLs21BNi8BIsb)V9-(#7}yGJT7k4cNyl_P-ve>uR0-a z2k`zTqF|Mg|$Dk6Wh|6y`@e9Q+EWcZ8EAy!x-K5P7Q#8Y7P+S9M z$Y9q1xNYK3!PN&>77tF~neJF@{9di;1s1nKAq_69gKLIK0ruGU3<-t!fz-VS>4wWp z&q--nvktx}=T2J-b4&+ZtOb6h$TXNWW|i55diCSqtZp?}kP(7kJqBbsMU*?k)3RpiI+?aVI$6G6X!jY4YYW$Wr{pAg3FjIG*0~>{5XB7zA>&v z=9nBP<}zSemy&v*2RRO-hNOuZVO=wrQ-i1zXQ|GI zO0!+c7}trq_8~2Do1?SO-FgK4B*50vN zIrJ>+i)}dM(q}f?{z{v8ZUtkGD_YJ|K7SFqfOXJ*?J?~hm3IJNK0nAihJY7NH;!Y* z8H9W;Zn5=buf=&6c`o@dN3tzehR#F$;5%|*Dz<+HU@xGnwe;$qe`dFm+2m|y=OR0u z%p4Z&Ze^k@h{VR?1`(efM8C2sR*fl$(R2(~){wDeMTSd)n1OtAV4pJ#2}fg-cuAg2 zg&!ps0@plQ-Zpd&34x(A%=w5rfLg9WE=4eTGHo#9))s`31+uHSs5tWS2_-MBaEnfb zE}5x4qLai;FiwCWsTs;SWu$T{6$BDsr)89V<^nl(fW8?do#CRELx7I9BXM z#|X^yh)q`{!Refk(WGD;P7wAuS&o?)4>vP8V!IK}#UGbmB7V1!FsBZC->i0QAs$m( z8;?th&?QNkoid`iApd#jol5jX>S;s$n3B{>8YT0J1Q5~y>%um0=~e0>O;I$#M^?tn z8Hpv7Fz=Zo#S43PopW)1#78+A{mSDUW2@6R;t{*`81ZqA8CDEE(O*c{p>DXodPOdI<~-dN4Y45|48MnOhX2v>;^=)kVIEHjLe4Mpz3aaF)gO$g$rZ^ay*OL~@`pG<&Y4V5EYCR(PbUa7}VT&NeiGjpHI% zxd;ta;v$dLyjdwtQ?$!G26dVv*?3n$JekFLTQ2ORg+r1b7qD*3H5ZyLbCFqKE;jSb zT(i3YPlFH5FGxLL3e^l zBuKR(2e%HW&_bee9L41^AF)(1GfS1ra0K1z7}be&=i2JhN1~6J>Tr>?V@`?Om2-0w z9}J>uo-v23xX4wDEvD=OIyi-NFmhcOk0~T>$42yCKhjc2Q!3?@R5h1*W~8@B%^cP3 zNJXfv)gD-go`@zn$`^^Dly&)3=z1kqlRf+A81gU`!gL9RodVUHg9@=gvho7_PA-mw zFrUjP=P1vGyhZczb8wB>C5=`dphN38LPS)N-n4%({_6*avYdN1wEbH6RJ-;E*xQFqoR5c2JSz>z7NLDZZ{SCew+&CVOHD zT=6Q4NGfPEf377dJK3TUasBBp*tEkqVE}8+de?JYa~Yp`v1E>puD03^6}gCw_m5+( zr(wmK0fw{!X@lAsfEQv~T#U8QO;a)xvQm_Kq7&iV#2_UN;-B;quEyh{322s;+Hzpp zMg2&H-N;cH8~d6pw;ijlvmuyzSH4WKJx_8zR#KK(werQ)2^LJ@)GN-tO1zzNoywKe zP?#T=d!5m$hmf1;vhPeSoP8t}rif->MCOinLiS%;c}1zDK1Vr$18k)HmJxoUViSj# z9G3&EB90O%r;KU}T=qH1E9fs1*(O(en3yJWdT{7;!ht`pY(+k70apT@3M#N^Da5ku zNF2~wg^K-=YDCyrn(v;6)=Fn_DbJ&ORU&ip472RT!?#wSs;c8Mj?Tyk@iP!$pjstz zHh*Y21C-LEE-YWfD|LCB*&r!#z>PC_$w-|*35U#`bnCi*2Wr9P!fd1+g3BO%4(k@T zO6@71H#3k{)n7`O>m_HiK)dubgmKRFW5$r|`oQCxO(XuB&1vX0RqIV)s@{az9QwzE zR#UjPqMaK&$*v9Q;!Cutns3Z08>KfQUQ~$>lk+-JiR7bZ0B7}JOI&S(^&RLHN`@po zE~r}96lOX}n^Tf~#=?>kNl4TZ zS$MoDES5xfIdaK}%bBE@(pA(isX!Ju>k`O&P6fCMmFL4*aTThWg)|5O{Y1uzREDd7 z=aZ8-y$F$5M>-bnx8($5PCvnGlbQv|Wi*yrV9tl~uo1&K1Ez5 zxVB)>TcL)KkKorq5Qpv-r0XDl<|QDY-C*~PVE@YyX8~$P*>o*r(^JrnKw{)Zi?QPp zgf2kriy;Hgg+$yC#%3N@#eAjVC!-%$iu`;b>eh-pqP$$Kmr`C z$&D_ZTg>`R$TT7jHyBqz&e6fR3RQH2ah2G~bztar1H(>pUFvtkRTwBY7)xb{h#7eR z{d`Kh{`DN1@^TI|EIJ6I4+!IM!jVWYjBozn|9{=jIek7JH?PkJMR0zf51Qz}n^Z*V z(HXr-=Jh5BFUkR~f{QWQB@S0&Qe}JiUW=jjyQ~qcP=~n*8lamsjsQ61D{c7F3gL4> z0?e%mB(qFrkj`f2#IB2%RGC=HOC2e{xma$ru1k==s~5|iXJ@;sH#KCf31@Y@PAg>& z#<7ea=K(IU~S=6LMp-I&ll}{;Z zY=>R;wdKIof=Zg?v4pEbsgxP7i(AfBAEtb4mR3qdYrnGzkax1LR8Dn5nSqR`dUIS# zG)>Ve9<6w^{7?|-lbquAAG6i1o=%AI?aiE-tmlEGeXjHzPpWDZGR(vbHi{@Ss77Jx z&k(lUhIl7qbzOj+igs)Q2T++BNAl^o#+YHw!)@8<=0UIt^yh+Y5 zSmgmBLIFbP1iVThl(FPRpaeo#e*m$j1EOYt7fB7ccAq0TtBbYjkOhXNsf#(DgfufC z)S4=kklTXZaFRPmrq8xKE{v<4g*_6-kJg{0ONzV{0!ddQXYAR>traJ(wTPt0;Uu%v zfl+B)iz=7PNjQ;hk>Z;YsSX#XLwvJBcV60<*H7p9l&wn81-WoX;=8;WY)Dv{^c8t5g&4?C}cZ@rL+d- zxHYKHh|12M=g-4*;ZRpnjw9kymKCX(5&Q5BVH9miG8Ds^C*^qHy+%^yfV%d3^mRmrXWcBOJOvF*9PuPZu)e6iOz}1lR zwqSyBhjtUgIWuYp#*8wpvP~E~ z4sQX5<4E?c`Z`$MBGw`@fV!C<-&$tP$RBn?(11N^E9=+}oDzHoLVP;m$m?Wr;~J%R zb^=ZmpN7zb8{@ggm!gBsQ?-2Lc8IK%)E@PhKPSrV6%|=)@|mN`^OX!gnk`yiiVftvN*Roi#bW2@ zL<>q}4hxpimT=(O(XvBpj^p?+MNRYT>g+R8&-T}vX9JdAQZr7uqvo{cuv9a#9lh3q z9-?g(X0a>PBB}M!_Hq`Hy2*ul@K)iB#ssDCXs(bWI=-c|V?gM5H}Gdj-|WVSbfA3l zuFc3H+9E*NGfNE={yY-#WLEqv9>=z{_e@EgH8KXSZ%Gv>X-Nylj{HaYh(9k~{keX! zmXSS+LRz#19^V?LJx*5yo=)NnmPPKI)yReWn@UaWF@{IIbT0hPjN|h`$KBjA7Yb z-i)AXCMNt$E;%P2j6u-UQVN9}T5Dz0nX^!etNBTgWM@L&TmdQcM02LOROHZ=Xq~B_ zFFKvJu+mXW?OQGxPJ$%MVeibal4mO>(?*otiY0OlYB0mhLYS!{%M#au@(HFgt4m2A z7vxS%m7tc(B_!c-CqkH1o0pk*CG^Rw5qc#U7na^JCrS!z)2}bjTjlkws1s|{iJC?E zla-BF^JQ&9TY3gb#Zjk$M0KI`rnW<6Ulc*jqDs<}t7D}USVXQauXzVpH}wVf1qC9N z_G!`Egpk%)OBk*i$7Uy>ywy4J#IafFr%C#}Ht_u22?He&_&Gx<6zE6c{el4X*RX{m?Xe%bSas)O*R($dg z<;MQ%$%c{7>ejUrZP`>FnIY%VG|ayb7*>x~YVuwD6uIQd>OuLcqPjGb>QV&)Ehi!+ zZxCn|cgwEC1467?i3iiD>J+S}oa$=!(CvPjSFeBphld7E$22<=E5dBp3#ry!1oHt| z!a_{KlfVq-!`Fc4WIVLoU5E*LF_cBJ1XERy2k*nl;JBWVP|0z*X=5&2RRLQr|1vG^ zxByhH-Hg6re~~vY6XM_q@YIOz^9o^4btRsM{_H_|m>@28o_xHB|e~)mkNHf2$-~mP{(XLbC>x z*|~km+<2CX+JNfpn!B+L*Nve*S^V`rx z>Mrk#ktevWJF2#Ea=Ehga{`_nHee`>rp}z^RA~_OC~mee9cxBnAP|C zmEmelmDNn-qNL?S{xw@oLf>9y$7)P(8tx92Uf6v?fHVg{<1iVx*P^I5mqu# zMOj4pE1S(GQLn08wNf(^E2}FGxqM!Xh$LQ4EY+S=xMrtB7Kw6!3&VWn7HOW6JWF>I z(3KG9Tz-d8=7{8vLv26G9{#^7+q54V8I<>bG>#+%-=t2??9Qc9YVvIZ9A(NHw8&D6 zBoUH$In_C0WG=Lha3w*mEoE}_o z7F0Xdq5c&qEd9SZ%Irb1R?~f;x#(hYwsDTQe$}`88c(HOC&a5H+=F>3XSiN-8U6@s zo?OzDU6Wck`$z-m?ew9vgZ*8ZW0W(qh_+D5H3uq%3JT8*kve_rEPL-zO68eKS}%1m zn**g&z8NeWsC<944y8PoE;3edHqo|chW2RSqTJHGj6-jHoOUl( z+C7vil(+hInLdY?+dN=3o300#oo#|sfs45cBp9#B@o=P&&w1y{nDSWgJWi9=jqpd` zG|_;o8!!DbjrsW;7pu}EvBWvaxyP773(8g#Dfh}8Tjg>`cCBYIDYbEOa+9bu#|^+x zb!Mq5b5kWD%T)7&`<^MXAevgW`^D)}jUHT(wI3++b6JkmVka?@JVqD8%9-jMm>q==JYm{ru9cY{%?p3&}nnGCLr;pZrl$}XQVmDh${UOpB4RhWb0cNtgUZAhgi zVTO`yRCaO}c@XQKdqyvqMNlwyLM`csC)9jVi{tKBrCiI@^c*2}mWp?3mXE|h)g@_k zk1e#*H_0qyC{wc|w#oeA&OaJ3#))30R)r|D=Z?{v#4L2bel*FRjT(8~)EyY^Gcu0q zE6d?7-A-qZ_lUBCa{vdf7Bf@cz#(EKN3TZtd{Xf=B1IiNr{$LP-N99jMV0WT1NYL%3zSpq4yJPcgpF6uE>kfPukw_PYNE~L z2G`$Gwi~?^DH|(5B-oa!rlm`>ww$^)XArxdJlbueMdPoV>bkOVHu*bGC^NST7$^UX zT!#Cmh(kxUt8#w6Wl778h=M!>9O7o6Zy4NNDac+gd(e=r? z=3ET%T=%uio_8OJkU2!Y?&4&84vK!EP)bTs19Z(%ZqAwKcn}!~hut4mnu5HlW)4&@ zGGK14u=J5Rpj!~iSMox)6551n1Di==NF&HZFTv6GV z@t!1E`plZcS*ZzR*9W9>GA^H`aQWBsI-}E9`JlVObt}r>ytI)vbV<@d7_Fkde8Z}d z)2bZo=#M;w(~zLbl+FkxfxY{M9tPmq~5OUR_ zb;}NP0!?k4dt4DX2>N|=xhBGHIS8&ldId&a70YRb8)3UqAywL`G%K_5x93=?>kiBu zMz565q1gAnGPo6f5~n)=U49fnl+c4&uwTDQln+k%@M(q7KLU@fHs%7)UIBlQwaiJJ# zE}K0!9JqR%E#*oriE-rpy7GBco(t6uRd5b&e9Chu?V!rsesmuDnzed=zE&=nT#d(E z$uRU#ks6kCnd!&4l#e1;zyp|cNCup&yb^<4Q3`zZk>$YT{0I2etPUnuZnC4UK4*@Ooac?blZe&wN*PKBGM3|Dq=_3K}@ssZ{n`2kA5{Pi#0Z)vI64MvbU zloAhRzRv*-iiSUQuq7xzabxz{Oq*e;2Qu9s9E0snBw&AAC@0)gdi47MF@{ zw;Z?^USEEDfC??^1jFO9J^CTC3g_F-TMa&OsAuNY{KthVegL-{HBi10phkLChi}1( zZo+ZqLoRRRAMW5f_{GX~Xa(=0QK?z;qaGWj)>LtEmz+pM+HsWRE)$Mnrqd+qpC-|i z;aNl5H-apY`>M2O`!`Tc7$eiw4>BsSFI!ZhD z+<&0Nr8^~Lt&W{Ln+{FuoSJG_WDGLP$V^DQlO>djX^(0M^^P^kyqc#0T0?G6!jV)pkglI`K(#V!<$p|cLz!(V| z%JMQjGc9J~*32+!fs}~2f6c7O+FnROR>|TlY>6!;r6hP4@8Yc3RZ@6kS4W-21wFgiP4|W2?3jsps9_=bn4+x#ygF?tR@s|1CChF$EW7 zR=T@&?dJwuz}~tWOqRYw8PCdR=;v~G*R7uqzP(-h48LRBD{o^STicVE4}y)C<}Zb) zrQM>OVUdw7y)mpu8FObDs^4iPYe3`ziW&3K1?M4$4eK?)r za$8V>%u*iZo`8J;a=iRonkRA9r;KWj|Kf6~a<0?Auf0sP)yk72K_@)E&a&9R4pv|K z0+)DKJq6df`F-av@{yRFdzW?9_xu4we`zD!7tN$on{9me7msC2`-8J+V^$^;I! zzMJ|weU&BP=2Yq^`0#F@R=mh?e7jjvR);Y`<{I7^%A-WwyC}S} z@!=a8?WJ2_z4jn^>o``5-nnDrOQdbz{P$N+|6ug=-TQ8=eRJdB^B>vzCwkE-(V0sm zQe8YUD-{j(NbAw1%%QICl~Fb^7=-#HED`0yH9=}+RB0qKm2Z$$`AQDj&B~p*U{DBUk@HqC7*IKzh$^pi z<-$ZdbUjA(b%OC4C@JGL$}hx`i`{gXsb1ep!FR(Hi&e8t}~1($D{HfSU%gQ zRM{tbavcdDP3O9ZMun&lSF@xgph%eIkz%AFPf;k#*cm~V{t2SmX(3WoWWXXTGu3NC zQm&->YI~KF%V@OP$do4bHwmjOs*w~8)mBOB)n2z48gjO!&6nfp7t0g=gdMzzmo?vH8(QbUlTh9AJS;?*z@&mq z?O;-sNOuvY!6~3|SCYZsk<2BAqGINL#yA~D#c*&S0bBcimA57cg=P^D(L+%oZO!)e z^2WGLaxp5bqDixXjmx*YT!EECaXKq_2x|sH-#(^+Ywuttx_g9rvDqU?IAk9(#2)I4 zQK>9M1?CLMm4#45tSqFGVbr)gQ+e39HD$Q(x96Cil?7X`3%1t4EGqN{9Yay&(db}Q z2v;P#hq7Hm*_D~f;|Wl-AjwQJ-(i2-j8(ob3f&fVcPad2x2xIFZBk=8>8|(h`nK7<6M2?(1c_P5as@;+C1pF`6@g z=xG)9!+IjJlR|xxP%$hAH>#ZA;|p9uy*{DG`LJ8$T@$3$?khs^3+kem1s}(?j9Mit zax713EXiD^!8J;5@mMI}X9ja3hs0qE!CtF62aq)Zi?HEh8f}glJ!5_Q2;-D^c&dX; zN46^rphT(wQZh)FgNY`Fj|g|>v_X%f+Gnq1U1I?`<9V*NB)%lK4T=%~H>#3T2~CUzR) z31j;+N!Y&f%{9Doh;X)ec11E3hS{jGCu*#S8Us;dcU0Z3+KoN-Tw%`vd+yF9J0PNT z#}Ol^W1A`RT&yGw1EWAmYMG!x)_x@s9fL_L-ysBHCY~(xC1Z_Ysrb7{$|S`ivx+=$ zU^%XyYGsz1nI&7UZg?kb0ayBH8ENDEDD!7_L&;wn|{J*Dw={_)DYHD zG@5EcfqYXE7qv=MJBAnmc2p~CLAUC_0ES583$CX}d`}8}PbJq=DJr#kQZy>H_f*mh z6_87*T*$-^U{d50QVh@^qAyE!h^Ul@YZB0kDwq){0SPj(pU^7x$U>0Rs+ekV8M#@_Wps;)rI=Rag#nDsQ%`h_%|15{m*c7^Ihi0)hvM@{-kr6@uU@ zpbt}yoljYps^?-_1HMybKH)GjCh^%#kSaf6R*Ffbbt^5l5n?}Yo z$L@rnt#DUkFvqxEZmZg58?F8+`e{vKu;=YvEcbR>3>@mDun3Z35u?Exf%ab z*VEL9L?(on$rmP_|0d#3YYrq|TO}E*DFGyXqW|F8u?CQ)VlDC%X-X1(!ZWVcpA^#1 zs!?K%>?$7@149pbYT}ttpUBi0P2Z=bUGo-XU}+T3(BXh5zOCox7@h%gzgR`kSP_H4 za>aZ~1L${XQl?bKY1lUb=*Q$(>p8<*c)M6f_h8Tm+$NTAu>2ZS{|iv9r>S_ynvw*0G^S?XpqW+thGx(7=sB`fq|nW5G-jd+ z4LF9P@Ip{gDp-?Od=rI+1VU2fh#PeFE69A|?CPHPbrniQqpB!_TamIvqA^(*)}DA1 zUu5hUG8Sqg$shw-aV)Csl+vl~gx01dqw1J4s$-a@W>9nwB!VGRX6a@dQ(d*~8sWD< zVX%#6@zfYWz6FSZm~wGR)FN=4B|t9$$Qr%Wq~dFSm2Qn zhKMKQg0G=aHOyEs#v2UY(@IJg9Cj6dRHJRNO3oK7sWI<63Gp(G3zGhVybGZY}To;p#varf^mvwYlP-yu%m%rBM z$6=ndFkQ%d{D$L<;U?<4eH(=i${wGiP;2+1%f8iT$Kfbx13v13Z;vy!H-X>b+bDEU z_W2xzF6VBaqtNB-_c?L6leG1;vk7?2S5fF1P5K;#$mroIn>nhi%Ty3%s=MGd@MKC0(LDlR z`!+r)k+z7IUpV2cJfjO)p~+llx8`jC$~qRn9DH*23gW^d#jeI+Nm$1)4dE z(dYUyp;I}I(dW|y>9jcSV3+33el^=SukTjAKq-7tAPtDnoj_376Jg+A* z(y*-xl8Mr4C(V?n6@XY2UMiu1kDK%`=R$Rbv)&#eH;K?v$W)32T|vsNyrb2llq2=YrW_zd(rc34(Sj^`L%?Gx!N>LCd$cJ7j9+bJZJY~GzlRmeegI;uQJL{8SM`CY2j ztZ{TTN+vUikrh$p`y3CzwOy1OQ}wddj~jO5gHLBg_3A<*v+&9Xk%-lYEyYY-19mCG zFRF--c;kzje--#3bJUhO!xd$#52q!t7vf5`pQjDRPYefKQz^C{4oaV8`-Eg;1CnDw zWsb@-Qu!Xj<0||}QT0(L^Q(_%s*l4^-_obrg`f)MT&A23q!g-;_n|D2IF%nFVY&vA zok(*>eN9Z+z~aJtcx$rD$nKYet;z+T^=mq09PQQ!X&;31omwMs-kZ6$G8>-Bze!b z_33o8)q#Xs;n^FVsxRKJ?_>#m7OGr|~QNDLc8JlUzeQ>;~; z6RCcL9;rZy1FjIPCALN1h1a8n*Ca8X4pUh~Z&dv?W@J?otLOr@6w`MyTDa(dMvYN1 zY-2n7xWT5fYm6>uZB@T)I6x9y{%ZY3v-OXftzqXTdUo`I5rk_8f$I#AJTylD>O~_ z(IQreEDsx7esW8<$ zluq?z-HPpCMfOVFcl4$+wI3pQIB-aJWNL3hPLu|~djYjFnTZzrkQE(W-Km~ld-V5V zR)ntAKv!G5yDgq-i}$p}wTZ`Fn{CVL$Fd0fw5U5!c1+LW05f0${mT)vx(M+d`z)@4 zapbgg^QbClM&@Xd88~gp=S+;=C6Fk?WHxg&?CXa<@Ha<~gSfmfd_ooXC$-cd5i&kg z-%m~In6&kbZtfVJQ`t;3mA!2m(wXY>{Xr*BB)L%>R#A$8vK@UY+aWub$pB;WzD|ZU z*%3D(pFGt=m=W0X_Z@_9TGemHRSo(#btsmpz9>V@cl2$m_U$FrzAYnQF^5QXrZa2& ze(hb-vi`{DXa@jsu2~0hBJKSOzJ={~Ob|K%5;JktsPMjl4(Gndzt^IXx&PQBSs3>B zbi@t7KzOYMFGFOl>4&I_8^4hUBlzOGWcj6#cjwZ|k)E;x)Y0VfXmK4Y(Jil zX8ZV1vNvk5U*%ZE1QLBTwgU|IWre~PSomf(AfvS!YEK&IM`)qsqI#{pq0ab7wl>!K z1mx2PMdyTO?evh}m)OW$i?%2RU_5+RW*cJ>K?|(8L$Qv=lg`xfKunQZ!KE&rFP0~-rB0SMQIaWo$S=?#d_Q!u5KJaY_qk= zE+=B&p;~&-IAdgei#=LgSI=`oy!_tyW`{-FYH~FH`#U zNE;6(k-D`rVG7G#HWw}j1G=I)_Ew&m^IARI8 zeWs7~X%#K*v)q*6xTxy-X7Slr%(*Ni$ym3LFaqk!oCPVkvI#ghi%T&dpeYrEcbutC z_E>+;SLM4=_N|u9*z5gj5l*-jv#EX%J1udWqiH}Y2`lc`juu?qjikkXQrja8v-Psp+Di7V00N-J+Y zD+Ip3I(bDp3^R)j!zQYi!b|@_1oV78!&(4eYIL(r?@EVoDnT;Wksj(wrJDR-e>t*y zKJ}}qs|!C`??j{x`WVHsWYPcG#w58ZjS6^>S1{7Pp|$kQ%myZAB^E zJ<&bsY<3mWrj8fSb<yV}$am(ehRZR-S`<&GabTsi z9Wwt_M-WI{*5#h&f)c0w-3YNx_LQk8Se76dX#3w6aI*{}UVrR5J5%CUBHb9l>_Y*x zIHl=_XB)co%$1EFRhJz zBzcOr>*u2Sw;akt$z_%-lQiBs@A8#w>|Uw8Ui~~DmuvBt4baYyCEpX(Pg&#RR*E=1 z64e_~{Ux-?P6Lp4X?q^0w$*qcs-KDK&myf^gY^?p{V}PW`Z?d~%4E`jJ|YP9FHp%r zlR6aQ%6Fe!vd41HTFqDNNiV($-Dwl3Ca#Fy)zB6<9iMYa&49(_5{WZiJgUDy9k$*$ zfSOo1HCx{a6YIFxv?XSfv^3`iZuxI_(nn$mh61XagQz}*uUa&eSw z93`8c*@_}|;?XWgw-UGAn{sV-&(S||?hR@<&26x{lun0$=UgTcK8&5r=BHU-HAO4+ z>ON|GRdN|m1fMpH@;+I)L26(=P{y8;#|_EI*Ksx71`{?!C2)m}D)!mWGla%3XeFhj zx2q5HLD=>5^rR?6rYNQf5#cu^uTZ--nC)?amB?}bXdxxO4L>xSIkq-Q*sK1+`s6@+ zoA!9vBjBRYlq1v&HtC)MBC8)Z41}fEU0qZ+{$QEzWIkcsMAn@u;5Q)k zh9dH!@RZxloU!$iFLIIBLA<0o^-|JK9nxtesdikM#yUOg`z_8oO5oFaT2?u3@ygRU zz5Gs+tE#PiB$70~TcQgj$YWpGMuu{tz1>NNF<^kDGsj4KmbOj1yMtNyCyJ-BqG~nc?wGC-Dl`dJG{e zHiVubgDK2ZzG34fH1n2QI6}oiqKZiHoMo+NL%8?_xyNv`0=&Uou5(775&*DFLOzl1 z&`8_0F1KKv+LZ)r7Y%b|r*-D8&9iQNIXL}Gpo%Rj-w=uGVw9+Q+!K0CsoLEdoo=Qm z)Ws8px^E$v{(=DQmHUz})un>AQsAoe9Jw}ZT_910b^y$~*wEcSQRaCv;hOlOiL$f| z6~0aw57I{NvM;#o*8K{XeUa=d1c)A%(8(3+qPN3_8w`T}BQn@l)A6v;39M~)76O|c z=E*Jy7}MHK02kAlzgANA)hf(*xh_!#zH{)rWWZ zaGwwF_ThdXj`?tsP+Yk%CGoPrHAfEM-FaNfCVxQcpz<<@7}+G}lhs=g)_Su*AD#M| zYH>T;n|zTw+P=jIp$&fAWQCkL6`YOjPo3h`ceqbVR+lPBs?~RCgIT{x2QwTC8dX7s z#c%?-jf2tdgH}^)O}MVDoB}2zdsMFDn@D?)xih4~^x3qIOp z>ZAhCh4zH5jz4)IPZkECPEpRs01i9o&sk!-uW+WV!cJ{bV+V-H;!Zc4JJj|f?Xh(j zgLsbjd?2*w?qT}-dT{~k48Xq3-PntZoDCeOSj;jl{GM1lLhh#8uG~q*OX1p9e9@H& zZflcz3EadIxC!TSWDBethUS&mHjfc=NZ;)Y02F!`d$bO8pf*}q5UgR_L!=Nm`1E<0 z-LDf;^Y6tO&Ap(%S>m?}G}k7LOvw-0>fWLSkViWT2kuJSD2+7JalYHjj?fC3T5Fa2 zlLd31!o-cWum%&%Cak4d21BQVooVW2S$UG5rU^PLLGV}*1l=JI(s%CNwK3=n_?h`cQ2fiEyJ^Rt?f=Zj|MK7edG6D9 z&42!nD{DV~^ts3W`bS51RQ}hW{`#-}m$9#A-89WM-yFGeH1mVc{M#qP|N75%jMlFDlfV5@?rh(c zADjN`3!8p^b^WVz7k}wL6+Rk%?umcA_vX+3#i^HG_;}%i;qP{)zzJM$4Wh}(Bn!ye!@TIA`$ikT$sMc znS;D`!zp0pH#@pB>vUb~NoBih^osZk@;agM@sh>;{d_G}Nfzt_8dulL#&I?RJ&Xz7 zvzBGL&fa*yTkaJ;HOh3&IW~_YdhF-X0E*IQy;!$6v*h{)v4IVs}XiqJ6 zvRg{h@FIf?pdMX2xS`8qg7Z3$>RH1KpJXF%F}us9dx2V`t=n0ue?s*~bT74a0|`Zh zX_J*ztqo4bt}e>eIwcA!QZiENs*jIk)4n4PWV?8yiWf*!b;&Ie4aMcy=|knX30kY7 ze2(E=1rJMPuy;p5TGs}`?qv+}ZuNuUG2%wmJ$BPl)8t`G1qluoZy_sM$sx=f+CkiE zv<9cRK5lf=@V~}8MQP@y`ulo(-Fo;=Ogtx$ERTWL8aB>1As@7{FT>a&+yN6WeRaMJczvlT<%(?zFJ@WktJZu&% z-mM257A+cIzQ}Molq!iWrLMeGZ35dT*gT^8s2=C^IM1Vz=dpN9^s}v|@2N)(-A3Po zU{guVI|I~uK#ztVFX(a1TG&1+j@3(a+E_(t<5nJ(FZ)?~C{zt?P!>YJdvLoX$Aw|& z!Y4ZHFlO=+TCw6x@&_tcV93I3Vl4@{y;Mexq9w1$^1I(IDCT63*l ztD^A23O&{f%A-80fs#k!VH^+R>N){$=4!eYj%hHmz(_QdQ(dda_ITiS&&~~)jXn(? zQSn`hJt0(OyXy)>>t>aTo^%JFehuJ2bT!?Xr&)AqTl`C|Fs+WkVQIKqO@N0NO)xE- zf=mzbR}}o`nuAEgTEe~hYkG)fs$W)(3$}E16GEvscvQZp!V5ea8sfrRJQhW$#xReX zVv8bU?a5fsVy=;{iAswaXxB`uX#uW(vwT#s+7cnj_$I{4_S`UaAhFPblXJRR$VF# zql4WzR&tr*b-pV+1c+P#^B*on#$t z6Oid6TDUrD%Xjf$2gTMZuh;bmY!F;ivaBh&Q1a1KJY;!WRx>zNqhxByz@|itDDPSp z(hQDTNROyiPNiIK$-yhN!7H`FD=mRnVu~WX%}h~OJ_Ir}va~SYZa)I1mH3%!a$U{((HJdTR+1%*1D@4Dxe^Dw zvcW4uUEYqD6|YlFdGe(3Epfypj#y&9O9*-FD@)*hQ(~t}D4=E50B&dDT4Z+|*%L=@ zjU#u&k$pr~<+|8DGq>Q1=r!>?z_dRDCD~@IAJ8l6x?RYY8m`d#%tqz@TnFC(Fn|mk zU}1rPt=4>^lOY-H~3^gk2UH>%Pq08dzuo-scRlcQwuMHsdIrViehmfln=6Mlu zk7MHW=D6mi2q$;~!U_Y3I?SeZsaPnZVBqm(Zst%vEE9JADzJgb5oNQc#iPvU#jK2y zRl@#Vw_>z}i1;G9b_+<0ff=uJkDEKo9wN1sW!0Y@81V1CpS9D3HNmR*Z92;^pC=N6 z#kT_40&)C%X=a?myzU)AGF9fA@HP~F2(Zz$X&1r3ULhnatUX?!rLHkwYE=$R^tDSe zH3~abr?wXa$C*z?bqZr#4wK3`7l)Dj8(NiDOV+bpurNvo!B`WkV-NK7i?Xogj2V|Kz zBZRgwZmoByn%K2qx15VV8+YGczl9$$^N%*G8An=H3tH>-sSPo-xBCV!SKZN>9Z@@h zht~wT7!39w$xG0IwAKVn(c5hMl!l4upI`5LjvZWa_(shCX8)c?MSi2C_Cn zEN)V&g&6JD$ip5+Lr=3JxeFt z(kE{46fvb)mQHh(?W=)^A}=(3W^Uo~xf`AC8=KBv4t?Es3c(^&$Jll0SfeWympBA0 zbwwLkz}xEby=B%l`#aX`4I9uwHyAEuRz%swTX-~U8XhiX-+W|>ImJ{QL-*m?uN=ox zvaVze!5#K)2E7dB6WuDleCgHs1Q(FnN=36J?U7(2%H=>qZqE8(w$-`#_KG$jG8u$f z<$QFk`NpH*E{7d$rMZbYuhoWOh4h6%*g#2;$!alYlYrYh0QlftE0b?F#bVCY0mCX_ zC4pINOGdi=e+=f}yFH9c-xn~t%T*EtP|+4!Ru8r%oZeV_RnCB3+JXz?m1hjwV_~;A zva$X>IZhXk0R@iK8sv%>h}g`lf6Tq(QDayWY2^^5+80d%gPY>I9-r;W997UuAnUL( zjHM(WJ_hB03`R~e&#np}{iVoMzpNbvl&hZAg)y)&HXXALKq#AI%wwL;&`fti_Q!?R zV5cm;=pL?$Y3%svTwL$F={`9b2Js%+;lCTwh7E1r=$G(AZa7hiIYDa3RyiWG51YtM z6A5Y}7~&%9tv;OM{7M&Nuq;&(>4nl)z)k9uNs#(58vyoYjJeqjee1SN{4GJTm=;2( zwT0v6vrevd@_~6Yu8MbjUm7qju7zo^!z&7o4)7^6Ij{b_-0d%YVcqI}5z_ zn9I;Ul&dp$!;x;TIR>lW&8YA_YHYRBHZS#cq1)kAg=D|oD1ANlv}oe6>}!um@{2^V z4~B30a8TRwoXo79Zplpip@LxNZ|Y1=8tW8lM5bDR(gF&z;{9PaB@$^61O@<2QF{cA z6C^{&YI3Pq4Nf!Vfq|w8NxOVwUD`BRj1o=)PrG{0HPvZMdYhkC?#ZM^i(|HJByKJ$ zFB-HhqmMf^lra|X_}=`Q!ZAGKv{ zwcrKYW(`QX)%vwF(@cKXBAm_Ybqlx{)`Y_p@Bwq4={|ZNU{3Ux=6h*$YmoCt9{7Mg zVW2)MqVlR1i6j*ftOLiY^;K54f$Jd@K=!OOZ43jRslC>v`V0`4{`#S!?sZB`)n7K^ z)z3pbrP!C_B_K*Yd%;C->4qHx9kL#-GBCNjq^N&T%)Y7pc{e;QAJAAc=TWr}K_LTFfwtq@kULV$C<> zab7PYjN_=^W<1V|8ceibrn-z57%l3fLZY!pm@-hA9lEYqPBTkwq*(@`8pE0tur-QU zvjKbNJQLQ3dj_Bk%ZK|>j+nzq_)|GoaBfIos*D?~ym5hO40fVprHR7g**ZPhKQv%5d1p7 z!_98HIT37E-An8 z%UD>Ix6C0Z8y;*^1nhF~{Ao`?2JCoGhMnosorvLWC#14Av=vgh;GRG?q+9Q$ue43= zo8XN{&?*UXQ>>_ew}p8~7O!yQrSK=LU*RKXA2L-tB#c|5X073Z(*$Tw*wF5aP<05+ zgq(w-PUbnvGy>VIb<>h{d?`xSODNOU3^^5V*mbVspn*q}?^!3EXqzmh$GUj1XR};X4_`$iQvk8Q^i~>FISo#pD)ZG-4Fyj z62a(=vvWu1r|+98=hjVJo7**0o}Hd4=5`$(pFf%_%uMDcW@pOt)8mKBv-5{?oAUY5 z-1P(-w*^79kO-=uX#w7_uXw1uK6l6A@zV6f$BRdIbdv!tluE$;sl##K`#YcyVNWytrvoeq`&&$kt6;4@?wC zfiXP3b=&ypw&4SX1EX8FZJr#>AJ{rMzOArr%jD)Q`SFpB6ExX6x@mHJ^QJ;!qF5ZB z7#|rQEo|F3UMz0jTqqVNw&wH2jR!Vu9NjiDF+5%Kz?g+V#}6|!&~#4wv2C^7~RU~w~R~{Hy1`H^An6_%f`*) z`AvlbHbJX4+yXNNBf2uft2zJ=mW@m~sf>nb`+(<=I@J^kCuWp*N#mU_G(cF!*GY6*cJ3L?9?XdZj^|A*R z7Vr(6F7HkRAHM5QQT^s_nK@K0%uEz>1m)?8+=1z0X)-rWZm}?#n>~=5m@iTQRx`y1 zEnl?{IUsG+yt6nrUpxfujA*ybP8LfWRJ^M+T{v_*$?LZ7EgUHBDwUKtB-(8af{!MG zkGu;Yw-x5*K;iOWHf;`qn-jsVcL8TF6fVsF6fn%>o1V}SHCq8 ze6+3lJM;jX|6RZ)6T!W0+@_Hr_<8PR z{vUL**ZBSauB(qFf}7g9vgy68IDa2JdPf2AFn^r_Qa3%oinvirb3!wJ-S&9CizYla zHLru{G6=tV;nZ4cPvOvQh4REy|GuMhMP?S6Q!euR1^(^`l@VwDPDx11I6r8+Q(^#7 zkL)URzeFYR)f4u9yl9wUGpHi|NM7T+F2a!Nb#QuSrZ}${b2BkNJqL>}ZA8PLb&Zy( zk%^hhw~DJxpg{{L)%nX;Lu2cfs9_{@{Q!lmj|$OvNUkC#OHf_zq~hV}5>i=u+R48| zCg2b@P1cei)}op(9`G}gdvI!cV#>+sGEEQ8A-~2;#oU9_<*8g@3L$v??1Agc(+3gH zlunmSzU5&0!l6UOgX5*6Ijn+%2bt^*xqD_0BPJ2Uz8?wL3HUg7Uy)I3mETa9DU^=> z0%%gj=Qd@pRh6kB9M$&yj!D~B$4A^K-=CWu|9O}y773EnrZ&)D*fZ-A!TZ`)?=50h z&qp>oFW)g;GSIL0o#^-fJ@xiBr~lp24%@P#MG>ra5!s>r=&jiYZ$r0F&y|Ye`z#eg zN|xO+GermG;^f<^$x7`MAYR=KI&Uc#4`M5P382UKF}DYc6H|qm=|cyZw?f%X-b4we z((J>!v$;ca#fj+y@E40PH-kNM$nojS^-|fBh55-1IcKSeod8)b+=qp6WDcuyx(s8s zY4O97M!pltlNmF5cmXdF>@*aS4ar}$HOy~<3?+h9H_jfODd%?NesN-obv0j{*QmE)reW)kpst$o1zFQtvZAEFf-)~{`KD4 zpC5j1S8Cr)cf9h?OS5~AU48xRi9huPj_oX*ByzJL8C@xtEU3P$#QzViN^|5Qj^`^FQ05F~E919XEu z{GI(`XK;4b&6&!Dye^-=pTE?XI)l_)tBkBbm(|<<-MM%7-t()U|5v4LSKt0mUOjbo z$8Y@0|0ozY+E6w$crAljFhOJ-arIYzaK5bPP)9p1tOO z-u|Os|J(kn-ru+O)1VapyI=8KoLU-AwABlOdr?=rOQqY8#KFNs6PPB&4U;8)8%FRSFz$1ssk1$%>g zdEUe?WbO@a2|f|rPWl#}Hxt*t=R5!EZ^iW;o(1CY!&b@*7lc|X?f-U@NC36K8z(pO zb42<%uI7(EQO1iTJonj;6U_vNC~y62k%RM0XIl44!AWne=!cE&y9}iNPR9vG9seKZ z*Z80T<6T9*e#EHtlW1&D=+XW9;63zrkY4peXJy8!AGOkN5>C@zKbSOcKPeXk?*&Q> zXO8?C@^81cNH+iPL&&Z~6F2u$OcRFl98ld)F{$e1`c(cVPF7m&KLsxHP^8svW3Yvv zx7*BL-u~3)L&0*|h@$!h(Ro7s2v-ZU%k{N^pXaild!qfX2HR+VD{b$ymZH=gV-uzC zgGRVUjCxD+a=aik!D~RdKtCc@rj6#MXz9a7IsN>Xs5D6!|Gb}Ij`QA;>T6^!zvz7!yu}f5>&v$n4x2Dc6T#AUm(E`M+^Nk6Y_4}P3jI*oLFnRs(DU-`+ Date: Mon, 6 Oct 2025 14:46:11 +0300 Subject: [PATCH 05/19] updated to newer version of docs and contracts --- articles/LCPublicAPI/api/Public-API.v1.json | 31888 +++++++++------- articles/LCPublicAPI/docs/API-rate-limits.md | 5 + articles/LCPublicAPI/docs/Language-codes.md | 2 +- articles/LCPublicAPI/docs/Whats-New.md | 48 +- .../java/Java-Client-Upgrade-Guide.md | 169 + .../docs/api-clients/java/Java-Client.md | 39 +- .../docs/api-clients/java/Java-Samples.md | 211 +- .../docs/api-clients/net/Net-Samples.md | 48 +- .../docs/translations/Translations.md | 313 + .../docs/webhooks/Batched-webhooks.md | 3 +- .../docs/webhooks/Webhooks-payload.md | 3 +- 11 files changed, 18495 insertions(+), 14234 deletions(-) create mode 100644 articles/LCPublicAPI/docs/api-clients/java/Java-Client-Upgrade-Guide.md create mode 100644 articles/LCPublicAPI/docs/translations/Translations.md diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index 504ba14..1811773 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -21,6 +21,10 @@ "name": "Account", "description": "Account" }, + { + "name": "Connected AI", + "description": "Connected AI" + }, { "name": "Custom Field", "description": "Custom Field" @@ -129,6 +133,10 @@ "name": "TQA Profile", "description": "TQA Profile" }, + { + "name": "Translation Domain", + "description": "Translation Domain" + }, { "name": "Translation Engine", "description": "Translation Engine" @@ -145,6 +153,10 @@ "name": "Translation Memory Import", "description": "Translation Memory Import" }, + { + "name": "Translation", + "description": "Translation" + }, { "name": "User", "description": "User" @@ -239,6 +251,77 @@ "operationId": "ListMyAccounts" } }, + "/connected-ai/llm-configurations": { + "get": { + "summary": "List LLM Configurations", + "tags": [ + "Connected AI" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/list-llm-configurations-response" + } + } + } + }, + "400": { + "description": "\"invalid\": Invalid input in the query parameter mentioned in the \"name\" field on the error response.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + }, + "401": { + "description": "The user could not be identified.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + } + }, + "operationId": "ListLlmConfigurations", + "x-stoplight": { + "id": "inxxqoo6ktslt" + }, + "description": "List the account configured Large Language Models.", + "parameters": [ + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/fields" + } + ] + } + }, "/customers/{customerId}": { "put": { "tags": [ @@ -1372,7 +1455,7 @@ "/files": { "post": { "summary": "Upload Zip File", - "description": "Uploads an archive with source files in a .zip format, to be extracted and used at project creation.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", + "description": "Uploads an archive containing source files in `.zip` format, which will be extracted and used during project creation.\n\nStatus of the upload operation can be tracked using the [Poll Upload Zip File](../reference/Public-API.v1.json/paths/~1files~1{fileId}/get) endpoint.\n\nOnce this Upload Zip File operation has finished extracting the files, they can be added to the desired project using the [Attach Source Files](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files~1attach-files/post) endpoint. Alternatively, they can be used to [Request File Analysis](../reference/Public-API.v1.json/paths/~1files~1analysis/post) details like word counts and estimated costs.\n\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", "operationId": "UploadZipFile", "requestBody": { "content": { @@ -1420,7 +1503,7 @@ } }, "400": { - "description": "In case of:\n* empty or missing file in request\n* no valid multipart request\n* other file attachment extension than \".zip\"", + "description": "Error code “invalid” in case of:\n * Empty or missing file in request\n * Not valid multipart request\n * File parameter contains other extension than the one expected by specification.", "content": { "application/json": { "schema": { @@ -1456,28 +1539,16 @@ }, "parameters": [] }, - "/files/{fileId}": { - "parameters": [ - { - "schema": { - "type": "string" - }, - "name": "fileId", - "in": "path", - "required": true, - "description": "The uploaded file id" - } - ], - "get": { - "summary": "Poll Upload Zip File", - "operationId": "PollUploadZipFile", + "/files/analysis": { + "post": { + "summary": "Request File Analysis", "responses": { - "200": { + "202": { "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/file-metadata-response" + "$ref": "#/components/schemas/file-analysis-operation-response" } } }, @@ -1487,52 +1558,71 @@ } } }, - "401": { - "description": "The user could not be identified.", + "400": { + "description": "Error codes:\r\n* “invalid”: Invalid input in the request body parameter mentioned in the “name” field on the error response.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "401": { + "description": "The user could not be identified.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read uploaded files.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "403": { + "description": "Error codes:\r\n* \"forbidden\": the authenticated user is not allowed to read resource.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the file could not be found by id.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "404": { + "description": "Error codes:\r\n* \"notFound\": the resource could not be found.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } } } }, + "operationId": "RequestFileAnalysis", + "x-stoplight": { + "id": "t57g1xy8y9r75" + }, "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -1541,37 +1631,117 @@ "$ref": "#/components/parameters/X-LC-Tenant" } ], - "description": "Monitors the unzipping operation for a previously uploaded archive and gets details on the extracted files.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "fileIds", + "sourceLanguage", + "languageProcessingRuleId" + ], + "properties": { + "fileIds": { + "type": "array", + "x-stoplight": { + "id": "azlzt85a5lkl5" + }, + "description": "The file identifiers for which the analysis will be performed.", + "items": { + "x-stoplight": { + "id": "g73xta7jy2re2" + }, + "type": "string" + } + }, + "sourceLanguage": { + "$ref": "#/components/schemas/source-language-request", + "x-stoplight": { + "id": "86x0qedyrl4rv" + }, + "description": "The source language." + }, + "languageProcessingRuleId": { + "type": "string", + "x-stoplight": { + "id": "1g8puz69o0xu8" + }, + "description": "The identifier of the Language Processing Rule to be used when determining word count." + }, + "fileProcessingConfigurationId": { + "type": "string", + "x-stoplight": { + "id": "hu1k8l2pqv2o8" + }, + "description": "The identifier of the File Processing Configuration to be used when converting a file for analysis.
\r\nA default configuration will be used if not specified." + }, + "quotingOptions": { + "type": "object", + "x-stoplight": { + "id": "5l3iznluoo6kn" + }, + "description": "Set these resources to calculate an estimated translation cost.", + "required": [ + "pricingModelId", + "targetLanguages" + ], + "properties": { + "pricingModelId": { + "type": "string", + "x-stoplight": { + "id": "5rf92aw1gkge2" + }, + "description": "The identifier of the Pricing Model to be used when calculating the cost." + }, + "targetLanguages": { + "type": "array", + "x-stoplight": { + "id": "vyfoxy7wp48vl" + }, + "description": "The target languages for which the cost will be calculated.", + "items": { + "$ref": "#/components/schemas/target-language-request", + "x-stoplight": { + "id": "pwvr1t18i9dym" + } + } + } + } + } + } + } + } + } + }, + "description": "This endpoint allows you to request the word count and an estimated cost for your files. \r\n\r\nUse the [Upload Zip File](../reference/Public-API.v1.json/paths/~1files/post) / [Poll Upload Zip File](../reference/Public-API.v1.json/paths/~1files~1{fileId}/get) endpoints to upload your files and get the `fileIds`. Send these `fileIds` together with the `languageProcessingRuleId` and `sourceLanguage` to receive the word count.\r\n\r\nOptionally, send the `quotingOptions` object to receive the `estimatedCosts`.\r\n\r\nUse the [Poll File Analysis](../reference/Public-API.v1.json/paths/~1files~1analysis~1{operationId}/get) endpoint to monitor the operation and receive the analysis results.\r\n\r\n> File analysis results will be available for 24 hours after generation.", "tags": [ "File" ] - } + }, + "parameters": [] }, - "/folders/{folderId}": { - "get": { - "tags": [ - "Folder" - ], - "summary": "Get Folder", - "description": "Retrieves a folder by identifier.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" + "/files/analysis/{operationId}": { + "parameters": [ + { + "schema": { + "type": "string" }, - { - "$ref": "#/components/parameters/fields" - } - ], + "name": "operationId", + "in": "path", + "required": true, + "description": "The file analysis operation identifier." + } + ], + "get": { + "summary": "Poll File Analysis", "responses": { "200": { "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/folder" + "$ref": "#/components/schemas/file-analysis-response" } } }, @@ -1582,7 +1752,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\r\n* “invalid”: invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -1598,65 +1768,54 @@ }, "401": { "description": "The user could not be identified.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "403": { + "description": "Error codes:\r\n* \"forbidden\": the authenticated user is not allowed to read resource.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the folder.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "404": { + "description": "Error codes:\r\n* \"notFound\": the quoting operation could not be found.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the Folder could not be found by identifier.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } } }, - "operationId": "GetFolder" - }, - "parameters": [ - { - "$ref": "#/components/parameters/folderId" - } - ] - }, - "/folders/root": { - "get": { - "tags": [ - "Folder" - ], - "summary": "Get Root Folder", - "description": "Retrieves the Root folder in the account.", + "operationId": "PollFileAnalysis", + "x-stoplight": { + "id": "8iqm2m3c577th" + }, "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -1668,13 +1827,231 @@ "$ref": "#/components/parameters/fields" } ], + "description": "Monitor the [File Analysis](../reference/Public-API.v1.json/paths/~1files~1analysis/post) operation and receive the analysis results.\r\n\r\n> File analysis results will be available for 24 hours after generation.", + "tags": [ + "File" + ] + } + }, + "/files/{fileId}": { + "parameters": [ + { + "schema": { + "type": "string" + }, + "name": "fileId", + "in": "path", + "required": true, + "description": "The uploaded file id" + } + ], + "get": { + "summary": "Poll Upload Zip File", + "operationId": "PollUploadZipFile", "responses": { "200": { "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/folder" + "$ref": "#/components/schemas/file-metadata-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read uploaded files.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the file could not be found by id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "description": "Monitors the unzipping operation for a previously uploaded archive and retrieves details about the extracted files.\r\n\r\nOnce the [Upload Zip File](../reference/Public-API.v1.json/paths/~1files/post) operation has finished extracting the files, they can be added to the desired project using the [Attach Source Files](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files~1attach-files/post) endpoint.\r\n Alternatively, they can be used to [Request File Analysis](../reference/Public-API.v1.json/paths/~1files~1analysis/post) details like word counts and estimated costs.\r\n", + "tags": [ + "File" + ] + } + }, + "/folders/{folderId}": { + "get": { + "tags": [ + "Folder" + ], + "summary": "Get Folder", + "description": "Retrieves a folder by identifier.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/folder" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the folder.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the Folder could not be found by identifier.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "operationId": "GetFolder" + }, + "parameters": [ + { + "$ref": "#/components/parameters/folderId" + } + ] + }, + "/folders/root": { + "get": { + "tags": [ + "Folder" + ], + "summary": "Get Root Folder", + "description": "Retrieves the Root folder in the account.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/folder" } } }, @@ -3519,28 +3896,14 @@ } }, "operationId": "ListPricingModels" - } - }, - "/pricing-models/{pricingModelId}": { - "get": { + }, + "post": { + "summary": "Create Pricing Model", "tags": [ "Pricing Model" ], - "summary": "Get Pricing Model", - "description": "Retrieves a pricing model by identifier.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" - } - ], "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { @@ -3556,81 +3919,56 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, + "description": "Error codes:\r\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\r\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\r\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\r\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response. \r\n", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "401": { - "description": "The user could not be identified.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "401": { + "description": "The user could not be identified.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the pricing model.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "403": { + "description": "Error codes:\r\n* “forbidden”: The authenticated user is not allowed to create the pricing model\r\n", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } } }, - "operationId": "GetPricingModel" - }, - "parameters": [ - { - "$ref": "#/components/parameters/pricingModelId" - } - ] - }, - "/projects": { - "get": { - "tags": [ - "Project" - ], - "summary": "List Projects", - "description": "Retrieves a list of all the projects in the account.", + "operationId": "CreatePricingModel", + "x-stoplight": { + "id": "5xf6yyxydnib9" + }, + "description": "Creates a new pricing model.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -3638,148 +3976,37 @@ { "$ref": "#/components/parameters/X-LC-Tenant" }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - }, - { - "$ref": "#/components/parameters/location" - }, - { - "$ref": "#/components/parameters/location-strategy" - }, - { - "$ref": "#/components/parameters/sort" - }, { "$ref": "#/components/parameters/fields" - }, - { - "schema": { - "type": "boolean" - }, - "in": "query", - "name": "excludeOnline", - "description": "Excludes projects that are being worked on exclusively in the Online Editor" - }, - { - "schema": { - "type": "string", - "enum": [ - "created", - "inProgress", - "completed", - "archived" - ] - }, - "in": "query", - "name": "status", - "description": "Filter the list to include projects that have this status." - }, - { - "schema": { - "type": "string", - "format": "date-time", - "example": "2022-11-28T16:46:00.00Z" - }, - "in": "query", - "name": "createdFrom", - "description": "Filter the list to include only projects created after the specified date and time." - }, - { - "schema": { - "type": "string", - "format": "date-time", - "example": "2022-11-28T16:46:00.00Z" - }, - "in": "query", - "name": "createdTo", - "description": "Filter the list to include only projects created before the specified date and time." - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "createdBy", - "description": "Filter the list of projects to projects that were created by this user." - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "projectTemplateId", - "description": "Filter the list of projects to projects that were created using this project template." - }, - { - "schema": { - "type": "array", - "items": { - "type": "string" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/pricing-model-create-request" } - }, - "in": "query", - "name": "projectIds", - "description": "Filter the list of projects to projects have these project identifiers." - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "sourceLanguage", - "description": "Filter the list of projects to projects that were created using this source language." - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "targetLanguage", - "description": "Filter the list of projects to projects that were created using this target language." - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "projectName", - "description": "Filter the list of projects to projects that were created using this project name." - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "dueFrom", - "description": "Filter the list of projects to projects that are due after this date and time.
Accepted format: ISO-8601 `YYYY-MM-DDThh:mm:ss.sssZ`" - }, + } + } + } + } + }, + "/pricing-models/{pricingModelId}": { + "get": { + "tags": [ + "Pricing Model" + ], + "summary": "Get Pricing Model", + "description": "Retrieves a pricing model by identifier.", + "parameters": [ { - "schema": { - "type": "string" - }, - "in": "query", - "name": "dueTo", - "description": "Filter the list of projects to projects that are due before this date and time.
Accepted format: ISO-8601 `YYYY-MM-DDThh:mm:ss.sssZ`" + "$ref": "#/components/parameters/Authorization" }, { - "schema": { - "type": "string" - }, - "in": "query", - "name": "lastModifiedFrom", - "description": "Filter the list of projects to projects that are last modified after this date and time.
Accepted format: ISO-8601 `YYYY-MM-DDThh:mm:ss.sssZ`" + "$ref": "#/components/parameters/X-LC-Tenant" }, { - "schema": { - "type": "string" - }, - "in": "query", - "name": "lastModifiedTo", - "description": "Filter the list of projects to projects that are last modified before this date and time.
Accepted format: ISO-8601 `YYYY-MM-DDThh:mm:ss.sssZ`" + "$ref": "#/components/parameters/fields" } ], "responses": { @@ -3788,82 +4015,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-projects-response" - }, - "examples": { - "numbers": { - "value": { - "itemCount": 1, - "items": [ - { - "id": "test-id", - "quote": { - "additionalCosts": [ - { - "name": "test-additional-cost-name", - "count": 1, - "runningTotal": 1 - } - ] - } - } - ] - } - }, - "missing-required-integer": { - "value": { - "items": [ - { - "id": "test-id", - "quote": { - "additionalCosts": [ - { - "name": "test-additional-cost-name", - "count": 1, - "runningTotal": 1 - } - ] - } - } - ] - } - }, - "missing-optional-integer": { - "value": { - "itemCount": 1, - "items": [ - { - "id": "test-id", - "quote": { - "additionalCosts": [ - { - "name": "test-additional-cost-name", - "runningTotal": 1 - } - ] - } - } - ] - } - }, - "missing-optional-double": { - "value": { - "itemCount": 1, - "items": [ - { - "id": "test-id", - "quote": { - "additionalCosts": [ - { - "name": "test-additional-cost-name", - "count": 1 - } - ] - } - } - ] - } - } + "$ref": "#/components/schemas/pricing-model" } } }, @@ -3903,8 +4055,8 @@ } } }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the pricing model.", "content": { "application/json": { "schema": { @@ -3917,51 +4069,13 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - } - }, - "operationId": "ListProjects" - }, - "post": { - "tags": [ - "Project" - ], - "summary": "Create Project", - "description": "Creates a new project.\n\nWhen creating a project using a project template that supports multiple source languages, you must supply the `languageDirections`.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when creating projects.\n\nThe values from a selected project template will take precedence over the individual resources when creating a new project.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/project-create-request" - } - } }, - "required": true - }, - "responses": { - "201": { - "description": "", + "404": { + "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/project" - }, - "examples": { - "minimal": { - "value": { - "id": "string" - } - } + "$ref": "#/components/schemas/error-response" } } }, @@ -3970,82 +4084,96 @@ "$ref": "#/components/headers/X-LC-TraceId" } } + } + }, + "operationId": "GetPricingModel" + }, + "parameters": [ + { + "$ref": "#/components/parameters/pricingModelId" + } + ], + "put": { + "summary": "Update Pricing Model", + "tags": [ + "Pricing Model" + ], + "responses": { + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"missing\": Missing required field for the value mentioned in the \"name\" field on the error response. \n* \"deleted\": Some of the selected values were deleted and cannot be selected for some values of the \"customFields\" field.\n", + "description": "Error codes:\r\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\r\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\r\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\r\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\r\n* \"missing\": Missing required field for the value mentioned in the \"name\" field on the error response. ", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } }, "401": { "description": "The user could not be identified.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "403": { + "description": "Error codes:\r\n* \"forbidden\": the authenticated user is not allowed to update the pricing model.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "403": { - "description": "Error codes:\n\"forbidden\": \n- The authenticated user is not allowed to create the project in the specified location.\n- Your subscription does not include access to the requested type of benefit.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "404": { + "description": "Error codes:\r\n* \"notFound\": the pricing model could not be found by identifier.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } } }, - "operationId": "CreateProject" - } - }, - "/projects/{projectId}": { - "get": { - "tags": [ - "Project" - ], - "summary": "Get Project", - "description": "Retrieves a project by identifier.", + "operationId": "UpdatePricingModel", + "x-stoplight": { + "id": "519y1mm5q2twn" + }, + "description": "Updates a pricing model.", "parameters": [ - { - "$ref": "#/components/parameters/fields" - }, { "$ref": "#/components/parameters/Authorization" }, @@ -4053,93 +4181,24 @@ "$ref": "#/components/parameters/X-LC-Tenant" } ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/project" - }, - "examples": { - "valid-response": { - "value": { - "id": "test-id", - "name": "test-name", - "description": "test-description", - "dueBy": "2042-07-28T11:13:36.000Z", - "createdAt": "2021-07-28T11:13:36.000Z", - "status": "completed", - "languageDirections": [ - { - "id": "language-direction-id", - "sourceLanguage": { - "languageCode": "test-source-languageCode", - "isNeutral": false - }, - "targetLanguage": { - "languageCode": "test-target-languageCode", - "isNeutral": true - } - } - ] - } - }, - "missing-required-string": { - "value": { - "name": "test-name", - "description": "test-description", - "dueBy": "2042-07-28T11:13:36.000Z", - "createdAt": "2021-07-28T11:13:36.000Z", - "status": "completed" - } - }, - "missing-optional-string": { - "value": { - "id": "test-id", - "description": "test-description", - "dueBy": "2042-07-28T11:13:36.000Z", - "createdAt": "2021-07-28T11:13:36.000Z", - "status": "completed" - } - }, - "missing-optional-datetime": { - "value": { - "id": "test-id", - "name": "test-name", - "description": "test-description", - "createdAt": "2021-07-28T11:13:36.000Z", - "status": "completed" - } - }, - "missing-optional-enum": { - "value": { - "id": "test-id", - "name": "test-name", - "description": "test-description", - "dueBy": "2042-07-28T11:13:36.000Z", - "createdAt": "2021-07-28T11:13:36.000Z" - } - }, - "missing-optional-boolean": { - "value": { - "id": "test-id", - "languageDirections": [ - { - "id": "language-direction-id", - "sourceLanguage": { - "languageCode": "test-source-languageCode" - }, - "targetLanguage": { - "languageCode": "test-target-languageCode" - } - } - ] - } - } - } + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/pricing-model-update-request" } - }, + } + } + } + }, + "delete": { + "summary": "Delete Pricing Model", + "tags": [ + "Pricing Model" + ], + "responses": { + "204": { + "description": "No Content", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -4163,36 +4222,36 @@ }, "401": { "description": "The user could not be identified.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "403": { + "description": "Error codes:\r\n* \"forbidden\": the authenticated user is not allowed to delete the pricing model.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } }, "404": { - "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", + "description": "Error codes:\r\n* \"notFound\": the pricing model could not be found by identifier.", "content": { "application/json": { "schema": { @@ -4207,14 +4266,10 @@ } } }, - "operationId": "GetProject" - }, - "put": { - "tags": [ - "Project" - ], - "summary": "Update Project", - "description": "Updates the project in terms of: name, description, due date, quote, and project resources. Observe the rules of [JSON Merge Patch Semantics](https://tools.ietf.org/html/rfc7386). \n\nProject rescheduling (updating dueBy) is permitted only if: \n* there is no Customer Quote Approval task in the associated flow \n* at least one Customer Quote Approval was closed(in case multiple project batches) \n\nUpdate `projectPlan.taskConfigurations` are now permitted before project is started. Elements are now pre-populated at project creation time.", + "operationId": "DeletePricingModel", + "x-stoplight": { + "id": "48vkxmoxbdoz0" + }, "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -4223,19 +4278,252 @@ "$ref": "#/components/parameters/X-LC-Tenant" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/project-update-request" - } - } - }, - "required": true - }, + "description": "Deletes a pricing model." + } + }, + "/projects": { + "get": { + "tags": [ + "Project" + ], + "summary": "List Projects", + "description": "Retrieves a list of all the projects in the account.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/location" + }, + { + "$ref": "#/components/parameters/location-strategy" + }, + { + "$ref": "#/components/parameters/sort" + }, + { + "$ref": "#/components/parameters/fields" + }, + { + "schema": { + "type": "boolean" + }, + "in": "query", + "name": "excludeOnline", + "description": "Excludes projects that are being worked on exclusively in the Online Editor" + }, + { + "schema": { + "type": "string", + "enum": [ + "created", + "inProgress", + "completed", + "archived" + ] + }, + "in": "query", + "name": "status", + "description": "Filter the list to include projects that have this status." + }, + { + "schema": { + "type": "string", + "format": "date-time", + "example": "2022-11-28T16:46:00.00Z" + }, + "in": "query", + "name": "createdFrom", + "description": "Filter the list to include only projects created after the specified date and time." + }, + { + "schema": { + "type": "string", + "format": "date-time", + "example": "2022-11-28T16:46:00.00Z" + }, + "in": "query", + "name": "createdTo", + "description": "Filter the list to include only projects created before the specified date and time." + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "createdBy", + "description": "Filter the list of projects to projects that were created by this user." + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "projectTemplateId", + "description": "Filter the list of projects to projects that were created using this project template." + }, + { + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "in": "query", + "name": "projectIds", + "description": "Filter the list of projects to projects have these project identifiers." + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "sourceLanguage", + "description": "Filter the list of projects to projects that were created using this source language." + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "targetLanguage", + "description": "Filter the list of projects to projects that were created using this target language." + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "projectName", + "description": "Filter the list of projects to projects that were created using this project name." + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "dueFrom", + "description": "Filter the list of projects to projects that are due after this date and time.
Accepted format: ISO-8601 `YYYY-MM-DDThh:mm:ss.sssZ`" + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "dueTo", + "description": "Filter the list of projects to projects that are due before this date and time.
Accepted format: ISO-8601 `YYYY-MM-DDThh:mm:ss.sssZ`" + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "lastModifiedFrom", + "description": "Filter the list of projects to projects that are last modified after this date and time.
Accepted format: ISO-8601 `YYYY-MM-DDThh:mm:ss.sssZ`" + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "lastModifiedTo", + "description": "Filter the list of projects to projects that are last modified before this date and time.
Accepted format: ISO-8601 `YYYY-MM-DDThh:mm:ss.sssZ`" + } + ], "responses": { - "204": { - "description": "No Content", + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/list-projects-response" + }, + "examples": { + "numbers": { + "value": { + "itemCount": 1, + "items": [ + { + "id": "test-id", + "quote": { + "additionalCosts": [ + { + "name": "test-additional-cost-name", + "count": 1, + "runningTotal": 1 + } + ] + } + } + ] + } + }, + "missing-required-integer": { + "value": { + "items": [ + { + "id": "test-id", + "quote": { + "additionalCosts": [ + { + "name": "test-additional-cost-name", + "count": 1, + "runningTotal": 1 + } + ] + } + } + ] + } + }, + "missing-optional-integer": { + "value": { + "itemCount": 1, + "items": [ + { + "id": "test-id", + "quote": { + "additionalCosts": [ + { + "name": "test-additional-cost-name", + "runningTotal": 1 + } + ] + } + } + ] + } + }, + "missing-optional-double": { + "value": { + "itemCount": 1, + "items": [ + { + "id": "test-id", + "quote": { + "additionalCosts": [ + { + "name": "test-additional-cost-name", + "count": 1 + } + ] + } + } + ] + } + } + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -4243,7 +4531,7 @@ } }, "400": { - "description": "Error responses:\n\n* “invalid”: invalid input on update quote model\n* “invalidStatus”: the quote cannot be edited, the project is in a phase which doesn't allow the quote to be edited\n* \"conflict\": the project does not have a quote to be updated\n* \"limit.exceeded\": a maximum number of users per task was assigned\n \n* \"deleted\": Some of the selected values were deleted and cannot be selected for some values of the \"customFields\" field.\n", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -4272,8 +4560,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the Project.", + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", "content": { "application/json": { "schema": { @@ -4286,13 +4574,51 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the Project could not be found by identifier.", - "content": { + } + }, + "operationId": "ListProjects" + }, + "post": { + "tags": [ + "Project" + ], + "summary": "Create Project", + "description": "Creates a new project.\n\nWhen creating a project using a project template that supports multiple source languages, you must supply the `languageDirections`.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when creating projects.\n\nThe values from a selected project template will take precedence over the individual resources when creating a new project.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project-create-request" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "", + "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/error-response" + "$ref": "#/components/schemas/project" + }, + "examples": { + "minimal": { + "value": { + "id": "string" + } + } } } }, @@ -4302,8 +4628,8 @@ } } }, - "409": { - "description": "Error responses:\n\n* “invalidStatus”: a field cannot be edited, because the project is in a status which doesn't allow the field to be edited. `details.name` will provide the field name which is not allowed to be edited.\n\n* updateNotAllowed: a field of the project cannot be edited before the completion of customer approval.", + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"missing\": Missing required field for the value mentioned in the \"name\" field on the error response. \n* \"deleted\": Some of the selected values were deleted and cannot be selected for some values of the \"customFields\" field.\n", "content": { "application/json": { "schema": { @@ -4316,32 +4642,6 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - } - }, - "operationId": "UpdateProject" - }, - "delete": { - "tags": [ - "Project" - ], - "summary": "Delete Project", - "description": "Deletes a project.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ], - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } }, "401": { "description": "The user could not be identified.", @@ -4359,7 +4659,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to delete the project.", + "description": "Error codes:\n\"forbidden\": \n- The authenticated user is not allowed to create the project in the specified location.\n- Your subscription does not include access to the requested type of benefit.", "content": { "application/json": { "schema": { @@ -4374,7 +4674,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the project could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", "content": { "application/json": { "schema": { @@ -4389,25 +4689,111 @@ } } }, - "operationId": "DeleteProject" - }, - "parameters": [ - { - "$ref": "#/components/parameters/projectId" - } - ] + "operationId": "CreateProject" + } }, - "/projects/{projectId}/configuration": { + "/projects/{projectId}": { "get": { - "summary": "Get Project Configuration", - "description": "Get the configuration settings of an existing project.", + "tags": [ + "Project" + ], + "summary": "Get Project", + "description": "Retrieves a project by identifier.", + "parameters": [ + { + "$ref": "#/components/parameters/fields" + }, + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/project-configuration" + "$ref": "#/components/schemas/project" + }, + "examples": { + "valid-response": { + "value": { + "id": "test-id", + "name": "test-name", + "description": "test-description", + "dueBy": "2042-07-28T11:13:36.000Z", + "createdAt": "2021-07-28T11:13:36.000Z", + "status": "completed", + "languageDirections": [ + { + "id": "language-direction-id", + "sourceLanguage": { + "languageCode": "test-source-languageCode", + "isNeutral": false + }, + "targetLanguage": { + "languageCode": "test-target-languageCode", + "isNeutral": true + } + } + ] + } + }, + "missing-required-string": { + "value": { + "name": "test-name", + "description": "test-description", + "dueBy": "2042-07-28T11:13:36.000Z", + "createdAt": "2021-07-28T11:13:36.000Z", + "status": "completed" + } + }, + "missing-optional-string": { + "value": { + "id": "test-id", + "description": "test-description", + "dueBy": "2042-07-28T11:13:36.000Z", + "createdAt": "2021-07-28T11:13:36.000Z", + "status": "completed" + } + }, + "missing-optional-datetime": { + "value": { + "id": "test-id", + "name": "test-name", + "description": "test-description", + "createdAt": "2021-07-28T11:13:36.000Z", + "status": "completed" + } + }, + "missing-optional-enum": { + "value": { + "id": "test-id", + "name": "test-name", + "description": "test-description", + "dueBy": "2042-07-28T11:13:36.000Z", + "createdAt": "2021-07-28T11:13:36.000Z" + } + }, + "missing-optional-boolean": { + "value": { + "id": "test-id", + "languageDirections": [ + { + "id": "language-direction-id", + "sourceLanguage": { + "languageCode": "test-source-languageCode" + }, + "targetLanguage": { + "languageCode": "test-target-languageCode" + } + } + ] + } + } } } }, @@ -4448,7 +4834,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to get the project configuration.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { @@ -4478,32 +4864,35 @@ } } }, - "operationId": "GetProjectConfiguration", + "operationId": "GetProject" + }, + "put": { + "tags": [ + "Project" + ], + "summary": "Update Project", + "description": "Updates the project in terms of: name, description, due date, quote, and project resources. Observe the rules of [JSON Merge Patch Semantics](https://tools.ietf.org/html/rfc7386). \n\nProject rescheduling (updating dueBy) is permitted only if: \n* there is no Customer Quote Approval task in the associated flow \n* at least one Customer Quote Approval was closed(in case multiple project batches) \n\nUpdate `projectPlan.taskConfigurations` are now permitted before project is started. Elements are now pre-populated at project creation time.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" } ], - "tags": [ - "Project" - ] - }, - "put": { - "summary": "Update Project Configuration", - "description": "Updates the configuration settings for an existing project.", - "operationId": "UpdateProjectConfiguration", - "tags": [ - "Project" - ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project-update-request" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "", + "204": { + "description": "No Content", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -4511,7 +4900,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error responses:\n\n* “invalid”: invalid input on update quote model\n* “invalidStatus”: the quote cannot be edited, the project is in a phase which doesn't allow the quote to be edited\n* \"conflict\": the project does not have a quote to be updated\n* \"limit.exceeded\": a maximum number of users per task was assigned\n \n* \"deleted\": Some of the selected values were deleted and cannot be selected for some values of the \"customFields\" field.\n", "content": { "application/json": { "schema": { @@ -4541,7 +4930,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the project configuration.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the Project.", "content": { "application/json": { "schema": { @@ -4556,7 +4945,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the Project could not be found by identifier.", "content": { "application/json": { "schema": { @@ -4569,58 +4958,42 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/project-configuration-request" + }, + "409": { + "description": "Error responses:\n\n* “invalidStatus”: a field cannot be edited, because the project is in a status which doesn't allow the field to be edited. `details.name` will provide the field name which is not allowed to be edited.\n\n* updateNotAllowed: a field of the project cannot be edited before the completion of customer approval.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" } } } }, - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ] + "operationId": "UpdateProject" }, - "parameters": [ - { - "$ref": "#/components/parameters/projectId" - } - ] - }, - "/projects/{projectId}/pricing-model": { - "put": { + "delete": { "tags": [ "Project" ], - "summary": "Update Project Pricing Model", - "description": "Update project pricing model only during Customer Quote Review task type.", - "operationId": "UpdateProjectPricingModel", + "summary": "Delete Project", + "description": "Deletes a project.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], "responses": { "204": { - "description": "", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "400": { - "description": "Error codes:\n* “invalidPricingModel”: There is mismatch configuration between the project and the new pricing model.\n* \"differentCurrencyCode\": There is a mismatch between the provided pricing model currency and the pricing model currency in the project.\n* “differentFuzzyBands”: There is a mismatch between the provided pricing model fuzzy bands and the pricing model fuzzy bands in the project.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, + "description": "No Content", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -4643,7 +5016,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the project configuration.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to delete the project.", "content": { "application/json": { "schema": { @@ -4658,7 +5031,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the project could not be found by identifier.", "content": { "application/json": { "schema": { @@ -4673,27 +5046,7 @@ } } }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/project-pricing-model-update-request" - } - } - }, - "required": true - }, - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ], - "x-stoplight": { - "id": "ypm1hf7wad9at" - } + "operationId": "DeleteProject" }, "parameters": [ { @@ -4701,36 +5054,17 @@ } ] }, - "/projects/{projectId}/start": { - "put": { - "tags": [ - "Project" - ], - "summary": "Start Project", - "description": "Starts a project. Translatable files should be uploaded before starting the project. If the action is executed on an already started project, the new translatable files should be uploaded first.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ], + "/projects/{projectId}/configuration": { + "get": { + "summary": "Get Project Configuration", + "description": "Get the configuration settings of an existing project.", "responses": { - "202": { - "description": "Accepted", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "200": { + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/error-response" + "$ref": "#/components/schemas/project-configuration" } } }, @@ -4740,8 +5074,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -4755,8 +5089,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to start the project.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -4770,8 +5104,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to get the project configuration.", "content": { "application/json": { "schema": { @@ -4785,8 +5119,8 @@ } } }, - "409": { - "description": "Error codes:\n* \"invalidStatus\": the project's status doesn't permit the start operation.\n* \"missingTranslatableFile\": there was no translatable file attached to the project.\n* \"missingWorkflow\": there was no workflow associated with the project.\n* \"invalidWorkflow\" : the workflow associated with the project is invalid or has errors.\n* \"missingConfigurations\": not all manual task templates have configurations.", + "404": { + "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", "content": { "application/json": { "schema": { @@ -4801,32 +5135,32 @@ } } }, - "operationId": "StartProject" - }, - "parameters": [ - { - "$ref": "#/components/parameters/projectId" - } - ] - }, - "/projects/{projectId}/complete": { - "put": { - "tags": [ - "Project" - ], - "summary": "Complete Project", - "description": "Marks a project as \"completed\".", + "operationId": "GetProjectConfiguration", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" } ], + "tags": [ + "Project" + ] + }, + "put": { + "summary": "Update Project Configuration", + "description": "Updates the configuration settings for an existing project.", + "operationId": "UpdateProjectConfiguration", + "tags": [ + "Project" + ], "responses": { - "204": { - "description": "No Content", + "200": { + "description": "", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -4849,7 +5183,7 @@ } }, "401": { - "description": "Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -4864,7 +5198,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to complete the project.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the project configuration.", "content": { "application/json": { "schema": { @@ -4892,24 +5226,25 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - }, - "409": { - "description": "Error codes:\n* \"projectAlreadyCompleted\": the project it is already in completed state.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project-configuration-request" } } } }, - "operationId": "CompleteProject" + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ] }, "parameters": [ { @@ -4917,43 +5252,17 @@ } ] }, - "/projects/{projectId}/source-files": { - "get": { + "/projects/{projectId}/pricing-model": { + "put": { "tags": [ - "Source File" - ], - "summary": "List Source Files", - "description": "Retrieves the source files in a project.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - }, - { - "$ref": "#/components/parameters/sort" - }, - { - "$ref": "#/components/parameters/fields" - } + "Project" ], + "summary": "Update Project Pricing Model", + "description": "Update project pricing model only during Customer Quote Review task type.", + "operationId": "UpdateProjectPricingModel", "responses": { - "200": { + "204": { "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/list-source-files-response" - } - } - }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -4961,7 +5270,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\n* “invalidPricingModel”: There is mismatch configuration between the project and the new pricing model.\n* \"differentCurrencyCode\": There is a mismatch between the provided pricing model currency and the pricing model currency in the project.\n* “differentFuzzyBands”: There is a mismatch between the provided pricing model fuzzy bands and the pricing model fuzzy bands in the project.", "content": { "application/json": { "schema": { @@ -4991,7 +5300,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": not authorized to retrieve source files on the project.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the project configuration.", "content": { "application/json": { "schema": { @@ -5006,7 +5315,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the project could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", "content": { "application/json": { "schema": { @@ -5019,31 +5328,43 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project-pricing-model-update-request" } } - } + }, + "required": true }, - "operationId": "ListSourceFiles" - }, - "post": { + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "x-stoplight": { + "id": "ypm1hf7wad9at" + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/projectId" + } + ] + }, + "/projects/{projectId}/start": { + "put": { "tags": [ - "Source File" + "Project" ], - "summary": "Add Source File", - "description": "Adds a source file to the project. Files can be uploaded before starting a project or after the project has started. When adding a `translatable` file after the project started, a new start project request should be performed.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.\n\n> Note: The maximum character size of the sum between the `name` and the `path` fields must not exceed 255. Otherwise the request cannot be validated.", + "summary": "Start Project", + "description": "Starts a project. Translatable files should be uploaded before starting the project. If the action is executed on an already started project, the new translatable files should be uploaded first.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -5052,38 +5373,21 @@ "$ref": "#/components/parameters/X-LC-Tenant" } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "required": [ - "properties", - "file" - ], - "properties": { - "properties": { - "$ref": "#/components/schemas/source-file-request" - }, - "file": { - "type": "string", - "format": "binary", - "description": "The source file (binary string)." - } - } + "responses": { + "202": { + "description": "Accepted", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" } } }, - "required": true, - "description": "For details on how to send multipart/form-data with `properties` see this [article](../docs/How-to-multipart.md)." - }, - "responses": { - "201": { - "description": "", + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/source-file" + "$ref": "#/components/schemas/error-response" } } }, @@ -5093,8 +5397,8 @@ } } }, - "400": { - "description": "Error responses:\n* \"invalid\": invalid input on for the value mentioned in the “name” field on the error response.\n* \"empty\": missing input for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -5108,8 +5412,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to start the project.", "content": { "application/json": { "schema": { @@ -5123,8 +5427,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to add a source file to the project.", + "404": { + "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", "content": { "application/json": { "schema": { @@ -5139,7 +5443,7 @@ } }, "409": { - "description": "Error codes:\n* \"duplicate\": duplicate source file name inside a project is not allowed.\n* \"projectAlreadyCompleted\": resource can not be added because the project it is in completed state.", + "description": "Error codes:\n* \"invalidStatus\": the project's status doesn't permit the start operation.\n* \"missingTranslatableFile\": there was no translatable file attached to the project.\n* \"missingWorkflow\": there was no workflow associated with the project.\n* \"invalidWorkflow\" : the workflow associated with the project is invalid or has errors.\n* \"missingConfigurations\": not all manual task templates have configurations.", "content": { "application/json": { "schema": { @@ -5154,19 +5458,29 @@ } } }, - "operationId": "AddSourceFile" + "operationId": "StartProject" }, "parameters": [ { "$ref": "#/components/parameters/projectId" } - ], + ] + }, + "/projects/{projectId}/complete": { "put": { "tags": [ - "Source File" + "Project" + ], + "summary": "Complete Project", + "description": "Marks a project as \"completed\".", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } ], - "summary": "Update Source Files", - "operationId": "UpdateSourceFiles", "responses": { "204": { "description": "No Content", @@ -5177,311 +5491,223 @@ } }, "400": { - "description": "Error responses:\n* \"invalid\": invalid input for the value mentioned in the “name” field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, + } + }, + "401": { + "description": "Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "401": { - "description": "The user could not be identified.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to complete the project.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": - the authenticated user is not allowed to update the source file.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the project could not be found by identifier.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, + } + }, + "409": { + "description": "Error codes:\n* \"projectAlreadyCompleted\": the project it is already in completed state.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "409": { - "description": "Error codes:\n* \"duplicate\": a file with the same name already exists." - } - }, - "description": "Updates multiple source files. If any of the files fails to be updated, an error will be returned for each file. ", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/source-files-update-request" + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" } } } + }, + "operationId": "CompleteProject" + }, + "parameters": [ + { + "$ref": "#/components/parameters/projectId" } - } + ] }, - "/projects/{projectId}/source-files/attach-files": { + "/projects/{projectId}/files/exports": { "post": { "tags": [ - "Source File" + "Project" ], - "summary": "Attach Source Files", - "description": "Adds multiple source files to the project. Files must be uploaded before attaching them to a project. When a file is attached after the project was started, a new start project request should be performed.\n\n\n> Note: The maximum character size of the sum between the `name` and the `path` fields must not exceed 255. Otherwise the request cannot be validated.\n", + "summary": "Export Project Files", + "operationId": "ExportProjectFiles", + "description": "Generates an asynchronous export operation. To monitor the progress until completion, use the [Poll Project Files Export](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1files~1exports~1{exportId}/get) endpoint. \n\nThis operation triggers the packaging of the project files into a `zip` format.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/source-file-attachment-request" - } - } - }, - "required": true, - "description": "" - }, "responses": { - "201": { - "description": "", + "200": { + "description": "Export Operation was triggered successfully", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/source-file-attachment-response" + "$ref": "#/components/schemas/zip-file-export-response" } } - }, + } + }, + "400": { + "description": "Error responses:\n* \"invalid\": invalid input for the value mentioned in the “name” field on the error response.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "400": { - "description": "Error codes:\n* \"invalid\": invalid input on for the value mentioned in the “name” field on the error response.\n* \"empty\": missing input for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } }, "401": { "description": "The user could not be identified.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - the authenticated user is not allowed to trigger an export on the specified project, or does not have access to the project.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to attach a source file on the project.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the project could not be found by identifier.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "409": { - "description": "Error codes:\n* \"duplicate\": duplicate source file name inside a project is not allowed.\n* \"duplicate\": duplicate fileUrl inside a project is not allowed.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/zip-file-export-request" } } } }, - "operationId": "AddSourceFiles" + "x-stoplight": { + "id": "5hbbqpkqxmfyt" + } }, "parameters": [ { - "name": "projectId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "The project identifier." + "$ref": "#/components/parameters/projectId" } ] }, - "/projects/{projectId}/source-files/{sourceFileId}": { + "/projects/{projectId}/files/exports/{exportId}": { "get": { "tags": [ - "Source File" - ], - "summary": "Get Source File", - "description": "Retrieves a source file from the project.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" - } + "Project" ], + "summary": "Poll Project Files Export", + "operationId": "ExportProjectFilesStatus", + "description": "Retrieves the state of the export operation. \n\n Once the state is marked as `done`, you can download the generated `zip` file using the following endpoint: [Download Exported Project Files](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1files~1exports~1{exportId}~1download/get).", "responses": { "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/source-file" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "400": { - "description": "Error responses:\n* \"invalid\": invalid input for the value mentioned in the “name” field on the error response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "401": { - "description": "The user could not be identified.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, + "description": "OK", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the project or the source file could not be found by identifier.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/error-response" + "$ref": "#/components/schemas/zip-file-export-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - } - }, - "operationId": "GetSourceFile" - }, - "put": { - "tags": [ - "Source File" - ], - "summary": "Update Source File", - "operationId": "UpdateSourceFile", - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } }, "400": { @@ -5515,7 +5741,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": - the authenticated user is not allowed to update the target file.", + "description": "Error codes:\n* \"forbidden\": - the authenticated user is not allowed to retrieve the details of the export.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -5530,7 +5756,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the project or the source file could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the export operation could not be found by identifier.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -5543,57 +5769,58 @@ } } } - }, - "409": { - "description": "Error codes:\n* \"duplicate\": a file with the same name already exists." } }, - "description": "Updates a source file.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/source-file-rename-request" - } - } + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "schema": { + "type": "string" + }, + "name": "exportId", + "in": "path", + "required": true, + "description": "The export identifier." } - }, - "parameters": [] + ], + "x-stoplight": { + "id": "uyc9zdzlangtw" + } }, "parameters": [ { "$ref": "#/components/parameters/projectId" - }, - { - "$ref": "#/components/parameters/sourceFileId" } ] }, - "/projects/{projectId}/source-files/{sourceFileId}/versions": { + "/projects/{projectId}/files/exports/{exportId}/download": { "get": { "tags": [ - "Source File" + "Project" ], - "summary": "List Source File Versions", - "description": "Retrieves all the versions of a source file.", + "summary": "Download Exported Project Files", + "description": "Downloads the generated `zip` file containing the files according to initial export operation parameters. \n\nThe final ZIP file will be named using the project name. \n\n When the export operation is performed with `downloadFlat=true` and one target language specified, the resulting ZIP file name will be a combination of the project name and the target language code, as defined by the [Export Project Files](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1files~1exports/post) endpoint.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" } ], "responses": { "200": { "description": "", "content": { - "application/json": { + "application/octet-stream": { "schema": { - "$ref": "#/components/schemas/list-source-file-versions-response" + "type": "string", + "format": "binary" } } }, @@ -5604,7 +5831,22 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error responses:\n* \"invalid\": invalid input for the value mentioned in the “name” field on the error response.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + }, + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -5618,8 +5860,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { @@ -5633,8 +5875,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to retrieve the source file versions.", + "404": { + "description": "Error codes:\n* \"notFound\": the file could not be found by identifier.\n", "content": { "application/json": { "schema": { @@ -5648,8 +5890,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": the project or the source file could not be found by identifier.", + "409": { + "description": "Error codes:\n* \"conflict\": the export operation is not done yet.\n", "content": { "application/json": { "schema": { @@ -5664,51 +5906,67 @@ } } }, - "operationId": "ListSourceFileVersions" - }, - "parameters": [ - { - "$ref": "#/components/parameters/projectId" - }, - { - "$ref": "#/components/parameters/sourceFileId" + "x-codegen-download": true, + "operationId": "DownloadFile", + "x-stoplight": { + "id": "r8ac4c1ortxtw" } - ] - }, - "/tasks/{taskId}/source-files/{sourceFileId}/versions": { + }, "parameters": [ { - "name": "sourceFileId", - "in": "path", - "required": true, "schema": { "type": "string" }, - "description": "The source file identifier." + "name": "projectId", + "in": "path", + "required": true, + "description": "The identifier of the project." }, { "schema": { "type": "string" }, - "name": "taskId", + "name": "exportId", "in": "path", "required": true, - "description": "The task identifier." + "description": "The identifier of the export operation." } - ], - "post": { - "summary": "Add Source File Version", + ] + }, + "/projects/{projectId}/source-files": { + "get": { "tags": [ "Source File" ], - "operationId": "AddSourceFileVersion", + "summary": "List Source Files", + "description": "Retrieves the source files in a project.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/sort" + }, + { + "$ref": "#/components/parameters/fields" + } + ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/source-file-version-response" + "$ref": "#/components/schemas/list-source-files-response" } } }, @@ -5719,7 +5977,7 @@ } }, "400": { - "description": "Error codes:\n* \"invalid\": invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"invalid\": the provided document is not a valid BCM file.\n* \"invalid\": invalid file format\n* \"multiPartOrder\": the multipart order in body is not correct. `properties` must be the first, followed by `file`.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -5749,7 +6007,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", + "description": "Error codes:\n* \"forbidden\": not authorized to retrieve source files on the project.", "content": { "application/json": { "schema": { @@ -5764,7 +6022,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": \\\n \\- the specified task or the source file was not found.\\\n \\- the request is performed in a task that doesn't have the input file type as source file and is used a target file identifier.", + "description": "Error codes:\n* \"notFound\": the project could not be found by identifier.", "content": { "application/json": { "schema": { @@ -5778,8 +6036,8 @@ } } }, - "409": { - "description": "Error codes:\n* \"noOwner\": the task has no owner.\n* \"differentOwner\": the authenticated user is not the owner of the task.\n* \"differentServiceUserOwner\": the authenticated service user is not the owner of the task.\n* \"taskCompleted\": adding source file version is not allowed when the task is completed.\n* \"unsupported\" : you cannot add a source file version for this task.\n* \"duplicate\": a file with the same name already exists.", + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", "content": { "application/json": { "schema": { @@ -5794,6 +6052,22 @@ } } }, + "operationId": "ListSourceFiles" + }, + "post": { + "tags": [ + "Source File" + ], + "summary": "Add Source File", + "description": "Adds a source file to the project. Files can be uploaded before starting a project or after the project has started. When adding a `translatable` file after the project started, a new start project request should be performed.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.\n\n> Note: The maximum character size of the sum between the `name` and the `path` fields must not exceed 255. Otherwise the request cannot be validated.\n\n> Note: Zip files will be added as reference files. If you want to upload zip files, please use the [Upload Zip File](../reference/Public-API.v1.json/paths/~1files/post) endpoint.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], "requestBody": { "content": { "multipart/form-data": { @@ -5805,8 +6079,7 @@ ], "properties": { "properties": { - "$ref": "#/components/schemas/source-file-version-properties-create-request", - "description": "Source file properties sent as a JSON inside a text part." + "$ref": "#/components/schemas/source-file-request" }, "file": { "type": "string", @@ -5817,45 +6090,16 @@ } } }, - "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." - }, - "description": "Adds a new version of the source file in [BCM](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html) or native format. More information about file formats can be found on the [File formats](../docs/File-formats.md) page.\n\nThe version is added on the task represented by `taskId`. To successfully execute the add operation the task should already be assigned and accepted by a user. If the task is automatic, it's possible to add a source file version only when the status of task is `inProgress`.\n\nThe file versions added need to respect the output file type declared by the task type of the enclosing task. On the [Rules for sequencing tasks correctly](https://docs.rws.com/791595/885137/trados-enterprise/rules-for-sequencing-tasks-correctly) page from the official RWS Documentation Center, you can find out what output file type is supported by each task.\n\nFor adding a source file version using an extension task, the configuration of the task must declare the `scope`'s value as \"file\".\n\nIf the file type of the new added file is different than the supported source file type, the new `fileTypeSettingsId` must be specified in the body or an update of file type should be performed after the add operation, using the [Update Source File Properties](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}~1source-files~1{sourceFileId}/put).\n\nThe value of `fileTypeSettingsId` is one of the identifiers listed by the [List File Type Settings](../reference/Public-API.v1.json/paths/~1file-processing-configurations~1{fileProcessingConfigurationId}~1file-type-settings/get) endpoint.\n\nThe [List File Type Settings](../reference/Public-API.v1.json/paths/~1file-processing-configurations~1{fileProcessingConfigurationId}~1file-type-settings/get) endpoint must be called with the File Processing Configuration identifier of your project.\n\nThe File Processing Configuration of your project can be retrieved from [Get Project](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/get) endpoint.\n\nThe multipart parameters in the body should respect and strictly follow the order specified in our documentation. \n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when adding files.\n", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" - } - ] - } - }, - "/projects/{projectId}/source-files/{sourceFileId}/versions/{fileVersionId}/download": { - "get": { - "tags": [ - "Source File" - ], - "summary": "Download Source File Version", - "description": "Downloads a source file version.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ], + "required": true, + "description": "For details on how to send multipart/form-data with `properties` see this [article](../docs/How-to-multipart.md)." + }, "responses": { - "200": { + "201": { "description": "", "content": { - "application/octet-stream": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/source-file" } } }, @@ -5865,8 +6109,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "400": { + "description": "Error responses:\n* \"invalid\": invalid input on for the value mentioned in the “name” field on the error response.\n* \"empty\": missing input for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": maximum size exceeded for the value mentioned in the \"name\" field on the error response.", "content": { "application/json": { "schema": { @@ -5880,8 +6124,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -5895,8 +6139,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": the project, the source file or the file version could not be found by identifier.\n", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to add a source file to the project.", "content": { "application/json": { "schema": { @@ -5910,8 +6154,8 @@ } } }, - "422": { - "description": "error codes:\n* \"maliciousContent\": the file contains malicious content. The infected file cannot be downloaded.", + "409": { + "description": "Error codes:\n* \"duplicate\": duplicate source file name inside a project is not allowed.\n* \"projectAlreadyCompleted\": resource can not be added because the project it is in completed state.", "content": { "application/json": { "schema": { @@ -5926,43 +6170,155 @@ } } }, - "x-codegen-download": true, - "operationId": "DownloadSourceFileVersion" + "operationId": "AddSourceFile" }, "parameters": [ { "$ref": "#/components/parameters/projectId" + } + ], + "put": { + "tags": [ + "Source File" + ], + "summary": "Update Source Files", + "operationId": "UpdateSourceFiles", + "responses": { + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error responses:\n* \"invalid\": invalid input for the value mentioned in the “name” field on the error response.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + }, + "401": { + "description": "The user could not be identified.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - the authenticated user is not allowed to update the source file.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the project could not be found by identifier.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + }, + "409": { + "description": "Error codes:\n* \"duplicate\": a file with the same name already exists." + } }, - { - "$ref": "#/components/parameters/sourceFileId" - }, - { - "$ref": "#/components/parameters/fileVersionId" + "description": "Updates multiple source files. If any of the files fails to be updated, an error will be returned for each file. ", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/source-files-update-request" + } + } + } } - ] + } }, - "/tasks/{taskId}/source-files/{sourceFileId}": { - "get": { + "/projects/{projectId}/source-files/attach-files": { + "post": { "tags": [ "Source File" ], - "summary": "Get Source File Properties", - "description": "Retrieves the properties for a source file.", + "summary": "Attach Source Files", + "description": "This endpoint can only be used after files have been uploaded via the [Upload Zip File](../reference/Public-API.v1.json/paths/~1files/post) endpoint. It allows you to add multiple source files to a project. \n\n Each file must be individually attached by setting the `fileUrl` to the `associatedFiles.id` returned by the [Poll Upload Zip File](../reference/Public-API.v1.json/paths/~1files~1{fileId}/get) endpoint, once the `unzipStatus` is `extracted`. \n\nIf a file is attached after the project has already been started, a new start project request must be made.\n\n> Note: The maximum character size of the sum between the `name` and the `path` fields must not exceed 255. Otherwise the request cannot be validated.\n", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/source-file-attachment-request" + } + } + }, + "required": true, + "description": "" + }, "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/source-file-properties-response" + "$ref": "#/components/schemas/source-file-attachment-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* \"invalid\": invalid input on for the value mentioned in the “name” field on the error response.\n* \"empty\": missing input for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" } } }, @@ -5988,7 +6344,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to attach a source file on the project.", "content": { "application/json": { "schema": { @@ -6002,8 +6358,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": the task or source file could not be found by id.\n", + "409": { + "description": "Error codes:\n* \"duplicate\": duplicate source file name inside a project is not allowed.\n* \"duplicate\": duplicate fileUrl inside a project is not allowed.", "content": { "application/json": { "schema": { @@ -6018,37 +6374,48 @@ } } }, - "operationId": "GetSourceFileProperties" + "operationId": "AddSourceFiles" }, "parameters": [ { - "schema": { - "type": "string" - }, - "name": "taskId", + "name": "projectId", "in": "path", "required": true, - "description": "The task identifier." - }, - { "schema": { "type": "string" }, - "name": "sourceFileId", - "in": "path", - "required": true, - "description": "The source file identifier." + "description": "The project identifier." } - ], - "put": { - "summary": "Update Source File Properties", + ] + }, + "/projects/{projectId}/source-files/{sourceFileId}": { + "get": { "tags": [ "Source File" ], - "operationId": "UpdateSourceProperties", + "summary": "Get Source File", + "description": "Retrieves a source file from the project.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], "responses": { - "204": { - "description": "No Content", + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/source-file" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -6056,7 +6423,7 @@ } }, "400": { - "description": "Error responses:\n* “invalid”: invalid input on update source file properties.", + "description": "Error responses:\n* \"invalid\": invalid input for the value mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -6086,7 +6453,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the resource.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { @@ -6101,137 +6468,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": - the specified task or the source file was not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "409": { - "description": "Error codes:\n* \"noOwner\": the task has no owner.\n* \"differentOwner\": the authenticated user is not the owner of the task.\n* \"taskCompleted\": updating the source file properties is not allowed when the task is completed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - } - }, - "description": "Updates the properties of the source file.\n\n\nThe value of `fileTypeSettingsId` should be one of the identifiers listed by the [List File Type Settings](../reference/Public-API.v1.json/paths/~1file-processing-configurations~1{fileProcessingConfigurationId}~1file-type-settings/get) endpoint called with an identifier of a File Processing Configuration that exists on the project. The list of File Processing Configurations from a project can be retrieved by using the [List File Processing Configurations](../reference/Public-API.v1.json/paths/~1file-processing-configurations/get) endpoint.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/source-file-properties-update-request" - } - } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ] - } - }, - "/projects/{projectId}/target-files/{targetFileId}": { - "get": { - "tags": [ - "Target File" - ], - "summary": "Get Target File", - "description": "Retrieves a target file from a project.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/target-file" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "401": { - "description": "The user could not be identified.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the project or the target file could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the project or the source file could not be found by identifier.", "content": { "application/json": { "schema": { @@ -6246,14 +6483,14 @@ } } }, - "operationId": "GetTargetFile" + "operationId": "GetSourceFile" }, "put": { "tags": [ - "Target File" + "Source File" ], - "summary": "Update Target File", - "operationId": "UpdateTargetFile", + "summary": "Update Source File", + "operationId": "UpdateSourceFile", "responses": { "204": { "description": "No Content", @@ -6309,7 +6546,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the target file could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the project or the source file could not be found by identifier.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -6327,33 +6564,34 @@ "description": "Error codes:\n* \"duplicate\": a file with the same name already exists." } }, - "description": "Updates a target file.", + "description": "Updates a source file.", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/target-file-rename-request" + "$ref": "#/components/schemas/source-file-rename-request" } } } - } + }, + "parameters": [] }, "parameters": [ { "$ref": "#/components/parameters/projectId" }, { - "$ref": "#/components/parameters/targetFileId" + "$ref": "#/components/parameters/sourceFileId" } ] }, - "/projects/{projectId}/target-files": { + "/projects/{projectId}/source-files/{sourceFileId}/versions": { "get": { "tags": [ - "Target File" + "Source File" ], - "summary": "List Target Files", - "description": "Retrieves the target files for a project.", + "summary": "List Source File Versions", + "description": "Retrieves all the versions of a source file.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -6361,38 +6599,6 @@ { "$ref": "#/components/parameters/X-LC-Tenant" }, - { - "name": "targetFileIds", - "in": "query", - "description": "Filter target files by identifiers.", - "style": "form", - "explode": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "sourceFileIds", - "in": "query", - "description": "Filter target files by the identifiers of the source file they were generated from.", - "style": "form", - "explode": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - }, { "$ref": "#/components/parameters/fields" } @@ -6403,7 +6609,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-target-files-response" + "$ref": "#/components/schemas/list-source-file-versions-response" } } }, @@ -6444,7 +6650,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the target files on the project.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to retrieve the source file versions.", "content": { "application/json": { "schema": { @@ -6459,7 +6665,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the project could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the project or the source file could not be found by identifier.", "content": { "application/json": { "schema": { @@ -6472,13 +6678,53 @@ "$ref": "#/components/headers/X-LC-TraceId" } } + } + }, + "operationId": "ListSourceFileVersions" + }, + "parameters": [ + { + "$ref": "#/components/parameters/projectId" + }, + { + "$ref": "#/components/parameters/sourceFileId" + } + ] + }, + "/tasks/{taskId}/source-files/{sourceFileId}/versions": { + "parameters": [ + { + "name": "sourceFileId", + "in": "path", + "required": true, + "schema": { + "type": "string" }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "description": "The source file identifier." + }, + { + "schema": { + "type": "string" + }, + "name": "taskId", + "in": "path", + "required": true, + "description": "The task identifier." + } + ], + "post": { + "summary": "Add Source File Version", + "tags": [ + "Source File" + ], + "operationId": "AddSourceFileVersion", + "responses": { + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/error-response" + "$ref": "#/components/schemas/source-file-version-response" } } }, @@ -6487,131 +6733,145 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - } - }, - "operationId": "ListTargetFiles" - }, - "put": { - "tags": [ - "Target File" - ], - "summary": "Update Target Files", - "operationId": "UpdateTargetFiles", - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } }, "400": { - "description": "Error responses:\n* \"invalid\": invalid input for the value mentioned in the “name” field on the error response.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, + "description": "Error codes:\n* \"invalid\": invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"invalid\": the provided document is not a valid BCM file.\n* \"invalid\": invalid file format\n* \"multiPartOrder\": the multipart order in body is not correct. `properties` must be the first, followed by `file`.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } } }, "401": { "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": - the authenticated user is not allowed to update the file.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": \\\n \\- the specified task or the source file was not found.\\\n \\- the request is performed in a task that doesn't have the input file type as source file and is used a target file identifier.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the target file could not be found by identifier.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, + } + }, + "409": { + "description": "Error codes:\n* \"noOwner\": the task has no owner.\n* \"differentOwner\": the authenticated user is not the owner of the task.\n* \"differentServiceUserOwner\": the authenticated service user is not the owner of the task.\n* \"taskCompleted\": adding source file version is not allowed when the task is completed.\n* \"unsupported\" : you cannot add a source file version for this task.\n* \"duplicate\": a file with the same name already exists.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } } - }, - "409": { - "description": "Error codes:\n* \"duplicate\": a file with the same name already exists." } }, - "description": "Updates multiple target files. If any of the files fails to be updated, an error will be returned for each file. ", "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/target-files-update-request" + "type": "object", + "required": [ + "properties", + "file" + ], + "properties": { + "properties": { + "$ref": "#/components/schemas/source-file-version-properties-create-request", + "description": "Source file properties sent as a JSON inside a text part." + }, + "file": { + "type": "string", + "format": "binary", + "description": "The source file (binary string)." + } + } } } + }, + "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." + }, + "description": "Adds a new version of the source file in [BCM](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html) or native format. More information about file formats can be found on the [File formats](../docs/File-formats.md) page.\n\nThe version is added on the task represented by `taskId`. To successfully execute the add operation the task should already be assigned and accepted by a user. If the task is automatic, it's possible to add a source file version only when the status of task is `inProgress`.\n\nThe file versions added need to respect the output file type declared by the task type of the enclosing task. On the [Rules for sequencing tasks correctly](https://docs.rws.com/791595/885137/trados-enterprise/rules-for-sequencing-tasks-correctly) page from the official RWS Documentation Center, you can find out what output file type is supported by each task.\n\nFor adding a source file version using an extension task, the configuration of the task must declare the `scope`'s value as \"file\".\n\nIf the file type of the new added file is different than the supported source file type, the new `fileTypeSettingsId` must be specified in the body or an update of file type should be performed after the add operation, using the [Update Source File Properties](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}~1source-files~1{sourceFileId}/put).\n\nThe value of `fileTypeSettingsId` is one of the identifiers listed by the [List File Type Settings](../reference/Public-API.v1.json/paths/~1file-processing-configurations~1{fileProcessingConfigurationId}~1file-type-settings/get) endpoint.\n\nThe [List File Type Settings](../reference/Public-API.v1.json/paths/~1file-processing-configurations~1{fileProcessingConfigurationId}~1file-type-settings/get) endpoint must be called with the File Processing Configuration identifier of your project.\n\nThe File Processing Configuration of your project can be retrieved from [Get Project](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/get) endpoint.\n\nThe multipart parameters in the body should respect and strictly follow the order specified in our documentation. \n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when adding files.\n", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/projectId" - } - ] + ] + } }, - "/projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}": { + "/projects/{projectId}/source-files/{sourceFileId}/versions/{fileVersionId}/download": { "get": { "tags": [ - "Target File" + "Source File" ], - "summary": "Get Target File Version", - "description": "Retrieves one version of a target file.", + "summary": "Download Source File Version", + "description": "Downloads a source file version.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" } ], "responses": { "200": { "description": "", "content": { - "application/json": { + "application/octet-stream": { "schema": { - "$ref": "#/components/schemas/target-file-version" + "type": "string", + "format": "binary" } } }, @@ -6621,8 +6881,8 @@ } } }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -6636,8 +6896,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { @@ -6651,8 +6911,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", + "404": { + "description": "Error codes:\n* \"notFound\": the project, the source file or the file version could not be found by identifier.\n", "content": { "application/json": { "schema": { @@ -6666,8 +6926,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": the project, the target file or its version could not be found by identifier.", + "422": { + "description": "error codes:\n* \"maliciousContent\": the file contains malicious content. The infected file cannot be downloaded.", "content": { "application/json": { "schema": { @@ -6682,36 +6942,34 @@ } } }, - "operationId": "GetTargetFileVersion" + "x-codegen-download": true, + "operationId": "DownloadSourceFileVersion" }, "parameters": [ { "$ref": "#/components/parameters/projectId" }, { - "$ref": "#/components/parameters/targetFileId" + "$ref": "#/components/parameters/sourceFileId" }, { "$ref": "#/components/parameters/fileVersionId" } ] }, - "/projects/{projectId}/target-files/{targetFileId}/versions": { + "/tasks/{taskId}/source-files/{sourceFileId}": { "get": { "tags": [ - "Target File" + "Source File" ], - "summary": "List Target File Versions", - "description": "Retrieves the versions of a target file.", + "summary": "Get Source File Properties", + "description": "Retrieves the properties for a source file.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" } ], "responses": { @@ -6720,22 +6978,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-target-file-versions-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" + "$ref": "#/components/schemas/source-file-properties-response" } } }, @@ -6761,7 +7004,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to retrieve versions on the target file.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { @@ -6776,7 +7019,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the project or the target file could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the task or source file could not be found by id.\n", "content": { "application/json": { "schema": { @@ -6791,42 +7034,49 @@ } } }, - "operationId": "ListTargetFileVersions" + "operationId": "GetSourceFileProperties" }, "parameters": [ { - "$ref": "#/components/parameters/projectId" + "schema": { + "type": "string" + }, + "name": "taskId", + "in": "path", + "required": true, + "description": "The task identifier." }, { - "$ref": "#/components/parameters/targetFileId" + "schema": { + "type": "string" + }, + "name": "sourceFileId", + "in": "path", + "required": true, + "description": "The source file identifier." } - ] - }, - "/projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}/exports": { - "post": { + ], + "put": { + "summary": "Update Source File Properties", "tags": [ - "Target File" - ], - "summary": "Export Target File Version", - "description": "Generates an asynchronous export operation. Use the [Get Target File Version Export](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1exports~1{exportId}/get) endpoint to poll until the export is completed. Used only for [BCM](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html) file versions.\n\nThis operation triggers a conversion of the BCM target file version in a native or SDLXLIFF format, based on the value of the `format` query parameter used.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/export-format" - } + "Source File" ], + "operationId": "UpdateSourceProperties", "responses": { - "202": { - "description": "", + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error responses:\n* “invalid”: invalid input on update source file properties.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/file-version-export" + "$ref": "#/components/schemas/error-response" } } }, @@ -6852,7 +7102,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to export the target file version.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the resource.", "content": { "application/json": { "schema": { @@ -6867,7 +7117,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the project, the target file or the version could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": - the specified task or the source file was not found.", "content": { "application/json": { "schema": { @@ -6882,7 +7132,7 @@ } }, "409": { - "description": "Error codes:\n* \"invalidType\": The type of the target file doesn't allow the export operation.\n* \"conflict\": A target file version export is already in progress.", + "description": "Error codes:\n* \"noOwner\": the task has no owner.\n* \"differentOwner\": the authenticated user is not the owner of the task.\n* \"taskCompleted\": updating the source file properties is not allowed when the task is completed.", "content": { "application/json": { "schema": { @@ -6897,27 +7147,16 @@ } } }, - "operationId": "ExportTargetFileVersion" - }, - "parameters": [ - { - "$ref": "#/components/parameters/projectId" - }, - { - "$ref": "#/components/parameters/targetFileId" + "description": "Updates the properties of the source file.\n\n\nThe value of `fileTypeSettingsId` should be one of the identifiers listed by the [List File Type Settings](../reference/Public-API.v1.json/paths/~1file-processing-configurations~1{fileProcessingConfigurationId}~1file-type-settings/get) endpoint called with an identifier of a File Processing Configuration that exists on the project. The list of File Processing Configurations from a project can be retrieved by using the [List File Processing Configurations](../reference/Public-API.v1.json/paths/~1file-processing-configurations/get) endpoint.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/source-file-properties-update-request" + } + } + } }, - { - "$ref": "#/components/parameters/fileVersionId" - } - ] - }, - "/projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}/exports/{exportId}": { - "get": { - "tags": [ - "Target File" - ], - "summary": "Poll Target File Version Export", - "description": "Polls a target file version via an export operation. The new version can be downloaded once the status is \"completed\".", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -6925,14 +7164,49 @@ { "$ref": "#/components/parameters/X-LC-Tenant" } - ], - "responses": { - "200": { + ] + } + }, + "/projects/{projectId}/target-files/{targetFileId}": { + "get": { + "tags": [ + "Target File" + ], + "summary": "Get Target File", + "description": "Retrieves a target file from a project.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "responses": { + "200": { "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/file-version-export" + "$ref": "#/components/schemas/target-file" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" } } }, @@ -6958,7 +7232,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to retrieve the export.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { @@ -6973,7 +7247,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the resource could not be found.", + "description": "Error codes:\n* \"notFound\": the project or the target file could not be found by identifier.", "content": { "application/json": { "schema": { @@ -6988,118 +7262,97 @@ } } }, - "operationId": "PollTargetFileVersionExport" + "operationId": "GetTargetFile" }, - "parameters": [ - { - "$ref": "#/components/parameters/projectId" - }, - { - "$ref": "#/components/parameters/targetFileId" - }, - { - "$ref": "#/components/parameters/fileVersionId" - }, - { - "$ref": "#/components/parameters/exportId" - } - ] - }, - "/projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}/exports/{exportId}/download": { - "get": { + "put": { "tags": [ "Target File" ], - "summary": "Download Exported Target File Version", - "description": "Downloads a completed target file version via an export operation.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ], + "summary": "Update Target File", + "operationId": "UpdateTargetFile", "responses": { - "200": { - "description": "", - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, + "204": { + "description": "No Content", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } } }, - "401": { - "description": "The user could not be identified.", + "400": { + "description": "Error responses:\n* \"invalid\": invalid input for the value mentioned in the “name” field on the error response.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "401": { + "description": "The user could not be identified.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": not allowed to download the exported target file", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - the authenticated user is not allowed to update the target file.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the resource could not be found.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the target file could not be found by identifier.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "409": { - "description": "Error codes:\n* \"invalidStatus\": the export is not completed\n* \"conflict\": the export is not in a downloadable state due to another export, or the workflow has progressed since this export was requested", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } + }, + "409": { + "description": "Error codes:\n* \"duplicate\": a file with the same name already exists." } }, - "x-codegen-download": true, - "operationId": "DownloadExportedTargetFileVersion" + "description": "Updates a target file.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/target-file-rename-request" + } + } + } + } }, "parameters": [ { @@ -7107,38 +7360,66 @@ }, { "$ref": "#/components/parameters/targetFileId" - }, - { - "$ref": "#/components/parameters/fileVersionId" - }, - { - "$ref": "#/components/parameters/exportId" } ] }, - "/projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}/download": { + "/projects/{projectId}/target-files": { "get": { "tags": [ "Target File" ], - "summary": "Download Target File Version", - "description": "Downloads the file version (native or BCM). \n\nIf the `fileVersionId` path parameter represents a native file version, the native file will be downloaded. If the `fileVersionId` is an identifier of a version in [BCM format](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html), the BCM file will be downloaded.", + "summary": "List Target Files", + "description": "Retrieves the target files for a project.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "name": "targetFileIds", + "in": "query", + "description": "Filter target files by identifiers.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "sourceFileIds", + "in": "query", + "description": "Filter target files by the identifiers of the source file they were generated from.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/fields" } ], "responses": { "200": { "description": "", "content": { - "application/octet-stream": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/list-target-files-response" } } }, @@ -7148,8 +7429,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -7163,8 +7444,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": not allowed to download the file version.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -7178,8 +7459,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": the file version could not be found.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the target files on the project.", "content": { "application/json": { "schema": { @@ -7193,8 +7474,8 @@ } } }, - "409": { - "description": "error codes:\n* \"invalidType\": the type of the file version cannot be downloaded.", + "404": { + "description": "Error codes:\n* \"notFound\": the project could not be found by identifier.", "content": { "application/json": { "schema": { @@ -7208,8 +7489,8 @@ } } }, - "422": { - "description": "error codes:\n* \"maliciousContent\": the file contains malicious content. The infected file cannot be downloaded.", + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", "content": { "application/json": { "schema": { @@ -7224,64 +7505,129 @@ } } }, - "x-codegen-download": true, - "operationId": "DownloadFileVersion" + "operationId": "ListTargetFiles" }, - "parameters": [ - { - "$ref": "#/components/parameters/projectId" - }, - { - "$ref": "#/components/parameters/targetFileId" - }, - { - "$ref": "#/components/parameters/fileVersionId" - } - ] - }, - "/projects/{projectId}/target-files/{targetFileId}/versions/imports": { - "post": { + "put": { "tags": [ "Target File" ], - "summary": "Import Target File Version", - "description": "Generates an asynchronous import operation. Use [Poll Target File Version Import endpoint](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1imports~1{importId}/get) to poll until the import is completed. Only `sdlxliff` files can be imported.\n\nImport should be used when a file is downloaded as an `sdlxliff`, processed and then, replaced. \nThe import operation triggers internally the update of the [BCM](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html) file associated with the imported file. It should mostly be used for offline work.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" + "summary": "Update Target Files", + "operationId": "UpdateTargetFiles", + "responses": { + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ], + "400": { + "description": "Error responses:\n* \"invalid\": invalid input for the value mentioned in the “name” field on the error response.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + }, + "401": { + "description": "The user could not be identified.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - the authenticated user is not allowed to update the file.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the target file could not be found by identifier.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + }, + "409": { + "description": "Error codes:\n* \"duplicate\": a file with the same name already exists." + } + }, + "description": "Updates multiple target files. If any of the files fails to be updated, an error will be returned for each file. ", "requestBody": { "content": { - "multipart/form-data": { + "application/json": { "schema": { - "type": "object", - "required": [ - "file" - ], - "properties": { - "file": { - "type": "string", - "format": "binary", - "description": "The target file (binary string)." - } - } + "$ref": "#/components/schemas/target-files-update-request" } } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/projectId" + } + ] + }, + "/projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}": { + "get": { + "tags": [ + "Target File" + ], + "summary": "Get Target File Version", + "description": "Retrieves one version of a target file.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" }, - "required": true, - "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." - }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/file-version-import" + "$ref": "#/components/schemas/target-file-version" } } }, @@ -7292,7 +7638,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid file uploaded, mentioned in the “name” field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -7322,7 +7668,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to execute operation.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { @@ -7337,23 +7683,22 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": - the specified project or target file was not found.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, + "description": "Error codes:\n* \"notFound\": the project, the target file or its version could not be found by identifier.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } } } }, - "x-codegen-request-body-name": "body", - "operationId": "ImportTargetFileVersion" + "operationId": "GetTargetFileVersion" }, "parameters": [ { @@ -7361,22 +7706,28 @@ }, { "$ref": "#/components/parameters/targetFileId" + }, + { + "$ref": "#/components/parameters/fileVersionId" } ] }, - "/projects/{projectId}/target-files/{targetFileId}/versions/imports/{importId}": { + "/projects/{projectId}/target-files/{targetFileId}/versions": { "get": { "tags": [ "Target File" ], - "summary": "Poll Target File Version Import", - "description": "Polls a target file version via an import operation. The new version can be seen on the file versions once the status is \"completed\".", + "summary": "List Target File Versions", + "description": "Retrieves the versions of a target file.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" } ], "responses": { @@ -7385,7 +7736,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/file-version-import" + "$ref": "#/components/schemas/list-target-file-versions-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" } } }, @@ -7410,8 +7776,23 @@ } } }, + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to retrieve versions on the target file.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, "404": { - "description": "Error codes:\n* \"notFound\": - the specified project or target file was not found.", + "description": "Error codes:\n* \"notFound\": the project or the target file could not be found by identifier.", "content": { "application/json": { "schema": { @@ -7426,7 +7807,7 @@ } } }, - "operationId": "PollTargetFileVersionImport" + "operationId": "ListTargetFileVersions" }, "parameters": [ { @@ -7434,61 +7815,34 @@ }, { "$ref": "#/components/parameters/targetFileId" - }, - { - "$ref": "#/components/parameters/importId" } ] }, - "/tasks/{taskId}/target-files/{targetFileId}/versions": { - "parameters": [ - { - "schema": { - "type": "string" - }, - "name": "taskId", - "in": "path", - "required": true, - "description": "The task identifier." - }, - { - "schema": { - "type": "string" - }, - "name": "targetFileId", - "in": "path", - "required": true, - "description": "The target file identifier." - } - ], + "/projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}/exports": { "post": { - "summary": "Add Target File Version", "tags": [ "Target File" ], - "operationId": "AddTargetFileVersion", - "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/target-file-version-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "summary": "Export Target File Version", + "description": "Generates an asynchronous export operation. Use the [Get Target File Version Export](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1exports~1{exportId}/get) endpoint to poll until the export is completed. Used only for [BCM](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html) file versions.\n\nThis operation triggers a conversion of the BCM target file version in a native or SDLXLIFF format, based on the value of the `format` query parameter used.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" }, - "400": { - "description": "Error codes:\n\n* \"invalid\": invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"invalid\": the provided document is not a valid BCM file.\n* \"invalid\": invalid file format\n* \"multiPartOrder\": the multipart order in the body is not correct. The `properties` must be first and then, file.", + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/export-format" + } + ], + "responses": { + "202": { + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/error-response" + "$ref": "#/components/schemas/file-version-export" } } }, @@ -7514,7 +7868,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to add a version for the target file.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to export the target file version.", "content": { "application/json": { "schema": { @@ -7529,7 +7883,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": \\\n \\- the specified task or the target file was not found.\\\n \\- the request is performed in a task that doesn't have the input file type as target file and is used a source file identifier.", + "description": "Error codes:\n* \"notFound\": the project, the target file or the version could not be found by identifier.", "content": { "application/json": { "schema": { @@ -7544,7 +7898,7 @@ } }, "409": { - "description": "Error codes:\n* \"noOwner\": the task has no owner.\n* \"differentOwner\": the authenticated user is not the owner of the task.\n* \"differentServiceUserOwner\": the authenticated service user is not the owner of the task.\n* \"taskCompleted\": adding target file version is not allowed when the task is completed.\n* \"duplicate\": a file with the same name already exists.", + "description": "Error codes:\n* \"invalidType\": The type of the target file doesn't allow the export operation.\n* \"conflict\": A target file version export is already in progress.", "content": { "application/json": { "schema": { @@ -7559,52 +7913,45 @@ } } }, - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "required": [ - "properties", - "file" - ], - "properties": { - "properties": { - "$ref": "#/components/schemas/target-file-version-properties-create-request", - "description": "Target file properties sent as a JSON inside a text part." - }, - "file": { - "type": "string", - "format": "binary", - "description": "The target file (binary string)." - } - } - } - } - }, - "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." + "operationId": "ExportTargetFileVersion" + }, + "parameters": [ + { + "$ref": "#/components/parameters/projectId" }, - "description": "Adds a new version of the target file. Only the `native` and `bcm` file formats are accepted. For the `sdlxliff` files, you should use the [Import Target File endpoint](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1imports/post). More information about file formats can be found on the [File formats](../docs/File-formats.md) page. Additional details on BCM files can be found [here](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html).\n\nThe version is added on the task represented by `taskId`. To be able to execute the add operation the task should be assigned and accepted by user. If the task is automatic, it is possible to add a target file version only if the status is `inProgress`.\n\nThe added file versions need to respect the output file type declared by the task type of the enclosing task. On the [Rules for sequencing tasks correctly](https://docs.rws.com/791595/885137/trados-enterprise/rules-for-sequencing-tasks-correctly) page from the official RWS Documentation Center, you can find out what output file type is supported by each task.\n\nFor adding a target file version using an extension task, the configuration of the task type must declare the `scope`'s value as \"file\".\n\nThe multipart parameters in the body should respect and strictly follow the order specified in our documentation.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", + { + "$ref": "#/components/parameters/targetFileId" + }, + { + "$ref": "#/components/parameters/fileVersionId" + } + ] + }, + "/projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}/exports/{exportId}": { + "get": { + "tags": [ + "Target File" + ], + "summary": "Poll Target File Version Export", + "description": "Polls a target file version via an export operation. The new version can be downloaded once the status is \"completed\".", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" } - ] - } - }, - "/projects/{projectId}/files/{fileId}/cancel": { - "put": { - "summary": "Cancel Project File", - "operationId": "CancelProjectFile", + ], "responses": { - "204": { - "description": "No Content", + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/file-version-export" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -7627,7 +7974,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read resource", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to retrieve the export.", "content": { "application/json": { "schema": { @@ -7642,7 +7989,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the resource could not be found.", "content": { "application/json": { "schema": { @@ -7655,73 +8002,48 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - }, - "409": { - "description": "Error codes:\r\n* \"alreadyCanceled\": the file was already cancelled.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, - "content": { - "application/json": { - "schema": { - "type": "object", - "$ref": "#/components/schemas/error-response" - } - } - } } }, - "description": "Cancels a project file.", - "tags": [ - "Project" - ], - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ] + "operationId": "PollTargetFileVersionExport" }, "parameters": [ { "$ref": "#/components/parameters/projectId" }, { - "$ref": "#/components/parameters/fileId" + "$ref": "#/components/parameters/targetFileId" + }, + { + "$ref": "#/components/parameters/fileVersionId" + }, + { + "$ref": "#/components/parameters/exportId" } ] }, - "/projects/{projectId}/quote-report/export": { - "post": { - "summary": "Export Quote Report", - "operationId": "ExportQuoteReport", - "responses": { - "202": { - "description": "Accepted", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/export-quote-report-response", - "description": "Export quote report response.\n\nThe field is optional and will be returned only if a custom quote template is associated with the project.t.\n\nWe currently have this known issue: when the export is not using a Quote Template, the response for this call will be empty. It will be addressed in the future.e." - } - } - } + "/projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}/exports/{exportId}/download": { + "get": { + "tags": [ + "Target File" + ], + "summary": "Download Exported Target File Version", + "description": "Downloads a completed target file version via an export operation.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" }, - "400": { - "description": "Error codes:\n* “invalid”: invalid input in the query parameter mentioned in the “name” field on the error response.", + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "responses": { + "200": { + "description": "", "content": { - "application/json": { + "application/octet-stream": { "schema": { - "$ref": "#/components/schemas/error-response" + "type": "string", + "format": "binary" } } }, @@ -7747,7 +8069,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read resource.", + "description": "Error codes:\n* \"forbidden\": not allowed to download the exported target file", "content": { "application/json": { "schema": { @@ -7762,7 +8084,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the project could not be found.", + "description": "Error codes:\n* \"notFound\": the resource could not be found.", "content": { "application/json": { "schema": { @@ -7777,7 +8099,7 @@ } }, "409": { - "description": "Error codes:\n* \"conflict\": the project is in a phase which doesn’t allow the quote to be exported.", + "description": "Error codes:\n* \"invalidStatus\": the export is not completed\n* \"conflict\": the export is not in a downloadable state due to another export, or the workflow has progressed since this export was requested", "content": { "application/json": { "schema": { @@ -7792,44 +8114,62 @@ } } }, - "description": "Generates an asynchronous quote export operation for the project in either PDF or Excel format. Use the [polling endpoint](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/get) to check when the export is completed.

\nBuilt-in quotes are only available in the same languages as the user interface. See [this page](https://docs.rws.com/791595/1084405/trados-enterprise---accelerate/ui-languages) for more information.
\nCustomers who use non-default quote templates are responsible for the implementation of a suitable localization approach.", + "x-codegen-download": true, + "operationId": "DownloadExportedTargetFileVersion" + }, + "parameters": [ + { + "$ref": "#/components/parameters/projectId" + }, + { + "$ref": "#/components/parameters/targetFileId" + }, + { + "$ref": "#/components/parameters/fileVersionId" + }, + { + "$ref": "#/components/parameters/exportId" + } + ] + }, + "/projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}/download": { + "get": { + "tags": [ + "Target File" + ], + "summary": "Download Target File Version", + "description": "Downloads the file version (native or BCM). \n\nIf the `fileVersionId` path parameter represents a native file version, the native file will be downloaded. If the `fileVersionId` is an identifier of a version in [BCM format](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html), the BCM file will be downloaded.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/quote-report-format" - }, - { - "$ref": "#/components/parameters/language-id" } ], - "tags": [ - "Quote" - ] - }, - "get": { - "summary": "Poll Quote Report Export", - "operationId": "PollQuoteReportExport", "responses": { "200": { "description": "", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "inProgress", - "completed" - ] - } - } + "$ref": "#/components/schemas/error-response" } } }, @@ -7839,8 +8179,8 @@ } } }, - "400": { - "description": "Error codes:\n* “invalid”: invalid input in the query parameter mentioned in the “name” field on the error response.", + "403": { + "description": "Error codes:\n* \"forbidden\": not allowed to download the file version.", "content": { "application/json": { "schema": { @@ -7854,8 +8194,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "404": { + "description": "Error codes:\n* \"notFound\": the file version could not be found.", "content": { "application/json": { "schema": { @@ -7869,8 +8209,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", + "409": { + "description": "error codes:\n* \"invalidType\": the type of the file version cannot be downloaded.", "content": { "application/json": { "schema": { @@ -7884,8 +8224,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": the project could not be found.", + "422": { + "description": "error codes:\n* \"maliciousContent\": the file contains malicious content. The infected file cannot be downloaded.", "content": { "application/json": { "schema": { @@ -7900,48 +8240,64 @@ } } }, - "description": "Polls a quote report via an export operation. The quote report can be [downloaded](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1download/get) once the status is \"completed\". The recommended polling interval is 20 seconds. If polling does not return a success status in 20 minutes, it should be abandoned and a new export should be retried.\n\nIf the `exportId` query parameter is not provided, the polling action will return the status for the last generated export.", + "x-codegen-download": true, + "operationId": "DownloadFileVersion" + }, + "parameters": [ + { + "$ref": "#/components/parameters/projectId" + }, + { + "$ref": "#/components/parameters/targetFileId" + }, + { + "$ref": "#/components/parameters/fileVersionId" + } + ] + }, + "/projects/{projectId}/target-files/{targetFileId}/versions/imports": { + "post": { + "tags": [ + "Target File" + ], + "summary": "Import Target File Version", + "description": "Generates an asynchronous import operation. Use [Poll Target File Version Import endpoint](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1imports~1{importId}/get) to poll until the import is completed. Only `sdlxliff` files can be imported.\n\nImport should be used when a file is downloaded as an `sdlxliff`, processed and then, replaced. \nThe import operation triggers internally the update of the [BCM](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html) file associated with the imported file. It should mostly be used for offline work.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/quote-report-format" - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "exportId", - "description": "The export identifier." } ], - "tags": [ - "Quote" - ] - }, - "parameters": [ - { - "$ref": "#/components/parameters/projectId" - } - ] - }, - "/projects/{projectId}/quote-report/download": { - "get": { - "summary": "Download Exported Quote Report", - "operationId": "DownloadQuoteReport", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "required": [ + "file" + ], + "properties": { + "file": { + "type": "string", + "format": "binary", + "description": "The target file (binary string)." + } + } + } + } + }, + "required": true, + "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." + }, "responses": { "200": { "description": "", "content": { - "application/octet-stream": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/file-version-import" } } }, @@ -7952,7 +8308,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error code “invalid” in case of:\n * Empty or missing file in request\n * Not valid multipart request\n * File parameter contains other extension than the one expected by specification.", "content": { "application/json": { "schema": { @@ -7982,7 +8338,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to execute operation.", "content": { "application/json": { "schema": { @@ -7997,77 +8353,41 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the project could not be found.", + "description": "Error codes:\n* \"notFound\": - the specified project or target file was not found.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } } }, - "description": "Downloads a quote report generated by the [asynchronous export operation](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/post). \n\nIf the `exportId` query parameter is not provided, the last generated export quote will be downloaded.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/quote-report-format" - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "exportId", - "description": "The export identifier." - } - ], - "tags": [ - "Quote" - ] + "x-codegen-request-body-name": "body", + "operationId": "ImportTargetFileVersion" }, "parameters": [ { "$ref": "#/components/parameters/projectId" + }, + { + "$ref": "#/components/parameters/targetFileId" } ] }, - "/projects/{projectId}/tasks": { + "/projects/{projectId}/target-files/{targetFileId}/versions/imports/{importId}": { "get": { "tags": [ - "Project" + "Target File" ], - "summary": "List Project's Tasks", - "description": "Lists the tasks of a specific project.", + "summary": "Poll Target File Version Import", + "description": "Polls a target file version via an import operation. The new version can be seen on the file versions once the status is \"completed\".", "parameters": [ - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - }, - { - "$ref": "#/components/parameters/location" - }, - { - "$ref": "#/components/parameters/location-strategy" - }, - { - "$ref": "#/components/parameters/sort" - }, - { - "$ref": "#/components/parameters/fields" - }, { "$ref": "#/components/parameters/Authorization" }, @@ -8081,7 +8401,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-tasks-response" + "$ref": "#/components/schemas/file-version-import" } } }, @@ -8106,8 +8426,8 @@ } } }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "404": { + "description": "Error codes:\n* \"notFound\": - the specified project or target file was not found.", "content": { "application/json": { "schema": { @@ -8122,51 +8442,54 @@ } } }, - "operationId": "ListProjectTasks" + "operationId": "PollTargetFileVersionImport" }, "parameters": [ { "$ref": "#/components/parameters/projectId" + }, + { + "$ref": "#/components/parameters/targetFileId" + }, + { + "$ref": "#/components/parameters/importId" } ] }, - "/project-groups": { - "get": { - "tags": [ - "Project Group" - ], - "summary": "List Project Groups", - "description": "Retrieves a list of all the project groups in an account.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - }, - { - "$ref": "#/components/parameters/location" + "/tasks/{taskId}/target-files/{targetFileId}/versions": { + "parameters": [ + { + "schema": { + "type": "string" }, - { - "$ref": "#/components/parameters/location-strategy" + "name": "taskId", + "in": "path", + "required": true, + "description": "The task identifier." + }, + { + "schema": { + "type": "string" }, - { - "$ref": "#/components/parameters/fields" - } + "name": "targetFileId", + "in": "path", + "required": true, + "description": "The target file identifier." + } + ], + "post": { + "summary": "Add Target File Version", + "tags": [ + "Target File" ], + "operationId": "AddTargetFileVersion", "responses": { - "200": { - "description": "", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-project-groups-response" + "$ref": "#/components/schemas/target-file-version-response" } } }, @@ -8177,7 +8500,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\n\n* \"invalid\": invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"invalid\": the provided document is not a valid BCM file.\n* \"invalid\": invalid file format\n* \"multiPartOrder\": the multipart order in the body is not correct. The `properties` must be first and then, file.", "content": { "application/json": { "schema": { @@ -8206,8 +8529,8 @@ } } }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to add a version for the target file.", "content": { "application/json": { "schema": { @@ -8220,56 +8543,9 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - } - }, - "operationId": "ListProjectGroups" - }, - "post": { - "tags": [ - "Project Group" - ], - "summary": "Create Project Group", - "description": "Creates a new project group.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/project-group-create-request" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/project-group-create-response" - }, - "examples": {} - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "404": { + "description": "Error codes:\n* \"notFound\": \\\n \\- the specified task or the target file was not found.\\\n \\- the request is performed in a task that doesn't have the input file type as target file and is used a source file identifier.", "content": { "application/json": { "schema": { @@ -8283,8 +8559,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "409": { + "description": "Error codes:\n* \"noOwner\": the task has no owner.\n* \"differentOwner\": the authenticated user is not the owner of the task.\n* \"differentServiceUserOwner\": the authenticated service user is not the owner of the task.\n* \"taskCompleted\": adding target file version is not allowed when the task is completed.\n* \"duplicate\": a file with the same name already exists.", "content": { "application/json": { "schema": { @@ -8297,49 +8573,34 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to create the project group in the specified location.\n* \"benefitNotAvailable\": Your subscription does not include access to the requested type of benefit.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "409": { - "description": "Error codes:\n* \"duplicate\": Project group with the same name already exists.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" + } + }, + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "required": [ + "properties", + "file" + ], + "properties": { + "properties": { + "$ref": "#/components/schemas/target-file-version-properties-create-request", + "description": "Target file properties sent as a JSON inside a text part." + }, + "file": { + "type": "string", + "format": "binary", + "description": "The target file (binary string)." + } } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } - } + }, + "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." }, - "operationId": "CreateProjectGroup" - }, - "parameters": [] - }, - "/project-groups/{projectGroupId}": { - "get": { - "tags": [ - "Project Group" - ], - "summary": "Get Project Group", - "description": "Retrieves a project group by identifier.", + "description": "Adds a new version of the target file. Only the `native` and `bcm` file formats are accepted. For the `sdlxliff` files, you should use the [Import Target File endpoint](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1imports/post). More information about file formats can be found on the [File formats](../docs/File-formats.md) page. Additional details on BCM files can be found [here](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html).\n\nThe version is added on the task represented by `taskId`. To be able to execute the add operation the task should be assigned and accepted by user. If the task is automatic, it is possible to add a target file version only if the status is `inProgress`.\n\nThe added file versions need to respect the output file type declared by the task type of the enclosing task. On the [Rules for sequencing tasks correctly](https://docs.rws.com/791595/885137/trados-enterprise/rules-for-sequencing-tasks-correctly) page from the official RWS Documentation Center, you can find out what output file type is supported by each task.\n\nFor adding a target file version using an extension task, the configuration of the task type must declare the `scope`'s value as \"file\".\n\nThe multipart parameters in the body should respect and strictly follow the order specified in our documentation.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -8350,25 +8611,24 @@ { "$ref": "#/components/parameters/fields" } - ], + ] + } + }, + "/projects/{projectId}/files/{fileId}/cancel": { + "put": { + "summary": "Cancel Project File", + "operationId": "CancelProjectFile", "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/project-group" - } - } - }, + "204": { + "description": "No Content", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } } }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -8382,8 +8642,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read resource", "content": { "application/json": { "schema": { @@ -8397,8 +8657,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the project group.", + "404": { + "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", "content": { "application/json": { "schema": { @@ -8412,30 +8672,27 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": The project group could not be found by identifier.", + "409": { + "description": "Error codes:\r\n* \"alreadyCanceled\": the file was already cancelled.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { + "type": "object", "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } } }, - "operationId": "GetProjectGroup" - }, - "put": { + "description": "Cancels a project file.", "tags": [ - "Project Group" + "Project" ], - "summary": "Update Project Group", - "description": "Updates the project group.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -8443,29 +8700,40 @@ { "$ref": "#/components/parameters/X-LC-Tenant" } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/project-group-update-request" - } - } - }, - "required": true, - "description": "" + ] + }, + "parameters": [ + { + "$ref": "#/components/parameters/projectId" }, + { + "$ref": "#/components/parameters/fileId" + } + ] + }, + "/projects/{projectId}/quote-report/export": { + "post": { + "summary": "Export Quote Report", + "operationId": "ExportQuoteReport", "responses": { - "204": { - "description": "No Content", + "202": { + "description": "Accepted", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/export-quote-report-response", + "description": "Export quote report response.\n\nThe field is optional and will be returned only if a custom quote template is associated with the project.t.\n\nWe currently have this known issue: when the export is not using a Quote Template, the response for this call will be empty. It will be addressed in the future.e." + } + } } }, "400": { - "description": "Error responses:\n\n* “invalid”: Invalid input on update project group model.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "description": "Error codes:\n* “invalid”: invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -8495,7 +8763,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the project group.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read resource.", "content": { "application/json": { "schema": { @@ -8510,7 +8778,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the project group could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the project could not be found.", "content": { "application/json": { "schema": { @@ -8525,48 +8793,70 @@ } }, "409": { - "description": "Error codes:\n* \"duplicate\": Project group with the same name already exists.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, + "description": "Error codes:\n* \"conflict\": the project is in a phase which doesn’t allow the quote to be exported.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } } } }, - "operationId": "UpdateProjectGroup" - }, - "delete": { - "tags": [ - "Project Group" - ], - "summary": "Delete Project Group", - "description": "Deletes a project group.", + "description": "Generates an asynchronous quote export operation for the project in either PDF or Excel format. Use the [polling endpoint](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/get) to check when the export is completed.

\nBuilt-in quotes are only available in the same languages as the user interface. See [this page](https://docs.rws.com/791595/1084405/trados-enterprise---accelerate/ui-languages) for more information.
\nCustomers who use non-default quote templates are responsible for the implementation of a suitable localization approach.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/quote-report-format" + }, + { + "$ref": "#/components/parameters/language-id" } ], + "tags": [ + "Quote" + ] + }, + "get": { + "summary": "Poll Quote Report Export", + "operationId": "PollQuoteReportExport", "responses": { - "204": { - "description": "No Content", + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "inProgress", + "completed" + ] + } + } + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } } }, - "401": { - "description": "The user could not be identified.", + "400": { + "description": "Error codes:\n* “invalid”: invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -8580,8 +8870,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to delete the project group.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -8595,8 +8885,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": the project group could not be found by identifier.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { @@ -8610,8 +8900,8 @@ } } }, - "409": { - "description": "Error codes:\n* \"conflict\": there might be projects that are still `attaching`.", + "404": { + "description": "Error codes:\n* \"notFound\": the project could not be found.", "content": { "application/json": { "schema": { @@ -8626,27 +8916,7 @@ } } }, - "operationId": "DeleteProjectGroup" - }, - "parameters": [ - { - "schema": { - "type": "string" - }, - "name": "projectGroupId", - "in": "path", - "required": true, - "description": "The project group identifier." - } - ] - }, - "/project-groups/{projectGroupId}/projects": { - "post": { - "tags": [ - "Project Group" - ], - "summary": "Add Projects To Group", - "description": "Adds projects to the project group.\n\nThe projects are not added instantly. To check the status use the [Get Project Group](../reference/Public-API.v1.json/paths/~1project-groups~1{projectGroupId}/get) endpoint.", + "description": "Polls a quote report via an export operation. The quote report can be [downloaded](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1download/get) once the status is \"completed\". The recommended polling interval is 20 seconds. If polling does not return a success status in 20 minutes, it should be abandoned and a new export should be retried.\n\nIf the `exportId` query parameter is not provided, the polling action will return the status for the last generated export.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -8655,37 +8925,50 @@ "$ref": "#/components/parameters/X-LC-Tenant" }, { - "$ref": "#/components/parameters/fields" + "$ref": "#/components/parameters/quote-report-format" + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "exportId", + "description": "The export identifier." } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/add-projects-to-group-request" - } - } - }, - "required": true - }, + "tags": [ + "Quote" + ] + }, + "parameters": [ + { + "$ref": "#/components/parameters/projectId" + } + ] + }, + "/projects/{projectId}/quote-report/download": { + "get": { + "summary": "Download Exported Quote Report", + "operationId": "DownloadQuoteReport", "responses": { - "202": { - "description": "Accepted", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, + "200": { + "description": "", "content": { - "application/json": { + "application/octet-stream": { "schema": { - "$ref": "#/components/schemas/add-projects-to-group-response" + "type": "string", + "format": "binary" } } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\n* “invalid”: invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -8715,7 +8998,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to add the projects to group.\n* \"forbidden\": The projects are not found or the authenticated user does not have acces to them.\n* \"benefitNotAvailable\": Your subscription does not include access to the requested type of benefit.\n* \"quotaReached\": The maximum number of projects allowed for your project group has already been reached.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { @@ -8730,7 +9013,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": The project group could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the project could not be found.", "content": { "application/json": { "schema": { @@ -8743,32 +9026,64 @@ "$ref": "#/components/headers/X-LC-TraceId" } } + } + }, + "description": "Downloads a quote report generated by the [asynchronous export operation](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/post). \n\nIf the `exportId` query parameter is not provided, the last generated export quote will be downloaded.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" }, - "409": { - "description": "Error codes:\n* “conflict”: A project with status \"detaching\" cannot be added.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/quote-report-format" + }, + { + "schema": { + "type": "string" }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "in": "query", + "name": "exportId", + "description": "The export identifier." } - }, - "operationId": "AddProjectsToGroup" + ], + "tags": [ + "Quote" + ] }, - "delete": { + "parameters": [ + { + "$ref": "#/components/parameters/projectId" + } + ] + }, + "/projects/{projectId}/tasks": { + "get": { "tags": [ - "Project Group" + "Project" ], - "summary": "Remove Projects From Group", - "description": "Removes projects from the project group.\n\nThe projects are not removed instantly. To check the status use the [Get Project Group](../reference/Public-API.v1.json/paths/~1project-groups~1{projectGroupId}/get) endpoint.", + "summary": "List Project's Tasks", + "description": "Lists the tasks of a specific project.", "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/location" + }, + { + "$ref": "#/components/parameters/location-strategy" + }, + { + "$ref": "#/components/parameters/sort" + }, + { + "$ref": "#/components/parameters/fields" + }, { "$ref": "#/components/parameters/Authorization" }, @@ -8777,16 +9092,23 @@ } ], "responses": { - "202": { - "description": "Accepted", + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/list-tasks-response" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } } }, - "400": { - "description": "Error codes:\n\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -8800,8 +9122,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", "content": { "application/json": { "schema": { @@ -8814,13 +9136,53 @@ "$ref": "#/components/headers/X-LC-TraceId" } } + } + }, + "operationId": "ListProjectTasks" + }, + "parameters": [ + { + "$ref": "#/components/parameters/projectId" + } + ] + }, + "/project-groups": { + "get": { + "tags": [ + "Project Group" + ], + "summary": "List Project Groups", + "description": "Retrieves a list of all the project groups in an account.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" }, - "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to remove the projects from the project group.", + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/location" + }, + { + "$ref": "#/components/parameters/location-strategy" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "responses": { + "200": { + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/error-response" + "$ref": "#/components/schemas/list-project-groups-response" } } }, @@ -8830,8 +9192,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": The project group could not be found by identifier.", + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -8845,8 +9207,8 @@ } } }, - "409": { - "description": "Error codes:\n* “conflict”: A project with status \"attaching\" cannot be removed.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -8859,38 +9221,31 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - } - }, - "operationId": "RemoveProjectsFromGroup", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/remove-projects-from-group-request" + }, + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" } } } - } + }, + "operationId": "ListProjectGroups" }, - "parameters": [ - { - "schema": { - "type": "string" - }, - "name": "projectGroupId", - "in": "path", - "required": true, - "description": "The Project Group identifier." - } - ] - }, - "/project-templates/{projectTemplateId}": { - "get": { + "post": { "tags": [ - "Project Template" + "Project Group" ], - "summary": "Get Project Template", - "description": "Retrieves a project template by identifier.", + "summary": "Create Project Group", + "description": "Creates a new project group.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -8902,14 +9257,25 @@ "$ref": "#/components/parameters/fields" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project-group-create-request" + } + } + }, + "required": true + }, "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/project-template-response" - } + "$ref": "#/components/schemas/project-group-create-response" + }, + "examples": {} } }, "headers": { @@ -8919,7 +9285,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", "content": { "application/json": { "schema": { @@ -8949,7 +9315,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the project template.", + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to create the project group in the specified location.\n* \"benefitNotAvailable\": Your subscription does not include access to the requested type of benefit.", "content": { "application/json": { "schema": { @@ -8963,8 +9329,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": the project template could not be found by identifier.", + "409": { + "description": "Error codes:\n* \"duplicate\": Project group with the same name already exists.", "content": { "application/json": { "schema": { @@ -8979,29 +9345,38 @@ } } }, - "operationId": "GetProjectTemplate" + "operationId": "CreateProjectGroup" }, - "parameters": [ - { - "$ref": "#/components/parameters/projectTemplateId" - } - ], - "put": { - "summary": "Update Project Template", - "operationId": "UpdateProjectTemplate", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/project-template-update-request" - } - } + "parameters": [] + }, + "/project-groups/{projectGroupId}": { + "get": { + "tags": [ + "Project Group" + ], + "summary": "Get Project Group", + "description": "Retrieves a project group by identifier.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" }, - "required": true - }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], "responses": { - "204": { - "description": "No Content", + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project-group" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -9009,7 +9384,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input mentioned in the “name” field on the error response. \n* \"deleted\": Some of the selected values were deleted and cannot be selected for some values of the \"customFields\" field.\n", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -9039,37 +9414,44 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the project template.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the project group.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the project template could not be found by identifier.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": The project group could not be found by identifier.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } } } }, - "description": "Updates a project template by id.", + "operationId": "GetProjectGroup" + }, + "put": { + "tags": [ + "Project Group" + ], + "summary": "Update Project Group", + "description": "Updates the project group.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -9078,13 +9460,17 @@ "$ref": "#/components/parameters/X-LC-Tenant" } ], - "tags": [ - "Project Template" - ] - }, - "delete": { - "summary": "Delete Project Template", - "operationId": "DeleteProjectTemplate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project-group-update-request" + } + } + }, + "required": true, + "description": "" + }, "responses": { "204": { "description": "No Content", @@ -9094,6 +9480,21 @@ } } }, + "400": { + "description": "Error responses:\n\n* “invalid”: Invalid input on update project group model.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, "401": { "description": "The user could not be identified.", "content": { @@ -9110,7 +9511,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the project template.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the project group.", "content": { "application/json": { "schema": { @@ -9125,7 +9526,22 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the project template could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the project group could not be found by identifier.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "409": { + "description": "Error codes:\n* \"duplicate\": Project group with the same name already exists.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -9140,63 +9556,37 @@ } } }, - "description": "Deletes a project template by id.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ], - "tags": [ - "Project Template" - ] - } - }, - "/project-templates": { - "get": { + "operationId": "UpdateProjectGroup" + }, + "delete": { "tags": [ - "Project Template" + "Project Group" ], - "summary": "List Project Templates", - "description": "Retrieves a list of all the project templates in an account.", + "summary": "Delete Project Group", + "description": "Deletes a project group.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/name" - }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - }, - { - "$ref": "#/components/parameters/location" - }, - { - "$ref": "#/components/parameters/location-strategy" - }, - { - "$ref": "#/components/parameters/sort" - }, - { - "$ref": "#/components/parameters/fields" } ], "responses": { - "200": { - "description": "", + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-project-templates-response" + "$ref": "#/components/schemas/error-response" } } }, @@ -9206,8 +9596,8 @@ } } }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to delete the project group.", "content": { "application/json": { "schema": { @@ -9221,8 +9611,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "404": { + "description": "Error codes:\n* \"notFound\": the project group could not be found by identifier.", "content": { "application/json": { "schema": { @@ -9236,8 +9626,8 @@ } } }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "409": { + "description": "Error codes:\n* \"conflict\": there might be projects that are still `attaching`.", "content": { "application/json": { "schema": { @@ -9252,14 +9642,27 @@ } } }, - "operationId": "ListProjectTemplates" + "operationId": "DeleteProjectGroup" }, + "parameters": [ + { + "schema": { + "type": "string" + }, + "name": "projectGroupId", + "in": "path", + "required": true, + "description": "The project group identifier." + } + ] + }, + "/project-groups/{projectGroupId}/projects": { "post": { "tags": [ - "Project Template" + "Project Group" ], - "summary": "Create Project Template", - "description": "Creates a new project template.", + "summary": "Add Projects To Group", + "description": "Adds projects to the project group.\n\nThe projects are not added instantly. To check the status use the [Get Project Group](../reference/Public-API.v1.json/paths/~1project-groups~1{projectGroupId}/get) endpoint.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -9275,30 +9678,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/project-template-create-request" + "$ref": "#/components/schemas/add-projects-to-group-request" } } }, "required": true }, "responses": { - "201": { - "description": "", + "202": { + "description": "Accepted", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/project-template-response" + "$ref": "#/components/schemas/add-projects-to-group-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input mentioned in the “name” field on the error response. \n* \"deleted\": Some of the selected values were deleted and cannot be selected for some values of the \"customFields\" field.\n", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -9328,67 +9731,26 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to create a project template.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to add the projects to group.\n* \"forbidden\": The projects are not found or the authenticated user does not have acces to them.\n* \"benefitNotAvailable\": Your subscription does not include access to the requested type of benefit.\n* \"quotaReached\": The maximum number of projects allowed for your project group has already been reached.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "409": { - "description": "Error codes:\n* \"duplicate\": A project template with the same name already exists in the same location.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } } - } - }, - "operationId": "CreateProjectTemplate" - } - }, - "/rate-limits": { - "get": { - "tags": [ - "Rate Limits" - ], - "summary": "List Rate Limits", - "description": "Retrieves a list of all rate limits applicable for an account.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/top" }, - { - "$ref": "#/components/parameters/skip" - } - ], - "responses": { - "200": { - "description": "", + "404": { + "description": "Error codes:\n* \"notFound\": The project group could not be found by identifier.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-rate-limits-response" + "$ref": "#/components/schemas/error-response" } } }, @@ -9398,23 +9760,8 @@ } } }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - } - }, - "401": { - "description": "The user could not be identified.", + "409": { + "description": "Error codes:\n* “conflict”: A project with status \"detaching\" cannot be added.", "content": { "application/json": { "schema": { @@ -9429,49 +9776,25 @@ } } }, - "operationId": "ListRateLimits" - } - }, - "/schedule-templates": { - "get": { - "summary": "List Schedule Templates", - "description": "Retrieves a list of all the schedule templates in an account.", + "operationId": "AddProjectsToGroup" + }, + "delete": { + "tags": [ + "Project Group" + ], + "summary": "Remove Projects From Group", + "description": "Removes projects from the project group.\n\nThe projects are not removed instantly. To check the status use the [Get Project Group](../reference/Public-API.v1.json/paths/~1project-groups~1{projectGroupId}/get) endpoint.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - }, - { - "$ref": "#/components/parameters/fields" - }, - { - "$ref": "#/components/parameters/name" - }, - { - "$ref": "#/components/parameters/location" - }, - { - "$ref": "#/components/parameters/location-strategy" } ], "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/list-schedule-templates-response" - } - } - }, + "202": { + "description": "Accepted", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -9479,7 +9802,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\n\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -9508,8 +9831,8 @@ } } }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "403": { + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to remove the projects from the project group.", "content": { "application/json": { "schema": { @@ -9522,90 +9845,29 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - } - }, - "operationId": "ListScheduleTemplates", - "tags": [ - "Schedule Template" - ] - }, - "parameters": [], - "post": { - "summary": "Create Schedule Template", - "operationId": "CreateScheduleTemplate", - "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/schedule-template" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } }, - "400": { - "description": "Error responses:\n\n* “invalid”: invalid input on update schedule template model.\n* \"invalidLanguage\": The language used in configurations is invalid. Check the error message for more details.\n* \"maxSize\": The maximum size was exceeded for the value mentioned in the \"name\" or in the \"description\" fields.\n* \"invalidType\": The value provided for the \"taskTypeId\" field is invalid.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, + "404": { + "description": "Error codes:\n* \"notFound\": The project group could not be found by identifier.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "401": { - "description": "The user could not be identified.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to create a schedule template.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } } }, "409": { - "description": "Error codes:\n* \"duplicate\": A schedule template with the same name already exists in the same location.", + "description": "Error codes:\n* “conflict”: A project with status \"attaching\" cannot be removed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } - }, - "application/xml": { - "schema": { - "$ref": "#/components/schemas/error-response" - } } }, "headers": { @@ -9615,36 +9877,36 @@ } } }, - "description": "Creates a new schedule template.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" - } - ], + "operationId": "RemoveProjectsFromGroup", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/schedule-template-create-request" + "$ref": "#/components/schemas/remove-projects-from-group-request" } } } - }, - "tags": [ - "Schedule Template" - ] - } + } + }, + "parameters": [ + { + "schema": { + "type": "string" + }, + "name": "projectGroupId", + "in": "path", + "required": true, + "description": "The Project Group identifier." + } + ] }, - "/schedule-templates/{scheduleTemplateId}": { + "/project-templates/{projectTemplateId}": { "get": { - "summary": "Get Schedule Template", - "description": "Retrieves a schedule template by identifier.", + "tags": [ + "Project Template" + ], + "summary": "Get Project Template", + "description": "Retrieves a project template by identifier.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -9662,7 +9924,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/schedule-template" + "$ref": "#/components/schemas/project-template-response" } } }, @@ -9673,7 +9935,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* “empty”: Empty input for the “scheduleTemplateId” path parameter variable.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -9703,7 +9965,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the schedule template.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the project template.", "content": { "application/json": { "schema": { @@ -9718,7 +9980,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the schedule template could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the project template could not be found by identifier.", "content": { "application/json": { "schema": { @@ -9733,51 +9995,67 @@ } } }, - "operationId": "GetScheduleTemplate", - "tags": [ - "Schedule Template" - ] + "operationId": "GetProjectTemplate" }, "parameters": [ { - "schema": { - "type": "string" - }, - "name": "scheduleTemplateId", - "in": "path", - "required": true, - "description": "The id of the schedule template." + "$ref": "#/components/parameters/projectTemplateId" } ], - "delete": { - "summary": "Delete Schedule Template", - "operationId": "DeleteScheduleTemplate", - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "401": { - "description": "The user could not be identified.", + "put": { + "summary": "Update Project Template", + "operationId": "UpdateProjectTemplate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project-template-update-request" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input mentioned in the “name” field on the error response. \n* \"deleted\": Some of the selected values were deleted and cannot be selected for some values of the \"customFields\" field.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to delete the schedule template.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the project template.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -9792,7 +10070,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the schedule template could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the project template could not be found by identifier.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -9807,7 +10085,7 @@ } } }, - "description": "Deletes a schedule template.", + "description": "Updates a project template by id.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -9817,85 +10095,53 @@ } ], "tags": [ - "Schedule Template" + "Project Template" ] }, - "put": { - "summary": "Update Schedule Template", - "operationId": "UpdateScheduleTemplate", + "delete": { + "summary": "Delete Project Template", + "operationId": "DeleteProjectTemplate", "responses": { "204": { - "description": "No content", + "description": "No Content", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } } }, - "400": { - "description": "Error responses:\n\n* “invalid”: invalid input on update schedule template model.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response or in “scheduleTemplateId” path variable.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" or in the \"description\" fields. \n* \"invalidType\": The value provided for the \"taskTypeId\" field is invalid.", - "headers": { - "X-LC-TraceId": { - "schema": { - "type": "string" - } - } - }, + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "401": { - "description": "The user could not be identified.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the schedule template.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the project template.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the schedule template could not be found by identifier.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } } }, - "409": { - "description": "Error codes:\n* \"duplicate\": A schedule template with the same name already exists in the same location.", + "404": { + "description": "Error codes:\n* \"notFound\": the project template could not be found by identifier.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -9910,7 +10156,7 @@ } } }, - "description": "Updates the schedule template identified by `scheduleTemplateId`.", + "description": "Deletes a project template by id.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -9919,27 +10165,18 @@ "$ref": "#/components/parameters/X-LC-Tenant" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/schedule-template-update-request" - } - } - } - }, "tags": [ - "Schedule Template" + "Project Template" ] } }, - "/tasks/{taskId}": { + "/project-templates": { "get": { "tags": [ - "Task" + "Project Template" ], - "summary": "Get Task", - "description": "Retrieves a task.", + "summary": "List Project Templates", + "description": "Retrieves a list of all the project templates in an account.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -9947,6 +10184,24 @@ { "$ref": "#/components/parameters/X-LC-Tenant" }, + { + "$ref": "#/components/parameters/name" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/location" + }, + { + "$ref": "#/components/parameters/location-strategy" + }, + { + "$ref": "#/components/parameters/sort" + }, { "$ref": "#/components/parameters/fields" } @@ -9957,21 +10212,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/task" - }, - "examples": { - "simple": { - "value": { - "id": "df680285-adcd-4bda-8f79-0bba4a857287", - "status": "created" - } - }, - "unexpected-enum": { - "value": { - "id": "df680285-adcd-4bda-8f79-0bba4a857287", - "status": "unexpectedEnumValue" - } - } + "$ref": "#/components/schemas/list-project-templates-response" } } }, @@ -10011,23 +10252,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the task.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the task could not be found by identifier.", + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", "content": { "application/json": { "schema": { @@ -10042,21 +10268,14 @@ } } }, - "operationId": "GetTask" + "operationId": "ListProjectTemplates" }, - "parameters": [ - { - "$ref": "#/components/parameters/taskId" - } - ] - }, - "/tasks/assigned": { - "get": { + "post": { "tags": [ - "Task" + "Project Template" ], - "summary": "List Tasks assigned to me", - "description": "Retrieves the tasks assigned to the authenticated user.", + "summary": "Create Project Template", + "description": "Creates a new project template.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -10064,40 +10283,27 @@ { "$ref": "#/components/parameters/X-LC-Tenant" }, - { - "name": "status", - "in": "query", - "description": "If specified, this filters tasks by status.", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - }, - { - "$ref": "#/components/parameters/location" - }, - { - "$ref": "#/components/parameters/location-strategy" - }, - { - "$ref": "#/components/parameters/sort" - }, { "$ref": "#/components/parameters/fields" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project-template-create-request" + } + } + }, + "required": true + }, "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-tasks-response" + "$ref": "#/components/schemas/project-template-response" } } }, @@ -10108,7 +10314,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input mentioned in the “name” field on the error response. \n* \"deleted\": Some of the selected values were deleted and cannot be selected for some values of the \"customFields\" field.\n", "content": { "application/json": { "schema": { @@ -10137,43 +10343,71 @@ } } }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to create a project template.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "409": { + "description": "Error codes:\n* \"duplicate\": A project template with the same name already exists in the same location.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } } } }, - "operationId": "ListTasksAssignedToMe" + "operationId": "CreateProjectTemplate" } }, - "/tasks/{taskId}/accept": { - "put": { + "/rate-limits": { + "get": { "tags": [ - "Task" + "Rate Limits" ], - "summary": "Accept Task", - "description": "Accepts a task. The authenticated user becomes the owner of the accepted task and can start work on it.", + "summary": "List Rate Limits", + "description": "Retrieves a list of all rate limits applicable for an account.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" } ], "responses": { - "204": { - "description": "No Content", + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/list-rate-limits-response" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -10181,7 +10415,7 @@ } }, "400": { - "description": "Error codes: \n\n * \"empty\": Empty value for variable mentioned in the \"name\" field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -10209,9 +10443,59 @@ "$ref": "#/components/headers/X-LC-TraceId" } } + } + }, + "operationId": "ListRateLimits" + } + }, + "/schedule-templates": { + "get": { + "summary": "List Schedule Templates", + "description": "Retrieves a list of all the schedule templates in an account.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/fields" + }, + { + "$ref": "#/components/parameters/name" + }, + { + "$ref": "#/components/parameters/location" + }, + { + "$ref": "#/components/parameters/location-strategy" + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/list-schedule-templates-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -10225,8 +10509,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -10240,8 +10524,8 @@ } } }, - "409": { - "description": "Error codes:\n* \"alreadyOwned\": the task is already owned\n* \"invalidStatus\": the task status doesn't permit the accept operation", + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", "content": { "application/json": { "schema": { @@ -10256,32 +10540,25 @@ } } }, - "operationId": "AcceptTask" - }, - "parameters": [ - { - "$ref": "#/components/parameters/taskId" - } - ] - }, - "/tasks/{taskId}/reject": { - "put": { + "operationId": "ListScheduleTemplates", "tags": [ - "Task" - ], - "summary": "Reject Task", - "description": "Rejects a task. The authenticated user will be removed from the task's list of available assignee users.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ], + "Schedule Template" + ] + }, + "parameters": [], + "post": { + "summary": "Create Schedule Template", + "operationId": "CreateScheduleTemplate", "responses": { - "204": { - "description": "No Content", + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/schedule-template" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -10289,7 +10566,7 @@ } }, "400": { - "description": "Error codes: \n\n * \"empty\": Empty value for variable mentioned in the \"name\" field on the error response.", + "description": "Error responses:\n\n* “invalid”: invalid input on update schedule template model.\n* \"invalidLanguage\": The language used in configurations is invalid. Check the error message for more details.\n* \"maxSize\": The maximum size was exceeded for the value mentioned in the \"name\" or in the \"description\" fields.\n* \"invalidType\": The value provided for the \"taskTypeId\" field is invalid.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -10305,56 +10582,46 @@ }, "401": { "description": "The user could not be identified.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to create a schedule template.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the task could not be found by identifier.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } }, "409": { - "description": "Error codes:\n* \"alreadyOwned\": The task is already owned. It can't be rejected.\n* \"invalidStatus\": The task status doesn't permit the reject operation.\n* \"singleAssignee\": The authenticated user is the single assignee of the task, therefore the task can't be rejected.", + "description": "Error codes:\n* \"duplicate\": A schedule template with the same name already exists in the same location.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/error-response" + } } }, "headers": { @@ -10364,54 +10631,54 @@ } } }, - "operationId": "RejectTask" - }, - "parameters": [ - { - "$ref": "#/components/parameters/taskId" - } - ] - }, - "/tasks/{taskId}/complete": { - "put": { - "tags": [ - "Task" - ], - "summary": "Complete Task", - "description": "Completes a task. The task is required to be in \"inProgress\" state and will be marked as \"completed\".", + "description": "Creates a new schedule template.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/task-complete-request" + "$ref": "#/components/schemas/schedule-template-create-request" } } - }, - "required": true + } }, - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "tags": [ + "Schedule Template" + ] + } + }, + "/schedule-templates/{scheduleTemplateId}": { + "get": { + "summary": "Get Schedule Template", + "description": "Retrieves a schedule template by identifier.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" }, - "400": { - "description": "Error codes:\n* “maxSize“: Maximum size exceeded for the value mentioned in the “name“ field on the error response.", + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "responses": { + "200": { + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/error-response" + "$ref": "#/components/schemas/schedule-template" } } }, @@ -10421,8 +10688,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* “empty”: Empty input for the “scheduleTemplateId” path parameter variable.", "content": { "application/json": { "schema": { @@ -10436,8 +10703,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to complete the task.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -10451,8 +10718,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": the task could not be found by identifier.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the schedule template.", "content": { "application/json": { "schema": { @@ -10466,8 +10733,8 @@ } } }, - "409": { - "description": "Error codes:\n* \"invalidStatus\": The current task status doesn't permit this operation.\n* \"noOwner\": The current task was not accepted in advance.\n* \"differentOwner\": The current task is accepted by another user.", + "404": { + "description": "Error codes:\n* \"notFound\": the schedule template could not be found by identifier.", "content": { "application/json": { "schema": { @@ -10482,29 +10749,25 @@ } } }, - "operationId": "CompleteTask" + "operationId": "GetScheduleTemplate", + "tags": [ + "Schedule Template" + ] }, "parameters": [ { - "$ref": "#/components/parameters/taskId" + "schema": { + "type": "string" + }, + "name": "scheduleTemplateId", + "in": "path", + "required": true, + "description": "The id of the schedule template." } - ] - }, - "/tasks/{taskId}/release": { - "put": { - "tags": [ - "Task" - ], - "summary": "Release Task", - "description": "Releases the task from its owner so that other task assignees will be able to accept it.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ], + ], + "delete": { + "summary": "Delete Schedule Template", + "operationId": "DeleteScheduleTemplate", "responses": { "204": { "description": "No Content", @@ -10514,8 +10777,8 @@ } } }, - "400": { - "description": "Error codes: \n\n * \"empty\": Empty value for variable mentioned in the \"name\" field on the error response.", + "401": { + "description": "The user could not be identified.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -10529,82 +10792,38 @@ } } }, - "401": { - "description": "The user could not be identified.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to delete the schedule template.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to release the resource.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } }, "404": { - "description": "Error codes:\n* \"notFound\": the task could not be found by identifier.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, + "description": "Error codes:\n* \"notFound\": the schedule template could not be found by identifier.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "409": { - "description": "Error codes:\n* \"noOwner\": the task currently has no owner.\n* \"differentOwner\": the authenticated user is not the owner of the task.\n* \"invalidStatus\": the task's status does not permit this operation.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } } }, - "operationId": "ReleaseTask" - }, - "parameters": [ - { - "$ref": "#/components/parameters/taskId" - } - ] - }, - "/tasks/{taskId}/reclaim": { - "put": { - "tags": [ - "Task" - ], - "summary": "Reclaim Task", - "description": "The current owner of task is removed so that other assignees can accept it. \nThe task is not reassigned automatically.", + "description": "Deletes a schedule template.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -10613,9 +10832,16 @@ "$ref": "#/components/parameters/X-LC-Tenant" } ], + "tags": [ + "Schedule Template" + ] + }, + "put": { + "summary": "Update Schedule Template", + "operationId": "UpdateScheduleTemplate", "responses": { "204": { - "description": "No Content", + "description": "No content", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -10623,96 +10849,84 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty value for variable mentioned in the \"name\" field on the error response.", + "description": "Error responses:\n\n* “invalid”: invalid input on update schedule template model.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response or in “scheduleTemplateId” path variable.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" or in the \"description\" fields. \n* \"invalidType\": The value provided for the \"taskTypeId\" field is invalid.", + "headers": { + "X-LC-TraceId": { + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } }, "401": { "description": "The user could not be identified.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the schedule template.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to reclaim the task.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the schedule template could not be found by identifier.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the task could not be found by identifier.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "409": { + "description": "Error codes:\n* \"duplicate\": A schedule template with the same name already exists in the same location.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "409": { - "description": "Error codes:\n* \"invalidStatus\": the current task's status doesn't permit this operation.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } } }, - "operationId": "ReclaimTask" - }, - "parameters": [ - { - "$ref": "#/components/parameters/taskId" - } - ] - }, - "/tasks/{taskId}/assign": { - "put": { - "tags": [ - "Task" - ], - "summary": "Assign Task", - "description": "Assigns a task. The task assignees will be updated.", + "description": "Updates the schedule template identified by `scheduleTemplateId`.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -10725,27 +10939,55 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/task-assign-request" + "$ref": "#/components/schemas/schedule-template-update-request" } } - }, - "required": true + } }, - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "tags": [ + "Schedule Template" + ] + } + }, + "/tasks/{taskId}": { + "get": { + "tags": [ + "Task" + ], + "summary": "Get Task", + "description": "Retrieves a task.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input mentioned in the “name” field on the error response.\n* \"limit.exceeded\": a maximum number of users per task was assigned\n", + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "responses": { + "200": { + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/error-response" + "$ref": "#/components/schemas/task" + }, + "examples": { + "simple": { + "value": { + "id": "df680285-adcd-4bda-8f79-0bba4a857287", + "status": "created" + } + }, + "unexpected-enum": { + "value": { + "id": "df680285-adcd-4bda-8f79-0bba4a857287", + "status": "unexpectedEnumValue" + } + } } } }, @@ -10755,8 +10997,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -10770,8 +11012,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to assign the task.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -10785,8 +11027,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": the task could not be found by identifier.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the task.", "content": { "application/json": { "schema": { @@ -10800,8 +11042,8 @@ } } }, - "409": { - "description": "Error codes:\n* \"invalidStatus\": the current task's status doesn't permit the operation.", + "404": { + "description": "Error codes:\n* \"notFound\": the task could not be found by identifier.", "content": { "application/json": { "schema": { @@ -10816,7 +11058,7 @@ } } }, - "operationId": "AssignTask" + "operationId": "GetTask" }, "parameters": [ { @@ -10824,13 +11066,13 @@ } ] }, - "/task-types/{taskTypeId}": { + "/tasks/assigned": { "get": { "tags": [ - "Task Type" + "Task" ], - "summary": "Get Task Type", - "description": "Retrieves a task type by identifier.", + "summary": "List Tasks assigned to me", + "description": "Retrieves the tasks assigned to the authenticated user.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -10839,127 +11081,11 @@ "$ref": "#/components/parameters/X-LC-Tenant" }, { - "$ref": "#/components/parameters/fields" - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/task-type" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "401": { - "description": "The user could not be identified.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the task type.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - } - }, - "operationId": "GetTaskType" - }, - "parameters": [ - { - "$ref": "#/components/parameters/taskTypeId" - } - ] - }, - "/task-types": { - "get": { - "tags": [ - "Task Type" - ], - "summary": "List Task Types", - "description": "Retrieves all the task types in an account.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "name": "key", - "in": "query", - "description": "Filter by keys.", - "style": "form", - "explode": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "automatic", + "name": "status", "in": "query", - "description": "Filter by automatic or human tasks.", + "description": "If specified, this filters tasks by status.", "schema": { - "type": "boolean" + "type": "string" } }, { @@ -10987,7 +11113,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-task-types-response" + "$ref": "#/components/schemas/list-tasks-response" } } }, @@ -11043,37 +11169,27 @@ } } }, - "operationId": "ListTaskTypes" + "operationId": "ListTasksAssignedToMe" } }, - "/translation-engines/{translationEngineId}": { - "get": { + "/tasks/{taskId}/accept": { + "put": { "tags": [ - "Translation Engine" + "Task" ], - "summary": "Get Translation Engine", - "description": "Retrieves a translation engine.", + "summary": "Accept Task", + "description": "Accepts a task. The authenticated user becomes the owner of the accepted task and can start work on it.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" } ], "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/translation-engine" - } - } - }, + "204": { + "description": "No Content", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -11081,18 +11197,18 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes: \n\n * \"empty\": Empty value for variable mentioned in the \"name\" field on the error response.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } }, "401": { @@ -11111,49 +11227,77 @@ } }, "403": { - "description": "Error codes:\n\n* \"forbidden\": - The authenticated user is not allowed to read resource.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": The translation engine could not be found by identifier.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, + } + }, + "409": { + "description": "Error codes:\n* \"alreadyOwned\": the task is already owned\n* \"invalidStatus\": the task status doesn't permit the accept operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } } } }, - "operationId": "GetTranslationEngine" + "operationId": "AcceptTask" }, "parameters": [ { - "$ref": "#/components/parameters/translationEngineId" + "$ref": "#/components/parameters/taskId" } - ], + ] + }, + "/tasks/{taskId}/reject": { "put": { - "summary": "Update Translation Engine", - "operationId": "UpdateTranslationEngine", + "tags": [ + "Task" + ], + "summary": "Reject Task", + "description": "Rejects a task. The authenticated user will be removed from the task's list of available assignee users.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], "responses": { "204": { - "description": "", + "description": "No Content", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -11161,7 +11305,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty input in the update translation engine model. Check error details.\n* \"invalidLanguage\": Invalid language code used in language-pair\n* \"duplicate\": Duplicate resources found for the language pair specified in the error details.", + "description": "Error codes: \n\n * \"empty\": Empty value for variable mentioned in the \"name\" field on the error response.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -11177,23 +11321,21 @@ }, "401": { "description": "The user could not be identified.", - "headers": { - "X-LC-TraceId": { - "schema": { - "type": "string" - } - } - }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } } }, "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to update the resource.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { @@ -11208,7 +11350,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": The translation memory could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the task could not be found by identifier.", "content": { "application/json": { "schema": { @@ -11223,7 +11365,7 @@ } }, "409": { - "description": "Error codes:\n\n * \"updateNotAllowed\": Property specified in error response can not be updated because the translation engine provided is a copy assigned to a project.", + "description": "Error codes:\n* \"alreadyOwned\": The task is already owned. It can't be rejected.\n* \"invalidStatus\": The task status doesn't permit the reject operation.\n* \"singleAssignee\": The authenticated user is the single assignee of the task, therefore the task can't be rejected.", "content": { "application/json": { "schema": { @@ -11238,7 +11380,21 @@ } } }, - "description": "Updates a translation engine. \n\nIt can be used to update a stand-alone translation engine or a project's translation engine. \nThe identifier of a project's translation engine can be retrieved only by calling [Get Project endpoint](https://sdl-language-tech.stoplight.io/docs/lcpublicapi/fd9ee0beb37ca-get-project).\n\nPay special attention that some properties can not be changed for a project's translation engine. These include: name, description, definition.languageProcessingId, and language pairs can not be added/removed from definition.languagePairDefinitions. \n\nPay special attention to how [updating works](https://languagecloud.sdl.com/lc/api-docs/updating-data-with-put).", + "operationId": "RejectTask" + }, + "parameters": [ + { + "$ref": "#/components/parameters/taskId" + } + ] + }, + "/tasks/{taskId}/complete": { + "put": { + "tags": [ + "Task" + ], + "summary": "Complete Task", + "description": "Completes a task. The task is required to be in \"inProgress\" state and will be marked as \"completed\".", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -11251,57 +11407,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/translation-engine-update-request" + "$ref": "#/components/schemas/task-complete-request" } } }, - "description": "" + "required": true }, - "tags": [ - "Translation Engine" - ] - } - }, - "/translation-engines": { - "get": { - "tags": [ - "Translation Engine" - ], - "summary": "List Translation Engines", - "description": "Retrieves all the translation engines in an account.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - }, - { - "$ref": "#/components/parameters/location" - }, - { - "$ref": "#/components/parameters/location-strategy" - }, - { - "$ref": "#/components/parameters/sort" - }, - { - "$ref": "#/components/parameters/fields" - } - ], "responses": { - "200": { - "description": "", + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “maxSize“: Maximum size exceeded for the value mentioned in the “name“ field on the error response.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-translation-engines-response" + "$ref": "#/components/schemas/error-response" } } }, @@ -11311,8 +11437,8 @@ } } }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -11326,8 +11452,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to complete the task.", "content": { "application/json": { "schema": { @@ -11341,8 +11467,8 @@ } } }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "404": { + "description": "Error codes:\n* \"notFound\": the task could not be found by identifier.", "content": { "application/json": { "schema": { @@ -11355,76 +11481,13 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - } - }, - "operationId": "ListTranslationEngines" - } - }, - "/termbase-templates": { - "get": { - "summary": "List Termbase Templates", - "responses": { - "200": { - "description": "OK", + }, + "409": { + "description": "Error codes:\n* \"invalidStatus\": The current task status doesn't permit this operation.\n* \"noOwner\": The current task was not accepted in advance.\n* \"differentOwner\": The current task is accepted by another user.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-termbase-templates-response" - }, - "examples": { - "termbase-templates-list": { - "value": { - "items": [ - { - "id": "test-id-1", - "name": "test-name-1", - "location": { - "id": "test-location-id-1", - "name": "test-location-name-1" - }, - "type": "system", - "languages": [ - { - "languageCode": "test-language-code-1" - } - ], - "fields": [ - { - "id": "test-field-id-1", - "name": "test-field-name-1", - "type": "system", - "level": "entry", - "dataType": "text" - } - ] - }, - { - "id": "test-id-2", - "name": "test-name-2", - "location": { - "id": "test-location-id-2", - "name": "test-location-name-2" - }, - "type": "userDefined", - "languages": [ - { - "languageCode": "test-language-code-2" - } - ], - "fields": [ - { - "id": "test-field-id-2", - "name": "test-field-name-2", - "type": "userDefined", - "level": "language", - "dataType": "boolean" - } - ] - } - ], - "itemCount": 2 - } - } + "$ref": "#/components/schemas/error-response" } } }, @@ -11433,9 +11496,57 @@ "$ref": "#/components/headers/X-LC-TraceId" } } + } + }, + "operationId": "CompleteTask" + }, + "parameters": [ + { + "$ref": "#/components/parameters/taskId" + } + ] + }, + "/tasks/{taskId}/release": { + "put": { + "tags": [ + "Task" + ], + "summary": "Release Task", + "description": "Releases the task from its owner so that other task assignees will be able to accept it.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "responses": { + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes: \n\n * \"empty\": Empty value for variable mentioned in the \"name\" field on the error response.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + }, + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -11449,8 +11560,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to release the resource.", "content": { "application/json": { "schema": { @@ -11464,8 +11575,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read the resources.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "404": { + "description": "Error codes:\n* \"notFound\": the task could not be found by identifier.", "content": { "application/json": { "schema": { @@ -11479,8 +11590,8 @@ } } }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "409": { + "description": "Error codes:\n* \"noOwner\": the task currently has no owner.\n* \"differentOwner\": the authenticated user is not the owner of the task.\n* \"invalidStatus\": the task's status does not permit this operation.", "content": { "application/json": { "schema": { @@ -11495,126 +11606,40 @@ } } }, - "operationId": "ListTermbaseTemplates", - "description": "List termbase templates.", + "operationId": "ReleaseTask" + }, + "parameters": [ + { + "$ref": "#/components/parameters/taskId" + } + ] + }, + "/tasks/{taskId}/reclaim": { + "put": { + "tags": [ + "Task" + ], + "summary": "Reclaim Task", + "description": "The current owner of task is removed so that other assignees can accept it. \nThe task is not reassigned automatically.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "in": "query", - "name": "location", - "description": "The identifiers of the resource folders. ", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "$ref": "#/components/parameters/fields" - }, - { - "schema": { - "type": "string", - "enum": [ - "system", - "userDefined" - ] - }, - "in": "query", - "name": "type", - "description": "The type of the termbase template to retrieve. If not specified, both types will be returned" - }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" } ], - "tags": [ - "Termbase Template" - ] - }, - "parameters": [], - "post": { - "summary": "Create Termbase Template", - "operationId": "CreateTermbaseTemplate", "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/termbase-template" - }, - "examples": { - "Example 1": { - "value": { - "id": "string", - "name": "string", - "description": "string", - "copyright": "string", - "location": { - "id": "string", - "name": "string", - "hasParent": true, - "path": [ - { - "id": "string", - "name": "string", - "location": "string", - "hasParent": true - } - ] - }, - "createdAt": "2022-01-12T12:00:00.000Z", - "lastModifiedAt": "2022-01-12T12:00:00.000Z", - "type": "system", - "languages": [ - { - "languageCode": "string", - "englishName": "string", - "direction": "string", - "parentLanguageCode": "string", - "defaultSpecificLanguageCode": "string", - "isNeutral": true - } - ], - "fields": [ - { - "id": "string", - "name": "string", - "description": "string", - "type": "system", - "level": "entry", - "dataType": "text", - "pickListValues": [ - "string" - ], - "allowCustomValues": true, - "allowMultiple": true, - "isMandatory": true - } - ] - } - } - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"duplicate\": The field name must be unique within the list.", + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty value for variable mentioned in the \"name\" field on the error response.", "content": { "application/json": { "schema": { @@ -11644,7 +11669,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to create a termbase template in the specified location.\n* \"benefitNotAvailable\": - Your subscription does not include access to the requested type of benefit.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to reclaim the task.", "content": { "application/json": { "schema": { @@ -11659,7 +11684,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": - The specified location was not found.", + "description": "Error codes:\n* \"notFound\": the task could not be found by identifier.", "content": { "application/json": { "schema": { @@ -11674,7 +11699,7 @@ } }, "409": { - "description": "Error codes:\n* \"duplicate\": There is already a termbase template with the same name.", + "description": "Error codes:\n* \"invalidStatus\": the current task's status doesn't permit this operation.", "content": { "application/json": { "schema": { @@ -11689,86 +11714,50 @@ } } }, + "operationId": "ReclaimTask" + }, + "parameters": [ + { + "$ref": "#/components/parameters/taskId" + } + ] + }, + "/tasks/{taskId}/assign": { + "put": { + "tags": [ + "Task" + ], + "summary": "Assign Task", + "description": "Assigns a task. The task assignees will be updated.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" } ], - "description": "Creates a new termbase template.", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/termbase-template-create-request" + "$ref": "#/components/schemas/task-assign-request" } } - } + }, + "required": true }, - "tags": [ - "Termbase Template" - ] - } - }, - "/termbase-templates/{termbaseTemplateId}": { - "get": { - "summary": "Get Termbase Template", - "tags": [ - "Termbase Template" - ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/termbase-template" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "401": { - "description": "The user could not be identified.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "403": { - "description": "Error codes:\n\n* \"forbidden\": - The authenticated user is not allowed to read resource\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, + "204": { + "description": "No Content", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } } }, - "404": { - "description": "Error codes:\n* \"notFound\": the termbase template could not be found by identifier.", + "400": { + "description": "Error codes:\n* “invalid”: Invalid input mentioned in the “name” field on the error response.\n* \"limit.exceeded\": a maximum number of users per task was assigned\n", "content": { "application/json": { "schema": { @@ -11781,33 +11770,6 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - } - }, - "operationId": "GetTermbaseTemplate", - "description": "Get a termbase template by identifier.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" - } - ] - }, - "delete": { - "summary": "Delete Termbase Template", - "operationId": "DeleteTermbaseTemplate", - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } }, "401": { "description": "The user could not be identified.", @@ -11825,7 +11787,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to delete the termbase template\n* \"benefitNotAvailable\": - Your subscription does not include access to the requested type of benefit.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to assign the task.", "content": { "application/json": { "schema": { @@ -11840,7 +11802,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the termbase template could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the task could not be found by identifier.", "content": { "application/json": { "schema": { @@ -11855,7 +11817,7 @@ } }, "409": { - "description": "Error codes:\n* \"conflict\": cannot delete system termbase templates", + "description": "Error codes:\n* \"invalidStatus\": the current task's status doesn't permit the operation.", "content": { "application/json": { "schema": { @@ -11870,25 +11832,42 @@ } } }, - "description": "Deletes a termbase template by identifier.", + "operationId": "AssignTask" + }, + "parameters": [ + { + "$ref": "#/components/parameters/taskId" + } + ] + }, + "/task-types/{taskTypeId}": { + "get": { + "tags": [ + "Task Type" + ], + "summary": "Get Task Type", + "description": "Retrieves a task type by identifier.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" } ], - "tags": [ - "Termbase Template" - ] - }, - "put": { - "summary": "Update Termbase Template", - "operationId": "UpdateTermbaseTemplate", "responses": { - "204": { - "description": "No Content", + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/task-type" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -11896,7 +11875,7 @@ } }, "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"duplicate\": The field name must be unique within the list.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -11926,7 +11905,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to update the termbase template.\n* \"benefitNotAvailable\": - Your subscription does not include access to the requested type of benefit.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the task type.", "content": { "application/json": { "schema": { @@ -11940,8 +11919,8 @@ } } }, - "409": { - "description": "Error codes:\n* \"duplicate\": There is already a termbase template with the same name.\n* \"conflict\": cannot update system termbase template", + "404": { + "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", "content": { "application/json": { "schema": { @@ -11956,45 +11935,90 @@ } } }, - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/termbase-template-update-request" - } - } - } - }, - "description": "Updates the termbase template.", - "tags": [ - "Termbase Template" - ] + "operationId": "GetTaskType" }, "parameters": [ { - "$ref": "#/components/parameters/termbaseTemplateId" + "$ref": "#/components/parameters/taskTypeId" } ] }, - "/termbase-templates/convert-xdt": { - "post": { - "summary": "Convert XDT to Termbase Structure", - "operationId": "ConvertTermbaseTemplate", - "responses": { - "200": { - "description": "OK", - "content": { + "/task-types": { + "get": { + "tags": [ + "Task Type" + ], + "summary": "List Task Types", + "description": "Retrieves all the task types in an account.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "name": "key", + "in": "query", + "description": "Filter by keys.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "automatic", + "in": "query", + "description": "Filter by automatic or human tasks.", + "schema": { + "type": "boolean" + } + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/location" + }, + { + "$ref": "#/components/parameters/location-strategy" + }, + { + "$ref": "#/components/parameters/sort" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "responses": { + "200": { + "description": "", + "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/termbase-structure" + "$ref": "#/components/schemas/list-task-types-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" } } }, @@ -12005,7 +12029,7 @@ } }, "401": { - "description": "Unauthorized", + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -12019,8 +12043,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", "content": { "application/json": { "schema": { @@ -12035,115 +12059,34 @@ } } }, - "description": "Converts a termbase definition (XDT file) to a termbase structure that will be returned in the response.
\nThe structure will not be stored in the Trados Cloud Platform.", + "operationId": "ListTaskTypes" + } + }, + "/translation-engines/{translationEngineId}": { + "get": { + "tags": [ + "Translation Engine" + ], + "summary": "Get Translation Engine", + "description": "Retrieves a translation engine.", "parameters": [ - { - "$ref": "#/components/parameters/fields" - }, { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "required": [ - "file" - ], - "properties": { - "file": { - "type": "string", - "format": "binary", - "description": "The .xdt file (binary string) used for conversion." - } - } - } - } - }, - "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." - }, - "tags": [ - "Termbase Template" - ] - }, - "parameters": [] - }, - "/termbases": { - "get": { - "summary": "List Termbases", "responses": { "200": { - "description": "OK", + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-termbases-response" - }, - "examples": { - "termbases-list": { - "value": { - "items": [ - { - "id": "test-id-1", - "name": "test-name-1", - "location": { - "id": "test-location-id-1", - "name": "test-location-name-1" - }, - "termbaseStructure": { - "languages": [ - { - "languageCode": "test-language-code-1" - } - ], - "fields": [ - { - "id": "test-field-id-1", - "name": "test-field-name-1", - "type": "system", - "level": "entry", - "dataType": "text" - } - ] - }, - "numberOfEntries": 1, - "status": "ready" - }, - { - "id": "test-id-2", - "name": "test-name-2", - "location": { - "id": "test-location-id-2", - "name": "test-location-name-2" - }, - "termbaseStructure": { - "languages": [ - { - "languageCode": "test-language-code-2" - } - ], - "fields": [ - { - "id": "test-field-id-2", - "name": "test-field-name-2", - "type": "userDefined", - "level": "language", - "dataType": "boolean" - } - ] - }, - "numberOfEntries": 2, - "status": "ready" - } - ], - "itemCount": 2 - } - } + "$ref": "#/components/schemas/translation-engine" } } }, @@ -12184,171 +12127,87 @@ } }, "403": { - "description": "Error codes:\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "description": "Error codes:\n\n* \"forbidden\": - The authenticated user is not allowed to read resource.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": The translation engine could not be found by identifier.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + } + }, + "operationId": "GetTranslationEngine" + }, + "parameters": [ + { + "$ref": "#/components/parameters/translationEngineId" + } + ], + "put": { + "summary": "Update Translation Engine", + "operationId": "UpdateTranslationEngine", + "responses": { + "204": { + "description": "No Content", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } } }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty input in the update translation engine model. Check error details.\n* \"invalidLanguage\": Invalid language code used in language-pair\n* \"duplicate\": Duplicate resources found for the language pair specified in the error details.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - } - }, - "operationId": "ListTermbase", - "description": "List termbases.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/location" - }, - { - "$ref": "#/components/parameters/location-strategy" - }, - { - "$ref": "#/components/parameters/fields" - }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - } - ], - "tags": [ - "Termbase" - ] - }, - "post": { - "summary": "Create Termbase", - "operationId": "CreateTermbase", - "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/termbase" - }, - "examples": { - "Example 1": { - "value": { - "id": "string", - "name": "string", - "description": "string", - "copyright": "string", - "location": { - "id": "string", - "name": "string", - "hasParent": true, - "path": [ - { - "id": "string", - "name": "string", - "location": "string", - "hasParent": true - } - ] - }, - "termbaseStructure": { - "languages": [ - { - "languageCode": "string", - "englishName": "string", - "direction": "string", - "parentLanguageCode": "string", - "defaultSpecificLanguageCode": "string", - "isNeutral": true - } - ], - "fields": [ - { - "id": "string", - "name": "string", - "description": "string", - "type": "system", - "level": "entry", - "dataType": "text", - "pickListValues": [ - "string" - ], - "allowCustomValues": true, - "allowMultiple": true, - "isMandatory": true - } - ] - }, - "numberOfEntries": 0, - "status": "ready", - "createdAt": "2022-01-12T12:00:00.000Z", - "lastModifiedAt": "2022-01-12T12:00:00.000Z" - } - } - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "401": { - "description": "The user could not be identified.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, + } + }, + "401": { + "description": "The user could not be identified.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } } }, "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to create a termbase.\n* \"benefitNotAvailable\": - Your subscription does not include access to the requested type of benefit.\n* \"quotaReached\": - You have reached the maximum allowable number of termbases for your account.", + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to update the resource.", "content": { "application/json": { "schema": { @@ -12363,7 +12222,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": - The specified location was not found.", + "description": "Error codes:\n* \"notFound\": The translation memory could not be found by identifier.", "content": { "application/json": { "schema": { @@ -12378,7 +12237,7 @@ } }, "409": { - "description": "Error codes:\n* \"duplicate\": There is already a termbase with the same name.", + "description": "Error codes:\n\n * \"updateNotAllowed\": Property specified in error response can not be updated because the translation engine provided is a copy assigned to a project.", "content": { "application/json": { "schema": { @@ -12393,88 +12252,37 @@ } } }, + "description": "Updates a translation engine. \n\nIt can be used to update a stand-alone translation engine or a project's translation engine. \nThe identifier of a project's translation engine can be retrieved only by calling [Get Project](https://sdl-language-tech.stoplight.io/docs/lcpublicapi/fd9ee0beb37ca-get-project) endpoint.\n\nPay special attention that some properties can not be changed for a project's translation engine. These include: name, description, definition.languageProcessingId, and language pairs can not be added/removed from definition.languagePairDefinitions. \n\nPay special attention to how [updating](https://languagecloud.sdl.com/lc/api-docs/updating-data-with-put) works.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" } ], - "description": "Creates a new termbase.\nThe termbase can be created with a termbase template by providing the templateId or by providing a custom termbaseStructure. \nIf only a `termbaseTemplateId` was provided, the termbase will be created using data from the template. \nIf only a `termbaseStructure` was provided, the termbase will be created using data from the structure. \nIf both, `termbaseTemplateId` and `termbaseStructure` are added in the request, the `termbaseStructure` takes precedence.", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/termbase-create-request" + "$ref": "#/components/schemas/translation-engine-update-request" } } }, "description": "" }, "tags": [ - "Termbase" + "Translation Engine" ] } }, - "/termbases/{termbaseId}": { + "/translation-engines": { "get": { - "summary": "Get Termbase", "tags": [ - "Termbase" + "Translation Engine" ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/termbase" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "401": { - "description": "The user could not be identified.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read the resource.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - } - }, - "operationId": "GetTermbase", - "description": "Retrieves a termbase by identifier.", + "summary": "List Translation Engines", + "description": "Retrieves all the translation engines in an account.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -12482,29 +12290,32 @@ { "$ref": "#/components/parameters/X-LC-Tenant" }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/location" + }, + { + "$ref": "#/components/parameters/location-strategy" + }, + { + "$ref": "#/components/parameters/sort" + }, { "$ref": "#/components/parameters/fields" } - ] - }, - "delete": { - "summary": "Delete Termbase", - "operationId": "DeleteTermbase", + ], "responses": { - "204": { - "description": "No Content", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "401": { - "description": "The user could not be identified.", + "200": { + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/error-response" + "$ref": "#/components/schemas/list-translation-engines-response" } } }, @@ -12514,8 +12325,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to delete the termbase\n* \"benefitNotAvailable\": - Your subscription does not include access to the requested type of benefit.", + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -12529,8 +12340,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": the termbase could not be found by identifier.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -12544,8 +12355,8 @@ } } }, - "409": { - "description": "Error codes:\n* \"invalidStatus\": The termbase cannot be deleted as is currently being processed.", + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", "content": { "application/json": { "schema": { @@ -12560,37 +12371,74 @@ } } }, - "description": "Deletes a termbase by identifier.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ], - "tags": [ - "Termbase" - ] - }, - "put": { - "summary": "Update Termbase", - "operationId": "UpdateTermbase", + "operationId": "ListTranslationEngines" + } + }, + "/termbase-templates": { + "get": { + "summary": "List Termbase Templates", "responses": { - "204": { - "description": "No Content", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"duplicate\": The field name must be unique within the list.", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/error-response" + "$ref": "#/components/schemas/list-termbase-templates-response" + }, + "examples": { + "termbase-templates-list": { + "value": { + "items": [ + { + "id": "test-id-1", + "name": "test-name-1", + "location": { + "id": "test-location-id-1", + "name": "test-location-name-1" + }, + "type": "system", + "languages": [ + { + "languageCode": "test-language-code-1" + } + ], + "fields": [ + { + "id": "test-field-id-1", + "name": "test-field-name-1", + "type": "system", + "level": "entry", + "dataType": "text" + } + ] + }, + { + "id": "test-id-2", + "name": "test-name-2", + "location": { + "id": "test-location-id-2", + "name": "test-location-name-2" + }, + "type": "userDefined", + "languages": [ + { + "languageCode": "test-language-code-2" + } + ], + "fields": [ + { + "id": "test-field-id-2", + "name": "test-field-name-2", + "type": "userDefined", + "level": "language", + "dataType": "boolean" + } + ] + } + ], + "itemCount": 2 + } + } } } }, @@ -12600,8 +12448,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -12615,8 +12463,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to update the termbase.\n* \"benefitNotAvailable\": - Your subscription does not include access to the requested type of benefit.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -12630,8 +12478,8 @@ } } }, - "404": { - "description": "Error codes:\n* \"notFound\": - The specified termbase identifier was not found.", + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read the resources.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", "content": { "application/json": { "schema": { @@ -12645,8 +12493,8 @@ } } }, - "409": { - "description": "Error codes:\n* \"duplicate\": There is already a termbase with the same name.\n* \"invalidStatus\": The termbase cannot be updated as is currently being processed.", + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", "content": { "application/json": { "schema": { @@ -12661,460 +12509,2837 @@ } } }, + "operationId": "ListTermbaseTemplates", + "description": "List termbase templates.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/termbase-update-request" + }, + { + "in": "query", + "name": "location", + "description": "The identifiers of the resource folders. ", + "schema": { + "type": "array", + "items": { + "type": "string" } } + }, + { + "$ref": "#/components/parameters/fields" + }, + { + "schema": { + "type": "string", + "enum": [ + "system", + "userDefined" + ] + }, + "in": "query", + "name": "type", + "description": "The type of the termbase template to retrieve. If not specified, both types will be returned" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" } - }, - "description": "Updates the termbase.\nThe termbase can be updated with a termbase template by providing the termbaseTemplateId or by providing a custom termbaseStructure. \n\nIf only a `termbaseTemplateId ` was provided, the termbase will be updated using data from the template. \nIf only a `termbaseStructure` was provided, the termbase will be updated using data from the structure. \nIf both, `termbaseTemplateId` and `termbaseStructure` are added in the request, the `termbaseStructure` takes precedence.", + ], "tags": [ - "Termbase" + "Termbase Template" ] }, - "parameters": [ - { - "$ref": "#/components/parameters/termbaseId" - } - ] - }, - "/termbases/{termbaseId}/entries": { + "parameters": [], "post": { - "summary": "Create Termbase Entry", - "operationId": "CreateTermbaseEntry", + "summary": "Create Termbase Template", + "operationId": "CreateTermbaseTemplate", "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/termbase-entry" + "$ref": "#/components/schemas/termbase-template" }, "examples": { - "termbase-entry-create": { + "Example 1": { "value": { "id": "string", - "humanReadableId": "string", + "name": "string", + "description": "string", + "copyright": "string", + "location": { + "id": "string", + "name": "string", + "hasParent": true, + "path": [ + { + "id": "string", + "name": "string", + "location": "string", + "hasParent": true + } + ] + }, + "createdAt": "2022-01-12T12:00:00.000Z", + "lastModifiedAt": "2022-01-12T12:00:00.000Z", + "type": "system", "languages": [ { - "id": "string", - "language": { - "languageCode": "string", - "englishName": "string", - "direction": "string", - "parentLanguageCode": "string", - "defaultSpecificLanguageCode": "string", - "isNeutral": true - }, - "terms": [ - { - "id": "string", - "text": "string", - "termbaseFieldValues": [ - { - "id": "string", - "name": "string", - "termbaseFieldId": "string", - "value": "string", - "fieldValueLinks": [ - { - "type": "term", - "value": "string" - } - ], - "createdAt": "2019-08-24T14:15:22.000Z", - "createdBy": { - "id": "string", - "email": "string", - "firstName": "string", - "lastName": "string", - "anonymized": true, - "anonymizedUserName": "string", - "location": { - "id": "string", - "name": "string" - }, - "groups": [ - { - "id": "string", - "name": "string", - "description": "string", - "location": { - "id": "string", - "name": "string" - }, - "users": [ - { - "id": "string" - } - ] - } - ] - }, - "lastModifiedAt": "2019-08-24T14:15:22.000Z", - "lastModifiedBy": { - "id": "string", - "email": "string", - "firstName": "string", - "lastName": "string", - "anonymized": true, - "anonymizedUserName": "string", - "location": { - "id": "string", - "name": "string" - }, - "groups": [ - { - "id": "string", - "name": "string", - "description": "string", - "location": { - "id": "string", - "name": "string" - }, - "users": [ - { - "id": "string" - } - ] - } - ] - } - } - ], - "createdAt": "2019-08-24T14:15:22.000Z", - "createdBy": { - "id": "string", - "email": "string", - "firstName": "string", - "lastName": "string", - "anonymized": true, - "anonymizedUserName": "string", - "location": { - "id": "string", - "name": "string" - }, - "groups": [ - { - "id": "string", - "name": "string", - "description": "string", - "location": { - "id": "string", - "name": "string" - }, - "users": [ - { - "id": "string" - } - ] - } - ] - }, - "lastModifiedAt": "2019-08-24T14:15:22.000Z", - "lastModifiedBy": { - "id": "string", - "email": "string", - "firstName": "string", - "lastName": "string", - "anonymized": true, - "anonymizedUserName": "string", - "location": { - "id": "string", - "name": "string" - }, - "groups": [ - { - "id": "string", - "name": "string", - "description": "string", - "location": { - "id": "string", - "name": "string" - }, - "users": [ - { - "id": "string" - } - ] - } - ] - } - } - ], - "termbaseFieldValues": [ - { - "id": "string", - "name": "string", - "termbaseFieldId": "string", - "value": "string", - "fieldValueLinks": [ - { - "type": "term", - "value": "string" - } - ], - "createdAt": "2019-08-24T14:15:22.000Z", - "createdBy": { - "id": "string", - "email": "string", - "firstName": "string", - "lastName": "string", - "anonymized": true, - "anonymizedUserName": "string", - "location": { - "id": "string", - "name": "string" - }, - "groups": [ - { - "id": "string", - "name": "string", - "description": "string", - "location": { - "id": "string", - "name": "string" - }, - "users": [ - { - "id": "string" - } - ] - } - ] - }, - "lastModifiedAt": "2019-08-24T14:15:22.000Z", - "lastModifiedBy": { - "id": "string", - "email": "string", - "firstName": "string", - "lastName": "string", - "anonymized": true, - "anonymizedUserName": "string", - "location": { - "id": "string", - "name": "string" - }, - "groups": [ - { - "id": "string", - "name": "string", - "description": "string", - "location": { - "id": "string", - "name": "string" - }, - "users": [ - { - "id": "string" - } - ] - } - ] - } - } - ], - "createdAt": "2019-08-24T14:15:22.000Z", - "createdBy": { - "id": "string", - "email": "string", - "firstName": "string", - "lastName": "string", - "anonymized": true, - "anonymizedUserName": "string", - "location": { - "id": "string", - "name": "string" - }, - "groups": [ - { - "id": "string", - "name": "string", - "description": "string", - "location": { - "id": "string", - "name": "string" - }, - "users": [ - { - "id": "string" - } - ] - } - ] - }, - "lastModifiedAt": "2019-08-24T14:15:22.000Z", - "lastModifedBy": { - "id": "string", - "email": "string", - "firstName": "string", - "lastName": "string", - "anonymized": true, - "anonymizedUserName": "string", - "location": { - "id": "string", - "name": "string" - }, - "groups": [ - { - "id": "string", - "name": "string", - "description": "string", - "location": { - "id": "string", - "name": "string" - }, - "users": [ - { - "id": "string" - } - ] - } - ] - } - } - ], - "termbaseFieldValues": [ - { + "languageCode": "string", + "englishName": "string", + "direction": "string", + "parentLanguageCode": "string", + "defaultSpecificLanguageCode": "string", + "isNeutral": true + } + ], + "fields": [ + { "id": "string", "name": "string", - "termbaseFieldId": "string", - "value": "string", - "fieldValueLinks": [ - { - "type": "term", - "value": "string" - } + "description": "string", + "type": "system", + "level": "entry", + "dataType": "text", + "pickListValues": [ + "string" ], - "createdAt": "2019-08-24T14:15:22.000Z", - "createdBy": { - "id": "string", - "email": "string", - "firstName": "string", - "lastName": "string", - "anonymized": true, - "anonymizedUserName": "string", - "location": { - "id": "string", - "name": "string" - }, - "groups": [ - { - "id": "string", - "name": "string", - "description": "string", - "location": { - "id": "string", - "name": "string" - }, - "users": [ - { - "id": "string" - } - ] - } - ] - }, - "lastModifiedAt": "2019-08-24T14:15:22.000Z", - "lastModifiedBy": { - "id": "string", - "email": "string", - "firstName": "string", - "lastName": "string", - "anonymized": true, - "anonymizedUserName": "string", - "location": { - "id": "string", - "name": "string" - }, - "groups": [ - { - "id": "string", - "name": "string", - "description": "string", - "location": { - "id": "string", - "name": "string" - }, - "users": [ - { - "id": "string" - } - ] - } - ] - } + "allowCustomValues": true, + "allowMultiple": true, + "isMandatory": true } - ], - "createdAt": "2019-08-24T14:15:22.000Z", - "createdBy": { - "id": "string", - "email": "string", - "firstName": "string", - "lastName": "string", - "anonymized": true, - "anonymizedUserName": "string", - "location": { - "id": "string", - "name": "string" - }, - "groups": [ - { - "id": "string", - "name": "string", - "description": "string", - "location": { - "id": "string", - "name": "string" - }, - "users": [ - { - "id": "string" - } - ] - } - ] - }, - "lastModifiedAt": "2019-08-24T14:15:22.000Z", - "lastModifiedBy": { - "id": "string", - "email": "string", - "firstName": "string", - "lastName": "string", - "anonymized": true, - "anonymizedUserName": "string", - "location": { - "id": "string", - "name": "string" - }, - "groups": [ - { - "id": "string", - "name": "string", - "description": "string", - "location": { - "id": "string", - "name": "string" - }, - "users": [ - { - "id": "string" - } - ] - } - ] - } + ] + } + } + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"duplicate\": The field name must be unique within the list.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to create a termbase template in the specified location.\n* \"benefitNotAvailable\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": - The specified location was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "409": { + "description": "Error codes:\n* \"duplicate\": There is already a termbase template with the same name.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "description": "Creates a new termbase template.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase-template-create-request" + } + } + } + }, + "tags": [ + "Termbase Template" + ] + } + }, + "/termbase-templates/{termbaseTemplateId}": { + "get": { + "summary": "Get Termbase Template", + "tags": [ + "Termbase Template" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase-template" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n\n* \"forbidden\": - The authenticated user is not allowed to read resource\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the termbase template could not be found by identifier.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "operationId": "GetTermbaseTemplate", + "description": "Get a termbase template by identifier.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ] + }, + "delete": { + "summary": "Delete Termbase Template", + "operationId": "DeleteTermbaseTemplate", + "responses": { + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to delete the termbase template\n* \"benefitNotAvailable\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the termbase template could not be found by identifier.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "409": { + "description": "Error codes:\n* \"conflict\": cannot delete system termbase templates", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "description": "Deletes a termbase template by identifier.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "tags": [ + "Termbase Template" + ] + }, + "put": { + "summary": "Update Termbase Template", + "operationId": "UpdateTermbaseTemplate", + "responses": { + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"duplicate\": The field name must be unique within the list.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to update the termbase template.\n* \"benefitNotAvailable\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "409": { + "description": "Error codes:\n* \"duplicate\": There is already a termbase template with the same name.\n* \"conflict\": cannot update system termbase template", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase-template-update-request" + } + } + } + }, + "description": "Updates the termbase template.", + "tags": [ + "Termbase Template" + ] + }, + "parameters": [ + { + "$ref": "#/components/parameters/termbaseTemplateId" + } + ] + }, + "/termbase-templates/convert-xdt": { + "post": { + "summary": "Convert XDT to Termbase Structure", + "operationId": "ConvertTermbaseTemplate", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase-structure" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error code “invalid” in case of:\r\n * Empty or missing file in request\r\n * Not valid multipart request\r\n * File parameter contains other extension than the one expected by specification.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "description": "Converts a termbase definition (XDT file) to a termbase structure that will be returned in the response.
\nThe structure will not be stored in the Trados Cloud Platform.", + "parameters": [ + { + "$ref": "#/components/parameters/fields" + }, + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "required": [ + "file" + ], + "properties": { + "file": { + "type": "string", + "format": "binary", + "description": "The .xdt file (binary string) used for conversion." + } + } + } + } + }, + "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." + }, + "tags": [ + "Termbase Template" + ] + }, + "parameters": [] + }, + "/termbases": { + "get": { + "summary": "List Termbases", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/list-termbases-response" + }, + "examples": { + "termbases-list": { + "value": { + "items": [ + { + "id": "test-id-1", + "name": "test-name-1", + "location": { + "id": "test-location-id-1", + "name": "test-location-name-1" + }, + "termbaseStructure": { + "languages": [ + { + "languageCode": "test-language-code-1" + } + ], + "fields": [ + { + "id": "test-field-id-1", + "name": "test-field-name-1", + "type": "system", + "level": "entry", + "dataType": "text" + } + ] + }, + "numberOfEntries": 1, + "status": "ready" + }, + { + "id": "test-id-2", + "name": "test-name-2", + "location": { + "id": "test-location-id-2", + "name": "test-location-name-2" + }, + "termbaseStructure": { + "languages": [ + { + "languageCode": "test-language-code-2" + } + ], + "fields": [ + { + "id": "test-field-id-2", + "name": "test-field-name-2", + "type": "userDefined", + "level": "language", + "dataType": "boolean" + } + ] + }, + "numberOfEntries": 2, + "status": "ready" + } + ], + "itemCount": 2 + } + } + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "operationId": "ListTermbase", + "description": "List termbases.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/location" + }, + { + "$ref": "#/components/parameters/location-strategy" + }, + { + "$ref": "#/components/parameters/fields" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + } + ], + "tags": [ + "Termbase" + ] + }, + "post": { + "summary": "Create Termbase", + "operationId": "CreateTermbase", + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase" + }, + "examples": { + "Example 1": { + "value": { + "id": "string", + "name": "string", + "description": "string", + "copyright": "string", + "location": { + "id": "string", + "name": "string", + "hasParent": true, + "path": [ + { + "id": "string", + "name": "string", + "location": "string", + "hasParent": true + } + ] + }, + "termbaseStructure": { + "languages": [ + { + "languageCode": "string", + "englishName": "string", + "direction": "string", + "parentLanguageCode": "string", + "defaultSpecificLanguageCode": "string", + "isNeutral": true + } + ], + "fields": [ + { + "id": "string", + "name": "string", + "description": "string", + "type": "system", + "level": "entry", + "dataType": "text", + "pickListValues": [ + "string" + ], + "allowCustomValues": true, + "allowMultiple": true, + "isMandatory": true + } + ] + }, + "numberOfEntries": 0, + "status": "ready", + "createdAt": "2022-01-12T12:00:00.000Z", + "lastModifiedAt": "2022-01-12T12:00:00.000Z" + } + } + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to create a termbase.\n* \"benefitNotAvailable\": - Your subscription does not include access to the requested type of benefit.\n* \"quotaReached\": - You have reached the maximum allowable number of termbases for your account.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": - The specified location was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "409": { + "description": "Error codes:\n* \"duplicate\": There is already a termbase with the same name.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "description": "Creates a new termbase.\nThe termbase can be created with a termbase template by providing the templateId or by providing a custom termbaseStructure. \nIf only a `termbaseTemplateId` was provided, the termbase will be created using data from the template. \nIf only a `termbaseStructure` was provided, the termbase will be created using data from the structure. \nIf both, `termbaseTemplateId` and `termbaseStructure` are added in the request, the `termbaseStructure` takes precedence.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase-create-request" + } + } + }, + "description": "" + }, + "tags": [ + "Termbase" + ] + } + }, + "/termbases/{termbaseId}": { + "get": { + "summary": "Get Termbase", + "tags": [ + "Termbase" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read the resource.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "operationId": "GetTermbase", + "description": "Retrieves a termbase by identifier.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ] + }, + "delete": { + "summary": "Delete Termbase", + "operationId": "DeleteTermbase", + "responses": { + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to delete the termbase\n* \"benefitNotAvailable\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the termbase could not be found by identifier.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "409": { + "description": "Error codes:\n* \"invalidStatus\": The termbase cannot be deleted as is currently being processed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "description": "Deletes a termbase by identifier.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "tags": [ + "Termbase" + ] + }, + "put": { + "summary": "Update Termbase", + "operationId": "UpdateTermbase", + "responses": { + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"duplicate\": The field name must be unique within the list.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to update the termbase.\n* \"benefitNotAvailable\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": - The specified termbase identifier was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "409": { + "description": "Error codes:\n* \"duplicate\": There is already a termbase with the same name.\n* \"invalidStatus\": The termbase cannot be updated as is currently being processed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase-update-request" + } + } + } + }, + "description": "Updates the termbase.\nThe termbase can be updated with a termbase template by providing the termbaseTemplateId or by providing a custom termbaseStructure. \n\nIf only a `termbaseTemplateId ` was provided, the termbase will be updated using data from the template. \nIf only a `termbaseStructure` was provided, the termbase will be updated using data from the structure. \nIf both, `termbaseTemplateId` and `termbaseStructure` are added in the request, the `termbaseStructure` takes precedence.", + "tags": [ + "Termbase" + ] + }, + "parameters": [ + { + "$ref": "#/components/parameters/termbaseId" + } + ] + }, + "/termbases/{termbaseId}/entries": { + "post": { + "summary": "Create Termbase Entry", + "operationId": "CreateTermbaseEntry", + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase-entry" + }, + "examples": { + "termbase-entry-create": { + "value": { + "id": "string", + "humanReadableId": "string", + "languages": [ + { + "id": "string", + "language": { + "languageCode": "string", + "englishName": "string", + "direction": "string", + "parentLanguageCode": "string", + "defaultSpecificLanguageCode": "string", + "isNeutral": true + }, + "terms": [ + { + "id": "string", + "text": "string", + "termbaseFieldValues": [ + { + "id": "string", + "name": "string", + "termbaseFieldId": "string", + "value": "string", + "fieldValueLinks": [ + { + "type": "term", + "value": "string" + } + ], + "createdAt": "2019-08-24T14:15:22.000Z", + "createdBy": { + "id": "string", + "email": "string", + "firstName": "string", + "lastName": "string", + "anonymized": true, + "anonymizedUserName": "string", + "location": { + "id": "string", + "name": "string" + }, + "groups": [ + { + "id": "string", + "name": "string", + "description": "string", + "location": { + "id": "string", + "name": "string" + }, + "users": [ + { + "id": "string" + } + ] + } + ] + }, + "lastModifiedAt": "2019-08-24T14:15:22.000Z", + "lastModifiedBy": { + "id": "string", + "email": "string", + "firstName": "string", + "lastName": "string", + "anonymized": true, + "anonymizedUserName": "string", + "location": { + "id": "string", + "name": "string" + }, + "groups": [ + { + "id": "string", + "name": "string", + "description": "string", + "location": { + "id": "string", + "name": "string" + }, + "users": [ + { + "id": "string" + } + ] + } + ] + } + } + ], + "createdAt": "2019-08-24T14:15:22.000Z", + "createdBy": { + "id": "string", + "email": "string", + "firstName": "string", + "lastName": "string", + "anonymized": true, + "anonymizedUserName": "string", + "location": { + "id": "string", + "name": "string" + }, + "groups": [ + { + "id": "string", + "name": "string", + "description": "string", + "location": { + "id": "string", + "name": "string" + }, + "users": [ + { + "id": "string" + } + ] + } + ] + }, + "lastModifiedAt": "2019-08-24T14:15:22.000Z", + "lastModifiedBy": { + "id": "string", + "email": "string", + "firstName": "string", + "lastName": "string", + "anonymized": true, + "anonymizedUserName": "string", + "location": { + "id": "string", + "name": "string" + }, + "groups": [ + { + "id": "string", + "name": "string", + "description": "string", + "location": { + "id": "string", + "name": "string" + }, + "users": [ + { + "id": "string" + } + ] + } + ] + } + } + ], + "termbaseFieldValues": [ + { + "id": "string", + "name": "string", + "termbaseFieldId": "string", + "value": "string", + "fieldValueLinks": [ + { + "type": "term", + "value": "string" + } + ], + "createdAt": "2019-08-24T14:15:22.000Z", + "createdBy": { + "id": "string", + "email": "string", + "firstName": "string", + "lastName": "string", + "anonymized": true, + "anonymizedUserName": "string", + "location": { + "id": "string", + "name": "string" + }, + "groups": [ + { + "id": "string", + "name": "string", + "description": "string", + "location": { + "id": "string", + "name": "string" + }, + "users": [ + { + "id": "string" + } + ] + } + ] + }, + "lastModifiedAt": "2019-08-24T14:15:22.000Z", + "lastModifiedBy": { + "id": "string", + "email": "string", + "firstName": "string", + "lastName": "string", + "anonymized": true, + "anonymizedUserName": "string", + "location": { + "id": "string", + "name": "string" + }, + "groups": [ + { + "id": "string", + "name": "string", + "description": "string", + "location": { + "id": "string", + "name": "string" + }, + "users": [ + { + "id": "string" + } + ] + } + ] + } + } + ], + "createdAt": "2019-08-24T14:15:22.000Z", + "createdBy": { + "id": "string", + "email": "string", + "firstName": "string", + "lastName": "string", + "anonymized": true, + "anonymizedUserName": "string", + "location": { + "id": "string", + "name": "string" + }, + "groups": [ + { + "id": "string", + "name": "string", + "description": "string", + "location": { + "id": "string", + "name": "string" + }, + "users": [ + { + "id": "string" + } + ] + } + ] + }, + "lastModifiedAt": "2019-08-24T14:15:22.000Z", + "lastModifedBy": { + "id": "string", + "email": "string", + "firstName": "string", + "lastName": "string", + "anonymized": true, + "anonymizedUserName": "string", + "location": { + "id": "string", + "name": "string" + }, + "groups": [ + { + "id": "string", + "name": "string", + "description": "string", + "location": { + "id": "string", + "name": "string" + }, + "users": [ + { + "id": "string" + } + ] + } + ] + } + } + ], + "termbaseFieldValues": [ + { + "id": "string", + "name": "string", + "termbaseFieldId": "string", + "value": "string", + "fieldValueLinks": [ + { + "type": "term", + "value": "string" + } + ], + "createdAt": "2019-08-24T14:15:22.000Z", + "createdBy": { + "id": "string", + "email": "string", + "firstName": "string", + "lastName": "string", + "anonymized": true, + "anonymizedUserName": "string", + "location": { + "id": "string", + "name": "string" + }, + "groups": [ + { + "id": "string", + "name": "string", + "description": "string", + "location": { + "id": "string", + "name": "string" + }, + "users": [ + { + "id": "string" + } + ] + } + ] + }, + "lastModifiedAt": "2019-08-24T14:15:22.000Z", + "lastModifiedBy": { + "id": "string", + "email": "string", + "firstName": "string", + "lastName": "string", + "anonymized": true, + "anonymizedUserName": "string", + "location": { + "id": "string", + "name": "string" + }, + "groups": [ + { + "id": "string", + "name": "string", + "description": "string", + "location": { + "id": "string", + "name": "string" + }, + "users": [ + { + "id": "string" + } + ] + } + ] + } + } + ], + "createdAt": "2019-08-24T14:15:22.000Z", + "createdBy": { + "id": "string", + "email": "string", + "firstName": "string", + "lastName": "string", + "anonymized": true, + "anonymizedUserName": "string", + "location": { + "id": "string", + "name": "string" + }, + "groups": [ + { + "id": "string", + "name": "string", + "description": "string", + "location": { + "id": "string", + "name": "string" + }, + "users": [ + { + "id": "string" + } + ] + } + ] + }, + "lastModifiedAt": "2019-08-24T14:15:22.000Z", + "lastModifiedBy": { + "id": "string", + "email": "string", + "firstName": "string", + "lastName": "string", + "anonymized": true, + "anonymizedUserName": "string", + "location": { + "id": "string", + "name": "string" + }, + "groups": [ + { + "id": "string", + "name": "string", + "description": "string", + "location": { + "id": "string", + "name": "string" + }, + "users": [ + { + "id": "string" + } + ] + } + ] + } + } + } + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"invalidLevel\" : The termbaseFieldId is invalid for the current termbaseField type\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to create an entry.\n* \"benefitNotAvailable\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "409": { + "description": "Error codes:\n* \"invalidStatus\": The termbase cannot be updated as is currently being processed.\n* \"duplicate\" : An entry with the same value already exists.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "description": "Creates a new termbase entry. For more information about how to use `fieldValueLinks` see [`Create termbase entry`](../docs/termbase/Termbase-entries.md#creating-a-termbase-entry).", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase-entry-create-request" + } + } + } + }, + "tags": [ + "Termbase" + ] + }, + "get": { + "summary": "List Termbase Entries", + "operationId": "ListTermbaseEntries", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/list-termbase-entries-response" + }, + "examples": { + "termbase-entries-list": { + "value": { + "items": [ + { + "id": "test-id-1", + "humanReadableId": "test-humanReadableId-1", + "languages": [ + { + "id": "test-languages-id-1", + "language": { + "languageCode": "test-language-code-1" + }, + "terms": [ + { + "id": "test-terms-id-1", + "text": "test-terms-test-1" + } + ] + } + ], + "termbaseFieldValues": [ + { + "id": "test-termbaseFieldValues-id-1", + "name": "test-termbaseFieldValues-name-1", + "termbaseFieldId": "test-termbaseFieldValues-termbaseFieldId-1", + "value": "test-termbaseFieldValues-value-1", + "fieldValueLinks": [ + { + "type": "term", + "value": "test-value-1" + } + ] + } + ] + }, + { + "id": "test-id-2", + "humanReadableId": "test-humanReadableId-2", + "languages": [ + { + "id": "test-languages-id-2", + "language": { + "languageCode": "test-language-code-2" + }, + "terms": [ + { + "id": "test-terms-id-2", + "text": "test-terms-test-2" + } + ] + } + ], + "termbaseFieldValues": [ + { + "id": "test-termbaseFieldValues-id-2", + "name": "test-termbaseFieldValues-name-2", + "termbaseFieldId": "test-termbaseFieldValues-termbaseFieldId-2", + "value": "test-termbaseFieldValues-value-2", + "fieldValueLinks": [ + { + "type": "term", + "value": "test-value-2" + } + ] + } + ] + } + ], + "itemCount": 2 + } + } + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read the entries.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "description": "Retrieves a list of all the entries in a termbase.", + "tags": [ + "Termbase" + ], + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/fields" + }, + { + "$ref": "#/components/parameters/humanReadableIds" + } + ] + }, + "delete": { + "summary": "Delete Termbase Entries", + "operationId": "DeleteTermbaseEntries", + "responses": { + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to delete an entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "description": "Deletes all the entries in the termbase.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "tags": [ + "Termbase" + ] + }, + "parameters": [ + { + "$ref": "#/components/parameters/termbaseId" + } + ] + }, + "/termbases/{termbaseId}/entries/{entryId}": { + "get": { + "summary": "Get Termbase Entry", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase-entry" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read the entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the entry could not be found by identifier.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "operationId": "GetTermbaseEntry", + "description": "Retrieves a termbase entry by identifier.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "tags": [ + "Termbase" + ] + }, + "put": { + "summary": "Update Termbase Entry", + "operationId": "UpdateTermbaseEntry", + "responses": { + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to update the entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "409": { + "description": "Error codes:\n* \"invalidStatus\": The termbase cannot be updated as is currently being processed.\n* \"duplicate\" : An entry with the same value already exists.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "description": "Updates a termbase entry by identifier.\nThe request body will overwrite the existing data.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "tags": [ + "Termbase" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase-entry-update-request" + } + } + } + } + }, + "delete": { + "summary": "Delete Termbase Entry", + "operationId": "DeleteTermbaseEntry", + "responses": { + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to delete the termbase entries.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "description": "Deletes a termbase entry.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "tags": [ + "Termbase" + ] + }, + "parameters": [ + { + "$ref": "#/components/parameters/termbaseId" + }, + { + "$ref": "#/components/parameters/entryId" + } + ] + }, + "/termbases/{termbaseId}/exports": { + "parameters": [ + { + "$ref": "#/components/parameters/termbaseId" + } + ], + "post": { + "summary": "Export Termbase", + "operationId": "ExportTermbase", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase-export-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": - The specified termbase was not found.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "xml", + "tbx" + ], + "default": "tbx", + "description": "The file format used to export the termbase." + }, + "properties": { + "$ref": "#/components/schemas/termbase-export-properties-request" + } + } + } + } + } + }, + "description": "Generates an asynchronous export operation.
\nUse the [Poll Export Termbase](../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1exports~1{exportId}/get) endpoint to poll until the export status is `done`.", + "tags": [ + "Termbase Export" + ] + } + }, + "/termbases/{termbaseId}/exports/{exportId}": { + "parameters": [ + { + "$ref": "#/components/parameters/termbaseId" + }, + { + "$ref": "#/components/parameters/exportId" + } + ], + "get": { + "summary": "Poll Termbase Export", + "operationId": "PollExportTermbase", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase-export-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": - The specified export was not found." + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "description": "Polls a termbase via an export operation. The exported termbase can be downloaded once the status is `done`.", + "tags": [ + "Termbase Export" + ] + } + }, + "/termbases/{termbaseId}/exports/{exportId}/download": { + "parameters": [ + { + "$ref": "#/components/parameters/termbaseId" + }, + { + "$ref": "#/components/parameters/exportId" + } + ], + "get": { + "summary": "Download Exported Termbase", + "operationId": "DownloadExportedTermbase", + "responses": { + "200": { + "description": "OK", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": - The specified termbase or export was not found.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "description": "Downloads the exported termbase when the poll operation status is `done`.", + "tags": [ + "Termbase Export" + ] + } + }, + "/termbases/{termbaseId}/export-template": { + "parameters": [ + { + "name": "termbaseId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The termbase identifier." + } + ], + "get": { + "summary": "Export Termbase Template", + "tags": [ + "Termbase Export" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "operationId": "DownloadTermbaseDefinition", + "description": "Downloads the termbase definition.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ] + } + }, + "/termbases/{termbaseId}/terms/{sourceLanguageCode}": { + "get": { + "summary": "List Termbase Terms", + "operationId": "ListTermbaseTerms", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/list-termbase-terms-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read the entries.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "schema": { + "type": "string", + "maxLength": 100 + }, + "in": "query", + "name": "search", + "description": "The text to search for." + }, + { + "schema": { + "type": "string", + "enum": [ + "normal", + "linguistic", + "fuzzy" + ], + "default": "normal" + }, + "in": "query", + "name": "searchType", + "description": "The type of the search performed." + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "targetLanguageCode", + "description": "The target language code used to list the terms." + } + ], + "description": "Retrieves a list of all the terms of the termbase.\nSearch types:\n- normal: Use normal search to look for terms that match the text exactly as entered.\n- linguistic: Use linguistic search to look for terms that are similar to the search term. Linguistic search is based on stemming and other language-dependent aspects.\n- fuzzy: Use fuzzy search to look for terms that are similar to the search term. Fuzzy search is more fault-tolerant than linguistic search.", + "tags": [ + "Termbase" + ] + }, + "parameters": [ + { + "$ref": "#/components/parameters/termbaseId" + }, + { + "schema": { + "type": "string" + }, + "name": "sourceLanguageCode", + "in": "path", + "required": true, + "description": "The source language code used to list the terms." + } + ] + }, + "/termbases/{termbaseId}/imports": { + "parameters": [ + { + "$ref": "#/components/parameters/termbaseId" + } + ], + "get": { + "summary": "Get Termbase Import History", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/list-termbase-import-history" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "operationId": "GetImportHistory", + "description": "Gets the import history for a termbase.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + } + ], + "tags": [ + "Termbase Import" + ] + }, + "post": { + "summary": "Import Termbase", + "operationId": "ImportTermbase", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/termbase-import-response" + }, + "examples": { + "import-termbase-ok": { + "value": { + "id": "test-import-id", + "status": "queued" } } } @@ -13127,13 +15352,18 @@ } }, "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"invalidLevel\" : The termbaseFieldId is invalid for the current termbaseField type\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } } }, "401": { @@ -13152,12 +15382,17 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to create an entry.\n* \"benefitNotAvailable\": - Your subscription does not include access to the requested type of benefit.", + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/error-response" + } } }, "headers": { @@ -13167,7 +15402,7 @@ } }, "409": { - "description": "Error codes:\n* \"invalidStatus\": The termbase cannot be updated as is currently being processed.\n* \"duplicate\" : An entry with the same value already exists.", + "description": "Error codes:\n* \"invalidStatus\": Cannot import as the termbase is currently being processed.", "content": { "application/json": { "schema": { @@ -13190,106 +15425,77 @@ "$ref": "#/components/parameters/X-LC-Tenant" }, { - "$ref": "#/components/parameters/fields" + "schema": { + "type": "boolean", + "default": true + }, + "in": "query", + "name": "strictImport", + "description": "Specifies if the entries are only imported into the exact language that matches your imported file.
`true` - The import will only occur if the language in your import file matches exactly with a language in your termbase.
`false` - The import will occur even there are non-matching languages, by trying to match them to a relevant main language or language variant, if available." + }, + { + "schema": { + "type": "string", + "enum": [ + "ignore", + "merge", + "overwrite" + ], + "default": "overwrite" + }, + "in": "query", + "name": "duplicateEntriesStrategy", + "description": "The strategy for duplicate entries. Determines how the duplicate entries will be handled.
`ignore` - The content of the current entry with the same identifier will be kept, and the new entry will be ignored
`merge` - The content of the current entry with the same identifier will be merged with the imported entry. If the identifier is not provided the content will be merged by text.
`overwrite` - The content of the current entry with the same identifier will be replaced by the imported entry." } ], - "description": "Creates a new termbase entry. For more information about how to use `fieldValueLinks` see [`Create termbase entry`](../docs/termbase/Termbase-entries.md#creating-a-termbase-entry).", "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/termbase-entry-create-request" - } + "type": "object", + "required": [ + "file" + ], + "properties": { + "properties": { + "$ref": "#/components/schemas/termbase-import-request" + }, + "file": { + "type": "string", + "format": "binary", + "description": "The file (binary string) to import into the termbase.
\nAccepted file types: .xml, .tbx\n
" + } + } + }, + "examples": {} } - } + }, + "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." }, + "description": "Generates an asynchronous import operation.
\nUse the Poll Import Termbase endpoint to poll until the import status is `done`.
", "tags": [ - "Termbase" + "Termbase Import" ] - }, + } + }, + "/termbases/{termbaseId}/imports/{importId}": { + "parameters": [ + { + "$ref": "#/components/parameters/termbaseId" + }, + { + "$ref": "#/components/parameters/importId" + } + ], "get": { - "summary": "List Termbase Entries", - "operationId": "ListTermbaseEntries", + "summary": "Poll Termbase Import", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-termbase-entries-response" - }, - "examples": { - "termbase-entries-list": { - "value": { - "items": [ - { - "id": "test-id-1", - "humanReadableId": "test-humanReadableId-1", - "languages": [ - { - "id": "test-languages-id-1", - "language": { - "languageCode": "test-language-code-1" - }, - "terms": [ - { - "id": "test-terms-id-1", - "text": "test-terms-test-1" - } - ] - } - ], - "termbaseFieldValues": [ - { - "id": "test-termbaseFieldValues-id-1", - "name": "test-termbaseFieldValues-name-1", - "termbaseFieldId": "test-termbaseFieldValues-termbaseFieldId-1", - "value": "test-termbaseFieldValues-value-1", - "fieldValueLinks": [ - { - "type": "term", - "value": "test-value-1" - } - ] - } - ] - }, - { - "id": "test-id-2", - "humanReadableId": "test-humanReadableId-2", - "languages": [ - { - "id": "test-languages-id-2", - "language": { - "languageCode": "test-language-code-2" - }, - "terms": [ - { - "id": "test-terms-id-2", - "text": "test-terms-test-2" - } - ] - } - ], - "termbaseFieldValues": [ - { - "id": "test-termbaseFieldValues-id-2", - "name": "test-termbaseFieldValues-name-2", - "termbaseFieldId": "test-termbaseFieldValues-termbaseFieldId-2", - "value": "test-termbaseFieldValues-value-2", - "fieldValueLinks": [ - { - "type": "term", - "value": "test-value-2" - } - ] - } - ] - } - ], - "itemCount": 2 - } - } + "$ref": "#/components/schemas/termbase-poll-import-response" } } }, @@ -13299,8 +15505,31 @@ } } }, - "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", "content": { "application/json": { "schema": { @@ -13313,6 +15542,66 @@ "$ref": "#/components/headers/X-LC-TraceId" } } + } + }, + "operationId": "PollTermbaseImport", + "description": "Polls a termbase import operation.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "tags": [ + "Termbase Import" + ] + } + }, + "/termbases/{termbaseId}/imports/{importId}/logs": { + "parameters": [ + { + "$ref": "#/components/parameters/termbaseId" + }, + { + "$ref": "#/components/parameters/importId" + } + ], + "get": { + "summary": "Download Termbase Import Logs", + "operationId": "DownloadTermbaseImportLog", + "description": "Downloads the termbase import logs.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "tags": [ + "Termbase Import" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error code: \n * \"invalid\": the value specified in the field \"name\" of the errorDetails is not an accepted value." }, "401": { "description": "The user could not be identified.", @@ -13330,7 +15619,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read the entries.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", "content": { "application/json": { "schema": { @@ -13344,8 +15633,8 @@ } } }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "404": { + "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", "content": { "application/json": { "schema": { @@ -13359,38 +15648,40 @@ } } } - }, - "description": "Retrieves a list of all the entries in a termbase.", + } + } + }, + "/tqa-profiles": { + "get": { + "summary": "List TQA Profiles", "tags": [ - "Termbase" + "TQA Profile" ], - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - }, - { - "$ref": "#/components/parameters/fields" - }, - { - "$ref": "#/components/parameters/humanReadableIds" - } - ] - }, - "delete": { - "summary": "Delete Termbase Entries", - "operationId": "DeleteTermbaseEntries", "responses": { - "204": { - "description": "No Content", + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/list-tqa-profiles-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -13412,8 +15703,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to delete an entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", "content": { "application/json": { "schema": { @@ -13428,35 +15719,49 @@ } } }, - "description": "Deletes all the entries in the termbase.", + "operationId": "ListTqaProfiles", + "description": "List TQA Profiles.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/location" + }, + { + "$ref": "#/components/parameters/location-strategy" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/sort" + }, + { + "$ref": "#/components/parameters/fields" } - ], - "tags": [ - "Termbase" ] - }, - "parameters": [ - { - "$ref": "#/components/parameters/termbaseId" - } - ] + } }, - "/termbases/{termbaseId}/entries/{entryId}": { + "/tqa-profiles/{profileId}": { "get": { - "summary": "Get Termbase Entry", + "summary": "Get TQA Profile", + "tags": [ + "TQA Profile" + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/termbase-entry" + "$ref": "#/components/schemas/tqa-profile" } } }, @@ -13467,7 +15772,7 @@ } }, "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -13497,7 +15802,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read the entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { @@ -13512,7 +15817,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the entry could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the User could not be found by identifier.", "content": { "application/json": { "schema": { @@ -13527,8 +15832,8 @@ } } }, - "operationId": "GetTermbaseEntry", - "description": "Retrieves a termbase entry by identifier.", + "operationId": "GetTqaProfile", + "description": "Get a TQA Profile By identifier.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -13539,29 +15844,27 @@ { "$ref": "#/components/parameters/fields" } - ], - "tags": [ - "Termbase" ] }, - "put": { - "summary": "Update Termbase Entry", - "operationId": "UpdateTermbaseEntry", + "parameters": [ + { + "$ref": "#/components/parameters/profileId" + } + ] + }, + "/translation-memory/{translationMemoryId}": { + "get": { + "summary": "Get Translation Memory", + "tags": [ + "Translation Memory" + ], "responses": { - "204": { - "description": "No Content", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "200": { + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/error-response" + "$ref": "#/components/schemas/translation-memory" } } }, @@ -13571,8 +15874,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -13586,8 +15889,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to update the entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { @@ -13601,51 +15904,8 @@ } } }, - "409": { - "description": "Error codes:\n* \"invalidStatus\": The termbase cannot be updated as is currently being processed.\n* \"duplicate\" : An entry with the same value already exists.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - } - }, - "description": "Updates a termbase entry by identifier.\nThe request body will overwrite the existing data.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ], - "tags": [ - "Termbase" - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/termbase-entry-update-request" - } - } - } - } - }, - "delete": { - "summary": "Delete Termbase Entry", - "operationId": "DeleteTermbaseEntry", - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "401": { - "description": "The user could not be identified.", + "403": { + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { @@ -13659,8 +15919,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to delete the termbase entries.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "404": { + "description": "Error codes:\n* \"notFound\": The translation memory could not be found by identifier.", "content": { "application/json": { "schema": { @@ -13675,47 +15935,26 @@ } } }, - "description": "Deletes a termbase entry.", + "operationId": "GetTranslationMemory", + "description": "Get a single Translation Memory by identifier.", "parameters": [ + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, { "$ref": "#/components/parameters/Authorization" }, { - "$ref": "#/components/parameters/X-LC-Tenant" + "$ref": "#/components/parameters/fields" } - ], - "tags": [ - "Termbase" ] }, - "parameters": [ - { - "$ref": "#/components/parameters/termbaseId" - }, - { - "$ref": "#/components/parameters/entryId" - } - ] - }, - "/termbases/{termbaseId}/exports": { - "parameters": [ - { - "$ref": "#/components/parameters/termbaseId" - } - ], - "post": { - "summary": "Export Termbase", - "operationId": "ExportTermbase", + "put": { + "summary": "Update Translation Memory", + "operationId": "UpdateTranslationMemory", "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/termbase-export-response" - } - } - }, + "204": { + "description": "No Content", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -13723,7 +15962,7 @@ } }, "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"minSize\": Minimum size not met for the value mentioned in the \"name\" field on the error response.", "content": { "application/json": { "schema": { @@ -13753,17 +15992,12 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } - }, - "application/xml": { - "schema": { - "$ref": "#/components/schemas/error-response" - } } }, "headers": { @@ -13773,7 +16007,14 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": - The specified termbase was not found.", + "description": "Error codes:\n* \"notFound\": The translation memory could not be found by identifier.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -13781,62 +16022,46 @@ } } }, - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ], + "description": "Updates a Translation Memory. We recommend reading this page too [Updating data with PUT](../docs/Updating-data-with-PUT.md).", "requestBody": { "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "format": { - "type": "string", - "enum": [ - "xml", - "tbx" - ], - "default": "tbx", - "description": "The file format used to export the termbase." - }, - "properties": { - "$ref": "#/components/schemas/termbase-export-properties-request" - } - } + "$ref": "#/components/schemas/translation-memory-update-request" } } } }, - "description": "Generates an asynchronous export operation.
\nUse the [Poll Export Termbase](../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1exports~1{exportId}/get) endpoint to poll until the export status is `done`.", + "parameters": [ + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/Authorization" + } + ], "tags": [ - "Termbase Export" + "Translation Memory" ] - } - }, - "/termbases/{termbaseId}/exports/{exportId}": { - "parameters": [ - { - "$ref": "#/components/parameters/termbaseId" - }, - { - "$ref": "#/components/parameters/exportId" - } - ], - "get": { - "summary": "Poll Termbase Export", - "operationId": "PollExportTermbase", + }, + "delete": { + "summary": "Delete Translation Memory", + "operationId": "DeleteTranslationMemory", "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/termbase-export-response" + "$ref": "#/components/schemas/error-response" } } }, @@ -13862,14 +16087,24 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } - }, - "application/xml": { + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": The translation memory could not be found by identifier.", + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } @@ -13880,45 +16115,46 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - }, - "404": { - "description": "Error codes:\n* \"notFound\": - The specified export was not found." } }, + "description": "Deletes a Translation Memory.", "parameters": [ { - "$ref": "#/components/parameters/Authorization" + "$ref": "#/components/parameters/X-LC-Tenant" }, { - "$ref": "#/components/parameters/X-LC-Tenant" + "$ref": "#/components/parameters/Authorization" } ], - "description": "Polls a termbase via an export operation. The exported termbase can be downloaded once the status is `done`.", "tags": [ - "Termbase Export" + "Translation Memory" ] - } - }, - "/termbases/{termbaseId}/exports/{exportId}/download": { + }, "parameters": [ { - "$ref": "#/components/parameters/termbaseId" - }, - { - "$ref": "#/components/parameters/exportId" + "schema": { + "type": "string" + }, + "name": "translationMemoryId", + "in": "path", + "required": true, + "description": "The identifier of the translation memory" } - ], - "get": { - "summary": "Download Exported Termbase", - "operationId": "DownloadExportedTermbase", + ] + }, + "/translation-memory/{translationMemoryId}/copy": { + "post": { + "summary": "Copy Translation Memory", + "tags": [ + "Translation Memory" + ], "responses": { "200": { - "description": "OK", + "description": "", "content": { - "application/octet-stream": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/translation-memory" } } }, @@ -13928,8 +16164,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -13943,15 +16179,25 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } - }, - "application/xml": { + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the resource.", + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } @@ -13964,7 +16210,14 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": - The specified termbase or export was not found.", + "description": "Error codes:\n* \"notFound\": The translation memory could not be found by identifier.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -13972,45 +16225,60 @@ } } }, + "operationId": "CopyTranslationMemory", + "description": "Creates a copy of a Translation Memory. The name will be suffixed with ' (Copy) '", "parameters": [ + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, { "$ref": "#/components/parameters/Authorization" }, { - "$ref": "#/components/parameters/X-LC-Tenant" + "$ref": "#/components/parameters/fields" } - ], - "description": "Downloads the exported termbase when the poll operation status is `done`.", - "tags": [ - "Termbase Export" ] - } - }, - "/termbases/{termbaseId}/export-template": { + }, "parameters": [ { - "name": "termbaseId", - "in": "path", - "required": true, "schema": { "type": "string" }, - "description": "The termbase identifier." + "name": "translationMemoryId", + "in": "path", + "required": true, + "description": "The identifier of the translation memory" } - ], + ] + }, + "/translation-memory": { "get": { - "summary": "Export Termbase Template", + "summary": "List Translation Memories", "tags": [ - "Termbase Export" + "Translation Memory" ], "responses": { "200": { - "description": "OK", + "description": "", "content": { - "application/octet-stream": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/list-translation-memories-reposne" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" } } }, @@ -14035,8 +16303,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.", + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range.", "content": { "application/json": { "schema": { @@ -14051,29 +16319,45 @@ } } }, - "operationId": "DownloadTermbaseDefinition", - "description": "Downloads the termbase definition.", + "operationId": "ListTranslationMemories", + "description": "Retrieves all the Translation Memories.", "parameters": [ + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, { "$ref": "#/components/parameters/Authorization" }, { - "$ref": "#/components/parameters/X-LC-Tenant" + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/location" + }, + { + "$ref": "#/components/parameters/location-strategy" + }, + { + "$ref": "#/components/parameters/sort" + }, + { + "$ref": "#/components/parameters/fields" } ] - } - }, - "/termbases/{termbaseId}/terms/{sourceLanguageCode}": { - "get": { - "summary": "List Termbase Terms", - "operationId": "ListTermbaseTerms", + }, + "post": { + "summary": "Create Translation Memory", + "operationId": "CreateTranslationMemory", "responses": { - "200": { - "description": "OK", + "201": { + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-termbase-terms-response" + "$ref": "#/components/schemas/translation-memory-base" } } }, @@ -14084,7 +16368,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"minSize\": Minimum size not met for the value mentioned in the \"name\" field on the error response.", "content": { "application/json": { "schema": { @@ -14114,22 +16398,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read the entries.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { @@ -14144,86 +16413,45 @@ } } }, + "description": "Create a new Translation Memory.", "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, { "$ref": "#/components/parameters/X-LC-Tenant" }, { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - }, - { - "schema": { - "type": "string", - "maxLength": 100 - }, - "in": "query", - "name": "search", - "description": "The text to search for." - }, - { - "schema": { - "type": "string", - "enum": [ - "normal", - "linguistic", - "fuzzy" - ], - "default": "normal" - }, - "in": "query", - "name": "searchType", - "description": "The type of the search performed." + "$ref": "#/components/parameters/Authorization" }, { - "schema": { - "type": "string" - }, - "in": "query", - "name": "targetLanguageCode", - "description": "The target language code used to list the terms." + "$ref": "#/components/parameters/fields" } ], - "description": "Retrieves a list of all the terms of the termbase.\nSearch types:\n- normal: Use normal search to look for terms that match the text exactly as entered.\n- linguistic: Use linguistic search to look for terms that are similar to the search term. Linguistic search is based on stemming and other language-dependent aspects.\n- fuzzy: Use fuzzy search to look for terms that are similar to the search term. Fuzzy search is more fault-tolerant than linguistic search.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/translation-memory-create-request" + } + } + } + }, "tags": [ - "Termbase" + "Translation Memory" ] - }, - "parameters": [ - { - "$ref": "#/components/parameters/termbaseId" - }, - { - "schema": { - "type": "string" - }, - "name": "sourceLanguageCode", - "in": "path", - "required": true, - "description": "The source language code used to list the terms." - } - ] + } }, - "/termbases/{termbaseId}/imports": { - "parameters": [ - { - "$ref": "#/components/parameters/termbaseId" - } - ], + "/translation-memory/field-templates": { "get": { - "summary": "Get Termbase Import History", + "summary": "List Field Templates", + "tags": [ + "Translation Memory" + ], "responses": { "200": { - "description": "OK", + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-termbase-import-history" + "$ref": "#/components/schemas/list-translation-memory-field-templates" } } }, @@ -14234,7 +16462,7 @@ } }, "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -14250,14 +16478,21 @@ }, "401": { "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", "content": { "application/json": { "schema": { @@ -14272,47 +16507,61 @@ } } }, - "operationId": "GetImportHistory", - "description": "Gets the import history for a termbase.", + "operationId": "ListFieldTemplates", "parameters": [ { - "$ref": "#/components/parameters/Authorization" + "$ref": "#/components/parameters/top" }, { - "$ref": "#/components/parameters/X-LC-Tenant" + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/sort" + }, + { + "$ref": "#/components/parameters/location" + }, + { + "$ref": "#/components/parameters/location-strategy" }, { "$ref": "#/components/parameters/fields" }, { - "$ref": "#/components/parameters/top" + "$ref": "#/components/parameters/Authorization" }, { - "$ref": "#/components/parameters/skip" + "$ref": "#/components/parameters/X-LC-Tenant" } ], - "tags": [ - "Termbase Import" - ] + "description": "Retrieves all the Field Templates." }, - "post": { - "summary": "Import Termbase", - "operationId": "ImportTermbase", + "parameters": [] + }, + "/translation-memory/field-templates/{fieldTemplateId}": { + "parameters": [ + { + "schema": { + "type": "string" + }, + "name": "fieldTemplateId", + "in": "path", + "required": true, + "description": "The field template identifier" + } + ], + "get": { + "summary": "Get Field Template", + "tags": [ + "Translation Memory" + ], "responses": { "200": { - "description": "OK", + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/termbase-import-response" - }, - "examples": { - "import-termbase-ok": { - "value": { - "id": "test-import-id", - "status": "queued" - } - } + "$ref": "#/components/schemas/translation-memory-field-template" } } }, @@ -14323,7 +16572,7 @@ } }, "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -14353,17 +16602,12 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } - }, - "application/xml": { - "schema": { - "$ref": "#/components/schemas/error-response" - } } }, "headers": { @@ -14372,8 +16616,8 @@ } } }, - "409": { - "description": "Error codes:\n* \"invalidStatus\": Cannot import as the termbase is currently being processed.", + "404": { + "description": "Error codes:\n* \"notFound\": The resource could not be found by identifier.", "content": { "application/json": { "schema": { @@ -14383,87 +16627,47 @@ }, "headers": { "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "schema": { - "type": "boolean", - "default": true - }, - "in": "query", - "name": "strictImport", - "description": "Specifies if the entries are only imported into the exact language that matches your imported file.
`true` - The import will only occur if the language in your import file matches exactly with a language in your termbase.
`false` - The import will occur even there are non-matching languages, by trying to match them to a relevant main language or language variant, if available." - }, - { - "schema": { - "type": "string", - "enum": [ - "ignore", - "merge", - "overwrite" - ], - "default": "overwrite" - }, - "in": "query", - "name": "duplicateEntriesStrategy", - "description": "The strategy for duplicate entries. Determines how the duplicate entries will be handled.
`ignore` - The content of the current entry with the same identifier will be kept, and the new entry will be ignored
`merge` - The content of the current entry with the same identifier will be merged with the imported entry. If the identifier is not provided the content will be merged by text.
`overwrite` - The content of the current entry with the same identifier will be replaced by the imported entry." - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "required": [ - "file" - ], - "properties": { - "file": { - "type": "string", - "format": "binary", - "description": "The file (binary string) to import into the termbase.
\nAccepted file types: .xml, .tbx\n
" - } - } - }, - "examples": {} + "$ref": "#/components/headers/X-LC-TraceId" + } } - }, - "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." + } }, - "description": "Generates an asynchronous import operation.
\nUse the Poll Import Termbase endpoint to poll until the import status is `done`.
", - "tags": [ - "Termbase Import" - ] + "operationId": "GetFieldTemplate", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "description": "Get a single Field Template by identifier." } }, - "/termbases/{termbaseId}/imports/{importId}": { + "/translation-memory/{translationMemoryId}/imports": { "parameters": [ { - "$ref": "#/components/parameters/termbaseId" - }, - { - "$ref": "#/components/parameters/importId" + "schema": { + "type": "string" + }, + "name": "translationMemoryId", + "description": "The identifier of the Translation Memory.", + "in": "path", + "required": true } ], "get": { - "summary": "Poll Termbase Import", + "summary": "Get Translation Memory Import History", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/termbase-poll-import-response" + "$ref": "#/components/schemas/list-translation-memory-import-history" } } }, @@ -14473,8 +16677,8 @@ } } }, - "401": { - "description": "The user could not be identified.", + "400": { + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -14488,8 +16692,23 @@ } } }, + "401": { + "description": "The user could not be identified.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the entry.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -14512,53 +16731,70 @@ } } }, - "operationId": "PollTermbaseImport", - "description": "Polls a termbase import operation.", + "operationId": "GetTMImportHistory", + "description": "Gets the import history for a translation memory. It returns the history of last 7 days.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - } - ], - "tags": [ - "Termbase Import" - ] - } - }, - "/termbases/{termbaseId}/imports/{importId}/logs": { - "parameters": [ - { - "$ref": "#/components/parameters/termbaseId" - }, - { - "$ref": "#/components/parameters/importId" - } - ], - "get": { - "summary": "Download Termbase Import Logs", - "operationId": "DownloadTermbaseImportLog", - "description": "Downloads the termbase import logs.", - "parameters": [ + }, { - "$ref": "#/components/parameters/Authorization" + "$ref": "#/components/parameters/fields" }, { - "$ref": "#/components/parameters/X-LC-Tenant" + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" } ], "tags": [ - "Termbase Import" - ], + "Translation Memory Import" + ] + }, + "post": { + "summary": "Import Translation Memory", + "operationId": "ImportTranslationMemory", "responses": { "200": { - "description": "OK", + "description": "OK - returned when the `status` field has one of the following values: `failed`, `done`, `cancelled`", "content": { - "application/octet-stream": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/translation-memory-import-response" + }, + "examples": { + "import-termbase-ok": { + "value": { + "id": "test-import-id", + "status": "queued" + } + } + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "202": { + "description": "Accepted - returned when the `status` field has one of the following values: `queued`, `inProgress`", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/translation-memory-import-response" + }, + "examples": { + "import-termbase-ok": { + "value": { + "id": "test-import-id", + "status": "queued" + } + } } } }, @@ -14569,7 +16805,19 @@ } }, "400": { - "description": "Error code: \n * \"invalid\": the value specified in the field \"name\" of the errorDetails is not an accepted value." + "description": "Error codes:\n* \"invalid\": Invalid input in the query/form parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"multiPartOrder\": The multipart order in the body is not correct. The `properties` must be first and then, file.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } }, "401": { "description": "The user could not be identified.", @@ -14587,12 +16835,17 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": - The authenticated user is not allowed to read entry.\n* \"entitlementMissing\": - Your subscription does not include access to the requested type of benefit.", + "description": "Error codes:\n* \"forbidden\": Not authorized to import translation memories.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/error-response" + } } }, "headers": { @@ -14602,7 +16855,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": The resource could not be found by identifier.", "content": { "application/json": { "schema": { @@ -14616,22 +16869,67 @@ } } } - } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "required": [ + "properties", + "file" + ], + "properties": { + "properties": { + "$ref": "#/components/schemas/translation-memory-import-request" + }, + "file": { + "type": "string", + "format": "binary", + "description": "The file (binary string) to import into the translation memory.
Accepted file types: .tmx, .sdltm, .zip, .tmx.gz, .sdlxliff" + } + } + }, + "examples": {} + } + }, + "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." + }, + "description": "Generates an asynchronous import operation. \n
\n
Read more about prerequisites and limitations on the [official documentation center](https://docs.rws.com/791595/741139/trados-enterprise/importing-tm-content).\n
\nNote: The order of the multipart form parameter must be implemented as such: properties first, file second.\n
\nUse the Poll Translation Memory Import endpoint to poll until the import status is `done`.
\nTo track the progress of the import please refer to [Poll Translation Memory Import](../reference/Public-API.v1.json/paths/~1translation-memory~1imports~1{importId}/get).", + "tags": [ + "Translation Memory Import" + ] } }, - "/tqa-profiles": { + "/translation-memory/imports/{importId}": { + "parameters": [ + { + "name": "importId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The import identifier." + } + ], "get": { - "summary": "List TQA Profiles", - "tags": [ - "TQA Profile" - ], + "summary": "Poll Translation Memory Import", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-tqa-profiles-response" + "$ref": "#/components/schemas/translation-memory-import-poll-response" } } }, @@ -14642,7 +16940,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input in the path parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -14671,8 +16969,16 @@ } } }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", + "403": { + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the entry.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": The resource could not be found by identifier.", "content": { "application/json": { "schema": { @@ -14686,61 +16992,64 @@ } } } - }, - "operationId": "ListTqaProfiles", - "description": "List TQA Profiles.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/location" - }, - { - "$ref": "#/components/parameters/location-strategy" - }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - }, + }, + "operationId": "PollTMImport", + "description": "Polls a Translation Memory import operation. The import is finished when the status is `done`.", + "parameters": [ { - "$ref": "#/components/parameters/sort" + "$ref": "#/components/parameters/Authorization" }, { - "$ref": "#/components/parameters/fields" + "$ref": "#/components/parameters/X-LC-Tenant" } + ], + "tags": [ + "Translation Memory Import" ] } }, - "/tqa-profiles/{profileId}": { - "get": { - "summary": "Get TQA Profile", - "tags": [ - "TQA Profile" - ], + "/translation-memory/{translationMemoryId}/exports": { + "parameters": [ + { + "$ref": "#/components/parameters/translationMemoryId" + } + ], + "post": { + "summary": "Export Translation Memory", + "operationId": "ExportTranslationMemory", "responses": { "200": { - "description": "OK", + "description": "OK - returned when the `status` field has one of the following values: `failed`, `done`, `cancelled`", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tqa-profile" + "$ref": "#/components/schemas/translation-memory-export-response" } } - }, + } + }, + "202": { + "description": "Accepted - returned when the `status` field has one of the following values: `queued`, `inProgress`", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/translation-memory-export-response" + } + } } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\n* \"invalid\": Invalid input in the request parameters. Either the `translationMemoryId` or the `sourceLanguageCode`/`targetLanguageCode` are invalid.", "content": { "application/json": { "schema": { @@ -14756,94 +17065,102 @@ }, "401": { "description": "The user could not be identified.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to export the translation memory.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": The resource could not be found by identifier.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": the User could not be found by identifier.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } } }, - "operationId": "GetTqaProfile", - "description": "Get a TQA Profile By identifier.", + "description": "Generates an asynchronous export operation.\nUse the [Poll Translation Memory Export](../reference/Public-API.v1.json/paths/~1translation-memory~1exports~1{exportId}/get) endpoint to poll until the export status is `done`.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/translation-memory-export-request" + } + } + } + }, + "tags": [ + "Translation Memory Export" ] - }, + } + }, + "/translation-memory/exports/{exportId}": { "parameters": [ { - "$ref": "#/components/parameters/profileId" + "$ref": "#/components/parameters/exportId" } - ] - }, - "/translation-memory/{translationMemoryId}": { + ], "get": { - "summary": "Get Translation Memory", + "summary": "Poll Translation Memory Export", "tags": [ - "Translation Memory" + "Translation Memory Export" ], "responses": { "200": { - "description": "", + "description": "OK", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/translation-memory" + "$ref": "#/components/schemas/translation-memory-poll-export-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\n* \"invalid\": Invalid `exportId` in the path parameters.", "content": { "application/json": { "schema": { @@ -14859,78 +17176,92 @@ }, "401": { "description": "The user could not be identified.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } }, "403": { "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the resource.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": The resource could not be found by identifier.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": The translation memory could not be found by identifier.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } } }, - "operationId": "GetTranslationMemory", - "description": "Get a single Translation Memory by identifier.", + "operationId": "PollTranslationMemoryExport", + "description": "Polls a translation memory via an export operation. The exported translation memory can be downloaded once the status is `done`.", "parameters": [ - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, { "$ref": "#/components/parameters/Authorization" }, { - "$ref": "#/components/parameters/fields" + "$ref": "#/components/parameters/X-LC-Tenant" } ] - }, - "put": { - "summary": "Update Translation Memory", - "operationId": "UpdateTranslationMemory", + } + }, + "/translation-memory/exports/{exportId}/download": { + "parameters": [ + { + "$ref": "#/components/parameters/exportId" + } + ], + "get": { + "summary": "Download Exported Translation Memory", + "tags": [ + "Translation Memory Export" + ], "responses": { - "204": { - "description": "No Content", + "200": { + "description": "OK", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } + }, + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"minSize\": Minimum size not met for the value mentioned in the \"name\" field on the error response.", + "description": "Error codes:\n* \"invalid\": Invalid `exportId` in the path parameters.", "content": { "application/json": { "schema": { @@ -14946,78 +17277,75 @@ }, "401": { "description": "The user could not be identified.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } }, "403": { "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the resource.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": The resource could not be found by identifier.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": The translation memory could not be found by identifier.", + }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - } - }, - "description": "Updates a Translation Memory. We recommend reading this page too [Updating data with PUT](../docs/Updating-data-with-PUT.md).", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/translation-memory-update-request" - } } } }, + "operationId": "DownloadExportedTranslationMemory", + "description": "Downloads the exported translation memory in the `tmx.gz` format when the poll operation status is `done`.", "parameters": [ { - "$ref": "#/components/parameters/X-LC-Tenant" + "$ref": "#/components/parameters/Authorization" }, { - "$ref": "#/components/parameters/Authorization" + "$ref": "#/components/parameters/X-LC-Tenant" } - ], - "tags": [ - "Translation Memory" ] - }, - "delete": { - "summary": "Delete Translation Memory", - "operationId": "DeleteTranslationMemory", - "responses": { - "204": { - "description": "No Content", + } + }, + "/translations/lookup": { + "post": { + "summary": "Lookup", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/translation-search-response" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -15025,7 +17353,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes: \n\n * \"empty\": Empty value for variable mentioned in the \"name\" field on the error response. \n\n * \"invalid\": Invalid input mentioned in the \"name\" field on the error response.", "content": { "application/json": { "schema": { @@ -15055,7 +17383,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the resource.", + "description": "Unauthorized to use translation engine.", "content": { "application/json": { "schema": { @@ -15070,7 +17398,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": The translation memory could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": - translation engine not found.", "content": { "application/json": { "schema": { @@ -15085,44 +17413,51 @@ } } }, - "description": "Deletes a Translation Memory.", + "operationId": "TranslationsLookup", + "x-stoplight": { + "id": "e1b35d4bkp1dq" + }, + "tags": [ + "Translation" + ], + "description": "Translates a phrase in plain text or a BCM fragment containing a single segment. The translated content will be returned as a BCM [fragment](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html) or [term](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Skeleton.Term.html). \n\n For detailed concepts and examples see the [Translation API](../docs/translations/Translations.md) page.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/translation-search-request" + } + } + }, + "description": "Learn more about Translation Memory standard penalties [here](https://docs.rws.com/en-US/trados-enterprise-accelerate-791595/trados-tm-penalties-1159224).\r\n
\r\nLearn more about Translation Unit status penalties [here](https://docs.rws.com/en-US/trados-enterprise-accelerate-791595/editing-project-tm-and-verification-settings-800732)." + }, "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, { "$ref": "#/components/parameters/X-LC-Tenant" }, { - "$ref": "#/components/parameters/Authorization" + "$ref": "#/components/parameters/fields" } - ], - "tags": [ - "Translation Memory" ] }, - "parameters": [ - { - "schema": { - "type": "string" - }, - "name": "translationMemoryId", - "in": "path", - "required": true, - "description": "The identifier of the translation memory" - } - ] + "parameters": [] }, - "/translation-memory/{translationMemoryId}/copy": { + "/translations/concordance": { "post": { - "summary": "Copy Translation Memory", + "summary": "Concordance", "tags": [ - "Translation Memory" + "Translation" ], "responses": { "200": { - "description": "", + "description": "OK.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/translation-memory" + "$ref": "#/components/schemas/translation-concordance-search-response" } } }, @@ -15133,7 +17468,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes: \n\n * \"empty\": Empty value for variable mentioned in the \"name\" field on the error response. \n\n * \"invalid\": Invalid input mentioned in the \"name\" field on the error response.", "content": { "application/json": { "schema": { @@ -15163,7 +17498,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the resource.", + "description": "Unauthorized to use translation engine.", "content": { "application/json": { "schema": { @@ -15178,7 +17513,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": The translation memory could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": - translation engine not found.", "content": { "application/json": { "schema": { @@ -15193,45 +17528,48 @@ } } }, - "operationId": "CopyTranslationMemory", - "description": "Creates a copy of a Translation Memory. The name will be suffixed with ' (Copy) '", + "operationId": "TranslationsConcordanceSearch", + "x-stoplight": { + "id": "w7q4r8d7hum33" + }, + "description": "Performs a concordance search for a given text within the TM linked to the specified translation engine. The translated content will be returned as a BCM [fragment](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html) or [term](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Skeleton.Term.html). \n\n For detailed concepts and examples see the [Translation API](../docs/translations/Translations.md) page.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/translation-concordance-search-request" + } + } + }, + "description": "Learn more about Translation Memory standard penalties [here](https://docs.rws.com/en-US/trados-enterprise-accelerate-791595/trados-tm-penalties-1159224).\r\n
\r\nLearn more about Translation Unit status penalties [here](https://docs.rws.com/en-US/trados-enterprise-accelerate-791595/editing-project-tm-and-verification-settings-800732)." + }, "parameters": [ { - "$ref": "#/components/parameters/X-LC-Tenant" + "$ref": "#/components/parameters/Authorization" }, { - "$ref": "#/components/parameters/Authorization" + "$ref": "#/components/parameters/X-LC-Tenant" }, { "$ref": "#/components/parameters/fields" } ] }, - "parameters": [ - { - "schema": { - "type": "string" - }, - "name": "translationMemoryId", - "in": "path", - "required": true, - "description": "The identifier of the translation memory" - } - ] + "parameters": [] }, - "/translation-memory": { - "get": { - "summary": "List Translation Memories", + "/translations/translation-unit": { + "put": { + "summary": "Update Translation Unit", "tags": [ - "Translation Memory" + "Translation" ], "responses": { "200": { - "description": "", + "description": "Ok", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-translation-memories-reposne" + "$ref": "#/components/schemas/translation-unit-add-update-response" } } }, @@ -15242,7 +17580,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes: \n\n * \"empty\": Empty value for variable mentioned in the \"name\" field on the error response. \n\n * \"invalid\": Invalid input mentioned in the \"name\" field on the error response.", "content": { "application/json": { "schema": { @@ -15271,8 +17609,23 @@ } } }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range.", + "403": { + "description": "Unauthorized to use translation engine.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": - translation engine not found.", "content": { "application/json": { "schema": { @@ -15287,45 +17640,44 @@ } } }, - "operationId": "ListTranslationMemories", - "description": "Retrieves all the Translation Memories.", + "operationId": "TranslationsUpdate", + "x-stoplight": { + "id": "pyjdd2h02zm8z" + }, + "description": "Updates a translation unit. The system identifies matching translation units in the TM based on the provided BCM [fragment](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html). \n\n For detailed concepts and examples see the [Translation API](../docs/translations/Translations.md) page.", "parameters": [ - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, { "$ref": "#/components/parameters/Authorization" }, { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - }, - { - "$ref": "#/components/parameters/location" - }, - { - "$ref": "#/components/parameters/location-strategy" - }, - { - "$ref": "#/components/parameters/sort" + "$ref": "#/components/parameters/X-LC-Tenant" }, { "$ref": "#/components/parameters/fields" } - ] + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/translation-update-request" + } + } + } + } }, "post": { - "summary": "Create Translation Memory", - "operationId": "CreateTranslationMemory", + "summary": "Add Translation Unit", + "tags": [ + "Translation" + ], "responses": { - "201": { - "description": "", + "200": { + "description": "Ok", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/translation-memory-base" + "$ref": "#/components/schemas/translation-unit-add-update-response" } } }, @@ -15336,7 +17688,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"minSize\": Minimum size not met for the value mentioned in the \"name\" field on the error response.", + "description": "Error codes: \n\n * \"empty\": Empty value for variable mentioned in the \"name\" field on the error response. \n\n * \"invalid\": Invalid input mentioned in the \"name\" field on the error response.", "content": { "application/json": { "schema": { @@ -15366,7 +17718,22 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the resource.", + "description": "Unauthorized to use translation engine.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": - translation engine not found.", "content": { "application/json": { "schema": { @@ -15381,13 +17748,14 @@ } } }, - "description": "Create a new Translation Memory.", + "operationId": "TranslationsAdd", + "description": "Adds a translation unit. The system identifies matching translation units in the TM based on the provided BCM [fragment](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html). \n\n For detailed concepts and examples see the [Translation API](../docs/translations/Translations.md) page.", "parameters": [ { - "$ref": "#/components/parameters/X-LC-Tenant" + "$ref": "#/components/parameters/Authorization" }, { - "$ref": "#/components/parameters/Authorization" + "$ref": "#/components/parameters/X-LC-Tenant" }, { "$ref": "#/components/parameters/fields" @@ -15397,21 +17765,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/translation-memory-create-request" + "$ref": "#/components/schemas/translation-add-request" } } } - }, - "tags": [ - "Translation Memory" - ] + } } }, - "/translation-memory/field-templates": { + "/users/me": { "get": { - "summary": "List Field Templates", "tags": [ - "Translation Memory" + "User" + ], + "summary": "Get my User", + "description": "Retrieves the authenticated user.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } ], "responses": { "200": { @@ -15419,7 +17796,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-translation-memory-field-templates" + "$ref": "#/components/schemas/user" } } }, @@ -15458,78 +17835,51 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } } }, - "operationId": "ListFieldTemplates", + "operationId": "GetMyUser" + } + }, + "/users": { + "get": { + "tags": [ + "User" + ], + "summary": "List Users", + "description": "Retrieves a list of all the users in an account.", "parameters": [ { - "$ref": "#/components/parameters/top" + "$ref": "#/components/parameters/Authorization" }, { - "$ref": "#/components/parameters/skip" + "$ref": "#/components/parameters/X-LC-Tenant" }, { - "$ref": "#/components/parameters/sort" + "$ref": "#/components/parameters/top" }, { - "$ref": "#/components/parameters/location" + "$ref": "#/components/parameters/skip" }, { - "$ref": "#/components/parameters/location-strategy" + "$ref": "#/components/parameters/location" }, { - "$ref": "#/components/parameters/fields" + "$ref": "#/components/parameters/location-strategy" }, { - "$ref": "#/components/parameters/Authorization" + "$ref": "#/components/parameters/sort" }, { - "$ref": "#/components/parameters/X-LC-Tenant" + "$ref": "#/components/parameters/fields" } ], - "description": "Retrieves all the Field Templates." - }, - "parameters": [] - }, - "/translation-memory/field-templates/{fieldTemplateId}": { - "parameters": [ - { - "schema": { - "type": "string" - }, - "name": "fieldTemplateId", - "in": "path", - "required": true, - "description": "The field template identifier" - } - ], - "get": { - "summary": "Get Field Template", - "tags": [ - "Translation Memory" - ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/translation-memory-field-template" + "$ref": "#/components/schemas/list-users-response" } } }, @@ -15569,23 +17919,8 @@ } } }, - "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": The resource could not be found by identifier.", + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", "content": { "application/json": { "schema": { @@ -15600,7 +17935,16 @@ } } }, - "operationId": "GetFieldTemplate", + "operationId": "ListUsers" + } + }, + "/users/{userId}": { + "get": { + "tags": [ + "User" + ], + "summary": "Get User", + "description": "Retrieves a user by identifier.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -15612,30 +17956,13 @@ "$ref": "#/components/parameters/fields" } ], - "description": "Get a single Field Template by identifier." - } - }, - "/translation-memory/{translationMemoryId}/imports": { - "parameters": [ - { - "schema": { - "type": "string" - }, - "name": "translationMemoryId", - "description": "The identifier of the Translation Memory.", - "in": "path", - "required": true - } - ], - "get": { - "summary": "Get Translation Memory Import History", "responses": { "200": { - "description": "OK", + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-translation-memory-import-history" + "$ref": "#/components/schemas/user" } } }, @@ -15646,22 +17973,24 @@ } }, "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } } }, "401": { "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -15669,7 +17998,7 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the entry.", + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", "content": { "application/json": { "schema": { @@ -15684,7 +18013,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", + "description": "error codes:\n* \"notFound\": the User could not be found by identifier.", "content": { "application/json": { "schema": { @@ -15699,68 +18028,49 @@ } } }, - "operationId": "GetTMImportHistory", - "description": "Gets the import history for a translation memory. It returns the history of last 7 days.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" - }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - } - ], - "tags": [ - "Translation Memory Import" - ] + "operationId": "GetUser" }, - "post": { - "summary": "Import Translation Memory", - "operationId": "ImportTranslationMemory", + "parameters": [ + { + "$ref": "#/components/parameters/userId" + } + ] + }, + "/.well-known/jwks.json": { + "get": { + "summary": "List Public Keys", + "tags": [ + "Public Keys" + ], "responses": { "200": { - "description": "OK - returned when the `status` field has one of the following values: `failed`, `done`, `cancelled`", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/translation-memory-import-response" - }, - "examples": { - "import-termbase-ok": { - "value": { - "id": "test-import-id", - "status": "queued" - } - } - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "202": { - "description": "Accepted - returned when the `status` field has one of the following values: `queued`, `inProgress`", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/translation-memory-import-response" + "$ref": "#/components/schemas/well-known-jwks-response" }, "examples": { - "import-termbase-ok": { + "list-keys-ok": { "value": { - "id": "test-import-id", - "status": "queued" + "keys": [ + { + "kty": "test-kty-1", + "n": "test-n-1", + "e": "test-e-1", + "alg": "test-alg-1", + "kid": "test-kid-1", + "use": "test-use-1" + }, + { + "kty": "test-kty-2", + "n": "test-n-2", + "e": "test-e-2", + "alg": "test-alg-2", + "kid": "test-kid-2", + "use": "test-use-2" + } + ] } } } @@ -15772,23 +18082,8 @@ } } }, - "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query/form parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty mandatory value mentioned in the \"name\" field on the error response.\n* \"multiPartOrder\": The multipart order in the body is not correct. The `properties` must be first and then, file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "401": { - "description": "The user could not be identified.", + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range.", "content": { "application/json": { "schema": { @@ -15801,18 +18096,37 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": Not authorized to import translation memories.", + } + }, + "operationId": "ListPublicKeys", + "description": "List all available Public Keys." + } + }, + "/.well-known/jwks.json/{kid}": { + "get": { + "summary": "Get Public Key", + "tags": [ + "Public Keys" + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/error-response" - } - }, - "application/xml": { - "schema": { - "$ref": "#/components/schemas/error-response" + "$ref": "#/components/schemas/jwk" + }, + "examples": { + "get-key-ok": { + "value": { + "kty": "test-kty", + "n": "test-n", + "e": "test-e", + "alg": "test-alg", + "kid": "test-kid", + "use": "test-use" + } + } } } }, @@ -15823,7 +18137,7 @@ } }, "404": { - "description": "Error codes:\n* \"notFound\": The resource could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the public key could not be found by identifier.", "content": { "application/json": { "schema": { @@ -15836,68 +18150,48 @@ "$ref": "#/components/headers/X-LC-TraceId" } } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "required": [ - "properties", - "file" - ], - "properties": { - "properties": { - "$ref": "#/components/schemas/translation-memory-import-request" - }, - "file": { - "type": "string", - "format": "binary", - "description": "The file (binary string) to import into the translation memory.
Accepted file types: .tmx, .sdltm, .zip, .tmx.gz, .sdlxliff" - } - } - }, - "examples": {} - } - }, - "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." - }, - "description": "Generates an asynchronous import operation. \n
\n
Read more about prerequisites and limitations on the [official documentation center](https://docs.rws.com/791595/741139/trados-enterprise/importing-tm-content).\n
\nNote: The order of the multipart form parameter must be implemented as such: properties first, file second.\n
\nUse the Poll Translation Memory Import endpoint to poll until the import status is `done`.
\nTo track the progress of the import please refer to [Poll Translation Memory Import](../reference/Public-API.v1.json/paths/~1translation-memory~1imports~1{importId}/get).\n", - "tags": [ - "Translation Memory Import" - ] - } - }, - "/translation-memory/imports/{importId}": { + } + }, + "operationId": "GetPublicKey", + "description": "Retrieves a public key by it's identifier." + }, "parameters": [ { - "name": "importId", - "in": "path", - "required": true, "schema": { "type": "string" }, - "description": "The import identifier." + "name": "kid", + "in": "path", + "required": true, + "description": "The key identifier." } - ], + ] + }, + "/workflows/{workflowId}": { "get": { - "summary": "Poll Translation Memory Import", + "tags": [ + "Workflow" + ], + "summary": "Get Workflow", + "description": "Retrieves a workflow by identifier.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], "responses": { "200": { - "description": "OK", + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/translation-memory-import-poll-response" + "$ref": "#/components/schemas/workflow" } } }, @@ -15908,7 +18202,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the path parameter mentioned in the “name” field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -15938,15 +18232,17 @@ } }, "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the entry.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the workflow.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } } } }, "404": { - "description": "Error codes:\n* \"notFound\": The resource could not be found by identifier.", + "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", "content": { "application/json": { "schema": { @@ -15961,8 +18257,14 @@ } } }, - "operationId": "PollTMImport", - "description": "Polls a Translation Memory import operation. The import is finished when the status is `done`.", + "operationId": "GetWorkflow" + }, + "put": { + "tags": [ + "Workflow" + ], + "summary": "Update Workflow", + "description": "Updates the workflow in terms of: name, description, and task configuration (and its details). Observe the rules of [JSON Merge Patch Semantics](https://tools.ietf.org/html/rfc7386).", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -15971,23 +18273,27 @@ "$ref": "#/components/parameters/X-LC-Tenant" } ], - "tags": [ - "Translation Memory Import" - ] - } - }, - "/translation-memory/{translationMemoryId}/exports": { - "parameters": [ - { - "$ref": "#/components/parameters/translationMemoryId" - } - ], - "post": { - "summary": "Export Translation Memory", - "operationId": "ExportTranslationMemory", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/workflow-update-request" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK - returned when the `status` field has one of the following values: `failed`, `done`, `cancelled`", + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the body parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty input in the body parameter mentioned in the \"name\" field on the error response.\n* \"limit.exceeded\": a maximum number of users per task was assigned\n", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -15996,13 +18302,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/translation-memory-export-response" + "type": "object", + "$ref": "#/components/schemas/error-response" } } } }, - "202": { - "description": "Accepted - returned when the `status` field has one of the following values: `queued`, `inProgress`", + "401": { + "description": "The user could not be identified.", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -16011,13 +18318,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/translation-memory-export-response" + "type": "object", + "$ref": "#/components/schemas/error-response" } } } }, - "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the request parameters. Either the `translationMemoryId` or the `sourceLanguageCode`/`targetLanguageCode` are invalid.", + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the Workflow.", "content": { "application/json": { "schema": { @@ -16031,38 +18339,23 @@ } } }, - "401": { - "description": "The user could not be identified.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, + "404": { + "description": "Error codes:\n* \"notFound\": the Workflow could not be found by identifier.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to export the translation memory.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } } }, - "404": { - "description": "Error codes:\n* \"notFound\": The resource could not be found by identifier.", + "409": { + "description": "Error codes:\r\n* \"projectPlanChanged\": The associated project has already been changed at the level of `projectPlan.taskConfigurations`. Updating the workflow is no longer possible; the project should be updated to set the relevant `projectPlan.taskConfigurations` fields. \r\n", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -16071,64 +18364,72 @@ "content": { "application/json": { "schema": { + "type": "object", "$ref": "#/components/schemas/error-response" } } } } }, - "description": "Generates an asynchronous export operation.\nUse the [Poll Translation Memory Export](../reference/Public-API.v1.json/paths/~1translation-memory~1exports~1{exportId}/get) endpoint to poll until the export status is `done`.", + "operationId": "UpdateWorkflow" + }, + "parameters": [ + { + "$ref": "#/components/parameters/workflowId" + } + ] + }, + "/workflows": { + "get": { + "tags": [ + "Workflow" + ], + "summary": "List Workflows", + "description": "Retrieves all the workflows in an account.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/location" + }, + { + "$ref": "#/components/parameters/location-strategy" + }, + { + "$ref": "#/components/parameters/sort" + }, + { + "$ref": "#/components/parameters/fields" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/translation-memory-export-request" - } - } - } - }, - "tags": [ - "Translation Memory Export" - ] - } - }, - "/translation-memory/exports/{exportId}": { - "parameters": [ - { - "$ref": "#/components/parameters/exportId" - } - ], - "get": { - "summary": "Poll Translation Memory Export", - "tags": [ - "Translation Memory Export" - ], "responses": { "200": { - "description": "OK", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/translation-memory-poll-export-response" + "$ref": "#/components/schemas/list-workflows-response" } } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } } }, "400": { - "description": "Error codes:\n* \"invalid\": Invalid `exportId` in the path parameters.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", "content": { "application/json": { "schema": { @@ -16144,92 +18445,73 @@ }, "401": { "description": "The user could not be identified.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the resource.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, + } + }, + "416": { + "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": The resource could not be found by identifier.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } } } }, - "operationId": "PollTranslationMemoryExport", - "description": "Polls a translation memory via an export operation. The exported translation memory can be downloaded once the status is `done`.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - } - ] + "operationId": "ListWorkflows" } }, - "/translation-memory/exports/{exportId}/download": { + "/projects/{projectId}/custom-fields/{customFieldKey}": { "parameters": [ { - "$ref": "#/components/parameters/exportId" + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The project identifier." + }, + { + "schema": { + "type": "string" + }, + "name": "customFieldKey", + "in": "path", + "required": true, + "description": "The custom field key." } ], - "get": { - "summary": "Download Exported Translation Memory", - "tags": [ - "Translation Memory Export" - ], + "put": { + "summary": "Update Custom Field", + "operationId": "UpdateCustomField", "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } } }, "400": { - "description": "Error codes:\n* \"invalid\": Invalid `exportId` in the path parameters.", + "description": "Error codes:\n* “invalid”: Invalid input for a readOnly field, with a different value than the deafult one. Also this code is used for invalid input values", "content": { "application/json": { "schema": { @@ -16245,52 +18527,106 @@ }, "401": { "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the Custom field for the Project.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": The authenticated user is not allowed to read the resource.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } - }, + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the Project could not be found by identifier or Custom field key could not be found or does not belong to the desired resource type.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } - } - }, - "404": { - "description": "Error codes:\n* \"notFound\": The resource could not be found by identifier.", + }, "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/custom-field-update-request", + "description": "Thew new value along wit" + } + } + } + }, + "tags": [ + "Project" + ], + "description": "Allows updating individual custom fields on a project.", + "parameters": [] + } + }, + "/translation-domain/service-types": { + "get": { + "summary": "List Service Types", + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/list-translation-service-types-response" + } + } }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error-response" } } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } } } }, - "operationId": "DownloadExportedTranslationMemory", - "description": "Downloads the exported translation memory in the `tmx.gz` format when the poll operation status is `done`.", + "operationId": "ListTranslationServiceTypes", + "x-stoplight": { + "id": "014dsosfughtk" + }, "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -16298,1535 +18634,1681 @@ { "$ref": "#/components/parameters/X-LC-Tenant" } - ] - } - }, - "/users/me": { - "get": { + ], "tags": [ - "User" + "Translation Domain" ], - "summary": "Get my User", - "description": "Retrieves the authenticated user.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" + "description": "List all available service types." + } + } + }, + "components": { + "schemas": { + "account": { + "title": "Account", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The account identifier." }, - { - "$ref": "#/components/parameters/X-LC-Tenant" + "name": { + "type": "string", + "description": "
default
The account name.
", + "x-default-field": true + } + }, + "required": [ + "id" + ] + }, + "add-projects-to-group-request": { + "title": "Add Projects To Group Request", + "type": "object", + "description": "Input for adding projects to group.", + "properties": { + "projects": { + "type": "array", + "description": "The projects to be added to group.", + "items": { + "$ref": "#/components/schemas/project-group-project-request" + } + } + }, + "required": [ + "projects" + ] + }, + "add-projects-to-group-response": { + "title": "Add Projects To Group Response", + "type": "object", + "description": "Add Projects To Group response.", + "properties": { + "id": { + "type": "string", + "description": "The project group identifier." }, - { - "$ref": "#/components/parameters/fields" + "name": { + "type": "string", + "description": "The project group name." + }, + "description": { + "type": "string", + "description": "The project group description." + }, + "status": { + "type": "string", + "description": "The status of the projects in the project group.\n\n- `new`: the group is new created, or all projects in the group have status New\n\n- `inProgress`: at least one project in the group is in progress\n\n- `completed`: all projects in the group have status Completed\n\n- `deleting`: the group is getting deleted and the projects are removing from it", + "enum": [ + "new", + "inProgress", + "completed", + "deleting" + ] + }, + "projects": { + "type": "array", + "description": "The projects in the project group.", + "items": { + "$ref": "#/components/schemas/project-group-project" + } + }, + "location": { + "$ref": "#/components/schemas/folder-v2" + }, + "shortId": { + "type": "string" + }, + "createdAt": { + "type": "string", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the project group was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", + "format": "date-time" + }, + "lastModifiedAt": { + "type": "string", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the project group was modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", + "format": "date-time" } + }, + "required": [ + "id" + ] + }, + "project-cost": { + "title": "Project Cost", + "x-stoplight": { + "id": "34d171ee75017" + }, + "type": "object", + "required": [ + "name", + "type", + "index", + "costPerUnit", + "unitCount" ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/user" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } + "properties": { + "name": { + "type": "string", + "description": "The name of the additional cost. " + }, + "type": { + "$ref": "#/components/schemas/project-cost-type", + "description": "The type of the additional cost." + }, + "index": { + "type": "number", + "description": "The number of the additional cost." + }, + "costPerUnit": { + "type": "number", + "description": "The cost of a unit." + }, + "unitCount": { + "type": "number", + "description": "The number of units for which a cost is applied." + }, + "volumeUnitType": { + "$ref": "#/components/schemas/volume-unit-type", + "description": "The unit type of the 'volume' cost, used as reference for the unit cost." + }, + "conditionalCostType": { + "$ref": "#/components/schemas/conditional-cost-type", + "description": "Only for the Conditional type." + }, + "costOperator": { + "$ref": "#/components/schemas/conditional-cost-operator", + "description": "Only for the Conditional type.", + "x-stoplight": { + "id": "dw5wpcfk70z9c" } }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } + "costVariable": { + "$ref": "#/components/schemas/conditional-cost-variable", + "description": "Only for the Conditional type.", + "x-stoplight": { + "id": "np7a8b8w5ra70" } }, - "401": { - "description": "The user could not be identified.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } + "operand": { + "type": "number", + "description": "Operand of the Conditional type cost." + }, + "serviceTypes": { + "type": "array", + "x-stoplight": { + "id": "gkyey7knc4j3v" }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } + "description": "
default
Array of Service Type identifiers where this additional cost is applied. ", + "items": { + "x-stoplight": { + "id": "3e6kwmu58ut0p" + }, + "type": "string" } + }, + "customUnitName": { + "type": "string", + "x-stoplight": { + "id": "rovgmbrayoltf" + }, + "description": "The name of the custom unit." } + } + }, + "language-cost": { + "title": "Language Cost", + "x-stoplight": { + "id": "28d3xstakbk6t" }, - "operationId": "GetMyUser" - } - }, - "/users": { - "get": { - "tags": [ - "User" + "type": "object", + "required": [ + "name", + "type", + "index", + "costPerUnit", + "unitCount" ], - "summary": "List Users", - "description": "Retrieves a list of all the users in an account.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" + "properties": { + "name": { + "type": "string", + "description": "The name of the additional cost. " }, - { - "$ref": "#/components/parameters/X-LC-Tenant" + "type": { + "$ref": "#/components/schemas/language-cost-type", + "description": "The type of the additional cost." }, - { - "$ref": "#/components/parameters/top" + "index": { + "type": "number", + "description": "The number of the additional cost." }, - { - "$ref": "#/components/parameters/skip" + "costPerUnit": { + "type": "number", + "description": "The cost of a unit." }, - { - "$ref": "#/components/parameters/location" + "unitCount": { + "type": "number", + "description": "The number of units for which a cost is applied." }, - { - "$ref": "#/components/parameters/location-strategy" + "volumeUnitType": { + "$ref": "#/components/schemas/volume-unit-type", + "description": "The unit type of the 'volume' cost, used as reference for the unit cost." }, - { - "$ref": "#/components/parameters/sort" + "conditionalCostType": { + "$ref": "#/components/schemas/conditional-cost-type", + "description": "Only for the Conditional type." }, - { - "$ref": "#/components/parameters/fields" - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/list-users-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } + "costOperator": { + "$ref": "#/components/schemas/conditional-cost-operator", + "description": "Only for the Conditional type.", + "x-stoplight": { + "id": "ak744d5hs26tb" } }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } + "costVariable": { + "$ref": "#/components/schemas/conditional-cost-variable", + "description": "
default
Only for the Conditional type.", + "x-stoplight": { + "id": "la3r0xwre29qy" } }, - "401": { - "description": "The user could not be identified.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } + "operand": { + "type": "number", + "description": "
default
Operand of the Conditional type cost." + }, + "serviceTypes": { + "type": "array", + "x-stoplight": { + "id": "gkyey7knc4j3v" }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } + "description": "
default
Array of Service Type identifiers where this additional cost is applied. ", + "items": { + "x-stoplight": { + "id": "3e6kwmu58ut0p" + }, + "type": "string" } }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } + "customUnitName": { + "type": "string", + "x-stoplight": { + "id": "6o3o1f3p0863z" }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "description": "The name of the custom unit." } - }, - "operationId": "ListUsers" - } - }, - "/users/{userId}": { - "get": { - "tags": [ - "User" - ], - "summary": "Get User", - "description": "Retrieves a user by identifier.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" + } + }, + "analysis-statistics": { + "title": "Analysis Statistics", + "type": "object", + "properties": { + "exactMatch": { + "$ref": "#/components/schemas/count", + "description": "
default
Statistics count.
", + "x-default-field": true }, - { - "$ref": "#/components/parameters/X-LC-Tenant" + "inContextExactMatch": { + "$ref": "#/components/schemas/count", + "description": "
default
Statistics count.
", + "x-default-field": true }, - { - "$ref": "#/components/parameters/fields" - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/user" - } - } + "perfectMatch": { + "$ref": "#/components/schemas/count", + "description": "
default
Statistics count.
", + "x-default-field": true + }, + "new": { + "$ref": "#/components/schemas/count", + "description": "
default
Statistics count.
", + "x-default-field": true + }, + "repetitions": { + "$ref": "#/components/schemas/count", + "description": "
default
Statistics count.
", + "x-default-field": true + }, + "crossDocumentRepetitions": { + "$ref": "#/components/schemas/count", + "description": "
default
Statistics count.
", + "x-default-field": true + }, + "machineTranslation": { + "$ref": "#/components/schemas/count", + "description": "
default
Statistics count.
", + "x-default-field": true + }, + "fuzzyMatch": { + "type": "array", + "items": { + "$ref": "#/components/schemas/fuzzy-count" }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "description": "
default
Statistics count.
", + "x-default-field": true }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - } + "total": { + "$ref": "#/components/schemas/count", + "description": "
default
Statistics count.
", + "x-default-field": true + } + } + }, + "analytics": { + "title": "Analytics", + "type": "object", + "properties": { + "progress": { + "$ref": "#/components/schemas/analytics-progress" }, - "401": { - "description": "The user could not be identified.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } + "overdueStatistics": { + "$ref": "#/components/schemas/analytics-overdue-statistics" + }, + "sourceFileStatistics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/analytics-source-file-statistics" } }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } + "workloadStatistics": { + "$ref": "#/components/schemas/analytics-workload-statistics" + }, + "taskTypeStatistics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/analytics-task-type-statistics" } }, - "404": { - "description": "error codes:\n* \"notFound\": the User could not be found by identifier.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } + "phaseStatistics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/analytics-phase-statistics" } } }, - "operationId": "GetUser" + "description": "Project analytics." }, - "parameters": [ - { - "$ref": "#/components/parameters/userId" + "analytics-progress": { + "title": "Analytics Progress", + "type": "object", + "description": "Overall progress.", + "properties": { + "overall": { + "type": "integer", + "nullable": true, + "description": "
default
The overall progress.
", + "x-default-field": true + } } - ] - }, - "/.well-known/jwks.json": { - "get": { - "summary": "List Public Keys", - "tags": [ - "Public Keys" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/well-known-jwks-response" - }, - "examples": { - "list-keys-ok": { - "value": { - "keys": [ - { - "kty": "test-kty-1", - "n": "test-n-1", - "e": "test-e-1", - "alg": "test-alg-1", - "kid": "test-kid-1", - "use": "test-use-1" - }, - { - "kty": "test-kty-2", - "n": "test-n-2", - "e": "test-e-2", - "alg": "test-alg-2", - "kid": "test-kid-2", - "use": "test-use-2" - } - ] - } - } - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + }, + "analytics-overdue-statistics": { + "title": "Analytics Overdue Statistics", + "type": "object", + "description": "Statistics on overdue work.", + "properties": { + "overdueTasks": { + "type": "integer", + "nullable": true, + "description": "
default
The number of overdue tasks.
", + "x-default-field": true + }, + "dueDateCloseTasks": { + "type": "integer", + "nullable": true, + "description": "
default
The number of tasks closed after the due date.
", + "x-default-field": true + } + } + }, + "analytics-source-file-statistics": { + "title": "Analytics Source File Statistics", + "type": "object", + "description": "Source file statistics grouped by role.", + "properties": { + "role": { + "$ref": "#/components/schemas/file-role", + "description": "
default
The file role.
", + "x-default-field": true + }, + "count": { + "type": "integer", + "nullable": true, + "description": "
default
The file count.
", + "x-default-field": true + } + } + }, + "analytics-workload-statistics": { + "title": "Analytics Workload Statistics", + "type": "object", + "description": "Statistics on workload progress.", + "properties": { + "completed": { + "type": "integer", + "nullable": true, + "description": "
default
", + "x-default-field": true + }, + "total": { + "type": "integer", + "nullable": true, + "description": "
default
", + "x-default-field": true + } + } + }, + "analytics-task-type-statistics": { + "title": "Analytics Task Type Statistics", + "type": "object", + "description": "Task Type statistics grouped.", + "properties": { + "id": { + "type": "string", + "description": "
default
", + "x-default-field": true + }, + "key": { + "type": "string", + "description": "
default
", + "x-default-field": true + }, + "total": { + "type": "integer", + "nullable": true, + "description": "
default
", + "x-default-field": true + }, + "current": { + "type": "integer", + "nullable": true, + "description": "
default
", + "x-default-field": true + }, + "completed": { + "type": "integer", + "nullable": true, + "description": "
default
", + "x-default-field": true + }, + "error": { + "type": "integer", + "nullable": true, + "description": "
default
", + "x-default-field": true + } + } + }, + "analytics-phase-statistics": { + "title": "Analytics Phase Statistics", + "type": "object", + "description": "Statistics for phases grouped.", + "properties": { + "name": { + "type": "string", + "description": "
default
", + "x-default-field": true }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of it's dependencies attempted to retrieve data outside the allowed range.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "total": { + "type": "integer", + "nullable": true, + "description": "
default
", + "x-default-field": true + }, + "completed": { + "type": "integer", + "nullable": true, + "description": "
default
", + "x-default-field": true } - }, - "operationId": "ListPublicKeys", - "description": "List all available Public Keys." - } - }, - "/.well-known/jwks.json/{kid}": { - "get": { - "summary": "Get Public Key", - "tags": [ - "Public Keys" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/jwk" - }, - "examples": { - "get-key-ok": { - "value": { - "kty": "test-kty", - "n": "test-n", - "e": "test-e", - "alg": "test-alg", - "kid": "test-kid", - "use": "test-use" - } - } - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + } + }, + "asynchronous-result": { + "title": "Asynchronous Result", + "type": "object", + "description": "Represents the result of an asynchronous operation, including status and potential error information.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the asynchronous operation." }, - "404": { - "description": "Error codes:\n* \"notFound\": the public key could not be found by identifier.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "status": { + "type": "string", + "description": "The status of the asynchronous operation.", + "enum": [ + "created", + "inProgress", + "completed", + "failed" + ] + }, + "errorMessage": { + "type": "string", + "description": "When the status is 'failed', it contains the error message explaining what went wrong." } }, - "operationId": "GetPublicKey", - "description": "Retrieves a public key by it's identifier." + "required": [ + "id", + "status" + ] }, - "parameters": [ - { - "schema": { - "type": "string" + "count": { + "title": "Count", + "type": "object", + "description": "Statistics count.", + "properties": { + "words": { + "type": "integer", + "description": "
default
Number of words.
", + "nullable": true, + "x-default-field": true }, - "name": "kid", - "in": "path", - "required": true, - "description": "The key identifier." - } - ] - }, - "/workflows/{workflowId}": { - "get": { - "tags": [ - "Workflow" - ], - "summary": "Get Workflow", - "description": "Retrieves a workflow by identifier.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" + "segments": { + "type": "integer", + "description": "
default
Number of segments.
", + "nullable": true, + "x-default-field": true }, - { - "$ref": "#/components/parameters/X-LC-Tenant" + "characters": { + "type": "integer", + "description": "
default
Number of characters.
", + "nullable": true, + "x-default-field": true }, - { - "$ref": "#/components/parameters/fields" - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/workflow" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "placeables": { + "type": "integer", + "description": "
default
Number of placeables.
", + "nullable": true, + "x-default-field": true }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "tags": { + "type": "integer", + "description": "
default
Number of tags.
", + "nullable": true, + "x-default-field": true + } + } + }, + "configuration-resource-request": { + "title": "Configuration Resource Request", + "type": "object", + "description": "Resource configuration properties.", + "properties": { + "id": { + "type": "string", + "description": "Configuration resource identifier." }, - "401": { - "description": "The user could not be identified.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } + "strategy": { + "type": "string", + "description": "\"copy\": A copy of the resource will be used for the project execution. This is the default strategy.\n\n\"use\": The actual resource will be used for the project execution.", + "default": "copy", + "enum": [ + "copy", + "use" + ] + } + }, + "required": [ + "id" + ] + }, + "completion-config-request": { + "title": "Completion Configuration", + "x-stoplight": { + "id": "9mwe1gdglduma" + }, + "type": "object", + "description": "Completion configuration properties.", + "properties": { + "completeDays": { + "type": "number", + "description": "Number of days until automatic completion of the project. Starting from project creation date.", + "x-stoplight": { + "id": "ceanv1mabx8qq" }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the workflow.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - } + "minimum": 1, + "maximum": 365, + "default": 90 }, - "404": { - "description": "Error codes:\n* \"notFound\": the resource could not be found by identifier.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } + "archiveDays": { + "type": "number", + "x-stoplight": { + "id": "l8bju7xnl0r40" }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - } - }, - "operationId": "GetWorkflow" - }, - "put": { - "tags": [ - "Workflow" - ], - "summary": "Update Workflow", - "description": "Updates the workflow in terms of: name, description, and task configuration (and its details). Observe the rules of [JSON Merge Patch Semantics](https://tools.ietf.org/html/rfc7386).", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" + "minimum": 1, + "maximum": 365, + "default": 90, + "description": "Number of days after project completion when the project will be \r\narchived.." }, - { - "$ref": "#/components/parameters/X-LC-Tenant" + "archiveReminderDays": { + "type": "number", + "x-stoplight": { + "id": "bclu4cm76o4w4" + }, + "minimum": 1, + "maximum": 365, + "default": 7, + "description": "Number of days before archiving when a reminder will be sent." } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/workflow-update-request" - } - } - }, - "required": true + } + }, + "completion-config-response": { + "title": "Completion Configuration", + "x-stoplight": { + "id": "0z2k59nqy13cl" }, - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } - }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the body parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty input in the body parameter mentioned in the \"name\" field on the error response.\n* \"limit.exceeded\": a maximum number of users per task was assigned\n", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } + "type": "object", + "description": "Completion configuration properties.", + "properties": { + "completeDate": { + "$ref": "#/components/schemas/date-time", + "x-stoplight": { + "id": "f7adiaz6qf6b4" }, - "content": { - "application/json": { - "schema": { - "type": "object", - "$ref": "#/components/schemas/error-response" - } - } - } + "description": "
default
" }, - "401": { - "description": "The user could not be identified.", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, - "content": { - "application/json": { - "schema": { - "type": "object", - "$ref": "#/components/schemas/error-response" - } - } - } + "completeDays": { + "type": "number", + "description": "
default
Number of days until automatic completion of the project. Starting from project creation date.
", + "minimum": 1, + "maximum": 365, + "default": 90 }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the Workflow.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } + "archiveDate": { + "$ref": "#/components/schemas/date-time", + "x-stoplight": { + "id": "z7g5nb84eytoc" }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "description": "
default
" }, - "404": { - "description": "Error codes:\n* \"notFound\": the Workflow could not be found by identifier.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } + "archiveDays": { + "type": "number", + "minimum": 1, + "maximum": 365, + "default": 90, + "description": "
default
Number of days after project completion when the workflow will be stopped and the project will enter *archived* state.
", + "x-stoplight": { + "id": "s30y2qk8d359o" } }, - "409": { - "description": "Error codes:\r\n* \"projectPlanChanged\": The associated project has already been changed at the level of `projectPlan.taskConfigurations`. Updating the workflow is no longer possible; the project should be updated to set the relevant `projectPlan.taskConfigurations` fields. \r\n", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - }, - "content": { - "application/json": { - "schema": { - "type": "object", - "$ref": "#/components/schemas/error-response" - } - } + "archiveReminderDays": { + "type": "number", + "minimum": 1, + "maximum": 365, + "default": 7, + "description": "
default
Number of days before workflow stoppage when a reminder will be sent.
", + "x-stoplight": { + "id": "z0iqmdumocd9v" } } + } + }, + "conditional-cost-operator": { + "title": "Conditional Cost Operator", + "x-stoplight": { + "id": "u0in7jsh95abi" }, - "operationId": "UpdateWorkflow" + "enum": [ + "less", + "lessOrEqual", + "greater", + "greaterOrEqual" + ] }, - "parameters": [ - { - "$ref": "#/components/parameters/workflowId" - } - ] - }, - "/workflows": { - "get": { - "tags": [ - "Workflow" - ], - "summary": "List Workflows", - "description": "Retrieves all the workflows in an account.", - "parameters": [ - { - "$ref": "#/components/parameters/Authorization" - }, - { - "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" - }, - { - "$ref": "#/components/parameters/location" + "conditional-cost-type": { + "title": "Conditional Cost Type", + "x-stoplight": { + "id": "br34ph3abddli" + }, + "enum": [ + "absolute", + "relative", + "percentage" + ] + }, + "conditional-cost-variable": { + "title": "Conditional Cost Variable", + "x-stoplight": { + "id": "e97vbe2580u68" + }, + "enum": [ + "wordCount", + "runningTotal" + ] + }, + "customer": { + "title": "Customer", + "type": "object", + "description": "Customer resource.", + "properties": { + "id": { + "type": "string", + "description": "Customer identifier." }, - { - "$ref": "#/components/parameters/location-strategy" + "name": { + "type": "string", + "description": "
default
Customer name.
", + "x-default-field": true }, - { - "$ref": "#/components/parameters/sort" + "keyContact": { + "$ref": "#/components/schemas/user" }, - { - "$ref": "#/components/parameters/fields" - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/list-workflows-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "location": { + "$ref": "#/components/schemas/folder-v2" }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } + "ragStatus": { + "x-stoplight": { + "id": "z7v6f1w7qrqdj" }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "enum": [ + "green", + "amber", + "red" + ] }, - "401": { - "description": "The user could not be identified.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } + "customFieldDefinitions": { + "type": "array", + "description": "The custom field definitions.", + "items": { + "$ref": "#/components/schemas/custom-field-resource" } + } + }, + "required": [ + "id" + ] + }, + "custom-field": { + "title": "Custom Field", + "type": "object", + "description": "A Custom Field model.", + "properties": { + "id": { + "type": "string", + "description": "Custom Field identifier." }, - "416": { - "description": "Error codes:\n* \"requestedRangeNotSatisfiable\": The requested entity or one of its dependencies attempted to retrieve data outside the allowed range. Skip+Top might be outside the supported range.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } + "name": { + "type": "string", + "x-stoplight": { + "id": "ln5wrk75uaby5" }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "description": "Custom Field name. (Not available for List Projects, Get Project Template and List Project Templates endpoints)" + }, + "key": { + "type": "string", + "description": "Custom Field friendly key." + }, + "value": { + "type": "object", + "description": "The value of the custom property. A date will be serialised as an ISO_8601 string." } }, - "operationId": "ListWorkflows" - } - }, - "/projects/{projectId}/custom-fields/{customFieldKey}": { - "parameters": [ - { - "name": "projectId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "The project identifier." + "required": [ + "id" + ] + }, + "customer-create-request": { + "title": "Customer Create Request", + "x-stoplight": { + "id": "f8bca95391ffb" }, - { - "schema": { - "type": "string" - }, - "name": "customFieldKey", - "in": "path", - "required": true, - "description": "The custom field key." - } - ], - "put": { - "summary": "Update Custom Field", - "operationId": "UpdateCustomField", - "responses": { - "204": { - "description": "No Content", - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "type": "object", + "description": "Input for Customer creation.\n\n It will create an invitation for an account user account.", + "properties": { + "name": { + "type": "string", + "description": "The name of the customer.\\\nUnsupported characters in the name: `\\` `/` `:` ` *` `?` `\"` `<` `>` `|`", + "maxLength": 50 }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input for a readOnly field, with a different value than the deafult one. Also this code is used for invalid input values", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "location": { + "type": "string", + "description": "The identifier of the parent folder for the customer." }, - "401": { - "description": "The user could not be identified.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "firstName": { + "type": "string", + "description": "Key contact first name. If you provide this field, pleaase also provide email and last name" }, - "403": { - "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the Custom field for the Project.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "lastName": { + "type": "string", + "description": "Key contact last name. If you provide this field, pleaase also provide email and first name" }, - "404": { - "description": "Error codes:\n* \"notFound\": the Project could not be found by identifier or Custom field key could not be found or does not belong to the desired resource type.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error-response" - } - } - }, - "headers": { - "X-LC-TraceId": { - "$ref": "#/components/headers/X-LC-TraceId" - } - } + "email": { + "type": "string", + "description": "Key contact email.. If you provide this field, pleaase also provide first name and last name" } }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/custom-field-update-request", - "description": "Thew new value along wit" + "required": [ + "name" + ] + }, + "customer-update-request": { + "title": "Customer Update Request", + "x-stoplight": { + "id": "03m0q1ecjc9q0" + }, + "type": "object", + "description": "Input for Customer update.\n\n", + "properties": { + "name": { + "type": "string", + "description": "The name of the customer.\\\nUnsupported characters in the name: `\\` `/` `:` ` *` `?` `\"` `<` `>` `|`", + "maxLength": 50 + }, + "keyContactId": { + "type": "string", + "description": "The ID of the account user set as key contact." + }, + "ragStatus": { + "type": "string", + "description": "The color tag used to mark-up a customer in the UI.", + "enum": [ + "green", + "amber", + "red" + ] + }, + "customFieldDefinitions": { + "description": "The Custom Fields", + "type": "array", + "items": { + "$ref": "#/components/schemas/custom-field-resource", + "x-stoplight": { + "id": "jwte0fv6wp2z7" } } + }, + "folderVisibility": { + "type": "string", + "description": "The folder visibility to its subfolders.", + "enum": [ + "default", + "private" + ] } - }, - "tags": [ - "Project" + } + }, + "custom-field-resource": { + "title": "Custom Field Resource", + "type": "object", + "description": "A Custom Field resource model.", + "required": [ + "key", + "value" ], - "description": "Allows updating individual custom fields on a project.", - "parameters": [] - } - } - }, - "components": { - "schemas": { - "account": { - "title": "Account", + "properties": { + "key": { + "type": "string", + "description": "Custom Field friendly key." + }, + "value": { + "type": "object", + "description": "The value of the custom property. A date will be serialized as an ISO_8601 string." + } + } + }, + "custom-field-definition": { + "title": "Custom Field Definition", "type": "object", + "description": "The Custom Field definition.", "properties": { "id": { "type": "string", - "description": "The account identifier." + "description": "The identifier of the Custom Field Definition, generated by the service." }, "name": { "type": "string", - "description": "
default
The account name.
", + "description": "
default
The display name of the Custom Field.
", "x-default-field": true + }, + "key": { + "type": "string", + "description": "The key of the Custom Field, used for querying purposes." + }, + "description": { + "type": "string", + "description": "The description of the Custom Field." + }, + "type": { + "type": "string", + "description": "The value type supported by this Custom Field.", + "enum": [ + "long", + "double", + "boolean", + "date", + "string", + "checkbox", + "longtext", + "picklist", + "multiSelectPicklist" + ], + "nullable": true + }, + "pickListOptions": { + "type": "array", + "description": "Possible values if the type selected is \"picklist\" or \"multiSelectPicklist\".", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "resourceType": { + "type": "string", + "description": "The resource type to which this Custom Field can be applied.", + "enum": [ + "project", + "customer" + ] + }, + "isReadOnly": { + "type": "boolean", + "nullable": true + }, + "defaultValue": { + "type": "string", + "description": "Specifies a default value for this Custom Field. This is required if the \"isReadOnly\" field is True." + }, + "isMandatory": { + "type": "boolean", + "description": "Specifies if this Custom Field is mandatory when creating a resource of the supported type.", + "nullable": true + }, + "location": { + "$ref": "#/components/schemas/folder-v2" } }, "required": [ "id" ] }, - "add-projects-to-group-request": { - "title": "Add Projects To Group Request", + "custom-field-request": { + "title": "Custom Field Request", "type": "object", - "description": "Input for adding projects to group.", + "description": "A Custom Field model used at project creation or project update.", "properties": { - "projects": { + "key": { + "type": "string", + "description": "Custom Field friendly key." + }, + "value": { + "type": "object", + "description": "The value of the custom field. A date will be serialized as a ISO_8601 string. For read only custom fields (`isReadOnly`), it must be set exactly as the `defaultValue` from custom field definition. " + } + }, + "required": [ + "key" + ] + }, + "custom-field-update-request": { + "title": "Custom Field Update Request", + "x-stoplight": { + "id": "69hm58ubq50j6" + }, + "type": "object", + "description": "", + "properties": { + "value": { + "type": "object", + "description": "The value of the custom field. A date will be serialized as a ISO_8601 string. For read only custom fields (`isReadOnly`), it must be set exactly as the `defaultValue` from custom field definition. " + } + }, + "required": [ + "value" + ] + }, + "date-time": { + "type": "string", + "title": "DateTime", + "example": "2022-01-12T12:00:00.000Z", + "description": "UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", + "format": "date-time", + "nullable": true + }, + "error-response": { + "title": "Error Response", + "type": "object", + "description": "Error response properties.", + "properties": { + "message": { + "type": "string", + "description": "Retrieves a descriptive message that shows what went wrong." + }, + "errorCode": { + "type": "string", + "description": "Concise code that describes the nature of the error." + }, + "details": { "type": "array", - "description": "The projects to be added to group.", "items": { - "$ref": "#/components/schemas/project-group-project-request" + "$ref": "#/components/schemas/error-detail-response" } } }, "required": [ - "projects" + "message", + "errorCode" ] }, - "add-projects-to-group-response": { - "title": "Add Projects To Group Response", + "error-detail-response": { + "title": "Error Detail Response", "type": "object", - "description": "Add Projects To Group response.", + "description": "Error detail response properties.", "properties": { - "id": { + "name": { "type": "string", - "description": "The project group identifier." + "description": "" + }, + "code": { + "type": "string", + "description": "" }, + "value": { + "type": "string" + } + } + }, + "translation-error-detail-response": { + "title": "Translation Errors Response", + "type": "object", + "description": "Translation error details response properties.", + "properties": { "name": { "type": "string", - "description": "The project group name." + "description": "
default
", + "x-default-field": true }, - "description": { + "code": { "type": "string", - "description": "The project group description." + "description": "
default
", + "x-default-field": true }, - "status": { + "value": { "type": "string", - "description": "The status of the projects in the project group.\n\n- `new`: the group is new created, or all projects in the group have status New\n\n- `inProgress`: at least one project in the group is in progress\n\n- `completed`: all projects in the group have status Completed\n\n- `deleting`: the group is getting deleted and the projects are removing from it", - "enum": [ - "new", - "inProgress", - "completed", - "deleting" - ] + "description": "
default
", + "x-default-field": true + } + } + }, + "export-quote-report-response": { + "title": "Export Quote Report Response", + "type": "object", + "description": "Export quote report response.", + "properties": { + "id": { + "type": "string", + "description": "The export quote report identifier." + } + } + }, + "failed-task": { + "title": "Failed Task", + "type": "object", + "description": "Failed Task.", + "properties": { + "id": { + "type": "string", + "description": "The failed task identifier." }, - "projects": { + "name": { + "type": "string", + "description": "The failed task name." + }, + "errors": { "type": "array", - "description": "The projects in the project group.", + "description": "The failed task errors.", "items": { - "$ref": "#/components/schemas/project-group-project" + "$ref": "#/components/schemas/task-error" } + } + }, + "required": [ + "id", + "name" + ] + }, + "file-analysis-response": { + "title": "File Analysis Response", + "x-stoplight": { + "id": "jzn363iiki313" + }, + "type": "object", + "required": [ + "status" + ], + "properties": { + "status": { + "x-stoplight": { + "id": "dfww4v5fop36i" + }, + "description": "The status of the file analysis operation.\r\n\r\n`converting` - The files are being converted for analysis.
\r\n`analysis` - Extracting the word count from the files.
\r\n`costEstimation` - Estimating the cost.
\r\n`completed` - The file analysis is completed.
\r\n`error` - The file analysis was unsuccessful. See the `errorMessage` field for more details.", + "enum": [ + "converting", + "analysis", + "costCalculation", + "completed", + "error" + ] }, - "location": { - "$ref": "#/components/schemas/folder-v2" + "wordCount": { + "type": "integer", + "x-stoplight": { + "id": "hprd8di53gl2v" + }, + "description": "
default
The total word count of the files.
", + "x-default-field": true }, - "shortId": { - "type": "string" + "estimatedCosts": { + "$ref": "#/components/schemas/file-analysis-cost-response", + "x-stoplight": { + "id": "z0yw6q0m1yaq3" + }, + "description": "The estimated costs." }, - "createdAt": { - "type": "string", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the project group was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", - "format": "date-time" + "fileStatistics": { + "x-stoplight": { + "id": "0v204bl8ergop" + }, + "description": "
default
The word count breakdown by files.
", + "x-default-field": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/file-analysis-file-statistics", + "x-stoplight": { + "id": "umj4xnnmpqam9" + } + } }, - "lastModifiedAt": { + "errorMessage": { "type": "string", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the project group was modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "format": "date-time" + "x-stoplight": { + "id": "trjzuxk6rorpo" + }, + "description": "The cause of the error when the status is `error`." } + } + }, + "file-analysis-operation-response": { + "x-stoplight": { + "id": "0ptcnthovbi2q" }, + "title": "File Analysis Operation Response", + "type": "object", "required": [ "id" - ] + ], + "properties": { + "id": { + "type": "string", + "x-stoplight": { + "id": "20knift0n9bey" + }, + "description": "The analysis operation id. Use this to poll it's status." + } + } }, - "additional-cost": { - "title": "Additional Cost", + "file-analysis-cost-response": { + "title": "File Analysis Cost Response", + "x-stoplight": { + "id": "w8nmywx87l747" + }, "type": "object", + "required": [ + "total" + ], "properties": { - "name": { - "type": "string", - "description": "The name of the additional cost. " - }, - "type": { + "currencyCode": { "type": "string", - "enum": [ - "volume", - "perTargetLanguage", - "perFile", - "hourly", - "percentage", - "perPage", - "conditional" - ], - "description": "The type of the additional cost." + "x-stoplight": { + "id": "hprd8di53gl2v" + }, + "description": "The currency code (ISO 4217)." }, - "index": { + "total": { "type": "number", - "description": "The number of the additional cost." + "x-stoplight": { + "id": "dfww4v5fop36i" + }, + "description": "The total cost calculated for the provided files and language pairs.
\r\nIt represents the sum of the `translationCosts`, `languageCosts` and `additionalCosts`." }, - "costPerUnit": { + "translationCosts": { "type": "number", - "description": "The cost of a unit." + "x-stoplight": { + "id": "8tiwwuff0g2eh" + }, + "description": "The base translation costs." }, - "unitCount": { + "languageCosts": { "type": "number", - "description": "The number of units for which a cost is applied." - }, - "volumeUnitType": { - "type": "string", - "description": "The unit type of the 'volume' cost, used as reference for the unit cost.", - "enum": [ - "words", - "characters" - ] - }, - "conditionalCostType": { - "type": "string", - "description": "Only for the Conditional type.", - "enum": [ - "absolute", - "relative", - "percentage" - ] - }, - "costOperator": { - "type": "string", - "description": "Only for the Conditional type.", - "enum": [ - "less", - "lessOrEqual", - "greater", - "greaterOrEqual" - ] - }, - "costVariable": { - "type": "string", - "description": "Only for the Conditional type.", - "enum": [ - "wordCount", - "runningTotal" - ] + "x-stoplight": { + "id": "z0yw6q0m1yaq3" + }, + "description": "The additional language costs." }, - "operand": { + "additionalCosts": { "type": "number", - "description": "Operand of the Conditional type cost." + "x-stoplight": { + "id": "ardngvieg6vrm" + }, + "description": "The additional translation costs." } - }, - "required": [ - "name", - "type", - "index", - "costPerUnit", - "unitCount", - "volumeUnitType", - "conditionalCostType", - "costOperator", - "costVariable", - "operand" - ] + } }, - "additional-cost-language": { - "title": "Additional Cost", + "file-analysis-file-statistics": { + "title": "File Analysis File Statistics", "x-stoplight": { - "id": "28d3xstakbk6t" + "id": "67ic0f0jm8by8" }, "type": "object", + "required": [ + "fileId", + "wordCount" + ], "properties": { - "name": { - "type": "string", - "description": "The name of the additional cost. " - }, - "type": { - "type": "string", - "enum": [ - "volume", - "hourly", - "percentage", - "perPage", - "conditional" - ], - "description": "The type of the additional cost." - }, - "index": { - "type": "number", - "description": "
default
The number of the additional cost." - }, - "costPerUnit": { - "type": "number", - "description": "
default
The cost of a unit." - }, - "unitCount": { - "type": "number", - "description": "
default
The number of units for which a cost is applied." - }, - "volumeUnitType": { - "type": "string", - "description": "
default
The unit type of the 'volume' cost, used as reference for the unit cost.", - "enum": [ - "words", - "characters" - ] - }, - "conditionalCostType": { + "fileId": { "type": "string", - "description": "
default
Only for the Conditional type.", - "enum": [ - "absolute", - "relative", - "percentage" - ] + "x-stoplight": { + "id": "2azn3zm063bur" + }, + "description": "The file identifier." }, - "costOperator": { + "wordCount": { + "type": "integer", + "x-stoplight": { + "id": "ivreutiffxph6" + }, + "description": "The number of words in this file." + } + } + }, + "file-processing-configuration": { + "title": "File Processing Configuration", + "type": "object", + "description": "File Processing Configuration resource. (Not available for List Projects endpoint)", + "properties": { + "id": { "type": "string", - "description": "
default
Only for the Conditional type.", - "enum": [ - "less", - "lessOrEqual", - "greater", - "greaterOrEqual" - ] + "description": "The file processing configuration identifier." }, - "costVariable": { + "name": { "type": "string", - "description": "
default
Only for the Conditional type.", - "enum": [ - "wordCount", - "runningTotal" - ] - }, - "operand": { - "type": "number", - "description": "
default
Operand of the Conditional type cost." + "description": "
default
The file processing configuration name.
", + "x-default-field": true }, - "serviceTypes": { - "type": "array", - "x-stoplight": { - "id": "gkyey7knc4j3v" - }, - "description": "
default
Array of task type identifiers where this additional cost is applied.", - "items": { - "x-stoplight": { - "id": "3e6kwmu58ut0p" - }, - "type": "string" - } + "location": { + "$ref": "#/components/schemas/folder-v2" } }, "required": [ - "name", - "type" + "id" ] }, - "analysis-statistics": { - "title": "Analysis Statistics", + "file-type-setting": { + "title": "File Type Setting", + "x-stoplight": { + "id": "twyoqd5uer5g0" + }, "type": "object", "properties": { - "exactMatch": { - "$ref": "#/components/schemas/count", - "description": "
default
Statistics count.
", - "x-default-field": true - }, - "inContextExactMatch": { - "$ref": "#/components/schemas/count", - "description": "
default
Statistics count.
", - "x-default-field": true - }, - "perfectMatch": { - "$ref": "#/components/schemas/count", - "description": "
default
Statistics count.
", - "x-default-field": true - }, - "new": { - "$ref": "#/components/schemas/count", - "description": "
default
Statistics count.
", - "x-default-field": true - }, - "repetitions": { - "$ref": "#/components/schemas/count", - "description": "
default
Statistics count.
", - "x-default-field": true - }, - "crossDocumentRepetitions": { - "$ref": "#/components/schemas/count", - "description": "
default
Statistics count.
", - "x-default-field": true + "id": { + "type": "string", + "description": "The file type setting identifier." }, - "machineTranslation": { - "$ref": "#/components/schemas/count", - "description": "
default
Statistics count.
", + "name": { + "type": "string", + "description": "
default
The file type name.
", "x-default-field": true }, - "fuzzyMatch": { - "type": "array", - "items": { - "$ref": "#/components/schemas/fuzzy-count" - }, - "description": "
default
Statistics count.
", - "x-default-field": true + "description": { + "type": "string" }, - "total": { - "$ref": "#/components/schemas/count", - "description": "
default
Statistics count.
", - "x-default-field": true - } - } - }, - "analytics": { - "title": "Analytics", - "type": "object", - "properties": { - "progress": { - "$ref": "#/components/schemas/analytics-progress" + "typeId": { + "type": "string", + "description": "A short string representation of the file type identifier. The ID displayed in the Trados Cloud Platform UI." }, - "overdueStatistics": { - "$ref": "#/components/schemas/analytics-overdue-statistics" + "enabled": { + "type": "boolean", + "description": "
default
Is this file type setting enabled. Disabled file types will not be included in operations (ex. Scan)
", + "nullable": true, + "x-default-field": true }, - "sourceFileStatistics": { - "type": "array", - "items": { - "$ref": "#/components/schemas/analytics-source-file-statistics" - } + "excluded": { + "type": "boolean", + "description": "Is this file type setting included in the file processing configuration. \n\nFile types will be added to a configuration as excluded = true by default and can be included by a consumer when needed (via the Trados Cloud Platform UI)\n\nExcluded file types will not be included in operations (ex. Scan)", + "nullable": true }, - "workloadStatistics": { - "$ref": "#/components/schemas/analytics-workload-statistics" + "deprecated": { + "type": "boolean", + "description": "This file type setting is planned for deprecation and will be removed in the future.", + "nullable": true }, - "taskTypeStatistics": { - "type": "array", - "items": { - "$ref": "#/components/schemas/analytics-task-type-statistics" - } + "orderNumber": { + "type": "integer", + "description": "The order of the setting in the file type configuration." }, - "phaseStatistics": { + "extensions": { "type": "array", + "description": "A collection of extensions supported by this file type. Ex: \"*.xlsx\"", "items": { - "$ref": "#/components/schemas/analytics-phase-statistics" + "type": "string" } } }, - "description": "Project analytics." + "required": [ + "id" + ], + "description": "" }, - "analytics-progress": { - "title": "Analytics Progress", + "file-upload-response": { + "title": "File Upload Response", "type": "object", - "description": "Overall progress.", "properties": { - "overall": { - "type": "integer", - "nullable": true, - "description": "
default
The overall progress.
", - "x-default-field": true + "id": { + "type": "string", + "description": "The identifier of the uploaded file" + }, + "fileName": { + "type": "string", + "description": "The name of the uploaded file" + }, + "unzipStatus": { + "type": "string", + "enum": [ + "queued", + "extracting", + "extracted", + "unzipError" + ], + "description": "The status of the unzipping operation. You can use this to determine if your .zip file has been extracted successfully." } - } + }, + "required": [ + "id", + "fileName" + ] }, - "analytics-overdue-statistics": { - "title": "Analytics Overdue Statistics", + "file-metadata-response": { + "title": "File Metadata Response", "type": "object", - "description": "Statistics on overdue work.", "properties": { - "overdueTasks": { - "type": "integer", - "nullable": true, - "description": "
default
The number of overdue tasks.
", - "x-default-field": true + "id": { + "type": "string", + "description": "The identifier of the uploaded file" }, - "dueDateCloseTasks": { - "type": "integer", - "nullable": true, - "description": "
default
The number of tasks closed after the due date.
", - "x-default-field": true + "fileName": { + "type": "string", + "description": "The name of the uploaded file" + }, + "unzipStatus": { + "type": "string", + "enum": [ + "queued", + "extracting", + "extracted", + "unzipError" + ], + "description": "The status of the unzipping operation. You can use this to determine if your .zip file has been extracted successfully." + }, + "associatedFiles": { + "type": "array", + "description": "The files that were extracted from the uploaded .zip archive.", + "items": { + "$ref": "#/components/schemas/file-extracted-response" + } } - } + }, + "required": [ + "id", + "fileName" + ] }, - "analytics-source-file-statistics": { - "title": "Analytics Source File Statistics", + "file-extracted-response": { + "title": "File Extracted Response", "type": "object", - "description": "Source file statistics grouped by role.", "properties": { - "role": { - "$ref": "#/components/schemas/file-role", - "description": "
default
The file role.
", - "x-default-field": true + "id": { + "type": "string", + "description": "The identifier of the extracted file." }, - "count": { - "type": "integer", - "nullable": true, - "description": "
default
The file count.
", - "x-default-field": true + "fileName": { + "type": "string", + "description": "The name of the extracted file." + }, + "filePath": { + "type": "string", + "description": "The file path of the extracted file. This is relative to the archive root." } - } + }, + "required": [ + "id", + "fileName", + "filePath" + ] }, - "analytics-workload-statistics": { - "title": "Analytics Workload Statistics", - "type": "object", - "description": "Statistics on workload progress.", - "properties": { - "completed": { - "type": "integer", - "nullable": true, - "description": "
default
", - "x-default-field": true + "file-role": { + "type": "string", + "title": "File-Role", + "enum": [ + "translatable", + "reference", + "localizable", + "unknown" + ], + "nullable": true + }, + "file-version-export": { + "title": "File Version Export", + "description": "File Version Export. The resulted version can be downloaded once the status is completed.", + "allOf": [ + { + "$ref": "#/components/schemas/asynchronous-result" }, - "total": { - "type": "integer", - "nullable": true, - "description": "
default
", - "x-default-field": true + { + "type": "object", + "properties": { + "downloadUrl": { + "type": "string", + "description": "The url where the file can be downloaded." + } + } } - } + ] }, - "analytics-task-type-statistics": { - "title": "Analytics Task Type Statistics", + "file-version-import": { + "title": "File Version Import", + "allOf": [ + { + "$ref": "#/components/schemas/asynchronous-result" + }, + { + "type": "object", + "properties": { + "fileVersionId": { + "type": "string" + } + } + } + ] + }, + "folder": { + "title": "Folder", "type": "object", - "description": "Task Type statistics grouped.", + "description": "Folder used for resource storage.", + "examples": [ + { + "id": "1de8f71c357c4bb5a32626faf5f53ef1", + "name": "consumer_A", + "path": [ + { + "id": "7fb808326daa4bb1988ckedcd0734aa6", + "location": "0e6d1f1aa8df46e6b9b111ca9f388c9e", + "name": "dexters_extensibility_consumer", + "hasParent": true + }, + { + "id": "0e6d1f1aa8df46e6b9b111ca9f388c9e", + "location": "61e801fa3d600fe2cfs12dd08", + "name": "Customers", + "hasParent": true + }, + { + "id": "61e801fa3d600fe2cfs12dd08", + "name": "61e801fa3d600fe2cfs12dd08", + "hasParent": false + } + ] + } + ], + "required": [ + "id" + ], "properties": { "id": { "type": "string", - "description": "
default
", - "x-default-field": true - }, - "key": { - "type": "string", - "description": "
default
", - "x-default-field": true - }, - "total": { - "type": "integer", - "nullable": true, - "description": "
default
", - "x-default-field": true - }, - "current": { - "type": "integer", - "nullable": true, - "description": "
default
", - "x-default-field": true + "description": "The folder identifier." }, - "completed": { - "type": "integer", - "nullable": true, - "description": "
default
", + "name": { + "type": "string", + "description": "
default
The name of the folder.
", "x-default-field": true }, - "error": { - "type": "integer", - "nullable": true, - "description": "
default
", - "x-default-field": true + "hasParent": { + "type": "boolean", + "description": "Indicates if the folder has a parent folder.", + "nullable": true + }, + "path": { + "type": "array", + "x-stoplight": { + "id": "31bd3get7o6hk" + }, + "description": "The hierarchical path. It consists of all the items of the path in reverse order, the parent of the current folder being the first in the list, and the root of the account being the last.", + "items": { + "$ref": "#/components/schemas/folder-path", + "x-stoplight": { + "id": "i4c2vlnydf80m" + } + } } } }, - "analytics-phase-statistics": { - "title": "Analytics Phase Statistics", + "folder-v2": { + "title": "Folder", "type": "object", - "description": "Statistics for phases grouped.", + "description": "Folder used for resource storage.", "properties": { + "id": { + "type": "string", + "description": "The folder identifier." + }, "name": { "type": "string", - "description": "
default
", + "description": "
default
The name of the folder.
", "x-default-field": true }, - "total": { - "type": "integer", - "nullable": true, - "description": "
default
", - "x-default-field": true + "hasParent": { + "type": "boolean", + "description": "Indicates if the folder has a parent folder.", + "nullable": true }, - "completed": { - "type": "integer", - "nullable": true, - "description": "
default
", - "x-default-field": true + "path": { + "type": "array", + "description": "The hierarchical path. It consists of all the items of the path in reverse order, the parent of the current folder being the first in the list, and the root of the account being the last.", + "items": { + "$ref": "#/components/schemas/folder-path" + } } - } + }, + "required": [ + "id" + ] }, - "asynchronous-result": { - "title": "Asynchronous Result", + "folder-path": { + "title": "Folder Path", "type": "object", - "description": "Represents the result of an asynchronous operation, including status and potential error information.", + "description": "Path of a folder.", "properties": { "id": { "type": "string", - "description": "Unique identifier for the asynchronous operation." + "description": "The folder identifier." }, - "status": { + "name": { "type": "string", - "description": "The status of the asynchronous operation.", - "enum": [ - "created", - "inProgress", - "completed", - "failed" - ] + "description": "The name of the folder." }, - "errorMessage": { + "location": { "type": "string", - "description": "When the status is 'failed', it contains the error message explaining what went wrong." + "description": "
default
The location identifier." + }, + "hasParent": { + "type": "boolean", + "description": "
default
Indicates if the folder has a parent folder.", + "nullable": true } }, "required": [ "id", - "status" + "name" ] }, - "count": { - "title": "Count", + "fuzzy-category": { + "title": "Fuzzy Category", "type": "object", - "description": "Statistics count.", + "description": "Fuzzy category range. Example of Fuzzy bands: 100-100%, 95-99%, 85-94%, 75-84%, 50-74%.", "properties": { - "words": { - "type": "integer", - "description": "
default
Number of words.
", - "nullable": true, - "x-default-field": true - }, - "segments": { + "minimum": { "type": "integer", - "description": "
default
Number of segments.
", + "description": "
default
The minimum of the range.
", "nullable": true, "x-default-field": true }, - "characters": { + "maximum": { "type": "integer", - "description": "
default
Number of characters.
", + "description": "
default
The maximum of the range.
", "nullable": true, "x-default-field": true - }, - "placeables": { - "type": "integer", - "description": "
default
Number of placeables.
", - "nullable": true, + } + } + }, + "fuzzy-count": { + "title": "Fuzzy Count", + "type": "object", + "description": "Statistics count for fuzzy matches.", + "properties": { + "count": { + "$ref": "#/components/schemas/count", + "description": "
default
Statistics count.
", "x-default-field": true }, - "tags": { - "type": "integer", - "description": "
default
Number of tags.
", - "nullable": true, + "category": { + "$ref": "#/components/schemas/fuzzy-category", + "description": "
default
Fuzzy category range.
", "x-default-field": true } } }, - "configuration-resource-request": { - "title": "Configuration Resource Request", + "fuzzy-match-category": { + "title": "Fuzzy Match Category", "type": "object", - "description": "Resource configuration properties.", + "description": "Fuzzy match category range.", "properties": { - "id": { - "type": "string", - "description": "Configuration resource identifier." + "minimumMatchValue": { + "type": "integer", + "nullable": true, + "description": "Minimum matching value of this range." }, - "strategy": { - "type": "string", - "description": "\"copy\": A copy of the resource will be used for the project execution. This is the default strategy.\n\n\"use\": The actual resource will be used for the project execution.", - "default": "copy", - "enum": [ - "copy", - "use" - ] + "maximumMatchValue": { + "type": "integer", + "nullable": true, + "description": "Maximum matching value of this range." } }, "required": [ - "id" + "minimumMatchValue", + "maximumMatchValue" ] }, - "completion-config-request": { - "title": "Completion Configuration", - "x-stoplight": { - "id": "9mwe1gdglduma" - }, - "type": "object", - "description": "Completion configuration properties.", - "properties": { - "completeDays": { - "type": "number", - "description": "Number of days until automatic completion of the project. Starting from project creation date.", - "x-stoplight": { - "id": "ceanv1mabx8qq" - }, - "minimum": 1, - "maximum": 365, - "default": 90 - }, - "archiveDays": { - "type": "number", - "x-stoplight": { - "id": "l8bju7xnl0r40" - }, - "minimum": 1, - "maximum": 365, - "default": 90, - "description": "Number of days after project completion when the project will be \r\narchived.." - }, - "archiveReminderDays": { - "type": "number", - "x-stoplight": { - "id": "bclu4cm76o4w4" - }, - "minimum": 1, - "maximum": 365, - "default": 7, - "description": "Number of days before archiving when a reminder will be sent." - } - } - }, - "completion-config-response": { - "title": "Completion Configuration", - "x-stoplight": { - "id": "0z2k59nqy13cl" - }, + "fuzzy-match": { + "title": "Fuzzy Match", "type": "object", - "description": "Completion configuration properties.", + "description": "Fuzzy match model.", "properties": { - "completeDate": { - "$ref": "#/components/schemas/date-time", - "x-stoplight": { - "id": "f7adiaz6qf6b4" - }, - "description": "
default
" - }, - "completeDays": { - "type": "number", - "description": "
default
Number of days until automatic completion of the project. Starting from project creation date.
", - "minimum": 1, - "maximum": 365, - "default": 90 - }, - "archiveDate": { - "$ref": "#/components/schemas/date-time", - "x-stoplight": { - "id": "z7g5nb84eytoc" - }, - "description": "
default
" - }, - "archiveDays": { + "price": { "type": "number", - "minimum": 1, - "maximum": 365, - "default": 90, - "description": "
default
Number of days after project completion when the workflow will be stopped and the project will enter *archived* state.
", - "x-stoplight": { - "id": "s30y2qk8d359o" - } + "description": "Fuzzy match price for the range expressed in the category field." }, - "archiveReminderDays": { - "type": "number", - "minimum": 1, - "maximum": 365, - "default": 7, - "description": "
default
Number of days before workflow stoppage when a reminder will be sent.
", - "x-stoplight": { - "id": "z0iqmdumocd9v" - } + "category": { + "$ref": "#/components/schemas/fuzzy-match-category" } - } + }, + "required": [ + "price", + "category" + ] }, - "customer": { - "title": "Customer", + "group": { + "title": "Group", "type": "object", - "description": "Customer resource.", + "description": "Group of Users.", "properties": { "id": { "type": "string", - "description": "Customer identifier." + "description": "The group identifier." }, "name": { "type": "string", - "description": "
default
Customer name.
", + "description": "
default
The group name.
", "x-default-field": true }, - "keyContact": { - "$ref": "#/components/schemas/user" + "description": { + "type": "string", + "description": "The group description." }, "location": { "$ref": "#/components/schemas/folder-v2" }, - "ragStatus": { - "x-stoplight": { - "id": "z7v6f1w7qrqdj" - }, - "enum": [ - "green", - "amber", - "red" - ] - }, - "customFieldDefinitions": { + "users": { "type": "array", - "description": "The custom field definitions.", "items": { - "$ref": "#/components/schemas/custom-field-resource" + "$ref": "#/components/schemas/user" } } }, @@ -17834,1154 +20316,1165 @@ "id" ] }, - "custom-field": { - "title": "Custom Field", + "group-request": { + "title": "Group Request", "type": "object", - "description": "A Custom Field model.", + "description": "Group of users.", "properties": { "id": { "type": "string", - "description": "Custom Field identifier." + "description": "The group identifier." }, "name": { "type": "string", - "x-stoplight": { - "id": "ln5wrk75uaby5" - }, - "description": "Custom Field name. (Not available for List Projects, Get Project Template and List Project Templates endpoints)" + "description": "The group name." }, - "key": { + "description": { "type": "string", - "description": "Custom Field friendly key." + "description": "The group description." }, - "value": { - "type": "object", - "description": "The value of the custom property. A date will be serialised as an ISO_8601 string." + "location": { + "$ref": "#/components/schemas/resource-folder-request" + }, + "users": { + "type": "array", + "description": "The group users.", + "items": { + "$ref": "#/components/schemas/user-request" + } } }, "required": [ "id" ] }, - "customer-create-request": { - "title": "Customer Create Request", - "x-stoplight": { - "id": "f8bca95391ffb" - }, + "jwk": { + "title": "JWK", "type": "object", - "description": "Input for Customer creation.\n\n It will create an invitation for an account user account.", + "description": "A Json Web Key. \n
\nSee https://datatracker.ietf.org/doc/html/rfc7517 for details.", "properties": { - "name": { + "kty": { "type": "string", - "description": "The name of the customer.\\\nUnsupported characters in the name: `\\` `/` `:` ` *` `?` `\"` `<` `>` `|`", - "maxLength": 50 + "description": "The cryptographic algorithm\n family used with the key." }, - "location": { + "n": { "type": "string", - "description": "The identifier of the parent folder for the customer." + "description": "The RSA public modulus n." }, - "firstName": { + "e": { "type": "string", - "description": "Key contact first name. If you provide this field, pleaase also provide email and last name" + "description": "The RSA public exponent e." }, - "lastName": { + "alg": { "type": "string", - "description": "Key contact last name. If you provide this field, pleaase also provide email and first name" + "description": "The algorithm intended for use with the key." }, - "email": { + "kid": { "type": "string", - "description": "Key contact email.. If you provide this field, pleaase also provide first name and last name" + "description": "The \"kid\" (key ID) parameter is used to match a specific key." + }, + "use": { + "type": "string", + "description": "The \"use\" parameter is employed to indicate whether a public key is used for encrypting data or verifying the signature on data." } - }, - "required": [ - "name" - ] + } }, - "customer-update-request": { - "title": "Customer Update Request", - "x-stoplight": { - "id": "03m0q1ecjc9q0" - }, + "language": { + "title": "Language", "type": "object", - "description": "Input for Customer update.\n\n", + "description": "The language object.", "properties": { - "name": { + "languageCode": { "type": "string", - "description": "The name of the customer.\\\nUnsupported characters in the name: `\\` `/` `:` ` *` `?` `\"` `<` `>` `|`", - "maxLength": 50 + "description": "Language code. ex: \"en-US\", \"de-DE\"." }, - "keyContactId": { + "englishName": { "type": "string", - "description": "The ID of the account user set as key contact." + "description": "
default
Human readable name.
", + "x-default-field": true }, - "ragStatus": { - "type": "string", - "description": "The color tag used to mark-up a customer in the UI.", - "enum": [ - "green", - "amber", - "red" - ] + "direction": { + "type": "string" }, - "customFieldDefinitions": { - "description": "The Custom Fields", - "type": "array", - "items": { - "$ref": "#/components/schemas/custom-field-resource", - "x-stoplight": { - "id": "jwte0fv6wp2z7" - } - } + "parentLanguageCode": { + "type": "string" }, - "folderVisibility": { - "type": "string", - "description": "The folder visibility to its subfolders.", - "enum": [ - "default", - "private" - ] + "defaultSpecificLanguageCode": { + "type": "string" + }, + "isNeutral": { + "type": "boolean", + "nullable": true } - } + }, + "required": [ + "languageCode" + ] }, - "custom-field-resource": { - "title": "Custom Field Resource", + "language-cost-request": { + "title": "Language Cost Request", + "x-stoplight": { + "id": "jnli6j6ma7ofy" + }, "type": "object", - "description": "A Custom Field resource model.", "required": [ - "key", - "value" + "name", + "type" ], "properties": { - "key": { + "name": { "type": "string", - "description": "Custom Field friendly key." + "description": "The name of the additional cost. " }, - "value": { - "type": "object", - "description": "The value of the custom property. A date will be serialized as an ISO_8601 string." - } - } - }, - "custom-field-definition": { - "title": "Custom Field Definition", - "type": "object", - "description": "The Custom Field definition.", - "properties": { - "id": { - "type": "string", - "description": "The identifier of the Custom Field Definition, generated by the service." + "type": { + "$ref": "#/components/schemas/language-cost-type", + "description": "The type of the cost." }, - "name": { - "type": "string", - "description": "
default
The display name of the Custom Field.
", - "x-default-field": true + "index": { + "type": "number", + "description": "The number of the cost." }, - "key": { - "type": "string", - "description": "The key of the Custom Field, used for querying purposes." + "costPerUnit": { + "type": "number", + "description": "The cost of a unit." }, - "description": { - "type": "string", - "description": "The description of the Custom Field." + "unitCount": { + "type": "number", + "description": "The number of units for which a cost is applied." }, - "type": { - "type": "string", - "description": "The value type supported by this Custom Field.", - "enum": [ - "long", - "double", - "boolean", - "date", - "string", - "checkbox", - "longtext", - "picklist", - "multiSelectPicklist" - ], - "nullable": true + "volumeUnitType": { + "$ref": "#/components/schemas/volume-unit-type", + "description": "The unit type of the 'volume' cost, used as reference for the unit cost." }, - "pickListOptions": { - "type": "array", - "description": "Possible values if the type selected is \"picklist\" or \"multiSelectPicklist\".", - "uniqueItems": true, - "items": { - "type": "string" - } + "conditionalCostType": { + "$ref": "#/components/schemas/conditional-cost-type", + "description": "Only for the Conditional type." }, - "resourceType": { - "type": "string", - "description": "The resource type to which this Custom Field can be applied.", - "enum": [ - "project", - "customer" - ] + "conditionalCostOperator": { + "$ref": "#/components/schemas/conditional-cost-operator", + "description": "Only for the Conditional type." }, - "isReadOnly": { - "type": "boolean", - "nullable": true + "conditionalCostVariable": { + "$ref": "#/components/schemas/conditional-cost-variable", + "description": "Only for the Conditional type." + }, + "operand": { + "type": "number", + "description": "Operand of the Conditional type cost." + }, + "serviceTypes": { + "type": "array", + "x-stoplight": { + "id": "pm59yzs7tif7v" + }, + "description": "Array of Service Type identifiers where this cost is applied.", + "items": { + "x-stoplight": { + "id": "24m354vpsw2oa" + }, + "type": "string" + } }, - "defaultValue": { + "customUnitName": { "type": "string", - "description": "Specifies a default value for this Custom Field. This is required if the \"isReadOnly\" field is True." - }, - "isMandatory": { - "type": "boolean", - "description": "Specifies if this Custom Field is mandatory when creating a resource of the supported type.", - "nullable": true - }, - "location": { - "$ref": "#/components/schemas/folder-v2" + "x-stoplight": { + "id": "5khq8y9o6v7pg" + }, + "maxLength": 100, + "description": "The name of the custom unit. Required when `volumeUnitType` is `custom`." } + } + }, + "language-cost-type": { + "title": "Language Cost Type", + "x-stoplight": { + "id": "95486073d14e0" }, - "required": [ - "id" + "enum": [ + "volume", + "hourly", + "percentage", + "perPage", + "conditional", + "adhoc", + "adhocVolume" ] }, - "custom-field-request": { - "title": "Custom Field Request", + "language-direction": { + "title": "Language Direction", "type": "object", - "description": "A Custom Field model used at project creation or project update.", + "description": "A Language Direction.", "properties": { - "key": { + "id": { "type": "string", - "description": "Custom Field friendly key." + "description": "The language direction identifier." }, - "value": { - "type": "object", - "description": "The value of the custom field. A date will be serialized as a ISO_8601 string. For read only custom fields (`isReadOnly`), it must be set exactly as the `defaultValue` from custom field definition. " + "sourceLanguage": { + "$ref": "#/components/schemas/language" + }, + "targetLanguage": { + "$ref": "#/components/schemas/language" + }, + "analysisStatistics": { + "$ref": "#/components/schemas/analysis-statistics" } }, "required": [ - "key" + "id", + "sourceLanguage", + "targetLanguage" ] }, - "custom-field-update-request": { - "title": "Custom Field Update Request", + "language-direction-cost-request": { + "title": "Language Direction Cost Request", "x-stoplight": { - "id": "69hm58ubq50j6" + "id": "e9lv9sdx92twt" }, "type": "object", - "description": "", - "properties": { - "value": { - "type": "object", - "description": "The value of the custom field. A date will be serialized as a ISO_8601 string. For read only custom fields (`isReadOnly`), it must be set exactly as the `defaultValue` from custom field definition. " - } - }, "required": [ - "value" - ] - }, - "date-time": { - "type": "string", - "title": "DateTime", - "example": "2022-01-12T12:00:00.000Z", - "description": "UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", - "format": "date-time", - "nullable": true - }, - "error-response": { - "title": "Error Response", - "type": "object", - "description": "Error response properties.", + "sourceLanguage", + "targetLanguage" + ], "properties": { - "message": { + "sourceLanguage": { "type": "string", - "description": "Retrieves a descriptive message that shows what went wrong." + "description": "The source language code. For example: \"en-US\", \"de-DE\"." }, - "errorCode": { + "targetLanguage": { "type": "string", - "description": "Concise code that describes the nature of the error." + "description": "The target language code. For example: \"en-US\", \"de-DE\"." }, - "details": { + "contextMatch": { + "type": "number", + "description": "The price of context matches.", + "x-default-field": true + }, + "exactMatch": { + "type": "number", + "description": "The price of exact matches.", + "x-default-field": true + }, + "new": { + "description": "The price of new matches.", + "type": "number", + "x-default-field": true + }, + "perfectMatch": { + "type": "number", + "description": "The price of PerfectMatches.", + "x-default-field": true + }, + "repetition": { + "type": "number", + "description": "The price of repetition matches.", + "x-default-field": true + }, + "machineTranslation": { + "type": "number", + "description": "The price of machine translation matches.", + "x-default-field": true + }, + "pricingUnit": { + "$ref": "#/components/schemas/pricing-unit-type", + "x-default-field": true, + "description": "The type of the pricing unit. If not specified, `words` will be used as the default value." + }, + "fuzzyMatches": { "type": "array", + "x-default-field": true, + "description": "All fuzzyMatches categories should be the same for all the language directions.", "items": { - "$ref": "#/components/schemas/error-detail-response" + "$ref": "#/components/schemas/fuzzy-match", + "x-stoplight": { + "id": "0m8m8t4mg06hy" + } + } + }, + "additionalCosts": { + "x-default-field": true, + "description": "Additional costs applied at language level.", + "type": "array", + "items": { + "$ref": "#/components/schemas/language-cost-request", + "x-stoplight": { + "id": "p0j2ohoyogy3q" + } } } - }, - "required": [ - "message", - "errorCode" - ] + } }, - "error-detail-response": { - "title": "Error Detail Response", + "language-direction-no-statistics": { + "title": "Language Direction", + "x-stoplight": { + "id": "o2ahlu8d180l0" + }, "type": "object", - "description": "Error detail response properties.", + "description": "A Language Direction.", "properties": { - "name": { + "id": { "type": "string", - "description": "" + "description": "The language direction identifier." }, - "code": { - "type": "string", - "description": "" + "sourceLanguage": { + "$ref": "#/components/schemas/language" }, - "value": { - "type": "string" + "targetLanguage": { + "$ref": "#/components/schemas/language" } - } + }, + "required": [ + "id", + "sourceLanguage", + "targetLanguage" + ] }, - "export-quote-report-response": { - "title": "Export Quote Report Response", + "language-direction-item": { + "title": "Language Direction Item", "type": "object", - "description": "Export quote report response.", + "description": "", "properties": { "id": { "type": "string", - "description": "The export quote report identifier." + "description": "The language direction identifier." } - } + }, + "required": [ + "id" + ] }, - "failed-task": { - "title": "Failed Task", + "language-direction-cost": { + "title": "Language Direction Cost", + "x-stoplight": { + "id": "a0c8ffb7ad3c9" + }, "type": "object", - "description": "Failed Task.", + "required": [ + "sourceLanguage", + "targetLanguage" + ], "properties": { - "id": { + "sourceLanguage": { "type": "string", - "description": "The failed task identifier." + "description": "The source language code. For example: \"en-US\", \"de-DE\"." }, - "name": { + "targetLanguage": { "type": "string", - "description": "The failed task name." + "description": "The target language code. For example: \"en-US\", \"de-DE\"." }, - "errors": { + "contextMatch": { + "type": "number", + "description": "
default
The price of context matches.", + "x-default-field": true + }, + "exactMatch": { + "type": "number", + "description": "
default
The price of exact matches.", + "x-default-field": true + }, + "new": { + "description": "
default
The price of new matches.", + "type": "number", + "x-default-field": true + }, + "perfectMatch": { + "type": "number", + "description": "
default
The price of PerfectMatches.", + "x-default-field": true + }, + "repetition": { + "type": "number", + "description": "
default
The price of repetition matches.", + "x-default-field": true + }, + "machineTranslation": { + "type": "number", + "description": "
default
The price of machine translation matches.", + "x-default-field": true + }, + "pricingUnit": { + "$ref": "#/components/schemas/pricing-unit-type", + "description": "
default
", + "x-default-field": true, + "nullable": true + }, + "fuzzyMatches": { "type": "array", - "description": "The failed task errors.", + "description": "
default
", + "x-default-field": true, "items": { - "$ref": "#/components/schemas/task-error" + "$ref": "#/components/schemas/fuzzy-match", + "x-stoplight": { + "id": "i06cxve7hjibt" + } + } + }, + "additionalCosts": { + "type": "array", + "description": "
default
", + "x-default-field": true, + "items": { + "$ref": "#/components/schemas/language-cost", + "x-stoplight": { + "id": "eskiho7o9q38f" + } } } + } + }, + "language-direction-request": { + "title": "Language Direction Request", + "type": "object", + "description": "The language directions model used for creating or updating a project.", + "properties": { + "sourceLanguage": { + "$ref": "#/components/schemas/source-language-request" + }, + "targetLanguage": { + "$ref": "#/components/schemas/target-language-request" + } }, "required": [ - "id", - "name" + "sourceLanguage", + "targetLanguage" ] }, - "file-processing-configuration": { - "title": "File Processing Configuration", + "language-processing-rule": { + "title": "Language Processing Rule", "type": "object", - "description": "File Processing Configuration resource. (Not available for List Projects endpoint)", "properties": { "id": { "type": "string", - "description": "The file processing configuration identifier." + "description": "The language processing rule identifier." }, "name": { "type": "string", - "description": "
default
The file processing configuration name.
", + "description": "
default
The language processing rule name.
", "x-default-field": true }, - "location": { - "$ref": "#/components/schemas/folder-v2" + "description": { + "type": "string", + "description": "The language processing rule description." } }, "required": [ "id" ] }, - "file-type-setting": { - "title": "File Type Setting", - "x-stoplight": { - "id": "twyoqd5uer5g0" - }, + "language-request": { + "title": "Language Request", "type": "object", "properties": { - "id": { - "type": "string", - "description": "The file type setting identifier." - }, - "name": { - "type": "string", - "description": "
default
The file type name.
", - "x-default-field": true - }, - "description": { + "languageCode": { "type": "string" - }, - "typeId": { - "type": "string", - "description": "A short string representation of the file type identifier. The ID displayed in the Trados Cloud Platform UI." - }, - "enabled": { - "type": "boolean", - "description": "
default
Is this file type setting enabled. Disabled file types will not be included in operations (ex. Scan)
", - "nullable": true, - "x-default-field": true - }, - "excluded": { - "type": "boolean", - "description": "Is this file type setting included in the file processing configuration. \n\nFile types will be added to a configuration as excluded = true by default and can be included by a consumer when needed (via the Trados Cloud Platform UI)\n\nExcluded file types will not be included in operations (ex. Scan)", - "nullable": true - }, - "deprecated": { - "type": "boolean", - "description": "This file type setting is planned for deprecation and will be removed in the future.", - "nullable": true - }, - "orderNumber": { - "type": "integer", - "description": "The order of the setting in the file type configuration." - }, - "extensions": { - "type": "array", - "description": "A collection of extensions supported by this file type. Ex: \"*.xlsx\"", - "items": { - "type": "string" - } } }, "required": [ - "id" - ], - "description": "" + "languageCode" + ] }, - "file-upload-response": { - "title": "File Upload Response", + "language-pair": { + "title": "Language Pair", + "x-stoplight": { + "id": "61t8792ya7zez" + }, "type": "object", "properties": { - "id": { - "type": "string", - "description": "The identifier of the uploaded file" - }, - "fileName": { + "source": { "type": "string", - "description": "The name of the uploaded file" + "x-stoplight": { + "id": "0xwwyeclt9qb9" + }, + "description": "Language code. ex: \"en-US\", de-DE\"." }, - "unzipStatus": { + "target": { "type": "string", - "enum": [ - "queued", - "extracting", - "extracted", - "unzipError" - ], - "description": "The status of the unzipping operation. You can use this to determine if your .zip file has been extracted successfully." + "x-stoplight": { + "id": "0ndrvic0areb1" + }, + "description": "Language code. ex: \"en-US\", de-DE\"." } }, "required": [ - "id", - "fileName" - ] + "source", + "target" + ], + "description": "" }, - "file-metadata-response": { - "title": "File Metadata Response", + "language-pair-resource": { + "title": "Language Pair Resource", + "x-stoplight": { + "id": "62g4076dmqp0x" + }, "type": "object", + "description": "Resource describing a Translation Memory, Termbase or Machine Translation used in a Translation Engine.", + "required": [ + "id", + "type" + ], "properties": { "id": { "type": "string", - "description": "The identifier of the uploaded file" + "x-stoplight": { + "id": "0xwwyeclt9qb9" + }, + "description": "The identifier of the Translation Memory, Termbase, Machine Translation or LLM." }, - "fileName": { + "systemId": { "type": "string", - "description": "The name of the uploaded file" + "x-stoplight": { + "id": "xvf797250xe34" + }, + "description": "Required only for neural Machine Translation resources." }, - "unzipStatus": { + "type": { "type": "string", + "x-stoplight": { + "id": "1smtmeliso6fm" + }, + "description": "The resource type. ", "enum": [ - "queued", - "extracting", - "extracted", - "unzipError" - ], - "description": "The status of the unzipping operation. You can use this to determine if your .zip file has been extracted successfully." + "TM", + "MT", + "TB", + "LLM" + ] }, - "associatedFiles": { - "type": "array", - "description": "The files that were extracted from the uploaded .zip archive.", - "items": { - "$ref": "#/components/schemas/file-extracted-response" - } + "penalty": { + "type": "integer", + "x-stoplight": { + "id": "465u0rm7i1n97" + }, + "description": "Only for TM" + }, + "lookup": { + "type": "boolean", + "x-stoplight": { + "id": "bnsbqsinf3azu" + }, + "description": "Only for TM, TB" + }, + "concordance": { + "type": "boolean", + "x-stoplight": { + "id": "6h3n7qz9llokc" + }, + "description": "Only for TM" + }, + "update": { + "type": "boolean", + "x-stoplight": { + "id": "euo2zyycwz99m" + }, + "description": "Only for TM, TB" + }, + "generativeTranslation": { + "type": "boolean", + "x-stoplight": { + "id": "inxa0qoemlw46" + }, + "description": "Only for LLM" + }, + "smartReview": { + "type": "boolean", + "x-stoplight": { + "id": "s7x3mcw5kgyr4" + }, + "description": "Only for LLM" } - }, - "required": [ - "id", - "fileName" - ] + } }, - "file-extracted-response": { - "title": "File Extracted Response", + "list-customers-response": { + "title": "List Customers Response", "type": "object", "properties": { - "id": { - "type": "string", - "description": "The identifier of the extracted file." - }, - "fileName": { - "type": "string", - "description": "The name of the extracted file." + "itemCount": { + "type": "integer" }, - "filePath": { - "type": "string", - "description": "The file path of the extracted file. This is relative to the archive root." + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/customer" + } } }, "required": [ - "id", - "fileName", - "filePath" - ] - }, - "file-role": { - "type": "string", - "title": "File-Role", - "enum": [ - "translatable", - "reference", - "localizable", - "unknown" + "itemCount", + "items" ], - "nullable": true + "description": "A response for the List Customers endpoint." }, - "file-version-export": { - "title": "File Version Export", - "description": "File Version Export. The resulted version can be downloaded once the status is completed.", - "allOf": [ - { - "$ref": "#/components/schemas/asynchronous-result" + "list-custom-field-definitions-response": { + "title": "List Custom Field Definitions Response", + "type": "object", + "description": "A response for the List Custom Field Definitions endpoint.", + "properties": { + "itemCount": { + "type": "integer" }, - { - "type": "object", - "properties": { - "downloadUrl": { - "type": "string", - "description": "The url where the file can be downloaded." - } + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/custom-field-definition" } } + }, + "required": [ + "itemCount", + "items" ] }, - "file-version-import": { - "title": "File Version Import", - "allOf": [ - { - "$ref": "#/components/schemas/asynchronous-result" + "list-file-processing-configurations-response": { + "title": "List File Processing Configurations Response", + "type": "object", + "properties": { + "itemCount": { + "type": "integer" }, - { - "type": "object", - "properties": { - "fileVersionId": { - "type": "string" - } + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/file-processing-configuration" } } - ] + }, + "required": [ + "itemCount", + "items" + ], + "description": "A response for the List File Processing Configurations endpoint." }, - "folder": { - "title": "Folder", + "list-file-type-settings-response": { + "title": "List File Type Settings Response", "type": "object", - "description": "Folder used for resource storage.", - "examples": [ - { - "id": "1de8f71c357c4bb5a32626faf5f53ef1", - "name": "consumer_A", - "path": [ - { - "id": "7fb808326daa4bb1988ckedcd0734aa6", - "location": "0e6d1f1aa8df46e6b9b111ca9f388c9e", - "name": "dexters_extensibility_consumer", - "hasParent": true - }, - { - "id": "0e6d1f1aa8df46e6b9b111ca9f388c9e", - "location": "61e801fa3d600fe2cfs12dd08", - "name": "Customers", - "hasParent": true - }, - { - "id": "61e801fa3d600fe2cfs12dd08", - "name": "61e801fa3d600fe2cfs12dd08", - "hasParent": false - } - ] - } - ], + "description": "A response for the List File Type Settings endpoint.", "required": [ - "id" + "itemCount", + "items" ], "properties": { - "id": { - "type": "string", - "description": "The folder identifier." - }, - "name": { - "type": "string", - "description": "
default
The name of the folder.
", - "x-default-field": true - }, - "hasParent": { - "type": "boolean", - "description": "Indicates if the folder has a parent folder.", - "nullable": true + "itemCount": { + "type": "integer" }, - "path": { + "items": { "type": "array", - "x-stoplight": { - "id": "31bd3get7o6hk" - }, - "description": "The hierarchical path. It consists of all the items of the path in reverse order, the parent of the current folder being the first in the list, and the root of the account being the last.", "items": { - "$ref": "#/components/schemas/folder-path", - "x-stoplight": { - "id": "i4c2vlnydf80m" - } + "$ref": "#/components/schemas/file-type-setting" } } } }, - "folder-v2": { - "title": "Folder", + "list-folders-response": { + "title": "List Folders Response", "type": "object", - "description": "Folder used for resource storage.", + "description": "A response for the List Folders endpoint.", "properties": { - "id": { - "type": "string", - "description": "The folder identifier." - }, - "name": { - "type": "string", - "description": "
default
The name of the folder.
", - "x-default-field": true - }, - "hasParent": { - "type": "boolean", - "description": "Indicates if the folder has a parent folder.", - "nullable": true + "itemCount": { + "type": "integer" }, - "path": { + "items": { "type": "array", - "description": "The hierarchical path. It consists of all the items of the path in reverse order, the parent of the current folder being the first in the list, and the root of the account being the last.", "items": { - "$ref": "#/components/schemas/folder-path" + "$ref": "#/components/schemas/folder" } } }, "required": [ - "id" + "itemCount", + "items" ] }, - "folder-path": { - "title": "Folder Path", + "list-groups-response": { + "title": "List Groups Response", "type": "object", - "description": "Path of a folder.", "properties": { - "id": { - "type": "string", - "description": "The folder identifier." + "itemCount": { + "type": "integer" }, - "name": { - "type": "string", - "description": "The name of the folder." + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/group" + } + } + }, + "required": [ + "itemCount", + "items" + ], + "description": "A response for the List Groups endpoint." + }, + "list-jwks": { + "title": "List JWKs Response", + "type": "array", + "items": { + "$ref": "#/components/schemas/jwk" + } + }, + "list-languages-response": { + "title": "List Languages Response", + "type": "object", + "properties": { + "itemCount": { + "type": "integer" }, - "location": { - "type": "string", - "description": "
default
The location identifier." + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/language" + } + } + }, + "required": [ + "itemCount", + "items" + ], + "description": "A response for the List Languages endpoint." + }, + "list-language-processing-rules": { + "title": "List Language Processing Rules", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/language-processing-rule" + } }, - "hasParent": { - "type": "boolean", - "description": "
default
Indicates if the folder has a parent folder.", - "nullable": true + "itemCount": { + "type": "string" } }, "required": [ - "id", - "name" + "items", + "itemCount" ] }, - "fuzzy-category": { - "title": "Fuzzy Category", + "list-machine-translations-response": { + "title": "List Machine Translations Response", + "x-stoplight": { + "id": "fhk9xi0bpvf3x" + }, "type": "object", - "description": "Fuzzy category range. Example of Fuzzy bands: 100-100%, 95-99%, 85-94%, 75-84%, 50-74%.", + "description": "A response for the List Machine Translations endpoint.", "properties": { - "minimum": { - "type": "integer", - "description": "
default
The minimum of the range.
", - "nullable": true, - "x-default-field": true + "itemCount": { + "type": "integer" }, - "maximum": { - "type": "integer", - "description": "
default
The maximum of the range.
", - "nullable": true, - "x-default-field": true + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/machine-translation" + } } - } + }, + "required": [ + "itemCount", + "items" + ] }, - "fuzzy-count": { - "title": "Fuzzy Count", + "list-my-accounts-response": { + "title": "List My Accounts Response", "type": "object", - "description": "Statistics count for fuzzy matches.", "properties": { - "count": { - "$ref": "#/components/schemas/count", - "description": "
default
Statistics count.
", - "x-default-field": true + "itemCount": { + "type": "integer" }, - "category": { - "$ref": "#/components/schemas/fuzzy-category", - "description": "
default
Fuzzy category range.
", - "x-default-field": true + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/account" + } } - } + }, + "required": [ + "itemCount", + "items" + ], + "description": "A response for the List My Accounts endpoint." }, - "fuzzy-match-category": { - "title": "Fuzzy Match Category", + "list-pricing-models-response": { + "title": "List Pricing Models Response", "type": "object", - "description": "Fuzzy match category range.", "properties": { - "minimumMatchValue": { - "type": "integer", - "nullable": true, - "description": "Minimum matching value of this range." + "itemCount": { + "type": "integer" }, - "maximumMatchValue": { - "type": "integer", - "nullable": true, - "description": "Maximum matching value of this range." + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/pricing-model" + } } }, "required": [ - "minimumMatchValue", - "maximumMatchValue" - ] + "itemCount", + "items" + ], + "description": "A response for the List Pricing Models endpoint." }, - "fuzzy-match": { - "title": "Fuzzy Match", + "list-project-templates-response": { + "title": "List Project Templates Response", "type": "object", - "description": "Fuzzy match model.", "properties": { - "price": { - "type": "number", - "description": "Fuzzy match price for the range expressed in the category field." + "itemCount": { + "type": "integer" }, - "category": { - "$ref": "#/components/schemas/fuzzy-match-category" + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/project-template-response" + } } }, "required": [ - "price", - "category" - ] + "itemCount", + "items" + ], + "description": "A response for the List Project Templates endpoint." }, - "group": { - "title": "Group", + "list-schedule-templates-response": { + "title": "List Schedule Templates Response", + "x-stoplight": { + "id": "1rzz3ctuczv9f" + }, "type": "object", - "description": "Group of Users.", + "description": "A response for the List Schedule Templates endpoint.", "properties": { - "id": { - "type": "string", - "description": "The group identifier." - }, - "name": { - "type": "string", - "description": "
default
The group name.
", - "x-default-field": true - }, - "description": { - "type": "string", - "description": "The group description." - }, - "location": { - "$ref": "#/components/schemas/folder-v2" + "itemCount": { + "type": "integer" }, - "users": { + "items": { "type": "array", "items": { - "$ref": "#/components/schemas/user" + "$ref": "#/components/schemas/schedule-template" } } }, "required": [ - "id" + "itemCount", + "items" ] }, - "group-request": { - "title": "Group Request", + "list-rate-limits-response": { + "title": "List Rate Limits Response", "type": "object", - "description": "Group of users.", "properties": { - "id": { - "type": "string", - "description": "The group identifier." - }, - "name": { - "type": "string", - "description": "The group name." - }, - "description": { - "type": "string", - "description": "The group description." - }, - "location": { - "$ref": "#/components/schemas/resource-folder-request" + "itemCount": { + "type": "integer" }, - "users": { + "items": { "type": "array", - "description": "The group users.", "items": { - "$ref": "#/components/schemas/user-request" + "$ref": "#/components/schemas/rate-limit" } } }, "required": [ - "id" - ] + "itemCount", + "items" + ], + "description": "A response for the List Rate Limits endpoint." }, - "jwk": { - "title": "JWK", + "list-perfect-match-candidates-response": { + "title": "List PerfectMatch Candidates Response", + "x-stoplight": { + "id": "i66skbktv8vko" + }, "type": "object", - "description": "A Json Web Key. \n
\nSee https://datatracker.ietf.org/doc/html/rfc7517 for details.", + "description": "A response for the Get PerfectMatch Candidates endpoint.", + "required": [ + "itemCount", + "items" + ], "properties": { - "kty": { - "type": "string", - "description": "The cryptographic algorithm\n family used with the key." - }, - "n": { - "type": "string", - "description": "The RSA public modulus n." - }, - "e": { - "type": "string", - "description": "The RSA public exponent e." - }, - "alg": { - "type": "string", - "description": "The algorithm intended for use with the key." - }, - "kid": { - "type": "string", - "description": "The \"kid\" (key ID) parameter is used to match a specific key." + "itemCount": { + "type": "integer" }, - "use": { - "type": "string", - "description": "The \"use\" parameter is employed to indicate whether a public key is used for encrypting data or verifying the signature on data." + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/perfect-match-candidate" + } } } }, - "language": { - "title": "Language", + "list-project-groups-response": { + "title": "List Project Groups Response", "type": "object", - "description": "The language object.", + "description": "A response for the List Project Groups endpoint.", "properties": { - "languageCode": { - "type": "string", - "description": "Language code. ex: \"en-US\", \"de-DE\"." - }, - "englishName": { - "type": "string", - "description": "
default
Human readable name.
", - "x-default-field": true - }, - "direction": { - "type": "string" - }, - "parentLanguageCode": { - "type": "string" - }, - "defaultSpecificLanguageCode": { - "type": "string" + "itemCount": { + "type": "integer" }, - "isNeutral": { - "type": "boolean", - "nullable": true + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/project-group" + } } }, "required": [ - "languageCode" + "itemCount", + "items" ] }, - "language-direction": { - "title": "Language Direction", + "list-projects-response": { + "title": "List Projects Response", "type": "object", - "description": "A Language Direction.", "properties": { - "id": { - "type": "string", - "description": "The language direction identifier." - }, - "sourceLanguage": { - "$ref": "#/components/schemas/language" - }, - "targetLanguage": { - "$ref": "#/components/schemas/language" + "itemCount": { + "type": "integer" }, - "analysisStatistics": { - "$ref": "#/components/schemas/analysis-statistics" + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/project" + } } }, "required": [ - "id", - "sourceLanguage", - "targetLanguage" - ] + "itemCount", + "items" + ], + "description": "A response for the List Projects endpoint." }, - "language-direction-no-statistics": { - "title": "Language Direction", - "x-stoplight": { - "id": "o2ahlu8d180l0" - }, + "list-source-files-response": { + "title": "List Source Files Response", "type": "object", - "description": "A Language Direction.", "properties": { - "id": { - "type": "string", - "description": "The language direction identifier." - }, - "sourceLanguage": { - "$ref": "#/components/schemas/language" + "itemCount": { + "type": "integer" }, - "targetLanguage": { - "$ref": "#/components/schemas/language" + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/source-file" + } } }, "required": [ - "id", - "sourceLanguage", - "targetLanguage" - ] + "itemCount", + "items" + ], + "description": "A response for the List Source Files endpoint." }, - "language-direction-item": { - "title": "Language Direction Item", + "list-source-file-versions-response": { + "title": "List Source File Versions Response", "type": "object", - "description": "", "properties": { - "id": { - "type": "string", - "description": "The language direction identifier." + "itemCount": { + "type": "integer" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/source-file-version" + } } }, "required": [ - "id" - ] + "itemCount", + "items" + ], + "description": "A response for the List Source File Versions endpoint." }, - "language-price": { - "title": "Language Prices", - "x-stoplight": { - "id": "a0c8ffb7ad3c9" - }, + "list-target-files-response": { + "title": "List Target Files Response", "type": "object", "properties": { - "sourceLanguage": { - "type": "string", - "description": "The source language code. For example: \"en-US\", \"de-DE\"." - }, - "targetLanguage": { - "type": "string", - "description": "The target language code. For example: \"en-US\", \"de-DE\"." - }, - "contextMatch": { - "type": "number", - "description": "
default
The price of context matches.", - "x-default-field": true - }, - "exactMatch": { - "type": "number", - "description": "
default
The price of exact matches.", - "x-default-field": true - }, - "new": { - "description": "
default
The price of new matches.", - "type": "number", - "x-default-field": true - }, - "perfectMatch": { - "type": "number", - "description": "
default
The price of PerfectMatches.", - "x-default-field": true - }, - "repetition": { - "type": "number", - "description": "
default
The price of repetition matches.", - "x-default-field": true - }, - "machineTranslation": { - "type": "number", - "description": "
default
The price of machine translation matches.", - "x-default-field": true - }, - "pricingUnit": { - "x-stoplight": { - "id": "tg3y5wcaunacs" - }, - "description": "
default
", - "x-default-field": true, - "enum": [ - "words", - "characters" - ] + "itemCount": { + "type": "integer" }, - "fuzzyMatches": { + "items": { "type": "array", - "description": "
default
", - "x-default-field": true, "items": { - "$ref": "#/components/schemas/fuzzy-match", - "x-stoplight": { - "id": "0m8m8t4mg06hy" - } + "$ref": "#/components/schemas/target-file" } + } + }, + "required": [ + "itemCount", + "items" + ], + "description": "A response for the List Target Files endpoint." + }, + "list-target-file-versions-response": { + "title": "List Target File Versions Response", + "type": "object", + "description": "A response for the List Target Files Versions endpoint.", + "properties": { + "itemCount": { + "type": "integer" }, - "additionalCosts": { + "items": { "type": "array", - "description": "
default
", - "x-default-field": true, "items": { - "$ref": "#/components/schemas/additional-cost-language", - "x-stoplight": { - "id": "eskiho7o9q38f" - } + "$ref": "#/components/schemas/target-file-version" } } }, "required": [ - "sourceLanguage", - "targetLanguage" + "itemCount", + "items" ] }, - "language-direction-request": { - "title": "Language Direction Request", + "list-tasks-response": { + "title": "List Tasks Response", "type": "object", - "description": "The language directions model used for creating or updating a project.", "properties": { - "sourceLanguage": { - "$ref": "#/components/schemas/source-language-request" + "itemCount": { + "type": "integer" }, - "targetLanguage": { - "$ref": "#/components/schemas/target-language-request" + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/task" + } } }, "required": [ - "sourceLanguage", - "targetLanguage" - ] + "itemCount", + "items" + ], + "description": "A response for the List Tasks endpoint." }, - "language-processing-rule": { - "title": "Language Processing Rule", + "list-task-types-response": { + "title": "List Task Types Response", "type": "object", "properties": { - "id": { - "type": "string", - "description": "The language processing rule identifier." - }, - "name": { - "type": "string", - "description": "
default
The language processing rule name.
", - "x-default-field": true + "itemCount": { + "type": "integer" }, - "description": { - "type": "string", - "description": "The language processing rule description." + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/task-type" + } } }, "required": [ - "id" - ] + "itemCount", + "items" + ], + "description": "A response for the List Task types endpoint." }, - "language-request": { - "title": "Language Request", + "list-tqa-profiles-response": { + "title": "List TQA Profiles Response", "type": "object", + "description": "", "properties": { - "languageCode": { - "type": "string" + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/tqa-profile" + } + }, + "itemCount": { + "type": "integer" } }, "required": [ - "languageCode" + "items", + "itemCount" ] }, - "language-pair": { - "title": "Language Pair", - "x-stoplight": { - "id": "61t8792ya7zez" - }, + "list-termbase-templates-response": { + "title": "List Termbase Templates Response", "type": "object", + "description": "The termbase templates response.", "properties": { - "source": { - "type": "string", - "x-stoplight": { - "id": "0xwwyeclt9qb9" - }, - "description": "Language code. ex: \"en-US\", de-DE\"." + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-template" + } }, - "target": { - "type": "string", - "x-stoplight": { - "id": "0ndrvic0areb1" - }, - "description": "Language code. ex: \"en-US\", de-DE\"." + "itemCount": { + "type": "integer" } }, "required": [ - "source", - "target" - ], - "description": "" + "items", + "itemCount" + ] }, - "language-pair-resource": { - "title": "Language Pair Resource", - "x-stoplight": { - "id": "62g4076dmqp0x" - }, + "list-termbases-response": { + "title": "List Termbases Response", "type": "object", - "description": "Resource describing a Translation Memory, Termbase or Machine Translation used in a Translation Engine.", + "description": "The list termbases response.", "properties": { - "id": { - "type": "string", - "description": "The identifier of the Translation Memory, the Termbase or the Machine Translation." - }, - "type": { - "type": "string", - "x-stoplight": { - "id": "1smtmeliso6fm" - }, - "description": "The resource type. ", - "enum": [ - "TM", - "MT", - "TB" - ] - }, - "penalty": { - "type": "integer", - "x-stoplight": { - "id": "465u0rm7i1n97" - } - }, - "lookup": { - "type": "boolean", - "x-stoplight": { - "id": "bnsbqsinf3azu" + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase" } }, - "concordance": { - "type": "boolean", - "x-stoplight": { - "id": "6h3n7qz9llokc" + "itemCount": { + "type": "integer" + } + }, + "required": [ + "items", + "itemCount" + ] + }, + "list-termbase-terms-response": { + "title": "List Termbase Terms Response", + "type": "object", + "description": "The list termbase terms response.", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-term" } }, - "update": { - "type": "boolean", - "x-stoplight": { - "id": "euo2zyycwz99m" + "itemCount": { + "type": "integer" + } + }, + "required": [ + "items", + "itemCount" + ] + }, + "list-termbase-entries-response": { + "title": "List Termbase Entries Response", + "type": "object", + "description": "The list termbase entries response.", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-entry" } }, - "systemId": { - "type": "string", - "x-stoplight": { - "id": "xvf797250xe34" - }, - "description": "Required only for neural Machine Translation resources." + "itemCount": { + "type": "integer" } }, "required": [ - "id", - "type" + "items", + "itemCount" ] }, - "list-customers-response": { - "title": "List Customers Response", + "list-termbase-import-history": { + "title": "Get Termbase Import History", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-import-history-response" + } + }, + "itemCount": { + "type": "integer" + } + } + }, + "list-translation-engines-response": { + "title": "List Translation Engines Response", "type": "object", "properties": { "itemCount": { @@ -18990,7 +21483,7 @@ "items": { "type": "array", "items": { - "$ref": "#/components/schemas/customer" + "$ref": "#/components/schemas/translation-engine" } } }, @@ -18998,12 +21491,11 @@ "itemCount", "items" ], - "description": "A response for the List Customers endpoint." + "description": "A response for the List Translation Engines endpoint." }, - "list-custom-field-definitions-response": { - "title": "List Custom Field Definitions Response", + "list-translation-memories-reposne": { + "title": "List Translation Memories Response", "type": "object", - "description": "A response for the List Custom Field Definitions endpoint.", "properties": { "itemCount": { "type": "integer" @@ -19011,18 +21503,38 @@ "items": { "type": "array", "items": { - "$ref": "#/components/schemas/custom-field-definition" + "$ref": "#/components/schemas/translation-memory" } } }, "required": [ "itemCount", "items" - ] + ], + "description": "A response for the List Translation Memories endpoint." }, - "list-file-processing-configurations-response": { - "title": "List File Processing Configurations Response", + "list-translation-memory-import-history": { + "title": "Get Translation Memory Import History", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/translation-memory-import-history-response" + } + }, + "itemCount": { + "type": "integer" + } + } + }, + "list-translation-memory-field-templates": { + "title": "List Translation Memory Field Templates", + "x-stoplight": { + "id": "icrpz2hliblzj" + }, "type": "object", + "description": "A response for the List Translation Memory Field Templates endpoint.", "properties": { "itemCount": { "type": "integer" @@ -19030,40 +21542,50 @@ "items": { "type": "array", "items": { - "$ref": "#/components/schemas/file-processing-configuration" + "$ref": "#/components/schemas/translation-memory-field-template" } } }, "required": [ "itemCount", "items" - ], - "description": "A response for the List File Processing Configurations endpoint." + ] }, - "list-file-type-settings-response": { - "title": "List File Type Settings Response", + "list-translation-service-types-response": { + "title": "List Translation Service Types Response", + "x-stoplight": { + "id": "hfotzd0fq5zx2" + }, "type": "object", - "description": "A response for the List File Type Settings endpoint.", + "description": "A response for the List Translation Service Types endpoint.", "required": [ "itemCount", "items" ], "properties": { "itemCount": { - "type": "integer" + "type": "integer", + "x-stoplight": { + "id": "izsgcvo2ilhmt" + } }, "items": { "type": "array", + "x-stoplight": { + "id": "dvdp579kl1cc5" + }, "items": { - "$ref": "#/components/schemas/file-type-setting" + "$ref": "#/components/schemas/translation-service-type", + "x-stoplight": { + "id": "b2c2bbjsoepdb" + } } } } }, - "list-folders-response": { - "title": "List Folders Response", + "list-users-response": { + "title": "List Users Response", "type": "object", - "description": "A response for the List Folders endpoint.", "properties": { "itemCount": { "type": "integer" @@ -19071,1588 +21593,2072 @@ "items": { "type": "array", "items": { - "$ref": "#/components/schemas/folder" + "$ref": "#/components/schemas/user" } } }, "required": [ "itemCount", "items" - ] + ], + "description": "A response for the List Users endpoint." }, - "list-groups-response": { - "title": "List Groups Response", + "list-workflows-response": { + "title": "List Workflows Response", "type": "object", "properties": { "itemCount": { "type": "integer" }, - "items": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workflow" + } + } + }, + "required": [ + "itemCount", + "items" + ], + "description": "A response for the List Workflows endpoint." + }, + "llm-configuration-response": { + "title": "LLM Configuration Response", + "x-stoplight": { + "id": "kp7sn68d75t8z" + }, + "type": "object", + "description": "The LLM configuration details", + "required": [ + "id", + "model", + "type", + "isDefault", + "isActive" + ], + "properties": { + "id": { + "type": "string", + "x-stoplight": { + "id": "53ri5rgnwgj3c" + }, + "description": "The LLM configuraiton identifier." + }, + "description": { + "type": "string", + "x-stoplight": { + "id": "l1t1rrfi16rl6" + }, + "description": "The configuration description." + }, + "model": { + "type": "string", + "x-stoplight": { + "id": "83vangex352aj" + }, + "description": "The model name." + }, + "type": { + "type": "string", + "x-stoplight": { + "id": "lsb4gvpmerg7z" + }, + "enum": [ + "azureOpenAI", + "awsBedrock" + ], + "description": "The LLM provider type." + }, + "isDefault": { + "type": "boolean", + "x-stoplight": { + "id": "8co4b9p37he2y" + }, + "description": "Flag representing whether the LLM configuration is default." + }, + "isActive": { + "type": "boolean", + "x-stoplight": { + "id": "1bw7exz7k43o4" + }, + "description": "Flag representing whether the LLM configuration is active." + } + } + }, + "list-llm-configurations-response": { + "title": "List LLM Configurations Response", + "x-stoplight": { + "id": "zax5a75zj3u5f" + }, + "type": "object", + "required": [ + "itemCount", + "items" + ], + "properties": { + "itemCount": { + "type": "integer", + "x-stoplight": { + "id": "xt0e6xcbjnlds" + }, + "description": "The total item count." + }, + "items": { + "type": "array", + "x-stoplight": { + "id": "zdj0fmsdrjuma" + }, + "items": { + "$ref": "#/components/schemas/llm-configuration-response", + "x-stoplight": { + "id": "834zntr25p2xt" + } + } + } + }, + "description": "A response for the List LLM Configurations endpoint." + }, + "machine-translation": { + "title": "Machine Translation", + "x-stoplight": { + "id": "q83tushwc71wu" + }, + "type": "object", + "description": "Machine translation resource.", + "properties": { + "id": { + "type": "string" + }, + "provider": { + "type": "string", + "description": "
Provider of the machine translation.
", + "x-default-field": true, + "x-stoplight": { + "id": "o2vxfwxx5ypjq" + } + }, + "type": { + "type": "string", + "x-stoplight": { + "id": "027ukef1wajci" + }, + "description": "Type of the machine translation. Can be generic or neural." + }, + "systemId": { + "type": "string", + "x-stoplight": { + "id": "6inesg0lkfqtn" + }, + "description": "
default
Appears if the machine translation is neural." + }, + "modelSourceLanguage": { + "x-stoplight": { + "id": "ujzglo1mwl4pl" + }, + "type": "string", + "description": "Model Source language" + }, + "modelTargetLanguage": { + "type": "string", + "x-stoplight": { + "id": "dssycbmasvpyc" + }, + "description": "Model Target language" + }, + "matchingSourceLanguage": { + "type": "string", + "x-stoplight": { + "id": "rxm5xpz6oj11t" + }, + "description": "Specific source language supported by the model, matching the query " + }, + "matchingTargetLanguages": { "type": "array", + "x-stoplight": { + "id": "ncr79i78eof3x" + }, + "description": "Specific target languages supported by the model, matching the query ", "items": { - "$ref": "#/components/schemas/group" + "x-stoplight": { + "id": "7ekyl863df2e7" + }, + "type": "string" } } }, "required": [ - "itemCount", - "items" - ], - "description": "A response for the List Groups endpoint." - }, - "list-jwks": { - "title": "List JWKs Response", - "type": "array", - "items": { - "$ref": "#/components/schemas/jwk" - } + "id", + "provider", + "type", + "modelSourceLanguage", + "modelTargetLanguage", + "matchingSourceLanguage", + "matchingTargetLanguages" + ] }, - "list-languages-response": { - "title": "List Languages Response", + "object-id": { + "title": "Object Identifier", "type": "object", + "description": "An object with identifier.", "properties": { - "itemCount": { - "type": "integer" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/language" - } + "id": { + "type": "string" } }, "required": [ - "itemCount", - "items" - ], - "description": "A response for the List Languages endpoint." + "id" + ] }, - "list-language-processing-rules": { - "title": "List Language Processing Rules", + "object-id-request": { + "title": "Object Identifier Request", "type": "object", + "description": "An object with identifier.", "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/language-processing-rule" - } - }, - "itemCount": { + "id": { "type": "string" } }, "required": [ - "items", - "itemCount" + "id" ] }, - "list-machine-translations-response": { - "title": "List Machine Translations Response", + "perfect-match-candidate": { + "title": "PerfectMatch Candidate", "x-stoplight": { - "id": "fhk9xi0bpvf3x" + "id": "fx87e3hzcrq7z" }, "type": "object", - "description": "A response for the List Machine Translations endpoint.", + "x-internal": false, + "required": [ + "score", + "fileId" + ], "properties": { - "itemCount": { - "type": "integer" + "score": { + "type": "number", + "x-stoplight": { + "id": "fm35hes639la9" + }, + "format": "double", + "description": "The match score.", + "minimum": 0, + "maximum": 100 }, - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/machine-translation" - } + "fileId": { + "type": "string", + "x-stoplight": { + "id": "vs2ndi7jr87fl" + }, + "description": "The file identifier:\r\n- `targetFileId` if file is a project file\r\n- `fileId` if file is user provided" + }, + "project": { + "$ref": "#/components/schemas/project", + "x-stoplight": { + "id": "umsyu9xmi8sqp" + }, + "description": "The project from where the candidate was selected." } }, - "required": [ - "itemCount", - "items" - ] + "description": "A project file that can be used as a match for PerfectMatch" }, - "list-my-accounts-response": { - "title": "List My Accounts Response", + "perfect-match-custom-file-mapping-request": { + "title": "PerfectMatch Custom File Mapping Request", + "x-stoplight": { + "id": "c787724801aca" + }, + "description": "Provide you own matching file.", "type": "object", + "required": [ + "properties", + "file" + ], "properties": { - "itemCount": { - "type": "integer" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/account" + "properties": { + "type": "object", + "x-stoplight": { + "id": "q75mghzupqq7g" + }, + "required": [ + "name", + "targetLanguage" + ], + "properties": { + "name": { + "type": "string", + "x-stoplight": { + "id": "df0d1cic1j71s" + }, + "description": "The file name." + }, + "targetLanguage": { + "type": "string", + "x-stoplight": { + "id": "2pdl6nnrb1ar4" + } + } } + }, + "file": { + "type": "string", + "x-stoplight": { + "id": "1yko3sjshe3k8" + }, + "format": "binary", + "description": "The source file (binary string). Only SDLXLIFF files are accepted." } + } + }, + "perfect-match-mapping-create-request": { + "title": "PerfectMatch Mapping Create Request", + "x-stoplight": { + "id": "q81dfuu1hzfp8" }, + "type": "object", + "description": "A request to create a new PerfectMatch mapping.", "required": [ - "itemCount", - "items" + "projectId" ], - "description": "A response for the List My Accounts endpoint." - }, - "list-pricing-models-response": { - "title": "List Pricing Models Response", - "type": "object", "properties": { - "itemCount": { - "type": "integer" + "projectId": { + "type": "string", + "x-stoplight": { + "id": "nemjj434jweo7" + }, + "description": "The project identifier this mapping will be used on." }, - "items": { + "matchingProjects": { "type": "array", + "x-stoplight": { + "id": "cizz5j6yddvzh" + }, + "description": "A collection of projects that will be used to find matches and candidates for PerfectMatch mapping.", + "minItems": 0, + "maxItems": 10, "items": { - "$ref": "#/components/schemas/pricing-model" + "x-stoplight": { + "id": "52fzpqwxdoc9p" + }, + "type": "string" } } + } + }, + "perfect-match-mapping-response": { + "type": "object", + "x-examples": { + "Example 1": { + "id": "string", + "projectId": "string", + "createdBy": "string", + "mappings": [ + { + "id": "string", + "projectMappingId": "string", + "batch": 1073741824, + "mappingStatus": "GENERATED", + "mappingProviders": [ + { + "projectId": "string" + } + ], + "files": [ + { + "id": "string", + "fileId": "string", + "fileStorageId": "string", + "fileName": "string", + "path": [ + "string" + ], + "languageMappings": [ + { + "targetLanguage": "string", + "match": { + "fileName": "string", + "path": [ + "string" + ], + "origin": { + "fileId": "string", + "projectId": "string", + "matchSource": "USER", + "type": "BCM" + } + } + } + ] + } + ] + } + ] + } }, + "title": "PerfectMatch Mapping Response", "required": [ - "itemCount", - "items" + "id" ], - "description": "A response for the List Pricing Models endpoint." - }, - "list-project-templates-response": { - "title": "List Project Templates Response", - "type": "object", "properties": { - "itemCount": { - "type": "integer" + "id": { + "type": "string", + "description": "The mapping identifier." }, - "items": { + "project": { + "$ref": "#/components/schemas/project", + "description": "The project id where this mapping is used.", + "x-stoplight": { + "id": "cw1yohtjvixag" + } + }, + "createdBy": { + "$ref": "#/components/schemas/user", + "description": "The account user who created the mapping." + }, + "batchMappings": { "type": "array", + "description": "A collection of mappings per project batches.", "items": { - "$ref": "#/components/schemas/project-template-response" + "$ref": "#/components/schemas/perfect-match-batch-mapping", + "x-stoplight": { + "id": "gp890bw2rx06u" + } } } - }, - "required": [ - "itemCount", - "items" - ], - "description": "A response for the List Project Templates endpoint." + } }, - "list-schedule-templates-response": { - "title": "List Schedule Templates Response", + "perfect-match-mapping-simple-response": { + "type": "object", "x-stoplight": { - "id": "1rzz3ctuczv9f" + "id": "y1b8w4daohpzi" }, - "type": "object", - "description": "A response for the List Schedule Templates endpoint.", - "properties": { - "itemCount": { - "type": "integer" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/schedule-template" - } + "x-examples": { + "Example 1": { + "id": "string", + "projectId": "string", + "createdBy": "string", + "mappings": [ + { + "id": "string", + "projectMappingId": "string", + "batch": 1073741824, + "mappingStatus": "GENERATED", + "mappingProviders": [ + { + "projectId": "string" + } + ], + "files": [ + { + "id": "string", + "fileId": "string", + "fileStorageId": "string", + "fileName": "string", + "path": [ + "string" + ], + "languageMappings": [ + { + "targetLanguage": "string", + "match": { + "fileName": "string", + "path": [ + "string" + ], + "origin": { + "fileId": "string", + "projectId": "string", + "matchSource": "USER", + "type": "BCM" + } + } + } + ] + } + ] + } + ] } }, + "title": "PerfectMatch Mapping Response", "required": [ - "itemCount", - "items" - ] - }, - "list-rate-limits-response": { - "title": "List Rate Limits Response", - "type": "object", + "id" + ], "properties": { - "itemCount": { - "type": "integer" + "id": { + "type": "string", + "description": "The mapping identifier." }, - "items": { + "createdBy": { + "$ref": "#/components/schemas/user", + "description": "The account user who created the mapping." + }, + "batchMappings": { "type": "array", + "description": "A collection of mappings per project batches.", "items": { - "$ref": "#/components/schemas/rate-limit" + "$ref": "#/components/schemas/perfect-match-batch-mapping" } } }, - "required": [ - "itemCount", - "items" - ], - "description": "A response for the List Rate Limits endpoint." + "description": "PerfectMatch Mapping (Not available for List Projects endpoint)" }, - "list-perfect-match-candidates-response": { - "title": "List PerfectMatch Candidates Response", + "perfect-match-mapping-create-response": { + "type": "object", "x-stoplight": { - "id": "i66skbktv8vko" + "id": "ztgh3mwksij6k" }, - "type": "object", - "description": "A response for the Get PerfectMatch Candidates endpoint.", + "x-examples": { + "Example 1": { + "id": "string", + "projectId": "string", + "createdBy": "string", + "mappings": [ + { + "id": "string", + "projectMappingId": "string", + "batch": 1073741824, + "mappingStatus": "GENERATED", + "mappingProviders": [ + { + "projectId": "string" + } + ], + "files": [ + { + "id": "string", + "fileId": "string", + "fileStorageId": "string", + "fileName": "string", + "path": [ + "string" + ], + "languageMappings": [ + { + "targetLanguage": "string", + "match": { + "fileName": "string", + "path": [ + "string" + ], + "origin": { + "fileId": "string", + "projectId": "string", + "matchSource": "USER", + "type": "BCM" + } + } + } + ] + } + ] + } + ] + } + }, + "title": "PerfectMatch Mapping Create Response", "required": [ - "itemCount", - "items" + "id" ], "properties": { - "itemCount": { - "type": "integer" + "id": { + "type": "string", + "description": "The mapping identifier." }, - "items": { + "project": { + "$ref": "#/components/schemas/project", + "description": "The project id where this mapping is used." + }, + "createdBy": { + "$ref": "#/components/schemas/user", + "description": "The account user who created the mapping." + }, + "batchMappings": { "type": "array", + "description": "A collection of mappings per project batches.", "items": { - "$ref": "#/components/schemas/perfect-match-candidate" + "$ref": "#/components/schemas/perfect-match-batch-mapping-created-response" } } } }, - "list-project-groups-response": { - "title": "List Project Groups Response", + "perfect-match-project-file-mapping-request": { "type": "object", - "description": "A response for the List Project Groups endpoint.", + "title": "PerfectMatch Project File Mapping Request", + "description": "Provide a matching file from an existing project.", + "required": [ + "fileId", + "projectId" + ], "properties": { - "itemCount": { - "type": "integer" + "fileId": { + "type": "string", + "description": "The `targetFileId` from the referenced project. Must be from a PerfectMatch Candidate." }, - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/project-group" - } + "projectId": { + "type": "string", + "description": "Specifies which project the matching file belongs to. Must be from a PerfectMatch Candidate." } - }, - "required": [ - "itemCount", - "items" - ] + } }, - "list-projects-response": { - "title": "List Projects Response", + "perfect-match-batch-mapping-created-response": { + "title": "PerfectMatch Batch Mapping Created Response", + "x-stoplight": { + "id": "sd4wox8a8yxu0" + }, "type": "object", + "required": [ + "id" + ], "properties": { - "itemCount": { - "type": "integer" + "id": { + "type": "string", + "description": "The identifier of this batch mapping." }, - "items": { + "batch": { + "type": "integer", + "minimum": 1, + "description": "The project batch associated with this mapping." + }, + "status": { + "description": "The status of the matching operation.\r\n\r\n- `pending` - The matching background operation has not started yet.\r\n- `generating` - The system is currently matching candidates.\r\n- `generated` - The matching background operation has finished and any possible candidates have been found.", + "type": "string", + "enum": [ + "generating", + "generated", + "pending" + ] + }, + "matchingProjects": { "type": "array", "items": { "$ref": "#/components/schemas/project" } } - }, - "required": [ - "itemCount", - "items" - ], - "description": "A response for the List Projects endpoint." + } }, - "list-source-files-response": { - "title": "List Source Files Response", + "perfect-match-batch-mapping-update-request": { + "title": "PerfectMatch Batch Mapping Update Request", "type": "object", + "required": [ + "languageDirections", + "files" + ], "properties": { - "itemCount": { - "type": "integer" - }, - "items": { + "languageDirections": { "type": "array", + "x-stoplight": { + "id": "wx7ycae79bp99" + }, "items": { - "$ref": "#/components/schemas/source-file" + "$ref": "#/components/schemas/language-direction-request", + "x-stoplight": { + "id": "onvc9ppeqn9nx" + } } - } - }, - "required": [ - "itemCount", - "items" - ], - "description": "A response for the List Source Files endpoint." - }, - "list-source-file-versions-response": { - "title": "List Source File Versions Response", - "type": "object", - "properties": { - "itemCount": { - "type": "integer" }, - "items": { + "files": { "type": "array", + "x-stoplight": { + "id": "bfels2gzsvw4f" + }, "items": { - "$ref": "#/components/schemas/source-file-version" + "$ref": "#/components/schemas/perfect-match-file-mapping-request", + "x-stoplight": { + "id": "c174aqqs2sxuq" + } } - } - }, - "required": [ - "itemCount", - "items" - ], - "description": "A response for the List Source File Versions endpoint." - }, - "list-target-files-response": { - "title": "List Target Files Response", - "type": "object", - "properties": { - "itemCount": { - "type": "integer" }, - "items": { + "matchingProjects": { "type": "array", + "x-stoplight": { + "id": "1i0ai06fg30tf" + }, + "maxItems": 10, + "description": "A collection of project identifiers that will be used to find matches and candidates for PerfectMatch mapping.", "items": { - "$ref": "#/components/schemas/target-file" + "x-stoplight": { + "id": "1tzpb2tsqipah" + }, + "type": "string" } } + } + }, + "perfect-match-batch-mapping": { + "title": "PerfectMatch Batch Mapping", + "x-stoplight": { + "id": "9cda3eljxhu3a" }, + "type": "object", "required": [ - "itemCount", - "items" + "id" ], - "description": "A response for the List Target Files endpoint." - }, - "list-target-file-versions-response": { - "title": "List Target File Versions Response", - "type": "object", - "description": "A response for the List Target Files Versions endpoint.", "properties": { - "itemCount": { - "type": "integer" + "id": { + "type": "string", + "x-stoplight": { + "id": "oxnybhlyo0zi7" + }, + "description": "The identifier of this batch mapping." }, - "items": { + "batch": { + "type": "integer", + "x-stoplight": { + "id": "s6rq1wfw9jdy1" + }, + "minimum": 1, + "description": "The project batch associated with this mapping." + }, + "status": { + "x-stoplight": { + "id": "vaorrbeajdfu5" + }, + "description": "The status of the matching operation.\r\n\r\n- `pending` - The matching background operation has not started yet.\r\n- `generating` - The system is currently matching candidates.\r\n- `generated` - The matching background operation has finished and any possible candidates have been found.", + "type": "string", + "enum": [ + "generating", + "generated", + "pending" + ] + }, + "matchingProjects": { "type": "array", + "x-stoplight": { + "id": "friowu6zupizf" + }, "items": { - "$ref": "#/components/schemas/target-file-version" + "$ref": "#/components/schemas/project", + "x-stoplight": { + "id": "oc87tuszl8nfk" + } } - } - }, - "required": [ - "itemCount", - "items" - ] - }, - "list-tasks-response": { - "title": "List Tasks Response", - "type": "object", - "properties": { - "itemCount": { - "type": "integer" }, - "items": { + "matchingFiles": { "type": "array", + "x-stoplight": { + "id": "9jd93fqm2ltik" + }, + "description": "The file matches identified based on this mapping. Matching files will be available when status is `generated`.", "items": { - "$ref": "#/components/schemas/task" + "$ref": "#/components/schemas/perfect-match-file-mapping", + "x-stoplight": { + "id": "9pjk6n73h08ny" + } } } + } + }, + "perfect-match-file-match": { + "title": "PerfectMatch File Match", + "x-stoplight": { + "id": "6cznfvzrl2f6u" }, + "type": "object", "required": [ - "itemCount", - "items" + "fileName", + "targetLanguage" ], - "description": "A response for the List Tasks endpoint." - }, - "list-task-types-response": { - "title": "List Task Types Response", - "type": "object", "properties": { - "itemCount": { - "type": "integer" + "fileName": { + "type": "string", + "x-stoplight": { + "id": "1p98snhwpm9z2" + }, + "description": "The file name." }, - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/task-type" - } + "targetLanguage": { + "$ref": "#/components/schemas/language", + "x-stoplight": { + "id": "08vniy685mxh2" + }, + "description": "The target language this is matched to." + }, + "origin": { + "$ref": "#/components/schemas/perfect-match-file-origin", + "x-stoplight": { + "id": "id0ppt1te182q" + }, + "description": "The source of this match." } + } + }, + "perfect-match-file-mapping": { + "title": "PerfectMatch File Mapping", + "x-stoplight": { + "id": "03dgg9mbsdrab" }, + "type": "object", "required": [ - "itemCount", - "items" + "fileMappingId", + "targetLanguages", + "matches" ], - "description": "A response for the List Task types endpoint." - }, - "list-tqa-profiles-response": { - "title": "List TQA Profiles Response", - "type": "object", - "description": "", "properties": { - "items": { + "fileMappingId": { + "type": "string", + "x-stoplight": { + "id": "a3wt6g7te3bf4" + }, + "description": "The identifier of this file mapping." + }, + "fileId": { + "type": "string", + "x-stoplight": { + "id": "z52hcnkibqypu" + }, + "description": "The file identifier." + }, + "fileName": { + "type": "string", + "x-stoplight": { + "id": "8ol3pommxgmwx" + }, + "description": "The file name." + }, + "targetLanguages": { "type": "array", + "x-stoplight": { + "id": "r4uvpx3hkfk6r" + }, + "description": "File target languages.", "items": { - "$ref": "#/components/schemas/tqa-profile" + "$ref": "#/components/schemas/language", + "x-stoplight": { + "id": "wgqj3aq90fxrl" + } } }, - "itemCount": { - "type": "integer" - } - }, - "required": [ - "items", - "itemCount" - ] - }, - "list-termbase-templates-response": { - "title": "List Termbase Templates Response", - "type": "object", - "description": "The termbase templates response.", - "properties": { - "items": { + "matches": { "type": "array", + "x-stoplight": { + "id": "lrkirjzhqym3j" + }, + "description": "The file matches.", "items": { - "$ref": "#/components/schemas/termbase-template" + "$ref": "#/components/schemas/perfect-match-file-match", + "x-stoplight": { + "id": "h0414pn1x8ebh" + } } - }, - "itemCount": { - "type": "integer" } - }, - "required": [ - "items", - "itemCount" - ] + } }, - "list-termbases-response": { - "title": "List Termbases Response", + "perfect-match-file-mapping-request": { + "title": "PerfectMatch File Mapping Request", + "x-stoplight": { + "id": "mtvcmglyse666" + }, "type": "object", - "description": "The list termbases response.", + "required": [ + "sourceFileId", + "fileName" + ], "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase" + "sourceFileId": { + "type": "string", + "description": "The source file identifier.", + "x-stoplight": { + "id": "6gsxau7p4z2t8" } }, - "itemCount": { - "type": "integer" - } - }, - "required": [ - "items", - "itemCount" - ] - }, - "list-termbase-terms-response": { - "title": "List Termbase Terms Response", - "type": "object", - "description": "The list termbase terms response.", - "properties": { - "items": { + "fileName": { + "type": "string", + "description": "The file name." + }, + "targetLanguages": { "type": "array", + "description": "File target languages. If no languages are specified, all language directions from the batch mapping will be used.", "items": { - "$ref": "#/components/schemas/termbase-term" + "$ref": "#/components/schemas/target-language-request" } - }, - "itemCount": { - "type": "integer" } - }, - "required": [ - "items", - "itemCount" - ] + } }, - "list-termbase-entries-response": { - "title": "List Termbase Entries Response", + "perfect-match-file-origin": { + "title": "PerfectMatch File Origin", + "x-stoplight": { + "id": "bv5cnpx9k3iny" + }, "type": "object", - "description": "The list termbase entries response.", + "required": [ + "fileId" + ], "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-entry" + "fileId": { + "type": "string", + "x-stoplight": { + "id": "f2apl2q7ak1dd" } }, - "itemCount": { - "type": "integer" - } - }, - "required": [ - "items", - "itemCount" - ] - }, - "list-termbase-import-history": { - "title": "Get Termbase Import History", - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-import-history-response" + "matchSource": { + "x-stoplight": { + "id": "hnztp78j7k3kv" + }, + "type": "string", + "enum": [ + "userUpload", + "perfectMatch", + "candidateConfirm", + "userSelection" + ] + }, + "projectId": { + "type": "string", + "x-stoplight": { + "id": "zq9xsxg01n4cr" } }, - "itemCount": { - "type": "integer" + "type": { + "x-stoplight": { + "id": "plrs8n0348nq8" + }, + "type": "string", + "enum": [ + "bcm", + "sdlXliff" + ] } } }, - "list-translation-engines-response": { - "title": "List Translation Engines Response", + "pricing-model": { + "title": "Pricing Model", "type": "object", + "description": "Pricing Model resource. (Not available for List Projects endpoint)", + "required": [ + "id" + ], "properties": { - "itemCount": { - "type": "integer" + "id": { + "type": "string", + "description": "The pricing model identifier." }, - "items": { + "name": { + "type": "string", + "description": "
default
The name of the Pricing Model.
" + }, + "description": { + "type": "string", + "description": "The description of the Pricing Model. ", + "x-stoplight": { + "id": "ip7d3npquqhtm" + } + }, + "currencyCode": { + "type": "string", + "description": "
default
The currency code (ISO 4217).
", + "x-default-field": true + }, + "location": { + "$ref": "#/components/schemas/folder-v2", + "x-default-field": true + }, + "languageDirectionPricing": { "type": "array", + "description": "Costs applied for languages.", "items": { - "$ref": "#/components/schemas/translation-engine" + "$ref": "#/components/schemas/language-direction-cost", + "x-stoplight": { + "id": "iulcrkpbt2dkl" + } } - } - }, - "required": [ - "itemCount", - "items" - ], - "description": "A response for the List Translation Engines endpoint." - }, - "list-translation-memories-reposne": { - "title": "List Translation Memories Response", - "type": "object", - "properties": { - "itemCount": { - "type": "integer" }, - "items": { + "additionalCosts": { + "description": "Additional costs applied at project level.", "type": "array", "items": { - "$ref": "#/components/schemas/translation-memory" + "$ref": "#/components/schemas/project-cost", + "x-stoplight": { + "id": "8mgl2ge6it23h" + } } } + } + }, + "pricing-model-create-request": { + "title": "Pricing Model Create Request", + "x-stoplight": { + "id": "84rdt11xy57je" }, + "type": "object", "required": [ - "itemCount", - "items" + "name", + "currencyCode", + "location", + "languageDirectionPricing" ], - "description": "A response for the List Translation Memories endpoint." - }, - "list-translation-memory-import-history": { - "title": "Get Translation Memory Import History", - "type": "object", "properties": { - "items": { + "name": { + "type": "string", + "x-stoplight": { + "id": "ux0n1of3l2fcg" + }, + "minLength": 1, + "maxLength": 100, + "description": "The name of the Pricing Model. " + }, + "description": { + "type": "string", + "x-stoplight": { + "id": "lqs1u6y1jp99p" + }, + "maxLength": 1000, + "description": "The description of the Pricing Model. " + }, + "currencyCode": { + "type": "string", + "x-stoplight": { + "id": "p7je5zmdu0oft" + }, + "description": "The currency code (ISO 4217)." + }, + "location": { + "x-stoplight": { + "id": "ut6kllrmvrxi3" + }, + "type": "string", + "description": "The location of the pricing model." + }, + "languageDirectionPricing": { "type": "array", + "x-stoplight": { + "id": "5fvs81l6ulki3" + }, + "description": "Costs applied for languages.", "items": { - "$ref": "#/components/schemas/translation-memory-import-history-response" + "$ref": "#/components/schemas/language-direction-cost-request", + "x-stoplight": { + "id": "bx0acxg9bor4s" + } } }, - "itemCount": { - "type": "integer" + "additionalCosts": { + "type": "array", + "x-stoplight": { + "id": "ibv6uo16upgzt" + }, + "description": "Additional costs applied at project level.", + "items": { + "$ref": "#/components/schemas/project-cost-request", + "x-stoplight": { + "id": "lj22tg789rgr1" + } + } } } }, - "list-translation-memory-field-templates": { - "title": "List Translation Memory Field Templates", + "pricing-model-update-request": { + "title": "Pricing Model Update Request", "x-stoplight": { - "id": "icrpz2hliblzj" + "id": "1c3gw712tops3" }, "type": "object", - "description": "A response for the List Translation Memory Field Templates endpoint.", "properties": { - "itemCount": { - "type": "integer" + "name": { + "type": "string", + "x-stoplight": { + "id": "xv08h2p68irht" + }, + "description": "The name of the Pricing Model. ", + "minLength": 1, + "maxLength": 100 }, - "items": { + "description": { + "type": "string", + "x-stoplight": { + "id": "kqq1pm5c0nbkt" + }, + "description": "The description of the Pricing Model. ", + "maxLength": 1000 + }, + "currencyCode": { + "type": "string", + "x-stoplight": { + "id": "640ojrh29nljb" + }, + "description": "The currency code (ISO 4217)." + }, + "languageDirectionPricing": { + "x-stoplight": { + "id": "24gog5ehhl04i" + }, + "description": "Costs applied for languages.", "type": "array", "items": { - "$ref": "#/components/schemas/translation-memory-field-template" + "$ref": "#/components/schemas/language-direction-cost-request", + "x-stoplight": { + "id": "8bkrkdfcb2s15" + } } - } - }, - "required": [ - "itemCount", - "items" - ] - }, - "list-users-response": { - "title": "List Users Response", - "type": "object", - "properties": { - "itemCount": { - "type": "integer" }, - "items": { + "additionalCosts": { + "x-stoplight": { + "id": "buk3e62if233x" + }, + "description": "Additional costs applied at project level.", "type": "array", "items": { - "$ref": "#/components/schemas/user" + "$ref": "#/components/schemas/project-cost-request", + "x-stoplight": { + "id": "dd4fhfzp4hqx2" + } } } - }, - "required": [ - "itemCount", - "items" - ], - "description": "A response for the List Users endpoint." + } }, - "list-workflows-response": { - "title": "List Workflows Response", + "project-pricing-model-update-request": { + "title": "Update project pricing model request", "type": "object", + "required": [ + "id" + ], "properties": { - "itemCount": { - "type": "integer" + "id": { + "type": "string", + "description": "The pricing model identifier." }, - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/workflow" - } + "strategy": { + "type": "string", + "description": "\"copy\": A copy of the resource will be used for the project execution. This is the default strategy.\n\n\"use\": The actual resource will be used for the project execution.", + "default": "copy", + "enum": [ + "copy", + "use" + ] } - }, - "required": [ - "itemCount", - "items" - ], - "description": "A response for the List Workflows endpoint." + } }, - "machine-translation": { - "title": "Machine Translation", - "x-stoplight": { - "id": "q83tushwc71wu" - }, + "pricing-unit-type": { + "title": "Pricing Unit Type", + "enum": [ + "words", + "characters" + ] + }, + "project": { + "title": "Project", "type": "object", - "description": "Machine translation resource.", + "description": "Project resource.", + "required": [ + "id" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The project identifier." }, - "provider": { + "shortId": { "type": "string", - "description": "
Provider of the machine translation.
", - "x-default-field": true, - "x-stoplight": { - "id": "o2vxfwxx5ypjq" - } + "description": "The short identifier of the project." }, - "type": { + "name": { "type": "string", - "x-stoplight": { - "id": "027ukef1wajci" - }, - "description": "Type of the machine translation. Can be generic or neural." + "description": "
default
The project name.
", + "x-default-field": true }, - "systemId": { + "description": { "type": "string", - "x-stoplight": { - "id": "6inesg0lkfqtn" - }, - "description": "
default
Appears if the machine translation is neural." + "description": "The project description." }, - "modelSourceLanguage": { - "x-stoplight": { - "id": "ujzglo1mwl4pl" - }, + "dueBy": { "type": "string", - "description": "Model Source language" + "example": "2022-01-12T12:00:00.000Z", + "description": "The project due date.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", + "format": "date-time", + "nullable": true }, - "modelTargetLanguage": { + "deliveredBy": { "type": "string", + "example": "2022-01-12T12:00:00.000Z", + "description": " UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", + "format": "date-time", + "nullable": true, "x-stoplight": { - "id": "dssycbmasvpyc" - }, - "description": "Model Target language" + "id": "xxmhjuc5d6ohd" + } + }, + "createdAt": { + "type": "string", + "example": "2022-01-12T12:00:00.000Z", + "description": "The project's creation date and time.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", + "format": "date-time", + "nullable": true + }, + "status": { + "type": "string", + "description": "The project's status.", + "enum": [ + "created", + "inProgress", + "completed", + "archived" + ], + "nullable": true + }, + "statusHistory": { + "type": "array", + "description": "The project's status history.", + "nullable": true, + "items": { + "$ref": "#/components/schemas/project-status-history" + } + }, + "languageDirections": { + "type": "array", + "description": "
default
The project's language directions.
", + "x-default-field": true, + "items": { + "$ref": "#/components/schemas/language-direction" + } + }, + "customer": { + "$ref": "#/components/schemas/customer" + }, + "createdBy": { + "$ref": "#/components/schemas/user" + }, + "location": { + "$ref": "#/components/schemas/folder-v2", + "description": "
default
The resource folder.
", + "x-default-field": true + }, + "projectTemplate": { + "$ref": "#/components/schemas/project-template-response" + }, + "translationEngine": { + "$ref": "#/components/schemas/translation-engine" + }, + "fileProcessingConfiguration": { + "$ref": "#/components/schemas/file-processing-configuration" + }, + "pricingModel": { + "$ref": "#/components/schemas/pricing-model" + }, + "workflow": { + "$ref": "#/components/schemas/workflow" + }, + "projectPlan": { + "$ref": "#/components/schemas/project-plan" + }, + "analytics": { + "$ref": "#/components/schemas/analytics" + }, + "analysisStatistics": { + "$ref": "#/components/schemas/analysis-statistics" + }, + "quote": { + "$ref": "#/components/schemas/quote" + }, + "customFields": { + "type": "array", + "description": "The Custom Fields", + "items": { + "$ref": "#/components/schemas/custom-field" + } + }, + "tqaProfile": { + "$ref": "#/components/schemas/tqa-profile" + }, + "forceOnline": { + "type": "boolean", + "description": "This forces the project to be translated using the Trados Cloud Platform Online Editor exclusively." }, - "matchingSourceLanguage": { - "type": "string", - "x-stoplight": { - "id": "rxm5xpz6oj11t" - }, - "description": "Specific source language supported by the model, matching the query " + "quoteTemplate": { + "$ref": "#/components/schemas/project-quote-template" }, - "matchingTargetLanguages": { + "projectGroup": { + "$ref": "#/components/schemas/project-group" + }, + "projectManagers": { "type": "array", - "x-stoplight": { - "id": "ncr79i78eof3x" - }, - "description": "Specific target languages supported by the model, matching the query ", "items": { - "x-stoplight": { - "id": "7ekyl863df2e7" - }, - "type": "string" + "$ref": "#/components/schemas/project-manager-response" } - } - }, - "required": [ - "id", - "provider", - "type", - "modelSourceLanguage", - "modelTargetLanguage", - "matchingSourceLanguage", - "matchingTargetLanguages" - ] - }, - "object-id": { - "title": "Object Identifier", - "type": "object", - "description": "An object with identifier.", - "properties": { - "id": { - "type": "string" - } - }, - "required": [ - "id" - ] - }, - "object-id-request": { - "title": "Object Identifier Request", - "type": "object", - "description": "An object with identifier.", - "properties": { - "id": { - "type": "string" - } - }, - "required": [ - "id" - ] - }, - "perfect-match-candidate": { - "title": "PerfectMatch Candidate", - "x-stoplight": { - "id": "fx87e3hzcrq7z" - }, - "type": "object", - "x-internal": false, - "required": [ - "score", - "fileId" - ], - "properties": { - "score": { - "type": "number", - "x-stoplight": { - "id": "fm35hes639la9" - }, - "format": "double", - "description": "The match score.", - "minimum": 0, - "maximum": 100 }, - "fileId": { - "type": "string", + "scheduleTemplate": { + "$ref": "#/components/schemas/schedule-template", "x-stoplight": { - "id": "vs2ndi7jr87fl" - }, - "description": "The file identifier:\r\n- `targetFileId` if file is a project file\r\n- `fileId` if file is user provided" + "id": "dsvy1i7nqqv3z" + } }, - "project": { - "$ref": "#/components/schemas/project", - "x-stoplight": { - "id": "umsyu9xmi8sqp" - }, - "description": "The project from where the candidate was selected." - } - }, - "description": "A project file that can be used as a match for PerfectMatch" - }, - "perfect-match-custom-file-mapping-request": { - "title": "PerfectMatch Custom File Mapping Request", - "x-stoplight": { - "id": "c787724801aca" - }, - "description": "Provide you own matching file.", - "type": "object", - "required": [ - "properties", - "file" - ], - "properties": { - "properties": { - "type": "object", + "perfectMatchMapping": { + "$ref": "#/components/schemas/perfect-match-mapping-simple-response", "x-stoplight": { - "id": "q75mghzupqq7g" - }, - "required": [ - "name", - "targetLanguage" - ], - "properties": { - "name": { - "type": "string", - "x-stoplight": { - "id": "df0d1cic1j71s" - }, - "description": "The file name." - }, - "targetLanguage": { - "type": "string", - "x-stoplight": { - "id": "2pdl6nnrb1ar4" - } - } + "id": "15ak4sadvjb89" } }, - "file": { - "type": "string", + "settings": { + "$ref": "#/components/schemas/project-settings-response", "x-stoplight": { - "id": "1yko3sjshe3k8" - }, - "format": "binary", - "description": "The source file (binary string). Only SDLXLIFF files are accepted." + "id": "k0yk2u3skecpf" + } } } }, - "perfect-match-mapping-create-request": { - "title": "PerfectMatch Mapping Create Request", - "x-stoplight": { - "id": "q81dfuu1hzfp8" - }, + "project-create-request": { + "title": "Project Create Request", "type": "object", - "description": "A request to create a new PerfectMatch mapping.", + "description": "Input for Project creation.\n\nBefore starting the project, the required configuration resources (translation engine, file processing configuration and workflow) should be set either explicitly or through a project template that contains references to these configuration resources.", "required": [ - "projectId" + "name", + "dueBy", + "languageDirections", + "location" ], "properties": { - "projectId": { + "name": { "type": "string", - "x-stoplight": { - "id": "nemjj434jweo7" - }, - "description": "The project identifier this mapping will be used on." + "description": "The project name.\\\nUnsupported characters in the name: `\\` `/` `:` ` *` `?` `\"` `<` `>` `|`", + "minLength": 1, + "maxLength": 100 }, - "matchingProjects": { + "description": { + "type": "string", + "description": "The project description.", + "maxLength": 1000 + }, + "dueBy": { + "$ref": "#/components/schemas/date-time" + }, + "projectTemplate": { + "$ref": "#/components/schemas/object-id-request" + }, + "languageDirections": { "type": "array", - "x-stoplight": { - "id": "cizz5j6yddvzh" - }, - "description": "A collection of projects that will be used to find matches and candidates for PerfectMatch mapping.", - "minItems": 0, - "maxItems": 10, - "items": { - "x-stoplight": { - "id": "52fzpqwxdoc9p" - }, - "type": "string" - } - } - } - }, - "perfect-match-mapping-response": { - "type": "object", - "x-examples": { - "Example 1": { - "id": "string", - "projectId": "string", - "createdBy": "string", - "mappings": [ - { - "id": "string", - "projectMappingId": "string", - "batch": 1073741824, - "mappingStatus": "GENERATED", - "mappingProviders": [ - { - "projectId": "string" - } - ], - "files": [ - { - "id": "string", - "fileId": "string", - "fileStorageId": "string", - "fileName": "string", - "path": [ - "string" - ], - "languageMappings": [ - { - "targetLanguage": "string", - "match": { - "fileName": "string", - "path": [ - "string" - ], - "origin": { - "fileId": "string", - "projectId": "string", - "matchSource": "USER", - "type": "BCM" - } - } - } - ] - } - ] - } - ] - } - }, - "title": "PerfectMatch Mapping Response", - "required": [ - "id" - ], - "properties": { - "id": { + "description": "The language directions.\n\nWhen creating a project using a project template that supports multiple source languages, you must supply the `languageDirections`.
Note: The values for source and targe language must have the same value as the source and target language from project template.", + "items": { + "$ref": "#/components/schemas/language-direction-request" + } + }, + "location": { "type": "string", - "description": "The mapping identifier." + "description": "The folder identifier where the project should be created." }, - "project": { - "$ref": "#/components/schemas/project", - "description": "The project id where this mapping is used.", - "x-stoplight": { - "id": "cw1yohtjvixag" + "translationEngine": { + "$ref": "#/components/schemas/configuration-resource-request" + }, + "fileProcessingConfiguration": { + "$ref": "#/components/schemas/configuration-resource-request" + }, + "workflow": { + "$ref": "#/components/schemas/configuration-resource-request" + }, + "pricingModel": { + "$ref": "#/components/schemas/configuration-resource-request" + }, + "customFields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/custom-field-request" } }, - "createdBy": { - "$ref": "#/components/schemas/user", - "description": "The account user who created the mapping." + "tqaProfile": { + "$ref": "#/components/schemas/configuration-resource-request" }, - "batchMappings": { + "forceOnline": { + "type": "boolean", + "description": "This forces the project to be translated using the Trados Cloud Platform Online Editor exclusively." + }, + "projectManagers": { "type": "array", - "description": "A collection of mappings per project batches.", "items": { - "$ref": "#/components/schemas/perfect-match-batch-mapping", - "x-stoplight": { - "id": "gp890bw2rx06u" - } + "$ref": "#/components/schemas/project-manager-request" + } + }, + "scheduleTemplate": { + "$ref": "#/components/schemas/configuration-resource-request" + }, + "settings": { + "$ref": "#/components/schemas/project-settings-request", + "x-stoplight": { + "id": "53re0us2no8zk" } } } }, - "perfect-match-mapping-simple-response": { + "project-configuration": { + "title": "Project Configuration", + "x-stoplight": { + "id": "qx05l6h0joh9h" + }, + "description": "The configuration settings for a project.", "type": "object", + "properties": { + "translationMemoryFields": { + "$ref": "#/components/schemas/translation-memory-fields", + "description": "
default
", + "x-default-field": true + }, + "updateTranslationMemory": { + "$ref": "#/components/schemas/update-translation-memory", + "x-stoplight": { + "id": "akhqz2lu4ks2b" + } + } + } + }, + "project-configuration-request": { + "title": "Project Configuration Request", "x-stoplight": { - "id": "y1b8w4daohpzi" + "id": "5ivmv9i754acq" }, - "x-examples": { - "Example 1": { - "id": "string", - "projectId": "string", - "createdBy": "string", - "mappings": [ - { - "id": "string", - "projectMappingId": "string", - "batch": 1073741824, - "mappingStatus": "GENERATED", - "mappingProviders": [ - { - "projectId": "string" - } - ], - "files": [ - { - "id": "string", - "fileId": "string", - "fileStorageId": "string", - "fileName": "string", - "path": [ - "string" - ], - "languageMappings": [ - { - "targetLanguage": "string", - "match": { - "fileName": "string", - "path": [ - "string" - ], - "origin": { - "fileId": "string", - "projectId": "string", - "matchSource": "USER", - "type": "BCM" - } - } - } - ] - } - ] - } - ] + "type": "object", + "description": "A request used to update the configuration settings for a project.", + "properties": { + "translationMemoryFieldsSettings": { + "$ref": "#/components/schemas/translation-memory-fields-update-request" + }, + "updateTranslationMemory": { + "$ref": "#/components/schemas/update-translation-memory", + "x-stoplight": { + "id": "zx6orwsjfd51g" + } + }, + "perfectMatchMappingId": { + "type": "string", + "x-stoplight": { + "id": "84cmud84h1lf6" + }, + "description": "The PerfectMatch mapping to be associated with the project." } + } + }, + "project-cost-request": { + "title": "Project Cost Request", + "x-stoplight": { + "id": "c3890498b55df" }, - "title": "PerfectMatch Mapping Response", + "type": "object", "required": [ - "id" + "name", + "type" ], "properties": { - "id": { + "name": { "type": "string", - "description": "The mapping identifier." + "description": "The name of the additional cost. " }, - "createdBy": { - "$ref": "#/components/schemas/user", - "description": "The account user who created the mapping." + "type": { + "$ref": "#/components/schemas/project-cost-type", + "description": "The type of the additional cost." }, - "batchMappings": { + "index": { + "type": "number", + "description": "The number of the additional cost." + }, + "costPerUnit": { + "type": "number", + "description": "The cost of a unit." + }, + "unitCount": { + "type": "number", + "description": "The number of units for which a cost is applied." + }, + "volumeUnitType": { + "$ref": "#/components/schemas/volume-unit-type", + "description": "The unit type of the 'volume' cost, used as reference for the unit cost." + }, + "conditionalCostType": { + "$ref": "#/components/schemas/conditional-cost-type", + "description": "Only for the Conditional type." + }, + "costOperator": { + "$ref": "#/components/schemas/conditional-cost-operator", + "description": "Only for the Conditional type.", + "x-stoplight": { + "id": "zqif0hjssiw1a" + } + }, + "costVariable": { + "$ref": "#/components/schemas/conditional-cost-variable", + "description": "Only for the Conditional type.", + "x-stoplight": { + "id": "3a5ok8ukdtldt" + } + }, + "operand": { + "type": "number", + "description": "Operand of the Conditional type cost." + }, + "serviceTypes": { "type": "array", - "description": "A collection of mappings per project batches.", + "x-stoplight": { + "id": "k49y0alzptb99" + }, + "description": "Array of Service Type identifiers where this additional cost is applied.", "items": { - "$ref": "#/components/schemas/perfect-match-batch-mapping" + "x-stoplight": { + "id": "mg7w7sqohrgze" + }, + "type": "string" } + }, + "customUnitName": { + "type": "string", + "x-stoplight": { + "id": "1jvy04hcveeqt" + }, + "maxLength": 100, + "description": "The name of the custom unit. Required when `volumeUnitType` is `custom`." } + } + }, + "project-cost-type": { + "title": "Project Cost Type", + "x-stoplight": { + "id": "nu6db8fhwsnqb" }, - "description": "PerfectMatch Mapping (Not available for List Projects endpoint)" - }, - "perfect-match-mapping-create-response": { - "type": "object", - "x-stoplight": { - "id": "ztgh3mwksij6k" - }, - "x-examples": { - "Example 1": { - "id": "string", - "projectId": "string", - "createdBy": "string", - "mappings": [ - { - "id": "string", - "projectMappingId": "string", - "batch": 1073741824, - "mappingStatus": "GENERATED", - "mappingProviders": [ - { - "projectId": "string" - } - ], - "files": [ - { - "id": "string", - "fileId": "string", - "fileStorageId": "string", - "fileName": "string", - "path": [ - "string" - ], - "languageMappings": [ - { - "targetLanguage": "string", - "match": { - "fileName": "string", - "path": [ - "string" - ], - "origin": { - "fileId": "string", - "projectId": "string", - "matchSource": "USER", - "type": "BCM" - } - } - } - ] - } - ] - } - ] - } - }, - "title": "PerfectMatch Mapping Create Response", - "required": [ - "id" - ], + "enum": [ + "volume", + "perTargetLanguage", + "perFile", + "hourly", + "percentage", + "perPage", + "conditional", + "adhoc", + "adhocVolume" + ] + }, + "project-group": { + "title": "Project Group", + "type": "object", + "description": "Project Group resource. (Not available for List Projects endpoint)", "properties": { "id": { "type": "string", - "description": "The mapping identifier." + "description": "The project group identifier." }, - "project": { - "$ref": "#/components/schemas/project", - "description": "The project id where this mapping is used." + "shortId": { + "type": "string", + "description": "The short identifier of the project group." }, - "createdBy": { - "$ref": "#/components/schemas/user", - "description": "The account user who created the mapping." + "name": { + "type": "string", + "description": "
default
The project group name.
", + "x-default-field": true }, - "batchMappings": { + "description": { + "type": "string", + "description": "The project group description." + }, + "status": { + "type": "string", + "description": "The status of the projects in the project group.\n\n- `new`: the group is new created, or all projects in the group have status New\n\n- `inProgress`: at least one project in the group is in progress\n\n- `completed`: all projects in the group have status Completed\n\n- `deleting`: the group is getting deleted and the projects are removing from it", + "enum": [ + "new", + "inProgress", + "completed", + "deleting" + ] + }, + "projects": { "type": "array", - "description": "A collection of mappings per project batches.", + "description": "The projects in the project group.", "items": { - "$ref": "#/components/schemas/perfect-match-batch-mapping-created-response" + "$ref": "#/components/schemas/project-group-project" } + }, + "location": { + "$ref": "#/components/schemas/folder-v2" + }, + "createdAt": { + "type": "string", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the project group was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\" ", + "format": "date-time" + }, + "lastModifiedAt": { + "type": "string", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the project group was modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", + "format": "date-time" } - } + }, + "required": [ + "id" + ] }, - "perfect-match-project-file-mapping-request": { + "project-group-create-response": { + "title": "Project Group Create Response", "type": "object", - "title": "PerfectMatch Project File Mapping Request", - "description": "Provide a matching file from an existing project.", - "required": [ - "fileId", - "projectId" - ], + "description": "The Project Group Create response. ", "properties": { - "fileId": { + "id": { "type": "string", - "description": "The `targetFileId` from the referenced project. Must be from a PerfectMatch Candidate." + "description": "The project group identifier." }, - "projectId": { + "name": { "type": "string", - "description": "Specifies which project the matching file belongs to. Must be from a PerfectMatch Candidate." + "description": "The project group name." + }, + "description": { + "type": "string", + "description": "The project group description." + }, + "status": { + "type": "string", + "description": "The status of the projects in the project group.\n\n- `new`: the group is newly created, or all the projects in the group have the \"New\" status \n\n- `inProgress`: at least one project in the group is in progress\n\n- `completed`: all projects in the group have the \"Completed\" status \n\n- `deleting`: the group is being deleted and the projects will be removed", + "enum": [ + "new", + "inProgress", + "completed", + "deleting" + ] + }, + "location": { + "$ref": "#/components/schemas/folder-v2" + }, + "shortId": { + "type": "string", + "x-stoplight": { + "id": "g72simvju3z9z" + } + }, + "createdAt": { + "type": "string", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the project group was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", + "format": "date-time" + }, + "lastModifiedAt": { + "type": "string", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the project group was modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", + "format": "date-time" } - } - }, - "perfect-match-batch-mapping-created-response": { - "title": "PerfectMatch Batch Mapping Created Response", - "x-stoplight": { - "id": "sd4wox8a8yxu0" }, - "type": "object", "required": [ "id" - ], + ] + }, + "project-group-project": { + "title": "Project Group Project", + "type": "object", + "description": "Project resource for project group.", "properties": { "id": { "type": "string", - "description": "The identifier of this batch mapping." - }, - "batch": { - "type": "integer", - "minimum": 1, - "description": "The project batch associated with this mapping." + "description": "The project identifier." }, "status": { - "description": "The status of the matching operation.\r\n\r\n- `pending` - The matching background operation has not started yet.\r\n- `generating` - The system is currently matching candidates.\r\n- `generated` - The matching background operation has finished and any possible candidates have been found.", "type": "string", + "description": "The project's status.", "enum": [ - "generating", - "generated", - "pending" + "attaching", + "attached", + "detaching", + "updating", + "failed" ] - }, - "matchingProjects": { - "type": "array", - "items": { - "$ref": "#/components/schemas/project" - } } + }, + "required": [ + "id" + ], + "x-stoplight": { + "id": "kia482tzj55ou" } }, - "perfect-match-batch-mapping-update-request": { - "title": "PerfectMatch Batch Mapping Update Request", + "project-group-project-request": { + "title": "Project Group Project Request", + "x-stoplight": { + "id": "abqotabie1tzm" + }, "type": "object", + "properties": { + "id": { + "type": "string", + "description": "A project id." + } + }, "required": [ - "languageDirections", - "files" - ], + "id" + ] + }, + "project-group-create-request": { + "title": "Project Group Create Request", + "type": "object", + "description": "Input for project group creation.", "properties": { - "languageDirections": { - "type": "array", - "x-stoplight": { - "id": "wx7ycae79bp99" - }, - "items": { - "$ref": "#/components/schemas/language-direction-request", - "x-stoplight": { - "id": "onvc9ppeqn9nx" - } - } + "name": { + "type": "string", + "description": "The project group name.\\\nMust be unique per location.\\\nUnsupported characters in the name: `\\` `/` `:` ` *` `?` `\"` `<` `>` `|`", + "minLength": 1, + "maxLength": 100 }, - "files": { - "type": "array", - "x-stoplight": { - "id": "bfels2gzsvw4f" - }, - "items": { - "$ref": "#/components/schemas/perfect-match-file-mapping-request", - "x-stoplight": { - "id": "c174aqqs2sxuq" - } - } + "description": { + "type": "string", + "description": "The project group description.", + "maxLength": 1000 }, - "matchingProjects": { - "type": "array", - "x-stoplight": { - "id": "1i0ai06fg30tf" - }, - "maxItems": 10, - "description": "A collection of project identifiers that will be used to find matches and candidates for PerfectMatch mapping.", - "items": { - "x-stoplight": { - "id": "1tzpb2tsqipah" - }, - "type": "string" - } + "location": { + "type": "string", + "description": "The folder identifier where the project group should be created. If it isn't mentioned, it will be created in the Root folder. If the user does not have access in Root, the request will fail with forbidden error. " + } + }, + "required": [ + "name" + ] + }, + "project-group-update-request": { + "title": "Project Group Update Request", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The project group name.\\\nUnsupported characters in the name: `\\` `/` `:` ` *` `?` `\"` `<` `>` `|`", + "minLength": 1, + "maxLength": 100 + }, + "description": { + "type": "string", + "description": "The project group description.", + "maxLength": 1000 } } }, - "perfect-match-batch-mapping": { - "title": "PerfectMatch Batch Mapping", + "project-manager-request": { + "title": "Project Manager Request", "x-stoplight": { - "id": "9cda3eljxhu3a" + "id": "6j883j92igshf" }, "type": "object", - "required": [ - "id" - ], "properties": { "id": { "type": "string", - "x-stoplight": { - "id": "oxnybhlyo0zi7" - }, - "description": "The identifier of this batch mapping." - }, - "batch": { - "type": "integer", - "x-stoplight": { - "id": "s6rq1wfw9jdy1" - }, - "minimum": 1, - "description": "The project batch associated with this mapping." + "description": "Depending on the type, User identifier or Group identifier." }, - "status": { - "x-stoplight": { - "id": "vaorrbeajdfu5" - }, - "description": "The status of the matching operation.\r\n\r\n- `pending` - The matching background operation has not started yet.\r\n- `generating` - The system is currently matching candidates.\r\n- `generated` - The matching background operation has finished and any possible candidates have been found.", + "type": { "type": "string", "enum": [ - "generating", - "generated", - "pending" + "group", + "user" ] - }, - "matchingProjects": { - "type": "array", - "x-stoplight": { - "id": "friowu6zupizf" - }, - "items": { - "$ref": "#/components/schemas/project", - "x-stoplight": { - "id": "oc87tuszl8nfk" - } - } - }, - "matchingFiles": { - "type": "array", - "x-stoplight": { - "id": "9jd93fqm2ltik" - }, - "description": "The file matches identified based on this mapping. Matching files will be available when status is `generated`.", - "items": { - "$ref": "#/components/schemas/perfect-match-file-mapping", - "x-stoplight": { - "id": "9pjk6n73h08ny" - } - } } - } + }, + "required": [ + "id", + "type" + ] }, - "perfect-match-file-match": { - "title": "PerfectMatch File Match", + "project-manager-response": { + "title": "Project Manager Response", "x-stoplight": { - "id": "6cznfvzrl2f6u" + "id": "jpzqsh6pvehw6" }, "type": "object", - "required": [ - "fileName", - "targetLanguage" - ], + "description": "", "properties": { - "fileName": { + "type": { "type": "string", - "x-stoplight": { - "id": "1p98snhwpm9z2" - }, - "description": "The file name." + "enum": [ + "group", + "user" + ] }, - "targetLanguage": { - "$ref": "#/components/schemas/language", - "x-stoplight": { - "id": "08vniy685mxh2" - }, - "description": "The target language this is matched to." + "user": { + "$ref": "#/components/schemas/user" }, - "origin": { - "$ref": "#/components/schemas/perfect-match-file-origin", - "x-stoplight": { - "id": "id0ppt1te182q" - }, - "description": "The source of this match." + "group": { + "$ref": "#/components/schemas/group" } } }, - "perfect-match-file-mapping": { - "title": "PerfectMatch File Mapping", + "project-settings-request": { + "title": "Project Settings", "x-stoplight": { - "id": "03dgg9mbsdrab" + "id": "7hz2hdu01vw0w" }, "type": "object", - "required": [ - "fileMappingId", - "targetLanguages", - "matches" - ], "properties": { - "fileMappingId": { - "type": "string", - "x-stoplight": { - "id": "a3wt6g7te3bf4" - }, - "description": "The identifier of this file mapping." - }, - "fileId": { - "type": "string", - "x-stoplight": { - "id": "z52hcnkibqypu" - }, - "description": "The file identifier." - }, - "fileName": { - "type": "string", - "x-stoplight": { - "id": "8ol3pommxgmwx" - }, - "description": "The file name." - }, - "targetLanguages": { - "type": "array", + "general": { + "$ref": "#/components/schemas/project-settings-general-request", "x-stoplight": { - "id": "r4uvpx3hkfk6r" - }, - "description": "File target languages.", - "items": { - "$ref": "#/components/schemas/language", - "x-stoplight": { - "id": "wgqj3aq90fxrl" - } + "id": "uv85h82rgn4ao" } - }, - "matches": { - "type": "array", + } + } + }, + "project-settings-response": { + "title": "Project Settings", + "x-stoplight": { + "id": "79vl39jda1he7" + }, + "type": "object", + "properties": { + "general": { + "$ref": "#/components/schemas/project-settings-general-response", + "description": "
default
\r\n" + } + } + }, + "project-settings-general-request": { + "title": "Project General Settings", + "x-stoplight": { + "id": "6dnig61u68hsr" + }, + "type": "object", + "properties": { + "completionConfiguration": { + "$ref": "#/components/schemas/completion-config-request", "x-stoplight": { - "id": "lrkirjzhqym3j" - }, - "description": "The file matches.", - "items": { - "$ref": "#/components/schemas/perfect-match-file-match", - "x-stoplight": { - "id": "h0414pn1x8ebh" - } + "id": "k15wt6trvjgbt" } } } }, - "perfect-match-file-mapping-request": { - "title": "PerfectMatch File Mapping Request", + "project-settings-general-response": { + "title": "Project General Settings", "x-stoplight": { - "id": "mtvcmglyse666" + "id": "v82ei22cerb0w" }, "type": "object", - "required": [ - "sourceFileId", - "fileName" - ], "properties": { - "sourceFileId": { + "completionConfiguration": { + "$ref": "#/components/schemas/completion-config-response", + "description": "
default
" + } + } + }, + "project-update-request": { + "title": "Project Update Request", + "type": "object", + "properties": { + "name": { "type": "string", - "description": "The source file identifier.", - "x-stoplight": { - "id": "6gsxau7p4z2t8" - } + "description": "The project name.\\\nUnsupported characters in the name: `\\` `/` `:` ` *` `?` `\"` `<` `>` `|`", + "minLength": 1, + "maxLength": 100 }, - "fileName": { + "description": { "type": "string", - "description": "The file name." + "description": "The project description.", + "maxLength": 1000 + }, + "dueBy": { + "$ref": "#/components/schemas/date-time" + }, + "deliveredBy": { + "$ref": "#/components/schemas/date-time", + "x-stoplight": { + "id": "jlta5oi7fu3kf" + }, + "description": "Value used to automatically update dueBy of the project at the Customer Quote Approval step, if this step exists in the project workflow." + }, + "translationEngine": { + "$ref": "#/components/schemas/configuration-resource-request" + }, + "fileProcessingConfiguration": { + "$ref": "#/components/schemas/configuration-resource-request" + }, + "pricingModel": { + "$ref": "#/components/schemas/configuration-resource-request", + "description": "Resource configuration properties. Pricing model can only be updated for projects that are not started." + }, + "workflow": { + "$ref": "#/components/schemas/configuration-resource-request" + }, + "projectPlan": { + "$ref": "#/components/schemas/project-plan-update-request" + }, + "tqaProfile": { + "$ref": "#/components/schemas/configuration-resource-request" + }, + "quote": { + "$ref": "#/components/schemas/quote-update-request" + }, + "customFields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/custom-field-request" + } }, - "targetLanguages": { + "projectManagers": { "type": "array", - "description": "File target languages. If no languages are specified, all language directions from the batch mapping will be used.", "items": { - "$ref": "#/components/schemas/target-language-request" + "$ref": "#/components/schemas/project-manager-request" + } + }, + "settings": { + "$ref": "#/components/schemas/project-settings-request", + "x-stoplight": { + "id": "xd2b0b8qrxmfl" } } } }, - "perfect-match-file-origin": { - "title": "PerfectMatch File Origin", - "x-stoplight": { - "id": "bv5cnpx9k3iny" - }, + "project-template-create-request": { + "title": "Project Template Create Request", "type": "object", + "description": "Input for Project Template creation.", "required": [ - "fileId" + "name", + "location", + "fileProcessingConfiguration" ], "properties": { - "fileId": { + "name": { + "type": "string", + "description": "The project template name.", + "minLength": 1, + "maxLength": 100 + }, + "description": { + "type": "string", + "description": "The project description.", + "maxLength": 1000 + }, + "location": { "type": "string", + "description": "The folder identifier where the project should be created." + }, + "fileProcessingConfiguration": { + "$ref": "#/components/schemas/configuration-resource-request", "x-stoplight": { - "id": "f2apl2q7ak1dd" + "id": "uj8d2oyrr72tr" } }, - "matchSource": { + "projectManagers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/project-manager-request" + } + }, + "scheduleTemplate": { + "$ref": "#/components/schemas/configuration-resource-request", "x-stoplight": { - "id": "hnztp78j7k3kv" - }, - "type": "string", - "enum": [ - "userUpload", - "perfectMatch", - "candidateConfirm", - "userSelection" - ] + "id": "rg3f3u9tenpfl" + } }, - "projectId": { - "type": "string", + "languageDirections": { + "type": "array", + "description": "The language directions.\n\nWhen creating a project using a project template that supports multiple source languages, you must supply the `languageDirections`.
Note: The values for source and targe language must have the same value as the source and target language from project template.", + "items": { + "$ref": "#/components/schemas/language-direction-request" + } + }, + "customFields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/custom-field-request" + } + }, + "translationEngine": { + "$ref": "#/components/schemas/configuration-resource-request", "x-stoplight": { - "id": "zq9xsxg01n4cr" + "id": "thx33vvuk5gyo" } }, - "type": { + "pricingModel": { + "$ref": "#/components/schemas/configuration-resource-request", "x-stoplight": { - "id": "plrs8n0348nq8" - }, - "type": "string", - "enum": [ - "bcm", - "sdlXliff" - ] + "id": "qmx22fog888cz" + } + }, + "workflow": { + "$ref": "#/components/schemas/configuration-resource-request", + "x-stoplight": { + "id": "7djywbuahg9ha" + } + }, + "settings": { + "$ref": "#/components/schemas/project-template-settings-request", + "x-stoplight": { + "id": "ygnao3kecn7hc" + } } } }, - "pricing-model": { - "title": "Pricing Model", + "project-template-update-request": { + "title": "Project Template Update Request", + "x-stoplight": { + "id": "udaysucy7sgy4" + }, "type": "object", - "description": "Pricing Model resource. (Not available for List Projects endpoint)", + "description": "Input for Project Template creation.", "properties": { - "id": { - "type": "string", - "description": "The pricing model identifier." - }, "name": { "type": "string", - "description": "The name of the Pricing Model. " + "description": "The project template name.", + "minLength": 1, + "maxLength": 100 }, "description": { "type": "string", - "description": "The description of the Pricing Model. ", - "x-stoplight": { - "id": "ip7d3npquqhtm" - } + "description": "The project description.", + "maxLength": 1000 }, - "currencyCode": { - "type": "string", - "description": "
default
The currency code (ISO 4217).
", - "x-default-field": true + "fileProcessingConfiguration": { + "$ref": "#/components/schemas/configuration-resource-request" }, - "location": { - "$ref": "#/components/schemas/folder-v2", - "x-default-field": true + "projectManagers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/project-manager-request" + } }, - "languageDirectionPricing": { + "scheduleTemplate": { + "$ref": "#/components/schemas/configuration-resource-request" + }, + "languageDirections": { "type": "array", + "description": "The language directions.\n\nWhen creating a project using a project template that supports multiple source languages, you must supply the `languageDirections`.
Note: The values for source and targe language must have the same value as the source and target language from project template.", "items": { - "$ref": "#/components/schemas/language-price", - "x-stoplight": { - "id": "iulcrkpbt2dkl" - } + "$ref": "#/components/schemas/language-direction-request" } }, - "additionalCosts": { + "customFields": { "type": "array", "items": { - "$ref": "#/components/schemas/additional-cost", - "x-stoplight": { - "id": "8mgl2ge6it23h" - } + "$ref": "#/components/schemas/custom-field-request" } - } - }, - "required": [ - "id", - "name" - ] - }, - "project-pricing-model-update-request": { - "title": "Update project pricing model request", - "type": "object", - "required": [ - "id" - ], - "properties": { - "id": { - "type": "string", - "description": "The pricing model identifier." }, - "strategy": { - "type": "string", - "description": "\"copy\": A copy of the resource will be used for the project execution. This is the default strategy.\n\n\"use\": The actual resource will be used for the project execution.", - "default": "copy", - "enum": [ - "copy", - "use" - ] + "translationEngine": { + "$ref": "#/components/schemas/configuration-resource-request" + }, + "pricingModel": { + "$ref": "#/components/schemas/configuration-resource-request" + }, + "workflow": { + "$ref": "#/components/schemas/configuration-resource-request" + }, + "settings": { + "$ref": "#/components/schemas/project-template-settings-update-request" } } }, - "project": { - "title": "Project", + "project-template-response": { + "title": "Project Template", + "x-stoplight": { + "id": "f513d3d83fd5d" + }, "type": "object", - "description": "Project resource.", + "description": "Project Template resource. (Not available for List Projects endpoint)", "required": [ "id" ], "properties": { "id": { "type": "string", - "description": "The project identifier." - }, - "shortId": { - "type": "string", - "description": "The short identifier of the project." + "description": "The project template identifier." }, "name": { "type": "string", - "description": "
default
The project name.
", + "description": "
default
The project template name.
", "x-default-field": true }, "description": { "type": "string", - "description": "The project description." - }, - "dueBy": { - "type": "string", - "example": "2022-01-12T12:00:00.000Z", - "description": "The project due date.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", - "format": "date-time", - "nullable": true - }, - "deliveredBy": { - "type": "string", - "example": "2022-01-12T12:00:00.000Z", - "description": " UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", - "format": "date-time", - "nullable": true, - "x-stoplight": { - "id": "xxmhjuc5d6ohd" - } - }, - "createdAt": { - "type": "string", - "example": "2022-01-12T12:00:00.000Z", - "description": "The project's creation date and time.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", - "format": "date-time", - "nullable": true - }, - "status": { - "type": "string", - "description": "The project's status.", - "enum": [ - "created", - "inProgress", - "completed", - "archived" - ], - "nullable": true - }, - "statusHistory": { - "type": "array", - "description": "The project's status history.", - "nullable": true, - "items": { - "$ref": "#/components/schemas/project-status-history" - } + "description": "The project template description." }, "languageDirections": { "type": "array", - "description": "
default
The project's language directions.
", - "x-default-field": true, "items": { - "$ref": "#/components/schemas/language-direction" + "$ref": "#/components/schemas/language-direction-no-statistics" } }, - "customer": { - "$ref": "#/components/schemas/customer" - }, - "createdBy": { - "$ref": "#/components/schemas/user" - }, "location": { - "$ref": "#/components/schemas/folder-v2", - "description": "
default
The resource folder.
", - "x-default-field": true - }, - "projectTemplate": { - "$ref": "#/components/schemas/project-template-response" + "$ref": "#/components/schemas/folder-v2" }, "translationEngine": { "$ref": "#/components/schemas/translation-engine" @@ -20666,37 +23672,17 @@ "workflow": { "$ref": "#/components/schemas/workflow" }, - "projectPlan": { - "$ref": "#/components/schemas/project-plan" - }, - "analytics": { - "$ref": "#/components/schemas/analytics" - }, - "analysisStatistics": { - "$ref": "#/components/schemas/analysis-statistics" - }, - "quote": { - "$ref": "#/components/schemas/quote" - }, "customFields": { "type": "array", - "description": "The Custom Fields", + "description": "The Custom Fields.", "items": { "$ref": "#/components/schemas/custom-field" } }, - "tqaProfile": { - "$ref": "#/components/schemas/tqa-profile" - }, "forceOnline": { "type": "boolean", - "description": "This forces the project to be translated using the Trados Cloud Platform Online Editor exclusively." - }, - "quoteTemplate": { - "$ref": "#/components/schemas/project-quote-template" - }, - "projectGroup": { - "$ref": "#/components/schemas/project-group" + "description": "(Deprecated) Moved under settings.general.forceOnline", + "deprecated": true }, "projectManagers": { "type": "array", @@ -20704,1074 +23690,1490 @@ "$ref": "#/components/schemas/project-manager-response" } }, + "quoteTemplate": { + "$ref": "#/components/schemas/project-quote-template-deprecated" + }, "scheduleTemplate": { "$ref": "#/components/schemas/schedule-template", "x-stoplight": { - "id": "dsvy1i7nqqv3z" - } - }, - "perfectMatchMapping": { - "$ref": "#/components/schemas/perfect-match-mapping-simple-response", - "x-stoplight": { - "id": "15ak4sadvjb89" + "id": "anjnnapb4ow78" } }, "settings": { - "$ref": "#/components/schemas/project-settings-response", + "$ref": "#/components/schemas/project-template-settings-response", "x-stoplight": { - "id": "k0yk2u3skecpf" + "id": "s2h6ypp5yywjr" } } } }, - "project-create-request": { - "title": "Project Create Request", + "project-template-settings-request": { + "title": "Project Template Settings", + "x-stoplight": { + "id": "188a054a839d7" + }, "type": "object", - "description": "Input for Project creation.\n\nBefore starting the project, the required configuration resources (translation engine, file processing configuration and workflow) should be set either explicitly or through a project template that contains references to these configuration resources.", - "required": [ - "name", - "dueBy", - "languageDirections", - "location" - ], + "description": "Input for Project Template settings.", "properties": { - "name": { - "type": "string", - "description": "The project name.\\\nUnsupported characters in the name: `\\` `/` `:` ` *` `?` `\"` `<` `>` `|`", - "minLength": 1, - "maxLength": 100 + "general": { + "$ref": "#/components/schemas/project-template-general-settings-request" }, - "description": { - "type": "string", - "description": "The project description.", - "maxLength": 1000 + "qualityManagement": { + "$ref": "#/components/schemas/project-template-quality-management-settings" + } + } + }, + "project-template-settings-update-request": { + "title": "Project Template Settings", + "x-stoplight": { + "id": "dn5d77vdz1lvw" + }, + "type": "object", + "description": "Input for Project Template settings.", + "properties": { + "general": { + "$ref": "#/components/schemas/project-template-general-settings-update" }, - "dueBy": { - "$ref": "#/components/schemas/date-time" + "qualityManagement": { + "$ref": "#/components/schemas/project-template-quality-management-settings" + } + } + }, + "project-template-settings-response": { + "title": "Project Template Settings", + "x-stoplight": { + "id": "rfvf2oks12otx" + }, + "type": "object", + "description": "Project Template settings. See detailed description of options on the Official Documentation page. \n\r (Not available for List Projects/ProjectTemplates endpoint)", + "properties": { + "general": { + "$ref": "#/components/schemas/project-template-general-settings-response", + "x-default-field": true, + "description": "
default
General settings, are detailed in section 10.a
" }, - "projectTemplate": { - "$ref": "#/components/schemas/object-id-request" + "batchTasks": { + "$ref": "#/components/schemas/project-template-batch-tasks-settings" }, - "languageDirections": { - "type": "array", - "description": "The language directions.\n\nWhen creating a project using a project template that supports multiple source languages, you must supply the `languageDirections`.
Note: The values for source and targe language must have the same value as the source and target language from project template.", - "items": { - "$ref": "#/components/schemas/language-direction-request" + "verification": { + "$ref": "#/components/schemas/project-template-verification-settings" + }, + "qualityManagement": { + "$ref": "#/components/schemas/project-template-quality-management-settings-response" + }, + "translationMemorySettings": { + "$ref": "#/components/schemas/project-template-translation-memory-settings" + } + } + }, + "project-template-general-settings-request": { + "title": "General settings", + "x-stoplight": { + "id": "96ba14884fdf8" + }, + "type": "object", + "description": "General settings", + "properties": { + "forceOnline": { + "type": "boolean", + "x-stoplight": { + "id": "dya48eul3lslu" + }, + "description": "This forces the project to be translated using the Trados Cloud Platform Online Editor exclusively.", + "default": false + }, + "quoteTemplate": { + "$ref": "#/components/schemas/configuration-resource-request", + "x-stoplight": { + "id": "0l9y1waovurvh" } }, - "location": { - "type": "string", - "description": "The folder identifier where the project should be created." + "customerPortalVisibility": { + "type": "boolean", + "x-stoplight": { + "id": "76vxoxivbrgmb" + }, + "description": "Customer Portal visibility", + "default": true }, - "translationEngine": { - "$ref": "#/components/schemas/configuration-resource-request" + "completionConfiguration": { + "$ref": "#/components/schemas/completion-config-request" + } + } + }, + "project-template-general-settings-update": { + "title": "General settings", + "x-stoplight": { + "id": "qjkldydwydntm" + }, + "type": "object", + "description": "General settings", + "properties": { + "forceOnline": { + "type": "boolean", + "description": "This forces the project to be translated using the Trados Cloud Platform Online Editor exclusively.", + "default": false }, - "fileProcessingConfiguration": { + "quoteTemplate": { "$ref": "#/components/schemas/configuration-resource-request" }, - "workflow": { - "$ref": "#/components/schemas/configuration-resource-request" + "customerPortalVisibility": { + "type": "boolean", + "description": "Customer Portal visibility", + "default": true }, - "pricingModel": { - "$ref": "#/components/schemas/configuration-resource-request" + "completionConfiguration": { + "$ref": "#/components/schemas/completion-config-request", + "x-stoplight": { + "id": "zkvabfvamhyoj" + } + } + } + }, + "project-template-general-settings-response": { + "title": "General settings", + "x-stoplight": { + "id": "d6p1yr5skykdb" + }, + "type": "object", + "description": "General settings, are detailed in section 10.a", + "properties": { + "forceOnline": { + "type": "boolean", + "description": "
default
Restrict file downloads.", + "x-default-field": true, + "default": false + }, + "allowSourceEdit": { + "type": "boolean", + "description": "
default
Allow editing of source text in segments.", + "x-default-field": true, + "default": false + }, + "quoteTemplate": { + "$ref": "#/components/schemas/project-quote-template", + "x-default-field": true, + "description": "
default
" + }, + "customerPortalVisibility": { + "type": "boolean", + "description": "
default
Customer Portal visibility", + "x-default-field": true, + "default": true + }, + "completionConfiguration": { + "$ref": "#/components/schemas/completion-config-request", + "x-stoplight": { + "id": "z9j2lhijfy67v" + }, + "description": "
default
\r\n" + } + } + }, + "project-template-batch-tasks-settings": { + "title": "Project Template Batch Tasks Settings", + "type": "object", + "description": "Project Template Batch Tasks Settings", + "properties": { + "preProcessing": { + "$ref": "#/components/schemas/project-template-batch-tasks-preprocessing-settings", + "x-default-field": true, + "x-stoplight": { + "id": "fd9mooc8in0k8" + }, + "description": "
default
Pre-Processing Settings, configure how TMs are applied, are detailed in section 10.b
" }, - "customFields": { - "type": "array", - "items": { - "$ref": "#/components/schemas/custom-field-request" - } + "updateTranslationMemory": { + "$ref": "#/components/schemas/update-translation-memory-settings", + "x-default-field": true, + "x-stoplight": { + "id": "mm94ig682wabo" + }, + "description": "
default
Configure how TMs are updated throughout the project workflow depending on the status of the segments. Are detailed in section 10.c
" + } + } + }, + "project-template-verification-settings": { + "title": "Project Template Verification Settings", + "type": "object", + "description": "", + "properties": { + "tagVerifier": { + "$ref": "#/components/schemas/project-template-verification-tag-verifier-settings", + "x-default-field": true, + "description": "
default
Tag Verifier Settings, are detailed in section 10.d
" }, + "qaChecker": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-settings", + "x-default-field": true, + "description": "
default
QA Checker Settings, are detailed in section 10.e
" + } + } + }, + "project-template-quality-management-settings": { + "title": "Quality Managment", + "type": "object", + "properties": { "tqaProfile": { - "$ref": "#/components/schemas/configuration-resource-request" - }, - "forceOnline": { - "type": "boolean", - "description": "This forces the project to be translated using the Trados Cloud Platform Online Editor exclusively." - }, - "projectManagers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/project-manager-request" - } - }, - "scheduleTemplate": { - "$ref": "#/components/schemas/configuration-resource-request" - }, - "settings": { - "$ref": "#/components/schemas/project-settings-request", + "$ref": "#/components/schemas/configuration-resource-request", "x-stoplight": { - "id": "53re0us2no8zk" + "id": "9n13w0ndmh8tv" } } } }, - "project-configuration": { - "title": "Project Configuration", + "project-template-quality-management-settings-response": { + "title": "Quality Managment", "x-stoplight": { - "id": "qx05l6h0joh9h" + "id": "a5bkdzgg7q3eh" }, - "description": "The configuration settings for a project.", "type": "object", "properties": { - "translationMemoryFields": { - "$ref": "#/components/schemas/translation-memory-fields", - "description": "
default
", - "x-default-field": true - }, - "updateTranslationMemory": { - "$ref": "#/components/schemas/update-translation-memory", + "tqaProfile": { + "$ref": "#/components/schemas/tqa-profile", "x-stoplight": { - "id": "akhqz2lu4ks2b" + "id": "ln71gs3m3v6lo" } } } }, - "project-configuration-request": { - "title": "Project Configuration Request", + "project-template-translation-memory-settings": { + "title": "Translation Memory settings", "x-stoplight": { - "id": "5ivmv9i754acq" + "id": "f358c4e03ac33" }, "type": "object", - "description": "A request used to update the configuration settings for a project.", + "description": "Translation Memory settings", "properties": { - "translationMemoryFieldsSettings": { - "$ref": "#/components/schemas/translation-memory-fields-update-request" - }, - "updateTranslationMemory": { - "$ref": "#/components/schemas/update-translation-memory", - "x-stoplight": { - "id": "zx6orwsjfd51g" - } - }, - "perfectMatchMappingId": { - "type": "string", - "x-stoplight": { - "id": "84cmud84h1lf6" - }, - "description": "The PerfectMatch mapping to be associated with the project." + "penalties": { + "$ref": "#/components/schemas/project-template-TM-penalties", + "description": "
default
" } } }, - "project-group": { - "title": "Project Group", + "project-template-batch-tasks-preprocessing-settings": { + "title": "Pre-Processing Settings", + "x-stoplight": { + "id": "3dzxuz1skn1pl" + }, "type": "object", - "description": "Project Group resource. (Not available for List Projects endpoint)", + "description": "Pre-Processing Settings, configure how TMs are applied, are detailed in section 10.b", "properties": { - "id": { - "type": "string", - "description": "The project group identifier." - }, - "shortId": { - "type": "string", - "description": "The short identifier of the project group." - }, - "name": { - "type": "string", - "description": "
default
The project group name.
", + "minimumMatchValue": { + "type": "integer", + "minimum": 50, + "maximum": 100, + "default": 70, + "description": "
default
", "x-default-field": true }, - "description": { - "type": "string", - "description": "The project group description." - }, - "status": { - "type": "string", - "description": "The status of the projects in the project group.\n\n- `new`: the group is new created, or all projects in the group have status New\n\n- `inProgress`: at least one project in the group is in progress\n\n- `completed`: all projects in the group have status Completed\n\n- `deleting`: the group is getting deleted and the projects are removing from it", + "translationOverwriteMode": { "enum": [ - "new", - "inProgress", - "completed", - "deleting" - ] + "keepExisting", + "overwriteIfBetter", + "overwriteAlways", + "overwriteExceptPerfectMatch" + ], + "description": "
default
Options: \r\n- `keepExisting`: no segments are overwritten, existing segments are kept;\r\n- `overwriteIfBetter`: unlocked segments (including confirmed segments) are overwritten, while unlocked PerfectMatch segments and locked segments are not overwritten; \r\n- `overwriteAlways`: PerfectMatch segments (both locked and unlocked) are overwritten, while other locked segments are not overwritten;\r\n- `overwriteExceptPerfectMatch`: unlocked segments (including confirmed segments) and locked segments are overwritten, while unlocked PerfectMatch segments are not overwritten;
", + "x-default-field": true, + "default": "overwriteIfBetter" }, - "projects": { + "afterApplyingTranslations": { "type": "array", - "description": "The projects in the project group.", + "x-default-field": true, + "description": "
default
Default: `confirmExactMatches`, `confirmContextMatches`
", "items": { - "$ref": "#/components/schemas/project-group-project" + "enum": [ + "confirmExactMatches", + "confirmContextMatches", + "lockExactMatches", + "lockContextMatches", + "lockGreenSegments", + "lockAmberSegments", + "lockRedSegments" + ], + "default": "confirmContextMatches" } }, - "location": { - "$ref": "#/components/schemas/folder-v2" + "noMatchFoundAction": { + "enum": [ + "leaveTargetSegmentsEmpty", + "copySourceToTarget" + ], + "description": "
default
", + "x-default-field": true, + "default": "leaveTargetSegmentsEmpty" }, - "createdAt": { - "type": "string", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the project group was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\" ", - "format": "date-time" + "reportCrossFileRepetition": { + "type": "boolean", + "default": false, + "description": "If enabled repetitions are identified and included in analysis reports." }, - "lastModifiedAt": { - "type": "string", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the project group was modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", - "format": "date-time" + "excludeLockedSegments": { + "type": "boolean", + "default": false, + "description": "If enabled locked segments (content that must not be translated) are excluded from translation. " } - }, - "required": [ - "id" - ] + } }, - "project-group-create-response": { - "title": "Project Group Create Response", + "project-template-verification-tag-verifier-settings": { + "title": "Tag Verifier Settings", "type": "object", - "description": "The Project Group Create response. ", + "description": "Tag Verifier Settings, are detailed in section 10.d", "properties": { - "id": { - "type": "string", - "description": "The project group identifier." + "enabled": { + "type": "boolean", + "x-stoplight": { + "id": "zzdaica4ipzsl" + } + }, + "checkAddedTags": { + "type": "boolean", + "x-stoplight": { + "id": "7jxj0g9hrjxdd" + }, + "x-default-field": true, + "default": true, + "description": "
default
" + }, + "addedTagsSeverity": { + "x-stoplight": { + "id": "ceijjmhck9qpn" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "error" + }, + "checkDeletedTags": { + "type": "boolean", + "x-stoplight": { + "id": "rw3qbpbox585c" + }, + "x-default-field": true, + "default": true, + "description": "
default
" + }, + "deletedTagsSeverity": { + "x-stoplight": { + "id": "v1367u510xuxk" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "error" + }, + "checkTagOrderChanged": { + "type": "boolean", + "x-stoplight": { + "id": "ug2e4khwq9yjn" + }, + "x-default-field": true, + "default": true, + "description": "
default
" }, - "name": { - "type": "string", - "description": "The project group name." + "tagOrderChangedSeverity": { + "x-stoplight": { + "id": "61mcttvp5oynd" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "warning" }, - "description": { - "type": "string", - "description": "The project group description." + "checkSpacingAroundTags": { + "type": "boolean", + "x-stoplight": { + "id": "vje5xtur0mstq" + }, + "x-default-field": true, + "default": true, + "description": "
default
" }, - "status": { - "type": "string", - "description": "The status of the projects in the project group.\n\n- `new`: the group is newly created, or all the projects in the group have the \"New\" status \n\n- `inProgress`: at least one project in the group is in progress\n\n- `completed`: all projects in the group have the \"Completed\" status \n\n- `deleting`: the group is being deleted and the projects will be removed", + "spaceAroundTagsSeverity": { + "x-stoplight": { + "id": "a8nhawfmukkbc" + }, "enum": [ - "new", - "inProgress", - "completed", - "deleting" - ] - }, - "location": { - "$ref": "#/components/schemas/folder-v2" + "error", + "warning", + "note" + ], + "default": "note" }, - "shortId": { - "type": "string", + "ignoreFormattingTags": { + "type": "boolean", "x-stoplight": { - "id": "g72simvju3z9z" - } + "id": "ucwul9whydkkk" + }, + "x-default-field": true, + "default": true, + "description": "
default
" }, - "createdAt": { - "type": "string", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the project group was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", - "format": "date-time" + "ignoreLockedSegments": { + "type": "boolean", + "x-stoplight": { + "id": "votezrhazpcr8" + }, + "x-default-field": true, + "default": false, + "description": "
default
" }, - "lastModifiedAt": { - "type": "string", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the project group was modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", - "format": "date-time" + "ignoreDifferenceBetweenNormalAndNonBreakingSpace": { + "type": "boolean", + "x-stoplight": { + "id": "2tutxpylevgp5" + }, + "x-default-field": true, + "default": true, + "description": "
default
" } }, "required": [ - "id" + "enabled" ] }, - "project-group-project": { - "title": "Project Group Project", + "project-template-verification-qa-checker-settings": { + "title": "QA checker", "type": "object", - "description": "Project resource for project group.", + "description": "QA Checker Settings, are detailed in section 10.e", "properties": { - "id": { - "type": "string", - "description": "The project identifier." + "enabled": { + "type": "boolean", + "x-stoplight": { + "id": "ht01a321btv9x" + }, + "default": true }, - "status": { - "type": "string", - "description": "The project's status.", - "enum": [ - "attaching", - "attached", - "detaching", - "updating", - "failed" - ] + "allLanguages": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-all-languages", + "x-stoplight": { + "id": "v2h7hwcxscvdm" + }, + "x-default-field": true, + "description": "
default
" + }, + "perTargetLanguage": { + "type": "array", + "x-stoplight": { + "id": "doi99m8k1nucn" + }, + "items": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-per-target-language", + "x-stoplight": { + "id": "pt6p63qkx37fh" + } + } } }, "required": [ - "id" - ], - "x-stoplight": { - "id": "kia482tzj55ou" - } + "enabled" + ] }, - "project-group-project-request": { - "title": "Project Group Project Request", + "project-template-verification-qa-checker-all-languages": { + "title": "All Languages settings", "x-stoplight": { - "id": "abqotabie1tzm" - }, - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "A project id." - } + "id": "u7dex87q8i5am" }, - "required": [ - "id" - ] - }, - "project-group-create-request": { - "title": "Project Group Create Request", "type": "object", - "description": "Input for project group creation.", "properties": { - "name": { - "type": "string", - "description": "The project group name.\\\nMust be unique per location.\\\nUnsupported characters in the name: `\\` `/` `:` ` *` `?` `\"` `<` `>` `|`", - "minLength": 1, - "maxLength": 100 + "segmentsVerification": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-segments-verification", + "x-stoplight": { + "id": "gxhqy9p1q87jg" + }, + "x-default-field": true, + "description": "
default
" }, - "description": { - "type": "string", - "description": "The project group description.", - "maxLength": 1000 + "segmentsToExclude": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-segments-to-exclude", + "x-stoplight": { + "id": "z3drrdagwesm7" + }, + "x-default-field": true, + "description": "
default
" }, - "location": { - "type": "string", - "description": "The folder identifier where the project group should be created. If it isn't mentioned, it will be created in the Root folder. If the user does not have access in Root, the request will fail with forbidden error. " - } - }, - "required": [ - "name" - ] - }, - "project-group-update-request": { - "title": "Project Group Update Request", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The project group name.\\\nUnsupported characters in the name: `\\` `/` `:` ` *` `?` `\"` `<` `>` `|`", - "minLength": 1, - "maxLength": 100 + "inconsistencies": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-inconsistencies", + "x-default-field": true, + "description": "
default
" }, - "description": { - "type": "string", - "description": "The project group description.", - "maxLength": 1000 - } - } - }, - "project-manager-request": { - "title": "Project Manager Request", - "x-stoplight": { - "id": "6j883j92igshf" - }, - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Depending on the type, User identifier or Group identifier." + "punctuation": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-punctuation", + "x-stoplight": { + "id": "ps49964fkhoes" + }, + "x-default-field": true, + "description": "
default
" }, - "type": { - "type": "string", - "enum": [ - "group", - "user" - ] - } - }, - "required": [ - "id", - "type" - ] - }, - "project-manager-response": { - "title": "Project Manager Response", - "x-stoplight": { - "id": "jpzqsh6pvehw6" - }, - "type": "object", - "description": "", - "properties": { - "type": { - "type": "string", - "enum": [ - "group", - "user" - ] + "numbers": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-numbers", + "x-stoplight": { + "id": "0uo9yg9qgw90j" + }, + "x-default-field": true, + "description": "
default
" }, - "user": { - "$ref": "#/components/schemas/user" + "wordList": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-word-list", + "x-stoplight": { + "id": "j7c3kcgbk71ct" + }, + "x-default-field": true, + "description": "
default
" }, - "group": { - "$ref": "#/components/schemas/group" + "regularExpressions": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-regular-expressions", + "x-stoplight": { + "id": "dedwuc8etbbew" + }, + "x-default-field": true, + "description": "
default
" + }, + "trademarkCheck": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-trademark-check", + "x-stoplight": { + "id": "f5jsh5byu5ncp" + }, + "x-default-field": true, + "description": "
default
" + }, + "lengthVerification": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-length-verification", + "x-stoplight": { + "id": "e0fx768sgm9t2" + }, + "x-default-field": true, + "description": "
default
" } } }, - "project-settings-request": { - "title": "Project Settings", + "project-template-verification-qa-checker-per-target-language": { + "title": "Per Language Settings", "x-stoplight": { - "id": "7hz2hdu01vw0w" + "id": "huunxvvs0cbps" }, "type": "object", "properties": { - "general": { - "$ref": "#/components/schemas/project-settings-general-request", + "targetLanguage": { "x-stoplight": { - "id": "uv85h82rgn4ao" - } + "id": "k7hb7dlfim7t9" + }, + "$ref": "#/components/schemas/language" + }, + "punctuation": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-punctuation", + "x-default-field": true, + "description": "
default
" + }, + "numbers": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-numbers", + "x-default-field": true, + "description": "
default
" + }, + "wordList": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-word-list", + "x-default-field": true, + "description": "
default
" + }, + "regularExpressions": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-regular-expressions", + "x-default-field": true, + "description": "
default
" } - } - }, - "project-settings-response": { - "title": "Project Settings", - "x-stoplight": { - "id": "79vl39jda1he7" }, - "type": "object", - "properties": { - "general": { - "$ref": "#/components/schemas/project-settings-general-response", - "description": "
default
\r\n" - } - } + "required": [ + "targetLanguage" + ] }, - "project-settings-general-request": { - "title": "Project General Settings", + "project-template-verification-qa-checker-segments-verification": { + "title": "Segments Verification", "x-stoplight": { - "id": "6dnig61u68hsr" + "id": "p5v3db4luaxqz" }, "type": "object", "properties": { - "completionConfiguration": { - "$ref": "#/components/schemas/completion-config-request", + "checkForgottenTranslation": { + "type": "boolean", + "default": true, "x-stoplight": { - "id": "k15wt6trvjgbt" - } - } - } - }, - "project-settings-general-response": { - "title": "Project General Settings", - "x-stoplight": { - "id": "v82ei22cerb0w" - }, - "type": "object", - "properties": { - "completionConfiguration": { - "$ref": "#/components/schemas/completion-config-response", - "description": "
default
" - } - } - }, - "project-update-request": { - "title": "Project Update Request", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The project name.\\\nUnsupported characters in the name: `\\` `/` `:` ` *` `?` `\"` `<` `>` `|`", - "minLength": 1, - "maxLength": 100 + "id": "xsjmebx726d3x" + }, + "x-default-field": true, + "description": "
default
" }, - "description": { - "type": "string", - "description": "The project description.", - "maxLength": 1000 + "forgottenTranslationSeverity": { + "x-stoplight": { + "id": "0jd2dz8tdy6br" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "error" }, - "dueBy": { - "$ref": "#/components/schemas/date-time" + "checkSourceTargetIdentical": { + "type": "boolean", + "x-stoplight": { + "id": "qmqj04ozi91bk" + }, + "x-default-field": true, + "default": true, + "description": "
default
" }, - "deliveredBy": { - "$ref": "#/components/schemas/date-time", + "sourceTargetIdenticalSeverity": { "x-stoplight": { - "id": "jlta5oi7fu3kf" + "id": "c907ccbq4vdxn" }, - "description": "Value used to automatically update dueBy of the project at the Customer Quote Approval step, if this step exists in the project workflow." + "enum": [ + "error", + "warning", + "note" + ], + "default": "warning" }, - "translationEngine": { - "$ref": "#/components/schemas/configuration-resource-request" + "identicalSegmentsIgnoreTags": { + "type": "boolean", + "x-stoplight": { + "id": "g30eue1qg70r7" + }, + "default": false }, - "fileProcessingConfiguration": { - "$ref": "#/components/schemas/configuration-resource-request" + "identicalSegmentsIgnoreCase": { + "type": "boolean", + "x-stoplight": { + "id": "ici43l9x3dxk1" + }, + "default": false }, - "pricingModel": { - "$ref": "#/components/schemas/configuration-resource-request", - "description": "Resource configuration properties. Pricing model can only be updated for projects that are not started." + "checkTargetLonger": { + "type": "boolean", + "x-stoplight": { + "id": "n80w5dcs09kxa" + }, + "x-default-field": true, + "default": false, + "description": "
default
" }, - "workflow": { - "$ref": "#/components/schemas/configuration-resource-request" + "longerByValue": { + "type": "number", + "x-stoplight": { + "id": "4j31z4qch04fg" + }, + "x-default-field": true, + "default": 50, + "description": "
default
" }, - "projectPlan": { - "$ref": "#/components/schemas/project-plan-update-request" + "checkTargetShorter": { + "type": "boolean", + "x-stoplight": { + "id": "hpzbjbr8t6zhx" + }, + "x-default-field": true, + "default": false, + "description": "
default
" }, - "tqaProfile": { - "$ref": "#/components/schemas/configuration-resource-request" + "shorterByValue": { + "type": "number", + "x-stoplight": { + "id": "6h9vfjna8ialu" + }, + "x-default-field": true, + "default": 50, + "description": "
default
" }, - "quote": { - "$ref": "#/components/schemas/quote-update-request" + "ignoreSegmentsFewerThanCount": { + "type": "number", + "x-stoplight": { + "id": "0y7rzdh9vmpvr" + }, + "x-default-field": true, + "default": 2, + "description": "
default
" }, - "customFields": { - "type": "array", - "items": { - "$ref": "#/components/schemas/custom-field-request" - } + "ignoreSegmentsFewerThanBase": { + "x-stoplight": { + "id": "17melvff79o5q" + }, + "enum": [ + "words", + "characters" + ], + "default": "characters", + "x-default-field": true, + "description": "
default
" + }, + "checkForbiddenChars": { + "type": "boolean", + "x-stoplight": { + "id": "l4ma0z3xj33q3" + }, + "x-default-field": true, + "default": false, + "description": "
default
" }, - "projectManagers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/project-manager-request" - } + "forbiddenChars": { + "type": "string", + "x-stoplight": { + "id": "wi6dozpt4rqaw" + }, + "x-default-field": true, + "description": "
default
" }, - "settings": { - "$ref": "#/components/schemas/project-settings-request", + "forbiddenCharsSeverity": { "x-stoplight": { - "id": "xd2b0b8qrxmfl" - } + "id": "widdgh98t4w1g" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "error" } } }, - "project-template-create-request": { - "title": "Project Template Create Request", + "project-template-verification-qa-checker-segments-to-exclude": { + "title": "Segments to Exclude", + "x-stoplight": { + "id": "1rb61vur5mzn3" + }, "type": "object", - "description": "Input for Project Template creation.", - "required": [ - "name", - "location", - "fileProcessingConfiguration" - ], "properties": { - "name": { - "type": "string", - "description": "The project template name.", - "minLength": 1, - "maxLength": 100 + "excludePerfectMatchSegments": { + "type": "boolean", + "default": true, + "x-stoplight": { + "id": "lns6fv1v15m9r" + }, + "x-default-field": true, + "description": "
default
" }, - "description": { - "type": "string", - "description": "The project description.", - "maxLength": 1000 + "excludeExactMatches": { + "type": "boolean", + "x-stoplight": { + "id": "hkmg7bvsderss" + }, + "x-default-field": true, + "default": false, + "description": "
default
" }, - "location": { - "type": "string", - "description": "The folder identifier where the project should be created." + "excludeFuzzyMatches": { + "type": "boolean", + "x-stoplight": { + "id": "40bzc9xgu79j6" + }, + "x-default-field": true, + "default": false, + "description": "
default
" }, - "fileProcessingConfiguration": { - "$ref": "#/components/schemas/configuration-resource-request", + "excludeFuzzyMatchesValue": { + "type": "number", "x-stoplight": { - "id": "uj8d2oyrr72tr" - } + "id": "6nb9cw19h7j8g" + }, + "x-default-field": true, + "default": 99, + "description": "
default
" }, - "projectManagers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/project-manager-request" - } + "excludeNewTranslation": { + "type": "boolean", + "x-stoplight": { + "id": "q9nay4my2ax0d" + }, + "x-default-field": true, + "default": false, + "description": "
default
" }, - "scheduleTemplate": { - "$ref": "#/components/schemas/configuration-resource-request", + "excludeConfirmedTranslations": { + "type": "boolean", "x-stoplight": { - "id": "rg3f3u9tenpfl" - } + "id": "5qr82fuljzh9c" + }, + "x-default-field": true, + "default": false, + "description": "
default
" }, - "languageDirections": { - "type": "array", - "description": "The language directions.\n\nWhen creating a project using a project template that supports multiple source languages, you must supply the `languageDirections`.
Note: The values for source and targe language must have the same value as the source and target language from project template.", - "items": { - "$ref": "#/components/schemas/language-direction-request" - } + "excludeLockedSegments": { + "type": "boolean", + "x-stoplight": { + "id": "zxvvu2p3el9vo" + }, + "x-default-field": true, + "description": "
default
" }, - "customFields": { - "type": "array", - "items": { - "$ref": "#/components/schemas/custom-field-request" - } + "excludeIdentical": { + "type": "boolean", + "x-stoplight": { + "id": "wt06ljmjtzxx1" + }, + "x-default-field": true, + "default": false, + "description": "
default
" }, - "translationEngine": { - "$ref": "#/components/schemas/configuration-resource-request", + "elementContextExclusion": { + "type": "boolean", "x-stoplight": { - "id": "thx33vvuk5gyo" - } + "id": "ihg0auk684zwo" + }, + "x-default-field": true, + "default": false, + "description": "
default
" }, - "pricingModel": { - "$ref": "#/components/schemas/configuration-resource-request", + "exclusionContextList": { + "type": "array", "x-stoplight": { - "id": "qmx22fog888cz" - } + "id": "w8wid64dh2ofd" + }, + "x-default-field": true, + "items": { + "x-stoplight": { + "id": "uold0rq8drd0g" + }, + "type": "string" + }, + "description": "
default
" }, - "workflow": { - "$ref": "#/components/schemas/configuration-resource-request", + "reportAllNonExcluded": { + "type": "boolean", "x-stoplight": { - "id": "7djywbuahg9ha" - } + "id": "two2plqqt9g76" + }, + "x-default-field": true, + "default": false, + "description": "
default
" }, - "settings": { - "$ref": "#/components/schemas/project-template-settings-request", + "reportAllNonExcludedSeverity": { "x-stoplight": { - "id": "ygnao3kecn7hc" - } + "id": "24w5oqpge9vtt" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "note" } } }, - "project-template-update-request": { - "title": "Project Template Update Request", + "project-template-verification-qa-checker-inconsistencies": { + "title": "QA Checker Inconsistencies", "x-stoplight": { - "id": "udaysucy7sgy4" + "id": "iosfg9dirb8hw" }, "type": "object", - "description": "Input for Project Template creation.", "properties": { - "name": { - "type": "string", - "description": "The project template name.", - "minLength": 1, - "maxLength": 100 + "checkInconsistentTranslations": { + "type": "boolean", + "default": false, + "x-default-field": true, + "description": "
default
" }, - "description": { - "type": "string", - "description": "The project description.", - "maxLength": 1000 + "checkInconsistentTranslationsSeverity": { + "x-stoplight": { + "id": "bsouwbxqv95ye" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "warning" }, - "fileProcessingConfiguration": { - "$ref": "#/components/schemas/configuration-resource-request" + "checkInconsistentTranslationsIgnoreTags": { + "type": "boolean", + "x-stoplight": { + "id": "3koq6k6fd9l44" + }, + "default": false }, - "projectManagers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/project-manager-request" - } + "checkInconsistentTranslationsIgnoreCase": { + "type": "boolean", + "x-stoplight": { + "id": "6cmbn8w6k7fg4" + }, + "default": false + }, + "checkRepeatedWords": { + "type": "boolean", + "x-stoplight": { + "id": "57vj6px0vfsie" + }, + "x-default-field": true, + "default": true, + "description": "
default
" + }, + "checkRepeatedWordsSeverity": { + "x-stoplight": { + "id": "72j1swplvu10s" + }, + "enum": [ + "error", + "warning", + " Note" + ], + "default": "warning" }, - "scheduleTemplate": { - "$ref": "#/components/schemas/configuration-resource-request" + "checkRepeatedWordsIgnoreNumbers": { + "type": "boolean", + "x-stoplight": { + "id": "h48hxx4si6aoh" + }, + "default": false }, - "languageDirections": { - "type": "array", - "description": "The language directions.\n\nWhen creating a project using a project template that supports multiple source languages, you must supply the `languageDirections`.
Note: The values for source and targe language must have the same value as the source and target language from project template.", - "items": { - "$ref": "#/components/schemas/language-direction-request" - } + "checkRepeatedWordsIgnoreCase": { + "type": "boolean", + "x-stoplight": { + "id": "0pjpiv5gt6y7k" + }, + "default": false }, - "customFields": { - "type": "array", - "items": { - "$ref": "#/components/schemas/custom-field-request" - } + "checkUneditedSegmentsFuzzy": { + "x-stoplight": { + "id": "t9fk4h0hrr5co" + }, + "type": "boolean", + "x-default-field": true, + "default": true, + "description": "
default
" }, - "translationEngine": { - "$ref": "#/components/schemas/configuration-resource-request" + "checkUneditedSegmentsFuzzySeverity": { + "x-stoplight": { + "id": "ry42m8y5j21he" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "warning" }, - "pricingModel": { - "$ref": "#/components/schemas/configuration-resource-request" + "checkOnlyConfirmedSegments": { + "type": "boolean", + "x-stoplight": { + "id": "ng703myrxolr9" + }, + "default": false }, - "workflow": { - "$ref": "#/components/schemas/configuration-resource-request" + "checkIfMatchScoresBelow": { + "type": "boolean", + "x-stoplight": { + "id": "i05vug43v8q0w" + }, + "default": false }, - "settings": { - "$ref": "#/components/schemas/project-template-settings-update-request" + "checkIfMatchScoresBelowValue": { + "type": "number", + "default": 99 } } }, - "project-template-response": { - "title": "Project Template", + "project-template-verification-qa-checker-punctuation": { + "title": "QA Checker Punctuation", "x-stoplight": { - "id": "f513d3d83fd5d" + "id": "9sidt6n9cxt5y" }, "type": "object", - "description": "Project Template resource. (Not available for List Projects endpoint)", - "required": [ - "id" - ], "properties": { - "id": { - "type": "string", - "description": "The project template identifier." - }, - "name": { - "type": "string", - "description": "
default
The project template name.
", - "x-default-field": true - }, - "description": { - "type": "string", - "description": "The project template description." - }, - "languageDirections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/language-direction-no-statistics" - } - }, - "location": { - "$ref": "#/components/schemas/folder-v2" - }, - "translationEngine": { - "$ref": "#/components/schemas/translation-engine" - }, - "fileProcessingConfiguration": { - "$ref": "#/components/schemas/file-processing-configuration" - }, - "pricingModel": { - "$ref": "#/components/schemas/pricing-model" - }, - "workflow": { - "$ref": "#/components/schemas/workflow" + "checkIdenticalPunctuation": { + "type": "boolean", + "default": true, + "x-default-field": true, + "x-stoplight": { + "id": "fvt9f95rf0uen" + }, + "description": "
default
" }, - "customFields": { - "type": "array", - "description": "The Custom Fields.", - "items": { - "$ref": "#/components/schemas/custom-field" - } + "checkIdenticalPunctuationSeverity": { + "x-stoplight": { + "id": "1fcl96sxrs5wx" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "warning" }, - "forceOnline": { + "checkSpanishPunctuation": { + "x-stoplight": { + "id": "7fnmgzkao3fxi" + }, + "x-default-field": true, + "default": false, "type": "boolean", - "description": "(Deprecated) Moved under settings.general.forceOnline", - "deprecated": true + "description": "
default
" }, - "projectManagers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/project-manager-response" - } + "checkSpanishPunctuationSeverity": { + "x-stoplight": { + "id": "f0umcr7ywjnsf" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "warning" }, - "quoteTemplate": { - "$ref": "#/components/schemas/project-quote-template-deprecated" + "checkUnintentionalSpacesBeforePunctuation": { + "type": "boolean", + "x-stoplight": { + "id": "4wnyw10rl8k1m" + }, + "x-default-field": true, + "default": true, + "description": "
default
" }, - "scheduleTemplate": { - "$ref": "#/components/schemas/schedule-template", + "checkUnintentionalSpacesBeforePunctuationSeverity": { "x-stoplight": { - "id": "anjnnapb4ow78" - } + "id": "9up0q78jlw73a" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "warning" }, - "settings": { - "$ref": "#/components/schemas/project-template-settings-response", + "checkUnintentionalSpacesBeforePunctuationValues": { + "type": "string", "x-stoplight": { - "id": "s2h6ypp5yywjr" - } - } - } - }, - "project-template-settings-request": { - "title": "Project Template Settings", - "x-stoplight": { - "id": "188a054a839d7" - }, - "type": "object", - "description": "Input for Project Template settings.", - "properties": { - "general": { - "$ref": "#/components/schemas/project-template-general-settings-request" + "id": "bukb4vmlo01si" + }, + "default": ":!?;" }, - "qualityManagement": { - "$ref": "#/components/schemas/project-template-quality-management-settings" - } - } - }, - "project-template-settings-update-request": { - "title": "Project Template Settings", - "x-stoplight": { - "id": "dn5d77vdz1lvw" - }, - "type": "object", - "description": "Input for Project Template settings.", - "properties": { - "general": { - "$ref": "#/components/schemas/project-template-general-settings-update" + "punctuationSpacesFrench": { + "type": "boolean", + "x-stoplight": { + "id": "n2amwff6y1fru" + }, + "default": false }, - "qualityManagement": { - "$ref": "#/components/schemas/project-template-quality-management-settings" - } - } - }, - "project-template-settings-response": { - "title": "Project Template Settings", - "x-stoplight": { - "id": "rfvf2oks12otx" - }, - "type": "object", - "description": "Project Template settings. See detailed description of options on the Official Documentation page. \n\r (Not available for List Projects/ProjectTemplates endpoint)", - "properties": { - "general": { - "$ref": "#/components/schemas/project-template-general-settings-response", + "checkMultipleSpaces": { + "type": "boolean", + "x-stoplight": { + "id": "371vnwmqt53uv" + }, "x-default-field": true, - "description": "
default
General settings, are detailed in section 10.a
" + "default": true, + "description": "
default
" + }, + "checkMultipleSpacesSeverity": { + "x-stoplight": { + "id": "z1snyx22cm8kp" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "note" }, - "batchTasks": { - "$ref": "#/components/schemas/project-template-batch-tasks-settings" + "checkMultipleDots": { + "type": "boolean", + "x-stoplight": { + "id": "wxxvehvri3o8q" + }, + "x-default-field": true, + "default": true, + "description": "
default
" }, - "verification": { - "$ref": "#/components/schemas/project-template-verification-settings" + "checkMultipleDotsSeverity": { + "x-stoplight": { + "id": "s3nerdbtbe17i" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "note" }, - "qualityManagement": { - "$ref": "#/components/schemas/project-template-quality-management-settings-response" + "ignoreThreeDots": { + "type": "boolean", + "x-stoplight": { + "id": "128751e5f7bb0" + }, + "x-default-field": true, + "default": true, + "description": "
default
" }, - "translationMemorySettings": { - "$ref": "#/components/schemas/project-template-translation-memory-settings" - } - } - }, - "project-template-general-settings-request": { - "title": "General settings", - "x-stoplight": { - "id": "96ba14884fdf8" - }, - "type": "object", - "description": "General settings", - "properties": { - "forceOnline": { + "checkExtraSpace": { "type": "boolean", "x-stoplight": { - "id": "dya48eul3lslu" + "id": "rczo8oi443l7b" }, - "description": "This forces the project to be translated using the Trados Cloud Platform Online Editor exclusively.", - "default": false + "x-default-field": true, + "default": true, + "description": "
default
" }, - "quoteTemplate": { - "$ref": "#/components/schemas/configuration-resource-request", + "checkExtraSpaceSeverity": { "x-stoplight": { - "id": "0l9y1waovurvh" - } + "id": "b9qsayeygu8d5" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "warning" }, - "customerPortalVisibility": { + "checkCapitalizationOfInitials": { "type": "boolean", "x-stoplight": { - "id": "76vxoxivbrgmb" + "id": "94fhj5alcziax" }, - "description": "Customer Portal visibility", - "default": true + "x-default-field": true, + "default": false, + "description": "
default
" }, - "completionConfiguration": { - "$ref": "#/components/schemas/completion-config-request" - } - } - }, - "project-template-general-settings-update": { - "title": "General settings", - "x-stoplight": { - "id": "qjkldydwydntm" - }, - "type": "object", - "description": "General settings", - "properties": { - "forceOnline": { + "checkCapitalizationOfInitialsSeverity": { + "x-stoplight": { + "id": "btsm5s1bzz7aq" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "warning" + }, + "checkConsistencyOfGlobalCapitalization": { + "x-stoplight": { + "id": "2b9wdh315dahs" + }, "type": "boolean", - "description": "This forces the project to be translated using the Trados Cloud Platform Online Editor exclusively.", - "default": false + "x-default-field": true, + "default": false, + "description": "
default
" }, - "quoteTemplate": { - "$ref": "#/components/schemas/configuration-resource-request" + "checkConsistencyOfGlobalCapitalizationSeverity": { + "x-stoplight": { + "id": "4eohngzh0e2bc" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "warning" }, - "customerPortalVisibility": { + "checkBrackets": { "type": "boolean", - "description": "Customer Portal visibility", - "default": true + "x-stoplight": { + "id": "lw5s7boith817" + }, + "x-default-field": true, + "default": true, + "description": "
default
" }, - "completionConfiguration": { - "$ref": "#/components/schemas/completion-config-request", + "checkBracketsSeverity": { "x-stoplight": { - "id": "zkvabfvamhyoj" - } + "id": "f8rpatoa21n08" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "warning" } } }, - "project-template-general-settings-response": { - "title": "General settings", + "project-template-verification-qa-checker-numbers": { + "title": "QA Checker Numbers", "x-stoplight": { - "id": "d6p1yr5skykdb" + "id": "95nv42e499dwi" }, "type": "object", - "description": "General settings, are detailed in section 10.a", "properties": { - "forceOnline": { + "checkNumbers": { "type": "boolean", - "description": "
default
Restrict file downloads.", + "default": false, "x-default-field": true, - "default": false + "x-stoplight": { + "id": "jmx3msjbemxdr" + }, + "description": "
default
" }, - "allowSourceEdit": { + "checkNumbersSeverity": { + "x-stoplight": { + "id": "05931rv7v34yd" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "error" + }, + "checkTimes": { "type": "boolean", - "description": "
default
Allow editing of source text in segments.", + "x-stoplight": { + "id": "yjnavlbjro7zn" + }, "x-default-field": true, - "default": false + "default": false, + "description": "
default
" }, - "quoteTemplate": { - "$ref": "#/components/schemas/project-quote-template", - "x-default-field": true, - "description": "
default
" + "checkTimesSeverity": { + "x-stoplight": { + "id": "p7a2a445i131t" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "error" }, - "customerPortalVisibility": { + "checkDates": { "type": "boolean", - "description": "
default
Customer Portal visibility", - "x-default-field": true, - "default": true - }, - "completionConfiguration": { - "$ref": "#/components/schemas/completion-config-request", "x-stoplight": { - "id": "z9j2lhijfy67v" + "id": "yccnoxkca39wp" }, - "description": "
default
\r\n" - } - } - }, - "project-template-batch-tasks-settings": { - "title": "Project Template Batch Tasks Settings", - "type": "object", - "description": "Project Template Batch Tasks Settings", - "properties": { - "preProcessing": { - "$ref": "#/components/schemas/project-template-batch-tasks-preprocessing-settings", "x-default-field": true, + "default": false, + "description": "
default
" + }, + "checkDatesSeverity": { "x-stoplight": { - "id": "fd9mooc8in0k8" + "id": "9e40z6bd9mv8q" }, - "description": "
default
Pre-Processing Settings, configure how TMs are applied, are detailed in section 10.b
" + "enum": [ + "error", + "warning", + "note" + ], + "default": "error" }, - "updateTranslationMemory": { - "$ref": "#/components/schemas/update-translation-memory-settings", - "x-default-field": true, + "checkMeasurements": { + "type": "boolean", "x-stoplight": { - "id": "mm94ig682wabo" + "id": "9w2l7x89okahm" }, - "description": "
default
Configure how TMs are updated throughout the project workflow depending on the status of the segments. Are detailed in section 10.c
" - } - } - }, - "project-template-verification-settings": { - "title": "Project Template Verification Settings", - "type": "object", - "description": "", - "properties": { - "tagVerifier": { - "$ref": "#/components/schemas/project-template-verification-tag-verifier-settings", - "x-default-field": true, - "description": "
default
Tag Verifier Settings, are detailed in section 10.d
" - }, - "qaChecker": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-settings", "x-default-field": true, - "description": "
default
QA Checker Settings, are detailed in section 10.e
" - } - } - }, - "project-template-quality-management-settings": { - "title": "Quality Managment", - "type": "object", - "properties": { - "tqaProfile": { - "$ref": "#/components/schemas/configuration-resource-request", + "default": false, + "description": "
default
" + }, + "checkMeasurementsSeverity": { "x-stoplight": { - "id": "9n13w0ndmh8tv" - } + "id": "5isqhxzz365vq" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "error" } } }, - "project-template-quality-management-settings-response": { - "title": "Quality Managment", + "project-template-verification-qa-checker-word-list": { + "title": "QA Checker Word list", "x-stoplight": { - "id": "a5bkdzgg7q3eh" + "id": "jcu8333uzax64" }, "type": "object", "properties": { - "tqaProfile": { - "$ref": "#/components/schemas/tqa-profile", + "enabled": { + "type": "boolean", + "default": false, "x-stoplight": { - "id": "ln71gs3m3v6lo" + "id": "1i43kmdizt8f9" } + }, + "searchWholeWords": { + "type": "boolean", + "x-stoplight": { + "id": "mtexp5nafx5d4" + }, + "x-default-field": true, + "default": false, + "description": "
default
" + }, + "ignoreCase": { + "type": "boolean", + "x-stoplight": { + "id": "lw4spspstngjb" + }, + "x-default-field": true, + "default": false, + "description": "
default
" + }, + "checkWordListSeverity": { + "x-stoplight": { + "id": "4dxqub35774eb" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "warning" + }, + "wordList": { + "type": "array", + "x-stoplight": { + "id": "rjn2ec0xqsm0k" + }, + "x-default-field": true, + "items": { + "x-stoplight": { + "id": "2rknpju6n8z56" + }, + "type": "object", + "properties": { + "wrongForm": { + "type": "string", + "x-stoplight": { + "id": "u9yi9ohufpdvp" + }, + "x-default-field": true + }, + "correctForm": { + "type": "string", + "x-stoplight": { + "id": "h4itahton32nl" + }, + "x-default-field": true + } + } + }, + "description": "
default
" } - } + }, + "required": [ + "enabled" + ] }, - "project-template-translation-memory-settings": { - "title": "Translation Memory settings", + "project-template-verification-qa-checker-regular-expressions": { + "title": "QA Checker Regular Expressions", "x-stoplight": { - "id": "f358c4e03ac33" + "id": "xem3u8m9wipd6" }, "type": "object", - "description": "Translation Memory settings", "properties": { - "penalties": { - "$ref": "#/components/schemas/project-template-TM-penalties", + "checkRegularExpressions": { + "type": "boolean", + "default": false, + "x-stoplight": { + "id": "83h1307cwqhw9" + }, + "description": "" + }, + "regularExpressionSeverity": { + "x-stoplight": { + "id": "xmi8dmu62uzi8" + }, + "enum": [ + "error", + "warning", + "note" + ], + "default": "warning" + }, + "regularExpressions": { + "type": "array", + "x-stoplight": { + "id": "6z45r3k1a1b4o" + }, + "x-default-field": true, + "items": { + "$ref": "#/components/schemas/project-template-verification-qa-checker-regular-expressions-model", + "x-stoplight": { + "id": "5e6hkwes4mo6a" + } + }, "description": "
default
" } - } + }, + "required": [ + "checkRegularExpressions" + ] }, - "project-template-batch-tasks-preprocessing-settings": { - "title": "Pre-Processing Settings", + "project-template-verification-qa-checker-regular-expressions-model": { + "title": "Regular Expressions Model", "x-stoplight": { - "id": "3dzxuz1skn1pl" + "id": "2rx3df3vczsr1" }, "type": "object", - "description": "Pre-Processing Settings, configure how TMs are applied, are detailed in section 10.b", "properties": { - "minimumMatchValue": { - "type": "integer", - "minimum": 50, - "maximum": 100, - "default": 70, - "description": "
default
", - "x-default-field": true - }, - "translationOverwriteMode": { - "enum": [ - "keepExisting", - "overwriteIfBetter", - "overwriteAlways", - "overwriteExceptPerfectMatch" - ], - "description": "
default
Options: \r\n- `keepExisting`: no segments are overwritten, existing segments are kept;\r\n- `overwriteIfBetter`: unlocked segments (including confirmed segments) are overwritten, while unlocked PerfectMatch segments and locked segments are not overwritten; \r\n- `overwriteAlways`: PerfectMatch segments (both locked and unlocked) are overwritten, while other locked segments are not overwritten;\r\n- `overwriteExceptPerfectMatch`: unlocked segments (including confirmed segments) and locked segments are overwritten, while unlocked PerfectMatch segments are not overwritten;
", + "description": { + "type": "string", + "x-stoplight": { + "id": "20v4paozpk91g" + }, "x-default-field": true, - "default": "overwriteIfBetter" + "description": "
default
" }, - "afterApplyingTranslations": { - "type": "array", + "regexSource": { + "x-stoplight": { + "id": "e9lfc0qm2td5k" + }, + "type": "string", "x-default-field": true, - "description": "
default
Default: `confirmExactMatches`, `confirmContextMatches`
", - "items": { - "enum": [ - "confirmExactMatches", - "confirmContextMatches", - "lockExactMatches", - "lockContextMatches", - "lockGreenSegments", - "lockAmberSegments", - "lockRedSegments" - ], - "default": "confirmContextMatches" - } + "description": "
default
" }, - "noMatchFoundAction": { - "enum": [ - "leaveTargetSegmentsEmpty", - "copySourceToTarget" - ], - "description": "
default
", + "regexTarget": { + "type": "string", + "x-stoplight": { + "id": "k7olv3yojvixm" + }, "x-default-field": true, - "default": "leaveTargetSegmentsEmpty" + "description": "
default
" }, - "reportCrossFileRepetition": { + "ignoreCase": { "type": "boolean", + "x-stoplight": { + "id": "21avhvnk4l142" + }, + "x-default-field": true, "default": false, - "description": "If enabled repetitions are identified and included in analysis reports." + "description": "
default
" }, - "excludeLockedSegments": { - "type": "boolean", - "default": false, - "description": "If enabled locked segments (content that must not be translated) are excluded from translation. " + "condition": { + "x-stoplight": { + "id": "nmhpp19inyk2n" + }, + "enum": [ + "targetAndSource", + "targetNotSource", + "sourceNotTarget", + "sourceOnly", + "targetOnly", + "differentCount", + "groupedTargetAndSource" + ], + "x-default-field": true, + "description": "
default
" } } }, - "project-template-verification-tag-verifier-settings": { - "title": "Tag Verifier Settings", + "project-template-verification-qa-checker-trademark-check": { + "title": "QA Checker Trademark check", + "x-stoplight": { + "id": "l65c655atolg3" + }, "type": "object", - "description": "Tag Verifier Settings, are detailed in section 10.d", "properties": { "enabled": { "type": "boolean", - "x-stoplight": { - "id": "zzdaica4ipzsl" - } - }, - "checkAddedTags": { - "type": "boolean", - "x-stoplight": { - "id": "7jxj0g9hrjxdd" - }, - "x-default-field": true, "default": true, - "description": "
default
" + "x-stoplight": { + "id": "hrisnih0vgd4w" + } }, - "addedTagsSeverity": { + "trademarkSeverity": { "x-stoplight": { - "id": "ceijjmhck9qpn" + "id": "dfa7w4qetxl2c" }, "enum": [ "error", @@ -21780,18 +25182,52 @@ ], "default": "error" }, - "checkDeletedTags": { - "type": "boolean", + "trademarkSymbols": { + "type": "array", "x-stoplight": { - "id": "rw3qbpbox585c" + "id": "i0um9xob8izp7" }, "x-default-field": true, + "items": { + "x-stoplight": { + "id": "d32mt39hj0fer" + }, + "type": "string" + }, + "default": [ + "®", + "©", + "™", + "(c)", + "(r)", + "(tm)" + ], + "description": "
default
" + } + }, + "required": [ + "enabled" + ] + }, + "project-template-verification-qa-checker-length-verification": { + "title": "QA Checker Length Verification", + "x-stoplight": { + "id": "ex9iomj4a786f" + }, + "type": "object", + "properties": { + "checkLengthLimitation": { + "type": "boolean", "default": true, + "x-default-field": true, + "x-stoplight": { + "id": "7bxsr6dzipk4m" + }, "description": "
default
" }, - "deletedTagsSeverity": { + "checkLengthLimitationSeverity": { "x-stoplight": { - "id": "v1367u510xuxk" + "id": "3wlsd7f20hftl" }, "enum": [ "error", @@ -21800,2402 +25236,2338 @@ ], "default": "error" }, - "checkTagOrderChanged": { - "type": "boolean", + "targetSegmentsVerificationType": { "x-stoplight": { - "id": "ug2e4khwq9yjn" + "id": "147n1oindvqf3" }, "x-default-field": true, - "default": true, + "enum": [ + "fileSpecificLimit", + "absoluteCharacterCount" + ], + "default": "fileSpecificLimit", "description": "
default
" }, - "tagOrderChangedSeverity": { + "absoluteCharCountValue": { + "type": "number", "x-stoplight": { - "id": "61mcttvp5oynd" + "id": "i88shddbsddjo" }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "warning" + "x-default-field": true, + "description": "
default
Used in case `targetSegmentsVerificationType = absoluteCharacterCount`
", + "default": 50 + } + } + }, + "project-template-TM-penalties": { + "title": "Translation Memory Penalties", + "type": "object", + "description": "Translation Memory Penalties", + "properties": { + "standardPenalties": { + "$ref": "#/components/schemas/project-template-TM-standard-penalties", + "description": "
default
", + "x-default-field": true, + "type": "object", + "x-stoplight": { + "id": "rx66lu3x78mvr" + } }, - "checkSpacingAroundTags": { - "type": "boolean", + "translationUnitStatusPenalties": { + "$ref": "#/components/schemas/project-template-TM-translation-unit-status-penalties", + "description": "
default
", + "x-default-field": true, + "type": "object", "x-stoplight": { - "id": "vje5xtur0mstq" + "id": "7g27gag166myh" + } + } + } + }, + "project-template-TM-standard-penalties": { + "title": "Translation Memory Standard Penalties", + "type": "object", + "description": "Translation Memory Standard Penalties", + "properties": { + "missingFormatting": { + "description": "
default
", + "x-default-field": true, + "x-stoplight": { + "id": "pdzeu7k11vkc4" }, + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 1 + }, + "differentFormatting": { + "description": "
default
", "x-default-field": true, - "default": true, - "description": "
default
" + "x-stoplight": { + "id": "bspk3rj8xswag" + }, + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 1 + }, + "multipleTranslations": { + "description": "
default
", + "x-default-field": true, + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 1 + }, + "autoLocalization": { + "description": "
default
", + "x-default-field": true, + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0 + }, + "textReplacement": { + "description": "
default
", + "x-default-field": true, + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0 + }, + "alignment": { + "description": "
default
", + "x-default-field": true, + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 1 + }, + "characterWidthDifference": { + "description": "
default
", + "x-default-field": true, + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 1 + } + } + }, + "project-template-TM-translation-unit-status-penalties": { + "title": "Translation Memory Translation Unit Status Penalties", + "type": "object", + "description": "Translation Memory Translation Unit Status Penalties", + "properties": { + "translated": { + "description": "
default
", + "x-default-field": true, + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0 + }, + "rejectedTranslation": { + "description": "
default
", + "x-default-field": true, + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0 + }, + "approvedTranslation": { + "description": "
default
", + "x-default-field": true, + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0 + }, + "rejectedSignOff": { + "description": "
default
", + "x-default-field": true, + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0 + }, + "approvedSignOff": { + "description": "
default
", + "x-default-field": true, + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0 + }, + "notTranslated": { + "description": "
default
", + "x-default-field": true, + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0 + }, + "draft": { + "description": "
default
", + "x-default-field": true, + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0 + } + } + }, + "project-plan": { + "title": "Project Plan", + "type": "object", + "description": "The configurations of the tasks that will be created in the future.\n\nAvailable now directly after project creation, project does not need to be started to be populated. \n\n(Not available for List Projects endpoint)", + "properties": { + "taskConfigurations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/project-plan-task-configuration" + } + } + } + }, + "project-plan-task-configuration": { + "title": "Project Plan Task Configuration", + "type": "object", + "description": "The configuration of a task that will be created in the future.", + "properties": { + "taskTemplate": { + "$ref": "#/components/schemas/object-id" }, - "spaceAroundTagsSeverity": { - "x-stoplight": { - "id": "a8nhawfmukkbc" - }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "note" + "scope": { + "$ref": "#/components/schemas/task-configuration-scope" }, - "ignoreFormattingTags": { - "type": "boolean", - "x-stoplight": { - "id": "ucwul9whydkkk" - }, - "x-default-field": true, - "default": true, - "description": "
default
" + "assignees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workflow-task-assignee" + } }, - "ignoreLockedSegments": { + "isSkipped": { "type": "boolean", - "x-stoplight": { - "id": "votezrhazpcr8" - }, - "x-default-field": true, - "default": false, - "description": "
default
" + "description": "
default
Specifies if the task will be skipped.
", + "nullable": true, + "x-default-field": true }, - "ignoreDifferenceBetweenNormalAndNonBreakingSpace": { - "type": "boolean", - "x-stoplight": { - "id": "2tutxpylevgp5" - }, - "x-default-field": true, - "default": true, - "description": "
default
" + "dueBy": { + "type": "string", + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The due date of the future task.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", + "nullable": true } }, "required": [ - "enabled" + "taskTemplate", + "scope" ] }, - "project-template-verification-qa-checker-settings": { - "title": "QA checker", + "project-plan-task-assignee-request": { + "title": "Project Plan Task Assignee Request", "type": "object", - "description": "QA Checker Settings, are detailed in section 10.e", "properties": { - "enabled": { - "type": "boolean", - "x-stoplight": { - "id": "ht01a321btv9x" - }, - "default": true - }, - "allLanguages": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-all-languages", - "x-stoplight": { - "id": "v2h7hwcxscvdm" - }, - "x-default-field": true, - "description": "
default
" + "type": { + "type": "string", + "enum": [ + "user", + "group", + "vendorOrderTemplate", + "projectCreator" + ] }, - "perTargetLanguage": { + "id": { + "type": "string", + "description": "The user, group or vendor identifier, depending on the type chosen. It is not required for `projectCreator`." + } + }, + "required": [ + "type" + ] + }, + "project-plan-update-request": { + "title": "Project Plan Update Request", + "type": "object", + "description": "Updates the configurations of the tasks that will be created in the future. \nFor example, you can change the assignee of the \"translation\" task while the project is in the \"preprocessing\" phase.", + "properties": { + "taskConfigurations": { "type": "array", - "x-stoplight": { - "id": "doi99m8k1nucn" - }, + "minItems": 1, "items": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-per-target-language", - "x-stoplight": { - "id": "pt6p63qkx37fh" - } + "$ref": "#/components/schemas/project-plan-task-configuration-request" } } }, "required": [ - "enabled" + "taskConfigurations" ] }, - "project-template-verification-qa-checker-all-languages": { - "title": "All Languages settings", - "x-stoplight": { - "id": "u7dex87q8i5am" + "project-plan-task-configuration-request": { + "title": "Project Plan Task Configuration Request", + "type": "object", + "description": "A project plan task configuration request. Used to update a task that will be created in the future.", + "properties": { + "taskTemplate": { + "$ref": "#/components/schemas/object-id-request" + }, + "isSkipped": { + "type": "boolean", + "description": "Specifies if the task will be skipped. \n If you want to skip all the target languages for the given task, set the scope as \"global\"." + }, + "assignees": { + "type": "array", + "description": "Specifies the list of assignees for the future task. \n
When the 'isSkipped' field is set to 'true', an empty list of assignees should be specified.\r\n
Total assignee count is limited. See more at [Assigning users and groups to workflow tasks](https://docs.rws.com/791595/743481/trados-enterprise---accelerate/assigning-users-and-groups-to-workflow-tasks) point 5e.", + "items": { + "$ref": "#/components/schemas/project-plan-task-assignee-request" + } + }, + "scope": { + "$ref": "#/components/schemas/task-configuration-scope-request" + }, + "dueBy": { + "$ref": "#/components/schemas/date-time" + } }, + "required": [ + "taskTemplate", + "isSkipped", + "assignees", + "scope" + ] + }, + "project-status-history": { + "title": "Project Status History Item", "type": "object", + "description": "An Item which describes a change in the status of the project.", "properties": { - "segmentsVerification": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-segments-verification", - "x-stoplight": { - "id": "gxhqy9p1q87jg" - }, - "x-default-field": true, - "description": "
default
" + "from": { + "type": "string", + "description": "Specifies the project status previous to the change.", + "enum": [ + "none", + "created", + "inProgress", + "completed" + ] }, - "segmentsToExclude": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-segments-to-exclude", - "x-stoplight": { - "id": "z3drrdagwesm7" - }, - "x-default-field": true, - "description": "
default
" + "to": { + "type": "string", + "description": "Specifies the project status post change.", + "enum": [ + "created", + "inProgress", + "completed" + ] }, - "inconsistencies": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-inconsistencies", - "x-default-field": true, - "description": "
default
" + "by": { + "$ref": "#/components/schemas/user" }, - "punctuation": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-punctuation", - "x-stoplight": { - "id": "ps49964fkhoes" - }, + "timestamp": { + "$ref": "#/components/schemas/date-time", "x-default-field": true, - "description": "
default
" + "description": "The time and date when the status history was updated.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"" + } + }, + "required": [ + "from", + "to" + ] + }, + "quote": { + "title": "Quote", + "type": "object", + "description": "Project quote.", + "properties": { + "totalAmount": { + "type": "number", + "description": "
default
Total translation fee.
", + "nullable": true, + "x-default-field": true }, - "numbers": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-numbers", - "x-stoplight": { - "id": "0uo9yg9qgw90j" - }, - "x-default-field": true, - "description": "
default
" + "currencyCode": { + "type": "string", + "description": "
default
The currency code (ISO 4217).
", + "x-default-field": true }, - "wordList": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-word-list", - "x-stoplight": { - "id": "j7c3kcgbk71ct" - }, - "x-default-field": true, - "description": "
default
" + "translationCosts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/quote-translation-cost" + } }, - "regularExpressions": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-regular-expressions", - "x-stoplight": { - "id": "dedwuc8etbbew" - }, - "x-default-field": true, - "description": "
default
" + "languageCosts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/quote-language-cost" + } }, - "trademarkCheck": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-trademark-check", - "x-stoplight": { - "id": "f5jsh5byu5ncp" - }, - "x-default-field": true, - "description": "
default
" + "additionalCosts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/quote-additional-cost" + } }, - "lengthVerification": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-length-verification", + "notes": { + "type": "string", "x-stoplight": { - "id": "e0fx768sgm9t2" + "id": "n1ohftpten9bv" }, - "x-default-field": true, - "description": "
default
" + "description": "A message associated with the quote." } } }, - "project-template-verification-qa-checker-per-target-language": { - "title": "Per Language Settings", - "x-stoplight": { - "id": "huunxvvs0cbps" - }, + "quote-additional-cost": { + "title": "Quote Additional Cost", "type": "object", + "description": "Other extra fees not captured by translationCosts and languageCosts.", "properties": { - "targetLanguage": { - "x-stoplight": { - "id": "k7hb7dlfim7t9" - }, - "$ref": "#/components/schemas/language" + "name": { + "type": "string", + "description": "
default
The name of the additional cost.
" }, - "punctuation": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-punctuation", - "x-default-field": true, - "description": "
default
" + "count": { + "type": "number", + "description": "The number of units used to compute the total. Used only for 'volume', 'hourly', 'perPage' and 'percentage' cost types.", + "nullable": true }, - "numbers": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-numbers", - "x-default-field": true, - "description": "
default
" + "total": { + "type": "number", + "description": "
default
The computed cost.
", + "nullable": true, + "x-default-field": true }, - "wordList": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-word-list", - "x-default-field": true, - "description": "
default
" + "cost": { + "type": "number", + "description": "The cost of a unit.", + "nullable": true }, - "regularExpressions": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-regular-expressions", - "x-default-field": true, - "description": "
default
" - } - }, - "required": [ - "targetLanguage" - ] - }, - "project-template-verification-qa-checker-segments-verification": { - "title": "Segments Verification", - "x-stoplight": { - "id": "p5v3db4luaxqz" - }, - "type": "object", - "properties": { - "checkForgottenTranslation": { - "type": "boolean", - "default": true, - "x-stoplight": { - "id": "xsjmebx726d3x" - }, - "x-default-field": true, - "description": "
default
" + "costType": { + "$ref": "#/components/schemas/project-cost-type", + "description": "The type of the additional cost." }, - "forgottenTranslationSeverity": { - "x-stoplight": { - "id": "0jd2dz8tdy6br" - }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "error" + "volumeUnitType": { + "$ref": "#/components/schemas/volume-unit-type", + "description": "The unit type of the 'volume' cost, used as a reference for the unit cost." }, - "checkSourceTargetIdentical": { - "type": "boolean", - "x-stoplight": { - "id": "qmqj04ozi91bk" - }, - "x-default-field": true, - "default": true, - "description": "
default
" + "costOrder": { + "type": "integer", + "description": "Indicates the order in which the additional cost is computed.", + "nullable": true }, - "sourceTargetIdenticalSeverity": { - "x-stoplight": { - "id": "c907ccbq4vdxn" - }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "warning" + "conditionalCostType": { + "$ref": "#/components/schemas/conditional-cost-type", + "description": "Describes how the cost of type 'conditional' will be added to total cost." }, - "identicalSegmentsIgnoreTags": { - "type": "boolean", - "x-stoplight": { - "id": "g30eue1qg70r7" - }, - "default": false + "conditionalCostOperator": { + "$ref": "#/components/schemas/conditional-cost-operator", + "description": "The operator applied between the 'costVariable' and 'operand'." }, - "identicalSegmentsIgnoreCase": { - "type": "boolean", - "x-stoplight": { - "id": "ici43l9x3dxk1" - }, - "default": false + "conditionalCostVariable": { + "$ref": "#/components/schemas/conditional-cost-variable", + "description": "The variable that is evaluated against the 'operand' based on the 'costOperator'." }, - "checkTargetLonger": { - "type": "boolean", - "x-stoplight": { - "id": "n80w5dcs09kxa" - }, - "x-default-field": true, - "default": false, - "description": "
default
" + "conditionalCostThreshold": { + "description": "The value that is evaluated against the 'costVariable' based on the 'costOperator'.", + "type": "number", + "nullable": true }, - "longerByValue": { + "runningTotal": { "type": "number", - "x-stoplight": { - "id": "4j31z4qch04fg" - }, - "x-default-field": true, - "default": 50, - "description": "
default
" + "description": "The sum of all the previously computed costs.", + "nullable": true }, - "checkTargetShorter": { - "type": "boolean", + "customUnitName": { + "type": "string", "x-stoplight": { - "id": "hpzbjbr8t6zhx" + "id": "sh8ttf4ncbt4f" }, - "x-default-field": true, - "default": false, - "description": "
default
" + "description": "The name of the custom unit." + } + } + }, + "quote-additional-cost-request": { + "title": "Quote Additional Cost Request", + "type": "object", + "required": [ + "name", + "count", + "cost", + "costOrder", + "conditionalCostThreshold" + ], + "properties": { + "name": { + "type": "string", + "description": "The name of the additional cost." }, - "shorterByValue": { + "count": { "type": "number", - "x-stoplight": { - "id": "6h9vfjna8ialu" - }, - "x-default-field": true, - "default": 50, - "description": "
default
" + "description": "The number of units used to compute the total. Used only for 'volume', 'hourly', 'perPage' and 'percentage' cost types." }, - "ignoreSegmentsFewerThanCount": { + "cost": { "type": "number", - "x-stoplight": { - "id": "0y7rzdh9vmpvr" - }, - "x-default-field": true, - "default": 2, - "description": "
default
" + "description": "The cost of a unit." }, - "ignoreSegmentsFewerThanBase": { - "x-stoplight": { - "id": "17melvff79o5q" - }, - "enum": [ - "words", - "characters" - ], - "default": "characters", - "x-default-field": true, - "description": "
default
" + "costType": { + "$ref": "#/components/schemas/project-cost-type", + "description": "The type of the additional cost.", + "nullable": true }, - "checkForbiddenChars": { - "type": "boolean", - "x-stoplight": { - "id": "l4ma0z3xj33q3" - }, - "x-default-field": true, - "default": false, - "description": "
default
" + "volumeUnitType": { + "$ref": "#/components/schemas/volume-unit-type", + "description": "The unit type of the 'volume' cost, used for counting the units.", + "nullable": true }, - "forbiddenChars": { - "type": "string", - "x-stoplight": { - "id": "wi6dozpt4rqaw" - }, - "x-default-field": true, - "description": "
default
" + "costOrder": { + "type": "integer", + "description": "Indicates the order in which the additional cost is computed." }, - "forbiddenCharsSeverity": { - "x-stoplight": { - "id": "widdgh98t4w1g" - }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "error" + "conditionalCostType": { + "$ref": "#/components/schemas/conditional-cost-type", + "description": "Describes how the cost of type 'conditional' will be added to total cost.", + "nullable": true + }, + "conditionalCostOperator": { + "$ref": "#/components/schemas/conditional-cost-operator", + "description": "The operator applied between the 'costVariable' and 'operand'.", + "nullable": true + }, + "conditionalCostVariable": { + "$ref": "#/components/schemas/conditional-cost-variable", + "description": "The variable that is evaluated against the 'operand' based on the 'costOperator'.", + "nullable": true + }, + "conditionalCostThreshold": { + "description": "The value that is evaluated against the 'costVariable' based on the 'costOperator'.", + "type": "number" } } }, - "project-template-verification-qa-checker-segments-to-exclude": { - "title": "Segments to Exclude", - "x-stoplight": { - "id": "1rb61vur5mzn3" - }, + "quote-language-cost": { + "title": "Quote Language Cost", "type": "object", + "description": "Fees relevant for a specific target language.", "properties": { - "excludePerfectMatchSegments": { - "type": "boolean", - "default": true, - "x-stoplight": { - "id": "lns6fv1v15m9r" - }, - "x-default-field": true, - "description": "
default
" + "name": { + "type": "string", + "description": "
default
The name of the additional cost.
", + "x-default-field": true }, - "excludeExactMatches": { - "type": "boolean", - "x-stoplight": { - "id": "hkmg7bvsderss" - }, - "x-default-field": true, - "default": false, - "description": "
default
" + "count": { + "type": "number", + "description": "The number of units used to compute the total. Used only for 'volume', 'hourly', 'perPage' and 'percentage' cost types.", + "nullable": true }, - "excludeFuzzyMatches": { - "type": "boolean", - "x-stoplight": { - "id": "40bzc9xgu79j6" - }, - "x-default-field": true, - "default": false, - "description": "
default
" + "total": { + "type": "number", + "description": "
default
The computed cost.
", + "nullable": true, + "x-default-field": true }, - "excludeFuzzyMatchesValue": { + "cost": { "type": "number", - "x-stoplight": { - "id": "6nb9cw19h7j8g" - }, - "x-default-field": true, - "default": 99, - "description": "
default
" + "description": "The cost of a unit.", + "nullable": true }, - "excludeNewTranslation": { - "type": "boolean", - "x-stoplight": { - "id": "q9nay4my2ax0d" - }, - "x-default-field": true, - "default": false, - "description": "
default
" + "costType": { + "$ref": "#/components/schemas/language-cost-type", + "description": "The type of the additional cost." }, - "excludeConfirmedTranslations": { - "type": "boolean", - "x-stoplight": { - "id": "5qr82fuljzh9c" - }, - "x-default-field": true, - "default": false, - "description": "
default
" + "volumeUnitType": { + "$ref": "#/components/schemas/volume-unit-type", + "description": "The unit type of the 'volume' cost, used as a reference for the unit cost." }, - "excludeLockedSegments": { - "type": "boolean", - "x-stoplight": { - "id": "zxvvu2p3el9vo" - }, - "x-default-field": true, - "description": "
default
" + "targetLanguage": { + "$ref": "#/components/schemas/language" }, - "excludeIdentical": { - "type": "boolean", - "x-stoplight": { - "id": "wt06ljmjtzxx1" - }, - "x-default-field": true, - "default": false, - "description": "
default
" + "costOrder": { + "type": "integer", + "description": "Indicates the order in which the additional cost is computed.", + "nullable": true }, - "elementContextExclusion": { - "type": "boolean", - "x-stoplight": { - "id": "ihg0auk684zwo" - }, - "x-default-field": true, - "default": false, - "description": "
default
" + "conditionalCostType": { + "$ref": "#/components/schemas/conditional-cost-type", + "description": "The condition type of the conditional cost." }, - "exclusionContextList": { - "type": "array", - "x-stoplight": { - "id": "w8wid64dh2ofd" - }, - "x-default-field": true, - "items": { - "x-stoplight": { - "id": "uold0rq8drd0g" - }, - "type": "string" - }, - "description": "
default
" + "conditionalCostOperator": { + "$ref": "#/components/schemas/conditional-cost-operator", + "description": "The operator applied between the 'costVariable' and 'operand'." }, - "reportAllNonExcluded": { - "type": "boolean", - "x-stoplight": { - "id": "two2plqqt9g76" - }, - "x-default-field": true, - "default": false, - "description": "
default
" + "conditionalCostVariable": { + "$ref": "#/components/schemas/conditional-cost-variable", + "description": "The variable that is evaluated against the 'operand' based on the 'costOperator'." }, - "reportAllNonExcludedSeverity": { + "conditionalCostThreshold": { + "description": "The value that is evaluated against the 'costVariable' based on the 'costOperator'.", + "type": "number", + "nullable": true + }, + "runningTotal": { + "type": "number", + "description": "The sum of all the previously computed costs.", + "nullable": true + }, + "customUnitName": { + "type": "string", "x-stoplight": { - "id": "24w5oqpge9vtt" + "id": "tdfu8mqyo09if" }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "note" + "description": "The name of the custom unit." } } }, - "project-template-verification-qa-checker-inconsistencies": { - "title": "QA Checker Inconsistencies", - "x-stoplight": { - "id": "iosfg9dirb8hw" - }, + "quote-language-cost-request": { + "title": "Quote Language Cost Request", "type": "object", + "required": [ + "name", + "count", + "cost", + "costOrder", + "conditionalCostThreshold" + ], "properties": { - "checkInconsistentTranslations": { - "type": "boolean", - "default": false, - "x-default-field": true, - "description": "
default
" + "name": { + "type": "string", + "description": "The name of the additional cost." }, - "checkInconsistentTranslationsSeverity": { - "x-stoplight": { - "id": "bsouwbxqv95ye" - }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "warning" + "count": { + "type": "number", + "description": "The number of units used to compute the total. Used only for 'volume', 'hourly', 'perPage' and 'percentage' cost types." }, - "checkInconsistentTranslationsIgnoreTags": { - "type": "boolean", - "x-stoplight": { - "id": "3koq6k6fd9l44" - }, - "default": false + "cost": { + "type": "number", + "description": "The cost of a unit." }, - "checkInconsistentTranslationsIgnoreCase": { - "type": "boolean", - "x-stoplight": { - "id": "6cmbn8w6k7fg4" - }, - "default": false + "costType": { + "$ref": "#/components/schemas/language-cost-type", + "description": "The type of the additional cost.", + "nullable": true }, - "checkRepeatedWords": { - "type": "boolean", - "x-stoplight": { - "id": "57vj6px0vfsie" - }, - "x-default-field": true, - "default": true, - "description": "
default
" + "volumeUnitType": { + "$ref": "#/components/schemas/volume-unit-type", + "description": "The unit type of the 'volume' cost, used for counting the units.", + "nullable": true }, - "checkRepeatedWordsSeverity": { - "x-stoplight": { - "id": "72j1swplvu10s" - }, - "enum": [ - "error", - "warning", - " Note" - ], - "default": "warning" + "targetLanguage": { + "$ref": "#/components/schemas/target-language-request" }, - "checkRepeatedWordsIgnoreNumbers": { - "type": "boolean", - "x-stoplight": { - "id": "h48hxx4si6aoh" - }, - "default": false + "costOrder": { + "type": "integer", + "description": "Indicates the order in which the additional cost is computed." + }, + "conditionalCostType": { + "$ref": "#/components/schemas/conditional-cost-type", + "description": "Describes how the cost of type 'conditional' will be added to total cost.", + "nullable": true + }, + "conditionalCostOperator": { + "$ref": "#/components/schemas/conditional-cost-operator", + "description": "The operator applied between the 'costVariable' and 'operand'.", + "nullable": true + }, + "conditionalCostVariable": { + "$ref": "#/components/schemas/conditional-cost-variable", + "description": "The variable that is evaluated against the 'operand' based on the 'costOperator'.", + "nullable": true + }, + "conditionalCostThreshold": { + "description": "The value that is evaluated against the 'costVariable' based on the 'costOperator'.", + "type": "number" + } + } + }, + "quote-translation-cost": { + "title": "Quote Translation Cost", + "type": "object", + "description": "Fees calculated based on segment status (new, translated, signed off) and previous leverage (100% match and identical context, 100% match, <100%match, cross-file repetitions).", + "properties": { + "total": { + "type": "number", + "description": "
default
The total cost for the current target language.
", + "nullable": true, + "x-default-field": true + }, + "targetLanguage": { + "$ref": "#/components/schemas/language" }, - "checkRepeatedWordsIgnoreCase": { - "type": "boolean", - "x-stoplight": { - "id": "0pjpiv5gt6y7k" - }, - "default": false + "exactMatch": { + "$ref": "#/components/schemas/translation-cost-item" }, - "checkUneditedSegmentsFuzzy": { - "x-stoplight": { - "id": "t9fk4h0hrr5co" - }, - "type": "boolean", - "x-default-field": true, - "default": true, - "description": "
default
" + "inContextExactMatch": { + "$ref": "#/components/schemas/translation-cost-item" }, - "checkUneditedSegmentsFuzzySeverity": { - "x-stoplight": { - "id": "ry42m8y5j21he" - }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "warning" + "new": { + "$ref": "#/components/schemas/translation-cost-item" }, - "checkOnlyConfirmedSegments": { - "type": "boolean", - "x-stoplight": { - "id": "ng703myrxolr9" - }, - "default": false + "perfectMatch": { + "$ref": "#/components/schemas/translation-cost-item" }, - "checkIfMatchScoresBelow": { - "type": "boolean", - "x-stoplight": { - "id": "i05vug43v8q0w" - }, - "default": false + "repetitions": { + "$ref": "#/components/schemas/translation-cost-item" }, - "checkIfMatchScoresBelowValue": { + "machineTranslation": { + "$ref": "#/components/schemas/translation-cost-item" + }, + "fuzzyMatch": { + "type": "array", + "items": { + "$ref": "#/components/schemas/translation-cost-fuzzy-item" + } + }, + "runningTotal": { "type": "number", - "default": 99 + "description": "
default
The sum of all the previously computed costs.
", + "nullable": true, + "x-default-field": true } } }, - "project-template-verification-qa-checker-punctuation": { - "title": "QA Checker Punctuation", - "x-stoplight": { - "id": "9sidt6n9cxt5y" - }, + "quote-update-request": { + "title": "Quote Update Request", "type": "object", "properties": { - "checkIdenticalPunctuation": { - "type": "boolean", - "default": true, - "x-default-field": true, - "x-stoplight": { - "id": "fvt9f95rf0uen" - }, - "description": "
default
" + "languageCosts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/quote-language-cost-request" + } }, - "checkIdenticalPunctuationSeverity": { - "x-stoplight": { - "id": "1fcl96sxrs5wx" - }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "warning" + "additionalCosts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/quote-additional-cost-request" + } }, - "checkSpanishPunctuation": { + "notes": { + "type": "string", "x-stoplight": { - "id": "7fnmgzkao3fxi" + "id": "404ggz8hrvbpg" }, - "x-default-field": true, - "default": false, - "type": "boolean", - "description": "
default
" + "description": "A message associated with the quote.", + "maxLength": 3000 + } + } + }, + "project-quote-template": { + "title": "Project Quote Template", + "type": "object", + "description": "Project Quote Template resource.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the quote template." }, - "checkSpanishPunctuationSeverity": { - "x-stoplight": { - "id": "f0umcr7ywjnsf" - }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "warning" + "name": { + "type": "string", + "description": "The name of the quote template." }, - "checkUnintentionalSpacesBeforePunctuation": { - "type": "boolean", - "x-stoplight": { - "id": "4wnyw10rl8k1m" - }, - "x-default-field": true, - "default": true, - "description": "
default
" + "description": { + "type": "string", + "description": "The description of the quote template." }, - "checkUnintentionalSpacesBeforePunctuationSeverity": { - "x-stoplight": { - "id": "9up0q78jlw73a" - }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "warning" + "location": { + "$ref": "#/components/schemas/folder-v2" + } + }, + "required": [ + "id" + ], + "x-stoplight": { + "id": "0sp6j7989p1j7" + } + }, + "project-quote-template-deprecated": { + "title": "Project Quote Template", + "x-stoplight": { + "id": "cwik0w5o34ix6" + }, + "type": "object", + "description": "(Deprecated) moved under settings.general.quoteTemplate", + "deprecated": true, + "properties": { + "id": { + "type": "string", + "description": "The identifier of the quote template." }, - "checkUnintentionalSpacesBeforePunctuationValues": { + "name": { "type": "string", - "x-stoplight": { - "id": "bukb4vmlo01si" - }, - "default": ":!?;" + "description": "The name of the quote template." }, - "punctuationSpacesFrench": { - "type": "boolean", - "x-stoplight": { - "id": "n2amwff6y1fru" - }, - "default": false + "description": { + "type": "string", + "description": "The description of the quote template." }, - "checkMultipleSpaces": { - "type": "boolean", - "x-stoplight": { - "id": "371vnwmqt53uv" - }, - "x-default-field": true, - "default": true, - "description": "
default
" + "location": { + "$ref": "#/components/schemas/folder-v2" + } + }, + "required": [ + "id" + ] + }, + "rate-limit": { + "title": "Rate Limit", + "type": "object", + "description": "Rate Limit entry", + "properties": { + "policyName": { + "type": "string", + "description": "Name of the rate limit policy." }, - "checkMultipleSpacesSeverity": { - "x-stoplight": { - "id": "z1snyx22cm8kp" - }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "note" + "description": { + "type": "string", + "description": "Describes which endpoints are affected by this limit, and for which time frame." }, - "checkMultipleDots": { - "type": "boolean", - "x-stoplight": { - "id": "wxxvehvri3o8q" - }, - "x-default-field": true, - "default": true, - "description": "
default
" + "limit": { + "type": "integer", + "description": "The limit in effect for the endpoint and time frame." }, - "checkMultipleDotsSeverity": { - "x-stoplight": { - "id": "s3nerdbtbe17i" - }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "note" + "remainingQuota": { + "type": "integer", + "description": "The remaining quota in effect for the endpoint and time frame." + } + }, + "required": [ + "policyName", + "description", + "limit", + "remainingQuota" + ] + }, + "resource-folder-request": { + "title": "Resource Folder Request", + "type": "object", + "description": "Resource folder.", + "properties": { + "id": { + "type": "string", + "description": "The folder identifier." }, - "ignoreThreeDots": { - "type": "boolean", - "x-stoplight": { - "id": "128751e5f7bb0" - }, - "x-default-field": true, - "default": true, - "description": "
default
" + "name": { + "type": "string", + "description": "The name of the folder." + } + }, + "required": [ + "id" + ] + }, + "remove-projects-from-group-request": { + "title": "Remove Projects From Group Request", + "type": "object", + "description": "Input for removing projects from group.", + "properties": { + "projects": { + "type": "array", + "description": "The projects to be removed from group.", + "items": { + "$ref": "#/components/schemas/project-group-project-request" + } + } + }, + "required": [ + "projects" + ] + }, + "schedule-template": { + "title": "Schedule Template", + "x-stoplight": { + "id": "c2a2ilce5ag48" + }, + "type": "object", + "description": "Schedule Template resource", + "properties": { + "id": { + "type": "string" }, - "checkExtraSpace": { - "type": "boolean", - "x-stoplight": { - "id": "rczo8oi443l7b" - }, - "x-default-field": true, - "default": true, - "description": "
default
" + "name": { + "type": "string", + "description": "
default
Schedule Template name.
", + "x-default-field": true }, - "checkExtraSpaceSeverity": { - "x-stoplight": { - "id": "b9qsayeygu8d5" - }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "warning" + "description": { + "type": "string", + "description": "Schedule Template description." }, - "checkCapitalizationOfInitials": { - "type": "boolean", - "x-stoplight": { - "id": "94fhj5alcziax" - }, - "x-default-field": true, - "default": false, - "description": "
default
" + "location": { + "$ref": "#/components/schemas/folder-v2" }, - "checkCapitalizationOfInitialsSeverity": { + "configurations": { + "type": "array", "x-stoplight": { - "id": "btsm5s1bzz7aq" + "id": "w3yw55a536y3m" }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "warning" + "items": { + "$ref": "#/components/schemas/schedule-template-configuration", + "x-stoplight": { + "id": "z1pcd596vxyhe" + } + } }, - "checkConsistencyOfGlobalCapitalization": { + "projectScheduleConfiguration": { + "$ref": "#/components/schemas/schedule-template-project-configuration", "x-stoplight": { - "id": "2b9wdh315dahs" - }, - "type": "boolean", - "x-default-field": true, - "default": false, - "description": "
default
" - }, - "checkConsistencyOfGlobalCapitalizationSeverity": { + "id": "jh0as6p6odfm0" + } + } + }, + "required": [ + "id" + ] + }, + "schedule-template-configuration": { + "title": "Schedule Template Configuration", + "x-stoplight": { + "id": "p8wulrz2rytzj" + }, + "type": "object", + "description": "Schedule Template Configuration resource", + "properties": { + "taskTypeId": { + "type": "string", "x-stoplight": { - "id": "4eohngzh0e2bc" + "id": "ussbf9yycjf0h" }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "warning" + "description": "The identifier of the human task type. " }, - "checkBrackets": { - "type": "boolean", + "taskTypeName": { + "type": "string", "x-stoplight": { - "id": "lw5s7boith817" + "id": "lny75nk7b0g3j" }, - "x-default-field": true, - "default": true, - "description": "
default
" + "description": "The name of the task type." }, - "checkBracketsSeverity": { + "schedules": { "x-stoplight": { - "id": "f8rpatoa21n08" + "id": "iu34k91wl2eql" }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "warning" + "type": "array", + "items": { + "$ref": "#/components/schemas/schedule-template-configuration-schedules", + "x-stoplight": { + "id": "j29hssjf8a1nu" + } + } } - } + }, + "required": [ + "taskTypeId" + ] }, - "project-template-verification-qa-checker-numbers": { - "title": "QA Checker Numbers", + "schedule-template-project-configuration": { + "title": "Schedule Template Project Configuration", "x-stoplight": { - "id": "95nv42e499dwi" + "id": "ezrw8kwy2cc2x" }, "type": "object", + "description": "Schedule Template Project Configuration resource", "properties": { - "checkNumbers": { - "type": "boolean", - "default": false, - "x-default-field": true, + "duration": { + "type": "integer", "x-stoplight": { - "id": "jmx3msjbemxdr" + "id": "ml3qutq4qy3km" }, - "description": "
default
" + "description": "
default
Expressed in minutes.
", + "default": 0, + "minimum": 0 }, - "checkNumbersSeverity": { + "reminder": { "x-stoplight": { - "id": "05931rv7v34yd" + "id": "3z5tzoznv1gci" }, + "description": "
default
Expressed in minutes.
", "enum": [ - "error", - "warning", - "note" - ], - "default": "error" - }, - "checkTimes": { - "type": "boolean", - "x-stoplight": { - "id": "yjnavlbjro7zn" - }, - "x-default-field": true, - "default": false, - "description": "
default
" + 15, + 30, + 60, + 120, + 480, + 1440, + 2880 + ] + } + } + }, + "schedule-template-configuration-request": { + "title": "Schedule Template Configuration Request", + "x-stoplight": { + "id": "pzjg39ikgktrd" + }, + "type": "object", + "description": "Schedule Template Configuration resource", + "properties": { + "taskTypeId": { + "type": "string", + "description": "The identifier of the human task type. " }, - "checkTimesSeverity": { + "schedules": { + "type": "array", + "items": { + "$ref": "#/components/schemas/schedule-template-configuration-schedules" + } + } + }, + "required": [ + "taskTypeId" + ] + }, + "schedule-template-configuration-schedules": { + "title": "Schedule Template Configuration Schedules", + "x-stoplight": { + "id": "9kw1yuhfb39q1" + }, + "type": "object", + "description": "The Configuration Schedules resource.", + "properties": { + "scope": { + "type": "string", "x-stoplight": { - "id": "p7a2a445i131t" + "id": "gn25uzdk9mu85" }, + "description": "The scope of this configuration schedule. \\\r\nglobal -> schedule of the task \\\r\nsourceLanguage -> schedule of the specific task when the sourceLanguage matches this object's sourceLanguage\\\r\nlanguageDirection -> schedule of the specific task when the languageDirection matches this object's languageDirection", "enum": [ - "error", - "warning", - "note" - ], - "default": "error" + "global", + "sourceLanguage", + "languageDirection" + ] }, - "checkDates": { - "type": "boolean", + "duration": { + "type": "integer", "x-stoplight": { - "id": "yccnoxkca39wp" + "id": "r20a6jq7s4a99" }, - "x-default-field": true, - "default": false, - "description": "
default
" + "description": "Expressed in minutes.", + "minimum": 0 }, - "checkDatesSeverity": { + "reminder": { "x-stoplight": { - "id": "9e40z6bd9mv8q" + "id": "wa77577h9gchk" }, + "description": "Expressed in minutes.\r\n\r\n", "enum": [ - "error", - "warning", - "note" - ], - "default": "error" + 15, + 30, + 60, + 120, + 480, + 1440, + 2880 + ] }, - "checkMeasurements": { - "type": "boolean", + "sourceLanguage": { + "type": "string", "x-stoplight": { - "id": "9w2l7x89okahm" + "id": "x9sswos4516kw" }, - "x-default-field": true, - "default": false, - "description": "
default
" + "example": " \"en-US\", de-DE\"" }, - "checkMeasurementsSeverity": { + "targetLanguage": { + "type": "string", "x-stoplight": { - "id": "5isqhxzz365vq" + "id": "kptfl33vpqdt7" }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "error" + "example": " \"en-US\", de-DE\"" } - } + }, + "required": [ + "scope" + ] }, - "project-template-verification-qa-checker-word-list": { - "title": "QA Checker Word list", + "schedule-template-update-request": { + "title": "Schedule Template Update Request", "x-stoplight": { - "id": "jcu8333uzax64" + "id": "eurbufhjxy71a" }, "type": "object", + "description": "Schedule Template update request model", "properties": { - "enabled": { - "type": "boolean", - "default": false, - "x-stoplight": { - "id": "1i43kmdizt8f9" - } + "name": { + "type": "string", + "description": "
Schedule Template name.
", + "maxLength": 50 }, - "searchWholeWords": { - "type": "boolean", + "description": { + "type": "string", + "description": "Schedule Template description.", + "maxLength": 1000 + }, + "configurations": { + "type": "array", "x-stoplight": { - "id": "mtexp5nafx5d4" + "id": "nzqkfrvaq8mck" }, - "x-default-field": true, - "default": false, - "description": "
default
" + "items": { + "$ref": "#/components/schemas/schedule-template-configuration-request", + "x-stoplight": { + "id": "kw88kaez7l361" + } + } }, - "ignoreCase": { - "type": "boolean", + "projectScheduleConfiguration": { + "$ref": "#/components/schemas/schedule-template-project-configuration", "x-stoplight": { - "id": "lw4spspstngjb" - }, - "x-default-field": true, - "default": false, - "description": "
default
" + "id": "glzz39c8n1mpo" + } + } + } + }, + "schedule-template-create-request": { + "title": "Schedule Template Create Request", + "x-stoplight": { + "id": "nzunuxlururt7" + }, + "type": "object", + "description": "Schedule Template create request model", + "properties": { + "name": { + "type": "string", + "description": "
Schedule Template name.
", + "maxLength": 50 }, - "checkWordListSeverity": { + "description": { + "type": "string", + "description": "Schedule Template description.", + "maxLength": 1000 + }, + "location": { + "type": "string", "x-stoplight": { - "id": "4dxqub35774eb" + "id": "j38jg0ywij0e6" }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "warning" + "description": "The folder identifier where the schedule template should be created. " }, - "wordList": { + "configurations": { "type": "array", "x-stoplight": { - "id": "rjn2ec0xqsm0k" + "id": "eufab0pne7lzd" }, - "x-default-field": true, "items": { + "$ref": "#/components/schemas/schedule-template-configuration-request", "x-stoplight": { - "id": "2rknpju6n8z56" - }, - "type": "object", - "properties": { - "wrongForm": { - "type": "string", - "x-stoplight": { - "id": "u9yi9ohufpdvp" - }, - "x-default-field": true - }, - "correctForm": { - "type": "string", - "x-stoplight": { - "id": "h4itahton32nl" - }, - "x-default-field": true - } + "id": "oxk22epaz3rbi" } - }, - "description": "
default
" + } + }, + "projectScheduleConfiguration": { + "$ref": "#/components/schemas/schedule-template-project-configuration", + "x-stoplight": { + "id": "rqi0t3ue6dm3m" + } + } + }, + "required": [ + "name" + ] + }, + "simple-language-direction": { + "title": "Simple Language Direction", + "type": "object", + "description": "A basic language direction.", + "properties": { + "id": { + "type": "string", + "description": "The language direction identifier." + }, + "sourceLanguage": { + "$ref": "#/components/schemas/language", + "description": "
default
The language object.
", + "x-default-field": true + }, + "targetLanguage": { + "$ref": "#/components/schemas/language", + "description": "
default
The language object.
", + "x-default-field": true + } + } + }, + "source-file": { + "title": "Source File", + "type": "object", + "description": "Source File.", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string", + "description": "
default
The file name.
", + "x-default-field": true + }, + "role": { + "$ref": "#/components/schemas/file-role", + "description": "
default
The file role.
", + "x-default-field": true + }, + "language": { + "$ref": "#/components/schemas/language" + }, + "versions": { + "type": "array", + "description": "The source file versions. (Not available for List endpoints).", + "items": { + "$ref": "#/components/schemas/source-file-version" + } + }, + "targetLanguages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/language" + } + }, + "path": { + "type": "array", + "items": { + "type": "string" + } + }, + "totalWords": { + "type": "integer", + "description": "Word count in the source file. \r\n
\r\nAvailable only for translatable source files, and only after the workflow task with Task Type `convert` (File Format Conversion) was executed on the source file.\r\n
\r\nAvailable only on the List Source Files endpoint." } - }, - "required": [ - "enabled" - ] + } }, - "project-template-verification-qa-checker-regular-expressions": { - "title": "QA Checker Regular Expressions", - "x-stoplight": { - "id": "xem3u8m9wipd6" - }, + "source-file-request": { "type": "object", + "title": "Source File Request", + "description": "Source file properties sent as a JSON inside a text part.", + "required": [ + "name", + "role", + "type", + "language" + ], "properties": { - "checkRegularExpressions": { - "type": "boolean", - "default": false, - "x-stoplight": { - "id": "83h1307cwqhw9" - }, - "description": "" + "name": { + "type": "string", + "description": "The name of the source file. For example `Finance_2021_dummy_EN.txt`.\n\n\nThe character limit is calculated together with the `path` length.", + "minLength": 1, + "maxLength": 255 }, - "regularExpressionSeverity": { - "x-stoplight": { - "id": "xmi8dmu62uzi8" - }, + "role": { + "type": "string", "enum": [ - "error", - "warning", - "note" + "translatable", + "reference", + "unknown" ], - "default": "warning" + "description": "The role of the source file. When set to unknown or translatable, the system will try to detect the file type." }, - "regularExpressions": { + "type": { + "type": "string", + "enum": [ + "native", + "bcm", + "sdlxliff" + ], + "description": "The type of the file." + }, + "language": { + "$ref": "#/components/schemas/language-request", + "description": "The language of the file in code 5 (ex. en-US)" + }, + "targetLanguages": { "type": "array", - "x-stoplight": { - "id": "6z45r3k1a1b4o" - }, - "x-default-field": true, + "description": "A list of target languages in code 5 (ex. en-US)", "items": { - "$ref": "#/components/schemas/project-template-verification-qa-checker-regular-expressions-model", - "x-stoplight": { - "id": "5e6hkwes4mo6a" - } - }, - "description": "
default
" + "$ref": "#/components/schemas/language-request" + } + }, + "path": { + "type": "array", + "description": "Path represents the hierarchy of the source file inside the project.\n\nFor example `/ZipWithFolders/Finance/2021/Finance_2021_dummy_EN.txt` would be sent as: \n\n```json \n\"path\": [ \n \"ZipWithFolders\", \n \"Finance\", \n \"2021\"\n]\n```\n\nThe character limit is calculated together with the `name` length.", + "items": { + "type": "string", + "minLength": 0, + "maxLength": 200 + } } - }, - "required": [ - "checkRegularExpressions" - ] + } }, - "project-template-verification-qa-checker-regular-expressions-model": { - "title": "Regular Expressions Model", - "x-stoplight": { - "id": "2rx3df3vczsr1" - }, + "source-file-rename-request": { + "title": "Source File Rename Request", "type": "object", "properties": { - "description": { - "type": "string", - "x-stoplight": { - "id": "20v4paozpk91g" - }, - "x-default-field": true, - "description": "
default
" - }, - "regexSource": { - "x-stoplight": { - "id": "e9lfc0qm2td5k" - }, - "type": "string", - "x-default-field": true, - "description": "
default
" - }, - "regexTarget": { + "name": { "type": "string", - "x-stoplight": { - "id": "k7olv3yojvixm" - }, - "x-default-field": true, - "description": "
default
" + "description": "The name of the source file.\\\nThe name should not contain the extension.\\\nUnsupported characters in the name: `<`, `>`, `:`, `\"`, `/`, `\\`, `|`, `?`, `*`.", + "minLength": 1 }, - "ignoreCase": { + "updateTargetFilesName": { "type": "boolean", - "x-stoplight": { - "id": "21avhvnk4l142" - }, - "x-default-field": true, "default": false, - "description": "
default
" - }, - "condition": { - "x-stoplight": { - "id": "nmhpp19inyk2n" - }, - "enum": [ - "targetAndSource", - "targetNotSource", - "sourceNotTarget", - "sourceOnly", - "targetOnly", - "differentCount", - "groupedTargetAndSource" - ], - "x-default-field": true, - "description": "
default
" + "description": "Option for renaming also the target files." } - } - }, - "project-template-verification-qa-checker-trademark-check": { - "title": "QA Checker Trademark check", - "x-stoplight": { - "id": "l65c655atolg3" }, + "required": [ + "name" + ] + }, + "source-files-update-request": { + "title": "Source Files Update Request", "type": "object", "properties": { - "enabled": { - "type": "boolean", - "default": true, - "x-stoplight": { - "id": "hrisnih0vgd4w" - } - }, - "trademarkSeverity": { - "x-stoplight": { - "id": "dfa7w4qetxl2c" - }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "error" - }, - "trademarkSymbols": { + "files": { "type": "array", - "x-stoplight": { - "id": "i0um9xob8izp7" - }, - "x-default-field": true, "items": { - "x-stoplight": { - "id": "d32mt39hj0fer" - }, - "type": "string" - }, - "default": [ - "®", - "©", - "™", - "(c)", - "(r)", - "(tm)" - ], - "description": "
default
" + "$ref": "#/components/schemas/source-file-update-request" + } } }, "required": [ - "enabled" + "files" ] }, - "project-template-verification-qa-checker-length-verification": { - "title": "QA Checker Length Verification", - "x-stoplight": { - "id": "ex9iomj4a786f" - }, + "source-file-update-request": { + "title": "Source File Update Request", "type": "object", "properties": { - "checkLengthLimitation": { - "type": "boolean", - "default": true, - "x-default-field": true, - "x-stoplight": { - "id": "7bxsr6dzipk4m" - }, - "description": "
default
" - }, - "checkLengthLimitationSeverity": { - "x-stoplight": { - "id": "3wlsd7f20hftl" - }, - "enum": [ - "error", - "warning", - "note" - ], - "default": "error" + "id": { + "type": "string", + "description": "The source file identifier.", + "minLength": 1 }, - "targetSegmentsVerificationType": { - "x-stoplight": { - "id": "147n1oindvqf3" - }, - "x-default-field": true, - "enum": [ - "fileSpecificLimit", - "absoluteCharacterCount" - ], - "default": "fileSpecificLimit", - "description": "
default
" + "name": { + "type": "string", + "description": "The source file name.\\\nThe name should not contain the extension.\\\nUnsupported characters in the name: `<`, `>`, `:`, `\"`, `/`, `\\`, `|`, `?`, `*`.", + "minLength": 1 }, - "absoluteCharCountValue": { - "type": "number", - "x-stoplight": { - "id": "i88shddbsddjo" - }, - "x-default-field": true, - "description": "
default
Used in case `targetSegmentsVerificationType = absoluteCharacterCount`
", - "default": 50 + "updateTargetFilesName": { + "type": "boolean", + "default": false, + "description": "Option for renaming the target files too." + } + }, + "required": [ + "id", + "name" + ] + }, + "source-file-attachment-request": { + "title": "Source File Attachment Request", + "type": "object", + "description": "", + "properties": { + "sourceFilesAttachment": { + "type": "array", + "description": "List of Attached Source File properties referencing previously uploaded file", + "items": { + "$ref": "#/components/schemas/source-file-attachment-request-item" + } } } }, - "project-template-TM-penalties": { - "title": "Translation Memory Penalties", + "source-file-attachment-response": { + "title": "Source File Attachment Response", "type": "object", - "description": "Translation Memory Penalties", + "description": "", "properties": { - "standardPenalties": { - "$ref": "#/components/schemas/project-template-TM-standard-penalties", - "description": "
default
", - "x-default-field": true, - "type": "object", - "x-stoplight": { - "id": "rx66lu3x78mvr" - } - }, - "translationUnitStatusPenalties": { - "$ref": "#/components/schemas/project-template-TM-translation-unit-status-penalties", - "description": "
default
", - "x-default-field": true, - "type": "object", - "x-stoplight": { - "id": "7g27gag166myh" + "sourceFiles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/source-file" } } } }, - "project-template-TM-standard-penalties": { - "title": "Translation Memory Standard Penalties", + "source-file-attachment-request-item": { + "title": "Source File Attachment Request Item", "type": "object", - "description": "Translation Memory Standard Penalties", + "description": "Attached Source File properties referencing previously uploaded file", + "required": [ + "name", + "role", + "fileUrl", + "type", + "language" + ], "properties": { - "missingFormatting": { - "description": "
default
", - "x-default-field": true, - "x-stoplight": { - "id": "pdzeu7k11vkc4" - }, - "type": "integer", - "minimum": 0, - "maximum": 20, - "default": 1 + "name": { + "type": "string", + "description": "The name of the source file. For example `Finance_2021_dummy_EN.txt`. \n\nThe character limit is calculated together with the `path` length.", + "maxLength": 200, + "minLength": 1 }, - "differentFormatting": { - "description": "
default
", - "x-default-field": true, - "x-stoplight": { - "id": "bspk3rj8xswag" - }, - "type": "integer", - "minimum": 0, - "maximum": 20, - "default": 1 + "role": { + "type": "string", + "enum": [ + "translatable", + "reference", + "unknown" + ], + "description": "The role of the source file. When set to unknown or translatable, the system will try to detect the file type." }, - "multipleTranslations": { - "description": "
default
", - "x-default-field": true, - "type": "integer", - "minimum": 0, - "maximum": 20, - "default": 1 + "fileUrl": { + "type": "string", + "description": "The identifier of the previously uploaded file." }, - "autoLocalization": { - "description": "
default
", - "x-default-field": true, - "type": "integer", - "minimum": 0, - "maximum": 20, - "default": 0 + "type": { + "type": "string", + "enum": [ + "native", + "bcm", + "sdlxliff" + ], + "description": "The type of the file." }, - "textReplacement": { - "description": "
default
", - "x-default-field": true, - "type": "integer", - "minimum": 0, - "maximum": 20, - "default": 0 + "language": { + "$ref": "#/components/schemas/source-language-request" }, - "alignment": { - "description": "
default
", - "x-default-field": true, - "type": "integer", - "minimum": 0, - "maximum": 20, - "default": 1 + "targetLanguages": { + "type": "array", + "description": "A list of target languages in code 5 (ex. en-US)", + "items": { + "$ref": "#/components/schemas/target-language-request" + } }, - "characterWidthDifference": { - "description": "
default
", - "x-default-field": true, - "type": "integer", - "minimum": 0, - "maximum": 20, - "default": 1 + "path": { + "type": "array", + "description": "Path represents the hierarchy of the source file inside the project.\n\nFor example `/ZipWithFolders/Finance/2021/Finance_2021_dummy_EN.txt` would be sent as: \n\n```json \n\"path\": [ \n \"ZipWithFolders\", \n \"Finance\", \n \"2021\" \n]\n```\n\nThe character limit is calculated together with the `name` length.", + "items": { + "type": "string", + "maxLength": 200, + "minLength": 0 + } } } }, - "project-template-TM-translation-unit-status-penalties": { - "title": "Translation Memory Translation Unit Status Penalties", + "source-file-properties-response": { + "title": "Source File Properties Response", "type": "object", - "description": "Translation Memory Translation Unit Status Penalties", + "description": "", "properties": { - "translated": { - "description": "
default
", - "x-default-field": true, - "type": "integer", - "minimum": 0, - "maximum": 20, - "default": 0 - }, - "rejectedTranslation": { - "description": "
default
", - "x-default-field": true, - "type": "integer", - "minimum": 0, - "maximum": 20, - "default": 0 - }, - "approvedTranslation": { - "description": "
default
", - "x-default-field": true, - "type": "integer", - "minimum": 0, - "maximum": 20, - "default": 0 - }, - "rejectedSignOff": { - "description": "
default
", - "x-default-field": true, - "type": "integer", - "minimum": 0, - "maximum": 20, - "default": 0 - }, - "approvedSignOff": { - "description": "
default
", - "x-default-field": true, - "type": "integer", - "minimum": 0, - "maximum": 20, - "default": 0 + "fileRole": { + "type": "string", + "description": "The file's role.", + "enum": [ + "translatable", + "reference" + ] }, - "notTranslated": { - "description": "
default
", - "x-default-field": true, - "type": "integer", - "minimum": 0, - "maximum": 20, - "default": 0 + "fileTypeSettingsId": { + "type": "string", + "description": "The file type settings identifier." + } + }, + "required": [ + "fileRole", + "fileTypeSettingsId" + ] + }, + "source-file-properties-update-request": { + "title": "Source File Properties Update Request", + "type": "object", + "description": "", + "properties": { + "fileRole": { + "type": "string", + "description": "The file role.", + "enum": [ + "translatable", + "reference" + ] }, - "draft": { - "description": "
default
", - "x-default-field": true, - "type": "integer", - "minimum": 0, - "maximum": 20, - "default": 0 + "fileTypeSettingsId": { + "type": "string", + "description": "The file type settings identifier." } } }, - "project-plan": { - "title": "Project Plan", + "source-file-version-properties-create-request": { + "title": "Source File Version Properties Create Request", "type": "object", - "description": "The configurations of the tasks that will be created in the future.\n\nAvailable now directly after project creation, project does not need to be started to be populated. \n\n(Not available for List Projects endpoint)", + "description": "", "properties": { - "taskConfigurations": { - "type": "array", - "items": { - "$ref": "#/components/schemas/project-plan-task-configuration" - } + "type": { + "type": "string", + "description": "The version type.", + "enum": [ + "bcm", + "native" + ] + }, + "fileTypeSettingsId": { + "type": "string", + "description": "The file type settings identifier." } - } + }, + "required": [ + "type" + ] }, - "project-plan-task-configuration": { - "title": "Project Plan Task Configuration", + "source-file-version": { + "title": "Source File Version", "type": "object", - "description": "The configuration of a task that will be created in the future.", + "description": "Source File Version.", "properties": { - "taskTemplate": { - "$ref": "#/components/schemas/object-id" - }, - "scope": { - "$ref": "#/components/schemas/task-configuration-scope" - }, - "assignees": { - "type": "array", - "items": { - "$ref": "#/components/schemas/workflow-task-assignee" - } + "id": { + "type": "string", + "description": "The source file version identifier." }, - "isSkipped": { - "type": "boolean", - "description": "
default
Specifies if the task will be skipped.
", + "type": { + "type": "string", + "enum": [ + "native", + "bcm" + ], + "description": "
default
The version type.
", "nullable": true, "x-default-field": true }, - "dueBy": { + "name": { "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The due date of the future task.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", - "nullable": true + "description": "
default
The file version name. This is a synthetic value, typically constructed from the version number and the originating task name.
", + "x-default-field": true + }, + "version": { + "type": "integer", + "description": "A numeric value, incremented for each new version." + }, + "originatingTaskId": { + "type": "string", + "x-stoplight": { + "id": "fsakhiag03gl9" + }, + "description": "The identifier of the task that generated the file." } }, "required": [ - "taskTemplate", - "scope" + "id", + "version" ] }, - "project-plan-task-assignee-request": { - "title": "Project Plan Task Assignee Request", + "source-file-version-response": { + "title": "Source File Version Response", "type": "object", + "description": "", "properties": { - "type": { + "id": { "type": "string", - "enum": [ - "user", - "group", - "vendorOrderTemplate", - "projectCreator" - ] + "description": "The source file version identifier." }, - "id": { + "type": { "type": "string", - "description": "The user, group or vendor identifier, depending on the type chosen. It is not required for `projectCreator`." + "description": "
default
The version type.
", + "enum": [ + "native", + "bcm" + ], + "x-default-field": true } }, "required": [ - "type" + "id" ] }, - "project-plan-update-request": { - "title": "Project Plan Update Request", + "source-language-request": { + "title": "Source Language Request", "type": "object", - "description": "Updates the configurations of the tasks that will be created in the future. \nFor example, you can change the assignee of the \"translation\" task while the project is in the \"preprocessing\" phase.", "properties": { - "taskConfigurations": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/components/schemas/project-plan-task-configuration-request" - } + "languageCode": { + "type": "string", + "description": "The language code." } }, "required": [ - "taskConfigurations" + "languageCode" ] }, - "project-plan-task-configuration-request": { - "title": "Project Plan Task Configuration Request", + "target-file-version-properties-create-request": { + "title": "Target File Version Properties Create Request", "type": "object", - "description": "A project plan task configuration request. Used to update a task that will be created in the future.", + "description": "", "properties": { - "taskTemplate": { - "$ref": "#/components/schemas/object-id-request" - }, - "isSkipped": { - "type": "boolean", - "description": "Specifies if the task will be skipped. \n If you want to skip all the target languages for the given task, set the scope as \"global\"." - }, - "assignees": { - "type": "array", - "description": "Specifies the list of assignees for the future task. \n
When the 'isSkipped' field is set to 'true', an empty list of assignees should be specified.\r\n
Total assignee count is limited. See more at [Assigning users and groups to workflow tasks](https://docs.rws.com/791595/743481/trados-enterprise---accelerate/assigning-users-and-groups-to-workflow-tasks) point 5e.", - "items": { - "$ref": "#/components/schemas/project-plan-task-assignee-request" - } - }, - "scope": { - "$ref": "#/components/schemas/task-configuration-scope-request" - }, - "dueBy": { - "$ref": "#/components/schemas/date-time" + "type": { + "type": "string", + "description": "The version type.", + "enum": [ + "bcm", + "native" + ] } }, "required": [ - "taskTemplate", - "isSkipped", - "assignees", - "scope" + "type" ] }, - "project-status-history": { - "title": "Project Status History Item", + "target-file-version-response": { + "title": "Target File Version Response", "type": "object", - "description": "An Item which describes a change in the status of the project.", + "description": "", "properties": { - "from": { + "id": { "type": "string", - "description": "Specifies the project status previous to the change.", - "enum": [ - "none", - "created", - "inProgress", - "completed" - ] + "description": "The target file version identifier." }, - "to": { + "type": { "type": "string", - "description": "Specifies the project status post change.", + "description": "
default
The version type.
", "enum": [ - "created", - "inProgress", - "completed" - ] - }, - "by": { - "$ref": "#/components/schemas/user" - }, - "timestamp": { - "$ref": "#/components/schemas/date-time", - "x-default-field": true, - "description": "The time and date when the status history was updated.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"" + "native", + "bcm" + ], + "x-default-field": true } }, "required": [ - "from", - "to" + "id" ] }, - "quote": { - "title": "Quote", + "task": { + "title": "Task", "type": "object", - "description": "Project quote.", + "description": "Task.", "properties": { - "totalAmount": { - "type": "number", - "description": "
default
Total translation fee.
", - "nullable": true, - "x-default-field": true + "id": { + "type": "string" }, - "currencyCode": { + "status": { "type": "string", - "description": "
default
The currency code (ISO 4217).
", - "x-default-field": true + "description": "
default
The task status.
", + "enum": [ + "created", + "inProgress", + "completed", + "failed", + "skipped", + "canceled" + ], + "x-default-field": true, + "nullable": true }, - "translationCosts": { - "type": "array", - "items": { - "$ref": "#/components/schemas/quote-translation-cost" - } + "taskType": { + "$ref": "#/components/schemas/task-type" }, - "languageCosts": { - "type": "array", - "items": { - "$ref": "#/components/schemas/quote-language-cost" - } + "input": { + "$ref": "#/components/schemas/task-input" }, - "additionalCosts": { + "inputFiles": { "type": "array", "items": { - "$ref": "#/components/schemas/quote-additional-cost" + "$ref": "#/components/schemas/task-input-file" } }, - "notes": { - "type": "string", - "x-stoplight": { - "id": "n1ohftpten9bv" - }, - "description": "A message associated with the quote." - } - } - }, - "quote-additional-cost": { - "title": "Quote Additional Cost", - "type": "object", - "description": "Other extra fees not captured by translationCosts and languageCosts.", - "properties": { - "name": { - "type": "string", - "description": "
default
The name of the additional cost.
" - }, - "count": { - "type": "number", - "description": "The number of units used to compute the total. Used only for 'volume', 'hourly', 'perPage' and 'percentage' cost types.", - "nullable": true - }, - "total": { - "type": "number", - "description": "
default
The computed cost.
", - "nullable": true, - "x-default-field": true - }, - "cost": { - "type": "number", - "description": "The cost of a unit.", - "nullable": true + "owner": { + "$ref": "#/components/schemas/user" }, - "costType": { + "assignees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/task-assignee" + } + }, + "dueBy": { "type": "string", - "enum": [ - "volume", - "perTargetLanguage", - "perFile", - "hourly", - "percentage", - "perPage", - "conditional" - ], - "description": "The type of the additional cost.", + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The task due date.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", "nullable": true }, - "volumeUnitType": { + "createdAt": { "type": "string", - "description": "The unit type of the 'volume' cost, used as a reference for the unit cost.", - "enum": [ - "words", - "characters" - ], + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the task was created.
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\" ", "nullable": true }, - "costOrder": { - "type": "integer", - "description": "Indicates the order in which the additional cost is computed.", - "nullable": true + "applicableOutcomes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/task-outcome" + } }, - "conditionalCostType": { + "outcome": { "type": "string", - "description": "Describes how the cost of type 'conditional' will be added to total cost.", - "enum": [ - "absolute", - "relative", - "percentage" - ], - "nullable": true + "description": "The outcome of the task type. It is retrieved only if the task is completed. It should match one of the legal outcomes in the task type." }, - "conditionalCostOperator": { + "comment": { "type": "string", - "description": "The operator applied between the 'costVariable' and 'operand'.", - "enum": [ - "less", - "lessOrEqual", - "greater", - "greaterOrEqual" - ], - "nullable": true + "description": "The comment associated with this task at completion." }, - "conditionalCostVariable": { - "type": "string", - "description": "The variable that is evaluated against the 'operand' based on the 'costOperator'.", - "enum": [ - "wordCount", - "runningTotal" - ], - "nullable": true + "project": { + "$ref": "#/components/schemas/project" }, - "conditionalCostThreshold": { - "description": "The value that is evaluated against the 'costVariable' based on the 'costOperator'.", - "type": "number", - "nullable": true + "failedTask": { + "$ref": "#/components/schemas/failed-task" }, - "runningTotal": { - "type": "number", - "description": "The sum of all the previously computed costs.", - "nullable": true + "completedAt": { + "$ref": "#/components/schemas/date-time", + "description": "The completion timestamp of the task.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"" } - } + }, + "required": [ + "id" + ] }, - "quote-additional-cost-request": { - "title": "Quote Additional Cost Request", + "task-error": { + "title": "Task Error", "type": "object", + "description": "Task Error.", "properties": { "name": { "type": "string", - "description": "The name of the additional cost." - }, - "count": { - "type": "number", - "description": "The number of units used to compute the total. Used only for 'volume', 'hourly', 'perPage' and 'percentage' cost types." - }, - "cost": { - "type": "number", - "description": "The cost of a unit." + "description": "The task error name." }, - "costType": { + "code": { "type": "string", - "enum": [ - "volume", - "perTargetLanguage", - "perFile", - "hourly", - "percentage", - "perPage", - "conditional" - ], - "description": "The type of the additional cost.", - "nullable": true + "description": "The task error code." }, - "volumeUnitType": { + "value": { + "type": "string", + "description": "The task error value." + } + } + }, + "task-assignee": { + "title": "Task Assignee", + "type": "object", + "description": "Task assignee. Based on the \"type\", the following properties can be retrieved: \"user\", \"group\" or \"vendorOrderTemplate\". For \"projectCreator\" and \"projectManager\" no other properties are available.", + "properties": { + "type": { "type": "string", - "description": "The unit type of the 'volume' cost, used for counting the units.", "enum": [ - "words", - "characters" + "user", + "group", + "vendorOrderTemplate", + "projectCreator" ], - "nullable": true + "description": "Type \"projectCreator\" - reserved for future use. Should be able to handle it and ignore it if received." }, - "costOrder": { - "type": "integer", - "description": "Indicates the order in which the additional cost is computed." + "user": { + "$ref": "#/components/schemas/user", + "description": "
default
A user.
", + "x-default-field": true }, - "conditionalCostType": { - "type": "string", - "description": "Describes how the cost of type 'conditional' will be added to total cost.", - "enum": [ - "absolute", - "relative", - "percentage" - ], - "nullable": true + "group": { + "$ref": "#/components/schemas/group", + "description": "
default
A group of users.
", + "x-default-field": true }, - "conditionalCostOperator": { + "vendorOrderTemplate": { + "$ref": "#/components/schemas/vendor-order-template" + } + }, + "required": [ + "type" + ] + }, + "task-assignee-request": { + "title": "Task Assignee Request", + "type": "object", + "properties": { + "id": { "type": "string", - "description": "The operator applied between the 'costVariable' and 'operand'.", - "enum": [ - "less", - "lessOrEqual", - "greater", - "greaterOrEqual" - ], - "nullable": true + "description": "The identifier of the assignee that should correspond to a resource based on the “type” field.
Only required for the `user`, `group`, and `vendorOrderTemplate` types." }, - "conditionalCostVariable": { + "type": { "type": "string", - "description": "The variable that is evaluated against the 'operand' based on the 'costOperator'.", "enum": [ - "wordCount", - "runningTotal" + "user", + "group", + "vendorOrderTemplate", + "projectManager", + "projectCreator" ], - "nullable": true - }, - "conditionalCostThreshold": { - "description": "The value that is evaluated against the 'costVariable' based on the 'costOperator'.", - "type": "number" + "description": "The assignee type." } }, "required": [ - "name", - "count", - "cost", - "costOrder", - "conditionalCostThreshold" + "type" ] }, - "quote-language-cost": { - "title": "Quote Language Cost", + "task-assign-request": { + "title": "Task Assign Request", "type": "object", - "description": "Fees relevant for a specific target language.", + "description": "Properties of task assignment.\r\n
Total assignee count is limited. See more at [Maximum number of task assignees](https://docs.rws.com/791595/1137562/trados-enterprise---accelerate/maximum-number-of-task-assignees).", "properties": { - "name": { + "assignees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/task-assignee-request" + } + } + } + }, + "task-complete-request": { + "title": "Task Complete Request", + "type": "object", + "description": "Properties of task completion.", + "properties": { + "outcome": { "type": "string", - "description": "
default
The name of the additional cost.
", - "x-default-field": true - }, - "count": { - "type": "number", - "description": "The number of units used to compute the total. Used only for 'volume', 'hourly', 'perPage' and 'percentage' cost types.", - "nullable": true - }, - "total": { - "type": "number", - "description": "
default
The computed cost.
", - "nullable": true, - "x-default-field": true - }, - "cost": { - "type": "number", - "description": "The cost of a unit.", - "nullable": true + "description": "The outcome should be one of the valid applicable outcomes of the task. If not specified, the default one will be taken." }, - "costType": { + "comment": { "type": "string", - "enum": [ - "volume", - "perTargetLanguage", - "perFile", - "hourly", - "percentage", - "perPage", - "conditional" - ], - "description": "The type of the additional cost.", - "nullable": true - }, - "volumeUnitType": { + "description": "The comment associated with this task completion.", + "maxLength": 1000 + } + }, + "required": [ + "outcome" + ] + }, + "task-input": { + "title": "Task Input", + "type": "object", + "description": "Task input. Based on the \"type\", the following fields can be retrieved: \"project\", \"sourceFile\", \"targetFile\".", + "properties": { + "type": { "type": "string", - "description": "The unit type of the 'volume' cost, used as a reference for the unit cost.", + "description": "The input type.", "enum": [ - "words", - "characters" - ], - "nullable": true + "project", + "sourceFile", + "targetFile", + "languageDirection" + ] }, - "targetLanguage": { - "$ref": "#/components/schemas/language" + "project": { + "$ref": "#/components/schemas/project", + "description": "
default
Project resource
", + "x-default-field": true }, - "costOrder": { - "type": "integer", - "description": "Indicates the order in which the additional cost is computed.", - "nullable": true + "sourceFile": { + "$ref": "#/components/schemas/source-file", + "description": "
default
Source file.
", + "x-default-field": true }, - "conditionalCostType": { - "type": "string", - "description": "The condition type of the conditional cost.", - "enum": [ - "absolute", - "relative", - "percentage" - ], - "nullable": true + "targetFile": { + "$ref": "#/components/schemas/target-file", + "description": "
default
Target file.
", + "x-default-field": true }, - "conditionalCostOperator": { - "type": "string", - "description": "The operator applied between the 'costVariable' and 'operand'.", - "enum": [ - "less", - "lessOrEqual", - "greater", - "greaterOrEqual" - ], - "nullable": true + "languageDirection": { + "$ref": "#/components/schemas/language-direction", + "description": "
default
A language direction.
", + "x-default-field": true }, - "conditionalCostVariable": { + "vendorOrder": { + "$ref": "#/components/schemas/vendor-order", + "description": "
default
A vendor order resource.
", + "x-default-field": true + } + }, + "required": [ + "type" + ] + }, + "task-input-file": { + "title": "Task Input File", + "type": "object", + "description": "Task input file. Based on the \"type\", only the \"sourceFile\" or \"targetFile\" can be retrieved.", + "properties": { + "type": { "type": "string", - "description": "The variable that is evaluated against the 'operand' based on the 'costOperator'.", "enum": [ - "wordCount", - "runningTotal" + "sourceFile", + "targetFile" ], - "nullable": true + "nullable": true, + "description": "
default
", + "x-default-field": true }, - "conditionalCostThreshold": { - "description": "The value that is evaluated against the 'costVariable' based on the 'costOperator'.", - "type": "number", - "nullable": true + "sourceFile": { + "$ref": "#/components/schemas/source-file", + "description": "
default
Source file.
", + "x-default-field": true }, - "runningTotal": { - "type": "number", - "description": "The sum of all the previously computed costs.", - "nullable": true + "targetFile": { + "$ref": "#/components/schemas/target-file", + "description": "
default
Target file.
", + "x-default-field": true } } }, - "quote-language-cost-request": { - "title": "Quote Language Cost Request", + "task-type": { + "title": "Task Type", "type": "object", + "description": "Task type.", "properties": { - "name": { - "type": "string", - "description": "The name of the additional cost." - }, - "count": { - "type": "number", - "description": "The number of units used to compute the total. Used only for 'volume', 'hourly', 'perPage' and 'percentage' cost types." - }, - "cost": { - "type": "number", - "description": "The cost of a unit." + "id": { + "type": "string" }, - "costType": { + "key": { "type": "string", - "enum": [ - "volume", - "perTargetLanguage", - "perFile", - "hourly", - "percentage", - "perPage", - "conditional" - ], - "description": "The type of the additional cost.", - "nullable": true + "description": "
default
Identifier key for the task.
", + "x-default-field": true }, - "volumeUnitType": { + "name": { "type": "string", - "description": "The unit type of the 'volume' cost, used for counting the units.", - "enum": [ - "words", - "characters" - ], - "nullable": true + "description": "
default
", + "x-default-field": true }, - "targetLanguage": { - "$ref": "#/components/schemas/target-language-request" + "apiInternalId": { + "type": "string", + "x-stoplight": { + "id": "tavwkrljagcmc" + }, + "description": "
default
Unique identifier of custom task types. Null for default task types." }, - "costOrder": { - "type": "integer", - "description": "Indicates the order in which the additional cost is computed." + "description": { + "type": "string" }, - "conditionalCostType": { - "type": "string", - "description": "Describes how the cost of type 'conditional' will be added to total cost.", - "enum": [ - "absolute", - "relative", - "percentage" - ], + "automatic": { + "type": "boolean", + "description": "This indicates whether the task is automatic or human.", "nullable": true }, - "conditionalCostOperator": { + "scope": { "type": "string", - "description": "The operator applied between the 'costVariable' and 'operand'.", + "description": "The resource type scope for the task.", "enum": [ - "less", - "lessOrEqual", - "greater", - "greaterOrEqual" + "file", + "targetLanguage", + "batch", + "vendorOrder", + "task" ], "nullable": true }, - "conditionalCostVariable": { - "type": "string", - "description": "The variable that is evaluated against the 'operand' based on the 'costOperator'.", - "enum": [ - "wordCount", - "runningTotal" - ], - "nullable": true + "outcomes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/task-type-outcome" + } }, - "conditionalCostThreshold": { - "description": "The value that is evaluated against the 'costVariable' based on the 'costOperator'.", - "type": "number" + "location": { + "$ref": "#/components/schemas/folder-v2" } }, "required": [ - "name", - "count", - "cost", - "costOrder", - "conditionalCostThreshold" + "id" ] }, - "quote-translation-cost": { - "title": "Quote Translation Cost", + "task-outcome": { + "title": "Task Outcome", "type": "object", - "description": "Fees calculated based on segment status (new, translated, signed off) and previous leverage (100% match and identical context, 100% match, <100%match, cross-file repetitions).", + "description": "Outcome a task can be completed with. List will be populated after the task is accepted.", "properties": { - "total": { - "type": "number", - "description": "
default
The total cost for the current target language.
", - "nullable": true, + "name": { + "type": "string", + "description": "
default
Outcome to be used with complete endpoint.", "x-default-field": true }, - "targetLanguage": { - "$ref": "#/components/schemas/language" - }, - "exactMatch": { - "$ref": "#/components/schemas/translation-cost-item" - }, - "inContextExactMatch": { - "$ref": "#/components/schemas/translation-cost-item" - }, - "new": { - "$ref": "#/components/schemas/translation-cost-item" - }, - "perfectMatch": { - "$ref": "#/components/schemas/translation-cost-item" - }, - "repetitions": { - "$ref": "#/components/schemas/translation-cost-item" - }, - "machineTranslation": { - "$ref": "#/components/schemas/translation-cost-item" - }, - "fuzzyMatch": { - "type": "array", - "items": { - "$ref": "#/components/schemas/translation-cost-fuzzy-item" - } + "description": { + "type": "string", + "description": "A human-friendly form of the outcome." }, - "runningTotal": { - "type": "number", - "description": "
default
The sum of all the previously computed costs.
", - "nullable": true, + "default": { + "type": "boolean", + "description": "
default
Specifies if the outcome is the default one for the task.", "x-default-field": true } } }, - "quote-update-request": { - "title": "Quote Update Request", - "type": "object", - "properties": { - "languageCosts": { - "type": "array", - "items": { - "$ref": "#/components/schemas/quote-language-cost-request" - } - }, - "additionalCosts": { - "type": "array", - "items": { - "$ref": "#/components/schemas/quote-additional-cost-request" - } - }, - "notes": { - "type": "string", - "x-stoplight": { - "id": "404ggz8hrvbpg" - }, - "description": "A message associated with the quote.", - "maxLength": 3000 - } - } - }, - "project-quote-template": { - "title": "Project Quote Template", + "task-type-outcome": { + "title": "Task Type Outcome", "type": "object", - "description": "Project Quote Template resource.", + "description": "The task type outcome.", "properties": { - "id": { - "type": "string", - "description": "The identifier of the quote template." - }, "name": { "type": "string", - "description": "The name of the quote template." + "description": "
default
", + "x-default-field": true }, "description": { - "type": "string", - "description": "The description of the quote template." + "type": "string" }, - "location": { - "$ref": "#/components/schemas/folder-v2" - } - }, - "required": [ - "id" - ], - "x-stoplight": { - "id": "0sp6j7989p1j7" + "default": { + "type": "boolean", + "nullable": true, + "description": "
default
", + "x-default-field": true + } } }, - "project-quote-template-deprecated": { - "title": "Project Quote Template", - "x-stoplight": { - "id": "cwik0w5o34ix6" - }, + "task-configuration-scope": { + "title": "Workflow Task Configuration Scope", "type": "object", - "description": "(Deprecated) moved under settings.general.quoteTemplate", - "deprecated": true, "properties": { - "id": { + "type": { "type": "string", - "description": "The identifier of the quote template." + "description": "The applicability impact of the workflow configuration:\n- global: used for global tasks which are not associated to a target language\n- sourceLanguage: changes affect only the task associated to the source language specified in **sourceLanguage** field\n- targetLanguage: changes affect only the task associated to the target language specified in **targetLanguage** field\n- languageDirection: changes affect only the task associated to the language direction specified in **languageDirection** field", + "enum": [ + "global", + "sourceLanguage", + "targetLanguage", + "languageDirection" + ] }, - "name": { - "type": "string", - "description": "The name of the quote template." + "sourceLanguage": { + "$ref": "#/components/schemas/language" }, - "description": { - "type": "string", - "description": "The description of the quote template." + "targetLanguage": { + "$ref": "#/components/schemas/language" }, - "location": { - "$ref": "#/components/schemas/folder-v2" + "languageDirection": { + "$ref": "#/components/schemas/language-direction-item" } }, "required": [ - "id" + "type" ] }, - "rate-limit": { - "title": "Rate Limit", + "task-configuration-scope-request": { + "title": "Workflow Task Configuration Scope Request", "type": "object", - "description": "Rate Limit entry", + "description": "", "properties": { - "policyName": { + "type": { "type": "string", - "description": "Name of the rate limit policy." + "description": "The applicability impact of the workflow configuration:\n- global: used for global tasks, that are not associated to a target language \n- sourceLanguage: changes affect only the task associated to the source language specified in `sourceLanguage` field. For using this type, must include the `sourceLanguage` field.\n- targetLanguage: changes affect only the task associated to the target language specified in `targetLanguage` field. For using this type, must include the `targetLanguage` field.\n- languageDirection: changes affect only the task associated to the language direction specified in `languageDirection` field. For using this type, must include the `languageDirection` field.", + "enum": [ + "global", + "sourceLanguage", + "targetLanguage", + "languageDirection" + ] }, - "description": { - "type": "string", - "description": "Describes which endpoints are affected by this limit, and for which time frame." + "sourceLanguage": { + "$ref": "#/components/schemas/source-language-request" }, - "limit": { - "type": "integer", - "description": "The limit in effect for the endpoint and time frame." + "targetLanguage": { + "$ref": "#/components/schemas/target-language-request" }, - "remainingQuota": { - "type": "integer", - "description": "The remaining quota in effect for the endpoint and time frame." + "languageDirection": { + "$ref": "#/components/schemas/language-direction-item" } }, "required": [ - "policyName", - "description", - "limit", - "remainingQuota" + "type" ] }, - "resource-folder-request": { - "title": "Resource Folder Request", + "target-file": { + "title": "Target File", "type": "object", - "description": "Resource folder.", + "description": "Target File.", "properties": { "id": { - "type": "string", - "description": "The folder identifier." + "type": "string" }, "name": { "type": "string", - "description": "The name of the folder." + "description": "
default
The target file name.
", + "x-default-field": true + }, + "languageDirection": { + "$ref": "#/components/schemas/language-direction", + "description": "
default
A basic language direction.
", + "x-default-field": true + }, + "sourceFile": { + "$ref": "#/components/schemas/source-file" + }, + "latestVersion": { + "$ref": "#/components/schemas/target-file-latest-version" + }, + "analysisStatistics": { + "$ref": "#/components/schemas/analysis-statistics" + }, + "status": { + "type": "string", + "description": "Shows if the file is still being processed (inProgress) or if it has been fully processed (finished) by the workflow. A target file is automatically marked as finished by the workflow engine, once there are no more tasks to be performed on it.", + "enum": [ + "inProgress", + "finished", + "canceled" + ], + "nullable": true } }, "required": [ "id" ] }, - "remove-projects-from-group-request": { - "title": "Remove Projects From Group Request", + "target-file-rename-request": { + "title": "Target File Rename Request", "type": "object", - "description": "Input for removing projects from group.", "properties": { - "projects": { - "type": "array", - "description": "The projects to be removed from group.", - "items": { - "$ref": "#/components/schemas/project-group-project-request" - } + "name": { + "type": "string", + "description": "The name of the target file.\\\nThe name should not contain the extension.\\\nUnsupported characters in the name: `<`, `>`, `:`, `\"`, `/`, `\\`, `|`, `?`, `*`.", + "minLength": 1 } }, "required": [ - "projects" + "name" ] }, - "schedule-template": { - "title": "Schedule Template", - "x-stoplight": { - "id": "c2a2ilce5ag48" - }, + "target-files-update-request": { + "title": "Target Files Update Request", "type": "object", - "description": "Schedule Template resource", "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string", - "description": "
default
Schedule Template name.
", - "x-default-field": true - }, - "description": { - "type": "string", - "description": "Schedule Template description." - }, - "location": { - "$ref": "#/components/schemas/folder-v2" - }, - "configurations": { + "files": { "type": "array", - "x-stoplight": { - "id": "w3yw55a536y3m" - }, "items": { - "$ref": "#/components/schemas/schedule-template-configuration", - "x-stoplight": { - "id": "z1pcd596vxyhe" - } - } - }, - "projectScheduleConfiguration": { - "$ref": "#/components/schemas/schedule-template-project-configuration", - "x-stoplight": { - "id": "jh0as6p6odfm0" + "$ref": "#/components/schemas/target-file-update-request" } } }, "required": [ - "id" + "files" ] }, - "schedule-template-configuration": { - "title": "Schedule Template Configuration", - "x-stoplight": { - "id": "p8wulrz2rytzj" - }, + "target-file-update-request": { + "title": "Target File Update Request", "type": "object", - "description": "Schedule Template Configuration resource", "properties": { - "taskTypeId": { + "id": { "type": "string", - "x-stoplight": { - "id": "ussbf9yycjf0h" - }, - "description": "The identifier of the human task type. " + "description": "The target file identifier.", + "minLength": 1 }, - "taskTypeName": { + "name": { "type": "string", - "x-stoplight": { - "id": "lny75nk7b0g3j" - }, - "description": "The name of the task type." - }, - "schedules": { - "x-stoplight": { - "id": "iu34k91wl2eql" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/schedule-template-configuration-schedules", - "x-stoplight": { - "id": "j29hssjf8a1nu" - } - } + "description": "The target file name.\\\nThe name should not contain the extension.\\\nUnsupported characters in the name: `<`, `>`, `:`, `\"`, `/`, `\\`, `|`, `?`, `*`.", + "minLength": 1 } }, "required": [ - "taskTypeId" + "id", + "name" ] }, - "schedule-template-project-configuration": { - "title": "Schedule Template Project Configuration", - "x-stoplight": { - "id": "ezrw8kwy2cc2x" - }, + "target-file-version": { + "title": "Target File Version", "type": "object", - "description": "Schedule Template Project Configuration resource", + "description": "Target File Version.", "properties": { - "duration": { - "type": "integer", - "x-stoplight": { - "id": "ml3qutq4qy3km" - }, - "description": "
default
Expressed in minutes.
", - "default": 0, - "minimum": 0 + "id": { + "type": "string", + "description": "The target file version identifier." }, - "reminder": { - "x-stoplight": { - "id": "3z5tzoznv1gci" - }, - "description": "
default
Expressed in minutes.
", + "type": { + "type": "string", "enum": [ - 15, - 30, - 60, - 120, - 480, - 1440, - 2880 - ] + "native", + "bcm" + ], + "description": "
default
The version type.
", + "nullable": true, + "x-default-field": true + }, + "name": { + "type": "string", + "description": "
default
The file version name. This is a synthetic value, typically constructed from the version number and the originating task name.
", + "x-default-field": true + }, + "version": { + "type": "integer", + "description": "A numeric value, incremented for each new version." + }, + "originatingTaskId": { + "type": "string", + "x-stoplight": { + "id": "yxst0hpphv0tq" + }, + "description": "The identifier of the task that generated the file." } - } + }, + "required": [ + "id", + "version" + ] }, - "schedule-template-configuration-request": { - "title": "Schedule Template Configuration Request", + "target-file-latest-version": { + "title": "Target File Latest Version", "x-stoplight": { - "id": "pzjg39ikgktrd" + "id": "0zlvlegfodgta" }, "type": "object", - "description": "Schedule Template Configuration resource", + "description": "Target File Latest Version.", "properties": { - "taskTypeId": { + "id": { "type": "string", - "description": "The identifier of the human task type. " + "description": "The target file version identifier." }, - "schedules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/schedule-template-configuration-schedules" - } + "type": { + "type": "string", + "enum": [ + "native", + "bcm" + ], + "description": "
default
The version type.
", + "nullable": true, + "x-default-field": true + }, + "version": { + "type": "integer", + "description": "A numeric value, incremented for each new version." } }, "required": [ - "taskTypeId" + "id", + "version" ] }, - "schedule-template-configuration-schedules": { - "title": "Schedule Template Configuration Schedules", - "x-stoplight": { - "id": "9kw1yuhfb39q1" + "target-language-request": { + "title": "Target Language Request", + "type": "object", + "properties": { + "languageCode": { + "type": "string", + "description": "The language code." + } }, + "required": [ + "languageCode" + ], + "description": "" + }, + "termbase-template": { + "title": "Termbase Template", "type": "object", - "description": "The Configuration Schedules resource.", + "description": "The termbase template.", "properties": { - "scope": { + "id": { "type": "string", - "x-stoplight": { - "id": "gn25uzdk9mu85" - }, - "description": "The scope of this configuration schedule. \\\r\nglobal -> schedule of the task \\\r\nsourceLanguage -> schedule of the specific task when the sourceLanguage matches this object's sourceLanguage\\\r\nlanguageDirection -> schedule of the specific task when the languageDirection matches this object's languageDirection", - "enum": [ - "global", - "sourceLanguage", - "languageDirection" - ] + "description": "The identifier of the termbase template." }, - "duration": { - "type": "integer", - "x-stoplight": { - "id": "r20a6jq7s4a99" - }, - "description": "Expressed in minutes.", - "minimum": 0 + "name": { + "type": "string", + "description": "
default
The name of the termbase template.
", + "x-default-field": true }, - "reminder": { - "x-stoplight": { - "id": "wa77577h9gchk" - }, - "description": "Expressed in minutes.\r\n\r\n", - "enum": [ - 15, - 30, - 60, - 120, - 480, - 1440, - 2880 - ] + "description": { + "type": "string", + "description": "The description of the termbase template.", + "nullable": true }, - "sourceLanguage": { + "copyright": { "type": "string", - "x-stoplight": { - "id": "x9sswos4516kw" - }, - "example": " \"en-US\", de-DE\"" + "description": "The copyright of the termbase template.", + "nullable": true }, - "targetLanguage": { + "location": { + "$ref": "#/components/schemas/folder-v2", + "description": "
default
The resource folder.
", + "x-default-field": true + }, + "createdAt": { "type": "string", - "x-stoplight": { - "id": "kptfl33vpqdt7" - }, - "example": " \"en-US\", de-DE\"" + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the termbase template was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", + "format": "date-time" + }, + "lastModifiedAt": { + "type": "string", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the termbase template was modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", + "format": "date-time" + }, + "type": { + "type": "string", + "description": "The type of the termbase template.", + "enum": [ + "system", + "userDefined" + ] + }, + "languages": { + "type": "array", + "description": "The languages of the termbase template.", + "items": { + "$ref": "#/components/schemas/language" + } + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-field" + } } }, "required": [ - "scope" + "id", + "type" ] }, - "schedule-template-update-request": { - "title": "Schedule Template Update Request", - "x-stoplight": { - "id": "eurbufhjxy71a" - }, + "termbase-template-update-request": { + "title": "Termbase Template Update Request", "type": "object", - "description": "Schedule Template update request model", + "description": "The termbase template update request.", "properties": { "name": { "type": "string", - "description": "
Schedule Template name.
", - "maxLength": 50 + "description": "The name of the Termbase template.", + "maxLength": 50, + "minLength": 1 }, "description": { "type": "string", - "description": "Schedule Template description.", - "maxLength": 1000 + "description": "The description of the Termbase template.", + "minLength": 0, + "maxLength": 200, + "nullable": true }, - "configurations": { + "copyright": { + "type": "string", + "description": "The copyright of the Termbase template.", + "minLength": 0, + "maxLength": 50, + "nullable": true + }, + "languages": { "type": "array", - "x-stoplight": { - "id": "nzqkfrvaq8mck" - }, + "description": "The languages of the termbase template.", "items": { - "$ref": "#/components/schemas/schedule-template-configuration-request", - "x-stoplight": { - "id": "kw88kaez7l361" - } + "$ref": "#/components/schemas/language-request" } }, - "projectScheduleConfiguration": { - "$ref": "#/components/schemas/schedule-template-project-configuration", - "x-stoplight": { - "id": "glzz39c8n1mpo" + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-field-update-request" } } } }, - "schedule-template-create-request": { - "title": "Schedule Template Create Request", - "x-stoplight": { - "id": "nzunuxlururt7" - }, + "termbase-template-create-request": { + "title": "Termbase Template Create Request", "type": "object", - "description": "Schedule Template create request model", + "description": "The termbase template create request.", "properties": { "name": { "type": "string", - "description": "
Schedule Template name.
", + "description": "The name of the termbase template.", + "minLength": 0, "maxLength": 50 }, "description": { "type": "string", - "description": "Schedule Template description.", - "maxLength": 1000 + "description": "The description of the termbase template.", + "minLength": 0, + "maxLength": 200, + "nullable": true + }, + "copyright": { + "type": "string", + "description": "The copyright of the termbase template.", + "minLength": 0, + "maxLength": 50, + "nullable": true }, "location": { "type": "string", - "x-stoplight": { - "id": "j38jg0ywij0e6" - }, - "description": "The folder identifier where the schedule template should be created. " + "description": "The folder identifier where the termbase template should be created. If not mentioned, it will be created in the Root folder. If the user does not have access in Root, the request will fail with forbidden error." }, - "configurations": { + "languages": { "type": "array", - "x-stoplight": { - "id": "eufab0pne7lzd" - }, + "description": "The languages of the termbase template.", "items": { - "$ref": "#/components/schemas/schedule-template-configuration-request", - "x-stoplight": { - "id": "oxk22epaz3rbi" - } + "$ref": "#/components/schemas/language-request" } }, - "projectScheduleConfiguration": { - "$ref": "#/components/schemas/schedule-template-project-configuration", - "x-stoplight": { - "id": "rqi0t3ue6dm3m" + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-field-create-request" } } }, @@ -24203,3943 +27575,4195 @@ "name" ] }, - "simple-language-direction": { - "title": "Simple Language Direction", + "termbase-structure": { + "title": "Termbase Structure", "type": "object", - "description": "A basic language direction.", + "description": "The termbase structure.", "properties": { - "id": { - "type": "string", - "description": "The language direction identifier." - }, - "sourceLanguage": { - "$ref": "#/components/schemas/language", - "description": "
default
The language object.
", + "languages": { + "type": "array", + "description": "
default
The languages of the termbase.
", + "items": { + "$ref": "#/components/schemas/language" + }, "x-default-field": true }, - "targetLanguage": { - "$ref": "#/components/schemas/language", - "description": "
default
The language object.
", + "fields": { + "type": "array", + "description": "
default
The termbase fields. (Not available for List Termbases endpoint).
", + "items": { + "$ref": "#/components/schemas/termbase-field" + }, "x-default-field": true } } }, - "source-file": { - "title": "Source File", + "termbase-structure-create-request": { + "title": "Termbase Structure Create Request", "type": "object", - "description": "Source File.", + "description": "The termbase structure create request.", "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string", - "description": "
default
The file name.
", - "x-default-field": true - }, - "role": { - "$ref": "#/components/schemas/file-role", - "description": "
default
The file role.
", - "x-default-field": true - }, - "language": { - "$ref": "#/components/schemas/language" - }, - "versions": { + "languages": { "type": "array", - "description": "The source file versions. (Not available for List endpoints).", + "description": "The languages of the termbase. If not supplied, the termbase will be created using the languages from the specified template. Otherwise it will override the languages from the template.", "items": { - "$ref": "#/components/schemas/source-file-version" + "$ref": "#/components/schemas/language-request" } }, - "targetLanguages": { + "fields": { "type": "array", + "description": "Describes the field structure. If not supplied, the termbase will be created using the fields from the specified template. Otherwise it will override the fields from the template.", "items": { - "$ref": "#/components/schemas/language" + "$ref": "#/components/schemas/termbase-field-create-request" + } + } + } + }, + "termbase-structure-update-request": { + "title": "Termbase Structure Update Request", + "type": "object", + "description": "The termbase structure update request.", + "properties": { + "languages": { + "type": "array", + "description": "The languages of the termbase. If not supplied, the termbase will be updated using the languages from the specified template. Otherwise it will override the languages from the template.", + "items": { + "$ref": "#/components/schemas/language-request" } }, - "path": { + "fields": { "type": "array", + "description": "Describes the field structure. If not supplied, the termbase will be updated using the fields from the specified template. Otherwise it will override the fields from the template.", "items": { - "type": "string" + "$ref": "#/components/schemas/termbase-field-update-request" } } - }, - "required": [ - "id" - ] + } }, - "source-file-request": { + "termbase-field": { + "title": "Termbase Field", "type": "object", - "title": "Source File Request", - "description": "Source file properties sent as a JSON inside a text part.", + "description": "The termbase field.", "required": [ - "name", - "role", - "type", - "language" + "id" ], "properties": { + "id": { + "type": "string", + "description": "The identifier of the termbase field." + }, "name": { "type": "string", - "description": "The name of the source file.\n\n\nThe character limit is calculated together with the `path` length.", - "minLength": 1, - "maxLength": 255 + "description": "
default
The name of the termbase field.
", + "x-default-field": true }, - "role": { + "description": { "type": "string", - "enum": [ - "translatable", - "reference", - "unknown" - ], - "description": "The role of the source file. When set to unknown or translatable, the system will try to detect the file type." + "description": "The description of the termbase field", + "nullable": true }, "type": { "type": "string", + "description": "The type of the termbase field - system or userDefined.", "enum": [ - "native", - "bcm", - "sdlxliff" + "system", + "userDefined" + ] + }, + "level": { + "type": "string", + "enum": [ + "entry", + "language", + "term" ], - "description": "The type of the file." + "description": "
default
The level of which this field applies.
", + "x-default-field": true }, - "language": { - "$ref": "#/components/schemas/language-request", - "description": "The language of the file in code 5 (ex. en-US)" + "dataType": { + "type": "string", + "enum": [ + "text", + "double", + "date", + "picklist", + "boolean" + ], + "description": "
default
The data type of the field.
", + "x-default-field": true }, - "targetLanguages": { + "pickListValues": { "type": "array", - "description": "A list of target languages in code 5 (ex. en-US)", + "uniqueItems": false, + "description": "The pick list options. Only if dataType is \"picklist\".", "items": { - "$ref": "#/components/schemas/language-request" + "type": "string" } }, - "path": { - "type": "array", - "description": "Path represents the hierarchy of the source file inside the zip. For example `/ZipWithFolders/Finance/2021/Finance_2021_dummy_EN.txt` would be sent as: \n\n```json \n\"path\": [ \n \"ZipWithFolders\", \n \"Finance\", \n \"2021\", \n \"Finance_2021_dummy_EN.txt\" \n]\n```\n\nThe character limit is calculated together with the `name` length.", - "items": { - "type": "string", - "minLength": 0, - "maxLength": 200 - } + "allowCustomValues": { + "type": "boolean", + "description": "Specifies if the field allows custom values." + }, + "allowMultiple": { + "type": "boolean", + "description": "Specifies if the field can be used multiple times." + }, + "isMandatory": { + "type": "boolean", + "description": "Specifies if the field is mandatory." } } }, - "source-file-rename-request": { - "title": "Source File Rename Request", + "termbase-field-update-request": { + "title": "Termbase Field Update Request", "type": "object", + "description": "The termbase field update request.\n\nIf dataType is `picklist` and pickListValues array is empty `allowCustomValues` must be true.", "properties": { + "id": { + "type": "string", + "description": "The identifier of the termbase field to updated. If missing will add a new field." + }, "name": { "type": "string", - "description": "The name of the source file.\\\nThe name should not contain the extension.\\\nUnsupported characters in the name: `<`, `>`, `:`, `\"`, `/`, `\\`, `|`, `?`, `*`.", - "minLength": 1 + "description": "The name of the termbase field. Must be unique.", + "minLength": 1, + "maxLength": 50 }, - "updateTargetFilesName": { - "type": "boolean", - "default": false, - "description": "Option for renaming also the target files." - } - }, - "required": [ - "name" - ] - }, - "source-files-update-request": { - "title": "Source Files Update Request", - "type": "object", - "properties": { - "files": { + "description": { + "type": "string", + "description": "The description of the termbase field.", + "minLength": 1, + "maxLength": 200, + "nullable": true + }, + "level": { + "type": "string", + "enum": [ + "entry", + "language", + "term" + ], + "description": "The level of which this field applies." + }, + "dataType": { + "type": "string", + "enum": [ + "text", + "double", + "date", + "picklist", + "boolean" + ], + "description": "The data type of the field." + }, + "pickListValues": { "type": "array", + "uniqueItems": true, + "description": "The pick list options. Only if dataType is \"picklist\".", "items": { - "$ref": "#/components/schemas/source-file-update-request" + "type": "string", + "minLength": 1, + "maxLength": 1000 } - } - }, - "required": [ - "files" - ] - }, - "source-file-update-request": { - "title": "Source File Update Request", - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The source file identifier.", - "minLength": 1 }, - "name": { - "type": "string", - "description": "The source file name.\\\nThe name should not contain the extension.\\\nUnsupported characters in the name: `<`, `>`, `:`, `\"`, `/`, `\\`, `|`, `?`, `*`.", - "minLength": 1 + "allowCustomValues": { + "type": "boolean", + "description": "Specifies if the field allows custom values. Must be true if pickListValues is empty.", + "default": false }, - "updateTargetFilesName": { + "allowMultiple": { "type": "boolean", - "default": false, - "description": "Option for renaming the target files too." + "description": "Specifies if the field can be used multiple times.", + "default": true + }, + "isMandatory": { + "type": "boolean", + "description": "Specifies if the field is mandatory.", + "default": false } }, "required": [ - "id", - "name" + "name", + "level", + "dataType" ] }, - "source-file-attachment-request": { - "title": "Source File Attachment Request", - "type": "object", - "description": "", - "properties": { - "sourceFilesAttachment": { - "type": "array", - "description": "List of Attached Source File properties referencing previously uploaded file", - "items": { - "$ref": "#/components/schemas/source-file-attachment-request-item" - } - } - } - }, - "source-file-attachment-response": { - "title": "Source File Attachment Response", - "type": "object", - "description": "", - "properties": { - "sourceFiles": { - "type": "array", - "items": { - "$ref": "#/components/schemas/source-file" - } - } - } - }, - "source-file-attachment-request-item": { - "title": "Source File Attachment Request Item", + "termbase-field-create-request": { + "title": "Termbase Field Create Request", "type": "object", - "description": "Attached Source File properties referencing previously uploaded file", + "description": "The termbase field request.\n\nIf dataType is `picklist` and pickListValues array is empty `allowCustomValues` must be true.", "properties": { "name": { "type": "string", - "description": "The name of the source file.\n\nThe character limit is calculated together with the `path` length.", + "description": "The name of the termbase field. Must be unique.", + "minLength": 1, + "maxLength": 50 + }, + "description": { + "type": "string", + "description": "The description of the termbase field.", + "minLength": 1, "maxLength": 200, - "minLength": 1 + "nullable": true }, - "role": { + "level": { "type": "string", "enum": [ - "translatable", - "reference", - "unknown" + "entry", + "language", + "term" ], - "description": "The role of the source file. When set to unknown or translatable, the system will try to detect the file type." - }, - "fileUrl": { - "type": "string", - "description": "The identifier of the previously uploaded file." + "description": "The level of which this field applies." }, - "type": { + "dataType": { "type": "string", "enum": [ - "native", - "bcm", - "sdlxliff" + "text", + "double", + "date", + "picklist", + "boolean" ], - "description": "The type of the file." - }, - "language": { - "$ref": "#/components/schemas/source-language-request" - }, - "targetLanguages": { - "type": "array", - "description": "A list of target languages in code 5 (ex. en-US)", - "items": { - "$ref": "#/components/schemas/target-language-request" - } + "description": "The data type of the field." }, - "path": { + "pickListValues": { "type": "array", - "description": "Path represents the hierarchy of the source file inside the zip. For example `/ZipWithFolders/Finance/2021/Finance_2021_dummy_EN.txt` would be sent as: \n\n```json \n\"path\": [ \n \"ZipWithFolders\", \n \"Finance\", \n \"2021\", \n \"Finance_2021_dummy_EN.txt\" \n]\n```\n\nThe character limit is calculated together with the `name` length.", + "uniqueItems": true, + "description": "The pick list values. Only if dataType is \"picklist\". Values must be unique.", "items": { "type": "string", - "maxLength": 200, - "minLength": 0 + "minLength": 1, + "maxLength": 1000 } + }, + "allowCustomValues": { + "type": "boolean", + "description": "Specifies if the field allows custom values. Must be true if pickListValues is empty.", + "default": false + }, + "allowMultiple": { + "type": "boolean", + "description": "Specifies if the field can be used multiple times.", + "default": true + }, + "isMandatory": { + "type": "boolean", + "description": "Specifies if the field is mandatory.", + "default": false } }, "required": [ "name", - "role", - "fileUrl", - "type", - "language" + "level", + "dataType" ] }, - "source-file-properties-response": { - "title": "Source File Properties Response", + "termbase": { + "title": "Termbase", "type": "object", - "description": "", + "description": "The termbase.", "properties": { - "fileRole": { + "id": { "type": "string", - "description": "The file's role.", - "enum": [ - "translatable", - "reference" - ] + "description": "The identifier of the termbase." }, - "fileTypeSettingsId": { + "name": { "type": "string", - "description": "The file type settings identifier." - } - }, - "required": [ - "fileRole", - "fileTypeSettingsId" - ] - }, - "source-file-properties-update-request": { - "title": "Source File Properties Update Request", - "type": "object", - "description": "", - "properties": { - "fileRole": { + "description": "
default
The name of the termbase.
", + "x-default-field": true + }, + "description": { "type": "string", - "description": "The file role.", - "enum": [ - "translatable", - "reference" - ] + "description": "The description of the termbase.", + "nullable": true }, - "fileTypeSettingsId": { + "copyright": { "type": "string", - "description": "The file type settings identifier." - } - } - }, - "source-file-version-properties-create-request": { - "title": "Source File Version Properties Create Request", - "type": "object", - "description": "", - "properties": { - "type": { + "description": "The copyright of the termbase.", + "nullable": true + }, + "location": { + "$ref": "#/components/schemas/folder-v2", + "description": "
default
The resource folder.
", + "x-default-field": true + }, + "termbaseStructure": { + "$ref": "#/components/schemas/termbase-structure" + }, + "numberOfEntries": { + "type": "number", + "description": "The number of entries included in the termbase. (Not available for List Termbases endpoint)" + }, + "status": { "type": "string", - "description": "The version type.", "enum": [ - "bcm", - "native" - ] + "ready", + "processingContent", + "exportingContent", + "deletingContent" + ], + "description": "The status of the termbase. (Not available for List Termbases endpoint)" }, - "fileTypeSettingsId": { + "createdAt": { "type": "string", - "description": "The file type settings identifier." + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the termbase was created. (Not available for List Termbases endpoint)
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", + "format": "date-time" + }, + "lastModifiedAt": { + "type": "string", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the termbase was last updated. (Not available for List Termbases endpoint)
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", + "format": "date-time" } }, "required": [ - "type" + "id" ] }, - "source-file-version": { - "title": "Source File Version", + "termbase-create-request": { + "title": "Termbase Create Request", "type": "object", - "description": "Source File Version.", + "description": "Termbase create request.", "properties": { - "id": { + "name": { "type": "string", - "description": "The source file version identifier." + "description": "The name of the termbase.", + "minLength": 1, + "maxLength": 50 }, - "type": { + "description": { "type": "string", - "enum": [ - "native", - "bcm" - ], - "description": "
default
The version type.
", - "nullable": true, - "x-default-field": true + "description": "The description of the termbase.", + "minLength": 0, + "maxLength": 200, + "nullable": true }, - "name": { + "copyright": { "type": "string", - "description": "
default
The file version name. This is a synthetic value, typically constructed from the version number and the originating task name.
", - "x-default-field": true + "description": "The copyright of the termbase.", + "minLength": 0, + "maxLength": 50, + "nullable": true }, - "version": { - "type": "integer", - "description": "A numeric value, incremented for each new version." + "location": { + "type": "string", + "description": "The folder identifier where the termbase should be created. If not specified, it will be created in the Root folder. If the user does not have access in Root, the request will fail with forbidden error." }, - "originatingTaskId": { + "termbaseTemplateId": { "type": "string", - "x-stoplight": { - "id": "fsakhiag03gl9" - }, - "description": "The identifier of the task that generated the file." + "description": "The termbase template identifier." + }, + "termbaseStructure": { + "$ref": "#/components/schemas/termbase-structure-create-request" } }, "required": [ - "id", - "version" + "name" ] }, - "source-file-version-response": { - "title": "Source File Version Response", + "termbase-update-request": { + "title": "Termbase Update Request", "type": "object", - "description": "", + "description": "Termbase update request.", "properties": { - "id": { + "name": { "type": "string", - "description": "The source file version identifier." + "description": "The name of the termbase.", + "minLength": 1, + "maxLength": 50 }, - "type": { + "description": { "type": "string", - "description": "
default
The version type.
", - "enum": [ - "native", - "bcm" - ], - "x-default-field": true + "description": "The description of the termbase.", + "minLength": 0, + "maxLength": 200, + "nullable": true + }, + "copyright": { + "type": "string", + "description": "The copyright of the termbase.", + "minLength": 0, + "maxLength": 50, + "nullable": true + }, + "termbaseTemplateId": { + "type": "string", + "description": "The termbase template identifier." + }, + "termbaseStructure": { + "$ref": "#/components/schemas/termbase-structure-update-request" } - }, - "required": [ - "id" - ] + } }, - "source-language-request": { - "title": "Source Language Request", + "termbase-field-value-link": { + "title": "Termbase Field Value Link", "type": "object", + "description": "The field value link.", "properties": { - "languageCode": { + "type": { "type": "string", - "description": "The language code." + "enum": [ + "term", + "entry", + "external" + ], + "description": "The type of the link." + }, + "value": { + "type": "string", + "description": "The value of the link." } }, "required": [ - "languageCode" + "type", + "value" ] }, - "target-file-version-properties-create-request": { - "title": "Target File Version Properties Create Request", + "termbase-field-value-link-update-request": { + "title": "Termbase Field Value Link Update Request", "type": "object", - "description": "", + "description": "The field value link update request.", "properties": { "type": { "type": "string", - "description": "The version type.", "enum": [ - "bcm", - "native" - ] + "term", + "entry", + "external" + ], + "description": "The type of the link." + }, + "value": { + "type": "string", + "description": "The value of the link." } - }, - "required": [ - "type" - ] + } }, - "target-file-version-response": { - "title": "Target File Version Response", + "termbase-field-value-link-create-request": { + "title": "Termbase Field Value Link Create Request", "type": "object", - "description": "", + "description": "The field value link create request.", "properties": { - "id": { - "type": "string", - "description": "The target file version identifier." - }, "type": { "type": "string", - "description": "
default
The version type.
", "enum": [ - "native", - "bcm" + "term", + "entry", + "external" ], - "x-default-field": true + "description": "The type of link." + }, + "value": { + "type": "string", + "description": "The value of the link.", + "minLength": 1 } }, "required": [ - "id" + "type", + "value" ] }, - "task": { - "title": "Task", + "termbase-field-value": { + "title": "Termbase Field Value", "type": "object", - "description": "Task.", + "description": "The termbase field value.", "properties": { "id": { - "type": "string" - }, - "status": { "type": "string", - "description": "
default
The task status.
", - "enum": [ - "created", - "inProgress", - "completed", - "failed", - "skipped", - "canceled" - ], - "x-default-field": true, - "nullable": true - }, - "taskType": { - "$ref": "#/components/schemas/task-type" + "description": "The field value identifier." }, - "input": { - "$ref": "#/components/schemas/task-input" + "name": { + "type": "string", + "description": "The field value name." }, - "inputFiles": { - "type": "array", - "items": { - "$ref": "#/components/schemas/task-input-file" - } + "termbaseFieldId": { + "type": "string", + "description": "The termbase field identifier." }, - "owner": { - "$ref": "#/components/schemas/user" + "value": { + "type": "string", + "description": "The value of the field." }, - "assignees": { + "fieldValueLinks": { "type": "array", "items": { - "$ref": "#/components/schemas/task-assignee" + "$ref": "#/components/schemas/termbase-field-value-link" } }, - "dueBy": { - "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The task due date.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", - "nullable": true - }, "createdAt": { "type": "string", "format": "date-time", "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the task was created.
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\" ", + "description": "The date and time when the termbase field value was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", "nullable": true }, - "applicableOutcomes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/task-outcome" - } - }, - "outcome": { - "type": "string", - "description": "The outcome of the task type. It is retrieved only if the task is completed. It should match one of the legal outcomes in the task type." - }, - "comment": { - "type": "string", - "description": "The comment associated with this task at completion." - }, - "project": { - "$ref": "#/components/schemas/project" - }, - "failedTask": { - "$ref": "#/components/schemas/failed-task" - }, - "completedAt": { - "$ref": "#/components/schemas/date-time", - "description": "The completion timestamp of the task.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"" - } - }, - "required": [ - "id" - ] - }, - "task-error": { - "title": "Task Error", - "type": "object", - "description": "Task Error.", - "properties": { - "name": { - "type": "string", - "description": "The task error name." - }, - "code": { - "type": "string", - "description": "The task error code." - }, - "value": { - "type": "string", - "description": "The task error value." - } - } - }, - "task-assignee": { - "title": "Task Assignee", - "type": "object", - "description": "Task assignee. Based on the \"type\", the following properties can be retrieved: \"user\", \"group\" or \"vendorOrderTemplate\". For \"projectCreator\" and \"projectManager\" no other properties are available.", - "properties": { - "type": { - "type": "string", - "enum": [ - "user", - "group", - "vendorOrderTemplate", - "projectCreator" - ], - "description": "Type \"projectCreator\" - reserved for future use. Should be able to handle it and ignore it if received." - }, - "user": { - "$ref": "#/components/schemas/user", - "description": "
default
A user.
", - "x-default-field": true - }, - "group": { - "$ref": "#/components/schemas/group", - "description": "
default
A group of users.
", - "x-default-field": true + "createdBy": { + "$ref": "#/components/schemas/user" }, - "vendorOrderTemplate": { - "$ref": "#/components/schemas/vendor-order-template" + "lastModifiedAt": { + "type": "string", + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the termbase field value was last modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", + "nullable": true + }, + "lastModifiedBy": { + "$ref": "#/components/schemas/user" } }, "required": [ - "type" + "id", + "name", + "termbaseFieldId", + "value" ] }, - "task-assignee-request": { - "title": "Task Assignee Request", + "termbase-field-value-update-request": { + "title": "Termbase Field Value Update request", "type": "object", + "description": "The termbase field value update request.", "properties": { "id": { "type": "string", - "description": "The identifier of the assignee that should correspond to a resource based on the “type” field.
Only required for the `user`, `group`, and `vendorOrderTemplate` types." + "description": "The field value identifier. Either the `id` or the `name` is mandatory to be provided." }, - "type": { + "name": { "type": "string", - "enum": [ - "user", - "group", - "vendorOrderTemplate", - "projectManager", - "projectCreator" - ], - "description": "The assignee type." - } - }, - "required": [ - "type" - ] - }, - "task-assign-request": { - "title": "Task Assign Request", - "type": "object", - "description": "Properties of task assignment.\r\n
Total assignee count is limited. See more at [Maximum number of task assignees](https://docs.rws.com/791595/1137562/trados-enterprise---accelerate/maximum-number-of-task-assignees).", - "properties": { - "assignees": { + "description": "The field value name. Either the `id` or the `name` is mandatory to be provided." + }, + "termbaseFieldId": { + "type": "string", + "description": "The termbase field value identifier. Must match with the fieldId from the termbase." + }, + "value": { + "type": "string", + "description": "The value of the field.", + "minLength": 1, + "maxLength": 4096 + }, + "fieldValueLinks": { "type": "array", "items": { - "$ref": "#/components/schemas/task-assignee-request" + "$ref": "#/components/schemas/termbase-field-value-link-update-request" } } - } + }, + "required": [ + "termbaseFieldId", + "value" + ] }, - "task-complete-request": { - "title": "Task Complete Request", + "termbase-field-value-create-request": { + "title": "Termbase Field Value Create Request", "type": "object", - "description": "Properties of task completion.", + "description": "The termbase field value create request.", "properties": { - "outcome": { + "termbaseFieldId": { "type": "string", - "description": "The outcome should be one of the valid applicable outcomes of the task. If not specified, the default one will be taken." + "description": "The termbase field identifier. It must match the `fieldId` from the termbase." }, - "comment": { + "value": { "type": "string", - "description": "The comment associated with this task completion.", - "maxLength": 1000 + "description": "The value of the field.", + "minLength": 1, + "maxLength": 4096 + }, + "fieldValueLinks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-field-value-link-create-request" + } } }, "required": [ - "outcome" + "termbaseFieldId", + "value" ] }, - "task-input": { - "title": "Task Input", + "termbase-entry-term": { + "title": "Termbase Entry Term", "type": "object", - "description": "Task input. Based on the \"type\", the following fields can be retrieved: \"project\", \"sourceFile\", \"targetFile\".", + "description": "The termbase entry term.", + "required": [ + "id", + "text" + ], "properties": { - "type": { + "id": { "type": "string", - "description": "The input type.", - "enum": [ - "project", - "sourceFile", - "targetFile", - "languageDirection" - ] + "description": "The term identifier." }, - "project": { - "$ref": "#/components/schemas/project", - "description": "
default
Project resource
", - "x-default-field": true + "text": { + "type": "string", + "description": "The term text." }, - "sourceFile": { - "$ref": "#/components/schemas/source-file", - "description": "
default
Source file.
", - "x-default-field": true + "termbaseFieldValues": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-field-value" + } }, - "targetFile": { - "$ref": "#/components/schemas/target-file", - "description": "
default
Target file.
", - "x-default-field": true + "createdAt": { + "type": "string", + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the term entry was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", + "nullable": true }, - "languageDirection": { - "$ref": "#/components/schemas/language-direction", - "description": "
default
A language direction.
", - "x-default-field": true + "createdBy": { + "$ref": "#/components/schemas/user" }, - "vendorOrder": { - "$ref": "#/components/schemas/vendor-order", - "description": "
default
A vendor order resource.
", - "x-default-field": true - } - }, - "required": [ - "type" - ] - }, - "task-input-file": { - "title": "Task Input File", - "type": "object", - "description": "Task input file. Based on the \"type\", only the \"sourceFile\" or \"targetFile\" can be retrieved.", - "properties": { - "type": { + "lastModifiedAt": { "type": "string", - "enum": [ - "sourceFile", - "targetFile" - ], - "nullable": true, - "description": "
default
", - "x-default-field": true + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the term entry was last modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", + "nullable": true }, - "sourceFile": { - "$ref": "#/components/schemas/source-file", - "description": "
default
Source file.
", - "x-default-field": true + "lastModifiedBy": { + "$ref": "#/components/schemas/user" }, - "targetFile": { - "$ref": "#/components/schemas/target-file", - "description": "
default
Target file.
", - "x-default-field": true + "systemStatus": { + "$ref": "#/components/schemas/termbase-entry-term-system-status", + "x-stoplight": { + "id": "xx4xvu4isws0c" + } } } }, - "task-type": { - "title": "Task Type", + "termbase-entry-term-update-request": { + "title": "Termbase Entry Term Update Request", "type": "object", - "description": "Task type.", + "description": "The termbase entry term update request.", + "required": [ + "text" + ], "properties": { "id": { - "type": "string" - }, - "key": { "type": "string", - "description": "
default
Identifier key for the task.
", - "x-default-field": true + "description": "The term identifier that will be updated. If not supplied, a new term will be created." }, - "name": { + "text": { "type": "string", - "description": "
default
", - "x-default-field": true + "description": "The term text.", + "minLength": 1, + "maxLength": 1024 }, - "apiInternalId": { - "type": "string", + "systemStatus": { + "$ref": "#/components/schemas/termbase-entry-term-system-status-request", "x-stoplight": { - "id": "tavwkrljagcmc" - }, - "description": "
default
Unique identifier of custom task types. Null for default task types." - }, - "description": { - "type": "string" - }, - "automatic": { - "type": "boolean", - "description": "This indicates whether the task is automatic or human.", - "nullable": true + "id": "lpm4ttzn58ku0" + } }, - "scope": { + "termbaseFieldValues": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-field-value-update-request" + } + } + } + }, + "termbase-term-create-request": { + "title": "Termbase Entry Term Create Request", + "type": "object", + "description": "The termbase entry term request.", + "required": [ + "text" + ], + "properties": { + "text": { "type": "string", - "description": "The resource type scope for the task.", - "enum": [ - "file", - "targetLanguage", - "batch", - "vendorOrder", - "task" - ], - "nullable": true + "description": "The term text.", + "maxLength": 1024, + "minLength": 1 }, - "outcomes": { + "systemStatus": { + "$ref": "#/components/schemas/termbase-entry-term-system-status-request", + "x-stoplight": { + "id": "cvo2q7bu0gkix" + } + }, + "termbaseFieldValues": { "type": "array", "items": { - "$ref": "#/components/schemas/task-type-outcome" + "$ref": "#/components/schemas/termbase-field-value-create-request" } - }, - "location": { - "$ref": "#/components/schemas/folder-v2" } - }, - "required": [ - "id" - ] + } }, - "task-outcome": { - "title": "Task Outcome", + "termbase-entry-language": { + "title": "Termbase Entry Language", "type": "object", - "description": "Outcome a task can be completed with. List will be populated after the task is accepted.", + "description": "The termbase entry language.", "properties": { - "name": { + "id": { "type": "string", - "description": "
default
Outcome to be used with complete endpoint.", - "x-default-field": true + "description": "The termbase language identifier." }, - "description": { - "type": "string", - "description": "A human-friendly form of the outcome." + "language": { + "$ref": "#/components/schemas/language" }, - "default": { - "type": "boolean", - "description": "
default
Specifies if the outcome is the default one for the task.", - "x-default-field": true - } - } - }, - "task-type-outcome": { - "title": "Task Type Outcome", - "type": "object", - "description": "The task type outcome.", - "properties": { - "name": { + "terms": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-entry-term" + } + }, + "termbaseFieldValues": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-field-value" + } + }, + "createdAt": { "type": "string", - "description": "
default
", - "x-default-field": true + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the language entry was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", + "nullable": true }, - "description": { - "type": "string" + "createdBy": { + "$ref": "#/components/schemas/user" }, - "default": { - "type": "boolean", - "nullable": true, - "description": "
default
", - "x-default-field": true + "lastModifiedAt": { + "type": "string", + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the language entry was last modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", + "nullable": true + }, + "lastModifedBy": { + "$ref": "#/components/schemas/user" } - } + }, + "required": [ + "id", + "language" + ] }, - "task-configuration-scope": { - "title": "Workflow Task Configuration Scope", + "termbase-entry-language-update-request": { + "title": "Termbase Entry Language Update Request", "type": "object", + "description": "The termbase entry language update request.", "properties": { - "type": { + "id": { "type": "string", - "description": "The applicability impact of the workflow configuration:\n- global: used for global tasks which are not associated to a target language\n- sourceLanguage: changes affect only the task associated to the source language specified in **sourceLanguage** field\n- targetLanguage: changes affect only the task associated to the target language specified in **targetLanguage** field\n- languageDirection: changes affect only the task associated to the language direction specified in **languageDirection** field", - "enum": [ - "global", - "sourceLanguage", - "targetLanguage", - "languageDirection" - ] + "description": "The termbase language identifier." }, - "sourceLanguage": { - "$ref": "#/components/schemas/language" + "language": { + "$ref": "#/components/schemas/language-request" }, - "targetLanguage": { - "$ref": "#/components/schemas/language" + "terms": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-entry-term-update-request" + } }, - "languageDirection": { - "$ref": "#/components/schemas/language-direction-item" + "termbaseFieldValues": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-field-value-update-request" + } } }, "required": [ - "type" + "language", + "terms" ] }, - "task-configuration-scope-request": { - "title": "Workflow Task Configuration Scope Request", + "termbase-entry-language-create-request": { + "title": "Termbase Entry Language Create Request", "type": "object", - "description": "", + "description": "The termbase entry language create request.", "properties": { - "type": { - "type": "string", - "description": "The applicability impact of the workflow configuration:\n- global: used for global tasks, that are not associated to a target language \n- sourceLanguage: changes affect only the task associated to the source language specified in `sourceLanguage` field. For using this type, must include the `sourceLanguage` field.\n- targetLanguage: changes affect only the task associated to the target language specified in `targetLanguage` field. For using this type, must include the `targetLanguage` field.\n- languageDirection: changes affect only the task associated to the language direction specified in `languageDirection` field. For using this type, must include the `languageDirection` field.", - "enum": [ - "global", - "sourceLanguage", - "targetLanguage", - "languageDirection" - ] - }, - "sourceLanguage": { - "$ref": "#/components/schemas/source-language-request" + "language": { + "$ref": "#/components/schemas/language-request" }, - "targetLanguage": { - "$ref": "#/components/schemas/target-language-request" + "terms": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-term-create-request" + } }, - "languageDirection": { - "$ref": "#/components/schemas/language-direction-item" + "termbaseFieldValues": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-field-value-create-request" + } } }, "required": [ - "type" + "language", + "terms" ] }, - "target-file": { - "title": "Target File", + "termbase-entry": { + "title": "Termbase Entry", "type": "object", - "description": "Target File.", + "description": "The termbase entry.", "properties": { "id": { - "type": "string" + "type": "string", + "description": "The termbase entry identifier." }, - "name": { + "humanReadableId": { "type": "string", - "description": "
default
The target file name.
", - "x-default-field": true + "description": "An identifier that can be provided externally, or generated automatically by the Trados Cloud Platform, used for creating cross-references. You can use it to set its value to be correlated to your system. The format of the generated value is not guaranteed." }, - "languageDirection": { - "$ref": "#/components/schemas/language-direction", - "description": "
default
A basic language direction.
", - "x-default-field": true + "languages": { + "description": "The termbase entry languages.", + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-entry-language" + } }, - "sourceFile": { - "$ref": "#/components/schemas/source-file" + "termbaseFieldValues": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-field-value" + } }, - "latestVersion": { - "$ref": "#/components/schemas/target-file-latest-version" + "createdAt": { + "type": "string", + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the termbase entry was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", + "nullable": true }, - "analysisStatistics": { - "$ref": "#/components/schemas/analysis-statistics" + "createdBy": { + "$ref": "#/components/schemas/user" }, - "status": { + "lastModifiedAt": { "type": "string", - "description": "Shows if the file is still being processed (inProgress) or if it has been fully processed (finished) by the workflow. A target file is automatically marked as finished by the workflow engine, once there are no more tasks to be performed on it.", - "enum": [ - "inProgress", - "finished", - "canceled" - ], + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The date and time when the termbase entry was last modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", "nullable": true + }, + "lastModifiedBy": { + "$ref": "#/components/schemas/user" } }, "required": [ - "id" + "id", + "languages" ] }, - "target-file-rename-request": { - "title": "Target File Rename Request", + "termbase-entry-update-request": { + "title": "Termbase Entry Update Request", "type": "object", + "description": "The termbase entry update request.", "properties": { - "name": { + "humanReadableId": { "type": "string", - "description": "The name of the target file.\\\nThe name should not contain the extension.\\\nUnsupported characters in the name: `<`, `>`, `:`, `\"`, `/`, `\\`, `|`, `?`, `*`.", - "minLength": 1 + "description": "An identifier that can be provided externally, or generated automatically by the Trados Cloud Platform, used for creating cross-references. You can use it to set its value to be correlated to your system. The format of the generated value is not guaranteed." + }, + "languages": { + "description": "The termbase entry languages.", + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-entry-language-update-request" + } + }, + "termbaseFieldValues": { + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-field-value-update-request" + } } }, "required": [ - "name" + "languages" ] }, - "target-files-update-request": { - "title": "Target Files Update Request", + "termbase-entry-create-request": { + "title": "Termbase Entry Create Request", "type": "object", + "description": "The termbase entry create request.", "properties": { - "files": { + "humanReadableId": { + "type": "string", + "description": "An identifier that can be provided externally, or generated automatically by the Trados Cloud Platform, used for creating cross-references. You can use it to set its value to be correlated to your system.\nThe format of the generated value is not guaranteed." + }, + "languages": { + "description": "The termbase entry languages.", + "type": "array", + "items": { + "$ref": "#/components/schemas/termbase-entry-language-create-request" + } + }, + "termbaseFieldValues": { "type": "array", "items": { - "$ref": "#/components/schemas/target-file-update-request" + "$ref": "#/components/schemas/termbase-field-value-create-request" } } }, "required": [ - "files" + "languages" ] }, - "target-file-update-request": { - "title": "Target File Update Request", + "termbase-entry-term-system-status": { + "title": "Termbase Entry Term System Status", + "type": "string", + "nullable": true, + "x-stoplight": { + "id": "k477x1xb11mvw" + }, + "enum": [ + "preferred", + "draft", + "inReview", + "deprecated", + "recommended", + "admitted", + "forbidden", + "rejected", + "superseded" + ] + }, + "termbase-entry-term-system-status-request": { + "title": "Termbase Entry Term System Status", + "type": "string", + "x-stoplight": { + "id": "k477x1xb11mvw" + }, + "enum": [ + "preferred", + "draft", + "inReview", + "deprecated", + "recommended", + "admitted", + "forbidden", + "rejected", + "superseded" + ] + }, + "termbase-export-properties-request": { + "title": "Termbase Export Properties Request", "type": "object", "properties": { - "id": { - "type": "string", - "description": "The target file identifier.", - "minLength": 1 - }, - "name": { - "type": "string", - "description": "The target file name.\\\nThe name should not contain the extension.\\\nUnsupported characters in the name: `<`, `>`, `:`, `\"`, `/`, `\\`, `|`, `?`, `*`.", - "minLength": 1 + "downloadCompressed": { + "type": "boolean", + "description": "Download compressed ( zipped ).", + "default": false } - }, - "required": [ - "id", - "name" - ] + } }, - "target-file-version": { - "title": "Target File Version", + "termbase-export-response": { + "title": "Termbase Export Response", "type": "object", - "description": "Target File Version.", "properties": { "id": { "type": "string", - "description": "The target file version identifier." + "description": "The termbase export identifier." }, - "type": { + "status": { "type": "string", + "description": "The status of the export operation.
\n`queued` - The export passed the structural validation and it's waiting to be processed.
\n`processing` - The export is in progress.
\n`done` - The export was successfully processed .
\n`canceled` - The export process was interrupted.
\n`error` - The export was unsuccessful due to an internal error.", "enum": [ - "native", - "bcm" - ], - "description": "
default
The version type.
", - "nullable": true, - "x-default-field": true + "queued", + "processing", + "done", + "cancelled", + "error" + ] }, - "name": { + "errorMessage": { "type": "string", - "description": "
default
The file version name. This is a synthetic value, typically constructed from the version number and the originating task name.
", - "x-default-field": true - }, - "version": { - "type": "integer", - "description": "A numeric value, incremented for each new version." + "description": "When status is 'error', contains the error message explaining what went wrong." }, - "originatingTaskId": { + "downloadUrl": { "type": "string", - "x-stoplight": { - "id": "yxst0hpphv0tq" - }, - "description": "The identifier of the task that generated the file." + "description": "The url where the file can be downloaded." } }, "required": [ "id", - "version" + "status" ] }, - "target-file-latest-version": { - "title": "Target File Latest Version", - "x-stoplight": { - "id": "0zlvlegfodgta" - }, + "termbase-term": { + "title": "Termbase Term Response", "type": "object", - "description": "Target File Latest Version.", + "description": "The termbase term.", "properties": { "id": { "type": "string", - "description": "The target file version identifier." + "description": "The term identifier." }, - "type": { + "entryId": { "type": "string", - "enum": [ - "native", - "bcm" - ], - "description": "
default
The version type.
", - "nullable": true, - "x-default-field": true + "description": "The entry identifier." }, - "version": { - "type": "integer", - "description": "A numeric value, incremented for each new version." + "text": { + "type": "string", + "description": "The term text." } }, "required": [ "id", - "version" + "entryId", + "text" ] }, - "target-language-request": { - "title": "Target Language Request", - "type": "object", - "properties": { - "languageCode": { - "type": "string", - "description": "The language code." - } - }, - "required": [ - "languageCode" - ], - "description": "" - }, - "termbase-template": { - "title": "Termbase Template", + "termbase-import-response": { + "title": "Termbase Import Response", "type": "object", - "description": "The termbase template.", "properties": { "id": { "type": "string", - "description": "The identifier of the termbase template." - }, - "name": { - "type": "string", - "description": "
default
The name of the termbase template.
", - "x-default-field": true - }, - "description": { - "type": "string", - "description": "The description of the termbase template.", - "nullable": true - }, - "copyright": { - "type": "string", - "description": "The copyright of the termbase template.", - "nullable": true - }, - "location": { - "$ref": "#/components/schemas/folder-v2", - "description": "
default
The resource folder.
", - "x-default-field": true - }, - "createdAt": { - "type": "string", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the termbase template was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "format": "date-time" - }, - "lastModifiedAt": { - "type": "string", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the termbase template was modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "format": "date-time" + "description": "The unique identifier of the import operation." }, - "type": { + "status": { "type": "string", - "description": "The type of the termbase template.", + "description": "The status of the import operation.
\n`queued` - The import passed the structural validation and it's waiting to be processed.
\n`processing` - The import is in progress.
\n`done` - The import was successfully processed and at least an entry changed its structure ( either inserted or modified )
\n`cancelled` - The import process was interrupted.
\n`failed` - The import was unsuccessful. Either one of the import files is not compliant with the TBX structure or no entry changed during the import process.
\n`error` - The import was unsuccessful due to an internal error.", "enum": [ - "system", - "userDefined" + "queued", + "processing", + "done", + "cancelled", + "failed", + "error" ] - }, - "languages": { - "type": "array", - "description": "The languages of the termbase template.", - "items": { - "$ref": "#/components/schemas/language" - } - }, - "fields": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-field" - } } }, "required": [ "id", - "type" + "status" ] }, - "termbase-template-update-request": { - "title": "Termbase Template Update Request", + "termbase-poll-import-response": { + "title": "Termbase Poll Import Response", "type": "object", - "description": "The termbase template update request.", + "description": "The termbase poll import response.
\nThe import was successfully processed when the status is `done`.", "properties": { - "name": { - "type": "string", - "description": "The name of the Termbase template.", - "maxLength": 50, - "minLength": 1 - }, - "description": { + "id": { "type": "string", - "description": "The description of the Termbase template.", - "minLength": 0, - "maxLength": 200, - "nullable": true + "description": "The unique identifier of the import operation." }, - "copyright": { + "status": { "type": "string", - "description": "The copyright of the Termbase template.", - "minLength": 0, - "maxLength": 50, - "nullable": true - }, - "languages": { - "type": "array", - "description": "The languages of the termbase template.", - "items": { - "$ref": "#/components/schemas/language-request" - } - }, - "fields": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-field-update-request" - } + "description": "The status of the import operation.
\n`queued` - The import passed the structural validation and it's waiting to be processed.
\n`processing` - The import is in progress.
\n`done` - The import was successfully processed and at least an entry changed its structure ( either inserted or modified )
\n`cancelled` - The import process was interrupted.
\n`failed` - The import was unsuccessful. Either one of the import files is not compliant with the TBX structure or no entry changed during the import process.
\n`error` - The import was unsuccessful due to an internal error.", + "enum": [ + "queued", + "processing", + "done", + "cancelled", + "failed", + "error" + ] } - } + }, + "required": [ + "id", + "status" + ] }, - "termbase-template-create-request": { - "title": "Termbase Template Create Request", + "termbase-import-history-response": { + "title": "Termbase Import History Response", "type": "object", - "description": "The termbase template create request.", "properties": { - "name": { - "type": "string", - "description": "The name of the termbase template.", - "minLength": 0, - "maxLength": 50 - }, - "description": { + "id": { "type": "string", - "description": "The description of the termbase template.", - "minLength": 0, - "maxLength": 200, - "nullable": true + "description": "The termbase import identifier." }, - "copyright": { + "fileName": { "type": "string", - "description": "The copyright of the termbase template.", - "minLength": 0, - "maxLength": 50, - "nullable": true + "description": "
default
The file name of the imported file.
", + "x-default-field": true }, - "location": { + "fileSize": { + "type": "integer", + "description": "The file size of the imported file.", + "format": "int64" + }, + "status": { "type": "string", - "description": "The folder identifier where the termbase template should be created. If not mentioned, it will be created in the Root folder. If the user does not have access in Root, the request will fail with forbidden error." + "description": "The status of the import operation.
\n`pending` - The import was just created and it's waiting for user input.
\n`queued` - The import passed the structural validation and it's waiting to be processed.
\n`processing` - The import is in progress.
\n`done` - The import was successfully processed and at least an entry changed its structure ( either inserted or modified )
\n`cancelled` - The import process was interrupted.
\n`failed` - The import was unsuccessful. Either one of the import files is not compliant with the TBX structure or no entry changed during the import process.
\n`error` - The import was unsuccessful due to an internal error.", + "enum": [ + "pending", + "queued", + "processing", + "done", + "cancelled", + "failed", + "error" + ] }, - "languages": { - "type": "array", - "description": "The languages of the termbase template.", - "items": { - "$ref": "#/components/schemas/language-request" - } + "createdAt": { + "$ref": "#/components/schemas/date-time" }, - "fields": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-field-create-request" - } + "elapsedTime": { + "type": "integer", + "description": "The last modified date of the import." } }, "required": [ - "name" + "id", + "status" ] }, - "termbase-structure": { - "title": "Termbase Structure", + "termbase-import-request": { "type": "object", - "description": "The termbase structure.", + "title": "Termbase Import Properties", + "description": "Properties required for system status mapping", "properties": { - "languages": { - "type": "array", - "description": "
default
The languages of the termbase.
", - "items": { - "$ref": "#/components/schemas/language" - }, - "x-default-field": true - }, - "fields": { + "statusMapping": { "type": "array", - "description": "
default
The termbase fields. (Not available for List Termbases endpoint).
", - "items": { - "$ref": "#/components/schemas/termbase-field" + "x-stoplight": { + "id": "jr1v619dgm5k8" }, - "x-default-field": true - } - } - }, - "termbase-structure-create-request": { - "title": "Termbase Structure Create Request", - "type": "object", - "description": "The termbase structure create request.", - "properties": { - "languages": { - "type": "array", - "description": "The languages of the termbase. If not supplied, the termbase will be created using the languages from the specified template. Otherwise it will override the languages from the template.", - "items": { - "$ref": "#/components/schemas/language-request" - } - }, - "fields": { - "type": "array", - "description": "Describes the field structure. If not supplied, the termbase will be created using the fields from the specified template. Otherwise it will override the fields from the template.", "items": { - "$ref": "#/components/schemas/termbase-field-create-request" + "$ref": "#/components/schemas/termbase-system-status-mapping", + "x-stoplight": { + "id": "jjw6bvzbbc0eg" + } } } } }, - "termbase-structure-update-request": { - "title": "Termbase Structure Update Request", + "termbase-system-status-mapping": { + "title": "Termbase System Status Mapping", + "x-stoplight": { + "id": "3o7f2m7gb63yw" + }, "type": "object", - "description": "The termbase structure update request.", + "description": "A mapping between a termbase term system status and termbase statuses.", + "required": [ + "systemStatusValue", + "statuses" + ], "properties": { - "languages": { - "type": "array", - "description": "The languages of the termbase. If not supplied, the termbase will be updated using the languages from the specified template. Otherwise it will override the languages from the template.", - "items": { - "$ref": "#/components/schemas/language-request" + "systemStatusValue": { + "$ref": "#/components/schemas/termbase-entry-term-system-status-request", + "x-stoplight": { + "id": "kznc76h6wxicr" } }, - "fields": { + "statuses": { "type": "array", - "description": "Describes the field structure. If not supplied, the termbase will be updated using the fields from the specified template. Otherwise it will override the fields from the template.", + "x-stoplight": { + "id": "3isyr4742q3jg" + }, + "minItems": 1, "items": { - "$ref": "#/components/schemas/termbase-field-update-request" + "x-stoplight": { + "id": "6lvylhb8t3n96" + }, + "type": "string" } } } }, - "termbase-field": { - "title": "Termbase Field", + "tqa-profile": { + "title": "TQA Profile", "type": "object", - "description": "The termbase field.", - "required": [ - "id" - ], + "description": "As a project manager, you choose a TQA configuration and use it to automatically assess the quality of a translation document.\n\nThe TQA configuration specifies:\n - Categories and subcategories that reviewers will use to classify the translation issues in a document.\n - Severities to define custom metrics you want to use to assess translation quality.\n - Score to measure the importance of each category or subcategory of an issue.\n - Pass/Fail Threshold to define the maximum number of penalty points admitted before failing the translation document.", "properties": { "id": { "type": "string", - "description": "The identifier of the termbase field." + "description": "The identifier of the TQA profile." }, "name": { "type": "string", - "description": "
default
The name of the termbase field.
", + "description": "
default
The name of the TQA Profile.
", "x-default-field": true }, "description": { "type": "string", - "description": "The description of the termbase field", - "nullable": true - }, - "type": { - "type": "string", - "description": "The type of the termbase field - system or userDefined.", - "enum": [ - "system", - "userDefined" - ] - }, - "level": { - "type": "string", - "enum": [ - "entry", - "language", - "term" - ], - "description": "
default
The level of which this field applies.
", + "description": "
default
The TQA Profile description.
", "x-default-field": true }, - "dataType": { - "type": "string", - "enum": [ - "text", - "double", - "date", - "picklist", - "boolean" - ], - "description": "
default
The data type of the field.
", + "location": { + "$ref": "#/components/schemas/folder-v2" + }, + "passFailThreshold": { + "$ref": "#/components/schemas/tqa-profile-passFailThreshold", + "description": "
default
Pass/Fail Threshold is used to define the maximum number of penalty points admitted before failing the translation document.
", "x-default-field": true }, - "pickListValues": { + "categories": { "type": "array", - "uniqueItems": false, - "description": "The pick list options. Only if dataType is \"picklist\".", + "description": "Categories and subcategories are assessment options that reviewers can use to classify any translation-related issue that they find in a file.", "items": { - "type": "string" + "$ref": "#/components/schemas/tqa-profile-category" } }, - "allowCustomValues": { - "type": "boolean", - "description": "Specifies if the field allows custom values." - }, - "allowMultiple": { - "type": "boolean", - "description": "Specifies if the field can be used multiple times." - }, - "isMandatory": { - "type": "boolean", - "description": "Specifies if the field is mandatory." - } - } - }, - "termbase-field-update-request": { - "title": "Termbase Field Update Request", - "type": "object", - "description": "The termbase field update request.\n\nIf dataType is `picklist` and pickListValues array is empty `allowCustomValues` must be true.", - "properties": { - "id": { - "type": "string", - "description": "The identifier of the termbase field to updated. If missing will add a new field." - }, - "name": { - "type": "string", - "description": "The name of the termbase field. Must be unique.", - "minLength": 1, - "maxLength": 50 - }, - "description": { - "type": "string", - "description": "The description of the termbase field.", - "minLength": 1, - "maxLength": 200, - "nullable": true - }, - "level": { - "type": "string", - "enum": [ - "entry", - "language", - "term" - ], - "description": "The level of which this field applies." - }, - "dataType": { - "type": "string", - "enum": [ - "text", - "double", - "date", - "picklist", - "boolean" - ], - "description": "The data type of the field." - }, - "pickListValues": { + "severities": { "type": "array", - "uniqueItems": true, - "description": "The pick list options. Only if dataType is \"picklist\".", + "description": "Severities are custom metrics that reviewers can use to measure the importance of any translation-related issues that they find in a file.", "items": { - "type": "string", - "minLength": 1, - "maxLength": 1000 + "$ref": "#/components/schemas/tqa-profile-severity" } }, - "allowCustomValues": { - "type": "boolean", - "description": "Specifies if the field allows custom values. Must be true if pickListValues is empty.", - "default": false - }, - "allowMultiple": { - "type": "boolean", - "description": "Specifies if the field can be used multiple times.", - "default": true + "scores": { + "type": "array", + "description": "The TQA scoring indicates whether translations pass or fail the acceptance threshold.", + "items": { + "$ref": "#/components/schemas/tqa-profile-score" + } }, - "isMandatory": { - "type": "boolean", - "description": "Specifies if the field is mandatory.", - "default": false + "path": { + "type": "array", + "deprecated": true, + "items": { + "$ref": "#/components/schemas/folder" + } } }, "required": [ - "name", - "level", - "dataType" + "id" ] }, - "termbase-field-create-request": { - "title": "Termbase Field Create Request", + "tqa-profile-category": { + "title": "TQA Profile Category", "type": "object", - "description": "The termbase field request.\n\nIf dataType is `picklist` and pickListValues array is empty `allowCustomValues` must be true.", "properties": { - "name": { + "id": { "type": "string", - "description": "The name of the termbase field. Must be unique.", - "minLength": 1, - "maxLength": 50 + "description": "The category identifier." }, - "description": { + "name": { "type": "string", - "description": "The description of the termbase field.", - "minLength": 1, - "maxLength": 200, - "nullable": true + "description": "
default
The category name.
", + "x-default-field": true }, - "level": { + "description": { "type": "string", - "enum": [ - "entry", - "language", - "term" - ], - "description": "The level of which this field applies." + "description": "The category description." }, - "dataType": { + "abbreviation": { "type": "string", - "enum": [ - "text", - "double", - "date", - "picklist", - "boolean" - ], - "description": "The data type of the field." - }, - "pickListValues": { - "type": "array", - "uniqueItems": true, - "description": "The pick list values. Only if dataType is \"picklist\". Values must be unique.", - "items": { - "type": "string", - "minLength": 1, - "maxLength": 1000 - } - }, - "allowCustomValues": { - "type": "boolean", - "description": "Specifies if the field allows custom values. Must be true if pickListValues is empty.", - "default": false - }, - "allowMultiple": { - "type": "boolean", - "description": "Specifies if the field can be used multiple times.", - "default": true - }, - "isMandatory": { - "type": "boolean", - "description": "Specifies if the field is mandatory.", - "default": false + "description": "The category abbreviation." } - }, - "required": [ - "name", - "level", - "dataType" - ] + } }, - "termbase": { - "title": "Termbase", + "tqa-profile-severity": { + "title": "TQA Profile Severity", "type": "object", - "description": "The termbase.", + "description": "Severities are custom metrics that reviewers can use to measure the importance of any translation-related issues that they find in a file.", "properties": { "id": { "type": "string", - "description": "The identifier of the termbase." + "description": "The severity identifier." }, "name": { "type": "string", - "description": "
default
The name of the termbase.
", + "description": "
default
The severity name.
", "x-default-field": true }, - "description": { + "type": { "type": "string", - "description": "The description of the termbase.", - "nullable": true + "description": "The severity type." + } + } + }, + "tqa-profile-passFailThreshold": { + "title": "TQA Profile PassFailThreshold", + "type": "object", + "description": "Pass/Fail Threshold is used to define the maximum number of penalty points admitted before failing the translation document.", + "properties": { + "points": { + "type": "integer", + "description": "
default
The penalty points.
", + "x-default-field": true }, - "copyright": { + "quantity": { + "type": "integer", + "description": "
default
The quantity against which the points are measured.
", + "x-default-field": true + }, + "scope": { "type": "string", - "description": "The copyright of the termbase.", - "nullable": true + "description": "
default
Words or characters.
", + "x-default-field": true + } + } + }, + "tqa-profile-score": { + "title": "TQA Profile Score", + "type": "object", + "description": "The TQA scoring indicates whether translations pass or fail the acceptance threshold.", + "properties": { + "category": { + "$ref": "#/components/schemas/tqa-profile-category", + "description": "
default
The TQA category.
", + "x-default-field": true }, - "location": { - "$ref": "#/components/schemas/folder-v2", - "description": "
default
The resource folder.
", + "severity": { + "$ref": "#/components/schemas/tqa-profile-severity", + "description": "
default
Severities are custom metrics that reviewers can use to measure the importance of any translation-related issues that they find in a file.
", "x-default-field": true }, - "termbaseStructure": { - "$ref": "#/components/schemas/termbase-structure" + "penalty": { + "type": "integer", + "description": "
default
The associated penalty for this score's category and severity.
", + "x-default-field": true + } + } + }, + "translation-search-request": { + "title": "Translation Search Request", + "x-stoplight": { + "id": "pfa7dyujl86lv" + }, + "type": "object", + "required": [ + "input", + "languageDirection", + "definition" + ], + "properties": { + "input": { + "$ref": "#/components/schemas/translation-lookup-input-request", + "x-stoplight": { + "id": "gj1t64z5swfgk" + } }, - "numberOfEntries": { - "type": "number", - "description": "The number of entries included in the termbase. (Not available for List Termbases endpoint)" + "languageDirection": { + "$ref": "#/components/schemas/language-direction-general-request", + "x-stoplight": { + "id": "h62z5gy3c4otv" + } }, - "status": { - "type": "string", - "enum": [ - "ready", - "processingContent", - "exportingContent", - "deletingContent" - ], - "description": "The status of the termbase. (Not available for List Termbases endpoint)" + "definition": { + "$ref": "#/components/schemas/translation-definition", + "x-stoplight": { + "id": "f9rodrj2q7z6e" + } }, - "createdAt": { - "type": "string", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the termbase was created. (Not available for List Termbases endpoint)
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "format": "date-time" + "settings": { + "$ref": "#/components/schemas/translation-search-settings", + "x-stoplight": { + "id": "vkle6tvpl4amf" + } + } + } + }, + "translation-search-response": { + "title": "Translation Search Response", + "x-stoplight": { + "id": "6zhfxtway5o0e" + }, + "type": "object", + "required": [ + "translations" + ], + "properties": { + "translations": { + "type": "array", + "x-stoplight": { + "id": "ags6uqvpedq4l" + }, + "description": "Translations from different resource origins such as `TM`. The origin information is found in the BCM fragment.", + "items": { + "$ref": "#/components/schemas/translation", + "x-stoplight": { + "id": "5px5mphkbp2rr" + } + } }, - "lastModifiedAt": { - "type": "string", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the termbase was last updated. (Not available for List Termbases endpoint)
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "format": "date-time" + "appliedResourcesStatus": { + "type": "array", + "x-stoplight": { + "id": "3v56u017sssw8" + }, + "items": { + "$ref": "#/components/schemas/translation-applied-resource-status", + "x-stoplight": { + "id": "gexmk4z2gsbyb" + } + } } + } + }, + "translation-concordance-search-response": { + "title": "Translation Concordance Search Response", + "x-stoplight": { + "id": "6zhfxtway5o0e" }, + "type": "object", "required": [ - "id" - ] + "translations" + ], + "properties": { + "translations": { + "type": "array", + "x-stoplight": { + "id": "ags6uqvpedq4l" + }, + "description": "Translations from different resource origins such as `TM`. The origin information is found in the BCM fragment. Only the top 5 matches are displayed", + "items": { + "$ref": "#/components/schemas/translation-concordance", + "x-stoplight": { + "id": "5px5mphkbp2rr" + } + } + }, + "appliedResourcesStatus": { + "type": "array", + "x-stoplight": { + "id": "3v56u017sssw8" + }, + "items": { + "$ref": "#/components/schemas/translation-concordance-search-applied-resource-status", + "x-stoplight": { + "id": "gexmk4z2gsbyb" + } + } + } + } }, - "termbase-create-request": { - "title": "Termbase Create Request", + "translation-unit-add-update-response": { + "title": "Translation Unit Response", + "type": "object", + "required": [ + "success" + ], + "properties": { + "success": { + "type": "boolean", + "description": "A flag indicating whether the overall operation was successful executed" + }, + "insights": { + "type": "array", + "description": "
default
The operation insights.
", + "x-default-field": true, + "items": { + "$ref": "#/components/schemas/translation-unit-insight-model" + } + }, + "errorInsights": { + "type": "array", + "description": "
default
The operation error insights.
", + "x-default-field": true, + "items": { + "$ref": "#/components/schemas/translation-error-detail-response" + } + } + } + }, + "translation-unit-insight-model": { + "title": "Translation Unit Insight Model", + "type": "object", + "description": "Detailed insight information about the processed translation unit.", + "required": [ + "resourceId", + "translationHash", + "action" + ], + "properties": { + "resourceId": { + "type": "string", + "description": "The translation memory identifier." + }, + "translationHash": { + "type": "string", + "description": "The translation unit hash code." + }, + "action": { + "type": "string", + "description": "The action performed", + "enum": [ + "discard", + "add", + "merge", + "overwrite", + "error", + "delete" + ] + } + } + }, + "translation-unit-resource-type": { + "title": "Translation Unit Resource Type", + "type": "string", + "description": "Enumeration of available translation unit resource types.", + "enum": [ + "TM" + ] + }, + "translation-applied-resource-status": { + "title": "Translation Applied Resource Status", + "x-stoplight": { + "id": "l8qfj2wt8ex3q" + }, "type": "object", - "description": "Termbase create request.", "properties": { - "name": { - "type": "string", - "description": "The name of the termbase.", - "minLength": 1, - "maxLength": 50 - }, - "description": { + "resourceId": { "type": "string", - "description": "The description of the termbase.", - "minLength": 0, - "maxLength": 200, - "nullable": true + "x-stoplight": { + "id": "ijitw3244ojkf" + }, + "description": "
default
The resource identifier." }, - "copyright": { - "type": "string", - "description": "The copyright of the termbase.", - "minLength": 0, - "maxLength": 50, - "nullable": true + "resourceType": { + "$ref": "#/components/schemas/translation-resource-type", + "x-stoplight": { + "id": "3y8wplo4peutt" + }, + "description": "
default
The type of resource applied." }, - "location": { + "status": { + "x-stoplight": { + "id": "vacv71ru214af" + }, "type": "string", - "description": "The folder identifier where the termbase should be created. If not specified, it will be created in the Root folder. If the user does not have access in Root, the request will fail with forbidden error." + "enum": [ + "successful", + "unsuccessful" + ], + "description": "
default
The status of the applied resource." }, - "termbaseTemplateId": { + "message": { "type": "string", - "description": "The termbase template identifier." + "x-stoplight": { + "id": "wj0qjf9jfalmv" + }, + "description": "A message describing the applied resource." }, - "termbaseStructure": { - "$ref": "#/components/schemas/termbase-structure-create-request" + "translationErrors": { + "type": "array", + "x-stoplight": { + "id": "o91qwrova4eay" + }, + "description": "Details of possible errors.", + "items": { + "$ref": "#/components/schemas/translation-error-detail-response", + "x-stoplight": { + "id": "rllzog6wfm1te" + } + } } - }, - "required": [ - "name" - ] + } }, - "termbase-update-request": { - "title": "Termbase Update Request", + "translation-concordance-search-applied-resource-status": { + "title": "Translation Concordance Search Applied Resource Status", + "x-stoplight": { + "id": "l8qfj2wt8ex3q" + }, "type": "object", - "description": "Termbase update request.", "properties": { - "name": { + "resourceId": { "type": "string", - "description": "The name of the termbase.", - "minLength": 1, - "maxLength": 50 + "x-stoplight": { + "id": "ijitw3244ojkf" + }, + "description": "
default
The resource identifier." }, - "description": { + "resourceType": { "type": "string", - "description": "The description of the termbase.", - "minLength": 0, - "maxLength": 200, - "nullable": true + "x-stoplight": { + "id": "3y8wplo4peutt" + }, + "description": "
default
The type of resource applied.", + "enum": [ + "TM" + ] }, - "copyright": { + "status": { + "x-stoplight": { + "id": "vacv71ru214af" + }, "type": "string", - "description": "The copyright of the termbase.", - "minLength": 0, - "maxLength": 50, - "nullable": true + "enum": [ + "successful", + "unsuccessful" + ], + "description": "
default
The status of the applied resource." }, - "termbaseTemplateId": { + "message": { "type": "string", - "description": "The termbase template identifier." + "x-stoplight": { + "id": "wj0qjf9jfalmv" + }, + "description": "A message describing the applied resource." }, - "termbaseStructure": { - "$ref": "#/components/schemas/termbase-structure-update-request" + "translationErrors": { + "type": "array", + "x-stoplight": { + "id": "o91qwrova4eay" + }, + "description": "Details of possible errors.", + "items": { + "$ref": "#/components/schemas/translation-error-detail-response", + "x-stoplight": { + "id": "rllzog6wfm1te" + } + } } } }, - "termbase-field-value-link": { - "title": "Termbase Field Value Link", + "translation-definition": { + "title": "Translation Definition", + "x-stoplight": { + "id": "1ajyhlvlclubb" + }, "type": "object", - "description": "The field value link.", + "required": [ + "translationEngineId" + ], "properties": { - "type": { - "type": "string", - "enum": [ - "term", - "entry", - "external" - ], - "description": "The type of the link." - }, - "value": { + "translationEngineId": { "type": "string", - "description": "The value of the link." + "x-stoplight": { + "id": "546wr95sonkhe" + }, + "description": "The translation engine identifier." } - }, - "required": [ - "type", - "value" - ] + } }, - "termbase-field-value-link-update-request": { - "title": "Termbase Field Value Link Update Request", + "translation-concordance-search-definition": { + "title": "Translation Concordance Search Definition", + "x-stoplight": { + "id": "1ajyhlvlclubb" + }, "type": "object", - "description": "The field value link update request.", + "required": [ + "translationEngineId" + ], "properties": { - "type": { + "translationEngineId": { "type": "string", - "enum": [ - "term", - "entry", - "external" - ], - "description": "The type of the link." - }, - "value": { - "type": "string", - "description": "The value of the link." + "x-stoplight": { + "id": "546wr95sonkhe" + }, + "description": "The translation engine identifier." } } }, - "termbase-field-value-link-create-request": { - "title": "Termbase Field Value Link Create Request", + "translation-resource": { + "title": "Translation Resource", + "x-stoplight": { + "id": "vrs494q2buzhy" + }, "type": "object", - "description": "The field value link create request.", + "required": [ + "resourceId", + "type" + ], "properties": { - "type": { + "resourceId": { "type": "string", - "enum": [ - "term", - "entry", - "external" - ], - "description": "The type of link." + "x-stoplight": { + "id": "1wr6q3uu0ow0s" + }, + "description": "The resource identifier." }, - "value": { - "type": "string", - "description": "The value of the link.", - "minLength": 1 + "type": { + "$ref": "#/components/schemas/translation-resource-type", + "x-stoplight": { + "id": "mn8n0t9bwutha" + } } + } + }, + "translation-resource-type": { + "title": "Translation Resource Type", + "type": "string", + "x-stoplight": { + "id": "zr6udmd1g99q4" }, - "required": [ - "type", - "value" + "description": "The translation resource type", + "enum": [ + "TM", + "MT", + "TB" ] }, - "termbase-field-value": { - "title": "Termbase Field Value", + "translation-concordance-resource-type": { + "title": "Translation Resource Type", + "type": "string", + "x-stoplight": { + "id": "zr6udmd1g99q4" + }, + "description": "The translation resource type", + "enum": [ + "TM" + ] + }, + "translation": { + "title": "Translation", + "x-stoplight": { + "id": "a0g18gy80z5p1" + }, "type": "object", - "description": "The termbase field value.", + "required": [ + "translationProposal", + "resourceType" + ], "properties": { - "id": { - "type": "string", - "description": "The field value identifier." - }, - "name": { - "type": "string", - "description": "The field value name." - }, - "termbaseFieldId": { - "type": "string", - "description": "The termbase field identifier." - }, - "value": { + "translationProposal": { "type": "string", - "description": "The value of the field." + "x-stoplight": { + "id": "siqg2y0t0s38m" + }, + "description": "The translation content serialized as JSON. BCM fragment for `TM` and `MT`. BCM term for `TB`." }, - "fieldValueLinks": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-field-value-link" + "resourceType": { + "$ref": "#/components/schemas/translation-resource-type", + "x-stoplight": { + "id": "gkon15o12wfc8" } }, - "createdAt": { - "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the termbase field value was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "nullable": true - }, - "createdBy": { - "$ref": "#/components/schemas/user" - }, - "lastModifiedAt": { - "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the termbase field value was last modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "nullable": true - }, - "lastModifiedBy": { - "$ref": "#/components/schemas/user" + "sourceLocation": { + "$ref": "#/components/schemas/translation-source-locations", + "description": "The source location is only available for `TB`." } + } + }, + "translation-concordance": { + "title": "Translation", + "x-stoplight": { + "id": "a0g18gy80z5p1" }, + "type": "object", "required": [ - "id", - "name", - "termbaseFieldId", - "value" - ] + "translationProposal", + "resourceType" + ], + "properties": { + "translationProposal": { + "type": "string", + "x-stoplight": { + "id": "siqg2y0t0s38m" + }, + "description": "The translation content serialized as JSON. BCM fragment for `TM`." + }, + "resourceType": { + "$ref": "#/components/schemas/translation-concordance-resource-type", + "x-stoplight": { + "id": "gkon15o12wfc8" + } + } + } + }, + "translation-source-locations": { + "title": "sourceLocations", + "type": "array", + "items": { + "$ref": "#/components/schemas/translation-source-location" + } + }, + "translation-source-location": { + "title": "sourceLocation", + "type": "object", + "properties": { + "start": { + "type": "integer" + }, + "length": { + "type": "integer" + } + } }, - "termbase-field-value-update-request": { - "title": "Termbase Field Value Update request", + "translation-concordance-search-request": { + "title": "Translation Concordance Search Request", + "x-stoplight": { + "id": "mu51b39komenk" + }, "type": "object", - "description": "The termbase field value update request.", + "required": [ + "input", + "languageDirection", + "definition" + ], "properties": { - "id": { - "type": "string", - "description": "The field value identifier. Either the `id` or the `name` is mandatory to be provided." + "input": { + "$ref": "#/components/schemas/translation-concordance-input-request", + "x-stoplight": { + "id": "15af4h5jkfyvj" + } }, - "name": { - "type": "string", - "description": "The field value name. Either the `id` or the `name` is mandatory to be provided." + "languageDirection": { + "$ref": "#/components/schemas/language-direction-general-request", + "x-stoplight": { + "id": "o84ns9q1ulxkz" + } }, - "termbaseFieldId": { - "type": "string", - "description": "The termbase field value identifier. Must match with the fieldId from the termbase." + "definition": { + "$ref": "#/components/schemas/translation-concordance-search-definition", + "x-stoplight": { + "id": "d6yrwalewio7h" + } }, - "value": { - "type": "string", - "description": "The value of the field.", - "minLength": 1, - "maxLength": 4096 + "targetOnly": { + "type": "boolean", + "x-stoplight": { + "id": "ffjvv0xao6ykz" + }, + "default": false, + "description": "Indicates whether the search should be performed only in the target segments." }, - "fieldValueLinks": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-field-value-link-update-request" + "settings": { + "$ref": "#/components/schemas/concordance-search-settings", + "x-stoplight": { + "id": "49cht6969uysn" } } - }, - "required": [ - "termbaseFieldId", - "value" - ] + } }, - "termbase-field-value-create-request": { - "title": "Termbase Field Value Create Request", + "translation-add-request": { + "title": "Translation Add Request", + "x-stoplight": { + "id": "44r5oq5khi1fs" + }, "type": "object", - "description": "The termbase field value create request.", + "required": [ + "input", + "definition" + ], "properties": { - "termbaseFieldId": { - "type": "string", - "description": "The termbase field identifier. It must match the `fieldId` from the termbase." + "input": { + "$ref": "#/components/schemas/translation-tu-update-input-request", + "x-stoplight": { + "id": "4an4r6b9854aq" + } }, - "value": { - "type": "string", - "description": "The value of the field.", - "minLength": 1, - "maxLength": 4096 + "definition": { + "$ref": "#/components/schemas/translation-update-definition", + "x-stoplight": { + "id": "rv8rlalk5d2a7" + } }, - "fieldValueLinks": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-field-value-link-create-request" + "settings": { + "$ref": "#/components/schemas/translation-add-settings", + "x-stoplight": { + "id": "uy8l353n2uh3g" } } - }, - "required": [ - "termbaseFieldId", - "value" - ] + } }, - "termbase-entry-term": { - "title": "Termbase Entry Term", + "translation-update-request": { + "title": "Translation Update Request", + "x-stoplight": { + "id": "44r5oq5khi1fs" + }, "type": "object", - "description": "The termbase entry term.", + "required": [ + "input", + "definition" + ], "properties": { - "id": { - "type": "string", - "description": "The term identifier." + "input": { + "$ref": "#/components/schemas/translation-tu-update-input-request", + "x-stoplight": { + "id": "4an4r6b9854aq" + } }, - "text": { - "type": "string", - "description": "The term text." + "definition": { + "$ref": "#/components/schemas/translation-update-definition", + "x-stoplight": { + "id": "rv8rlalk5d2a7" + } }, - "termbaseFieldValues": { + "settings": { + "$ref": "#/components/schemas/translation-update-settings", + "x-stoplight": { + "id": "uy8l353n2uh3g" + } + } + } + }, + "translation-add-settings": { + "title": "Translation Add Settings", + "x-stoplight": { + "id": "4rfs3hgmqnjnl" + }, + "type": "object", + "properties": { + "fields": { + "x-stoplight": { + "id": "q2x1e7tqb6bjj" + }, "type": "array", + "description": "The Translation Unit fields to update. They are defined in the Field Template associated to your Translation Memory.", "items": { - "$ref": "#/components/schemas/termbase-field-value" + "$ref": "#/components/schemas/translation-update-field", + "x-stoplight": { + "id": "zrkulmef1pa37" + } } }, - "createdAt": { - "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the term entry was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "nullable": true - }, - "createdBy": { - "$ref": "#/components/schemas/user" - }, - "lastModifiedAt": { + "ifTargetSegmentsDiffer": { + "x-stoplight": { + "id": "9kr4dv5q5yko5" + }, "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the term entry was last modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "nullable": true - }, - "lastModifiedBy": { - "$ref": "#/components/schemas/user" + "enum": [ + "addNew", + "overwrite", + "leaveUnchanged", + "keepMostRecent", + "merge" + ], + "description": "Update behavior when the translation unit already exists but target differs." } - }, - "required": [ - "id", - "text" - ] + } }, - "termbase-entry-term-update-request": { - "title": "Termbase Entry Term Update Request", + "translation-update-settings": { + "title": "Translation Update Settings", + "x-stoplight": { + "id": "4rfs3hgmqnjnl" + }, "type": "object", - "description": "The termbase entry term update request.", "properties": { - "id": { - "type": "string", - "description": "The term identifier that will be updated. If not supplied, a new term will be created." - }, - "text": { - "type": "string", - "description": "The term text.", - "minLength": 1, - "maxLength": 1024 - }, - "termbaseFieldValues": { + "fields": { + "x-stoplight": { + "id": "q2x1e7tqb6bjj" + }, "type": "array", + "description": "The Translation Unit fields to update. They are defined in the Field Template associated to your Translation Memory.", "items": { - "$ref": "#/components/schemas/termbase-field-value-update-request" + "$ref": "#/components/schemas/translation-update-field", + "x-stoplight": { + "id": "zrkulmef1pa37" + } } } + } + }, + "translation-update-resource": { + "title": "Translation Update Resource", + "x-stoplight": { + "id": "kk5sxng7r7rcv" }, + "type": "object", "required": [ - "text" - ] + "resourceId", + "type" + ], + "properties": { + "resourceId": { + "type": "string", + "x-stoplight": { + "id": "ht1329zmz3hgp" + }, + "description": "The resource identifier." + }, + "type": { + "x-stoplight": { + "id": "dmov4sqorfrf3" + }, + "type": "string", + "enum": [ + "TM" + ], + "description": "The translation resource type." + } + } }, - "termbase-term-create-request": { - "title": "Termbase Entry Term Create Request", + "translation-cost-item": { + "title": "Translation Cost Item", "type": "object", - "description": "The termbase entry term request.", "properties": { - "text": { - "type": "string", - "description": "The term text.", - "maxLength": 1024, - "minLength": 1 + "count": { + "type": "number", + "description": "
default
The total number of units.
", + "nullable": true, + "x-default-field": true + }, + "rate": { + "type": "number", + "description": "
default
The cost of a unit.
", + "nullable": true, + "x-default-field": true + }, + "total": { + "type": "number", + "description": "
default
The total cost for the current item.
", + "nullable": true, + "x-default-field": true + }, + "runningTotal": { + "type": "number", + "description": "
default
The sum of all the previously computed costs.
", + "nullable": true, + "x-default-field": true + } + } + }, + "translation-cost-fuzzy-item": { + "title": "Translation Cost Fuzzy Item", + "type": "object", + "properties": { + "count": { + "type": "number", + "description": "
default
The total number of units.
", + "nullable": true, + "x-default-field": true + }, + "rate": { + "type": "number", + "description": "
default
The cost of a unit.
", + "nullable": true, + "x-default-field": true + }, + "total": { + "type": "number", + "description": "
default
The total cost for the current item.
", + "nullable": true, + "x-default-field": true + }, + "runningTotal": { + "type": "number", + "description": "
default
The sum of all the previously computed costs.
", + "nullable": true, + "x-default-field": true }, - "termbaseFieldValues": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-field-value-create-request" - } + "fuzzyCategory": { + "$ref": "#/components/schemas/fuzzy-category", + "description": "
default
Fuzzy category range.
", + "x-default-field": true } - }, - "required": [ - "text" - ] + } }, - "termbase-entry-language": { - "title": "Termbase Entry Language", + "translation-engine": { + "title": "Translation Engine", "type": "object", - "description": "The termbase entry language.", + "description": "Translation Engine resource. (Not available for List Projects endpoint)", "properties": { "id": { "type": "string", - "description": "The termbase language identifier." - }, - "language": { - "$ref": "#/components/schemas/language" - }, - "terms": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-entry-term" - } - }, - "termbaseFieldValues": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-field-value" - } + "description": "The translation engine identifier." }, - "createdAt": { + "name": { "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the language entry was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "nullable": true + "description": "
default
The translation engine name.
", + "x-default-field": true }, - "createdBy": { - "$ref": "#/components/schemas/user" + "description": { + "type": "string" }, - "lastModifiedAt": { - "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the language entry was last modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "nullable": true + "location": { + "$ref": "#/components/schemas/folder-v2" }, - "lastModifedBy": { - "$ref": "#/components/schemas/user" + "definition": { + "$ref": "#/components/schemas/translation-engine-definition" } }, "required": [ - "id", - "language" + "id" ] }, - "termbase-entry-language-update-request": { - "title": "Termbase Entry Language Update Request", + "translation-engine-update-request": { + "title": "Translation Engine Update Request", + "x-stoplight": { + "id": "qjks6cvd5ej43" + }, "type": "object", - "description": "The termbase entry language update request.", + "description": "Translation Engine resource update request", "properties": { - "id": { + "name": { "type": "string", - "description": "The termbase language identifier." - }, - "language": { - "$ref": "#/components/schemas/language-request" + "description": "
default
The translation engine name.
", + "x-default-field": true, + "minLength": 1, + "maxLength": 50 }, - "terms": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-entry-term-update-request" - } + "description": { + "type": "string", + "x-stoplight": { + "id": "h2kzvu2xlq1dh" + }, + "maxLength": 1000 }, - "termbaseFieldValues": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-field-value-update-request" + "definition": { + "$ref": "#/components/schemas/translation-engine-definition", + "x-stoplight": { + "id": "gesu0kld6jyxg" } } - }, - "required": [ - "language", - "terms" - ] + } }, - "termbase-entry-language-create-request": { - "title": "Termbase Entry Language Create Request", + "translation-engine-definition": { + "title": "Translation Engine Definition", + "x-stoplight": { + "id": "yb3ai5ltnbu49" + }, "type": "object", - "description": "The termbase entry language create request.", + "description": "The definition of a translation engine.", + "required": [ + "languageProcessingRuleId" + ], "properties": { - "language": { - "$ref": "#/components/schemas/language-request" + "languageProcessingRuleId": { + "type": "string" }, - "terms": { - "type": "array", + "languagePairDefinitions": { + "type": [ + "array" + ], + "x-stoplight": { + "id": "891hvyzbxnaqm" + }, "items": { - "$ref": "#/components/schemas/termbase-term-create-request" + "$ref": "#/components/schemas/translation-engine-definition-language-pair", + "x-stoplight": { + "id": "nbfh6uvky8c4o" + } } }, - "termbaseFieldValues": { - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-field-value-create-request" - } + "sequence": { + "$ref": "#/components/schemas/remote-translation-engine-sequence" } - }, - "required": [ - "language", - "terms" - ] + } }, - "termbase-entry": { - "title": "Termbase Entry", - "type": "object", - "description": "The termbase entry.", + "remote-translation-engine-sequence": { + "title": "Translation Engine Sequence", + "description": "Lists of IDs for Translation Memories, Termbases, Machine Translations and Large Language Models, in order of their use", "properties": { - "id": { - "type": "string", - "description": "The termbase entry identifier." - }, - "humanReadableId": { - "type": "string", - "description": "An identifier that can be provided externally, or generated automatically by the Trados Cloud Platform, used for creating cross-references. You can use it to set its value to be correlated to your system. The format of the generated value is not guaranteed." - }, - "languages": { - "description": "The termbase entry languages.", + "tm":{ "type": "array", + "description": "Translation Memories", "items": { - "$ref": "#/components/schemas/termbase-entry-language" + "type": "string" } }, - "termbaseFieldValues": { + "tb":{ "type": "array", + "description": "Termbases", "items": { - "$ref": "#/components/schemas/termbase-field-value" + "type": "string" } }, - "createdAt": { - "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the termbase entry was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "nullable": true - }, - "createdBy": { - "$ref": "#/components/schemas/user" - }, - "lastModifiedAt": { - "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The date and time when the termbase entry was last modified.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "nullable": true + "mt":{ + "type": "array", + "description": "Machine Translations", + "items":{ + "type": "string" + } }, - "lastModifiedBy": { - "$ref": "#/components/schemas/user" + "llm":{ + "type": "array", + "description": "Large Language Models", + "items": { + "type": "string" + } } - }, - "required": [ - "id", - "languages" - ] + } }, - "termbase-entry-update-request": { - "title": "Termbase Entry Update Request", + "translation-engine-definition-language-pair": { + "title": "Language Pair Definition", + "x-stoplight": { + "id": "isibhifp9qrao" + }, "type": "object", - "description": "The termbase entry update request.", "properties": { - "humanReadableId": { - "type": "string", - "description": "An identifier that can be provided externally, or generated automatically by the Trados Cloud Platform, used for creating cross-references. You can use it to set its value to be correlated to your system. The format of the generated value is not guaranteed." - }, - "languages": { - "description": "The termbase entry languages.", - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-entry-language-update-request" + "languagePair": { + "$ref": "#/components/schemas/language-pair", + "x-stoplight": { + "id": "ixoi0dqka8bkw" } }, - "termbaseFieldValues": { + "resources": { "type": "array", + "x-stoplight": { + "id": "foi4rdwsrevkj" + }, "items": { - "$ref": "#/components/schemas/termbase-field-value-update-request" + "$ref": "#/components/schemas/language-pair-resource", + "x-stoplight": { + "id": "d2b4btupa9mu1" + } } } }, "required": [ - "languages" + "languagePair", + "resources" ] }, - "termbase-entry-create-request": { - "title": "Termbase Entry Create Request", + "translation-memory-field": { + "title": "Translation Memory Field", "type": "object", - "description": "The termbase entry create request.", + "description": "The unique identifier of the field.", "properties": { - "humanReadableId": { + "id": { "type": "string", - "description": "An identifier that can be provided externally, or generated automatically by the Trados Cloud Platform, used for creating cross-references. You can use it to set its value to be correlated to your system.\nThe format of the generated value is not guaranteed." + "description": "The unique identifier of the field." }, - "languages": { - "description": "The termbase entry languages.", - "type": "array", - "items": { - "$ref": "#/components/schemas/termbase-entry-language-create-request" - } + "name": { + "type": "string", + "description": "
default
The name of the field.
", + "x-default-field": true + }, + "type": { + "type": "string", + "enum": [ + "unknown", + "singleString", + "multipleString", + "dateTime", + "singlePicklist", + "multiplePicklist", + "integer" + ], + "description": "The data type of the field." }, - "termbaseFieldValues": { + "values": { "type": "array", + "description": "A collection of values for this field.", "items": { - "$ref": "#/components/schemas/termbase-field-value-create-request" + "$ref": "#/components/schemas/translation-memory-field-value" } } }, "required": [ - "languages" + "id" ] }, - "termbase-export-properties-request": { - "title": "Termbase Export Properties Request", + "translation-memory-fields": { + "title": "Translation Memory Fields", "type": "object", "properties": { - "downloadCompressed": { - "type": "boolean", - "description": "Download compressed ( zipped ).", - "default": false + "settings": { + "type": "array", + "items": { + "$ref": "#/components/schemas/translation-memory-fields-settings" + }, + "description": "
default
", + "x-default-field": true } } }, - "termbase-export-response": { - "title": "Termbase Export Response", + "translation-memory-field-template": { + "title": "Translation Memory Field Template", "type": "object", "properties": { "id": { "type": "string", - "description": "The termbase export identifier." + "description": "The unique identifier of the translation memory field template." }, - "status": { + "name": { "type": "string", - "description": "The status of the export operation.
\n`queued` - The export passed the structural validation and it's waiting to be processed.
\n`processing` - The export is in progress.
\n`done` - The export was successfully processed .
\n`canceled` - The export process was interrupted.
\n`error` - The export was unsuccessful due to an internal error.", - "enum": [ - "queued", - "processing", - "done", - "cancelled", - "error" - ] + "description": "
default
The name of the field template.
", + "x-default-field": true }, - "errorMessage": { + "description": { "type": "string", - "description": "When status is 'error', contains the error message explaining what went wrong." + "description": "The field template description." }, - "downloadUrl": { - "type": "string", - "description": "The url where the file can be downloaded." + "location": { + "$ref": "#/components/schemas/folder-v2" + }, + "fieldDefinitions": { + "type": "array", + "description": "A collection of translation memory fields.", + "items": { + "$ref": "#/components/schemas/translation-memory-field" + } } }, "required": [ - "id", - "status" + "id" ] }, - "termbase-term": { - "title": "Termbase Term Response", + "translation-memory-field-value": { + "title": "Translation Memory Field Value", "type": "object", - "description": "The termbase term.", "properties": { "id": { "type": "string", - "description": "The term identifier." - }, - "entryId": { - "type": "string", - "description": "The entry identifier." + "description": "The unique identifier associated with this value." }, - "text": { + "value": { "type": "string", - "description": "The term text." + "description": "A translation memory field value." } }, "required": [ - "id", - "entryId", - "text" + "id" ] }, - "termbase-import-response": { - "title": "Termbase Import Response", + "translation-memory": { + "title": "Translation Memory", "type": "object", + "description": "", "properties": { "id": { "type": "string", - "description": "The unique identifier of the import operation." + "description": "Unique identifier of the translation memory." }, - "status": { + "name": { "type": "string", - "description": "The status of the import operation.
\n`queued` - The import passed the structural validation and it's waiting to be processed.
\n`processing` - The import is in progress.
\n`done` - The import was successfully processed and at least an entry changed its structure ( either inserted or modified )
\n`cancelled` - The import process was interrupted.
\n`failed` - The import was unsuccessful. Either one of the import files is not compliant with the TBX structure or no entry changed during the import process.
\n`error` - The import was unsuccessful due to an internal error.", - "enum": [ - "queued", - "processing", - "done", - "cancelled", - "failed", - "error" - ] + "description": "
default
The translation memory name.
", + "x-default-field": true + }, + "description": { + "type": "string", + "description": "The translation memory description." + }, + "copyright": { + "type": "string" + }, + "location": { + "$ref": "#/components/schemas/folder" + }, + "languageDirections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/translation-memory-language-direction" + }, + "description": "
default
A collection of language directions
", + "x-default-field": true + }, + "languageProcessingRule": { + "$ref": "#/components/schemas/language-processing-rule" + }, + "fieldTemplate": { + "$ref": "#/components/schemas/translation-memory-field-template" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The `DateTime` when the translation memory was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", + "nullable": true + }, + "createdBy": { + "$ref": "#/components/schemas/user" + }, + "lastRecomputedAt": { + "type": "string", + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The `DateTime` when the translation memory statistics were last updated.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", + "nullable": true + }, + "lastReIndexedAt": { + "type": "string", + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The `DateTime` when the translation memory reindexing was performed.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", + "nullable": true } }, "required": [ - "id", - "status" + "id" ] }, - "termbase-poll-import-response": { - "title": "Termbase Poll Import Response", + "translation-memory-fields-update-request": { + "title": "Translation Memory Fields Update Request", + "x-stoplight": { + "id": "lcpur5t4ewvi2" + }, "type": "object", - "description": "The termbase poll import response.
\nThe import was successfully processed when the status is `done`.", "properties": { - "id": { - "type": "string", - "description": "The unique identifier of the import operation." - }, - "status": { - "type": "string", - "description": "The status of the import operation.
\n`queued` - The import passed the structural validation and it's waiting to be processed.
\n`processing` - The import is in progress.
\n`done` - The import was successfully processed and at least an entry changed its structure ( either inserted or modified )
\n`cancelled` - The import process was interrupted.
\n`failed` - The import was unsuccessful. Either one of the import files is not compliant with the TBX structure or no entry changed during the import process.
\n`error` - The import was unsuccessful due to an internal error.", - "enum": [ - "queued", - "processing", - "done", - "cancelled", - "failed", - "error" - ] + "settings": { + "type": "array", + "description": "The configuration settings for Translation Memory Fields.", + "items": { + "$ref": "#/components/schemas/translation-memory-fields-settings-request" + } } }, "required": [ - "id", - "status" + "settings" ] }, - "termbase-import-history-response": { - "title": "Termbase Import History Response", + "translation-memory-field-update-type": { + "type": "string", + "title": "Translation Memory Field Update Type", + "x-stoplight": { + "id": "vq3s0tuc4yp5u" + }, + "enum": [ + "dateTime", + "singlePicklist", + "multiplePicklist", + "integer", + "singleString", + "multipleString" + ], + "description": "The data type of the value." + }, + "translation-memory-fields-settings-request": { + "title": "Translation Memory Fields Settings Request", "type": "object", + "description": "", "properties": { - "id": { - "type": "string", - "description": "The termbase import identifier." - }, - "fileName": { + "name": { "type": "string", - "description": "
default
The file name of the imported file.
", - "x-default-field": true + "description": "The name of the translation memory field." }, - "fileSize": { - "type": "integer", - "description": "The file size of the imported file.", - "format": "int64" + "values": { + "type": "array", + "description": "A collection of values.", + "items": { + "type": "string" + } }, - "status": { - "type": "string", - "description": "The status of the import operation.
\n`pending` - The import was just created and it's waiting for user input.
\n`queued` - The import passed the structural validation and it's waiting to be processed.
\n`processing` - The import is in progress.
\n`done` - The import was successfully processed and at least an entry changed its structure ( either inserted or modified )
\n`cancelled` - The import process was interrupted.
\n`failed` - The import was unsuccessful. Either one of the import files is not compliant with the TBX structure or no entry changed during the import process.
\n`error` - The import was unsuccessful due to an internal error.", - "enum": [ - "pending", - "queued", - "processing", - "done", - "cancelled", - "failed", - "error" - ] + "type": { + "$ref": "#/components/schemas/translation-memory-field-update-type" + } + }, + "required": [ + "name", + "values", + "type" + ] + }, + "translation-memory-fields-settings": { + "title": "Translation Memory Fields Settings", + "x-stoplight": { + "id": "adnwx8tlwr674" + }, + "type": "object", + "description": "The configuration settings for Translation Memory Fields.", + "properties": { + "name": { + "type": "string", + "description": "The name of the translation memory field." }, - "createdAt": { - "$ref": "#/components/schemas/date-time" + "values": { + "type": "array", + "description": "A collection of values.", + "items": { + "type": "string" + } }, - "elapsedTime": { - "type": "integer", - "description": "The last modified date of the import." + "type": { + "$ref": "#/components/schemas/translation-memory-field-update-type" } }, "required": [ - "id", - "status" + "name", + "values", + "type" ] }, - "tqa-profile": { - "title": "TQA Profile", + "translation-memory-base": { + "title": "Translation Memory", "type": "object", - "description": "As a project manager, you choose a TQA configuration and use it to automatically assess the quality of a translation document.\n\nThe TQA configuration specifies:\n - Categories and subcategories that reviewers will use to classify the translation issues in a document.\n - Severities to define custom metrics you want to use to assess translation quality.\n - Score to measure the importance of each category or subcategory of an issue.\n - Pass/Fail Threshold to define the maximum number of penalty points admitted before failing the translation document.", + "description": "", "properties": { "id": { "type": "string", - "description": "The identifier of the TQA profile." + "description": "The unique translation memory identifier." }, "name": { "type": "string", - "description": "
default
The name of the TQA Profile.
", - "x-default-field": true + "description": "The translation memory name." }, "description": { "type": "string", - "description": "
default
The TQA Profile description.
", - "x-default-field": true + "description": "The translation memory description" }, - "location": { - "$ref": "#/components/schemas/folder-v2" + "copyright": { + "type": "string" }, - "passFailThreshold": { - "$ref": "#/components/schemas/tqa-profile-passFailThreshold", - "description": "
default
Pass/Fail Threshold is used to define the maximum number of penalty points admitted before failing the translation document.
", - "x-default-field": true + "location": { + "$ref": "#/components/schemas/folder" }, - "categories": { + "languageDirections": { "type": "array", - "description": "Categories and subcategories are assessment options that reviewers can use to classify any translation-related issue that they find in a file.", "items": { - "$ref": "#/components/schemas/tqa-profile-category" + "$ref": "#/components/schemas/translation-memory-language-direction" } }, - "severities": { - "type": "array", - "description": "Severities are custom metrics that reviewers can use to measure the importance of any translation-related issues that they find in a file.", - "items": { - "$ref": "#/components/schemas/tqa-profile-severity" - } + "languageProcessingRule": { + "$ref": "#/components/schemas/language-processing-rule" }, - "scores": { - "type": "array", - "description": "The TQA scoring indicates whether translations pass or fail the acceptance threshold.", - "items": { - "$ref": "#/components/schemas/tqa-profile-score" - } + "fieldTemplate": { + "$ref": "#/components/schemas/translation-memory-field-template" }, - "path": { - "type": "array", - "deprecated": true, - "items": { - "$ref": "#/components/schemas/folder" - } + "createdDateTime": { + "type": "string", + "format": "date-time", + "description": "The `DateTime` when the translation memory was created.", + "nullable": true + }, + "createdBy": { + "$ref": "#/components/schemas/user" } }, "required": [ "id" ] }, - "tqa-profile-category": { - "title": "TQA Profile Category", + "translation-memory-create-request": { + "title": "Translation Memory Create Request", "type": "object", + "description": "The model to use when creating a new Translation Memory.", "properties": { - "id": { - "type": "string", - "description": "The category identifier." - }, "name": { "type": "string", - "description": "
default
The category name.
", - "x-default-field": true + "maxLength": 151, + "minLength": 1, + "description": "The Translation Memory name." }, "description": { "type": "string", - "description": "The category description." + "maxLength": 1024, + "description": "The Translation Memory description." }, - "abbreviation": { + "copyright": { "type": "string", - "description": "The category abbreviation." - } - } - }, - "tqa-profile-severity": { - "title": "TQA Profile Severity", - "type": "object", - "description": "Severities are custom metrics that reviewers can use to measure the importance of any translation-related issues that they find in a file.", - "properties": { - "id": { + "maxLength": 1024 + }, + "location": { "type": "string", - "description": "The severity identifier." + "description": "The folder identifier where the translation memory should be created." }, - "name": { + "languageDirections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/language-direction-request" + } + }, + "languageProcessingRuleId": { "type": "string", - "description": "
default
The severity name.
", - "x-default-field": true + "description": "The Language Processing Rule to be associated with the Translation Memory." }, - "type": { + "fieldTemplateId": { "type": "string", - "description": "The severity type." + "description": "A Field Template to be associated with the Translation Memory." } - } + }, + "required": [ + "name", + "languageDirections", + "languageProcessingRuleId", + "fieldTemplateId" + ] }, - "tqa-profile-passFailThreshold": { - "title": "TQA Profile PassFailThreshold", + "translation-memory-update-request": { + "title": "Translation Memory Update Request", "type": "object", - "description": "Pass/Fail Threshold is used to define the maximum number of penalty points admitted before failing the translation document.", + "description": "", "properties": { - "points": { - "type": "integer", - "description": "
default
The penalty points.
", - "x-default-field": true + "name": { + "type": "string", + "description": "The translation memory name", + "minLength": 1, + "maxLength": 151 }, - "quantity": { - "type": "integer", - "description": "
default
The quantity against which the points are measured.
", - "x-default-field": true + "description": { + "type": "string", + "maxLength": 1024, + "description": "The translation memory description" }, - "scope": { + "copyright": { "type": "string", - "description": "
default
Words or characters.
", - "x-default-field": true + "maxLength": 1024 + }, + "languageDirections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/language-direction-request" + } + }, + "languageProcessingRuleId": { + "type": "string", + "description": "The language processing rule to be associated with the translation memory." + }, + "fieldTemplateId": { + "type": "string", + "description": "A field template to be associated with the translation memory." } } }, - "tqa-profile-score": { - "title": "TQA Profile Score", + "translation-memory-language-direction": { + "title": "Translation Memory Language Direction", + "x-stoplight": { + "id": "lxtdb1sy4fdbi" + }, "type": "object", - "description": "The TQA scoring indicates whether translations pass or fail the acceptance threshold.", + "description": "A language direction representation specific to translation memories.", "properties": { - "category": { - "$ref": "#/components/schemas/tqa-profile-category", - "description": "
default
The TQA category.
", + "languageDirection": { + "$ref": "#/components/schemas/simple-language-direction", + "description": "
default
A basic language direction.
", "x-default-field": true }, - "severity": { - "$ref": "#/components/schemas/tqa-profile-severity", - "description": "
default
Severities are custom metrics that reviewers can use to measure the importance of any translation-related issues that they find in a file.
", - "x-default-field": true + "translationUnits": { + "type": "integer", + "description": "The number of translation units for this language pair. Sum up all language pairs to get the total for the translation memory.", + "nullable": true }, - "penalty": { + "unalignedTranslationUnits": { "type": "integer", - "description": "
default
The associated penalty for this score's category and severity.
", - "x-default-field": true + "description": "The number of translation units that are unaligned for this language pair. Sum up all language pairs to get the total for the translation memory.", + "nullable": true } } }, - "translation-cost-item": { - "title": "Translation Cost Item", + "translation-memory-import-request": { + "title": "Translation Memory Import Properties", "type": "object", + "description": "Translation Memory Import properties sent as a JSON inside a text part.", "properties": { - "count": { - "type": "number", - "description": "
default
The total number of units.
", - "nullable": true, - "x-default-field": true + "sourceLanguageCode": { + "type": "string", + "description": "The code of the source language of the translation memory." }, - "rate": { - "type": "number", - "description": "
default
The cost of a unit.
", - "nullable": true, - "x-default-field": true + "targetLanguageCode": { + "type": "string", + "description": "The code of the target language of the translation memory." + }, + "importAsPlainText": { + "description": "(Deprecated) The default value is set for this field, as this property is set internally.", + "type": "boolean", + "deprecated": true + }, + "exportInvalidTranslationUnits": { + "type": "boolean", + "default": true + }, + "triggerRecomputeStatistics": { + "description": "(Deprecated) The default value is set for this field, as this property is set internally.", + "type": "boolean", + "deprecated": true + }, + "targetSegmentsDifferOption": { + "type": "string", + "description": "Option to specify how to handle translation units in the Translation Memory, if target segments differ.", + "enum": [ + "addNew", + "overwrite", + "leaveUnchanged", + "keepMostRecent" + ], + "default": "addNew" }, - "total": { - "type": "number", - "description": "
default
The total cost for the current item.
", - "nullable": true, - "x-default-field": true + "unknownFieldsOption": { + "type": "string", + "description": "Option to specify how to handle translation units and unknown fields in the Translation Memory.", + "enum": [ + "skipTranslationUnit", + "ignore", + "addToTranslationMemory", + "failTranslationUnitImport" + ], + "default": "addToTranslationMemory" }, - "runningTotal": { - "type": "number", - "description": "
default
The sum of all the previously computed costs.
", - "nullable": true, - "x-default-field": true + "onlyImportSegmentsWithConfirmationLevels": { + "description": "Only segments with the these confirmation levels will be imported. Default if the field is not set or null: [translated, approvedSignOff, approvedTranslation]. Empty array will be treated as not specified.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "translated", + "approvedTranslation", + "approvedSignOff", + "draft", + "rejectedTranslation", + "rejectedSignOff" + ] + } } - } + }, + "required": [ + "sourceLanguageCode", + "targetLanguageCode" + ] }, - "translation-cost-fuzzy-item": { - "title": "Translation Cost Fuzzy Item", + "translation-memory-import-response": { + "title": "Translation Memory Import Response", "type": "object", "properties": { - "count": { - "type": "number", - "description": "
default
The total number of units.
", - "nullable": true, - "x-default-field": true - }, - "rate": { - "type": "number", - "description": "
default
The cost of a unit.
", - "nullable": true, - "x-default-field": true - }, - "total": { - "type": "number", - "description": "
default
The total cost for the current item.
", - "nullable": true, - "x-default-field": true - }, - "runningTotal": { - "type": "number", - "description": "
default
The sum of all the previously computed costs.
", - "nullable": true, - "x-default-field": true + "id": { + "type": "string", + "description": "The unique identifier of the import operation." }, - "fuzzyCategory": { - "$ref": "#/components/schemas/fuzzy-category", - "description": "
default
Fuzzy category range.
", - "x-default-field": true + "status": { + "type": "string", + "description": "(Deprecated) The status of the import operation.\n* `queued` - the import has been queued and is waiting to be processed\n* `inProgress` - the import is being processed\n* `failed` - the import has failed due to internal errors\n* `done` - the import has finished successfully\n* `cancelled` - the import has been interrupted", + "enum": [ + "queued", + "inProgress", + "failed", + "done", + "cancelled" + ], + "deprecated": true } - } + }, + "required": [ + "id", + "status" + ] }, - "translation-engine": { - "title": "Translation Engine", + "translation-memory-import-poll-response": { + "title": "Translation Memory Import Response", + "x-stoplight": { + "id": "f31ba8725474f" + }, "type": "object", - "description": "Translation Engine resource. (Not available for List Projects endpoint)", "properties": { "id": { "type": "string", - "description": "The translation engine identifier." + "description": "The unique identifier of the import operation." }, - "name": { + "status": { "type": "string", - "description": "
default
The translation engine name.
", - "x-default-field": true - }, - "description": { - "type": "string" - }, - "location": { - "$ref": "#/components/schemas/folder-v2" - }, - "definition": { - "$ref": "#/components/schemas/translation-engine-definition" + "description": "The status of the import operation.\n* `queued` - the import has been queued and is waiting to be processed\n* `inProgress` - the import is being processed\n* `failed` - the import has failed due to internal errors\n* `done` - the import has finished successfully\n* `cancelled` - the import has been interrupted", + "enum": [ + "queued", + "inProgress", + "failed", + "done", + "cancelled" + ] } }, "required": [ - "id" + "id", + "status" ] }, - "translation-engine-update-request": { - "title": "Translation Engine Update Request", - "x-stoplight": { - "id": "qjks6cvd5ej43" - }, + "translation-memory-import-history-response": { + "title": "Translation Memory Import History Response", "type": "object", - "description": "Translation Engine resource update request", "properties": { - "name": { + "id": { "type": "string", - "description": "
default
The translation engine name.
", - "x-default-field": true, - "minLength": 1, - "maxLength": 50 + "description": "The unique identifier of the import operation." }, - "description": { + "status": { "type": "string", - "x-stoplight": { - "id": "h2kzvu2xlq1dh" - }, - "maxLength": 1000 + "description": "The status of the import operation.\n* `queued` - the import has been queued\n* `inPorgress` - the import is being processed\n* `failed` - the import has failed\n* `done` - the import has finished successfully\n* `cancelled` - the import has been cancelled", + "enum": [ + "queued", + "inProgress", + "failed", + "done", + "cancelled" + ] }, - "definition": { - "$ref": "#/components/schemas/translation-engine-definition", - "x-stoplight": { - "id": "gesu0kld6jyxg" - } + "displayName": { + "type": "string", + "description": "The assigned name of the import operation." + }, + "settings": { + "$ref": "#/components/schemas/translation-memory-import-settings" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The creation date of the import operation.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss" + }, + "updatedAt": { + "type": "string", + "format": "date-time", + "example": "2022-01-12T12:00:00.000Z", + "description": "The last update time of the import operation.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss" + }, + "ownerId": { + "type": "string", + "description": "Owner of the import operation, corresponds with the tenant identifier." } - } - }, - "translation-engine-definition": { - "title": "Translation Engine Definition", - "x-stoplight": { - "id": "yb3ai5ltnbu49" }, + "required": [ + "id", + "status" + ] + }, + "translation-memory-import-settings": { + "title": "Translation Memory Import Settings", "type": "object", - "description": "The definition of a translation engine.", + "description": "The properties provided by the client, when the Import Operation was triggered.", "properties": { - "languageProcessingRuleId": { + "onlyImportSegmentsWithConfirmationLevels": { + "description": "Only segments with the these confirmation levels were be imported.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "translated", + "approvedTranslation", + "approvedSignOff", + "draft", + "rejectedTranslation", + "rejectedSignOff" + ] + } + }, + "unknownFieldsOption": { + "description": "This option describes how were the translation units handled when there were unknown fields in the request.", + "enum": [ + "skipTranslationUnit", + "ignore", + "addToTranslationMemory", + "failTranslationUnitImport" + ], + "type": "string" + }, + "targetSegmentsDifferOption": { + "description": "This option describes how were the translation units handled when there were differences in target segments.", + "enum": [ + "addNew", + "overwrite", + "leaveUnchanged", + "keepMostRecent" + ], + "type": "string" + }, + "importAsPlainText": { + "description": "(Deprecated) The default value is set for this field, as this property is set internally.", + "type": "boolean", + "deprecated": true + }, + "exportInvalidTranslationUnits": { + "description": "This option describes if the invalid translation units were exported during the original translation memory import operation.", + "type": "boolean" + }, + "triggerRecomputeStatistics": { + "description": "(Deprecated) The default value is set for this field, as this property is set internally.", + "type": "boolean", + "deprecated": true + }, + "fileName": { + "description": "The name of the file attached to the import request.", + "type": "string" + }, + "sourceLanguageCode": { + "description": "The source language code of the import request.", + "type": "string" + }, + "targetLanguageCode": { + "description": "The target language code of the import request.", "type": "string" }, - "languagePairDefinitions": { - "type": [ - "array" - ], - "x-stoplight": { - "id": "891hvyzbxnaqm" - }, - "items": { - "$ref": "#/components/schemas/translation-engine-definition-language-pair", - "x-stoplight": { - "id": "nbfh6uvky8c4o" - } - } + "traceId": { + "description": "(Deprecated) The field will be completly remove in the future. For compatibily, until it will be removed a default value it is set: 0000-0000-0000-0000.", + "type": "string", + "deprecated": true } - } + }, + "required": [ + "onlyImportSegmentsWithConfirmationLevels", + "unknownFieldsOption", + "targetSegmentsDifferOption", + "importAsPlainText", + "exportInvalidTranslationUnits", + "triggerRecomputeStatistics", + "fileName", + "sourceLanguageCode", + "targetLanguageCode", + "traceId" + ] }, - "translation-engine-definition-language-pair": { - "title": "Language Pair Definition", + "translation-memory-export-response": { + "title": "Translation Memory Export Response", "x-stoplight": { - "id": "isibhifp9qrao" + "id": "ol4kmgwlbdr8f" }, "type": "object", "properties": { - "languagePair": { - "$ref": "#/components/schemas/language-pair", - "x-stoplight": { - "id": "ixoi0dqka8bkw" - } + "id": { + "type": "string", + "description": "The translation memory export identifier." }, - "resources": { - "type": "array", - "x-stoplight": { - "id": "foi4rdwsrevkj" - }, - "items": { - "$ref": "#/components/schemas/language-pair-resource", - "x-stoplight": { - "id": "d2b4btupa9mu1" - } - } + "status": { + "type": "string", + "description": "(Deprecated) The status of the import operation.\n* `queued` - the import has been queued and is waiting to be processed\n* `inProgress` - the import is being processed\n* `failed` - the import has failed due to internal errors\n* `done` - the import has finished successfully\n* `cancelled` - the import has been interrupted", + "enum": [ + "queued", + "inProgress", + "failed", + "done", + "cancelled" + ], + "deprecated": true } }, "required": [ - "languagePair", - "resources" + "id", + "status" ] }, - "translation-memory-field": { - "title": "Translation Memory Field", + "translation-memory-poll-export-response": { + "title": "Translation Memory Export Response", + "x-stoplight": { + "id": "h78jfifpf8rpa" + }, "type": "object", - "description": "The unique identifier of the field.", "properties": { "id": { "type": "string", - "description": "The unique identifier of the field." - }, - "name": { - "type": "string", - "description": "
default
The name of the field.
", - "x-default-field": true + "description": "The translation memory export identifier." }, - "type": { + "status": { "type": "string", + "description": "The translation memory export status.\n* `queued` - the export has been queued to be processed\n* `inProgress` - the export is being processed\n* `failed` - the export has failed due to internal errors\n* `done` - the export has finished successfully\n* `cancelled` - the export has been interrupted", "enum": [ - "unknown", - "singleString", - "multipleString", - "dateTime", - "singlePicklist", - "multiplePicklist", - "integer" - ], - "description": "The data type of the field." - }, - "values": { - "type": "array", - "description": "A collection of values for this field.", - "items": { - "$ref": "#/components/schemas/translation-memory-field-value" - } + "queued", + "inProgress", + "failed", + "done", + "cancelled" + ] } }, "required": [ - "id" + "id", + "status" ] }, - "translation-memory-fields": { - "title": "Translation Memory Fields", - "type": "object", - "properties": { - "settings": { - "type": "array", - "items": { - "$ref": "#/components/schemas/translation-memory-fields-settings" - }, - "description": "
default
", - "x-default-field": true - } - } - }, - "translation-memory-field-template": { - "title": "Translation Memory Field Template", + "translation-memory-export-language-direction": { + "title": "Translation Memory Export Language Direction", + "x-stoplight": { + "id": "sgv1fy31ffmba" + }, "type": "object", + "description": "", "properties": { - "id": { - "type": "string", - "description": "The unique identifier of the translation memory field template." - }, - "name": { - "type": "string", - "description": "
default
The name of the field template.
", - "x-default-field": true - }, - "description": { - "type": "string", - "description": "The field template description." - }, - "location": { - "$ref": "#/components/schemas/folder-v2" + "sourceLanguage": { + "$ref": "#/components/schemas/source-language-request" }, - "fieldDefinitions": { - "type": "array", - "description": "A collection of translation memory fields.", - "items": { - "$ref": "#/components/schemas/translation-memory-field" - } + "targetLanguage": { + "$ref": "#/components/schemas/target-language-request" } }, "required": [ - "id" + "sourceLanguage", + "targetLanguage" ] }, - "translation-memory-field-value": { - "title": "Translation Memory Field Value", + "translation-memory-export-request": { + "title": "Translation Memory Export Request", + "x-stoplight": { + "id": "ivlpf7ccfd3is" + }, + "description": "", "type": "object", "properties": { - "id": { - "type": "string", - "description": "The unique identifier associated with this value." - }, - "value": { - "type": "string", - "description": "A translation memory field value." + "languageDirection": { + "$ref": "#/components/schemas/translation-memory-export-language-direction" } }, "required": [ - "id" + "languageDirection" ] }, - "translation-memory": { - "title": "Translation Memory", + "translation-service-type": { + "title": "Service Type", + "x-stoplight": { + "id": "qxo8dvfuhtpvn" + }, "type": "object", - "description": "", + "required": [ + "id" + ], "properties": { "id": { "type": "string", - "description": "Unique identifier of the translation memory." + "x-stoplight": { + "id": "y8k58twki2cx2" + }, + "description": "The Service Type identifier." }, "name": { "type": "string", - "description": "
default
The translation memory name.
", - "x-default-field": true - }, - "description": { - "type": "string", - "description": "The translation memory description." - }, - "copyright": { - "type": "string" - }, - "location": { - "$ref": "#/components/schemas/folder" - }, - "languageDirections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/translation-memory-language-direction" + "x-stoplight": { + "id": "at815peslzdx2" }, - "description": "
default
A collection of language directions
", - "x-default-field": true - }, - "languageProcessingRule": { - "$ref": "#/components/schemas/language-processing-rule" - }, - "fieldTemplate": { - "$ref": "#/components/schemas/translation-memory-field-template" - }, - "createdAt": { - "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The `DateTime` when the translation memory was created.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "nullable": true - }, - "createdBy": { - "$ref": "#/components/schemas/user" - }, - "lastRecomputedAt": { - "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The `DateTime` when the translation memory statistics were last updated.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "nullable": true - }, - "lastReIndexedAt": { - "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The `DateTime` when the translation memory reindexing was performed.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss", - "nullable": true + "description": "
default
The Service Type name.
" } - }, - "required": [ - "id" - ] + } }, - "translation-memory-fields-update-request": { - "title": "Translation Memory Fields Update Request", + "update-translation-memory": { + "title": "Update Translation Memory", "x-stoplight": { - "id": "lcpur5t4ewvi2" + "id": "7imfj2yp6ndh4" }, "type": "object", "properties": { "settings": { - "type": "array", - "description": "The configuration settings for Translation Memory Fields.", - "items": { - "$ref": "#/components/schemas/translation-memory-fields-settings-request" - } + "$ref": "#/components/schemas/update-translation-memory-settings", + "description": "The configuration settings for Update Translation Memory\r\n.", + "x-default-field": true } }, "required": [ "settings" ] }, - "translation-memory-field-update-type": { - "type": "string", - "title": "Translation Memory Field Update Type", + "update-translation-memory-settings": { + "title": "Update Translation Memory Settings", "x-stoplight": { - "id": "vq3s0tuc4yp5u" + "id": "ns9gqapkdazxv" }, - "enum": [ - "dateTime", - "singlePicklist", - "multiplePicklist", - "integer", - "singleString", - "multipleString" - ], - "description": "The data type of the value." - }, - "translation-memory-fields-settings-request": { - "title": "Translation Memory Fields Settings Request", "type": "object", - "description": "", "properties": { - "name": { - "type": "string", - "description": "The name of the translation memory field." - }, - "values": { + "segmentsConfirmationLevels": { "type": "array", - "description": "A collection of values.", + "x-stoplight": { + "id": "1sf7j3cudjzag" + }, "items": { - "type": "string" - } + "x-stoplight": { + "id": "7tg40rat3gilo" + }, + "type": "string", + "enum": [ + "approvedTranslation", + "approvedSignOff", + "draft", + "notTranslated", + "translated", + "rejectedTranslation", + "rejectedSignOff" + ] + }, + "description": "Default values are: \n\r [`translated`, `approvedTranslation`, `approvedSignOff`]." }, - "type": { - "$ref": "#/components/schemas/translation-memory-field-update-type" + "targetSegmentsDifferOption": { + "type": "string", + "x-stoplight": { + "id": "2ndpsnxl5k5qq" + }, + "enum": [ + "addNew", + "overwrite", + "keepMostRecent", + "leaveUnchanged", + "merge" + ], + "description": "Options:\r\n- `merge`: replace (update) only the TU (from which a match was retrieved for the edited TU) with the latest available translation AND keep the other duplicates as they are. Use this option to have multiple translations for the same source together with Multiple Translation Penalty = 0.\r\n- `addNew`: add translations as new TUs to the TM. Specify the status of the TUs (which will be added) under Segment status. This means that the existing TUs in the TM are not overwritten.\r\n- `overwriteExisting`: delete all TUs (which have the same source, all TU duplicates) and keep only the last added TU (the latest available translation). Use this option to prevent inconsistent translations.\r\n- `leaveUnchanged`: keep the existing TUs and do not add any new ones.\r\n- `keepMostRecent`: replace (update) only the most recent TU (from which a match was retrieved for the edited TU) with the latest available translation AND delete all other duplicates.\r\n", + "default": "merge" } }, "required": [ - "name", - "values", - "type" + "segmentsConfirmationLevels", + "targetSegmentsDifferOption" ] }, - "translation-memory-fields-settings": { - "title": "Translation Memory Fields Settings", - "x-stoplight": { - "id": "adnwx8tlwr674" - }, + "user": { + "title": "User", "type": "object", - "description": "The configuration settings for Translation Memory Fields.", + "description": "User in the account.", "properties": { - "name": { + "id": { "type": "string", - "description": "The name of the translation memory field." + "description": "User account identifier." }, - "values": { + "email": { + "type": "string", + "description": "
default
The user's email address. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read.
", + "x-default-field": true + }, + "firstName": { + "type": "string", + "description": "
default
The user's first name. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read.
", + "x-default-field": true + }, + "lastName": { + "type": "string", + "description": "
default
The user's last name. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read.
", + "x-default-field": true + }, + "anonymized": { + "type": "boolean", + "description": "
default
This shows if the authenticated entity has access to read the details of the user or not. If true, then the 'anonymizedUserName' should be retrieved.
", + "nullable": true, + "x-default-field": true + }, + "anonymizedUserName": { + "type": "string", + "description": "
default
Retrieved if the authenticated entity does not have access to read the User.
", + "x-default-field": true + }, + "location": { + "$ref": "#/components/schemas/folder-v2" + }, + "groups": { "type": "array", - "description": "A collection of values.", "items": { - "type": "string" + "$ref": "#/components/schemas/group" } - }, - "type": { - "$ref": "#/components/schemas/translation-memory-field-update-type" } }, "required": [ - "name", - "values", - "type" + "id" ] }, - "translation-memory-base": { - "title": "Translation Memory", + "user-request": { + "title": "User Request", "type": "object", - "description": "", + "description": "User in the account.", "properties": { "id": { "type": "string", - "description": "The unique translation memory identifier." + "description": "The user identifier." }, - "name": { + "email": { "type": "string", - "description": "The translation memory name." + "description": "User’s email. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read." }, - "description": { + "firstName": { "type": "string", - "description": "The translation memory description" + "description": "User’s first name. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read." }, - "copyright": { - "type": "string" + "lastName": { + "type": "string", + "description": "User’s last name. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read." }, "location": { - "$ref": "#/components/schemas/folder" + "$ref": "#/components/schemas/resource-folder-request" }, - "languageDirections": { + "groups": { "type": "array", + "description": "The groups.", "items": { - "$ref": "#/components/schemas/translation-memory-language-direction" + "$ref": "#/components/schemas/group-request" } }, - "languageProcessingRule": { - "$ref": "#/components/schemas/language-processing-rule" - }, - "fieldTemplate": { - "$ref": "#/components/schemas/translation-memory-field-template" - }, - "createdDateTime": { - "type": "string", - "format": "date-time", - "description": "The `DateTime` when the translation memory was created.", + "anonymized": { + "type": "boolean", + "description": "Shows if the authenticated entity has access to read the details of the user or not. If true then the ‘anonymizedUserName’ should be retrieved.", "nullable": true }, - "createdBy": { - "$ref": "#/components/schemas/user" + "anonymizedUserName": { + "type": "string", + "description": "Retrieved if the authenticated entity does not have access to read the User." } }, "required": [ "id" ] }, - "translation-memory-create-request": { - "title": "Translation Memory Create Request", + "vendor-order": { + "title": "Vendor Order", "type": "object", - "description": "The model to use when creating a new Translation Memory.", "properties": { - "name": { - "type": "string", - "maxLength": 151, - "minLength": 1, - "description": "The Translation Memory name." - }, - "description": { - "type": "string", - "maxLength": 1024, - "description": "The Translation Memory description." - }, - "copyright": { - "type": "string", - "maxLength": 1024 - }, - "location": { - "type": "string", - "description": "The folder identifier where the translation memory should be created." - }, - "languageDirections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/language-direction-request" - } - }, - "languageProcessingRuleId": { - "type": "string", - "description": "The Language Processing Rule to be associated with the Translation Memory." + "id": { + "type": "string" }, - "fieldTemplateId": { - "type": "string", - "description": "A Field Template to be associated with the Translation Memory." + "quote": { + "$ref": "#/components/schemas/quote" } }, "required": [ - "name", - "languageDirections", - "languageProcessingRuleId", - "fieldTemplateId" + "id" + ], + "description": "A vendor order resource." + }, + "vendor-order-template-request": { + "title": "Vendor Order Template Request", + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" ] }, - "translation-memory-update-request": { - "title": "Translation Memory Update Request", + "vendor-order-template": { + "title": "Vendor Order Template", + "description": "The vendor order template.", + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "volume-unit-type": { + "title": "Volume Unit Type", + "x-stoplight": { + "id": "xo217uws14jb2" + }, + "enum": [ + "words", + "characters", + "custom" + ] + }, + "workflow": { + "title": "Workflow", "type": "object", - "description": "", + "description": "The steps a project goes through. (Not available for List Projects endpoint)", "properties": { + "id": { + "type": "string", + "description": "The workflow identifier." + }, "name": { "type": "string", - "description": "The translation memory name", - "minLength": 1, - "maxLength": 151 + "description": "
default
The workflow name.
", + "x-default-field": true }, "description": { "type": "string", - "maxLength": 1024, - "description": "The translation memory description" + "description": "The workflow description." }, - "copyright": { - "type": "string", - "maxLength": 1024 + "location": { + "$ref": "#/components/schemas/folder" }, - "languageDirections": { + "workflowTemplate": { + "$ref": "#/components/schemas/workflow-template" + }, + "taskConfigurations": { "type": "array", "items": { - "$ref": "#/components/schemas/language-direction-request" + "$ref": "#/components/schemas/workflow-task-configuration" } }, - "languageProcessingRuleId": { - "type": "string", - "description": "The language processing rule to be associated with the translation memory." - }, - "fieldTemplateId": { - "type": "string", - "description": "A field template to be associated with the translation memory." + "languageDirections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/language-direction-no-statistics" + } } - } - }, - "translation-memory-language-direction": { - "title": "Translation Memory Language Direction", - "x-stoplight": { - "id": "lxtdb1sy4fdbi" }, + "required": [ + "id" + ] + }, + "workflow-task-assignee": { + "title": "Workflow Task Assignee", "type": "object", - "description": "A language direction representation specific to translation memories.", + "description": "Task assignee. Based on the \"type\", further details can be retrieved.
For ex. for \"type\"=\"user\", \"user\" property is available.
For \"projectCreator\" and \"projectManager\" no other property is available.", "properties": { - "languageDirection": { - "$ref": "#/components/schemas/simple-language-direction", - "description": "
default
A basic language direction.
", + "type": { + "type": "string", + "enum": [ + "user", + "group", + "vendorOrderTemplate", + "projectCreator", + "projectManager" + ] + }, + "user": { + "$ref": "#/components/schemas/user", + "description": "
default
User in the account
", "x-default-field": true }, - "translationUnits": { - "type": "integer", - "description": "The number of translation units for this language pair. Sum up all language pairs to get the total for the translation memory.", - "nullable": true + "group": { + "$ref": "#/components/schemas/group", + "description": "
default
Group of users.
", + "x-default-field": true }, - "unalignedTranslationUnits": { - "type": "integer", - "description": "The number of translation units that are unaligned for this language pair. Sum up all language pairs to get the total for the translation memory.", - "nullable": true + "vendorOrderTemplate": { + "$ref": "#/components/schemas/vendor-order-template", + "description": "
default
A vendor oder template.
", + "x-default-field": true } - } + }, + "required": [ + "type" + ] }, - "translation-memory-import-request": { - "title": "Translation Memory Import Properties", + "workflow-task-assignee-request": { + "title": "Workflow Task Assignee Request", "type": "object", - "description": "Translation Memory Import properties sent as a JSON inside a text part.", "properties": { - "sourceLanguageCode": { - "type": "string", - "description": "The code of the source language of the translation memory." - }, - "targetLanguageCode": { + "type": { "type": "string", - "description": "The code of the target language of the translation memory." + "enum": [ + "user", + "group", + "vendorOrderTemplate", + "projectCreator", + "projectManager" + ] }, - "importAsPlainText": { - "description": "(Deprecated) The default value is set for this field, as this property is set internally.", - "type": "boolean", - "deprecated": true + "user": { + "$ref": "#/components/schemas/user-request" }, - "exportInvalidTranslationUnits": { - "type": "boolean", - "default": true + "group": { + "$ref": "#/components/schemas/group-request" }, - "triggerRecomputeStatistics": { - "description": "(Deprecated) The default value is set for this field, as this property is set internally.", - "type": "boolean", - "deprecated": true + "vendorOrderTemplate": { + "$ref": "#/components/schemas/vendor-order-template-request" + } + }, + "required": [ + "type" + ] + }, + "workflow-task-configuration": { + "title": "Workflow Task Configuration", + "type": "object", + "description": "Properties of a workflow task.", + "properties": { + "scope": { + "$ref": "#/components/schemas/task-configuration-scope" }, - "targetSegmentsDifferOption": { - "type": "string", - "description": "Option to specify how to handle translation units in the Translation Memory, if target segments differ.", - "enum": [ - "addNew", - "overwrite", - "leaveUnchanged", - "keepMostRecent" - ], - "default": "addNew" + "assignees": { + "$ref": "#/components/schemas/workflow-task-assignee" }, - "unknownFieldsOption": { - "type": "string", - "description": "Option to specify how to handle translation units and unknown fields in the Translation Memory.", - "enum": [ - "skipTranslationUnit", - "ignore", - "addToTranslationMemory", - "failTranslationUnitImport" - ], - "default": "addToTranslationMemory" + "isSkipped": { + "type": "boolean", + "nullable": true, + "description": "
default
", + "x-default-field": true }, - "onlyImportSegmentsWithConfirmationLevels": { - "description": "Only segments with the these confirmation levels will be imported. Default if the field is not set or null: [translated, approvedSignOff, approvedTranslation]. Empty array will be treated as not specified.", - "type": "array", - "items": { - "type": "string", - "enum": [ - "translated", - "approvedTranslation", - "approvedSignOff", - "draft", - "rejectedTranslation", - "rejectedSignOff" - ] - } + "taskTemplate": { + "$ref": "#/components/schemas/workflow-task-template" } }, "required": [ - "sourceLanguageCode", - "targetLanguageCode" + "scope", + "taskTemplate" ] }, - "translation-memory-import-response": { - "title": "Translation Memory Import Response", + "workflow-phase": { + "title": "Workflow Phase", "type": "object", + "description": "A set of workflow steps which work together towards a localization outcome.", "properties": { "id": { "type": "string", - "description": "The unique identifier of the import operation." + "description": "The phase identfier." }, - "status": { + "name": { "type": "string", - "description": "(Deprecated) The status of the import operation.\n* `queued` - the import has been queued and is waiting to be processed\n* `inProgress` - the import is being processed\n* `failed` - the import has failed due to internal errors\n* `done` - the import has finished successfully\n* `cancelled` - the import has been interrupted", - "enum": [ - "queued", - "inProgress", - "failed", - "done", - "cancelled" - ], - "deprecated": true + "description": "
default
The phase name.
", + "x-default-field": true } }, "required": [ - "id", - "status" + "id" ] }, - "translation-memory-import-poll-response": { - "title": "Translation Memory Import Response", - "x-stoplight": { - "id": "f31ba8725474f" + "workflow-task-configuration-request": { + "title": "Workflow Task Configuration Request", + "type": "object", + "description": "A task configuration request.", + "properties": { + "taskTemplate": { + "$ref": "#/components/schemas/object-id" + }, + "isSkipped": { + "type": "boolean" + }, + "assignees": { + "type": "array", + "description": "Specifies the list of assignees for the task template. \n
When the 'isSkipped' field is set to 'true', an empty list of assignees should be specified.\r\n
Total assignee count is limited. See more at [Assigning users and groups to workflow tasks](https://docs.rws.com/791595/743481/trados-enterprise---accelerate/assigning-users-and-groups-to-workflow-tasks) point 5e.", + "items": { + "$ref": "#/components/schemas/workflow-task-assignee-request" + } + }, + "scope": { + "$ref": "#/components/schemas/task-configuration-scope-request" + } }, + "required": [ + "taskTemplate", + "isSkipped", + "assignees", + "scope" + ] + }, + "workflow-task-template": { + "title": "Workflow Task Template", "type": "object", "properties": { "id": { "type": "string", - "description": "The unique identifier of the import operation." + "description": "The workflow task template identifier." + }, + "name": { + "type": "string", + "description": "
default
The workflow task template name.
", + "x-default-field": true + }, + "apiInternalId": { + "type": "string", + "x-stoplight": { + "id": "dd6vytpa9vo41" + }, + "description": "
default
Unique identifier of workflow task templates\r\n
" }, - "status": { - "type": "string", - "description": "The status of the import operation.\n* `queued` - the import has been queued and is waiting to be processed\n* `inProgress` - the import is being processed\n* `failed` - the import has failed due to internal errors\n* `done` - the import has finished successfully\n* `cancelled` - the import has been interrupted", - "enum": [ - "queued", - "inProgress", - "failed", - "done", - "cancelled" - ] + "description": { + "type": "string" + }, + "canSkip": { + "type": "boolean", + "nullable": true + }, + "requiresAssignment": { + "type": "boolean", + "nullable": true + }, + "taskType": { + "$ref": "#/components/schemas/task-type" + }, + "phase": { + "$ref": "#/components/schemas/workflow-phase" } }, "required": [ - "id", - "status" + "id" ] }, - "translation-memory-import-history-response": { - "title": "Translation Memory Import History Response", + "workflow-template": { + "title": "Workflow Template", "type": "object", "properties": { "id": { "type": "string", - "description": "The unique identifier of the import operation." + "description": "The workflow template identifier." }, - "status": { + "name": { "type": "string", - "description": "The status of the import operation.\n* `queued` - the import has been queued\n* `inPorgress` - the import is being processed\n* `failed` - the import has failed\n* `done` - the import has finished successfully\n* `cancelled` - the import has been cancelled", - "enum": [ - "queued", - "inProgress", - "failed", - "done", - "cancelled" - ] + "description": "
default
The workflow template name.
", + "x-default-field": true }, - "displayName": { + "description": { "type": "string", - "description": "The assigned name of the import operation." - }, - "settings": { - "$ref": "#/components/schemas/translation-memory-import-settings" + "description": "The workflow template description." }, - "createdAt": { - "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The creation date of the import operation.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss" + "taskTemplates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workflow-task-template" + } }, - "updatedAt": { - "type": "string", - "format": "date-time", - "example": "2022-01-12T12:00:00.000Z", - "description": "The last update time of the import operation.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sss" + "phases": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workflow-phase" + } }, - "ownerId": { - "type": "string", - "description": "Owner of the import operation, corresponds with the tenant identifier." + "transitions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workflow-template-transition" + } } }, "required": [ - "id", - "status" + "id" ] }, - "translation-memory-import-settings": { - "title": "Translation Memory Import Settings", + "workflow-template-transition": { + "title": "Workflow Template Transition", "type": "object", - "description": "The properties provided by the client, when the Import Operation was triggered.", "properties": { - "onlyImportSegmentsWithConfirmationLevels": { - "description": "Only segments with the these confirmation levels were be imported.", - "type": "array", - "items": { - "type": "string", - "enum": [ - "translated", - "approvedTranslation", - "approvedSignOff", - "draft", - "rejectedTranslation", - "rejectedSignOff" - ] - } + "from": { + "$ref": "#/components/schemas/workflow-template-transition-node", + "description": "
default
", + "x-default-field": true }, - "unknownFieldsOption": { - "description": "This option describes how were the translation units handled when there were unknown fields in the request.", + "to": { + "$ref": "#/components/schemas/workflow-template-transition-node", + "description": "
default
", + "x-default-field": true + }, + "condition": { + "$ref": "#/components/schemas/workflow-template-transition-condition" + } + } + }, + "workflow-template-transition-condition": { + "title": "Workflow Template Transition Condition", + "type": "object", + "properties": { + "type": { + "type": "string", "enum": [ - "skipTranslationUnit", - "ignore", - "addToTranslationMemory", - "failTranslationUnitImport" + "outcome", + "expression" ], - "type": "string" + "nullable": true, + "description": "
default
", + "x-default-field": true }, - "targetSegmentsDifferOption": { - "description": "This option describes how were the translation units handled when there were differences in target segments.", + "value": { + "type": "string", + "description": "
default
", + "x-default-field": true + } + } + }, + "workflow-template-transition-node": { + "title": "Workflow Template Transition Node", + "type": "object", + "properties": { + "type": { + "type": "string", "enum": [ - "addNew", - "overwrite", - "leaveUnchanged", - "keepMostRecent" + "taskTemplate", + "start", + "end" ], - "type": "string" - }, - "importAsPlainText": { - "description": "(Deprecated) The default value is set for this field, as this property is set internally.", - "type": "boolean", - "deprecated": true - }, - "exportInvalidTranslationUnits": { - "description": "This option describes if the invalid translation units were exported during the original translation memory import operation.", - "type": "boolean" - }, - "triggerRecomputeStatistics": { - "description": "(Deprecated) The default value is set for this field, as this property is set internally.", - "type": "boolean", - "deprecated": true - }, - "fileName": { - "description": "The name of the file attached to the import request.", - "type": "string" - }, - "sourceLanguageCode": { - "description": "The source language code of the import request.", - "type": "string" + "description": "
default
", + "x-default-field": true }, - "targetLanguageCode": { - "description": "The target language code of the import request.", - "type": "string" + "taskTemplate": { + "$ref": "#/components/schemas/workflow-task-template", + "description": "
default
", + "x-default-field": true + } + } + }, + "workflow-update-request": { + "title": "Workflow Update Request", + "type": "object", + "description": "A model to update a workflow.", + "properties": { + "name": { + "type": "string", + "description": "The workflow name." }, - "traceId": { - "description": "(Deprecated) The field will be completly remove in the future. For compatibily, until it will be removed a default value it is set: 0000-0000-0000-0000.", + "description": { "type": "string", - "deprecated": true + "description": "The workflow description." + }, + "taskConfigurations": { + "type": "array", + "description": "The task configurations.", + "items": { + "$ref": "#/components/schemas/workflow-task-configuration-request" + } } - }, - "required": [ - "onlyImportSegmentsWithConfirmationLevels", - "unknownFieldsOption", - "targetSegmentsDifferOption", - "importAsPlainText", - "exportInvalidTranslationUnits", - "triggerRecomputeStatistics", - "fileName", - "sourceLanguageCode", - "targetLanguageCode", - "traceId" - ] + } }, - "translation-memory-export-response": { - "title": "Translation Memory Export Response", + "well-known-jwks-response": { + "title": "Well Known Keys Response", "x-stoplight": { - "id": "ol4kmgwlbdr8f" + "id": "1owp0jo4rmrg7" }, "type": "object", "properties": { - "id": { - "type": "string", - "description": "The translation memory export identifier." - }, - "status": { - "type": "string", - "description": "(Deprecated) The status of the import operation.\n* `queued` - the import has been queued and is waiting to be processed\n* `inProgress` - the import is being processed\n* `failed` - the import has failed due to internal errors\n* `done` - the import has finished successfully\n* `cancelled` - the import has been interrupted", - "enum": [ - "queued", - "inProgress", - "failed", - "done", - "cancelled" - ], - "deprecated": true + "keys": { + "$ref": "#/components/schemas/list-jwks", + "x-stoplight": { + "id": "dbkidlpmb0wk4" + }, + "description": "The list of public keys." } + } + }, + "translation-update-definition": { + "title": "Translation Update Definition", + "x-stoplight": { + "id": "9qqwmpya8mbgb" }, + "type": "object", "required": [ - "id", - "status" - ] + "translationEngineId" + ], + "properties": { + "translationEngineId": { + "type": "string", + "x-stoplight": { + "id": "57wk8minjka59" + }, + "description": "The translation engine id. The translation engine must have a `TM` resource." + } + } }, - "translation-memory-poll-export-response": { - "title": "Translation Memory Export Response", + "translation-update-field": { + "title": "Translation Update Field", "x-stoplight": { - "id": "h78jfifpf8rpa" + "id": "ivfrnlswg3n8o" }, "type": "object", + "required": [ + "name", + "values" + ], "properties": { - "id": { + "name": { "type": "string", - "description": "The translation memory export identifier." + "x-stoplight": { + "id": "w0z5ip16a75jo" + }, + "description": "Field name" }, - "status": { - "type": "string", - "description": "The translation memory export status.\n* `queued` - the export has been queued to be processed\n* `inProgress` - the export is being processed\n* `failed` - the export has failed due to internal errors\n* `done` - the export has finished successfully\n* `cancelled` - the export has been interrupted", - "enum": [ - "queued", - "inProgress", - "failed", - "done", - "cancelled" - ] + "values": { + "type": "array", + "x-stoplight": { + "id": "jzd3s8buqkhyh" + }, + "description": "Field values", + "items": { + "x-stoplight": { + "id": "vxkufz4upb8e0" + }, + "type": "string" + } } }, - "required": [ - "id", - "status" - ] + "description": "" }, - "translation-memory-export-language-direction": { - "title": "Translation Memory Export Language Direction", + "translation-search-settings": { + "title": "Translation Search Settings", "x-stoplight": { - "id": "sgv1fy31ffmba" + "id": "k6reff6ihojws" }, "type": "object", - "description": "", "properties": { - "sourceLanguage": { - "$ref": "#/components/schemas/source-language-request" - }, - "targetLanguage": { - "$ref": "#/components/schemas/target-language-request" + "translationMemory": { + "$ref": "#/components/schemas/translation-search-settings-tm", + "x-stoplight": { + "id": "6d8m3xqn7kla8" + } } - }, - "required": [ - "sourceLanguage", - "targetLanguage" - ] + } }, - "translation-memory-export-request": { - "title": "Translation Memory Export Request", + "concordance-search-settings": { + "title": "Concordance Search Settings", "x-stoplight": { - "id": "ivlpf7ccfd3is" + "id": "k6reff6ihojws" }, - "description": "", "type": "object", "properties": { - "languageDirection": { - "$ref": "#/components/schemas/translation-memory-export-language-direction" + "translationMemory": { + "$ref": "#/components/schemas/concordance-search-settings-tm", + "x-stoplight": { + "id": "6d8m3xqn7kla8" + } } - }, - "required": [ - "languageDirection" - ] + } }, - "update-translation-memory": { - "title": "Update Translation Memory", + "translation-search-settings-tm": { + "title": "Translation Memory Search Settings", "x-stoplight": { - "id": "7imfj2yp6ndh4" + "id": "7b6bn72a6ldvj" }, "type": "object", "properties": { - "settings": { - "$ref": "#/components/schemas/update-translation-memory-settings", - "description": "The configuration settings for Update Translation Memory\r\n.", - "x-default-field": true + "minimumMatchValue": { + "type": "integer", + "x-stoplight": { + "id": "br24y2myv21e0" + }, + "description": "This is the degree of match that must exist between a source document segment and a translation memory segment in order for the segment translation to be offered as a match. The default is 70%, but you can set a value between 30% and 100%.\r\n\r\nThe selected value is inclusive, meaning that matches with your exact selected value are also included in translation results.", + "minimum": 30, + "maximum": 100, + "default": 70 + }, + "penalties": { + "$ref": "#/components/schemas/translation-search-TM-penalties", + "x-stoplight": { + "id": "fkru1d5bfhm2w" + } } - }, - "required": [ - "settings" - ] + } }, - "update-translation-memory-settings": { - "title": "Update Translation Memory Settings", + "concordance-search-settings-tm": { + "title": "Translation Memory Concordance Search Settings", "x-stoplight": { - "id": "ns9gqapkdazxv" + "id": "7b6bn72a6ldvj" }, "type": "object", "properties": { - "segmentsConfirmationLevels": { - "type": "array", + "minimumMatchValue": { + "type": "integer", "x-stoplight": { - "id": "1sf7j3cudjzag" - }, - "items": { - "x-stoplight": { - "id": "7tg40rat3gilo" - }, - "type": "string", - "enum": [ - "approvedTranslation", - "approvedSignOff", - "draft", - "notTranslated", - "translated", - "rejectedTranslation", - "rejectedSignOff" - ] + "id": "br24y2myv21e0" }, - "description": "Default values are: \n\r [`translated`, `approvedTranslation`, `approvedSignOff`]." + "description": "This is the degree of match that must exist between a source document segment and a translation memory segment in order for the segment translation to be offered as a match. The default is 70%, but you can set a value between 30% and 100%.\r\n\r\nThe selected value is inclusive, meaning that matches with your exact selected value are also included in translation results.", + "minimum": 30, + "maximum": 100, + "default": 70 }, - "targetSegmentsDifferOption": { - "type": "string", + "penalties": { + "$ref": "#/components/schemas/concordance-search-TM-penalties", "x-stoplight": { - "id": "2ndpsnxl5k5qq" - }, - "enum": [ - "addNew", - "overwrite", - "keepMostRecent", - "leaveUnchanged", - "merge" - ], - "description": "Options:\r\n- `merge`: replace (update) only the TU (from which a match was retrieved for the edited TU) with the latest available translation AND keep the other duplicates as they are. Use this option to have multiple translations for the same source together with Multiple Translation Penalty = 0.\r\n- `addNew`: add translations as new TUs to the TM. Specify the status of the TUs (which will be added) under Segment status. This means that the existing TUs in the TM are not overwritten.\r\n- `overwriteExisting`: delete all TUs (which have the same source, all TU duplicates) and keep only the last added TU (the latest available translation). Use this option to prevent inconsistent translations.\r\n- `leaveUnchanged`: keep the existing TUs and do not add any new ones.\r\n- `keepMostRecent`: replace (update) only the most recent TU (from which a match was retrieved for the edited TU) with the latest available translation AND delete all other duplicates.\r\n", - "default": "merge" + "id": "fkru1d5bfhm2w" + } } - }, - "required": [ - "segmentsConfirmationLevels", - "targetSegmentsDifferOption" - ] + } }, - "user": { - "title": "User", + "translation-search-standard-penalties": { + "title": "Translation Memory Standard Penalties", + "x-stoplight": { + "id": "9c3abb6urgvqh" + }, "type": "object", - "description": "User in the account.", "properties": { - "id": { - "type": "string", - "description": "User account identifier." - }, - "email": { - "type": "string", - "description": "
default
The user's email address. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read.
", - "x-default-field": true + "missingFormatting": { + "type": "integer", + "x-stoplight": { + "id": "g8mtup7862xdn" + }, + "minimum": 0, + "maximum": 20, + "default": 1 }, - "firstName": { - "type": "string", - "description": "
default
The user's first name. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read.
", - "x-default-field": true + "differentFormatting": { + "type": "integer", + "x-stoplight": { + "id": "pao1qvu6sbjc9" + }, + "default": 1, + "minimum": 0, + "maximum": 20 }, - "lastName": { - "type": "string", - "description": "
default
The user's last name. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read.
", - "x-default-field": true + "multipleTranslations": { + "type": "integer", + "x-stoplight": { + "id": "y9awj7oyd87ye" + }, + "default": 1, + "minimum": 0, + "maximum": 20 }, - "anonymized": { - "type": "boolean", - "description": "
default
This shows if the authenticated entity has access to read the details of the user or not. If true, then the 'anonymizedUserName' should be retrieved.
", - "nullable": true, - "x-default-field": true + "autoLocalization": { + "type": "integer", + "x-stoplight": { + "id": "y85nv8a0u4ptr" + }, + "default": 0, + "minimum": 0, + "maximum": 20 }, - "anonymizedUserName": { - "type": "string", - "description": "
default
Retrieved if the authenticated entity does not have access to read the User.
", - "x-default-field": true + "textReplacement": { + "type": "integer", + "x-stoplight": { + "id": "t7hvtgxzazgy0" + }, + "default": 0, + "minimum": 0, + "maximum": 20 }, - "location": { - "$ref": "#/components/schemas/folder-v2" + "alignment": { + "type": "integer", + "x-stoplight": { + "id": "ipk0iaseeokla" + }, + "default": 1, + "minimum": 0, + "maximum": 20 }, - "groups": { - "type": "array", - "items": { - "$ref": "#/components/schemas/group" - } + "characterWidthDifference": { + "type": "integer", + "default": 1, + "minimum": 0, + "maximum": 20 } }, - "required": [ - "id" - ] + "description": "" }, - "user-request": { - "title": "User Request", + "translation-search-unit-status-penalties": { + "title": "Translation Unit Status Penalties", + "x-stoplight": { + "id": "x6ufijbtx0mff" + }, "type": "object", - "description": "User in the account.", + "description": "The penalties to apply depending on the status of the translation unit.", "properties": { - "id": { - "type": "string", - "description": "The user identifier." - }, - "email": { - "type": "string", - "description": "User’s email. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read." + "translated": { + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0, + "x-stoplight": { + "id": "c2kh1fiux8bl7" + } }, - "firstName": { - "type": "string", - "description": "User’s first name. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read." + "translationRejected": { + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0, + "x-stoplight": { + "id": "o3ezy93r7i26i" + } }, - "lastName": { - "type": "string", - "description": "User’s last name. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read." + "translationApproved": { + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0, + "x-stoplight": { + "id": "9380xqwtvbrsl" + } }, - "location": { - "$ref": "#/components/schemas/resource-folder-request" + "signOffRejected": { + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0, + "x-stoplight": { + "id": "ahddzpafpv7mv" + } }, - "groups": { - "type": "array", - "description": "The groups.", - "items": { - "$ref": "#/components/schemas/group-request" + "signOff": { + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0, + "x-stoplight": { + "id": "yijp1eutihsi4" } }, - "anonymized": { - "type": "boolean", - "description": "Shows if the authenticated entity has access to read the details of the user or not. If true then the ‘anonymizedUserName’ should be retrieved.", - "nullable": true + "notTranslated": { + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0, + "x-stoplight": { + "id": "ezuj0yylywjk7" + } }, - "anonymizedUserName": { - "type": "string", - "description": "Retrieved if the authenticated entity does not have access to read the User." + "draft": { + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0, + "x-stoplight": { + "id": "aibykf8ozjqmt" + } } - }, - "required": [ - "id" - ] + } }, - "vendor-order": { - "title": "Vendor Order", - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "quote": { - "$ref": "#/components/schemas/quote" - } + "translation-concordance-search-standard-penalties": { + "title": "Translation Memory Concordance Standard Penalties", + "x-stoplight": { + "id": "9c3abb6urgvqh" }, - "required": [ - "id" - ], - "description": "A vendor order resource." - }, - "vendor-order-template-request": { - "title": "Vendor Order Template Request", "type": "object", "properties": { - "id": { - "type": "string" + "alignment": { + "type": "integer", + "x-stoplight": { + "id": "ipk0iaseeokla" + }, + "default": 1, + "minimum": 0, + "maximum": 20 + }, + "characterWidthDifference": { + "type": "integer", + "default": 1, + "minimum": 0, + "maximum": 20 } }, - "required": [ - "id" - ] + "description": "" }, - "vendor-order-template": { - "title": "Vendor Order Template", - "description": "The vendor order template.", - "type": "object", - "properties": { - "id": { - "type": "string" - } + "translation-concordance-search-unit-status-penalties": { + "title": "Translation Unit Status Concordance Penalties", + "x-stoplight": { + "id": "x6ufijbtx0mff" }, - "required": [ - "id" - ] - }, - "workflow": { - "title": "Workflow", "type": "object", - "description": "The steps a project goes through. (Not available for List Projects endpoint)", + "description": "The penalties to apply depending on the status of the translation unit.", "properties": { - "id": { - "type": "string", - "description": "The workflow identifier." + "translated": { + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0, + "x-stoplight": { + "id": "c2kh1fiux8bl7" + } }, - "name": { - "type": "string", - "description": "
default
The workflow name.
", - "x-default-field": true + "translationRejected": { + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0, + "x-stoplight": { + "id": "o3ezy93r7i26i" + } }, - "description": { - "type": "string", - "description": "The workflow description." + "translationApproved": { + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0, + "x-stoplight": { + "id": "9380xqwtvbrsl" + } }, - "location": { - "$ref": "#/components/schemas/folder" + "signOffRejected": { + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0, + "x-stoplight": { + "id": "ahddzpafpv7mv" + } }, - "workflowTemplate": { - "$ref": "#/components/schemas/workflow-template" + "signOff": { + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0, + "x-stoplight": { + "id": "yijp1eutihsi4" + } }, - "taskConfigurations": { - "type": "array", - "items": { - "$ref": "#/components/schemas/workflow-task-configuration" + "notTranslated": { + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0, + "x-stoplight": { + "id": "ezuj0yylywjk7" } }, - "languageDirections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/language-direction-no-statistics" + "draft": { + "type": "integer", + "minimum": 0, + "maximum": 20, + "default": 0, + "x-stoplight": { + "id": "aibykf8ozjqmt" } } - }, - "required": [ - "id" - ] + } }, - "workflow-task-assignee": { - "title": "Workflow Task Assignee", - "type": "object", - "description": "Task assignee. Based on the \"type\", further details can be retrieved.
For ex. for \"type\"=\"user\", \"user\" property is available.
For \"projectCreator\" and \"projectManager\" no other property is available.", - "properties": { - "type": { - "type": "string", - "enum": [ - "user", - "group", - "vendorOrderTemplate", - "projectCreator", - "projectManager" - ] - }, - "user": { - "$ref": "#/components/schemas/user", - "description": "
default
User in the account
", - "x-default-field": true - }, - "group": { - "$ref": "#/components/schemas/group", - "description": "
default
Group of users.
", - "x-default-field": true - }, - "vendorOrderTemplate": { - "$ref": "#/components/schemas/vendor-order-template", - "description": "
default
A vendor oder template.
", - "x-default-field": true - } + "translation-search-TM-penalties": { + "title": "Translation TM Penalties", + "x-stoplight": { + "id": "6kx5w2gbj2696" }, - "required": [ - "type" - ] - }, - "workflow-task-assignee-request": { - "title": "Workflow Task Assignee Request", "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "user", - "group", - "vendorOrderTemplate", - "projectCreator", - "projectManager" - ] - }, - "user": { - "$ref": "#/components/schemas/user-request" - }, - "group": { - "$ref": "#/components/schemas/group-request" + "standardPenalties": { + "$ref": "#/components/schemas/translation-search-standard-penalties", + "x-stoplight": { + "id": "q58i9rha03e0z" + } }, - "vendorOrderTemplate": { - "$ref": "#/components/schemas/vendor-order-template-request" + "translationUnitStatusPenalties": { + "$ref": "#/components/schemas/translation-search-unit-status-penalties", + "x-stoplight": { + "id": "8pzly4obx7tiz" + } } - }, - "required": [ - "type" - ] + } }, - "workflow-task-configuration": { - "title": "Workflow Task Configuration", + "concordance-search-TM-penalties": { + "title": "Concordance Search TM Penalties", + "x-stoplight": { + "id": "6kx5w2gbj2696" + }, "type": "object", - "description": "Properties of a workflow task.", "properties": { - "scope": { - "$ref": "#/components/schemas/task-configuration-scope" - }, - "assignees": { - "$ref": "#/components/schemas/workflow-task-assignee" - }, - "isSkipped": { - "type": "boolean", - "nullable": true, - "description": "
default
", - "x-default-field": true + "standardPenalties": { + "$ref": "#/components/schemas/translation-concordance-search-standard-penalties", + "x-stoplight": { + "id": "q58i9rha03e0z" + } }, - "taskTemplate": { - "$ref": "#/components/schemas/workflow-task-template" + "translationUnitStatusPenalties": { + "$ref": "#/components/schemas/translation-concordance-search-unit-status-penalties", + "x-stoplight": { + "id": "8pzly4obx7tiz" + } } - }, - "required": [ - "scope", - "taskTemplate" - ] + } }, - "workflow-phase": { - "title": "Workflow Phase", + "translation-concordance-search-resource": { + "title": "Translation Concordance Search Resource", + "x-stoplight": { + "id": "20ixo2ym2xerq" + }, "type": "object", - "description": "A set of workflow steps which work together towards a localization outcome.", + "required": [ + "resourceId", + "type" + ], "properties": { - "id": { + "resourceId": { "type": "string", - "description": "The phase identfier." + "x-stoplight": { + "id": "9rewrlat7xg1p" + }, + "description": "The resource identifier." }, - "name": { + "type": { "type": "string", - "description": "
default
The phase name.
", - "x-default-field": true + "x-stoplight": { + "id": "ablx3ujgx5zyg" + }, + "enum": [ + "TM" + ], + "description": "The resource type." } - }, - "required": [ - "id" - ] + } }, - "workflow-task-configuration-request": { - "title": "Workflow Task Configuration Request", + "language-direction-general-request": { + "title": "Language Direction General Request", + "x-stoplight": { + "id": "0pezqwl74njpv" + }, "type": "object", - "description": "A task configuration request.", + "description": "The language directions model used for creating or updating a resource.", "properties": { - "taskTemplate": { - "$ref": "#/components/schemas/object-id" - }, - "isSkipped": { - "type": "boolean" - }, - "assignees": { - "type": "array", - "description": "Specifies the list of assignees for the task template. \n
When the 'isSkipped' field is set to 'true', an empty list of assignees should be specified.\r\n
Total assignee count is limited. See more at [Assigning users and groups to workflow tasks](https://docs.rws.com/791595/743481/trados-enterprise---accelerate/assigning-users-and-groups-to-workflow-tasks) point 5e.", - "items": { - "$ref": "#/components/schemas/workflow-task-assignee-request" + "sourceLanguage": { + "$ref": "#/components/schemas/source-language-request", + "x-stoplight": { + "id": "ik01rev5dxdym" } }, - "scope": { - "$ref": "#/components/schemas/task-configuration-scope-request" + "targetLanguage": { + "$ref": "#/components/schemas/target-language-request", + "x-stoplight": { + "id": "72zo0gp14dpdp" + } } - }, - "required": [ - "taskTemplate", - "isSkipped", - "assignees", - "scope" - ] + } }, - "workflow-task-template": { - "title": "Workflow Task Template", + "translation-lookup-input-request": { + "title": "Translation Lookup Input Request", + "x-stoplight": { + "id": "k91lzmo3d80y4" + }, "type": "object", + "description": "The translation input.", + "required": [ + "content", + "contentType" + ], "properties": { - "id": { - "type": "string", - "description": "The workflow task template identifier." - }, - "name": { - "type": "string", - "description": "
default
The workflow task template name.
", - "x-default-field": true + "content": { + "type": [ + "string" + ], + "x-stoplight": { + "id": "d90k7nxt66cq9" + }, + "description": "A plain text phrase or a BCM fragment with a single segment serialized as JSON string." }, - "apiInternalId": { + "contentType": { "type": "string", "x-stoplight": { - "id": "dd6vytpa9vo41" + "id": "7lkm3ehfoeipb" }, - "description": "
default
Unique identifier of workflow task templates\r\n
" - }, - "description": { - "type": "string" - }, - "canSkip": { - "type": "boolean", - "nullable": true - }, - "requiresAssignment": { - "type": "boolean", - "nullable": true - }, - "taskType": { - "$ref": "#/components/schemas/task-type" - }, - "phase": { - "$ref": "#/components/schemas/workflow-phase" + "enum": [ + "text", + "bcmFragment" + ], + "description": "The content type." } - }, - "required": [ - "id" - ] + } }, - "workflow-template": { - "title": "Workflow Template", + "translation-concordance-input-request": { + "title": "Translation Concordance Input Request", + "x-stoplight": { + "id": "gzgvhcqrx5qjh" + }, "type": "object", + "required": [ + "content" + ], "properties": { - "id": { - "type": "string", - "description": "The workflow template identifier." - }, - "name": { - "type": "string", - "description": "
default
The workflow template name.
", - "x-default-field": true - }, - "description": { + "content": { "type": "string", - "description": "The workflow template description." - }, - "taskTemplates": { - "type": "array", - "items": { - "$ref": "#/components/schemas/workflow-task-template" - } - }, - "phases": { - "type": "array", - "items": { - "$ref": "#/components/schemas/workflow-phase" - } - }, - "transitions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/workflow-template-transition" - } + "x-stoplight": { + "id": "8t10luex044ia" + }, + "description": "Text to search for." } - }, - "required": [ - "id" - ] + } }, - "workflow-template-transition": { - "title": "Workflow Template Transition", + "translation-tu-update-input-request": { + "title": "Translation TU Input Request", + "x-stoplight": { + "id": "wstvyd816xr0e" + }, "type": "object", + "required": [ + "content" + ], "properties": { - "from": { - "$ref": "#/components/schemas/workflow-template-transition-node", - "description": "
default
", - "x-default-field": true - }, - "to": { - "$ref": "#/components/schemas/workflow-template-transition-node", - "description": "
default
", - "x-default-field": true - }, - "condition": { - "$ref": "#/components/schemas/workflow-template-transition-condition" + "content": { + "type": "string", + "x-stoplight": { + "id": "srf6ctoqfhljn" + }, + "description": "The Translation Unit update content as a BCM fragment serialized in JSON string." } } }, - "workflow-template-transition-condition": { - "title": "Workflow Template Transition Condition", + "zip-file-export-request": { + "title": "Export Project Files Request", "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "outcome", - "expression" - ], - "nullable": true, - "description": "
default
", - "x-default-field": true + "referenceFiles": { + "$ref": "#/components/schemas/zip-file-export-reference-files-request" }, - "value": { - "type": "string", - "description": "
default
", - "x-default-field": true + "targetFiles": { + "$ref": "#/components/schemas/zip-file-export-target-files-request" } } }, - "workflow-template-transition-node": { - "title": "Workflow Template Transition Node", + "zip-file-export-reference-files-request": { + "title": "Export Project Reference Files Request", "type": "object", + "description": "Reference files associated with the project.", "properties": { - "type": { - "type": "string", - "enum": [ - "taskTemplate", - "start", - "end" - ], - "description": "
default
", - "x-default-field": true - }, - "taskTemplate": { - "$ref": "#/components/schemas/workflow-task-template", - "description": "
default
", - "x-default-field": true + "include": { + "type": "boolean", + "description": "Add reference files to the export package.", + "default": true } } }, - "workflow-update-request": { - "title": "Workflow Update Request", + "zip-file-export-target-files-request": { + "title": "Export Project Target Files Request", "type": "object", - "description": "A model to update a workflow.", + "description": "Target files associated with the project.", "properties": { - "name": { - "type": "string", - "description": "The workflow name." - }, - "description": { + "includeVersions": { "type": "string", - "description": "The workflow description." + "enum": [ + "currentVersion", + "none", + "nativeVersion" + ], + "description": "Include target files with these versions into the export.", + "default": "currentVersion", + "x-stoplight": { + "id": "7s4voozws4tse" + } }, - "taskConfigurations": { + "targetLanguages": { "type": "array", - "description": "The task configurations.", + "description": "Include target files for the specified languages (e.g., 'en-US', 'de-DE'). Only one target language is supported when `downloadFlat` is set to `true`.", "items": { - "$ref": "#/components/schemas/workflow-task-configuration-request" + "x-stoplight": { + "id": "3pr8zsp16si53" + }, + "type": "string" } + }, + "downloadFlat": { + "type": "boolean", + "x-stoplight": { + "id": "ebjydtoffk5xl" + }, + "description": "If this flag is set to `true`, folder structure will reflect exactly the file paths. If the flag is set to `false`, a ZIP folder will be generated with a structure similar to the one provided by Trados.", + "default": false } } }, - "well-known-jwks-response": { - "title": "Well Known Keys Response", - "x-stoplight": { - "id": "1owp0jo4rmrg7" - }, + "zip-file-export-response": { + "title": "Project Files export poll response", "type": "object", + "required": [ + "exportId", + "state" + ], "properties": { - "keys": { - "$ref": "#/components/schemas/list-jwks", - "x-stoplight": { - "id": "dbkidlpmb0wk4" - }, - "description": "The list of public keys." + "exportId": { + "type": "string", + "description": "The identifier of the export operation" + }, + "state": { + "description": "The status of the export", + "default": "created", + "enum": [ + "created", + "processing", + "done", + "error" + ] } } } diff --git a/articles/LCPublicAPI/docs/API-rate-limits.md b/articles/LCPublicAPI/docs/API-rate-limits.md index 709f4de..6581f67 100644 --- a/articles/LCPublicAPI/docs/API-rate-limits.md +++ b/articles/LCPublicAPI/docs/API-rate-limits.md @@ -32,6 +32,11 @@ each tenant is entitled to: 2. Up to 10 API requests per minute. 3. Up to 1000 API requests per day. +#### Import / Export Translation Memory limits: +1. Up to 2 API requests per second. +2. Up to 10 API requests per minute. +3. Up to 2000 API requests per day. + #### Project Files Rate Limits For each of the API operations listed below: diff --git a/articles/LCPublicAPI/docs/Language-codes.md b/articles/LCPublicAPI/docs/Language-codes.md index 18a84df..5c73090 100644 --- a/articles/LCPublicAPI/docs/Language-codes.md +++ b/articles/LCPublicAPI/docs/Language-codes.md @@ -10,4 +10,4 @@ For example the Trados Cloud Platform API can return the same language code but All 3 variants are equivalent. -When making a request to the Trados Cloud Platform API, you should still ensure the correct casing of language codes, to avoid any unexpected situations. +When making a request to the Trados Cloud Platform API, you should still ensure the correct casing of language codes, to avoid any unexpected situations. \ No newline at end of file diff --git a/articles/LCPublicAPI/docs/Whats-New.md b/articles/LCPublicAPI/docs/Whats-New.md index 8a5fb7d..dc00a91 100644 --- a/articles/LCPublicAPI/docs/Whats-New.md +++ b/articles/LCPublicAPI/docs/Whats-New.md @@ -1,6 +1,52 @@ # What's new -
+
+ +## 10 September 2025 +- With this release we deliver [Lookup](../reference/Public-API.v1.json/paths/~1translations~1lookup/post), [Concordance](../reference/Public-API.v1.json/paths/~1translations~1concordance/post), [Add](../reference/Public-API.v1.json/paths/~1translations~1translation-unit/post) and [Update](../reference/Public-API.v1.json/paths/~1translations~1translation-unit/put) translation units to a translation memory. See [this](./translations/Translations.md) page for more details. +- You can now [obtain](../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/get) and [update](../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/put) the resources sequence information for a Translation Engine. +- A new project event `PROJECT.STARTED` has been added. See [this](./webhooks/Webhooks-payload.md) page for more details. + + +## 18 August 2025 + +- The new, modernized Trados Cloud Platform SDK for Java is now available. See the upgrade guide [here](../docs/api-clients/java/Java-Client-Upgrade-Guide.md). + +## 12 August 2025 + +- You can now get word count and cost estimation analysis of files without the need to create a project. The functionality is accessible via the [Request File Analysis](../reference/Public-API.v1.json/paths/~1files~1analysis/post) and [Poll File Analysis](../reference/Public-API.v1.json/paths/~1files~1analysis~1{operationId}/get) endpoints. +- As previously announced, the `languageProcessingRuleId` parameter is now mandatory for [Update Translation Engine](../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/put) endpoint. +- We fixed various bugs. + +## 15 July 2025 +- You can now add the `systemStatus` property on termbase entries. See [Update Termbase Entry](../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1entries~1{entryId}/put). +- We've improved the documentation around zip files on [Add Source File](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files/post) and [Attach Source File](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files~1attach-files/post) endpoints. +- As a reminder, we want to let our users know that the field `languageProcessingRuleId` under [Update Translation Engine](../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/put) endpoint will be mandatory. +- [Import Termbase](../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1imports/post) and [Poll Termbase Import](../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1imports~1{importId}/get) endpoints will return `pending` instead of `queued` for the status. This change is scheduled to take effect no sooner than six months from now. + +## 8 May 2025 +- You can now download the target files associated with a project in a ZIP format. This functionality is accessible through three endpoints: [Export](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1files~1exports/post), [Poll](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1files~1exports~1{exportId}/get), and [Download](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1files~1exports~1{exportId}~1download/get). +- With this release we deliver the [Create](../reference/Public-API.v1.json/paths/~1pricing-models/post), [Update](../reference/Public-API.v1.json/paths/~1pricing-models~1{pricingModelId}/put) and [Delete](../reference/Public-API.v1.json/paths/~1pricing-models~1{pricingModelId}/delete) pricing model endpoints. Together with these, several changes were required to correct the pricing model response: + - `name` : changed from required to default. + - `additionalCosts.volumeUnitType` changed from required to non required. + - `additionalCosts.conditionalCostType` changed from required to non required. + - `additionalCosts.costOperator` changed from required to non required. + - `additionalCosts.costVariable` changed from required to non required. + - `additionalCosts.operand` changed from required to non required. + - `perTargetLanguage` and `perFile` cost types have been removed from `languageCosts` to clean up the structure. + +- We have expanded the cost types by introducing two new values: **adhoc** and **adhoc volume**. +- Import and Export TM endpoints are now subject to API limits. For more details, please refer to [this page](../docs/API-rate-limits.md). +- We updated the [Java Client samples](../docs/api-clients/java/Java-Samples.md) to reflect the usage of the latest version. +- We fixed various bugs. + +## 1 April 2025 +- As part of the Connected AI feature, we have added the following updates and new endpoints: + - We have introduced a new endpoint for listing [Large Language Models](../reference/Public-API.v1.json/paths/~1connected-ai~1llm-configurations/get) (LLMs). + - We have added the functionality to [update your translation engines](../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/put) with the new LLM resource type. +- We have added the source word count to the [List Source Files](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files/get) endpoint. +- We fixed various bugs. + ## 10 March 2025 diff --git a/articles/LCPublicAPI/docs/api-clients/java/Java-Client-Upgrade-Guide.md b/articles/LCPublicAPI/docs/api-clients/java/Java-Client-Upgrade-Guide.md new file mode 100644 index 0000000..e0c2359 --- /dev/null +++ b/articles/LCPublicAPI/docs/api-clients/java/Java-Client-Upgrade-Guide.md @@ -0,0 +1,169 @@ +--- +stoplight-id: b309fcde3938d +--- + + +# Trados Cloud Platform SDK - Migration Guide v25.x.x + +## Executive Summary + +The Trados Cloud Platform API SDK has transitioned from a "fat JAR" to a "light JAR" architecture, delivering faster downloads, improved dependency management, and better build performance. For most users, migration requires only a version update in your build configuration. + + +**What Changed:** +1. **Modernized Dependencies:** JUnit 4 → 5, Apache HttpClient 4 → 5, Commons Lang 2→3 +2. **OpenAPI Generator:** Version 6.5.0 → 7.14.0 with enhanced nullability annotations +3. **Enhanced Features:** New `LCContext.executeInScope()` methods for improved tenant/trace context management +4. **Updated Tooling:** Latest versions of Jackson, Feign, and other core libraries + +## Step-by-Step Migration Guide + +### For Standard API Usage (Most Users): + +If you're using the generated SDK classes like `ProjectApi`, `SourceFileApi`, etc., migration is straightforward: + +1. Update SDK version to 25.x.x in your build configuration. +2. Run your build command to verify everything works. +3. Review and update your code for compatibility with the new OpenAPI Generator output (see the section [OpenAPI Generator & Generated Code Changes](#openapi-generator--generated-code-changes) below for details). +4. Your API calls should work as before, but review and resolve any compilation issues related to the above changes. + +```java +// Your existing code continues to work +ProjectApi projectApi = languageCloudClientProvider.getProjectClient(); +Project project = projectApi.createProject(projectCreateRequest, queryParams); +``` +## Troubleshooting + +**Most Common Issue**: Build fails after version update +**Solution**: Run `mvn dependency:tree` to check for dependency conflicts + +**Issue**: `ClassNotFoundException: feign.Client` +**Solution**: Verify Feign dependencies: `mvn dependency:tree | grep feign` + +**Issue**: `NoClassDefFoundError` for HTTP client classes +**Solution**: Update imports from `org.apache.http` to `org.apache.hc.core5.http` + +**Issue**: Commons Lang methods not found +**Solution**: Update imports from `org.apache.commons.lang` to `org.apache.commons.lang3` + +## Success Validation + +**For Standard Users:** +1. Clean build: `mvn clean install` succeeds +2. API functionality works as before +3. Faster builds and smaller downloads + +**For Advanced Users:** +- Run `mvn dependency:tree` - no conflicts shown +- Test application startup and core functionality + +### Advanced Scenarios + +
+Click here if you use direct dependency imports or custom configurations + +#### Direct Dependency Usage: +- Update HttpClient imports: `org.apache.http` → `org.apache.hc.core5.http` +- Update Commons Lang imports: `org.apache.commons.lang` → `org.apache.commons.lang3` +- Use dependency exclusions if you encounter version conflicts + +#### Custom Classpath Management: +1. Review current JAR collection and identify SDK dependencies +2. Ensure all transitive dependencies are included in classpath +3. Test application startup and core functionality +4. Consider migrating to Maven/Gradle for simplified dependency management + +#### Test Framework Updates: +- **JUnit Migration**: JUnit 4 → JUnit 5 (Jupiter) + - Update test annotations: `@Test` imports change from `org.junit.Test` → `org.junit.jupiter.api.Test` + - Replace `@Before/@After` with `@BeforeEach/@AfterEach` + - Update assertion imports: `org.junit.Assert` → `org.junit.jupiter.api.Assertions` +- **Mockito Updates**: Version 3.x → 5.x + - Update imports if using `mockito-junit-jupiter` directly + - Verify mock behavior with newer Mockito features + +#### OpenAPI Generator & Generated Code Changes: +- **OpenAPI Generator**: Version 6.5.0 → 7.14.0 (major version upgrade) +- **Generated Code Improvements**: Enhanced code generation with: + - **New Nullability Annotations**: `@javax.annotation.Nullable` and `@javax.annotation.Nonnull` annotations for better null safety + - **Bean Validation Support**: Enhanced validation annotations for API parameters + - **Improved Code Quality**: Updated Mustache templates producing cleaner, more maintainable generated code + - **Better Method Naming**: Collection helper methods use improved naming conventions for better readability + - **Enhanced Enum Handling**: Improved enum comparison and naming with configurable case sensitivity support + - **Modernized Templates**: Generated classes follow current Java best practices + +#### Benefits: +- Generated classes are easier to use and understand +- Better IDE support with improved nullability annotations +- More consistent naming conventions across generated code +- Enhanced type safety and validation + +
+ +## Validation & Success Criteria + +**For Standard Users:** +1. **Clean Build**: Your project builds successfully +2. **API Functionality**: SDK operations work as before - no code changes needed +3. **Performance**: Faster builds and smaller downloads + +**Advanced Validation:** +- **Dependency Check**: `mvn dependency:tree` shows no conflicts +- **Custom Configurations**: Test application startup and functionality + +## Reference: Key Dependencies + +### High-Impact Dependencies (Most Likely to Affect You) + +| Library | Previous | New | Notes | +|---------------------|----------|--------|------------------------------| +| Feign (HTTP Client) | 10.11 | 13.6 | Core SDK communication | +| Jackson (JSON) | 2.10.3 | 2.19.1 | API serialization | +| Apache HttpClient | 4.5.8 | 5.5 | HTTP transport | +| JUnit (Tests) | 4.13 | 5.13.2 | Test framework modernization | + +
+View Complete Dependency List + +**All Updated Dependencies:** + +| GroupId | ArtifactId | Previous Version | New Version | Impact | +|-----------------------------------|---------------------------|------------------|-------------|------------| +| io.github.openfeign | feign-core | 10.11 | 13.6 | **High** | +| io.github.openfeign | feign-jackson | 10.11 | 13.6 | **High** | +| io.github.openfeign | feign-slf4j | 10.11 | 13.6 | **High** | +| io.github.openfeign | feign-form | 3.8.0 | 13.6 | **High** | +| io.github.openfeign | feign-okhttp | 10.11 | 13.6 | **High** | +| com.fasterxml.jackson.core | jackson-core | 2.10.3 | 2.19.1 | **Medium** | +| com.fasterxml.jackson.core | jackson-annotations | 2.10.3 | 2.19.1 | **Medium** | +| com.fasterxml.jackson.core | jackson-databind | 2.10.3 | 2.19.1 | **Medium** | +| org.apache.httpcomponents.client5 | httpclient5 | 4.5.8* | 5.5 | **Medium** | +| com.fasterxml.jackson.datatype | jackson-datatype-jsr310 | 2.10.3 | 2.19.1 | Low | +| com.fasterxml.jackson.datatype | jackson-datatype-joda | 2.0.4 | 2.19.1 | Low | +| org.openapitools | jackson-databind-nullable | 0.2.1 | 0.2.6 | Low | +| org.apache.commons | commons-lang3 | 2.6* | 3.18.0 | Low | +| com.github.spotbugs | spotbugs-annotations | 3.0.2* | 4.9.3 | Low | +| javax.annotation | javax.annotation-api | 1.0* | 1.3.2 | Low | +| org.projectlombok | lombok | RELEASE | 1.18.38 | Low | +| org.slf4j | slf4j-simple | - | 2.0.13 | Low | + +
+ +*Different groupId or artifactId in previous version + +### Test Dependencies + +| GroupId | ArtifactId | Previous Version | New Version | Impact | +|-------------------|-----------------------|------------------|-------------|----------| +| org.junit.jupiter | junit-jupiter-engine | 4.13* | 5.13.2 | **High** | +| org.mockito | mockito-junit-jupiter | 3.12.1* | 5.18.0 | **High** | + +*Different groupId or artifactId in previous version + +### Most Important Changes + +**Critical**: Maven Shade Plugin removed (enables fat→light JAR transition) +**Modernization**: All dependencies updated to current versions +**Code Quality**: OpenAPI Generator 6.5.0 → 7.14.0 with better nullability support + + diff --git a/articles/LCPublicAPI/docs/api-clients/java/Java-Client.md b/articles/LCPublicAPI/docs/api-clients/java/Java-Client.md index 6e4f1d5..3d6d9f2 100644 --- a/articles/LCPublicAPI/docs/api-clients/java/Java-Client.md +++ b/articles/LCPublicAPI/docs/api-clients/java/Java-Client.md @@ -1,6 +1,6 @@ # Java Client -This client library is targeting Java 11 and above and it represents a collection of API clients structured in accordance with the API documentation, meaning each section will have its own client. +This client library targets Java 11 and above. It provides API clients organized by API documentation sections. The generated Java clients are based on [OpenFeign](https://spring.io/projects/spring-cloud-openfeign). @@ -8,7 +8,7 @@ The generated Java clients are based on [OpenFeign](https://spring.io/projects/s > The Java Client library is auto-generated from the current API contracts, so any updates to the contract will reflect as changes in the SDK client. Minor version increases do not guarantee backwards compatibility. ## Installation -You can add this library to your project as a [Maven](https://search.maven.org/artifact/com.rws.lt.lc.public-api/lc-public-api-sdk/1.1.0/jar) dependency. +You can add this library to your project as a [Maven](https://search.maven.org/artifact/com.rws.lt.lc.public-api/lc-public-api-sdk/24.0.9/jar) dependency. Include the client library in the `pom.xml`: @@ -16,19 +16,23 @@ Include the client library in the `pom.xml`: com.rws.lt.lc.public-api lc-public-api-sdk - 1.1.0 + 24.0.9 ``` > Make sure to always reference the latest available version. Check the [Maven Central Repository](https://search.maven.org/artifact/com.rws.lt.lc.public-api/lc-public-api-sdk) for more info. ## Usage -We will take the project creation flow as an example to show how the API clients can be used. +We will use the project creation flow as an example to show how the API clients can be used. -The API client can be initialized as required, based on the endpoints you are targeting. -The authorization parameter is not required when calling client methods, if you previously added authorization when you instantiated the client. +API clients can be initialized individually based on the endpoints you need to target. +If authorization was provided when instantiating the client, it's not required again when calling its methods. -For example, if you need to make use of the Project features, you may instantiate a Project client, as follows: +Trados Cloud Platform operates in multiple regions; ensure you select the correct region for your integration. +*See the [Multi Region](../../../docs/Multi-Region.md) page for more details.* + +The default region for `LanguageCloudClientProvider` is `eu`, but you can override it. +For example, to use Project features, instantiate a Project client like this: ```java @@ -36,7 +40,10 @@ For example, if you need to make use of the Project features, you may instantiat ServiceCredentials serviceCredentials = new ServiceCredentials("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", "YOUR_TENANT_ID"); // instantiate the LanguageCloudClientProvider -LanguageCloudClientProvider languageCloudClientProvider = new LanguageCloudClientProvider(serviceCredentials); +LanguageCloudClientProvider languageCloudClientProvider = LanguageCloudClientProvider.builder() + .withRegionCode("ca") // default is "eu" + .withServiceCredentials(serviceCredentials) + .build(); // instantiate the client ProjectApi projectApi = languageCloudClientProvider.getProjectClient(); @@ -49,8 +56,11 @@ ProjectCreateRequest projectCreateRequest = new ProjectCreateRequest(); projectCreateRequest.setName("YOUR_PROJECT_NAME"); projectCreateRequest.setDueBy(DateTime.parse("2025-01-01T00:00:00.000Z")); projectCreateRequest.setProjectTemplate(new ObjectIdRequest().id("YOUR_PROJECT_TEMPLATE_ID")); - -Project projectCreateResponse = projectApi.createProject(projectCreateRequest, new HashMap<>()); + +// Set the `fields` query parameter so the response is populated with `projectPlan.taskConfigurations` +ProjectApi.CreateProjectQueryParams queryParams = new ProjectApi.CreateProjectQueryParams(); +queryParams.fields("projectPlan.taskConfigurations"); +Project projectCreateResponse = projectApi.createProject(projectCreateRequest, queryParams); ``` #### 2. Attach a source file to the project: @@ -59,16 +69,15 @@ Projects that do not contain source files cannot be started. ```java SourceFileApi sourceFileApi = languageCloudClientProvider.getSourceFileClient(); - + SourceFileRequest properties = new SourceFileRequest(); -properties.setLanguage("en-US"); +properties.setLanguage(new LanguageRequest("en-US")); properties.setName("YOUR_TEXT_SOURCE_FILE"); properties.setRole(SourceFileRequest.RoleEnum.TRANSLATABLE); properties.setType(SourceFileRequest.TypeEnum.NATIVE); -File file = new File("YOUR_TEXT_SOURCE_FILE_PATH"); - -SourceFile sourceFile = sourceFileApi.addSourceFile("YOUR_PROJECT_ID", file, properties); +File file = new File("YOUR_TEXT_SOURCE_FILE_PATH"); +SourceFile sourceFile = sourceFileApi.addSourceFile("YOUR_PROJECT_ID", properties, file); ``` #### 3. Start the project: diff --git a/articles/LCPublicAPI/docs/api-clients/java/Java-Samples.md b/articles/LCPublicAPI/docs/api-clients/java/Java-Samples.md index a90f449..f1af7f6 100644 --- a/articles/LCPublicAPI/docs/api-clients/java/Java-Samples.md +++ b/articles/LCPublicAPI/docs/api-clients/java/Java-Samples.md @@ -4,35 +4,47 @@ The console application sample is available for download on [GitHub](https://github.com/RWS/language-cloud-public-api-samples/tree/main/Java/PublicApi.Sample.Console.Java). -The sample contains 3 examples of how to instantiate and work with an API client provided by the Trados Cloud Platform SDK. You can either use the supplied provider, or handle the authentication on you own: +The sample contains three examples of how to instantiate and work with an API client provided by the Trados Cloud Platform SDK. You can either use the supplied provider or handle the authentication yourself: -#### 1. Instantiating a client using credentials +#### 1. Instantiating a client using service credentials -You can instantiate a client using the supplied `LanguageCloudClientProvider` class. This method requires you provide a `ServiceCredentials` object, which should contain your `clientID`, `clientSecret` and the `tenant`. *See the [Authentication](../../../docs/Authentication.md) page for more details.* +You can instantiate a client using the provided `LanguageCloudClientProvider.builder()` pattern. + +This method requires you to provide a `ServiceCredentials` object containing your `clientID`, `clientSecret`, and `tenant`. *See the [Authentication](../../../docs/Authentication.md) page for more details.* ```java import com.rws.lt.lc.publicapi.sdk.api.GroupApi; import com.rws.lt.lc.publicapi.sdk.auth.ServiceCredentials; import com.rws.lt.lc.publicapi.sdk.client.LanguageCloudClientProvider; +import com.rws.lt.lc.publicapi.sdk.model.Group; import com.rws.lt.lc.publicapi.sdk.model.ListGroupsResponse; + +import java.util.stream.Collectors; ... //instantiate the credentials ServiceCredentials serviceCredentials = new ServiceCredentials("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", "YOUR_TENANT_ID"); // instantiate the LanguageCloudClientProvider -LanguageCloudClientProvider languageCloudClientProvider_clientIdClientSecret = new LanguageCloudClientProvider(serviceCredentials); +LanguageCloudClientProvider languageCloudClientProvider = LanguageCloudClientProvider + .builder() + .withRegion("eu") // optional (default is "eu") + .withServiceCredentials(serviceCredentials) + .build(); // instantiate the client -GroupApi groupApi = languageCloudClientProvider_clientIdClientSecret.getGroupClient(); +GroupApi groupApi = languageCloudClientProvider.getGroupClient(); // use the client ListGroupsResponse groupsResponse = groupApi.listGroups(new GroupApi.ListGroupsQueryParams()); System.out.println("Groups:"); -System.out.println(groupsResponse.getItems()); +System.out.println( + groupsResponse.getItems().stream() + .map(Group::getName) + .collect(Collectors.joining("\n"))); ``` - *\*Using this method, a unique TraceID will be generated on each request.* +*\*Using this method, a unique TraceID will be generated for each request.* @@ -43,18 +55,20 @@ System.out.println(groupsResponse.getItems()); #### 2. Instantiating a client using context scoping -This method allows you to make an API call with 2 different users, using the same client instance. +This method allows you to make API calls with multiple different service credentials using the same client instance. -We provide an `LCContext` which exposes some scoping options. You can use this to scope your API calls in different contexts. The sample contains an example with 2 different users: +We provide an `LCContext` which exposes scoping options. You can use this to scope your API calls in different contexts. The sample contains an example with two different service credentials: ```java import com.rws.lt.lc.publicapi.sdk.api.UserApi; import com.rws.lt.lc.publicapi.sdk.auth.ServiceCredentials; import com.rws.lt.lc.publicapi.sdk.client.LanguageCloudClientProvider; +import com.rws.lt.lc.publicapi.sdk.context.ContextKeys; import com.rws.lt.lc.publicapi.sdk.context.LCContext; import com.rws.lt.lc.publicapi.sdk.model.ListUsersResponse; +import com.rws.lt.lc.publicapi.sdk.model.User; -import java.util.HashMap; +import java.util.stream.Collectors; ... // define credentials for your first user @@ -64,34 +78,79 @@ ServiceCredentials credentials_1 = new ServiceCredentials("YOUR_CLIENT_ID_1", "Y ServiceCredentials credentials_2 = new ServiceCredentials("YOUR_CLIENT_ID_2", "YOUR_CLIENT_SECRET_2", "YOUR_TENANT_ID_2"); // instantiate the LanguageCloudClientProvider -LanguageCloudClientProvider languageCloudClientProvider_contextAuth = new LanguageCloudClientProvider(); +LanguageCloudClientProvider languageCloudClientProvider_contextAuth = LanguageCloudClientProvider + .builder() + .withRegion("eu") // optional (default is "eu") + .build(); // instantiate the client without credentials UserApi userApi = languageCloudClientProvider_contextAuth.getUserClient(); -// create a context scope and use the client.You can also provide your own traceId -try (LCContext lcContext = LCContext.beginScope(credentials_1, "trace-id-1");) { - ListUsersResponse usersResponse = userApi.listUsers(UserApi.ListUsersQueryParams()); - System.out.println("Users:"); - System.out.println(usersResponse.getItems()); - } catch (Exception e) { - System.out.println("Error when retrieving users with credentials saved to context."); - } - -// create a context scope and use the client.You can also provide your own traceId - try (LCContext lcContext = LCContext.beginScope(credentials_2, "trace-id-2");) { - ListUsersResponse usersResponse = userApi.listUsers(UserApi.ListUsersQueryParams()); - System.out.println("Users:"); - System.out.println(usersResponse.getItems()); - } catch (Exception e) { - System.out.println("Error when retrieving users with credentials saved to context."); - e.printStackTrace(); - } + +Runnable listUsersExecutable = () -> { + ListUsersResponse usersResponse = userApi.listUsers(new UserApi.ListUsersQueryParams()); + System.out.println(LCContext.getFromLCContext(ContextKeys.TRACE_ID_KEY) + " >> Users for tenant " + LCContext.getFromLCContext(ContextKeys.TENANT_ID_KEY) + " are:"); + System.out.println(usersResponse.getItems().stream().map(User::getId).collect(Collectors.joining("\n"))); +}; + +// create a context scope and execute inside with tenant 1 +LCContext.executeInScope(listUsersExecutable, serviceCredentials1, "trace-id-1"); + +System.out.println("--------------------------------------------------"); +// create a context scope and execute inside with tenant 2 +LCContext.executeInScope(listUsersExecutable, serviceCredentials2, "trace-id-2"); ``` -#### 3. Instantiating a client using custom authentication +#### 3. Instantiating a client with App service credentials + +This method allows you to make an API call from an App for different tenants using the same client instance. See more at [Extensibility Docs](https://eu.cloud.trados.com/lc/extensibility-docs/937a747af31a0-concepts#apps). + + +We provide an `LCContext` which exposes scoping options. You can use this to scope your API calls in different contexts. The sample contains an example with an App installed in multiple tenants: + +```java +import com.rws.lt.lc.publicapi.sdk.api.UserApi; +import com.rws.lt.lc.publicapi.sdk.auth.ServiceCredentials; +import com.rws.lt.lc.publicapi.sdk.client.LanguageCloudClientProvider; +import com.rws.lt.lc.publicapi.sdk.context.ContextKeys; +import com.rws.lt.lc.publicapi.sdk.context.LCContext; +import com.rws.lt.lc.publicapi.sdk.model.ListUsersResponse; +import com.rws.lt.lc.publicapi.sdk.model.User; + +import java.util.stream.Collectors; +... + +//instantiate the credentials +ServiceCredentials serviceCredentials = new ServiceCredentials("YOUR_CLIENT_ID_1", "YOUR_CLIENT_SECRET_1"); + +// instantiate the LanguageCloudClientProvider +LanguageCloudClientProvider languageCloudClientProvider_contextAuth = LanguageCloudClientProvider + .builder() + .withRegion("eu") // optional (default is "eu") + .withServiceCredentials(serviceCredentials) + .build(); + +// instantiate the client without credentials +UserApi userApi = languageCloudClientProvider_contextAuth.getUserClient(); + + +Runnable listUsersExecutable = () -> { + ListUsersResponse usersResponse = userApi.listUsers(new UserApi.ListUsersQueryParams()); + System.out.println(LCContext.getFromLCContext(ContextKeys.TRACE_ID_KEY) + " >> Users for tenant " + LCContext.getFromLCContext(ContextKeys.TENANT_ID_KEY) + " are:"); + System.out.println(usersResponse.getItems().stream().map(User::getId).collect(Collectors.joining("\n"))); +}; + +// create a context scope and execute inside with tenant 1 +LCContext.executeInScope(listUsersExecutable, TENANT_VALUE_1, "trace-id-1"); + +System.out.println("--------------------------------------------------"); +// create a context scope and execute inside with tenant 2 +LCContext.executeInScope(listUsersExecutable, TENANT_VALUE_2, "trace-id-2"); + +``` +#### 4. Instantiating a client using custom authentication -If you would like to have complete control over the client authentication, you can use provide a CustomServiceAuthenticationHandler: +If you want complete control over client authentication, you can provide a `CustomServiceAuthenticationHandler`: ```java import com.rws.lt.lc.publicapi.sdk.api.ProjectApi; @@ -101,24 +160,34 @@ import com.rws.lt.lc.publicapi.sdk.auth.ServiceCredentials; import com.rws.lt.lc.publicapi.sdk.client.LanguageCloudClientProvider; import com.rws.lt.lc.publicapi.sdk.model.ListProjectsResponse; +import java.util.List; import java.util.UUID; ... -AuthenticationService authenticationService = new AuthenticationService("grant_type", "audience", "url"); +AuthenticationService authenticationService = AuthenticationService.getInstance(); CustomServiceAuthenticationHandler customServiceAuthenticationHandler = new CustomServiceAuthenticationHandler(authenticationService) { - @Override - public ServiceCredentials getServiceCredentials() { - return new ServiceCredentials("YOUR_CLIENT_ID_1", "YOUR_CLIENT_SECRET_1", "YOUR_TENANT_ID_1"); - } - - @Override - public String getTraceId() { - return UUID.randomUUID().toString(); - } + @Override + public ServiceCredentials getServiceCredentials() { + return new ServiceCredentials(CLIENT_ID, CLIENT_SECRET); + } + + @Override + public String getTraceId() { + return UUID.randomUUID().toString(); + } + + @Override + public String getTenantId() { + return TENANT_VALUE; + } }; -LanguageCloudClientProvider languageCloudCustomClientProvider = new LanguageCloudClientProvider(customServiceAuthenticationHandler, "baseUrl"); +LanguageCloudClientProvider languageCloudCustomClientProvider = LanguageCloudClientProvider + .builder() + .withRegion("eu") // optional (default is "eu") + .withRequestInterceptors(List.of(customServiceAuthenticationHandler)) + .build(); // instantiate the client ProjectApi projectApi = languageCloudCustomClientProvider.getProjectClient(); @@ -136,41 +205,52 @@ The web API sample is available for download on [GitHub](https://github.com/RWS/ The sample contains two examples of how to instantiate and work with an API client provided by the Trados Cloud Platform SDK for Java: -- *If you want to use the provided authentication mechanism, a custom handler can be created, which must inherit from `CustomServiceAuthenticationHandler`.* +- *If you want to use the provided authentication mechanism, create a custom handler that inherits from `CustomServiceAuthenticationHandler`.* -- *If you want to handle authentication and tracing on you own, you could implement your own `DelegatingHandler`.* +In our example, we created the `CustomAuthenticationHandler` class, which inherits from `CustomServiceAuthenticationHandler`. The `CustomServiceAuthenticationHandler` class already provides an authentication mechanism. -In our example, we've created the `CustomAuthenticationHandler` class, which inherits from `CustomServiceAuthenticationHandler`. The `CustomServiceAuthenticationHandler` class already provides us with an authentication mechanism. We've overwritten the `getServiceCredentials` and `getTraceId` methods and provided our own implementations, as these will be called by `CustomAuthenticationHandler`: +We have overridden the `getServiceCredentials`, `getTraceId`, and `getTenantId` methods and provided our implementations, as these will be called by `CustomAuthenticationHandler`: ```java -// Provide you own implementation. A possible example can be: +// Provide your implementation. A possible example can be: @Override public ServiceCredentials getServiceCredentials() { - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - User user = (User) authentication.getPrincipal(); + return repository.getServiceCredentialsById(getCurrentUser().getUserId()); +} - return repository.getServiceCredentialsById(user.getUserId()); +// serviceCredentials may or may not be bound to a tenant +@Override +public String getTenantId() { + return repository.getServiceCredentialsById(getCurrentUser().getUserId()).getTenantId(); + // or + // return repository.getTenantForUserId(getCurrentUser().getUserId()); } -// Provide you own implementation. A possible example can be: @Override public String getTraceId() { return UUID.randomUUID().toString(); } + +private User getCurrentUser() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + return (User) authentication.getPrincipal(); +} ``` -We registered an instance of LanguageCloudClientProvider as a bean in `ConfigClass` class and created beans for all API clients exposed: +We registered an instance of `LanguageCloudClientProvider` as a bean in the `ConfigClass` class and created beans for all exposed API clients: ```java // the LanguageCloudClientProvider instance -@Bean +@Bean public LanguageCloudClientProvider getPublicApiClient(CustomAuthenticationHandler customAuthenticationHandler) { - return new LanguageCloudClientProvider(customAuthenticationHandler, BASE_URL); + return LanguageCloudClientProvider.builder() + .withRegion("eu") // optional (default is "eu") + .withRequestInterceptors(List.of(customAuthenticationHandler)).build(); } //the AccountApi bean @Bean public AccountApi getAccountApi(LanguageCloudClientProvider languageCloudClientProvider) { - return languageCloudClientProvider.getAccountClient(); + return languageCloudClientProvider.getAccountClient(); } ``` @@ -179,14 +259,21 @@ We can then use the registered client in the controller (or any other class reso ```java @RestController public class AccountController extends ResponseEntityExceptionHandler { -// inject the client - @Autowired - private AccountApi accountApi; - ... - - // make an API call using the client - ListMyAccountsResponse listMyAccountsResponse = accountApi.listMyAccounts(); - ... + + @Autowired + private AccountApi accountApi; + + @GetMapping("/getAccounts/{userId}") + public List listAccounts(@PathVariable("userId") int userId) { + User user = new User(userId); + Authentication authentication = new UsernamePasswordAuthenticationToken(user, null); + SecurityContext sc = SecurityContextHolder.getContext(); + sc.setAuthentication(authentication); + + ListMyAccountsResponse listMyAccountsResponse = accountApi.listMyAccounts(); + + return listMyAccountsResponse.getItems(); + } } ``` diff --git a/articles/LCPublicAPI/docs/api-clients/net/Net-Samples.md b/articles/LCPublicAPI/docs/api-clients/net/Net-Samples.md index 8464fb7..92cd0cf 100644 --- a/articles/LCPublicAPI/docs/api-clients/net/Net-Samples.md +++ b/articles/LCPublicAPI/docs/api-clients/net/Net-Samples.md @@ -1,15 +1,23 @@ # Trados Cloud Platform SDK Samples for .NET -
+ +This document is designed to help developers get started with the Trados Cloud Platform SDK in .NET applications. You'll find practical sample code and clear guidance for instantiating API clients using credentials, context scoping, or custom handlers. The examples also show how to integrate the SDK into ASP.NET Web API projects, including tips for dependency injection and custom authentication. Use these samples to quickly implement Trados Cloud Platform features in your console or web API projects. + +Here is some guidance to help you decide which sample to follow: + +- If your application targets a single tenant, the quickest way to get started is the [Instantiating a client using credentials (single tenant)](#instantiating-a-client-using-credentials-single-tenant) sample. +- For background processes that must handle multiple tenants, see the [Instantiating a client using context scoping](#instantiating-a-client-using-context-scoping) sample. +- If you're building a multi-tenant web application and need Dependency Injection that depends on the current user, start with the [Web API Dependency Injection Sample](#web-api-dependency-injection-sample). +- If you require a custom authentication flow, the SDK supports supplying your own handler — see [Instantiating a client using a custom handler](#instantiating-a-client-using-a-custom-handler). ## Console Application Sample The console application sample is available for download on [GitHub](https://github.com/RWS/language-cloud-public-api-samples/tree/main/.Net/PublicApi.Sample.Console). -It contains 3 examples of how to instantiate and work with an API client provided by the Trados Cloud Platform SDK. You can either use the supplied provider, or handle the client instantiation on you own: +It contains three examples of how to instantiate and work with an API client provided by the Trados Cloud Platform SDK. You can either use the supplied provider, or handle the client instantiation on your own: -### Instantiating a client using credentials +### Instantiating a client using credentials (single tenant) -You can instantiate a client using the supplied `LanguageCloudClientProvider` class. This method requires you provide a `ServiceCredentials` object, which contains your `clientID`, `clientSecret` and the `tenant`. *See the [Authentication](../../../docs/Authentication.md) page for more details.* +You can instantiate a client using the supplied `LanguageCloudClientProvider` class. This method requires you to provide a `ServiceCredentials` object, which contains your `clientID`, `clientSecret` and the `tenant`. *See the [Authentication](../../../docs/Authentication.md) page for more details.* ```csharp using Rws.LanguageCloud.Sdk; @@ -29,7 +37,7 @@ var projectClient = clientProvider.GetProjectClient(credentials); var projectsResponse = await projectClient.ListProjectsAsync(); ``` - *\*Using this method, a unique TraceId will be generated on each request.* +*Using this method, a unique TraceId will be generated for each request.* @@ -37,12 +45,11 @@ var projectsResponse = await projectClient.ListProjectsAsync(); > > Make sure you always keep your credentials safe. - ### Instantiating a client using context scoping -This method allows you to make an API call with 2 different users, using the same client instance. +This method lets you make API calls as two different users using the same client instance. -We provide an `ApiClientContext` which exposes some scoping options. You can use this to scope your API calls in different contexts. The sample contains an example with 2 different users: +We provide an `ApiClientContext` which exposes scoping options. You can use it to scope API calls for different users; the sample shows an example with two users: ```csharp using Rws.LanguageCloud.Sdk; @@ -59,7 +66,7 @@ ServiceCredentials credentials_2 = new ServiceCredentials("client-id-2", "client var clientProvider = new LanguageCloudClientProvider("eu"); // instantiate the client without credentials -var client = clientProvider.GetProjectClient(); +var projectClient = clientProvider.GetProjectClient(); // create a context scope and use the client. You can also provide your own traceId using (ApiClientContext.BeginScope(new LCContext(credentials_1, "trace-id-1"))) @@ -97,9 +104,9 @@ var client = clientProvider.GetProjectClientNoAuth(handler); var projectsResponse = await projectClient.ListProjectsAsync(); ``` -

## Web API Dependency Injection Sample + The web API sample is available for download on [GitHub](https://github.com/RWS/language-cloud-public-api-samples/tree/main/.Net/PublicApi.WebApiSample). It contains an example of how to instantiate and work with an API client provided by the Trados Cloud Platform SDK for ASP .Net. @@ -108,10 +115,10 @@ It contains an example of how to instantiate and work with an API client provide > If you want to handle authentication and tracing on you own, you could implement your own `DelegatingHandler`. -In our example, we've created the `LcHandler` class, which inherits from `LCCustomAuthenticationHandler`. The `LCCustomAuthenticationHandler` class already provides us with an authentication mechanism. We've overwritten the `GetServiceCredentials` and `GetTraceId` methods and provided our own implementations, as these will be called by `LCCustomAuthenticationHandler`: +In our example, we've created the `LcHandler` class, which inherits from `LCCustomAuthenticationHandler`. The `LCCustomAuthenticationHandler` class already provides an authentication mechanism. We've overridden the `GetServiceCredentials` and `GetTraceId` methods and provided our own implementations; these will be called by `LCCustomAuthenticationHandler`: ```csharp -// Provide you own implementation. A possible example can be: +// Provide your own implementation. A possible example: protected override ServiceCredentials GetServiceCredentials() { int accountId = int.Parse(context.HttpContext.User.Claims.Single(x => x.Type.Equals("aid")).Value); @@ -121,8 +128,8 @@ protected override ServiceCredentials GetServiceCredentials() } ... - -// Provide you own implementation. A possible example can be: + +// Provide your own implementation. A possible example: protected override string GetTraceId() { return DateTimeOffset.UtcNow.ToString(); @@ -130,12 +137,13 @@ protected override string GetTraceId() ``` We'll need a bit of custom magic to make sure dependency injection works correctly for multi-region. We'll create a custom Factory to provide our clients. An example implementation would be a factory class to provide a per region factory. We'll make sure to have all instances initialized only once, to avoid problems: + ```csharp class RegionClientContainerFactory { - LanguageCloudClientProvider _languageCloudClientProvider; - IServiceProvider _serviceProvider; + private readonly LanguageCloudClientProvider _languageCloudClientProvider; + private readonly IServiceProvider _serviceProvider; private IAccountClient _accountClient; @@ -193,11 +201,11 @@ We'll need a bit of custom magic to make sure dependency injection works correct We register our handler `LcHandler` as a transient service and a Factory class with factory, in the `Startup` class: ```csharp -// handlers must always be transient +// Handlers should be registered as transient services.AddTransient(); -// register a client -services.AddSingleton(provider => new LanguageCloudClientFactory(provider.GetService()); +// Register the LanguageCloudClientFactory as a singleton. Resolve the handler from the provider when needed. +services.AddSingleton(provider => new LanguageCloudClientFactory(provider.GetRequiredService())); ``` We can then use the registered client in the controller (or any other class resolved through Dependency Injection): @@ -222,5 +230,3 @@ public class LanguageCloudApiSampleController : ControllerBase ... } ``` - - diff --git a/articles/LCPublicAPI/docs/translations/Translations.md b/articles/LCPublicAPI/docs/translations/Translations.md new file mode 100644 index 0000000..85e7f05 --- /dev/null +++ b/articles/LCPublicAPI/docs/translations/Translations.md @@ -0,0 +1,313 @@ +# Translation API + +The Translation API provides endpoints for performing translation operations using translation engines. These endpoints allow you to lookup translations, perform concordance searches, and manage translation units within your translation memories. + +## Overview + +The Translation API enables you to: +- **Lookup translations** for text or BCM fragments using translation memories and machine translation +- **Perform concordance searches** to find similar segments within translation memories +- **Add new translation units** to translation memories +- **Update existing translation units** in translation memories + +All translation operations require a translation engine that defines which translation memories, machine translation engines, and termbases to use for the translation process. + + +> The BCM fragment format is used for input and output as JSON string, meaning that you will need to serialize and deserialize the BCM fragments when sending requests or processing responses. For .NET you can use the `Sdl.Core.Bcm.API` [nuget package](https://www.nuget.org/packages/Sdl.Core.Bcm.API). + +## Endpoints + +### Translation Lookup + +[`POST /translations/lookup`](../../reference/Public-API.v1.json/paths/~1translations~1lookup/post) + +Translates a phrase in plain text or a BCM fragment containing a single segment. The translated content will be returned as a [BCM fragment](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html) or [term](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Skeleton.Term.html). + +**Use cases:** +- Get translation suggestions for a source segment +- Retrieve matches from translation memories +- Get machine translation proposals +- Access termbase entries for specific terms + +**Key features:** +- Supports both plain text and BCM fragment input +- Returns translations from multiple resource types (TM, MT, TB) +- Configurable match thresholds and penalties + +**Request body example:** +```json +{ + "input": { + "content": "Hello world", + "contentType": "text" + }, + "languageDirection": { + "sourceLanguage": { + "languageCode": "en-US" + }, + "targetLanguage": { + "languageCode": "fr-FR" + } + }, + "definition": { + "translationEngineId": "your-translation-engine-id" + }, + "settings": { + "translationMemory": { + "minimumMatchValue": 70, + "penalties": { + "standardPenalties": { + "missingFormatting": 1, + "differentFormatting": 1 + } + } + } + } +} +``` + + +> The `translationProposal` field in the response can be either a BCM fragment or a term. You can rely on the `responseType` field to determine the content type and deserialize it accordingly. + +### Concordance Search + +[`POST /translations/concordance`](../../reference/Public-API.v1.json/paths/~1translations~1concordance/post) + +Performs a concordance search for a given text within the translation memories linked to the specified translation engine. This helps you find segments that contain specific words or phrases. + +**Use cases:** +- Research how certain phrases have been translated previously +- Quality assurance and consistency checking +- Translation memory analysis + +**Key features:** +- Search within source or target segments +- Support for exact and fuzzy matching +- Configurable search parameters and penalties +- Returns matching segments with context + + +> The Translation Memory penalty defined in the Translation Engine will be automatically included in the translation score. + +**Request body example:** +```json +{ + "input": { + "content": "user interface" + }, + "languageDirection": { + "sourceLanguage": { + "languageCode": "en-US" + }, + "targetLanguage": { + "languageCode": "fr-FR" + } + }, + "definition": { + "translationEngineId": "your-translation-engine-id" + }, + "targetOnly": false, + "settings": { + "translationMemory": { + "minimumMatchValue": 80 + } + } +} +``` + +### Translation Unit Management + +#### Update Translation Unit + +[`PUT /translations/translation-unit`](../../reference/Public-API.v1.json/paths/~1translations~1translation-unit/put) + +Updates an existing translation unit in the translation memories. The system identifies matching translation units based on the `originalTranslationHash` provided in the BCM fragment. + + +> After each update the `targetContent.translationOrigin.originalTranslationHash` is updated. The new values are returned in the response on the `translationHash` field. +> Subsequent updates can be performed by updating the `targetContent.translationOrigin.originalTranslationHash` in the BCM fragment with the new `translationHash`, otherwise the system will add a new translation unit instead of updating the existing one. + + +> Changing any fields in the `sourceContent` of a BCM fragment will result in a new translation unit being added instead of updating the existing one. + +**Use cases:** +- Correct existing translations +- Update translation metadata +- Modify translation unit fields +- Maintain translation memory quality + +**Key features:** +- Smart matching of existing translation units +- Preserve or update translation metadata +- Configurable update behavior +- Support for custom fields + +**Request body example for both add and update:** +```json +{ + "input": { + "content": "BCM fragment" + }, + "definition": { + "translationEngineId": "your-translation-engine-id" + }, + "settings": { + "fields": [ + { + "name": "field-name", + "values": [ "field-value" ] + } + ] + } +} +``` + +#### Add Translation Unit + +[`POST /translations/translation-unit`](../../reference/Public-API.v1.json/paths/~1translations~1translation-unit/post) + +Adds a new translation unit to the translation memories. + +**Use cases:** +- Add new translations units whose existence in the translation memory is unknown +- If, however, the translation unit with the same source already exists, it will be updated based on the `ifTargetSegmentsDiffer` field +- Populate translation memories with approved content + +**Key features:** +- Automatic duplicate handling +- Field template support for metadata +- Configurable behavior for existing translations +- BCM fragment support for rich content + +## BCM Fragments + +Many Translation API endpoints work with BCM (Binary Content Model) fragments. BCM is RWS's content model that preserves formatting, tags, and metadata within translation content. + +**BCM advantages:** +- Preserves inline formatting and tags +- Maintains content structure during translation +- Supports complex document elements +- Enables accurate translation memory matching + +For more information about BCM fragments, see the [BCM documentation](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html). + +Example of a BCM fragment: +```json +{ + "sourceLanguageCode": "en-US", + "targetLanguageCode": "fr-FR", + "sourceContent": { + "id": "166fbfdd-8e0a-46aa-97bf-7b2b62014e5f", + "segmentNumber": "1", + "confirmationLevel": "Translated", + "type": "segment", + "children": [ + { + "id": "c0cff9db-46e4-493d-b578-25e78d578ea7", + "placeholderTagDefinitionId": 1, + "tagNumber": "50", + "type": "placeholderTag", + "metadata": { + "SDL:IsSoftBreak": "True", + "SpecialCharacterPlaceholder": "‌", + "frameworkOriginalTagId": "50", + "SDL:IsWordStop": "False" + } + }, + { + "id": "4b5cbfc4-53b1-462c-86a4-dbc061b5f266", + "text": "This is a sample text", + "type": "text" + } + ] + }, + "targetContent": { + "id": "166fbfdd-8e0a-46aa-97bf-7b2b62014e5f", + "segmentNumber": "1", + "confirmationLevel": "Translated", + "translationOrigin": { + "originType": "tm", + "originSystem": "Example TM", + "matchPercent": 92, + "textContextMatchLevel": "None", + "originalTranslationHash": "-377851791", + "createdBy": "some-user-id", + "createdOn": "2023-09-25T14:24:04.000Z", + "modifiedBy": "some-user-id", + "modifiedOn": "2025-02-12T09:25:57.000Z", + "metadata": { + "used_on": "04/01/2025 13:56:28", + "used_by": "some-user-id", + "use_count": "8" + } + }, + "type": "segment", + "metadata": { + "Contexts": [ + { + "Context1": 0, + "Context2": 0, + "Segment1": null, + "Segment2": null, + "LeftSource": 0, + "LeftTarget": 0 + } + ] + }, + "children": [ + { + "id": "6143602c-5548-43d0-a2fc-1a5a7f2aeb35", + "text": "Ceci est un exemple de texte", + "type": "text" + } + ] + } +} +``` + +## Translation Memory Penalties + +The Translation API supports various penalty types to fine-tune translation matching: + +### Standard Penalties +- **Missing Formatting**: Penalty for matches missing formatting tags +- **Different Formatting**: Penalty for matches with different formatting +- **Multiple Translations**: Penalty for segments with multiple translation options + +### Translation Unit Status Penalties +- **Translated**: Penalty for translated but not reviewed segments +- **Approved Translation**: Penalty for approved translations +- **Rejected Translation**: Penalty for rejected translations + +Learn more about [Translation Memory penalties](https://docs.rws.com/en-US/trados-enterprise-accelerate-791595/trados-tm-penalties-1159224) and [Translation Unit status penalties](https://docs.rws.com/en-US/trados-enterprise-accelerate-791595/editing-project-tm-and-verification-settings-800732). + +## Best Practices + +### Performance Optimization +- Set appropriate minimum match values to reduce processing time +- Use reasonable penalty values to balance quality and performance + +### Quality Management +- Configure penalties based on your quality requirements +- Regularly update translation units to maintain accuracy + +### Translation Memory Maintenance +- Add high-quality translations to build reliable TMs +- Update outdated translations to keep content current +- Use appropriate field templates for metadata management + +## Related APIs + +- **[Translation Memory API](../translation-memory/Translation-memory-import-export.md)**: Bulk import/export of translation memories +- **[Translation Engine API](../../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/put)**: Manage translation engine configurations +- **[Termbase API](../termbase/Termbase.md)**: Manage terminology resources + +## Examples and Use Cases + +### Building a Translation Workflow + +1. **Setup**: Configure translation engine with TMs, MT, and termbases +2. **Lookup**: Use `/translations/lookup` for translation suggestions +3. **Research**: Use `/translations/concordance` for plain text research +4. **Quality**: Add/update translation units with the updated BCM fragments retrieved from the previous requests to improve TM quality +5. **Maintenance**: Regular TM updates and quality checks \ No newline at end of file diff --git a/articles/LCPublicAPI/docs/webhooks/Batched-webhooks.md b/articles/LCPublicAPI/docs/webhooks/Batched-webhooks.md index 85b9734..8366b4f 100644 --- a/articles/LCPublicAPI/docs/webhooks/Batched-webhooks.md +++ b/articles/LCPublicAPI/docs/webhooks/Batched-webhooks.md @@ -7,7 +7,8 @@ The request body follows the [Webhook Batch](../../reference/Webhooks.v1.json/co * Create the webhook endpoint to handle batched webhooks. The endpoint must be capable of processing multiple events in a single request. * The same [webhook authenticity](Webhooks-setup.md#webhook-authenticity) rules apply to both batched and single webhooks. -* The same **success/failure** rules for webhook notifications apply, as described in [notification responses](Webhooks-setup.md#return-notification-responses). +* The same **success/failure** rules for webhook notifications apply, as described in [notification responses](Webhooks-setup.md#return-notification-responses). + * **Note:** A notification delivery is considered successful if the application responds with a 2xx status code within 20 seconds (compared to 3 seconds for individual webhooks). * The **retry policies** and **circuit breaker** mechanisms for webhook notifications are the same as those described in [notification responses](Webhooks-setup.md#return-notification-responses). * The same **headers** are included in batched webhooks as in single webhooks, as outlined in the [reference](Webhooks-setup.md#reference). diff --git a/articles/LCPublicAPI/docs/webhooks/Webhooks-payload.md b/articles/LCPublicAPI/docs/webhooks/Webhooks-payload.md index 9111019..50f009b 100644 --- a/articles/LCPublicAPI/docs/webhooks/Webhooks-payload.md +++ b/articles/LCPublicAPI/docs/webhooks/Webhooks-payload.md @@ -57,7 +57,8 @@ This is the envelope that is common to all events, and only the < Data Payload O | `PROJECT.TASK.UPDATED` | [`task-event`](../../reference/Webhooks.v1.json/components/schemas/task-event) | Generate task
Accept task
Reject task
Release task
Assign task
Reassign task
Complete task | Generate task
Accept task
Reject task
Release task
Assign task
Reassign task
Complete task | | `PROJECT.TASK.DELETED` | [`task-event`](../../reference/Webhooks.v1.json/components/schemas/task-event) | Delete project and its tasks | Delete project and its tasks | | `PROJECT.CREATED` | [`project-event`](../../reference/Webhooks.v1.json/components/schemas/project-event) | Create project | Create project | -| `PROJECT.UPDATED` | [`project-event`](../../reference/Webhooks.v1.json/components/schemas/project-event) | Start project
Update project by changing any field
Complete project
Cancel source file
Complete target file | Start project
Update project by changing the `Project Information`, `Configuration` or `Custom Fields` fields in the `Settings` tab
Complete project
Set project back in progress
Cancel project
Complete target file | +| `PROJECT.STARTED` | [`project-event`](../../reference/Webhooks.v1.json/components/schemas/project-event) | Start project | Start project | +| `PROJECT.UPDATED` | [`project-event`](../../reference/Webhooks.v1.json/components/schemas/project-event) | Start project (This event will also be emitted in addition to `PROJECT.STARTED`)
Update project by changing any field
Complete project
Cancel source file
Complete target file | Start project (This event will also be emitted in addition to `PROJECT.STARTED`)
Update project by changing the `Project Information`, `Configuration` or `Custom Fields` fields in the `Settings` tab
Complete project
Set project back in progress
Cancel project
Complete target file | | `PROJECT.DELETED` | [`project-event`](../../reference/Webhooks.v1.json/components/schemas/project-event) | Delete project | Delete project | | `PROJECT.TEMPLATE.CREATED` | [`project-template-event`](../reference/Webhooks.v1.json/components/schemas/project-template-event) | | Create project template | | `PROJECT.TEMPLATE.UPDATED` | [`project-template-event`](../../reference/Webhooks.v1.json/components/schemas/project-template-event) | | Create project template
Update project template | From 263d3712459064ec8898901d9bb47b5bc2b892b4 Mon Sep 17 00:00:00 2001 From: Radu Pascal Date: Tue, 7 Oct 2025 11:46:38 +0300 Subject: [PATCH 06/19] Update API documentation links and add scripts for link conversion - Updated links in Termbase templates, Termbase, Translation Memory import/export, Translations, and Webhooks documentation to point to the new API structure. - Added a new PowerShell script (convert-reference-links.ps1) to automate the conversion of ../reference links in markdown files to the new ../api structure. - Added a second PowerShell script (convert-contract-links.ps1) to rename markdown links in contract files and adjust their URLs to the new format. - Updated the table of contents to include the Translations section. - Created a Requirements.md file detailing the new scripts and their functionalities. --- articles/LCPublicAPI/docs/API-rate-limits.md | 26 +-- .../docs/Basic-project-creation-flow.md | 50 +++--- articles/LCPublicAPI/docs/Create-projects.md | 44 ++--- articles/LCPublicAPI/docs/Custom-Fields.md | 14 +- .../LCPublicAPI/docs/Export-quote-report.md | 12 +- articles/LCPublicAPI/docs/File-formats.md | 19 +-- .../docs/Headers-considerations.md | 6 +- articles/LCPublicAPI/docs/How-to-multipart.md | 9 +- .../docs/How-to-use-location-and-folders.md | 5 +- .../LCPublicAPI/docs/Interact-with-tasks.md | 15 +- articles/LCPublicAPI/docs/Known-Issues.md | 5 +- articles/LCPublicAPI/docs/Multi-region.md | 4 +- articles/LCPublicAPI/docs/Track-projects.md | 5 +- .../LCPublicAPI/docs/Update-project-quote.md | 6 +- .../docs/Use-fields-in-your-requests.md | 13 +- .../docs/Use-paging-and-sorting-for-lists.md | 9 +- articles/LCPublicAPI/docs/Whats-New.md | 153 +++++++++--------- articles/LCPublicAPI/docs/Whats-deprecated.md | 11 +- .../docs/termbase/Termbase-entries.md | 15 +- .../docs/termbase/Termbase-import-export.md | 16 +- .../docs/termbase/Termbase-templates.md | 14 +- .../LCPublicAPI/docs/termbase/Termbase.md | 14 +- .../Translation-memory-import-export.md | 15 +- .../docs/translations/Translations.md | 16 +- .../docs/webhooks/Batched-webhooks.md | 5 +- .../docs/webhooks/Webhooks-payload.md | 49 +++--- .../docs/webhooks/Webhooks-setup.md | 15 +- articles/LCPublicAPI/toc.yml | 5 + 28 files changed, 295 insertions(+), 275 deletions(-) diff --git a/articles/LCPublicAPI/docs/API-rate-limits.md b/articles/LCPublicAPI/docs/API-rate-limits.md index 6581f67..c38cace 100644 --- a/articles/LCPublicAPI/docs/API-rate-limits.md +++ b/articles/LCPublicAPI/docs/API-rate-limits.md @@ -1,4 +1,4 @@ -# API rate limits +# API rate limits Trados Cloud Platform API enforces rate limits to prevent overuse and spikes of requests that could degrade the platform performance. @@ -17,7 +17,7 @@ Each tenant is entitled to: 3. Up to 200 000 API requests per day. #### Projects Rate Limits -For [Create Project Operation](../reference/Public-API.v1.json/paths/~1projects/post): +For [Create Project Operation](../api/Public-API.v1-fv.html#/operations/CreateProject): each tenant is entitled to: 1. Up to 2 API requests per second. @@ -25,7 +25,7 @@ each tenant is entitled to: 3. Up to 500 API requests per day. #### Export Quote Rate Limits -For [Export Quote Report](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/post): +For [Export Quote Report](../api/Public-API.v1-fv.html#/operations/ExportQuoteReport): each tenant is entitled to: 1. Up to 2 API requests per second. @@ -40,13 +40,13 @@ each tenant is entitled to: #### Project Files Rate Limits For each of the API operations listed below: -- [Add Source File](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files/post) -- [Download Source File Version](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files~1{sourceFileId}~1versions~1{fileVersionId}~1download/get) -- [Download Exported Target File Version](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1exports~1{exportId}~1download/get) -- [Download Target File Version](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1download/get) -- [Add Source File Version](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}~1source-files~1{sourceFileId}~1versions/post) -- [Add Target File Version](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}~1target-files~1{targetFileId}~1versions/post) -- [Import Target File Version](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1imports/post) +- [Add Source File](../api/Public-API.v1-fv.html#/operations/AddSourceFile) +- [Download Source File Version](../api/Public-API.v1-fv.html#/operations/DownloadSourceFileVersion) +- [Download Exported Target File Version](../api/Public-API.v1-fv.html#/operations/DownloadExportedTargetFileVersion) +- [Download Target File Version](../api/Public-API.v1-fv.html#/operations/DownloadFileVersion) +- [Add Source File Version](../api/Public-API.v1-fv.html#/operations/AddSourceFileVersion) +- [Add Target File Version](../api/Public-API.v1-fv.html#/operations/AddTargetFileVersion) +- [Import Target File Version](../api/Public-API.v1-fv.html#/operations/ImportTargetFileVersion) each tenant is entitled to: 1. Up to 5 API requests per second. @@ -58,7 +58,7 @@ each tenant is entitled to: #### Rate Limit verification endpoint Individual rate limits can be consulted below: -- [List Rate Limits](../reference/Public-API.v1.json/paths/~1rate-limits/get) +- [List Rate Limits](../api/Public-API.v1-fv.html#/operations/ListRateLimits) ## Rejection response @@ -77,7 +77,7 @@ Response headers can provide more details: - `X-RateLimit-Limit`: the limit that was exceeded. For example, the value "2" represents the available quota. It does not provide the type of limit that has been exceeded, for those details the `X-RateLimit-Reset` and `X-RateLimit-Policy` should be used (for deciding when to retry the call). - `X-RateLimit-Reset`: the exact moment in time when the Client can resume activity. This is datetime in RFC-1123 format, for example: "Tue, 3 Jun 2008 11:05:30 GMT". - `X-RateLimit-Remaining`: the value is always "0". This is reserved for future enhancements. -- `X-RateLimit-Policy`: the name of the Rate Limit policy that was violated, made up by the operation and the time interval. Please see also the [List Rate Limits](../reference/Public-API.v1.json/paths/~1rate-limits/get). +- `X-RateLimit-Policy`: the name of the Rate Limit policy that was violated, made up by the operation and the time interval. Please see also the [List Rate Limits](../api/Public-API.v1-fv.html#/operations/ListRateLimits). ## Implementation recommendations @@ -86,4 +86,4 @@ Unless it's a time-critical scenario, don't make requests in parallel. It is bet It's important to handle responses with the HTTP Status 429. There are multiple approaches to handle it and a simple strategy would be: 1. Expect the HTTP code (429) 2. Block all the requests, and wait until `X-RateLimit-Reset` -3. Try again. \ No newline at end of file +3. Try again. diff --git a/articles/LCPublicAPI/docs/Basic-project-creation-flow.md b/articles/LCPublicAPI/docs/Basic-project-creation-flow.md index 518949c..a75aa1b 100644 --- a/articles/LCPublicAPI/docs/Basic-project-creation-flow.md +++ b/articles/LCPublicAPI/docs/Basic-project-creation-flow.md @@ -1,4 +1,4 @@ -# Basic project creation flow +# Basic project creation flow Please read carefully about [authentication and prerequisites](../docs/Authentication.md) , and take into consideration that some steps might be done by Trados engineering. @@ -8,7 +8,7 @@ Additional information regarding file and project size limits can be found [here > This small [Postman collection](https://raw.githubusercontent.com/RWS/language-cloud-public-api-postman/develop/basicProjectCreationFlow.json) can help you get started with the basic project creation flow. For details on Postman setup please see the main [Postman](../docs/Language-Cloud-APIs-for-Postman.md) page. > -> In the [Create Project](../reference/Public-API.v1.json/paths/~1projects/post) endpoint body, the `projectTemplate` value should be replaced with a valid `templateId`. From that point on all the necessary identifiers will be automatically populated throughout Postman. +> In the [Create Project](../api/Public-API.v1-fv.html#/operations/CreateProject) endpoint body, the `projectTemplate` value should be replaced with a valid `templateId`. From that point on all the necessary identifiers will be automatically populated throughout Postman. > > Check the [Multi-Region](../docs/Multi-region.md) page for regional API details. @@ -25,7 +25,7 @@ Steps to create a basic translation project: ### 1. Create Project Creates a new project. -Endpoint: [`POST /projects`](../reference/Public-API.v1.json/paths/~1projects/post) +Endpoint: [`POST /projects`](../api/Public-API.v1-fv.html#/operations/CreateProject) For running this endpoint you need to supply the required project details (body tab in Postman): > `POST` https://api.{REGION_CODE}.cloud.trados.com/public-api/v1/projects @@ -50,11 +50,11 @@ For running this endpoint you need to supply the required project details (body } ``` -Source and Target Language Codes can be obtained from [here](../reference/Public-API.v1.json/paths/~1languages/get). +Source and Target Language Codes can be obtained from [here](../api/Public-API.v1-fv.html#/operations/ListLanguages). The API should respond with: - HTTP Status Code: 201 Created. -- Body – your project details consisting of `projectId`, `project name`, `language direction`, `location` and other optional fields. +- Body – your project details consisting of `projectId`, `project name`, `language direction`, `location` and other optional fields. Example: ```json @@ -125,13 +125,13 @@ Detailed information about location and folders can be found on the [How to use ![Create project with location](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/CreateProjectWithLocationPostman.gif?raw=true) -More details about this endpoint can be found [here](../reference/Public-API.v1.json/paths/~1projects/post). +More details about this endpoint can be found [here](../api/Public-API.v1-fv.html#/operations/CreateProject). ### 2. Add Source File Adds a source file to the project. -Endpoint: [`POST /projects/{projectId}/source-files`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files/post) +Endpoint: [`POST /projects/{projectId}/source-files`](../api/Public-API.v1-fv.html#/operations/AddSourceFile) For running this endpoint you need to: - Replace `{projectId}` from the URL with the identifier received from the Create Project endpoint response: @@ -150,18 +150,18 @@ Properties field: Responses: - HTTP Code 201 Created. -- Body – a list with the identifier, name and role of the file. +- Body – a list with the identifier, name and role of the file. ![Add source file](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/AddSourceFilePostman.gif?raw=true) -More details about this endpoint can be found [here](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files/post). +More details about this endpoint can be found [here](../api/Public-API.v1-fv.html#/operations/AddSourceFile). ### 3. Start Project Starts a project. -Endpoint: [`PUT /projects/{projectId}/start`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1start/put) +Endpoint: [`PUT /projects/{projectId}/start`](../api/Public-API.v1-fv.html#/operations/StartProject) For running this endpoint you need to: - Replace `{projectId}` from the URL with the identifier received from the Create Project endpoint response: @@ -173,13 +173,13 @@ Responses: ![Start project](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/StartProjectPostman.gif?raw=true) -More details about this endpoint can be found [here](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1start/put). +More details about this endpoint can be found [here](../api/Public-API.v1-fv.html#/operations/StartProject). ### 4. List Project's Tasks List the tasks of a specific project. If all the tasks have the status `completed`, all the files are translated. -Endpoint: [`GET /projects/{projectId}/tasks`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1tasks/get) +Endpoint: [`GET /projects/{projectId}/tasks`](../api/Public-API.v1-fv.html#/operations/ListProjectTasks) For running this endpoint you need to: - Replace `{projectId}` from the URL with the identifier received from the Create Project endpoint response: @@ -189,7 +189,7 @@ Use `?fields=taskType` if you want to observe the task name. Responses: - HTTP Code 200 Ok. -- Body – a list with task identifier and status. +- Body – a list with task identifier and status. Example: ```json @@ -223,13 +223,13 @@ Example: ![List project's task](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/ListProjectTasks.gif?raw=true) -More details about this endpoint can be found [here](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1tasks/get). +More details about this endpoint can be found [here](../api/Public-API.v1-fv.html#/operations/ListProjectTasks). ### 5. List Project Target Files Retrieves the target `fileId` for a project and the latest version for the translated file. -Endpoint: [`GET /projects/{projectId}/target-files`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files/get) +Endpoint: [`GET /projects/{projectId}/target-files`](../api/Public-API.v1-fv.html#/operations/ListTargetFiles) For running this endpoint you need to: - Replace `{projectId}` from the URL with the identifier received from the Create Project endpoint response: @@ -237,7 +237,7 @@ For running this endpoint you need to: Responses: - HTTP Code 200 Ok. -- Body – a list with objects that contain: +- Body – a list with objects that contain: - source file and target file identifiers - source and target languages @@ -268,13 +268,13 @@ Example: ![List project target files](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/ListProjectTargetFilesPostman.gif?raw=true) -More details about this endpoint can be found [here](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files/get). +More details about this endpoint can be found [here](../api/Public-API.v1-fv.html#/operations/ListTargetFiles). ### 6. Download File Downloads the translated file. -Endpoint: [`GET /projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}/download`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1download/get) +Endpoint: [`GET /projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}/download`](../api/Public-API.v1-fv.html#/operations/DownloadFileVersion) For running this endpoint you need to: - Replace `{projectId}` from the URL with the identifier received from the Create Project endpoint response @@ -285,19 +285,19 @@ For running this endpoint you need to: Responses: - HTTP Code 200 OK. -- Body – the translated file. The file can be also saved from Save Response option. +- Body – the translated file. The file can be also saved from Save Response option. ![Download file](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/DownloadFilePostman.gif?raw=true) -More details about this endpoint can be found [here](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1download/get). +More details about this endpoint can be found [here](../api/Public-API.v1-fv.html#/operations/DownloadFileVersion). ### 7. Complete Project Marks a project as `completed`. -Endpoint: [`PUT /projects/{projectId}/complete`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1complete/put) +Endpoint: [`PUT /projects/{projectId}/complete`](../api/Public-API.v1-fv.html#/operations/CompleteProject) For running this endpoint you need to: - Replace `{projectId}` from the URL with the identifier received from the Create Project endpoint response @@ -309,20 +309,20 @@ Responses: ![Complete project](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/CompleteProjectPostman.gif?raw=true) -More details about this endpoint can be found [here](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1complete/put). +More details about this endpoint can be found [here](../api/Public-API.v1-fv.html#/operations/CompleteProject). ### 8. List Projects Retrieves a list of all the projects in the account. -Endpoint: [`GET /projects`](../reference/Public-API.v1.json/paths/~1projects/get) +Endpoint: [`GET /projects`](../api/Public-API.v1-fv.html#/operations/ListProjects) For running this endpoint make a request to: > `GET` https://api.{REGION_CODE}.cloud.trados.com/public-api/v1/projects Responses: - HTTP Code 200 OK. -- Body – a list of projects with details consisting of project identifier, project name, language direction, location and other optional fields +- Body – a list of projects with details consisting of project identifier, project name, language direction, location and other optional fields Example: ```json @@ -378,4 +378,4 @@ Example: ![List projects](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/ListProjectsPostman.gif?raw=true) -More details about this endpoint can be found [here](../reference/Public-API.v1.json/paths/~1projects/get). \ No newline at end of file +More details about this endpoint can be found [here](../api/Public-API.v1-fv.html#/operations/ListProjects). diff --git a/articles/LCPublicAPI/docs/Create-projects.md b/articles/LCPublicAPI/docs/Create-projects.md index 4d01691..2ef44cd 100644 --- a/articles/LCPublicAPI/docs/Create-projects.md +++ b/articles/LCPublicAPI/docs/Create-projects.md @@ -1,4 +1,4 @@ -# Create projects +# Create projects To create a project, you need to specify the following resources: - A translation engine: determines which translation memories, MT engines and termbases should be used in the project - A file processing configuration: determines which translatable file types this project should support, and the specific configuration of those file types @@ -17,24 +17,24 @@ You cannot specify custom fields and project settings directly via the Trados Cl ### 1. Decide which project resources you want to use. Make a `GET` request to the following resource endpoints and identify the identifiers of the resources you want to include in your project: -- [`/translation-engine`](../reference/Public-API.v1.json/paths/~1translation-engines/get) *required* -- [`/file-processing-configuration`](../reference/Public-API.v1.json/paths/~1file-processing-configurations/get) *required* -- [`/workflow`](../reference/Public-API.v1.json/paths/~1workflows/get) *required* -- [`/pricing-model`](../reference/Public-API.v1.json/paths/~1pricing-models/get) *optional* -- [`/custom-field-definitions`](../reference/Public-API.v1.json/paths/~1custom-field-definitions/get) *optional* +- [`/translation-engine`](../api/Public-API.v1-fv.html#/operations/ListTranslationEngines) *required* +- [`/file-processing-configuration`](../api/Public-API.v1-fv.html#/operations/ListFileProcessingConfigurations) *required* +- [`/workflow`](../api/Public-API.v1-fv.html#/operations/ListWorkflows) *required* +- [`/pricing-model`](../api/Public-API.v1-fv.html#/operations/ListPricingModels) *optional* +- [`/custom-field-definitions`](../api/Public-API.v1-fv.html#/operations/ListCustomFields) *optional* -### 2. Decide which language pairs (source – target) you want to use. +### 2. Decide which language pairs (source – target) you want to use. -Make a `GET` request to the [`/languages`](../reference/Public-API.v1.json/paths/~1languages/get) endpoint and identify the `languageCode` parameter values. +Make a `GET` request to the [`/languages`](../api/Public-API.v1-fv.html#/operations/ListLanguages) endpoint and identify the `languageCode` parameter values. ### 3. Decide where you want to save your project. -When you create your project, you must save it in a location (or customer folder). You will need the `locationId` of that customer folder. To retrieve the `locationId` of a given customer folder, make a `GET` request to the [`/customers/{customerId}`](../reference/Public-API.v1.json/paths/~1customers~1{customerId}/get) endpoint and check the `locationId` value in the response. If you do not specify a location, the project will be created in the Root folder. +When you create your project, you must save it in a location (or customer folder). You will need the `locationId` of that customer folder. To retrieve the `locationId` of a given customer folder, make a `GET` request to the [`/customers/{customerId}`](../api/Public-API.v1-fv.html#/operations/GetCustomer) endpoint and check the `locationId` value in the response. If you do not specify a location, the project will be created in the Root folder. ### 4. Create your project. -Make a `POST` request to the [`/projects`](../reference/Public-API.v1.json/paths/~1projects/post) endpoint. You must provide identifiers for all the **required** resources: translation engine, file processing configuration and workflow. +Make a `POST` request to the [`/projects`](../api/Public-API.v1-fv.html#/operations/CreateProject) endpoint. You must provide identifiers for all the **required** resources: translation engine, file processing configuration and workflow. Each resource object has a `strategy` parameter you must specify in the request body. The strategy parameter has 2 available values: `copy` and `use`. Trados recommends that you choose the `copy` value, which means that you include a copy (clone) of your resource in the project. If you choose the `use` value, then the actual resource is included in your project. @@ -44,14 +44,14 @@ Make sure that you remember the value of the project `id` parameter in the respo ### 5. Add your project files. -Make a `POST` request to the [`/projects/{projectId}/source-files`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files/post) endpoint. You can add both translatable files and reference files (by specifying the `role` property), and various file formats (by specifying the `type` property – native/bcm/sdxliff). You must provide the language of your source file, and, optionally, the values of the `targetLanguages` and `path` elements. +Make a `POST` request to the [`/projects/{projectId}/source-files`](../api/Public-API.v1-fv.html#/operations/AddSourceFile) endpoint. You can add both translatable files and reference files (by specifying the `role` property), and various file formats (by specifying the `type` property – native/bcm/sdxliff). You must provide the language of your source file, and, optionally, the values of the `targetLanguages` and `path` elements. ### 5.1 Perfect Match (optional) -At this point you can make use of the [PerfectMatch](../reference/Public-API.v1.json/paths/~1perfect-match-mappings/post) feature. You can read more about it [here](https://docs.rws.com/791595/1155478/trados-enterprise---accelerate/perfectmatch-general-information). +At this point you can make use of the [PerfectMatch](../api/Public-API.v1-fv.html#/operations/CreatePerfectMatchMapping) feature. You can read more about it [here](https://docs.rws.com/791595/1155478/trados-enterprise---accelerate/perfectmatch-general-information). ### 6. Start your project. -Make a `PUT` request to the [`/projects/{projectId}/start`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1start/put) endpoint. +Make a `PUT` request to the [`/projects/{projectId}/start`](../api/Public-API.v1-fv.html#/operations/StartProject) endpoint. ## Create projects based on a template @@ -59,32 +59,32 @@ You can create projects based on a project template already configured from the ### 1. Decide which project template you want to use. -Make a `GET` request to the [`/project-templates`](../reference/Public-API.v1.json/paths/~1project-templates/get) endpoint. Remember the project template `id` parameter in the response. +Make a `GET` request to the [`/project-templates`](../api/Public-API.v1-fv.html#/operations/ListProjectTemplates) endpoint. Remember the project template `id` parameter in the response. -### 2. Decide which language pairs (source – target) you want to use. +### 2. Decide which language pairs (source – target) you want to use. -A project template may include more languages than you need. If this is the case, you can keep only the languages of interest. Make a `GET` request to the [`/languages`](../reference/Public-API.v1.json/paths/~1languages/get) endpoint and identify the `languageCode` parameter values. +A project template may include more languages than you need. If this is the case, you can keep only the languages of interest. Make a `GET` request to the [`/languages`](../api/Public-API.v1-fv.html#/operations/ListLanguages) endpoint and identify the `languageCode` parameter values. ### 3. Decide where you want to save your project. -A project template is saved in a location or a customer folder. Most of the times, when you create your project, you want to save it in the same location (customer folder) as the project template it is based on. You will need the `locationId` of that customer folder. To retrieve the `locationId` of a given customer folder, make a `GET` request to the [`/customers/{customerId}`](../reference/Public-API.v1.json/paths/~1customers~1{customerId}/get) endpoint and check the `locationId` value in the response. +A project template is saved in a location or a customer folder. Most of the times, when you create your project, you want to save it in the same location (customer folder) as the project template it is based on. You will need the `locationId` of that customer folder. To retrieve the `locationId` of a given customer folder, make a `GET` request to the [`/customers/{customerId}`](../api/Public-API.v1-fv.html#/operations/GetCustomer) endpoint and check the `locationId` value in the response. ### 4. Create your project. -Make a `POST` request to the [`/projects`](../reference/Public-API.v1.json/paths/~1projects/post) endpoint. Provide the project template `id` and the location `id`. +Make a `POST` request to the [`/projects`](../api/Public-API.v1-fv.html#/operations/CreateProject) endpoint. Provide the project template `id` and the location `id`. Make sure that you remember the value of the project `id` parameter in the response. You will need it for tracking your project, interacting with tasks, and completing projects. ### 5. Add your project files -Make a `POST` request to the [`/projects/{projectId}/source-files`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files/post) endpoint. You can add both translatable files and reference files (by specifying the `role` property), and various file formats (by specifying the `type` property – native/bcm/sdxliff). You must provide the language of your source file, and, optionally, the values of the `targetLanguages` and `path` elements. +Make a `POST` request to the [`/projects/{projectId}/source-files`](../api/Public-API.v1-fv.html#/operations/AddSourceFile) endpoint. You can add both translatable files and reference files (by specifying the `role` property), and various file formats (by specifying the `type` property – native/bcm/sdxliff). You must provide the language of your source file, and, optionally, the values of the `targetLanguages` and `path` elements. ### 5.1 Perfect Match (optional) -At this point you can make use of the [PerfectMatch](../reference/Public-API.v1.json/paths/~1perfect-match-mappings/post) feature. You can read more about it [here](https://docs.rws.com/791595/1155478/trados-enterprise---accelerate/perfectmatch-general-information). +At this point you can make use of the [PerfectMatch](../api/Public-API.v1-fv.html#/operations/CreatePerfectMatchMapping) feature. You can read more about it [here](https://docs.rws.com/791595/1155478/trados-enterprise---accelerate/perfectmatch-general-information). ### 6. Start your project. -Make a `PUT` request to the [`/projects/{projectId}/start`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1start/put) endpoint. +Make a `PUT` request to the [`/projects/{projectId}/start`](../api/Public-API.v1-fv.html#/operations/StartProject) endpoint. ## Restrict file downloads for a project To restrict file downloads for certain roles, you may create a project as usual and choose to: @@ -100,4 +100,4 @@ Create the project as usual, but specify an additional boolean field named `forc ..., "forceOnline": true } -``` \ No newline at end of file +``` diff --git a/articles/LCPublicAPI/docs/Custom-Fields.md b/articles/LCPublicAPI/docs/Custom-Fields.md index c111841..354eade 100644 --- a/articles/LCPublicAPI/docs/Custom-Fields.md +++ b/articles/LCPublicAPI/docs/Custom-Fields.md @@ -1,14 +1,14 @@ -# Custom fields +# Custom fields Custom Fields allow associating custom data with a project. Custom Fields can be defined in the UI, and then listed and accessed using the List and Get endpoints. The Custom Field values are retrieved through the Project endpoints. ## Custom Field Definitions -To list the available Custom Field Definitions make a `GET` request to the [`/custom-field-definitions`](../reference/Public-API.v1.json/paths/~1custom-field-definitions/get) endpoint. The response contains: the Custom Fields total count, and by default, the `id` and the `name` for each Custom Field. By specifying the `fields` query parameter, the other properties of these entities can be retrieved. +To list the available Custom Field Definitions make a `GET` request to the [`/custom-field-definitions`](../api/Public-API.v1-fv.html#/operations/ListCustomFields) endpoint. The response contains: the Custom Fields total count, and by default, the `id` and the `name` for each Custom Field. By specifying the `fields` query parameter, the other properties of these entities can be retrieved. ![List custom fields](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/ListCustomFieldsPostman.gif?raw=true) -To get a particular Custom Field Definition make a `GET` request to the [`/custom-field-definitions/{customFieldDefinitionId}`](../reference/Public-API.v1.json/paths/~1custom-field-definitions~1{customFieldDefinitionId}/get) endpoint, and specify the `customFieldDefinitionId` path parameter. +To get a particular Custom Field Definition make a `GET` request to the [`/custom-field-definitions/{customFieldDefinitionId}`](../api/Public-API.v1-fv.html#/operations/GetCustomField) endpoint, and specify the `customFieldDefinitionId` path parameter. The default fields for custom field are `id` and `name`, but the other fields can be seen by specifying them into `fields` query param. For example: `id,key,description,type,defaultValue` ![Get custom field](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/GetCustomFieldPostman.gif?raw=true) @@ -153,13 +153,13 @@ This will have an HTTP code 400 Bad Request **Updating projects with Custom Fields** -To update the Custom Fields of a project make a `PUT` request to the [`/projects/{projectId}`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/put) endpoint. Specify new values for the Custom Fields that need updating. +To update the Custom Fields of a project make a `PUT` request to the [`/projects/{projectId}`](../api/Public-API.v1-fv.html#/operations/UpdateProject) endpoint. Specify new values for the Custom Fields that need updating. ![Update project with custom fields](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/UpdateProjectWithCustomFieldsPostman.gif?raw=true) **Getting Custom Fields for projects** -To get the Custom Fields for a project, make a `GET` request to the [`/projects/{projectId}`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/get) endpoint and request the desired fields in the `fields` query parameters: `customFields.id,customFields.key,customFields.value`. Similarly, this can be done when making a `GET` request to the [`/projects`](../reference/Public-API.v1.json/paths/~1projects/get) endpoint. +To get the Custom Fields for a project, make a `GET` request to the [`/projects/{projectId}`](../api/Public-API.v1-fv.html#/operations/GetProject) endpoint and request the desired fields in the `fields` query parameters: `customFields.id,customFields.key,customFields.value`. Similarly, this can be done when making a `GET` request to the [`/projects`](../api/Public-API.v1-fv.html#/operations/ListProjects) endpoint. ![Get project with custom fields](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/GetProjectWithCustomFieldsPostman.gif?raw=true) @@ -167,6 +167,6 @@ To get the Custom Fields for a project, make a `GET` request to the [`/projects/ Custom Fields can be defined in Project Templates. `isMandatory` on a Custom Field indicates that it must be populated when a project is created with that template. -To get the Custom Fields for a project template, make a `GET` request to the [`/project-templates/{projectTemplateId}`](../reference/Public-API.v1.json/paths/~1project-templates~1{projectTemplateId}/get) endpoint or a `GET` request to the [`/project-templates`](../reference/Public-API.v1.json/paths/~1project-templates/get) endpoint and specify the desired fields in the `fields` query parameters: `customFields.id,customFields.key,customFields.value`. +To get the Custom Fields for a project template, make a `GET` request to the [`/project-templates/{projectTemplateId}`](../api/Public-API.v1-fv.html#/operations/GetProjectTemplate) endpoint or a `GET` request to the [`/project-templates`](../api/Public-API.v1-fv.html#/operations/ListProjectTemplates) endpoint and specify the desired fields in the `fields` query parameters: `customFields.id,customFields.key,customFields.value`. -![Get project template with custom fields](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/GetProjectTemplateWithCustomFieldsPostman.gif?raw=true) \ No newline at end of file +![Get project template with custom fields](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/GetProjectTemplateWithCustomFieldsPostman.gif?raw=true) diff --git a/articles/LCPublicAPI/docs/Export-quote-report.md b/articles/LCPublicAPI/docs/Export-quote-report.md index b7c1080..00f9c16 100644 --- a/articles/LCPublicAPI/docs/Export-quote-report.md +++ b/articles/LCPublicAPI/docs/Export-quote-report.md @@ -1,15 +1,15 @@ -# Export quote report +# Export quote report The export quote mechanism has been updated and it is now composed of three relevant endpoints. The old export quote endpoint is deprecated, you can read about it in this section [`What's new`](https://languagecloud.sdl.com/lc/api-docs/16d216d6237ee-what-s-new#12-august-2022). The next endpoints would need to be executed in this specific order: -1. To trigger a quote report generation for a given project, make a `POST` request to the [`/projects/{projectId}/quote-report/export`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/post) endpoint. If successful, the response will contain an "Accepted" status, and you can proceed to the next step. +1. To trigger a quote report generation for a given project, make a `POST` request to the [`/projects/{projectId}/quote-report/export`](../api/Public-API.v1-fv.html#/operations/ExportQuoteReport) endpoint. If successful, the response will contain an "Accepted" status, and you can proceed to the next step. -2. To verify the status of the quote report generation, make a `GET` request to the [`/projects/{projectId}/quote-report/export`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/get) endpoint. As soon as the response body contains a "completed" status, then you can proceed to the next step. +2. To verify the status of the quote report generation, make a `GET` request to the [`/projects/{projectId}/quote-report/export`](../api/Public-API.v1-fv.html#/operations/PollQuoteReportExport) endpoint. As soon as the response body contains a "completed" status, then you can proceed to the next step. -3. To download the generated project quote, make a `GET` request to the [`/projects/{projectId}/quote-report/download`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1download/get) endpoint. +3. To download the generated project quote, make a `GET` request to the [`/projects/{projectId}/quote-report/download`](../api/Public-API.v1-fv.html#/operations/DownloadQuoteReport) endpoint. ## Report format @@ -41,7 +41,7 @@ The next screenshot illustrates a sample of an exported PDF quote.
# Update project quote -To update a quote, make a `PUT` request to the [`/projects/{projectId}`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/put) endpoint, and specify the `quote` field. +To update a quote, make a `PUT` request to the [`/projects/{projectId}`](../api/Public-API.v1-fv.html#/operations/UpdateProject) endpoint, and specify the `quote` field. ## Cost types @@ -465,4 +465,4 @@ When the `costOrder` field is switched, the `total` percentage cost value will b ... } ... -``` \ No newline at end of file +``` diff --git a/articles/LCPublicAPI/docs/File-formats.md b/articles/LCPublicAPI/docs/File-formats.md index 322a69c..a7bc483 100644 --- a/articles/LCPublicAPI/docs/File-formats.md +++ b/articles/LCPublicAPI/docs/File-formats.md @@ -1,4 +1,4 @@ -# File formats +# File formats A file used in the Trados Cloud Platform API can have one of the three supported formats: native, SDLXLIFF or [BCM](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html): - Native represents the format of the file that is attached to a project by the user. The project's associated File Type Configuration specifies if the native file extensions can be attached to that project. @@ -24,11 +24,11 @@ Using the Trados Cloud Platform API, the source and target files in different fo ### Handling Source Files #### Upload Source Files -Source files can be added to a project using the [Add Source File](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files/post) endpoint or the [Attach Source Files](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files~1attach-files/post) endpoint (for multiple files). If the file's extension is supported by the File Type Configuration, the project will follow the workflow and a new version of the source file in BCM format will be automatically created in the *File Format Conversion* task. +Source files can be added to a project using the [Add Source File](../api/Public-API.v1-fv.html#/operations/AddSourceFile) endpoint or the [Attach Source Files](../api/Public-API.v1-fv.html#/operations/AddSourceFiles) endpoint (for multiple files). If the file's extension is supported by the File Type Configuration, the project will follow the workflow and a new version of the source file in BCM format will be automatically created in the *File Format Conversion* task. #### Upload Source File Versions -New source file versions can be added in native or BCM format using the [Add Source File Version](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}~1source-files~1{sourceFileId}~1versions/post) endpoint. You can add source file versions: +New source file versions can be added in native or BCM format using the [Add Source File Version](../api/Public-API.v1-fv.html#/operations/AddSourceFileVersion) endpoint. You can add source file versions: * in the *Engineering* task * in custom tasks created by users having the task type set to *Engineering* * in extension tasks that handle source files. @@ -39,7 +39,7 @@ If a project having attached a native source file with an unsupported extension #### Download Source File Versions -Any of the source file versions (in native or BCM format) can be downloaded using the [Download Source File Version](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files~1{sourceFileId}~1versions~1{fileVersionId}~1download/get) endpoint. The *Engineering* task, for instance, is an example of a task where download can be performed. +Any of the source file versions (in native or BCM format) can be downloaded using the [Download Source File Version](../api/Public-API.v1-fv.html#/operations/DownloadSourceFileVersion) endpoint. The *Engineering* task, for instance, is an example of a task where download can be performed. @@ -47,22 +47,23 @@ Any of the source file versions (in native or BCM format) can be downloaded usin The *Copy source to target* task converts the native file to a new target file version in BCM format. #### Upload Target File Versions -Adding a new version for a target file in native or BCM format can be executed with the [Add Target File Version](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}~1target-files~1{targetFileId}~1versions/post) endpoint. +Adding a new version for a target file in native or BCM format can be executed with the [Add Target File Version](../api/Public-API.v1-fv.html#/operations/AddTargetFileVersion) endpoint. >Note: For adding a target file version using an extension task, the configuration of the task type must declare the `scope`'s value as "file". #### Download Target File Versions -The BCM and native target file versions can be downloaded by using [Download Target File Version](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1download/get) endpoint, while the project is, for example, in the *Translation* task. +The BCM and native target file versions can be downloaded by using [Download Target File Version](../api/Public-API.v1-fv.html#/operations/DownloadFileVersion) endpoint, while the project is, for example, in the *Translation* task. #### Export Target File Versions -The BCM target file versions can be exported in native or SDLXLIFF format by calling the [Export Target File Version](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1exports/post) endpoint. This operation triggers a conversion of the BCM target file version in a native or SDLXLIFF format based on the value of the `format` query parameter used. The endpoint starts an export operation which can be monitored using the [polling endpoint](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1exports~1{exportId}/get). After the export is done, the files can be downloaded using the [Download Exported Target File Version](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1exports~1{exportId}~1download/get) endpoint. +The BCM target file versions can be exported in native or SDLXLIFF format by calling the [Export Target File Version](../api/Public-API.v1-fv.html#/operations/ExportTargetFileVersion) endpoint. This operation triggers a conversion of the BCM target file version in a native or SDLXLIFF format based on the value of the `format` query parameter used. The endpoint starts an export operation which can be monitored using the [polling endpoint](../api/Public-API.v1-fv.html#/operations/PollTargetFileVersionExport). After the export is done, the files can be downloaded using the [Download Exported Target File Version](../api/Public-API.v1-fv.html#/operations/DownloadExportedTargetFileVersion) endpoint. > Note: The export endpoint is dedicated to file versions of BCM format and cannot be used on files in native or SDLXLIFF format. The export operation can only be executed on tasks where the supported output file is a bilingual target file. You can consult the output file types for tasks on the [Rules for sequencing tasks correctly](https://docs.rws.com/791595/885137/trados-enterprise/rules-for-sequencing-tasks-correctly) page from the official RWS Documentation Center. > ->In order to download file versions of BCM or native type, please use the [Download Target File Version](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1download/get) endpoint. +>In order to download file versions of BCM or native type, please use the [Download Target File Version](../api/Public-API.v1-fv.html#/operations/DownloadFileVersion) endpoint. #### Import Target File Versions -Target file versions downloaded in SDLXLIFF format can be processed and afterwards replaced by using [Import Target File Version](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1imports/post) endpoint. The import operation triggers internally the update of the BCM file associated with the imported SDLXLIFF file. This endpoint should mostly be used for offline work. +Target file versions downloaded in SDLXLIFF format can be processed and afterwards replaced by using [Import Target File Version](../api/Public-API.v1-fv.html#/operations/ImportTargetFileVersion) endpoint. The import operation triggers internally the update of the BCM file associated with the imported SDLXLIFF file. This endpoint should mostly be used for offline work. + diff --git a/articles/LCPublicAPI/docs/Headers-considerations.md b/articles/LCPublicAPI/docs/Headers-considerations.md index 3483eac..ecaf4ff 100644 --- a/articles/LCPublicAPI/docs/Headers-considerations.md +++ b/articles/LCPublicAPI/docs/Headers-considerations.md @@ -1,4 +1,4 @@ -# Headers considerations +# Headers considerations The purpose of this page is to showcase the header types that could capture your interest. @@ -23,7 +23,7 @@ in a file, read more in the [RFC2046](https://www.rfc-editor.org/rfc/rfc2046#sec For operations expected to return content that can be handled as a file, the `Content-Disposition` header can be sent in the response headers to provide more information about the response payload. The Trados Cloud Platform API will provide this header in certain situations, and its primary goal is to supply a file name for the content being downloaded or exported. You can read more about the `Content-Disposition` header on the [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition) website or in the [RFC6266](https://www.rfc-editor.org/rfc/rfc6266) space. -The `Content-Disposition` response header can be usually found on various download API endpoints like [Download Source File Version](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files~1{sourceFileId}~1versions~1{fileVersionId}~1download/get), [Download Target File Version](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1download/get), [Download Exported Quote Report](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1download/get) and others. +The `Content-Disposition` response header can be usually found on various download API endpoints like [Download Source File Version](../api/Public-API.v1-fv.html#/operations/DownloadSourceFileVersion), [Download Target File Version](../api/Public-API.v1-fv.html#/operations/DownloadFileVersion), [Download Exported Quote Report](../api/Public-API.v1-fv.html#/operations/DownloadQuoteReport) and others. > Please note that both `Content-Type` and `Content-Disposition` are **not required** and APIs might not include them in the response. There are no guarantees that an endpoint that used to return a `Content-Type` or `Content-Disposition` header will still do so, under any circumstance. Please treat these headers as **optional** for all APIs. @@ -49,4 +49,4 @@ If the `Content-Disposition` header is missing or you simply want to have a diff ## Deprecation and sunset headers -These types of headers are used in our endpoint retirement process and are covered broadly in the [Public API Management Process](../docs/Public-API-Management-Process.md#endpoint-retirement-process) page. \ No newline at end of file +These types of headers are used in our endpoint retirement process and are covered broadly in the [Public API Management Process](../docs/Public-API-Management-Process.md#endpoint-retirement-process) page. diff --git a/articles/LCPublicAPI/docs/How-to-multipart.md b/articles/LCPublicAPI/docs/How-to-multipart.md index 7065e86..34ce72d 100644 --- a/articles/LCPublicAPI/docs/How-to-multipart.md +++ b/articles/LCPublicAPI/docs/How-to-multipart.md @@ -1,4 +1,4 @@ ---- +--- stoplight-id: 1hfz3c15wpkbf --- @@ -12,7 +12,7 @@ This page goes into deeper details for uploading files. Generally you might be i Whenever you make use of endpoints that do file uploads using `multipart/form-data`, some additional details may be required to be sent alongside the file, for example a `properties` part. -Let's take as an example the [Add Source File Version](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}~1source-files~1{sourceFileId}~1versions/post) endpoint. The API specifies that the request content is `multipart/form-data` and has a `properties` part that should be serialized as a JSON (this might not be mentioned explicitly in the documentation, but any structures in multiparts should be serialized as JSON). The second property is `file` and though it is of type `string`, that means that the raw content of the file should be sent in that part. +Let's take as an example the [Add Source File Version](../api/Public-API.v1-fv.html#/operations/AddSourceFileVersion) endpoint. The API specifies that the request content is `multipart/form-data` and has a `properties` part that should be serialized as a JSON (this might not be mentioned explicitly in the documentation, but any structures in multiparts should be serialized as JSON). The second property is `file` and though it is of type `string`, that means that the raw content of the file should be sent in that part. > The order of parts is important! Please send the parts in the order these are specified in the API contract. @@ -30,8 +30,8 @@ Content-Disposition: form-data; name="properties" Content-Type: application/json { -  "type":"native", -  "fileTypeSettingsId": "" +  "type":"native", +  "fileTypeSettingsId": "" } ----------------------------818668410602542750275539 Content-Disposition: form-data; name="file"; filename="" @@ -45,3 +45,4 @@ Content-Type: For the file, there is usually the filename that needs to be sent, along with file `Content-type` and finally the content. + diff --git a/articles/LCPublicAPI/docs/How-to-use-location-and-folders.md b/articles/LCPublicAPI/docs/How-to-use-location-and-folders.md index c6152bc..60be9c8 100644 --- a/articles/LCPublicAPI/docs/How-to-use-location-and-folders.md +++ b/articles/LCPublicAPI/docs/How-to-use-location-and-folders.md @@ -1,4 +1,4 @@ -# How to use location and folders +# How to use location and folders The Trados Cloud Platform API supports [folder-based](https://docs.rws.com/791595/984983/trados-enterprise/how-do-folder-structure-and-inheritance-help-you-get-organized-) access management to all resources. The users have access to resources based on the permissions associated with the group (role) they belong to. For information about creating a user you can check the [Service credentials](../docs/Service-credentials.md) page. @@ -18,7 +18,7 @@ The folders structure in Trados Cloud Platform API is hierarchical. For more inf Depending on how the account was provisioned, configured and on the groups which the user belongs to, the rights for a user can be more restrictive or permissive. -Users can learn where they were created, the exact folder, and what groups they belong to, by executing a [Get My User](../reference/Public-API.v1.json/paths/~1users~1me/get) call with the `fields` query parameters set to *"location.name,location.path,groups"*. +Users can learn where they were created, the exact folder, and what groups they belong to, by executing a [Get My User](../api/Public-API.v1-fv.html#/operations/GetMyUser) call with the `fields` query parameters set to *"location.name,location.path,groups"*. For example, let's assume that an account has the following hierarchy of folders (with associated unique identifiers simplified for readability): @@ -161,3 +161,4 @@ If the list project endpoint is used with: Project2, Project3 (only once) and Project4 are returned. + diff --git a/articles/LCPublicAPI/docs/Interact-with-tasks.md b/articles/LCPublicAPI/docs/Interact-with-tasks.md index 315b439..9d72927 100644 --- a/articles/LCPublicAPI/docs/Interact-with-tasks.md +++ b/articles/LCPublicAPI/docs/Interact-with-tasks.md @@ -1,30 +1,31 @@ -# Interact with tasks +# Interact with tasks Once the project is started, you can interact with tasks in several ways: ### Find the task identifier -Make a `GET` request to the [`/tasks/assigned`](../reference/Public-API.v1.json/paths/~1tasks~1assigned/get) endpoint and identify the `id` of the task you want to interact with. +Make a `GET` request to the [`/tasks/assigned`](../api/Public-API.v1-fv.html#/operations/ListTasksAssignedToMe) endpoint and identify the `id` of the task you want to interact with. ### Reclaim tasks -If you make a `PUT` request to the [`/tasks/{taskId}/reclaim`](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}~1reclaim/put) endpoint, the owner of task is removed and another user from the assignee's list can accept it. The task is not reassigned automatically. +If you make a `PUT` request to the [`/tasks/{taskId}/reclaim`](../api/Public-API.v1-fv.html#/operations/ReclaimTask) endpoint, the owner of task is removed and another user from the assignee's list can accept it. The task is not reassigned automatically. ### Complete tasks -To complete a task, make a `PUT` request to the [`/tasks/{taskId}/complete`](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}~1complete/put) endpoint. +To complete a task, make a `PUT` request to the [`/tasks/{taskId}/complete`](../api/Public-API.v1-fv.html#/operations/CompleteTask) endpoint. ### Assign tasks -If the tasks is rejected by all its assignees, you can update the list of assignees. Make a `GET` request to the [`/users`](../reference/Public-API.v1.json/paths/~1users/get) or [`/groups`](../reference/Public-API.v1.json/paths/~1groups/get) endpoints and remember their identifiers. Then, make a `PUT` request to the [`/tasks/{taskId}/assign`](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}~1assign/put) endpoint and provide the identifiers. +If the tasks is rejected by all its assignees, you can update the list of assignees. Make a `GET` request to the [`/users`](../api/Public-API.v1-fv.html#/operations/ListUsers) or [`/groups`](../api/Public-API.v1-fv.html#/operations/ListGroups) endpoints and remember their identifiers. Then, make a `PUT` request to the [`/tasks/{taskId}/assign`](../api/Public-API.v1-fv.html#/operations/AssignTask) endpoint and provide the identifiers. ### List all the tasks in a project -Make a `GET` call to the [`/projects/{projectId}/tasks`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1tasks/get) endpoint to list all the tasks in a project by projectId. The response returns a total count of the tasks, and several details for each task: `taskId`, the input and outcome per task, the owner and assignees, the creation and due dates. +Make a `GET` call to the [`/projects/{projectId}/tasks`](../api/Public-API.v1-fv.html#/operations/ListProjectTasks) endpoint to list all the tasks in a project by projectId. The response returns a total count of the tasks, and several details for each task: `taskId`, the input and outcome per task, the owner and assignees, the creation and due dates. ### Upload/Import a target file version -Make a `POST` call to the [`/projects/{projectId/target-files/{targetFileId}/versions/imports`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1imports/post) endpoint to upload (import) a new file version that can be used as part of a task. The response returns the `importId` which you can further use to check the import result by making a `GET` call to the [`/projects/{projectId}/target-files/{targetFileId}/versions/imports/{importId}`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1imports~1{importId}/get) endpoint. The `projectId` can be retrieved by making a `POST` call to the [`/projects`](../reference/Public-API.v1.json/paths/~1projects/post) endpoint, while the `targetFileId` can be retrieved by making a `GET` call to the [`/projects/{projectId}/target-files`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files/get) endpoint. +Make a `POST` call to the [`/projects/{projectId/target-files/{targetFileId}/versions/imports`](../api/Public-API.v1-fv.html#/operations/ImportTargetFileVersion) endpoint to upload (import) a new file version that can be used as part of a task. The response returns the `importId` which you can further use to check the import result by making a `GET` call to the [`/projects/{projectId}/target-files/{targetFileId}/versions/imports/{importId}`](../api/Public-API.v1-fv.html#/operations/PollTargetFileVersionImport) endpoint. The `projectId` can be retrieved by making a `POST` call to the [`/projects`](../api/Public-API.v1-fv.html#/operations/CreateProject) endpoint, while the `targetFileId` can be retrieved by making a `GET` call to the [`/projects/{projectId}/target-files`](../api/Public-API.v1-fv.html#/operations/ListTargetFiles) endpoint. + diff --git a/articles/LCPublicAPI/docs/Known-Issues.md b/articles/LCPublicAPI/docs/Known-Issues.md index 4e0aace..2304413 100644 --- a/articles/LCPublicAPI/docs/Known-Issues.md +++ b/articles/LCPublicAPI/docs/Known-Issues.md @@ -1,4 +1,4 @@ -# Known issues +# Known issues This page lists the known bugs and issues for Trados Cloud Platform API. @@ -6,7 +6,8 @@ This page lists the known bugs and issues for Trados Cloud Platform API. ### Download Exported Quote Report -The [Download Exported Quote Report](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1download/get) endpoint is designed to be a one-time operation. After a download attempt, the file is deleted and it's no longer available for download. If the file needs to be downloaded again, the user needs to request a new export of the quote report by using the [Export Quote Report](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/post) and [Poll Quote Report Export](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/get) endpoints. +The [Download Exported Quote Report](../api/Public-API.v1-fv.html#/operations/DownloadQuoteReport) endpoint is designed to be a one-time operation. After a download attempt, the file is deleted and it's no longer available for download. If the file needs to be downloaded again, the user needs to request a new export of the quote report by using the [Export Quote Report](../api/Public-API.v1-fv.html#/operations/ExportQuoteReport) and [Poll Quote Report Export](../api/Public-API.v1-fv.html#/operations/PollQuoteReportExport) endpoints. ### Export Quote report When the export is not using a Quote Template, the response for this call will be empty. + diff --git a/articles/LCPublicAPI/docs/Multi-region.md b/articles/LCPublicAPI/docs/Multi-region.md index 7fb1bef..4977dd5 100644 --- a/articles/LCPublicAPI/docs/Multi-region.md +++ b/articles/LCPublicAPI/docs/Multi-region.md @@ -1,4 +1,4 @@ ---- +--- stoplight-id: nfdrob1smwn00 --- @@ -20,4 +20,4 @@ This information is especially relevant if you are building multi-tenant integra The provided .NET and Java SDKs already support multiple regions. For details on using these SDKs, refer to their documentation. -> If you're building your own client, avoid hard-coding Trados Cloud Platform API hosts, as new regions may be added in the future, requiring updates to hard-coded hosts. You can discover all available regions and their corresponding Public API hosts using the [List Regions](../reference/Global-Public-API.v1.json/paths/~1regions/get) endpoint from the new Global Public API, which is accessible on a new global host `api.cloud.trados.com`. \ No newline at end of file +> If you're building your own client, avoid hard-coding Trados Cloud Platform API hosts, as new regions may be added in the future, requiring updates to hard-coded hosts. You can discover all available regions and their corresponding Public API hosts using the [List Regions](../api/Global-Public-API.v1-fv.html#/operations/ListRegions) endpoint from the new Global Public API, which is accessible on a new global host `api.cloud.trados.com`. diff --git a/articles/LCPublicAPI/docs/Track-projects.md b/articles/LCPublicAPI/docs/Track-projects.md index b12dca8..0d36e1c 100644 --- a/articles/LCPublicAPI/docs/Track-projects.md +++ b/articles/LCPublicAPI/docs/Track-projects.md @@ -1,5 +1,6 @@ -# Track projects +# Track projects -After you create a project, you can track it by making a `GET` request to the [`/projects/{projectId}`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/get) endpoint to obtain information such as: creation date, due date, status, and resources used. +After you create a project, you can track it by making a `GET` request to the [`/projects/{projectId}`](../api/Public-API.v1-fv.html#/operations/GetProject) endpoint to obtain information such as: creation date, due date, status, and resources used. When requesting a list of projects, you can filter out projects that have a file download restriction by sending the `excludeOnline` query parameter. + diff --git a/articles/LCPublicAPI/docs/Update-project-quote.md b/articles/LCPublicAPI/docs/Update-project-quote.md index c64a819..93983e6 100644 --- a/articles/LCPublicAPI/docs/Update-project-quote.md +++ b/articles/LCPublicAPI/docs/Update-project-quote.md @@ -1,5 +1,5 @@ -# Update project quote -To update a quote, make a `PUT` request to the [`/projects/{projectId}`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/put) end point, and specify the `quote` field. +# Update project quote +To update a quote, make a `PUT` request to the [`/projects/{projectId}`](../api/Public-API.v1-fv.html#/operations/UpdateProject) end point, and specify the `quote` field. ## Cost types @@ -423,4 +423,4 @@ When the `costOrder` field is switched, the `total` percentage cost value will b ... } ... -``` \ No newline at end of file +``` diff --git a/articles/LCPublicAPI/docs/Use-fields-in-your-requests.md b/articles/LCPublicAPI/docs/Use-fields-in-your-requests.md index 32c2019..c0951e4 100644 --- a/articles/LCPublicAPI/docs/Use-fields-in-your-requests.md +++ b/articles/LCPublicAPI/docs/Use-fields-in-your-requests.md @@ -1,4 +1,4 @@ -# Use fields in your requests +# Use fields in your requests All the endpoints that return a resource representation allow the `fields` query parameter. Fields are used to specify the property values you want returned for your entities. @@ -6,13 +6,13 @@ When you make a call using the `fields` query parameter, make sure that you: - Separate the fields by commas. - Query by `properties` and/or `subproperties`. Write `subproperties` in the following format: `propertyname.subpropertyname`. - Familiarize yourself with the elements that get returned: - - The fields marked as “**required**” are always returned. + - The fields marked as “**required**” are always returned. - If fields are not customized for a given level and the requested field is non null then the default fields will be returned. - If fields are customized for a given level and the requested field is non null, the fields you requested will be returned. - The rules above are applied at nested level as well. -Let’s look at an example to understand how the `fields` parameter can be used. -We will perform a `GET` request to the [`/projects/projectId`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/get) endpoint and we will consider that in our example the `projectId`= 101. +Let’s look at an example to understand how the `fields` parameter can be used. +We will perform a `GET` request to the [`/projects/projectId`](../api/Public-API.v1-fv.html#/operations/GetProject) endpoint and we will consider that in our example the `projectId`= 101. #### 1. Fields consist of properties and subproperties. Here are some examples: - `Properties`: `id`; `name`; `customer`; `createdBy` and so on @@ -34,7 +34,7 @@ focus: false Request: `GET/projects/101?fields=customer` -Response: the project **identifier**; the customer **identifier**; the customer **name**; the customer’s **key contact**; the customer **location** +Response: the project **identifier**; the customer **identifier**; the customer **name**; the customer’s **key contact**; the customer **location** ![Nested Fields](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/GetProjectNestedFields.gif?raw=true) + diff --git a/articles/LCPublicAPI/docs/Use-paging-and-sorting-for-lists.md b/articles/LCPublicAPI/docs/Use-paging-and-sorting-for-lists.md index ea75cd2..4ed1872 100644 --- a/articles/LCPublicAPI/docs/Use-paging-and-sorting-for-lists.md +++ b/articles/LCPublicAPI/docs/Use-paging-and-sorting-for-lists.md @@ -1,4 +1,4 @@ -# Use paging and sorting for lists +# Use paging and sorting for lists When the outcome of a `GET` call is a list of items (item properties and total count), you can control the number of results displayed on a page as well as sort the results. @@ -6,15 +6,15 @@ To control the number of results displayed on a page, do the following: - To retrieve the full size of an entity, make a `GET` call to its corresponding endpoint. -For example, make a `GET` call to the [`/projects`](../reference/Public-API.v1.json/paths/~1projects/get) endpoint. The result consists in a list of all the projects (and their details) as well as a project count. The project count field returns the same value even if you further apply the `top` or `skip` query parameters. +For example, make a `GET` call to the [`/projects`](../api/Public-API.v1-fv.html#/operations/ListProjects) endpoint. The result consists in a list of all the projects (and their details) as well as a project count. The project count field returns the same value even if you further apply the `top` or `skip` query parameters. - To display only the first 10, 20, 30 (and so on) results in your list, use the `top` query parameter. -For example, for the [`/projects`](../reference/Public-API.v1.json/paths/~1projects/get) endpoint, your query may look like this if you are interested in the first 10 projects: `/projects?top=10` +For example, for the [`/projects`](../api/Public-API.v1-fv.html#/operations/ListProjects) endpoint, your query may look like this if you are interested in the first 10 projects: `/projects?top=10` - To get to a particular set of retrieved results in your list, use the `skip` query parameter. -For example, for the [`/projects`](../reference/Public-API.v1.json/paths/~1projects/get) endpoint, if you want to skip the first 100 results, your query will look like this: `/projects?skip=100`. +For example, for the [`/projects`](../api/Public-API.v1-fv.html#/operations/ListProjects) endpoint, if you want to skip the first 100 results, your query will look like this: `/projects?skip=100`. - To sort your list by certain properties, use the `sort` query parameter. @@ -23,3 +23,4 @@ The default sorting strategy is ascending. Add unary operators for ascending (+) For example, if you want to sort results by due date (-) and name (+), your query will look like this: `/projects?sort=-dueBy,name`. Note that sorting can be performed only on first-level fields (not nested fields), for naturally comparable types like strings, numbers, and dates. + diff --git a/articles/LCPublicAPI/docs/Whats-New.md b/articles/LCPublicAPI/docs/Whats-New.md index dc00a91..8f7da76 100644 --- a/articles/LCPublicAPI/docs/Whats-New.md +++ b/articles/LCPublicAPI/docs/Whats-New.md @@ -1,10 +1,10 @@ -# What's new +# What's new
## 10 September 2025 -- With this release we deliver [Lookup](../reference/Public-API.v1.json/paths/~1translations~1lookup/post), [Concordance](../reference/Public-API.v1.json/paths/~1translations~1concordance/post), [Add](../reference/Public-API.v1.json/paths/~1translations~1translation-unit/post) and [Update](../reference/Public-API.v1.json/paths/~1translations~1translation-unit/put) translation units to a translation memory. See [this](./translations/Translations.md) page for more details. -- You can now [obtain](../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/get) and [update](../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/put) the resources sequence information for a Translation Engine. +- With this release we deliver [Lookup](../api/Public-API.v1-fv.html#/operations/TranslationsLookup), [Concordance](../api/Public-API.v1-fv.html#/operations/TranslationsConcordanceSearch), [Add](../api/Public-API.v1-fv.html#/operations/TranslationsAdd) and [Update](../api/Public-API.v1-fv.html#/operations/TranslationsUpdate) translation units to a translation memory. See [this](./translations/Translations.md) page for more details. +- You can now [obtain](../api/Public-API.v1-fv.html#/operations/GetTranslationEngine) and [update](../api/Public-API.v1-fv.html#/operations/UpdateTranslationEngine) the resources sequence information for a Translation Engine. - A new project event `PROJECT.STARTED` has been added. See [this](./webhooks/Webhooks-payload.md) page for more details. @@ -14,19 +14,19 @@ ## 12 August 2025 -- You can now get word count and cost estimation analysis of files without the need to create a project. The functionality is accessible via the [Request File Analysis](../reference/Public-API.v1.json/paths/~1files~1analysis/post) and [Poll File Analysis](../reference/Public-API.v1.json/paths/~1files~1analysis~1{operationId}/get) endpoints. -- As previously announced, the `languageProcessingRuleId` parameter is now mandatory for [Update Translation Engine](../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/put) endpoint. +- You can now get word count and cost estimation analysis of files without the need to create a project. The functionality is accessible via the [Request File Analysis](../api/Public-API.v1-fv.html#/operations/RequestFileAnalysis) and [Poll File Analysis](../api/Public-API.v1-fv.html#/operations/PollFileAnalysis) endpoints. +- As previously announced, the `languageProcessingRuleId` parameter is now mandatory for [Update Translation Engine](../api/Public-API.v1-fv.html#/operations/UpdateTranslationEngine) endpoint. - We fixed various bugs. ## 15 July 2025 -- You can now add the `systemStatus` property on termbase entries. See [Update Termbase Entry](../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1entries~1{entryId}/put). -- We've improved the documentation around zip files on [Add Source File](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files/post) and [Attach Source File](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files~1attach-files/post) endpoints. -- As a reminder, we want to let our users know that the field `languageProcessingRuleId` under [Update Translation Engine](../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/put) endpoint will be mandatory. -- [Import Termbase](../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1imports/post) and [Poll Termbase Import](../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1imports~1{importId}/get) endpoints will return `pending` instead of `queued` for the status. This change is scheduled to take effect no sooner than six months from now. +- You can now add the `systemStatus` property on termbase entries. See [Update Termbase Entry](../api/Public-API.v1-fv.html#/operations/UpdateTermbaseEntry). +- We've improved the documentation around zip files on [Add Source File](../api/Public-API.v1-fv.html#/operations/AddSourceFile) and [Attach Source File](../api/Public-API.v1-fv.html#/operations/AddSourceFiles) endpoints. +- As a reminder, we want to let our users know that the field `languageProcessingRuleId` under [Update Translation Engine](../api/Public-API.v1-fv.html#/operations/UpdateTranslationEngine) endpoint will be mandatory. +- [Import Termbase](../api/Public-API.v1-fv.html#/operations/ImportTermbase) and [Poll Termbase Import](../api/Public-API.v1-fv.html#/operations/PollTermbaseImport) endpoints will return `pending` instead of `queued` for the status. This change is scheduled to take effect no sooner than six months from now. ## 8 May 2025 -- You can now download the target files associated with a project in a ZIP format. This functionality is accessible through three endpoints: [Export](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1files~1exports/post), [Poll](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1files~1exports~1{exportId}/get), and [Download](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1files~1exports~1{exportId}~1download/get). -- With this release we deliver the [Create](../reference/Public-API.v1.json/paths/~1pricing-models/post), [Update](../reference/Public-API.v1.json/paths/~1pricing-models~1{pricingModelId}/put) and [Delete](../reference/Public-API.v1.json/paths/~1pricing-models~1{pricingModelId}/delete) pricing model endpoints. Together with these, several changes were required to correct the pricing model response: +- You can now download the target files associated with a project in a ZIP format. This functionality is accessible through three endpoints: [Export](../api/Public-API.v1-fv.html#/operations/ExportProjectFiles), [Poll](../api/Public-API.v1-fv.html#/operations/ExportProjectFilesStatus), and [Download](../api/Public-API.v1-fv.html#/operations/DownloadFile). +- With this release we deliver the [Create](../api/Public-API.v1-fv.html#/operations/CreatePricingModel), [Update](../api/Public-API.v1-fv.html#/operations/UpdatePricingModel) and [Delete](../api/Public-API.v1-fv.html#/operations/DeletePricingModel) pricing model endpoints. Together with these, several changes were required to correct the pricing model response: - `name` : changed from required to default. - `additionalCosts.volumeUnitType` changed from required to non required. - `additionalCosts.conditionalCostType` changed from required to non required. @@ -42,18 +42,18 @@ ## 1 April 2025 - As part of the Connected AI feature, we have added the following updates and new endpoints: - - We have introduced a new endpoint for listing [Large Language Models](../reference/Public-API.v1.json/paths/~1connected-ai~1llm-configurations/get) (LLMs). - - We have added the functionality to [update your translation engines](../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/put) with the new LLM resource type. -- We have added the source word count to the [List Source Files](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files/get) endpoint. + - We have introduced a new endpoint for listing [Large Language Models](../api/Public-API.v1-fv.html#/operations/ListLlmConfigurations) (LLMs). + - We have added the functionality to [update your translation engines](../api/Public-API.v1-fv.html#/operations/UpdateTranslationEngine) with the new LLM resource type. +- We have added the source word count to the [List Source Files](../api/Public-API.v1-fv.html#/operations/ListSourceFiles) endpoint. - We fixed various bugs. ## 10 March 2025 - We've introduced the concept of [Batched Webhooks](../docs/webhooks/Batched-webhooks.md). -- We've updated the models for [Import Translation Memory](../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}~1imports/post), [Export Translation Memory](../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}~1exports/post) and [Get Translation Memory Import History](../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}~1imports/get). - - As part of this, the existing `status` field is now marked as deprecated in the response model of [Import Translation Memory](../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}~1imports/post) and [Export Translation Memory](../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}~1exports/post). - - Additionally, the fields `importAsPlainText` and `triggerRecomputeStatistics` are marked as deprecated in the request model of [Import Translation Memory](../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}~1imports/post) and in the response model of [Get Translation Memory Import History](../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}~1imports/get), alongside the `traceId` field. +- We've updated the models for [Import Translation Memory](../api/Public-API.v1-fv.html#/operations/ImportTranslationMemory), [Export Translation Memory](../api/Public-API.v1-fv.html#/operations/ExportTranslationMemory) and [Get Translation Memory Import History](../api/Public-API.v1-fv.html#/operations/GetTMImportHistory). + - As part of this, the existing `status` field is now marked as deprecated in the response model of [Import Translation Memory](../api/Public-API.v1-fv.html#/operations/ImportTranslationMemory) and [Export Translation Memory](../api/Public-API.v1-fv.html#/operations/ExportTranslationMemory). + - Additionally, the fields `importAsPlainText` and `triggerRecomputeStatistics` are marked as deprecated in the request model of [Import Translation Memory](../api/Public-API.v1-fv.html#/operations/ImportTranslationMemory) and in the response model of [Get Translation Memory Import History](../api/Public-API.v1-fv.html#/operations/GetTMImportHistory), alongside the `traceId` field. - Their decommissioning is scheduled at a minimum of six months from now. @@ -66,7 +66,7 @@ - As part of our multi-region support, we have added global endpoints to facilitate the discovery of available regions and hosts. For more details, see the [Multi-region](../docs/Multi-region.md) page. - We have updated the documentation on how to use the new SDK with multi-region features. - Additionally, we made various minor contract corrections. -- As a reminder, we want to let our users know that the field `languageProcessingRuleId` under [Update Translation Engine](../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/put) endpoint will become mandatory. +- As a reminder, we want to let our users know that the field `languageProcessingRuleId` under [Update Translation Engine](../api/Public-API.v1-fv.html#/operations/UpdateTranslationEngine) endpoint will become mandatory. ## 6 November 2024 - We are planning to transition the hosting of our API from **lc-api.sdl.com** to **api.eu.cloud.trados.com** on November 9th: @@ -79,91 +79,91 @@ - You now have the ability to add notes to customer quotes. - - We have updated the deprecated types for the `language` and `targetLanguages` fields in the [Add Source File Request](../reference/Public-API.v1.json/components/schemas/source-file-request) model, which now reference [Language Request](../reference/Public-API.v1.json/components/schemas/language-request) model. In the updated API contract, these fields have been changed from simple strings to structured objects containing a `languageCode` property, enhancing clarity and consistency in language handling. + - We have updated the deprecated types for the `language` and `targetLanguages` fields in the [Add Source File Request](../api/Public-API.v1-fv.html#/schemas/source-file-request) model, which now reference [Language Request](../api/Public-API.v1-fv.html#/schemas/language-request) model. In the updated API contract, these fields have been changed from simple strings to structured objects containing a `languageCode` property, enhancing clarity and consistency in language handling. - > We will provide backwards compatibility until May 2025. However, starting with this release, SDKs will be updated to use the new types. Please ensure your integration is updated to use the new [Language Request](../reference/Public-API.v1.json/components/schemas/language-request) model. + > We will provide backwards compatibility until May 2025. However, starting with this release, SDKs will be updated to use the new types. Please ensure your integration is updated to use the new [Language Request](../api/Public-API.v1-fv.html#/schemas/language-request) model. - We fixed various bugs. ## 11 September 2024 -- With this release we deliver the [PerfectMatch](https://docs.rws.com/791595/1155478/trados-enterprise---accelerate/perfectmatch-general-information) functionality. You can apply PerfectMatch either at the start of a project or midway through the translation process. These capabilities are accessible via the [PerfectMatch Mapping](../reference/Public-API.v1.json/paths/~1perfect-match-mappings/post) menu. -- We've improved filtering for projects lists. See the [List Projects](../reference/Public-API.v1.json/paths/~1projects/get) endpoint. +- With this release we deliver the [PerfectMatch](https://docs.rws.com/791595/1155478/trados-enterprise---accelerate/perfectmatch-general-information) functionality. You can apply PerfectMatch either at the start of a project or midway through the translation process. These capabilities are accessible via the [PerfectMatch Mapping](../api/Public-API.v1-fv.html#/operations/CreatePerfectMatchMapping) menu. +- We've improved filtering for projects lists. See the [List Projects](../api/Public-API.v1-fv.html#/operations/ListProjects) endpoint. - A recent update has been made to the [Webhooks Setup](../docs/webhooks/Webhooks-setup.md) page, informing the customers that the order of webhook event deliveries cannot be guaranteed. Please take this into consideration using the `timestamp` field to determine the event generation time. - You can now set due dates for tasks during project creation. - We fixed various bugs. ## 28 August 2024 -- We have introduced a new option which allows users to switch to a different pricing model at the Customer Quote Review task using the dedicated endpoint [Update Project Pricing Model](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1pricing-model/put). -- You now have the ability to view the locking color options for MTQE segments by utilizing the [Get Project Template](../reference/Public-API.v1.json/paths/~1project-templates~1{projectTemplateId}/get) endpoint. -- The parameter `termbaseStructure.fields.type` in the [Get Termbase](../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}/get) endpoint is no longer marked as mandatory. +- We have introduced a new option which allows users to switch to a different pricing model at the Customer Quote Review task using the dedicated endpoint [Update Project Pricing Model](../api/Public-API.v1-fv.html#/operations/UpdateProjectPricingModel). +- You now have the ability to view the locking color options for MTQE segments by utilizing the [Get Project Template](../api/Public-API.v1-fv.html#/operations/GetProjectTemplate) endpoint. +- The parameter `termbaseStructure.fields.type` in the [Get Termbase](../api/Public-API.v1-fv.html#/operations/GetTermbase) endpoint is no longer marked as mandatory. - We fixed various bugs. ## 1 July 2024 -- We updated the folder/resource locations to the new format, which now includes the [path](../reference/Public-API.v1.json/components/schemas/folder). +- We updated the folder/resource locations to the new format, which now includes the [path](../api/Public-API.v1-fv.html#/schemas/folder). - We fixed various bugs. ## 9 May 2024 -- You can configure the number of days after which projects are given the Completed or Archived status automatically using the `completionConfiguration` option under the following endpoints: [Create](../reference/Public-API.v1.json/paths/~1projects/post) and [Update](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/put) Project, [Create](../reference/Public-API.v1.json/paths/~1project-templates/post) and [Update](../reference/Public-API.v1.json/paths/~1project-templates~1{projectTemplateId}/put) Project Template. -- The field `languageProcessingRuleId` under [Update Translation Engine](../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/put) endpoint will become mandatory. The enforcement is scheduled at a minimum of six months from now. -- As a reminder, we want to let our users know that we updated the folder/resource locations to the new format, which now includes the [path](../reference/Public-API.v1.json/components/schemas/folder-v2). The old fields are marked as deprecated and their decommissioning is planned for near future. Please ensure you update the implementation if you are using fields that are marked as deprecated. +- You can configure the number of days after which projects are given the Completed or Archived status automatically using the `completionConfiguration` option under the following endpoints: [Create](../api/Public-API.v1-fv.html#/operations/CreateProject) and [Update](../api/Public-API.v1-fv.html#/operations/UpdateProject) Project, [Create](../api/Public-API.v1-fv.html#/operations/CreateProjectTemplate) and [Update](../api/Public-API.v1-fv.html#/operations/UpdateProjectTemplate) Project Template. +- The field `languageProcessingRuleId` under [Update Translation Engine](../api/Public-API.v1-fv.html#/operations/UpdateTranslationEngine) endpoint will become mandatory. The enforcement is scheduled at a minimum of six months from now. +- As a reminder, we want to let our users know that we updated the folder/resource locations to the new format, which now includes the [path](../api/Public-API.v1-fv.html#/schemas/folder-v2). The old fields are marked as deprecated and their decommissioning is planned for near future. Please ensure you update the implementation if you are using fields that are marked as deprecated. - We fixed various bugs. ## 8 April 2024 - We extended the information available on the webhooks setup page, [Circuit Breaker](../docs/webhooks/Webhooks-setup.md#circuit-breaker) section. -- We removed the `languageId` allowed values for the [Export Quote Report](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/post) endpoint. -- As a reminder, we want to let our users know that we updated the folder/resource locations to the new format, which now includes the [path](../reference/Public-API.v1.json/components/schemas/folder-v2). The old fields are marked as deprecated and their decommissioning is planned for near future. Please ensure you update the implementation if you are using fields that are marked as deprecated. +- We removed the `languageId` allowed values for the [Export Quote Report](../api/Public-API.v1-fv.html#/operations/ExportQuoteReport) endpoint. +- As a reminder, we want to let our users know that we updated the folder/resource locations to the new format, which now includes the [path](../api/Public-API.v1-fv.html#/schemas/folder-v2). The old fields are marked as deprecated and their decommissioning is planned for near future. Please ensure you update the implementation if you are using fields that are marked as deprecated. - We fixed various bugs. ## 27 February 2024 -- With this release we deliver the [Update](../reference/Public-API.v1.json/paths/~1project-templates~1{projectTemplateId}/put) and [Delete Project Template](../reference/Public-API.v1.json/paths/~1project-templates~1{projectTemplateId}/delete) endpoints. Subsequent iterations with new implementations will follow, ensuring continuous enhancement for project template update. +- With this release we deliver the [Update](../api/Public-API.v1-fv.html#/operations/UpdateProjectTemplate) and [Delete Project Template](../api/Public-API.v1-fv.html#/operations/DeleteProjectTemplate) endpoints. Subsequent iterations with new implementations will follow, ensuring continuous enhancement for project template update. - We published a new page about [multipart considerations](../docs/How-to-multipart.md) - We fixed various bugs. ## 13 December 2023 -- With this release we deliver the [Create Project Template](../reference/Public-API.v1.json/paths/~1project-templates/post) endpoint. Subsequent iterations with new implementations will follow, ensuring continuous enhancement for project template creation. -- We enhanced the response model for the [Get Project Template](../reference/Public-API.v1.json/paths/~1project-templates~1{projectTemplateId}/get) endpoint, which now includes settings for verification and batch tasks. The existing `forceOnline` and `quoteTemplate` fields from root level are now marked as deprecated, as they have been moved to the `settings` section. Their decommissioning is scheduled at a minimum of six months from now. +- With this release we deliver the [Create Project Template](../api/Public-API.v1-fv.html#/operations/CreateProjectTemplate) endpoint. Subsequent iterations with new implementations will follow, ensuring continuous enhancement for project template creation. +- We enhanced the response model for the [Get Project Template](../api/Public-API.v1-fv.html#/operations/GetProjectTemplate) endpoint, which now includes settings for verification and batch tasks. The existing `forceOnline` and `quoteTemplate` fields from root level are now marked as deprecated, as they have been moved to the `settings` section. Their decommissioning is scheduled at a minimum of six months from now. - Webhooks will stop trying to send on urls that cause timeouts, retrying later. Read more [here](../docs/webhooks/Webhooks-setup.md#circuit-breaker). - We fixed various bugs. ## 16 November 2023 -- We introduced the `applicableOutcomes` field under the [get task](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}/get) endpoint to be used when completing the tasks. +- We introduced the `applicableOutcomes` field under the [get task](../api/Public-API.v1-fv.html#/operations/GetTask) endpoint to be used when completing the tasks. - You can now change the folder visibility when updating a customer. - We fixed various bugs. ## 17 October 2023 -- This release delivers more integrations for the customer resource type. You can now [create](../reference/Public-API.v1.json/paths/~1customers/post), [update](../reference/Public-API.v1.json/paths/~1customers~1{customerId}/put) and [delete](../reference/Public-API.v1.json/paths//~1customers~1{customerId}/delete) customers. -- We enhanced the response model for [pricing](../reference/Public-API.v1.json/paths/~1pricing-models/get) endpoints. -- As previously announced, we made the `dueBy`, the `location` and the `languageDirections` fields mandatory for [creating a project](../reference/Public-API.v1.json/paths/~1projects/post). -- We added `deliveredBy` as a new field for the [update project](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/put) capabilities. +- This release delivers more integrations for the customer resource type. You can now [create](../api/Public-API.v1-fv.html#/operations/CreateCustomer), [update](../api/Public-API.v1-fv.html#/operations/UpdateCustomer) and [delete](../api/Public-API.v1-fv.html#/operations/DeleteCustomer) customers. +- We enhanced the response model for [pricing](../api/Public-API.v1-fv.html#/operations/ListPricingModels) endpoints. +- As previously announced, we made the `dueBy`, the `location` and the `languageDirections` fields mandatory for [creating a project](../api/Public-API.v1-fv.html#/operations/CreateProject). +- We added `deliveredBy` as a new field for the [update project](../api/Public-API.v1-fv.html#/operations/UpdateProject) capabilities. - We extended the information available on the [webhooks setup](../docs/webhooks/Webhooks-setup.md) page. - We fixed various bugs. ## 06 September 2023 -- With this release we deliver the [create](../reference/Public-API.v1.json/paths/~1schedule-templates/post), [read](../reference/Public-API.v1.json/paths/~1schedule-templates~1{scheduleTemplateId}/get), [update](../reference/Public-API.v1.json/paths/~1schedule-templates~1{scheduleTemplateId}/put) and [delete](../reference/Public-API.v1.json/paths/~1schedule-templates~1{scheduleTemplateId}/delete) endpoints of the new schedule template resource. You will find the endpoints under the [schedule templates](../reference/Public-API.v1.json/paths/~1schedule-templates/get) menu. You can also retrieve the schedule template attached to a [project](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/get) or to a [project template](../reference/Public-API.v1.json/paths/~1project-templates~1{projectTemplateId}/get) using the relevant fields. -- Additionally, the [create project](../reference/Public-API.v1.json/paths/~1projects/post) now supports the schedule template resource, either individually or from the project template. -- We added the `apiInternalId` to [task type](../reference/Public-API.v1.json/components/schemas/task-type) and [workflow task template](../reference/Public-API.v1.json/components/schemas/workflow-task-template) to easily identify custom tasks. +- With this release we deliver the [create](../api/Public-API.v1-fv.html#/operations/CreateScheduleTemplate), [read](../api/Public-API.v1-fv.html#/operations/GetScheduleTemplate), [update](../api/Public-API.v1-fv.html#/operations/UpdateScheduleTemplate) and [delete](../api/Public-API.v1-fv.html#/operations/DeleteScheduleTemplate) endpoints of the new schedule template resource. You will find the endpoints under the [schedule templates](../api/Public-API.v1-fv.html#/operations/ListScheduleTemplates) menu. You can also retrieve the schedule template attached to a [project](../api/Public-API.v1-fv.html#/operations/GetProject) or to a [project template](../api/Public-API.v1-fv.html#/operations/GetProjectTemplate) using the relevant fields. +- Additionally, the [create project](../api/Public-API.v1-fv.html#/operations/CreateProject) now supports the schedule template resource, either individually or from the project template. +- We added the `apiInternalId` to [task type](../api/Public-API.v1-fv.html#/schemas/task-type) and [workflow task template](../api/Public-API.v1-fv.html#/schemas/workflow-task-template) to easily identify custom tasks. - We fixed various bugs. ## 17 August 2023 -- We updated the folder/resource locations to the new format, which now includes the [path](../reference/Public-API.v1.json/components/schemas/folder-v2). The old fields are marked as deprecated and their decommissioning is scheduled at a minimum of six months from now. Please ensure you update the implementation if you are using fields that are marked as deprecated. -- Enhanced [project configuration](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1configuration/put) now includes new choices for updating translation memory settings. +- We updated the folder/resource locations to the new format, which now includes the [path](../api/Public-API.v1-fv.html#/schemas/folder-v2). The old fields are marked as deprecated and their decommissioning is scheduled at a minimum of six months from now. Please ensure you update the implementation if you are using fields that are marked as deprecated. +- Enhanced [project configuration](../api/Public-API.v1-fv.html#/operations/UpdateProjectConfiguration) now includes new choices for updating translation memory settings. - We fixed various bugs. - As a reminder, we want to let our users know that validations related to the following fields used at project creation: `dueBy`, `location` and `languageDirections` will become **required** in near future. ## 02 August 2023 -- With this release we provide a new endpoint to allow integrators to update only one [custom field](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1custom-fields~1{customFieldKey}/put) of a project +- With this release we provide a new endpoint to allow integrators to update only one [custom field](../api/Public-API.v1-fv.html#/operations/UpdateCustomField) of a project - We extended the information available on the [webhooks](../docs/webhooks/Webhooks-payload.md) page -- You can now update a translation engine as a stand alone resource or one that is linked to a live project. Read this [page](../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/put) for more details. +- You can now update a translation engine as a stand alone resource or one that is linked to a live project. Read this [page](../api/Public-API.v1-fv.html#/operations/UpdateTranslationEngine) for more details. - We fixed various bugs. ## 15 June 2023 -- We extended the information provided for both [source](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files~1{sourceFileId}~1versions/get) and [target](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions/get) files in a task with the `name`, the `version` and `originatingTaskId` details -- We made available a new [rate-limits](../reference/Public-API.v1.json/paths/~1rate-limits/get) endpoint and a new header which includes the relevant policy name, namely, the `X-RateLimit-Policy` header. Read the [API-rate-limits](../docs/API-rate-limits.md) page for more details. +- We extended the information provided for both [source](../api/Public-API.v1-fv.html#/operations/ListSourceFileVersions) and [target](../api/Public-API.v1-fv.html#/operations/ListTargetFileVersions) files in a task with the `name`, the `version` and `originatingTaskId` details +- We made available a new [rate-limits](../api/Public-API.v1-fv.html#/operations/ListRateLimits) endpoint and a new header which includes the relevant policy name, namely, the `X-RateLimit-Policy` header. Read the [API-rate-limits](../docs/API-rate-limits.md) page for more details. - We improved descriptions for the `default` and `required` fields [here](../docs/Use-fields-in-your-requests.md). - We updated the JAVA samples to reflect changes in the SDK. - We fixed various bugs. @@ -172,7 +172,7 @@ ## 19 May 2023 - We replaced the `friendlyId` on all Project Group endpoints with `shortId` and we've exposed it on all Project endpoints too. - As a security enhancement, we will restrict some characters in naming projects and project files. The unsupported characters are: `<`, `>`, `:`, `"`, `/`, `\`, `|`, `?`, `*`. -- In 6 months we will introduce the following breaking change: on the [Export Quote Report](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/post) endpoint, if the quote is not generated using a Quote Template, the response will be an empty object. +- In 6 months we will introduce the following breaking change: on the [Export Quote Report](../api/Public-API.v1-fv.html#/operations/ExportQuoteReport) endpoint, if the quote is not generated using a Quote Template, the response will be an empty object. - We will enforce validations related to the following fields at project creation: `dueBy`, `location` and `languageDirections`. These fields will become **required** in 3 months. - As a reminder, we want to let our users know that for security issues or bugs we may introduce breaking changes at any time. @@ -197,32 +197,32 @@ ## 15 February 2023 - We enabled support for the Trados Enterprise Quote Template functionality -- We introduced the `projectManagers` field to enable the selection of individuals or of users groups at [project creation](../reference/Public-API.v1.json/paths/~1projects/post). -- We removed unnecessary outcome values for the [Task Completed Request](../reference/Public-API.v1.json/components/schemas/task-complete-request) model on the [Complete Task](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}~1complete/put) operation. This impacts the SDKs, so update your integration accordingly. -- You can now specify the `projectCreator` as an assignee type for a task when [updating a project](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/put). +- We introduced the `projectManagers` field to enable the selection of individuals or of users groups at [project creation](../api/Public-API.v1-fv.html#/operations/CreateProject). +- We removed unnecessary outcome values for the [Task Completed Request](../api/Public-API.v1-fv.html#/schemas/task-complete-request) model on the [Complete Task](../api/Public-API.v1-fv.html#/operations/CompleteTask) operation. This impacts the SDKs, so update your integration accordingly. +- You can now specify the `projectCreator` as an assignee type for a task when [updating a project](../api/Public-API.v1-fv.html#/operations/UpdateProject). - We will enforce validations related to the following fields at project creation: `dueBy`, `location` and `languageDirections`. These fields will become **required** in 6 months. ## 11 January 2023 -- You can now [create](../reference/Public-API.v1.json/paths/~1project-groups/post), [read](../reference/Public-API.v1.json/paths/~1project-groups~1{projectGroupId}/get), [update](../reference/Public-API.v1.json/paths/~1project-groups~1{projectGroupId}/put) and [delete](../reference/Public-API.v1.json/paths/~1project-groups~1{projectGroupId}/delete) Project Groups +- You can now [create](../api/Public-API.v1-fv.html#/operations/CreateProjectGroup), [read](../api/Public-API.v1-fv.html#/operations/GetProjectGroup), [update](../api/Public-API.v1-fv.html#/operations/UpdateProjectGroup) and [delete](../api/Public-API.v1-fv.html#/operations/DeleteProjectGroup) Project Groups - We've improved filtering for projects lists, namely by status and by creation date - We've introduced fields displaying more details for error tasks - We fixed various bugs ## 22 November 2022 -- To enable support for the Trados Enterprise multi-source resources functionality, we're introducing an important breaking change: when creating workflows with multi-source languages from the TE UI, please use the new `languageDirection` scope value. As the new feature may limit previously working functionality, inconsistencies within applications or certain products may appear. For integrations that are impacted, please contact their developers to update the integrations. -- We've made 3 new endpoints available for [TM export](../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}~1exports/post) +- To enable support for the Trados Enterprise multi-source resources functionality, we're introducing an important breaking change: when creating workflows with multi-source languages from the TE UI, please use the new `languageDirection` scope value. As the new feature may limit previously working functionality, inconsistencies within applications or certain products may appear. For integrations that are impacted, please contact their developers to update the integrations. +- We've made 3 new endpoints available for [TM export](../api/Public-API.v1-fv.html#/operations/ExportTranslationMemory) - We removed the old 10 MB size limitations for files, termbases and translation memories. We now support [these values](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) for files and [these values](https://docs.rws.com/791595/741139/trados-enterprise---accelerate/importing-tm-content) for importing translation memory content. - Users can now retrieve task comments. -- We've added the [TM Import history](../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}~1imports/get) endpoint. +- We've added the [TM Import history](../api/Public-API.v1-fv.html#/operations/GetTMImportHistory) endpoint. - We are postponing the breaking change in the `LanguageDirectionRequest` model, previously announced for November, and consequently the model can be used until the end of 2022. - 4 new endpoints are subject to [API limits](https://languagecloud.sdl.com/lc/api-docs/d2266fabaa1bf-api-rate-limits#project-files-rate-limits) - We fixed various bugs. ## 28 October 2022 -- You can [import translation memories](../docs/translation-memory/Translation-memory-import-export.md) using the [import](../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}~1imports/post) and [poll](../reference/Public-API.v1.json/paths/~1translation-memory~1imports~1{importId}/get) endpoints. Note that the maximum size for an imported translation memory is 10 MB. +- You can [import translation memories](../docs/translation-memory/Translation-memory-import-export.md) using the [import](../api/Public-API.v1-fv.html#/operations/ImportTranslationMemory) and [poll](../api/Public-API.v1-fv.html#/operations/PollTMImport) endpoints. Note that the maximum size for an imported translation memory is 10 MB. - We added traceability fields for terminology entries: createdAt, createdBy, lastModifiedAt, lastModifiedBy - We added recommendations for [HTTP headers](../docs/Headers-considerations.md) - We updated the recommendations for [Authentication](../docs/Authentication.md) and the [API rate limits](../docs/API-rate-limits.md) with token values and other details @@ -230,19 +230,19 @@ ## 15 September 2022 - We introduced a new [Export Quote Report](../docs/Export-quote-report.md) mechanism and deprecated the older endpoint -- We updated the constrains for the 'name' and 'description' fields for the [Create Project](../reference/Public-API.v1.json/paths/~1projects/post) and [Update Project](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/put) endpoints that will be enforced starting December 2022 +- We updated the constrains for the 'name' and 'description' fields for the [Create Project](../api/Public-API.v1-fv.html#/operations/CreateProject) and [Update Project](../api/Public-API.v1-fv.html#/operations/UpdateProject) endpoints that will be enforced starting December 2022 - We introduced a new page for the currently [Known issues](../docs/Known-Issues.md) - We fixed various bugs ## 22 August 2022 -- You can now read [language processing rules](../reference/Public-API.v1.json/paths/~1language-processing-rules/get) and [translation memory field templates](../reference/Public-API.v1.json/paths/~1translation-memory~1field-templates/get) -- You can now [create](../reference/Public-API.v1.json/paths/~1translation-memory/post), [read](../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}/get), [update](../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}/put), [delete](../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}/delete) and [copy](../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}~1copy/post) translation memories +- You can now read [language processing rules](../api/Public-API.v1-fv.html#/operations/ListLanguageProcessingRules) and [translation memory field templates](../api/Public-API.v1-fv.html#/operations/ListFieldTemplates) +- You can now [create](../api/Public-API.v1-fv.html#/operations/CreateTranslationMemory), [read](../api/Public-API.v1-fv.html#/operations/GetTranslationMemory), [update](../api/Public-API.v1-fv.html#/operations/UpdateTranslationMemory), [delete](../api/Public-API.v1-fv.html#/operations/DeleteTranslationMemory) and [copy](../api/Public-API.v1-fv.html#/operations/CopyTranslationMemory) translation memories ## 12 August 2022 - Retiring of the Export Quote endpoint will happen in 6 months. You can read more about it [here](../docs/Public-API-Management-Process.md#endpoint-retirement-process). -- We now support the Export Quote Report functionality with 3 new endpoints: [Poll Quote Export Report](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/get), [Export Quote](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/post) and [Download Exported Quote](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1download/get). -- You can now upload [source](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}~1source-files~1{sourceFileId}~1versions/post) and [target](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}~1target-files~1{targetFileId}~1versions/post) file versions +- We now support the Export Quote Report functionality with 3 new endpoints: [Poll Quote Export Report](../api/Public-API.v1-fv.html#/operations/PollQuoteReportExport), [Export Quote](../api/Public-API.v1-fv.html#/operations/ExportQuoteReport) and [Download Exported Quote](../api/Public-API.v1-fv.html#/operations/DownloadQuoteReport). +- You can now upload [source](../api/Public-API.v1-fv.html#/operations/AddSourceFileVersion) and [target](../api/Public-API.v1-fv.html#/operations/AddTargetFileVersion) file versions - We published a new page about [File formats](../docs/File-formats.md) - We fixed various bugs @@ -253,12 +253,12 @@ ## 19 July 2022 -- You can now update [source](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files~1{sourceFileId}/put) and [target](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}/put) file names +- You can now update [source](../api/Public-API.v1-fv.html#/operations/UpdateSourceFile) and [target](../api/Public-API.v1-fv.html#/operations/UpdateTargetFile) file names - We fixed various bugs ## 28 June 2022 -- You can now [read](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1configuration/get) and [update](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1configuration/put) translation memory settings for a project's configuration +- You can now [read](../api/Public-API.v1-fv.html#/operations/GetProjectConfiguration) and [update](../api/Public-API.v1-fv.html#/operations/UpdateProjectConfiguration) translation memory settings for a project's configuration - We updated the user guide page for [using fields](../docs/Use-fields-in-your-requests.md) with new animated gifs - We fixed various bugs @@ -272,7 +272,7 @@ - To address potentially infected files, we've updated our API contracts to support In-Product Antivirus scanning ## 04 May 2022 -- You can now upload a .zip archive using [this](../reference/Public-API.v1.json/paths/~1files/post) endpoint and then [poll](../reference/Public-API.v1.json/paths/~1files~1{fileId}/get) for the extracted files. After extraction, you can upload multiple source files to a project using a [single call](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files~1attach-files/post). The maximum size for an imported .zip file is 10 MB. +- You can now upload a .zip archive using [this](../api/Public-API.v1-fv.html#/operations/UploadZipFile) endpoint and then [poll](../api/Public-API.v1-fv.html#/operations/PollUploadZipFile) for the extracted files. After extraction, you can upload multiple source files to a project using a [single call](../api/Public-API.v1-fv.html#/operations/AddSourceFiles). The maximum size for an imported .zip file is 10 MB. - Our Java SDK client is now available in **public beta**. [Here](../docs/api-clients/java/Java-Client.md) are more details on how to start integrating it into your solution - We published the API limits [here](../docs/API-rate-limits.md) - We updated the Custom fields [page](../docs/Custom-Fields.md) with useful gifs @@ -285,7 +285,7 @@ - We fixed various bugs ## 22 February 2022 -- You can now convert an xdt file into a termbase structure using [this](../reference/Public-API.v1.json/paths/~1termbase-templates~1convert-xdt/post) dedicated endpoint +- You can now convert an xdt file into a termbase structure using [this](../api/Public-API.v1-fv.html#/operations/ConvertTermbaseTemplate) dedicated endpoint - When updating a termbase entry you will have to provide either the name or the identifier for the `termbaseFieldValues` - We fixed various bugs @@ -301,7 +301,7 @@ - We fixed various bugs ## 18 November 2021 -- You can now update the configurations of future tasks using the `projectPlan` field, in the [`update project`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/put) endpoint +- You can now update the configurations of future tasks using the `projectPlan` field, in the [`update project`](../api/Public-API.v1-fv.html#/operations/UpdateProject) endpoint - Fixed various bugs ## 20 October 2021 @@ -310,7 +310,7 @@ ## 04 October 2021 - Added multiple date formats -- Added pagination for [`List File Processing Configurations`](../reference/Public-API.v1.json/paths/~1file-processing-configurations/get) endpoint +- Added pagination for [`List File Processing Configurations`](../api/Public-API.v1-fv.html#/operations/ListFileProcessingConfigurations) endpoint - Fixed various bugs ## 08 September 2021 @@ -326,13 +326,13 @@ - When creating/updating projects using a project template which has mandatory custom fields, you must supply those custom fields - Fixed various bugs -**We will remove deprecated fields from the [`ErrorResponse`](../reference/Public-API.v1.json/components/schemas/error-response) model in an upcoming release. Please ensure you are not using fields marked as deprecated!** +**We will remove deprecated fields from the [`ErrorResponse`](../api/Public-API.v1-fv.html#/schemas/error-response) model in an upcoming release. Please ensure you are not using fields marked as deprecated!** ## 29 July 2021 - Added endpoints for custom field definitions. - Added support for custom fields on projects and project templates. -- The `translationEngine`, `fileProcessingConfiguration`, `workflow` fields are now required on the [`/projects`](../reference/Public-API.v1.json/paths/~1projects/post) endpoint. -- The `isSkipped` field is now marked as required on the [`/workflow/updateworkflow`](../reference/Public-API.v1.json/paths/~1workflows~1{workflowId}/put) endpoint. +- The `translationEngine`, `fileProcessingConfiguration`, `workflow` fields are now required on the [`/projects`](../api/Public-API.v1-fv.html#/operations/CreateProject) endpoint. +- The `isSkipped` field is now marked as required on the [`/workflow/updateworkflow`](../api/Public-API.v1-fv.html#/operations/UpdateWorkflow) endpoint. - Added new assignee type `projectCreator` when retrieving workflows. - Improved contract documentation on TQA endpoints. - Fixed various bugs. @@ -352,17 +352,17 @@ A Postman Collection is now available for integrators. Check out [this](../docs/ * **Target File** > **Download File Version** endpoint -When you make a `GET` request to the [`/projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}/download`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1download/get) endpoint, you can now perform a direct download of the native file as well as of the `BCM` file version. +When you make a `GET` request to the [`/projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}/download`](../api/Public-API.v1-fv.html#/operations/DownloadFileVersion) endpoint, you can now perform a direct download of the native file as well as of the `BCM` file version. * **Target File** > **Export Target File Version** endpoint -When you make a `POST` request to the [`/projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}/exports`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1exports/post) endpoint, you now have a query parameter where you can specify whether the file version export should be a native file or an `sdlxliff` file. The default value is `native`. +When you make a `POST` request to the [`/projects/{projectId}/target-files/{targetFileId}/versions/{fileVersionId}/exports`](../api/Public-API.v1-fv.html#/operations/ExportTargetFileVersion) endpoint, you now have a query parameter where you can specify whether the file version export should be a native file or an `sdlxliff` file. The default value is `native`. ## 28 January 2021 -* **Project** > **List Project’s Tasks** endpoint +* **Project** > **List Project’s Tasks** endpoint -When you make a `GET` request to the [`/projects/{projectId}/tasks`](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1tasks/get) endpoint, you can now retrieve the available project tasks and their details. +When you make a `GET` request to the [`/projects/{projectId}/tasks`](../api/Public-API.v1-fv.html#/operations/ListProjectTasks) endpoint, you can now retrieve the available project tasks and their details. * **Retrieving tasks** @@ -379,4 +379,5 @@ When adding source files to a project, you can specify their target languages vi -₍^. .^₎⟆ \ No newline at end of file +₍^. .^₎⟆ + diff --git a/articles/LCPublicAPI/docs/Whats-deprecated.md b/articles/LCPublicAPI/docs/Whats-deprecated.md index 773f4b2..22584fe 100644 --- a/articles/LCPublicAPI/docs/Whats-deprecated.md +++ b/articles/LCPublicAPI/docs/Whats-deprecated.md @@ -1,19 +1,19 @@ -# What's Deprecated +# What's Deprecated
## 1 July 2024 -We have removed the old fields in the folder/resource structure and are no longer available. Use the [path](../reference/Public-API.v1.json/components/schemas/folder-v2) field going forward. +We have removed the old fields in the folder/resource structure and are no longer available. Use the [path](../api/Public-API.v1-fv.html#/schemas/folder-v2) field going forward. ## 13 December 2023 - The `Export Quote` endpoint has been removed. - In the Get Project Template model we deprecated: - - `forceOnline` field from root level and we added `forceOnline` to the settings → general - - `quoteTemplate` field from root level and we added `quoteTemplate` to the settings → general + - `forceOnline` field from root level and we added `forceOnline` to the settings → general + - `quoteTemplate` field from root level and we added `quoteTemplate` to the settings → general They will only be available for use until July 2024. ## 17 August 2023 -We updated the folder/resource locations to the new format, which now includes the [path](../reference/Public-API.v1.json/components/schemas/folder-v2). The old fields are marked as deprecated and their decommissioning is scheduled at a minimum of six months from now. +We updated the folder/resource locations to the new format, which now includes the [path](../api/Public-API.v1-fv.html#/schemas/folder-v2). The old fields are marked as deprecated and their decommissioning is scheduled at a minimum of six months from now. ## 12 August 2022 In the `Quote` code, we deprecated the `Export Quote` endpoint. It will only be available for use until December 2022. @@ -30,3 +30,4 @@ They will no longer be available to use starting with November 2022. ## 8 September 2021 We removed deprecated fields from the ErrorResponse model. + diff --git a/articles/LCPublicAPI/docs/termbase/Termbase-entries.md b/articles/LCPublicAPI/docs/termbase/Termbase-entries.md index 06afc3c..7f40137 100644 --- a/articles/LCPublicAPI/docs/termbase/Termbase-entries.md +++ b/articles/LCPublicAPI/docs/termbase/Termbase-entries.md @@ -1,9 +1,9 @@ -# Termbase entries +# Termbase entries
## Creating a termbase entry -A termbase entry can be created by making a `POST` request to the [`/termbases/{termbaseId}/entries`](../../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1entries/post) endpoint. +A termbase entry can be created by making a `POST` request to the [`/termbases/{termbaseId}/entries`](../../api/Public-API.v1-fv.html#/operations/CreateTermbaseEntry) endpoint. Request example for an entry using language code `en`: `POST /termbases/61b70c0775ed5f14d8190fab/entries` ```json @@ -96,7 +96,7 @@ Postman example: ## Updating a termbase entry -A termbase entry can be updated by making a `PUT` request to the [`/termbases/{termbaseId}/entries/{entryId}`](../../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1entries~1{entryId}/put) endpoint. +A termbase entry can be updated by making a `PUT` request to the [`/termbases/{termbaseId}/entries/{entryId}`](../../api/Public-API.v1-fv.html#/operations/UpdateTermbaseEntry) endpoint. The update action changes the entire structure of an entry, it doesn't only update the terms specified in the request body. The terms that are not specified, are deleted. If some terms should not be updated, their structure must be send in the request as it currently is. @@ -142,7 +142,7 @@ Request example: `PUT /termbases/61b70c0775ed5f14d8190fab/entries/61b73e4475ed5f ## Retrieving a termbase entry -A termbase entry can be retrieved by making a `GET` request to the [`/termbases/{termbaseId}/entries/{entryId}`](../../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1entries~1{entryId}/get) endpoint. Postman example: +A termbase entry can be retrieved by making a `GET` request to the [`/termbases/{termbaseId}/entries/{entryId}`](../../api/Public-API.v1-fv.html#/operations/GetTermbaseEntry) endpoint. Postman example: ![Get termbase entry with fields](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/PublicAPI/GetTermbaseEntryPostman.gif?raw=true) @@ -183,7 +183,7 @@ Response example: ## Retrieving the list of termbase entries -You can retrieve the list of termbase entries by making a `GET` request to the [`/termbases/{termbaseId}/entries`](../../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1entries/get) endpoint. +You can retrieve the list of termbase entries by making a `GET` request to the [`/termbases/{termbaseId}/entries`](../../api/Public-API.v1-fv.html#/operations/ListTermbaseEntries) endpoint. Request example: `GET /termbases/61b70c0775ed5f14d8190fab/entries?fields=humanReadableId,languages.terms,languages.terms.termbaseFieldValues` @@ -273,13 +273,14 @@ Response example: ## Deleting a termbase entry -A termbase entry can be deleted by making a `DELETE` request to the [`/termbases/{termbaseId}/entries/{entryId}`](../../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1entries~1{entryId}/delete) endpoint. +A termbase entry can be deleted by making a `DELETE` request to the [`/termbases/{termbaseId}/entries/{entryId}`](../../api/Public-API.v1-fv.html#/operations/DeleteTermbaseEntry) endpoint. Request example: `DELETE /termbases/61b70c0775ed5f14d8190fab/entries/61b73e4475ed5f14d81ae5e7` ## Deleting all termbase entries -All termbase entries can be deleted by making a `DELETE` request to the [`/termbases/{termbaseId}/entries`](../../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1entries/delete) endpoint. +All termbase entries can be deleted by making a `DELETE` request to the [`/termbases/{termbaseId}/entries`](../../api/Public-API.v1-fv.html#/operations/DeleteTermbaseEntries) endpoint. Request example: `DELETE /termbases/61b70c0775ed5f14d8190fab/entries` + diff --git a/articles/LCPublicAPI/docs/termbase/Termbase-import-export.md b/articles/LCPublicAPI/docs/termbase/Termbase-import-export.md index 559113b..d324065 100644 --- a/articles/LCPublicAPI/docs/termbase/Termbase-import-export.md +++ b/articles/LCPublicAPI/docs/termbase/Termbase-import-export.md @@ -1,13 +1,13 @@ -# Termbase import and export +# Termbase import and export
## Importing a termbase The following termbase formats are supported: `tbx` and `xml`. -> Before importing a termbase, make sure you already created one using the [Create Termbase](../../reference/Public-API.v1.json/paths/~1termbases/post) endpoint. Only empty termbases support importing content. +> Before importing a termbase, make sure you already created one using the [Create Termbase](../../api/Public-API.v1-fv.html#/operations/CreateTermbase) endpoint. Only empty termbases support importing content. -To import a `tbx` or an `xml` termbase, perform a `POST` request to the [Import Termbase](../../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1imports/post) endpoint and provide the `termbaseId` and the termbase file. Optionally, you can specify two import settings via query parameters: +To import a `tbx` or an `xml` termbase, perform a `POST` request to the [Import Termbase](../../api/Public-API.v1-fv.html#/operations/ImportTermbase) endpoint and provide the `termbaseId` and the termbase file. Optionally, you can specify two import settings via query parameters: 1. `duplicateEntriesStrategy` - It determines how the duplicate entries will be handled and it can have one of the following values: @@ -38,14 +38,14 @@ If the import is successful, you will get back an `importId` and the import `sta ## Polling a termbase import Some imports may take longer, depending on the size of the termbase. -To check if the import finished, you can perform a `GET` request to the [Poll Termbase Import](../../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1imports~1{importId}/get) endpoint and supply the `importId` and the `termbaseId`. The import is complete when the status is `done`. +To check if the import finished, you can perform a `GET` request to the [Poll Termbase Import](../../api/Public-API.v1-fv.html#/operations/PollTermbaseImport) endpoint and supply the `importId` and the `termbaseId`. The import is complete when the status is `done`.
## Exporting a termbase The following termbase formats are supported: `tbx` and `xml`. -To export a `tbx` or an `xml` termbase, perform a `POST` request to the [Export Termbase](../../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1exports/post) endpoint and provide the `termbaseId`. +To export a `tbx` or an `xml` termbase, perform a `POST` request to the [Export Termbase](../../api/Public-API.v1-fv.html#/operations/ExportTermbase) endpoint and provide the `termbaseId`. Optionally, you can specify in body, one of the two allowed formats. If none is specified, the default format will be `tbx`. Also, in the body, it can be specified if the download should be compressed (zipped) or not. By default, this property is set to `false`. If the export is successful, you will get back an `exportId`, the export `status` and the `downloadUrl` for this. If the export did not succeed, the response will contain an `errorMessage`. @@ -57,10 +57,10 @@ If the export is successful, you will get back an `exportId`, the export `status ## Polling a termbase export Some exports may take longer, depending on the size of the termbase. -To check if the export finished, you can perform a `GET` request to the [Poll Termbase Export](../../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1exports~1{exportId}/get) endpoint and supply the `exportId` and the `termbaseId`. The export is complete when the status is `done`. +To check if the export finished, you can perform a `GET` request to the [Poll Termbase Export](../../api/Public-API.v1-fv.html#/operations/PollExportTermbase) endpoint and supply the `exportId` and the `termbaseId`. The export is complete when the status is `done`.
## Downloading a termbase export -If an export is completed (the status received at the polling is `done`), it can be downloaded by performing a `GET` request to the [Download Exported Termbase](../../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1exports~1{exportId}~1download/get) endpoint. Supply as path parameters the `exportId` and the `termbaseId` and the response will contain the exported termbase file. -
\ No newline at end of file +If an export is completed (the status received at the polling is `done`), it can be downloaded by performing a `GET` request to the [Download Exported Termbase](../../api/Public-API.v1-fv.html#/operations/DownloadExportedTermbase) endpoint. Supply as path parameters the `exportId` and the `termbaseId` and the response will contain the exported termbase file. +
diff --git a/articles/LCPublicAPI/docs/termbase/Termbase-templates.md b/articles/LCPublicAPI/docs/termbase/Termbase-templates.md index 83aa94a..05d4441 100644 --- a/articles/LCPublicAPI/docs/termbase/Termbase-templates.md +++ b/articles/LCPublicAPI/docs/termbase/Termbase-templates.md @@ -1,9 +1,9 @@ -# Termbase templates +# Termbase templates
## Creating a termbase template -A termbase template can be created by making a `POST` request to the [`/termbase-templates`](../../reference/Public-API.v1.json/paths/~1termbase-templates/post) endpoint. +A termbase template can be created by making a `POST` request to the [`/termbase-templates`](../../api/Public-API.v1-fv.html#/operations/CreateTermbaseTemplate) endpoint. > Note: If the `location` is not specified, the template will be created in the root folder. @@ -75,7 +75,7 @@ Response example: ## Updating a termbase template -A termbase template can be updated by making a `PUT` request to the [`/termbase-templates/{termbaseTemplateId}`](../../reference/Public-API.v1.json/paths/~1termbase-templates~1{termbaseTemplateId}/put) endpoint. Postman example: +A termbase template can be updated by making a `PUT` request to the [`/termbase-templates/{termbaseTemplateId}`](../../api/Public-API.v1-fv.html#/operations/UpdateTermbaseTemplate) endpoint. Postman example: ![Update Termbase Template](https://raw.githubusercontent.com/RWS/language-cloud-public-api-doc-resources/main/PublicAPI/UpdateTermbaseTemplate.gif?raw=true) @@ -105,7 +105,7 @@ Request example: `PUT /termbase-templates/6156bbc7a638696c7686db7f` ## Retrieving a termbase template -A termbase template can be retrieved by making a `GET` request to the [`/termbase-templates/{termbaseTemplateId}`](../../reference/Public-API.v1.json/paths/~1termbase-templates~1{termbaseTemplateId}/get) endpoint. +A termbase template can be retrieved by making a `GET` request to the [`/termbase-templates/{termbaseTemplateId}`](../../api/Public-API.v1-fv.html#/operations/GetTermbaseTemplate) endpoint. Request example: `GET /termbase-templates/6156bbc7a638696c7686db7f?fields=name,location,description,languages,fields` @@ -140,7 +140,7 @@ Response example: ## Retrieving termbase templates -You can retrieve the list of termbase templates by making a `GET` request to the [`/termbase-templates`](../../reference/Public-API.v1.json/paths/~1termbase-templates/get) endpoint. +You can retrieve the list of termbase templates by making a `GET` request to the [`/termbase-templates`](../../api/Public-API.v1-fv.html#/operations/ListTermbaseTemplates) endpoint. Request example: `GET /termbase-templates?fields=name,description` @@ -171,8 +171,8 @@ Response example: ## Deleting termbase templates -A termbase template can be deleted by making a `DELETE` request to the [`/termbase-templates/{termbaseTemplateId}`](../../reference/Public-API.v1.json/paths/~1termbase-templates~1{termbaseTemplateId}/delete) endpoint. +A termbase template can be deleted by making a `DELETE` request to the [`/termbase-templates/{termbaseTemplateId}`](../../api/Public-API.v1-fv.html#/operations/DeleteTermbaseTemplate) endpoint. > Note: You can only delete the `userDefined` termbases. -Request example: `DELETE /termbase-templates/6156bbc7a638696c7686db7f` \ No newline at end of file +Request example: `DELETE /termbase-templates/6156bbc7a638696c7686db7f` diff --git a/articles/LCPublicAPI/docs/termbase/Termbase.md b/articles/LCPublicAPI/docs/termbase/Termbase.md index 633bade..9544536 100644 --- a/articles/LCPublicAPI/docs/termbase/Termbase.md +++ b/articles/LCPublicAPI/docs/termbase/Termbase.md @@ -1,9 +1,9 @@ -# Termbases +# Termbases
## Creating a termbase -A termbase can be created by making a `POST` request to the [`/termbases`](../../reference/Public-API.v1.json/paths/~1termbases/post) endpoint. +A termbase can be created by making a `POST` request to the [`/termbases`](../../api/Public-API.v1-fv.html#/operations/CreateTermbase) endpoint. You can create a termbase based on an existing termbase template by providing the `termbaseTemplateId`. This will create the termbase using the structure described by the template. For details about termbase templates, see [`Termbase Template`](../../docs/termbase/Termbase-templates.md). Postman example: @@ -78,7 +78,7 @@ Response example: ## Updating a termbase > You can update the fields for a termbase only if the termbase you want to update was not created using a termbase template or if it does not already have fields defined. -A termbase can be updated by making a `PUT` request to the [`/termbases/{termbaseId}`](../../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}/put) endpoint and providing the `termbaseTemplateId`. +A termbase can be updated by making a `PUT` request to the [`/termbases/{termbaseId}`](../../api/Public-API.v1-fv.html#/operations/UpdateTermbase) endpoint and providing the `termbaseTemplateId`. Request example: `PUT /termbases/616d0efa7a11677d6085b0be` ```json @@ -127,7 +127,7 @@ Request example: `PUT /termbases/616d0efa7a11677d6085b0be` ## Retrieving a termbase -A termbase can be retrieved by making a `GET` request to the [`/termbases/{termbaseId}`](../../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}/get) endpoint. +A termbase can be retrieved by making a `GET` request to the [`/termbases/{termbaseId}`](../../api/Public-API.v1-fv.html#/operations/GetTermbase) endpoint. Request example: `GET /termbases/616d0efa7a11677d6085b0be` @@ -147,7 +147,7 @@ Response example: ## Retrieving the list of termbases -You can retrieve the list of termbases by making a `GET` request to the [`/termbases`](../../reference/Public-API.v1.json/paths/~1termbases/get) endpoint. +You can retrieve the list of termbases by making a `GET` request to the [`/termbases`](../../api/Public-API.v1-fv.html#/operations/ListTermbase) endpoint. Request example: `GET /termbases` @@ -180,6 +180,6 @@ Response example: ## Deleting termbases -A termbase can be deleted by making a `DELETE` request to the [`/termbases/{termbaseId}`](../../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}/delete) endpoint. +A termbase can be deleted by making a `DELETE` request to the [`/termbases/{termbaseId}`](../../api/Public-API.v1-fv.html#/operations/DeleteTermbase) endpoint. -Request example: `DELETE /termbases/616d0efa7a11677d6085b0be` \ No newline at end of file +Request example: `DELETE /termbases/616d0efa7a11677d6085b0be` diff --git a/articles/LCPublicAPI/docs/translation-memory/Translation-memory-import-export.md b/articles/LCPublicAPI/docs/translation-memory/Translation-memory-import-export.md index 6c0f931..afca740 100644 --- a/articles/LCPublicAPI/docs/translation-memory/Translation-memory-import-export.md +++ b/articles/LCPublicAPI/docs/translation-memory/Translation-memory-import-export.md @@ -1,4 +1,4 @@ -# Translation Memory import and export +# Translation Memory import and export ## Concepts @@ -12,9 +12,9 @@ Concept | Explanation | The translation memory that you want to import must have one of the following formats: `tmx`, `sdltm`, `zip`, `tmx.gz` or `sdlxliff`. -> Before the import action, make sure you have already created a translation memory using the [Create Translation Memory](../../reference/Public-API.v1.json/paths/~1translation-memory/post) endpoint. +> Before the import action, make sure you have already created a translation memory using the [Create Translation Memory](../../api/Public-API.v1-fv.html#/operations/CreateTranslationMemory) endpoint. -To import a translation memory, perform a `POST` request to the [Import Translation Memory](../../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}~1imports/post) endpoint and provide these details: `translationMemoryId`, the translation memory file and a couple of properties. +To import a translation memory, perform a `POST` request to the [Import Translation Memory](../../api/Public-API.v1-fv.html#/operations/ImportTranslationMemory) endpoint and provide these details: `translationMemoryId`, the translation memory file and a couple of properties. > Pay special attention to the order of `properties` and `file`. It must be exactly as described in the contract (properties first). @@ -54,12 +54,12 @@ For more details about translation memory imports you can also check out the [Im ## Polling a translation memory import Some imports may take longer, depending on the size of the Translation Memory. -To check if the import finished, you can perform a `GET` request to the [Poll Translation Memory Import](../../reference/Public-API.v1.json/paths/~1translation-memory~1imports~1{importId}/get) endpoint and supply the `importId` and the `translationMemoryId`. The import is complete when the status is `done`. +To check if the import finished, you can perform a `GET` request to the [Poll Translation Memory Import](../../api/Public-API.v1-fv.html#/operations/PollTMImport) endpoint and supply the `importId` and the `translationMemoryId`. The import is complete when the status is `done`. ## Exporting a translation memory -To export a translation memory, perform a `POST` request to the [Export Translation Memory](../../reference/Public-API.v1.json/paths/~1translation-memory~1{translationMemoryId}~1exports/post) endpoint and provide the `translationMemoryId` and a valid `languageDirection` of your translation memory. +To export a translation memory, perform a `POST` request to the [Export Translation Memory](../../api/Public-API.v1-fv.html#/operations/ExportTranslationMemory) endpoint and provide the `translationMemoryId` and a valid `languageDirection` of your translation memory. If the export is successful, you will get back an `exportId` and the export `status`. If the export did not succeed, the response will contain an error message. @@ -69,8 +69,9 @@ If the export is successful, you will get back an `exportId` and the export `sta Some exports may take longer, depending on the size of the Translation Memory. -To check if the export finished, you can perform a `GET` request to the [Poll Translation Memory Export](../../reference/Public-API.v1.json/paths/~1translation-memory~1exports~1{exportId}/get) endpoint and supply the `exportId`. The export is complete when the status is `done`. +To check if the export finished, you can perform a `GET` request to the [Poll Translation Memory Export](../../api/Public-API.v1-fv.html#/operations/PollTranslationMemoryExport) endpoint and supply the `exportId`. The export is complete when the status is `done`. ## Downloading a translation memory export -If an export is completed successfully (the status received at the polling is `done`), it can be downloaded by performing a `GET` request to the [Download Exported Translation Memory](../../reference/Public-API.v1.json/paths/~1translation-memory~1exports~1{exportId}~1download/get) endpoint. Just supply as `path` parameter the `exportId` and the response will contain the exported translation memory file in `tmx.gz` format. +If an export is completed successfully (the status received at the polling is `done`), it can be downloaded by performing a `GET` request to the [Download Exported Translation Memory](../../api/Public-API.v1-fv.html#/operations/DownloadExportedTranslationMemory) endpoint. Just supply as `path` parameter the `exportId` and the response will contain the exported translation memory file in `tmx.gz` format. + diff --git a/articles/LCPublicAPI/docs/translations/Translations.md b/articles/LCPublicAPI/docs/translations/Translations.md index 85e7f05..30e3e12 100644 --- a/articles/LCPublicAPI/docs/translations/Translations.md +++ b/articles/LCPublicAPI/docs/translations/Translations.md @@ -1,4 +1,4 @@ -# Translation API +# Translation API The Translation API provides endpoints for performing translation operations using translation engines. These endpoints allow you to lookup translations, perform concordance searches, and manage translation units within your translation memories. @@ -19,7 +19,7 @@ All translation operations require a translation engine that defines which trans ### Translation Lookup -[`POST /translations/lookup`](../../reference/Public-API.v1.json/paths/~1translations~1lookup/post) +[`POST /translations/lookup`](../../api/Public-API.v1-fv.html#/operations/TranslationsLookup) Translates a phrase in plain text or a BCM fragment containing a single segment. The translated content will be returned as a [BCM fragment](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html) or [term](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Skeleton.Term.html). @@ -71,7 +71,7 @@ Translates a phrase in plain text or a BCM fragment containing a single segment. ### Concordance Search -[`POST /translations/concordance`](../../reference/Public-API.v1.json/paths/~1translations~1concordance/post) +[`POST /translations/concordance`](../../api/Public-API.v1-fv.html#/operations/TranslationsConcordanceSearch) Performs a concordance search for a given text within the translation memories linked to the specified translation engine. This helps you find segments that contain specific words or phrases. @@ -119,7 +119,7 @@ Performs a concordance search for a given text within the translation memories l #### Update Translation Unit -[`PUT /translations/translation-unit`](../../reference/Public-API.v1.json/paths/~1translations~1translation-unit/put) +[`PUT /translations/translation-unit`](../../api/Public-API.v1-fv.html#/operations/TranslationsUpdate) Updates an existing translation unit in the translation memories. The system identifies matching translation units based on the `originalTranslationHash` provided in the BCM fragment. @@ -164,7 +164,7 @@ Updates an existing translation unit in the translation memories. The system ide #### Add Translation Unit -[`POST /translations/translation-unit`](../../reference/Public-API.v1.json/paths/~1translations~1translation-unit/post) +[`POST /translations/translation-unit`](../../api/Public-API.v1-fv.html#/operations/TranslationsAdd) Adds a new translation unit to the translation memories. @@ -209,7 +209,7 @@ Example of a BCM fragment: "type": "placeholderTag", "metadata": { "SDL:IsSoftBreak": "True", - "SpecialCharacterPlaceholder": "‌", + "SpecialCharacterPlaceholder": "‌", "frameworkOriginalTagId": "50", "SDL:IsWordStop": "False" } @@ -299,7 +299,7 @@ Learn more about [Translation Memory penalties](https://docs.rws.com/en-US/trado ## Related APIs - **[Translation Memory API](../translation-memory/Translation-memory-import-export.md)**: Bulk import/export of translation memories -- **[Translation Engine API](../../reference/Public-API.v1.json/paths/~1translation-engines~1{translationEngineId}/put)**: Manage translation engine configurations +- **[Translation Engine API](../../api/Public-API.v1-fv.html#/operations/UpdateTranslationEngine)**: Manage translation engine configurations - **[Termbase API](../termbase/Termbase.md)**: Manage terminology resources ## Examples and Use Cases @@ -310,4 +310,4 @@ Learn more about [Translation Memory penalties](https://docs.rws.com/en-US/trado 2. **Lookup**: Use `/translations/lookup` for translation suggestions 3. **Research**: Use `/translations/concordance` for plain text research 4. **Quality**: Add/update translation units with the updated BCM fragments retrieved from the previous requests to improve TM quality -5. **Maintenance**: Regular TM updates and quality checks \ No newline at end of file +5. **Maintenance**: Regular TM updates and quality checks diff --git a/articles/LCPublicAPI/docs/webhooks/Batched-webhooks.md b/articles/LCPublicAPI/docs/webhooks/Batched-webhooks.md index 8366b4f..0a970f2 100644 --- a/articles/LCPublicAPI/docs/webhooks/Batched-webhooks.md +++ b/articles/LCPublicAPI/docs/webhooks/Batched-webhooks.md @@ -1,7 +1,7 @@ -# Batched Webhooks +# Batched Webhooks Webhooks can be batched to reduce the number of HTTP requests. Batched webhooks are sent as a single HTTP request to the configured webhook URL. -The request body follows the [Webhook Batch](../../reference/Webhooks.v1.json/components/schemas/webhook-batch) structure and contains a set of [Trados Cloud Platform events](../../reference/Webhooks.v1.json/components/schemas/webhook). +The request body follows the [Webhook Batch](../../api/Webhooks.v1-fv.html#/schemas/webhook-batch) structure and contains a set of [Trados Cloud Platform events](../../api/Webhooks.v1-fv.html#/schemas/webhook). ## Considerations for Consuming Batched Webhooks @@ -53,3 +53,4 @@ The current configuration for the Trados Cloud Platform is: * Ensure that a single URL is set for receiving batched webhooks in the Trados Cloud Platform. * Create a single webhook under [Webhooks Setup](Webhooks-setup.md#subscribe-to-webhook-events) that subscribes to multiple event types. + diff --git a/articles/LCPublicAPI/docs/webhooks/Webhooks-payload.md b/articles/LCPublicAPI/docs/webhooks/Webhooks-payload.md index 50f009b..946bec3 100644 --- a/articles/LCPublicAPI/docs/webhooks/Webhooks-payload.md +++ b/articles/LCPublicAPI/docs/webhooks/Webhooks-payload.md @@ -1,6 +1,6 @@ -# Webhooks payload +# Webhooks payload -**The request body** has the same standard JSON format for all [Trados Cloud Platform events](../../reference/Webhooks.v1.json/components/schemas/webhook). +**The request body** has the same standard JSON format for all [Trados Cloud Platform events](../../api/Webhooks.v1-fv.html#/schemas/webhook). An example of request for a `PROJECT_CREATED` event: @@ -51,26 +51,27 @@ This is the envelope that is common to all events, and only the < Data Payload O | Event | Data payload object model | Trigger operations in Trados Cloud Platform API | Trigger operations in Trados UI | |---|---|---|---| -| `PROJECT.TASK.ACCEPTED` | [`task-event`](../../reference/Webhooks.v1.json/components/schemas/task-event) | Accept task
Accept error task | Accept task
Accept error task | -| `PROJECT.TASK.CREATED` | [`task-event`](../../reference/Webhooks.v1.json/components/schemas/task-event) | Generate task | Generate task | -| `PROJECT.TASK.COMPLETED` | [`task-event`](../../reference/Webhooks.v1.json/components/schemas/task-event) | Complete task | Complete task | -| `PROJECT.TASK.UPDATED` | [`task-event`](../../reference/Webhooks.v1.json/components/schemas/task-event) | Generate task
Accept task
Reject task
Release task
Assign task
Reassign task
Complete task | Generate task
Accept task
Reject task
Release task
Assign task
Reassign task
Complete task | -| `PROJECT.TASK.DELETED` | [`task-event`](../../reference/Webhooks.v1.json/components/schemas/task-event) | Delete project and its tasks | Delete project and its tasks | -| `PROJECT.CREATED` | [`project-event`](../../reference/Webhooks.v1.json/components/schemas/project-event) | Create project | Create project | -| `PROJECT.STARTED` | [`project-event`](../../reference/Webhooks.v1.json/components/schemas/project-event) | Start project | Start project | -| `PROJECT.UPDATED` | [`project-event`](../../reference/Webhooks.v1.json/components/schemas/project-event) | Start project (This event will also be emitted in addition to `PROJECT.STARTED`)
Update project by changing any field
Complete project
Cancel source file
Complete target file | Start project (This event will also be emitted in addition to `PROJECT.STARTED`)
Update project by changing the `Project Information`, `Configuration` or `Custom Fields` fields in the `Settings` tab
Complete project
Set project back in progress
Cancel project
Complete target file | -| `PROJECT.DELETED` | [`project-event`](../../reference/Webhooks.v1.json/components/schemas/project-event) | Delete project | Delete project | -| `PROJECT.TEMPLATE.CREATED` | [`project-template-event`](../reference/Webhooks.v1.json/components/schemas/project-template-event) | | Create project template | -| `PROJECT.TEMPLATE.UPDATED` | [`project-template-event`](../../reference/Webhooks.v1.json/components/schemas/project-template-event) | | Create project template
Update project template | -| `PROJECT.TEMPLATE.DELETED` | [`project-template-event`](../../reference/Webhooks.v1.json/components/schemas/project-template-event) | | Delete project template | -| `PROJECT.SOURCE.FILE.CREATED` | [`source-file-event`](../reference/Webhooks.v1.json/components/schemas/source-file-event) | Add source file to project
Attach source files to project | Add reference file to project
Add translatable file to project | -| `PROJECT.SOURCE.FILE.UPDATED` | [`source-file-event`](../../reference/Webhooks.v1.json/components/schemas/source-file-event) | Update source file by changing the `name` field
Add source file version
The project reaches the `File Type Detection` task
The project reaches the `File Format Conversion` task | Update source file by changing the `fileType` or `fileRole` fields
Add source file version via `Replace file` action
Delete source file version
Cancel source file
The project reaches the `File Type Detection` task
The project reaches the `File Format Conversion` task | -| `PROJECT.SOURCE.FILE.DELETED` | [`source-file-event`](../../reference/Webhooks.v1.json/components/schemas/source-file-event) |Delete project and its tasks | Delete project and its tasks | -| `PROJECT.TARGET.FILE.CREATED` | [`target-file-event`](../../reference/Webhooks.v1.json/components/schemas/target-file-event) | The project reaches the `File Format Conversion` task | The project reaches the `File Format Conversion` task | -| `PROJECT.TARGET.FILE.UPDATED` | [`target-file-event`](../../reference/Webhooks.v1.json/components/schemas/target-file-event) | Update source file by changing the `name` field
Add target file version
Import target file version
The project reaches the `File Format Conversion` task
The project reaches the `Copy Source to Target` task
The project reaches the `Machine Translation` task
The project reaches the `Bilingual Engineering` task
The project reaches the `Translation` task
The project reaches the `Linguistic Review` task
The project reaches the `Customer Review` task
The project reaches the `Implement Customer Review` task
The project reaches the `Target File Generation` task | Add target file version via `Upload SDLXLIFF` action
Replace target file
Delete target file version
Cancel target file
The project reaches the `File Format Conversion` task
The project reaches the `Copy Source to Target` task
The project reaches the `Machine Translation` task
The project reaches the `Bilingual Engineering` task
The project reaches the `Translation` task
The project reaches the `Linguistic Review` task
The project reaches the `Customer Review` task
The project reaches the `Implement Customer Review` task
The project reaches the `Target File Generation` task | -| `PROJECT.TARGET.FILE.DELETED` | [`target-file-event`](../../reference/Webhooks.v1.json/components/schemas/target-file-event) | Delete project and its tasks | Delete project and its tasks | -| `PROJECT.GROUP.PROJECT.MEMBERSHIP.CHANGE` | [`project-group-event`](../../reference/Webhooks.v1.json/components/schemas/project-group-event) | Add project to project group
Remove project from project group | Add project to project group
Remove project from project group | -| `PROJECT.ERROR.TASK.CREATED` | [`error-task-event`](../../reference/Webhooks.v1.json/components/schemas/error-task-event) | Generate error task | Generate error task | -| `PROJECT.ERROR.TASK.COMPLETED` | [`error-task-event`](../../reference/Webhooks.v1.json/components/schemas/error-task-event) | Complete error task | Complete error task | -| `PROJECT.ERROR.TASK.ACCEPTED` | [`error-task-event`](../../reference/Webhooks.v1.json/components/schemas/error-task-event) | Accept error task | Accept error task | +| `PROJECT.TASK.ACCEPTED` | [`task-event`](../../api/Webhooks.v1-fv.html#/schemas/task-event) | Accept task
Accept error task | Accept task
Accept error task | +| `PROJECT.TASK.CREATED` | [`task-event`](../../api/Webhooks.v1-fv.html#/schemas/task-event) | Generate task | Generate task | +| `PROJECT.TASK.COMPLETED` | [`task-event`](../../api/Webhooks.v1-fv.html#/schemas/task-event) | Complete task | Complete task | +| `PROJECT.TASK.UPDATED` | [`task-event`](../../api/Webhooks.v1-fv.html#/schemas/task-event) | Generate task
Accept task
Reject task
Release task
Assign task
Reassign task
Complete task | Generate task
Accept task
Reject task
Release task
Assign task
Reassign task
Complete task | +| `PROJECT.TASK.DELETED` | [`task-event`](../../api/Webhooks.v1-fv.html#/schemas/task-event) | Delete project and its tasks | Delete project and its tasks | +| `PROJECT.CREATED` | [`project-event`](../../api/Webhooks.v1-fv.html#/schemas/project-event) | Create project | Create project | +| `PROJECT.STARTED` | [`project-event`](../../api/Webhooks.v1-fv.html#/schemas/project-event) | Start project | Start project | +| `PROJECT.UPDATED` | [`project-event`](../../api/Webhooks.v1-fv.html#/schemas/project-event) | Start project (This event will also be emitted in addition to `PROJECT.STARTED`)
Update project by changing any field
Complete project
Cancel source file
Complete target file | Start project (This event will also be emitted in addition to `PROJECT.STARTED`)
Update project by changing the `Project Information`, `Configuration` or `Custom Fields` fields in the `Settings` tab
Complete project
Set project back in progress
Cancel project
Complete target file | +| `PROJECT.DELETED` | [`project-event`](../../api/Webhooks.v1-fv.html#/schemas/project-event) | Delete project | Delete project | +| `PROJECT.TEMPLATE.CREATED` | [`project-template-event`](../api/Webhooks.v1-fv.html#/schemas/project-template-event) | | Create project template | +| `PROJECT.TEMPLATE.UPDATED` | [`project-template-event`](../../api/Webhooks.v1-fv.html#/schemas/project-template-event) | | Create project template
Update project template | +| `PROJECT.TEMPLATE.DELETED` | [`project-template-event`](../../api/Webhooks.v1-fv.html#/schemas/project-template-event) | | Delete project template | +| `PROJECT.SOURCE.FILE.CREATED` | [`source-file-event`](../api/Webhooks.v1-fv.html#/schemas/source-file-event) | Add source file to project
Attach source files to project | Add reference file to project
Add translatable file to project | +| `PROJECT.SOURCE.FILE.UPDATED` | [`source-file-event`](../../api/Webhooks.v1-fv.html#/schemas/source-file-event) | Update source file by changing the `name` field
Add source file version
The project reaches the `File Type Detection` task
The project reaches the `File Format Conversion` task | Update source file by changing the `fileType` or `fileRole` fields
Add source file version via `Replace file` action
Delete source file version
Cancel source file
The project reaches the `File Type Detection` task
The project reaches the `File Format Conversion` task | +| `PROJECT.SOURCE.FILE.DELETED` | [`source-file-event`](../../api/Webhooks.v1-fv.html#/schemas/source-file-event) |Delete project and its tasks | Delete project and its tasks | +| `PROJECT.TARGET.FILE.CREATED` | [`target-file-event`](../../api/Webhooks.v1-fv.html#/schemas/target-file-event) | The project reaches the `File Format Conversion` task | The project reaches the `File Format Conversion` task | +| `PROJECT.TARGET.FILE.UPDATED` | [`target-file-event`](../../api/Webhooks.v1-fv.html#/schemas/target-file-event) | Update source file by changing the `name` field
Add target file version
Import target file version
The project reaches the `File Format Conversion` task
The project reaches the `Copy Source to Target` task
The project reaches the `Machine Translation` task
The project reaches the `Bilingual Engineering` task
The project reaches the `Translation` task
The project reaches the `Linguistic Review` task
The project reaches the `Customer Review` task
The project reaches the `Implement Customer Review` task
The project reaches the `Target File Generation` task | Add target file version via `Upload SDLXLIFF` action
Replace target file
Delete target file version
Cancel target file
The project reaches the `File Format Conversion` task
The project reaches the `Copy Source to Target` task
The project reaches the `Machine Translation` task
The project reaches the `Bilingual Engineering` task
The project reaches the `Translation` task
The project reaches the `Linguistic Review` task
The project reaches the `Customer Review` task
The project reaches the `Implement Customer Review` task
The project reaches the `Target File Generation` task | +| `PROJECT.TARGET.FILE.DELETED` | [`target-file-event`](../../api/Webhooks.v1-fv.html#/schemas/target-file-event) | Delete project and its tasks | Delete project and its tasks | +| `PROJECT.GROUP.PROJECT.MEMBERSHIP.CHANGE` | [`project-group-event`](../../api/Webhooks.v1-fv.html#/schemas/project-group-event) | Add project to project group
Remove project from project group | Add project to project group
Remove project from project group | +| `PROJECT.ERROR.TASK.CREATED` | [`error-task-event`](../../api/Webhooks.v1-fv.html#/schemas/error-task-event) | Generate error task | Generate error task | +| `PROJECT.ERROR.TASK.COMPLETED` | [`error-task-event`](../../api/Webhooks.v1-fv.html#/schemas/error-task-event) | Complete error task | Complete error task | +| `PROJECT.ERROR.TASK.ACCEPTED` | [`error-task-event`](../../api/Webhooks.v1-fv.html#/schemas/error-task-event) | Accept error task | Accept error task | + diff --git a/articles/LCPublicAPI/docs/webhooks/Webhooks-setup.md b/articles/LCPublicAPI/docs/webhooks/Webhooks-setup.md index f5c6a97..e38f01e 100644 --- a/articles/LCPublicAPI/docs/webhooks/Webhooks-setup.md +++ b/articles/LCPublicAPI/docs/webhooks/Webhooks-setup.md @@ -1,4 +1,4 @@ ---- +--- stoplight-id: eg4ja9nrs9wtk --- @@ -24,9 +24,9 @@ Here are the detailed steps: 2. Expand the account menu on the top right-hand corner and select **Integrations**. 3. Select the **Applications** sub-tab. 4. Select **New Application** and enter the following information: - - **Name** – Enter a unique name for your custom application. - - (Optional) **URL** – Enter your custom application URL. - - **Service User** – Select a service user from the dropdown list. To understand how service users are added in Trados Cloud Platform, check step 1 in the [Authenticate](../../docs/Service-credentials.md) topic. + - **Name** – Enter a unique name for your custom application. + - (Optional) **URL** – Enter your custom application URL. + - **Service User** – Select a service user from the dropdown list. To understand how service users are added in Trados Cloud Platform, check step 1 in the [Authenticate](../../docs/Service-credentials.md) topic. 5. Select **Add**. 6. Back in the **Applications** sub-tab, select the check box corresponding to your application. 7. Select **Edit**. @@ -71,7 +71,7 @@ The followings are true: -Remember that each time events occur, Trados Cloud Platform will call your server on a `POST` request, on the URL you configured in the Trados Cloud Platform application, and the request body will emulate the [Webhook](../../reference/Webhooks.v1.json/components/schemas/webhook) object format. +Remember that each time events occur, Trados Cloud Platform will call your server on a `POST` request, on the URL you configured in the Trados Cloud Platform application, and the request body will emulate the [Webhook](../../api/Webhooks.v1-fv.html#/schemas/webhook) object format. ## Validate the Webhook notifications @@ -103,12 +103,12 @@ checksum.update(event.getBytes(UTF_8)); long crc32Val = checksum.getValue(); //build the message -String message = transmissionTime + “|” + applicationId + “|” + webhookId + “|” + crc32Val; +String message = transmissionTime + “|” + applicationId + “|” + webhookId + “|” + crc32Val; //build PublicKey byte[] bytes = org.springframework.security.crypto.codec.Base64.decode(publicKeyAsString.getBytes()); X509EncodeKeySpec ks = new X509EncodeKeySpec(bytes); -KeyFactory kf = KeyFactory.getInstance(“RSA”); +KeyFactory kf = KeyFactory.getInstance(“RSA”); PublicKey publicKey = kf.generatePublic(ks); //verify signature @@ -197,3 +197,4 @@ The circuit breaker is triggered when 3 calls to a URL fail within a short time * `X-LC-Webhook`: Unique identifier of the webhook defined for the LC application which is the recipient of the webhook message. It can be ignored because it is not exposed in the Trados UI. * `X-LC-Region`: Region of the account of the user, which is the recipient of the webhook message. + diff --git a/articles/LCPublicAPI/toc.yml b/articles/LCPublicAPI/toc.yml index 36646ae..606b1f4 100644 --- a/articles/LCPublicAPI/toc.yml +++ b/articles/LCPublicAPI/toc.yml @@ -75,6 +75,11 @@ - name: Translation Memory import and export href: docs/translation-memory/Translation-memory-import-export.md +- name: Translations + items: + - name: Translation Memory import and export + href: docs/translations/Translations.md + - name: Custom fields href: docs/Custom-Fields.md From d71e85b6f0385636cffd5a2a5e4910914da79f28 Mon Sep 17 00:00:00 2001 From: Radu Pascal Date: Tue, 4 Nov 2025 11:27:29 +0200 Subject: [PATCH 07/19] Fix webhook documentation links and add scripts for converting contract and reference links - Updated Webhook payload documentation links from .md to .html format in Webhooks.v1.json. - Added PowerShell script (convert-contract-links.ps1) to convert markdown links in contract JSON files to HTML links, handling both .md to .html conversions and JSON reference paths. - Added PowerShell script (convert-reference-links.ps1) to convert ../reference/*.json links in markdown files to ../api/*-fv.html links, supporting both paths and components/schemas references. --- Requirements.md | 38 +++ articles/LCPublicAPI/api/Public-API.v1.json | 82 +++---- articles/LCPublicAPI/api/Webhooks.v1.json | 8 +- scripts/convert-contract-links.ps1 | 259 ++++++++++++++++++++ scripts/convert-reference-links.ps1 | 169 +++++++++++++ 5 files changed, 511 insertions(+), 45 deletions(-) create mode 100644 Requirements.md create mode 100644 scripts/convert-contract-links.ps1 create mode 100644 scripts/convert-reference-links.ps1 diff --git a/Requirements.md b/Requirements.md new file mode 100644 index 0000000..e2256e7 --- /dev/null +++ b/Requirements.md @@ -0,0 +1,38 @@ +# Requirements + +Create a powershell script (convert-reference-links.ps1) that will: + +- Find all links in markdown files in "./articles/LCPublicAPI/docs/" and for links that start with "../reference/.json/paths/" replace with: + - for links that link to operations: "../api/-fv.html#/operations/" + - for links that link to scheams: "../api/-fv.html#/schemas/" +- Current links in the markdown relative paths are not correct. those are actually referencing files from the /articles/LCPublicAPI/api + +Second powershell script (convert-contract-links.ps1) that will: + +- Find all links in markdown format (ex: `[Translation API](../docs/translations/Translations.md)`) in a provided contract file (.json file in "/articles/Extensibility/api" or "/articles/LCPublicAPI/api") and rename them to *.html +- Find all links in markdown format (ex: `[Upload Zip File](../reference/Public-API.v1.json/paths/~1files/post)`) in the given contract (same as above) and: + - change the url to operationId using hash, example: `[Poll Upload Zip File](../reference/Public-API.v1.json/paths/~1files~1{fileId}/get)` becomes `[Poll Upload Zip File](#/operations/PollUploadZipFile)` + - for schemas the path becomes `#/schemas/..` + - if the url is relative to another contract file format a full relative path, ex: `[Poll Upload Zip File](../reference/Public-API.v1.json/paths/~1files~1{fileId}/get)` becomes `[Poll Upload Zip File](../../LCPublicAPI/api/Public-API.v1-fv.html#/operations/PollUploadZipFile)` + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index 1811773..197adb5 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -1,4 +1,4 @@ -{ +{ "openapi": "3.1.0", "info": { "title": "Trados Cloud Platform API", @@ -1455,7 +1455,7 @@ "/files": { "post": { "summary": "Upload Zip File", - "description": "Uploads an archive containing source files in `.zip` format, which will be extracted and used during project creation.\n\nStatus of the upload operation can be tracked using the [Poll Upload Zip File](../reference/Public-API.v1.json/paths/~1files~1{fileId}/get) endpoint.\n\nOnce this Upload Zip File operation has finished extracting the files, they can be added to the desired project using the [Attach Source Files](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files~1attach-files/post) endpoint. Alternatively, they can be used to [Request File Analysis](../reference/Public-API.v1.json/paths/~1files~1analysis/post) details like word counts and estimated costs.\n\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", + "description": "Uploads an archive containing source files in `.zip` format, which will be extracted and used during project creation.\n\nStatus of the upload operation can be tracked using the [Poll Upload Zip File](#/operations/PollUploadZipFile) endpoint.\n\nOnce this Upload Zip File operation has finished extracting the files, they can be added to the desired project using the [Attach Source Files](#/operations/AddSourceFiles) endpoint. Alternatively, they can be used to [Request File Analysis](#/operations/RequestFileAnalysis) details like word counts and estimated costs.\n\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", "operationId": "UploadZipFile", "requestBody": { "content": { @@ -1476,7 +1476,7 @@ } } }, - "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." + "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.html)." }, "parameters": [ { @@ -1714,7 +1714,7 @@ } } }, - "description": "This endpoint allows you to request the word count and an estimated cost for your files. \r\n\r\nUse the [Upload Zip File](../reference/Public-API.v1.json/paths/~1files/post) / [Poll Upload Zip File](../reference/Public-API.v1.json/paths/~1files~1{fileId}/get) endpoints to upload your files and get the `fileIds`. Send these `fileIds` together with the `languageProcessingRuleId` and `sourceLanguage` to receive the word count.\r\n\r\nOptionally, send the `quotingOptions` object to receive the `estimatedCosts`.\r\n\r\nUse the [Poll File Analysis](../reference/Public-API.v1.json/paths/~1files~1analysis~1{operationId}/get) endpoint to monitor the operation and receive the analysis results.\r\n\r\n> File analysis results will be available for 24 hours after generation.", + "description": "This endpoint allows you to request the word count and an estimated cost for your files. \r\n\r\nUse the [Upload Zip File](#/operations/UploadZipFile) / [Poll Upload Zip File](#/operations/PollUploadZipFile) endpoints to upload your files and get the `fileIds`. Send these `fileIds` together with the `languageProcessingRuleId` and `sourceLanguage` to receive the word count.\r\n\r\nOptionally, send the `quotingOptions` object to receive the `estimatedCosts`.\r\n\r\nUse the [Poll File Analysis](#/operations/PollFileAnalysis) endpoint to monitor the operation and receive the analysis results.\r\n\r\n> File analysis results will be available for 24 hours after generation.", "tags": [ "File" ] @@ -1827,7 +1827,7 @@ "$ref": "#/components/parameters/fields" } ], - "description": "Monitor the [File Analysis](../reference/Public-API.v1.json/paths/~1files~1analysis/post) operation and receive the analysis results.\r\n\r\n> File analysis results will be available for 24 hours after generation.", + "description": "Monitor the [File Analysis](#/operations/RequestFileAnalysis) operation and receive the analysis results.\r\n\r\n> File analysis results will be available for 24 hours after generation.", "tags": [ "File" ] @@ -1918,7 +1918,7 @@ "$ref": "#/components/parameters/X-LC-Tenant" } ], - "description": "Monitors the unzipping operation for a previously uploaded archive and retrieves details about the extracted files.\r\n\r\nOnce the [Upload Zip File](../reference/Public-API.v1.json/paths/~1files/post) operation has finished extracting the files, they can be added to the desired project using the [Attach Source Files](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1source-files~1attach-files/post) endpoint.\r\n Alternatively, they can be used to [Request File Analysis](../reference/Public-API.v1.json/paths/~1files~1analysis/post) details like word counts and estimated costs.\r\n", + "description": "Monitors the unzipping operation for a previously uploaded archive and retrieves details about the extracted files.\r\n\r\nOnce the [Upload Zip File](#/operations/UploadZipFile) operation has finished extracting the files, they can be added to the desired project using the [Attach Source Files](#/operations/AddSourceFiles) endpoint.\r\n Alternatively, they can be used to [Request File Analysis](#/operations/RequestFileAnalysis) details like word counts and estimated costs.\r\n", "tags": [ "File" ] @@ -2792,7 +2792,7 @@ "x-stoplight": { "id": "thyh9npsnqozm" }, - "description": "For more details on the PerfectMatch feature please consult the [official documentation](https://docs.rws.com/791595/1155478/trados-enterprise---accelerate/perfectmatch-general-information).\r\n\r\nAfter creating a mapping, target files from the `matchingProjects` are automatically matched to the source files in the new project. This is a long-running background operation, and its `status` can be tracked by polling the [Get PerfectMatch Mapping](../reference/Public-API.v1.json/paths/~1perfect-match-mappings~1{mappingId}/get) endpoint.", + "description": "For more details on the PerfectMatch feature please consult the [official documentation](https://docs.rws.com/791595/1155478/trados-enterprise---accelerate/perfectmatch-general-information).\r\n\r\nAfter creating a mapping, target files from the `matchingProjects` are automatically matched to the source files in the new project. This is a long-running background operation, and its `status` can be tracked by polling the [Get PerfectMatch Mapping](#/operations/GetPerfectMatchMapping) endpoint.", "requestBody": { "content": { "application/json": { @@ -3196,7 +3196,7 @@ } } }, - "description": "Updates a PerfectMatch batch mapping.\r\n\r\nPay special attention to how [updating works](https://languagecloud.sdl.com/lc/api-docs/updating-data-with-put).", + "description": "Updates a PerfectMatch batch mapping.\r\n\r\nPay special attention to how [updating works](../docs/Updating-data-with-PUT.html).", "x-stoplight": { "id": "k414o2pdrvauv" } @@ -3329,7 +3329,7 @@ } } }, - "description": "Updates a PerfectMatch file mapping with an existing target file from a PerfectMatch candidate. Only valid candidates can be used to request an update.\r\n\r\nUse the [Candidates](../reference/Public-API.v1.json/paths/~1perfect-match-mappings~1{mappingId}~1batch-mappings~1{batchMappingId}~1file-mappings~1{fileMappingId}~1target-languages~1{targetLanguage}~1candidates/get) endpoint to retrieve a list of valid `fileId` and `projectId` to provide as matching data. " + "description": "Updates a PerfectMatch file mapping with an existing target file from a PerfectMatch candidate. Only valid candidates can be used to request an update.\r\n\r\nUse the [Candidates](#/operations/GetPerfectMatchCandidates) endpoint to retrieve a list of valid `fileId` and `projectId` to provide as matching data. " } }, "/perfect-match-mappings/{mappingId}/batch-mappings/{batchMappingId}/file-mappings/{fileMappingId}/file": { @@ -5581,7 +5581,7 @@ ], "summary": "Export Project Files", "operationId": "ExportProjectFiles", - "description": "Generates an asynchronous export operation. To monitor the progress until completion, use the [Poll Project Files Export](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1files~1exports~1{exportId}/get) endpoint. \n\nThis operation triggers the packaging of the project files into a `zip` format.", + "description": "Generates an asynchronous export operation. To monitor the progress until completion, use the [Poll Project Files Export](#/operations/ExportProjectFilesStatus) endpoint. \n\nThis operation triggers the packaging of the project files into a `zip` format.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -5693,7 +5693,7 @@ ], "summary": "Poll Project Files Export", "operationId": "ExportProjectFilesStatus", - "description": "Retrieves the state of the export operation. \n\n Once the state is marked as `done`, you can download the generated `zip` file using the following endpoint: [Download Exported Project Files](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1files~1exports~1{exportId}~1download/get).", + "description": "Retrieves the state of the export operation. \n\n Once the state is marked as `done`, you can download the generated `zip` file using the following endpoint: [Download Exported Project Files](#/operations/DownloadFile).", "responses": { "200": { "description": "OK", @@ -5804,7 +5804,7 @@ "Project" ], "summary": "Download Exported Project Files", - "description": "Downloads the generated `zip` file containing the files according to initial export operation parameters. \n\nThe final ZIP file will be named using the project name. \n\n When the export operation is performed with `downloadFlat=true` and one target language specified, the resulting ZIP file name will be a combination of the project name and the target language code, as defined by the [Export Project Files](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1files~1exports/post) endpoint.", + "description": "Downloads the generated `zip` file containing the files according to initial export operation parameters. \n\nThe final ZIP file will be named using the project name. \n\n When the export operation is performed with `downloadFlat=true` and one target language specified, the resulting ZIP file name will be a combination of the project name and the target language code, as defined by the [Export Project Files](#/operations/ExportProjectFiles) endpoint.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -6059,7 +6059,7 @@ "Source File" ], "summary": "Add Source File", - "description": "Adds a source file to the project. Files can be uploaded before starting a project or after the project has started. When adding a `translatable` file after the project started, a new start project request should be performed.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.\n\n> Note: The maximum character size of the sum between the `name` and the `path` fields must not exceed 255. Otherwise the request cannot be validated.\n\n> Note: Zip files will be added as reference files. If you want to upload zip files, please use the [Upload Zip File](../reference/Public-API.v1.json/paths/~1files/post) endpoint.", + "description": "Adds a source file to the project. Files can be uploaded before starting a project or after the project has started. When adding a `translatable` file after the project started, a new start project request should be performed.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.\n\n> Note: The maximum character size of the sum between the `name` and the `path` fields must not exceed 255. Otherwise the request cannot be validated.\n\n> Note: Zip files will be added as reference files. If you want to upload zip files, please use the [Upload Zip File](#/operations/UploadZipFile) endpoint.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -6091,7 +6091,7 @@ } }, "required": true, - "description": "For details on how to send multipart/form-data with `properties` see this [article](../docs/How-to-multipart.md)." + "description": "For details on how to send multipart/form-data with `properties` see this [article](../docs/How-to-multipart.html)." }, "responses": { "201": { @@ -6274,7 +6274,7 @@ "Source File" ], "summary": "Attach Source Files", - "description": "This endpoint can only be used after files have been uploaded via the [Upload Zip File](../reference/Public-API.v1.json/paths/~1files/post) endpoint. It allows you to add multiple source files to a project. \n\n Each file must be individually attached by setting the `fileUrl` to the `associatedFiles.id` returned by the [Poll Upload Zip File](../reference/Public-API.v1.json/paths/~1files~1{fileId}/get) endpoint, once the `unzipStatus` is `extracted`. \n\nIf a file is attached after the project has already been started, a new start project request must be made.\n\n> Note: The maximum character size of the sum between the `name` and the `path` fields must not exceed 255. Otherwise the request cannot be validated.\n", + "description": "This endpoint can only be used after files have been uploaded via the [Upload Zip File](#/operations/UploadZipFile) endpoint. It allows you to add multiple source files to a project. \n\n Each file must be individually attached by setting the `fileUrl` to the `associatedFiles.id` returned by the [Poll Upload Zip File](#/operations/PollUploadZipFile) endpoint, once the `unzipStatus` is `extracted`. \n\nIf a file is attached after the project has already been started, a new start project request must be made.\n\n> Note: The maximum character size of the sum between the `name` and the `path` fields must not exceed 255. Otherwise the request cannot be validated.\n", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -6833,9 +6833,9 @@ } } }, - "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." + "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.html)." }, - "description": "Adds a new version of the source file in [BCM](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html) or native format. More information about file formats can be found on the [File formats](../docs/File-formats.md) page.\n\nThe version is added on the task represented by `taskId`. To successfully execute the add operation the task should already be assigned and accepted by a user. If the task is automatic, it's possible to add a source file version only when the status of task is `inProgress`.\n\nThe file versions added need to respect the output file type declared by the task type of the enclosing task. On the [Rules for sequencing tasks correctly](https://docs.rws.com/791595/885137/trados-enterprise/rules-for-sequencing-tasks-correctly) page from the official RWS Documentation Center, you can find out what output file type is supported by each task.\n\nFor adding a source file version using an extension task, the configuration of the task must declare the `scope`'s value as \"file\".\n\nIf the file type of the new added file is different than the supported source file type, the new `fileTypeSettingsId` must be specified in the body or an update of file type should be performed after the add operation, using the [Update Source File Properties](../reference/Public-API.v1.json/paths/~1tasks~1{taskId}~1source-files~1{sourceFileId}/put).\n\nThe value of `fileTypeSettingsId` is one of the identifiers listed by the [List File Type Settings](../reference/Public-API.v1.json/paths/~1file-processing-configurations~1{fileProcessingConfigurationId}~1file-type-settings/get) endpoint.\n\nThe [List File Type Settings](../reference/Public-API.v1.json/paths/~1file-processing-configurations~1{fileProcessingConfigurationId}~1file-type-settings/get) endpoint must be called with the File Processing Configuration identifier of your project.\n\nThe File Processing Configuration of your project can be retrieved from [Get Project](../reference/Public-API.v1.json/paths/~1projects~1{projectId}/get) endpoint.\n\nThe multipart parameters in the body should respect and strictly follow the order specified in our documentation. \n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when adding files.\n", + "description": "Adds a new version of the source file in [BCM](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html) or native format. More information about file formats can be found on the [File formats](../docs/File-formats.html) page.\n\nThe version is added on the task represented by `taskId`. To successfully execute the add operation the task should already be assigned and accepted by a user. If the task is automatic, it's possible to add a source file version only when the status of task is `inProgress`.\n\nThe file versions added need to respect the output file type declared by the task type of the enclosing task. On the [Rules for sequencing tasks correctly](https://docs.rws.com/791595/885137/trados-enterprise/rules-for-sequencing-tasks-correctly) page from the official RWS Documentation Center, you can find out what output file type is supported by each task.\n\nFor adding a source file version using an extension task, the configuration of the task must declare the `scope`'s value as \"file\".\n\nIf the file type of the new added file is different than the supported source file type, the new `fileTypeSettingsId` must be specified in the body or an update of file type should be performed after the add operation, using the [Update Source File Properties](#/operations/UpdateSourceProperties).\n\nThe value of `fileTypeSettingsId` is one of the identifiers listed by the [List File Type Settings](#/operations/ListFileTypeSettings) endpoint.\n\nThe [List File Type Settings](#/operations/ListFileTypeSettings) endpoint must be called with the File Processing Configuration identifier of your project.\n\nThe File Processing Configuration of your project can be retrieved from [Get Project](#/operations/GetProject) endpoint.\n\nThe multipart parameters in the body should respect and strictly follow the order specified in our documentation. \n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when adding files.\n", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -7147,7 +7147,7 @@ } } }, - "description": "Updates the properties of the source file.\n\n\nThe value of `fileTypeSettingsId` should be one of the identifiers listed by the [List File Type Settings](../reference/Public-API.v1.json/paths/~1file-processing-configurations~1{fileProcessingConfigurationId}~1file-type-settings/get) endpoint called with an identifier of a File Processing Configuration that exists on the project. The list of File Processing Configurations from a project can be retrieved by using the [List File Processing Configurations](../reference/Public-API.v1.json/paths/~1file-processing-configurations/get) endpoint.", + "description": "Updates the properties of the source file.\n\n\nThe value of `fileTypeSettingsId` should be one of the identifiers listed by the [List File Type Settings](#/operations/ListFileTypeSettings) endpoint called with an identifier of a File Processing Configuration that exists on the project. The list of File Processing Configurations from a project can be retrieved by using the [List File Processing Configurations](#/operations/ListFileProcessingConfigurations) endpoint.", "requestBody": { "content": { "application/json": { @@ -7824,7 +7824,7 @@ "Target File" ], "summary": "Export Target File Version", - "description": "Generates an asynchronous export operation. Use the [Get Target File Version Export](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1{fileVersionId}~1exports~1{exportId}/get) endpoint to poll until the export is completed. Used only for [BCM](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html) file versions.\n\nThis operation triggers a conversion of the BCM target file version in a native or SDLXLIFF format, based on the value of the `format` query parameter used.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", + "description": "Generates an asynchronous export operation. Use the [Get Target File Version Export](#/operations/PollTargetFileVersionExport) endpoint to poll until the export is completed. Used only for [BCM](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html) file versions.\n\nThis operation triggers a conversion of the BCM target file version in a native or SDLXLIFF format, based on the value of the `format` query parameter used.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -8261,7 +8261,7 @@ "Target File" ], "summary": "Import Target File Version", - "description": "Generates an asynchronous import operation. Use [Poll Target File Version Import endpoint](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1imports~1{importId}/get) to poll until the import is completed. Only `sdlxliff` files can be imported.\n\nImport should be used when a file is downloaded as an `sdlxliff`, processed and then, replaced. \nThe import operation triggers internally the update of the [BCM](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html) file associated with the imported file. It should mostly be used for offline work.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", + "description": "Generates an asynchronous import operation. Use [Poll Target File Version Import endpoint](#/operations/PollTargetFileVersionImport) to poll until the import is completed. Only `sdlxliff` files can be imported.\n\nImport should be used when a file is downloaded as an `sdlxliff`, processed and then, replaced. \nThe import operation triggers internally the update of the [BCM](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html) file associated with the imported file. It should mostly be used for offline work.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -8289,7 +8289,7 @@ } }, "required": true, - "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." + "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.html)." }, "responses": { "200": { @@ -8598,9 +8598,9 @@ } } }, - "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." + "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.html)." }, - "description": "Adds a new version of the target file. Only the `native` and `bcm` file formats are accepted. For the `sdlxliff` files, you should use the [Import Target File endpoint](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1target-files~1{targetFileId}~1versions~1imports/post). More information about file formats can be found on the [File formats](../docs/File-formats.md) page. Additional details on BCM files can be found [here](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html).\n\nThe version is added on the task represented by `taskId`. To be able to execute the add operation the task should be assigned and accepted by user. If the task is automatic, it is possible to add a target file version only if the status is `inProgress`.\n\nThe added file versions need to respect the output file type declared by the task type of the enclosing task. On the [Rules for sequencing tasks correctly](https://docs.rws.com/791595/885137/trados-enterprise/rules-for-sequencing-tasks-correctly) page from the official RWS Documentation Center, you can find out what output file type is supported by each task.\n\nFor adding a target file version using an extension task, the configuration of the task type must declare the `scope`'s value as \"file\".\n\nThe multipart parameters in the body should respect and strictly follow the order specified in our documentation.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", + "description": "Adds a new version of the target file. Only the `native` and `bcm` file formats are accepted. For the `sdlxliff` files, you should use the [Import Target File endpoint](#/operations/ImportTargetFileVersion). More information about file formats can be found on the [File formats](../docs/File-formats.html) page. Additional details on BCM files can be found [here](https://developers.rws.com/languagecloud-api-docs/articles/BCM.NET_client_API.html).\n\nThe version is added on the task represented by `taskId`. To be able to execute the add operation the task should be assigned and accepted by user. If the task is automatic, it is possible to add a target file version only if the status is `inProgress`.\n\nThe added file versions need to respect the output file type declared by the task type of the enclosing task. On the [Rules for sequencing tasks correctly](https://docs.rws.com/791595/885137/trados-enterprise/rules-for-sequencing-tasks-correctly) page from the official RWS Documentation Center, you can find out what output file type is supported by each task.\n\nFor adding a target file version using an extension task, the configuration of the task type must declare the `scope`'s value as \"file\".\n\nThe multipart parameters in the body should respect and strictly follow the order specified in our documentation.\n\nConsider the [file and project size limit](https://docs.rws.com/791595/815967/trados-enterprise---accelerate/file-and-project-size-limit) when uploading files.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -8808,7 +8808,7 @@ } } }, - "description": "Generates an asynchronous quote export operation for the project in either PDF or Excel format. Use the [polling endpoint](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/get) to check when the export is completed.

\nBuilt-in quotes are only available in the same languages as the user interface. See [this page](https://docs.rws.com/791595/1084405/trados-enterprise---accelerate/ui-languages) for more information.
\nCustomers who use non-default quote templates are responsible for the implementation of a suitable localization approach.", + "description": "Generates an asynchronous quote export operation for the project in either PDF or Excel format. Use the [polling endpoint](#/operations/PollQuoteReportExport) to check when the export is completed.

\nBuilt-in quotes are only available in the same languages as the user interface. See [this page](https://docs.rws.com/791595/1084405/trados-enterprise---accelerate/ui-languages) for more information.
\nCustomers who use non-default quote templates are responsible for the implementation of a suitable localization approach.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -8916,7 +8916,7 @@ } } }, - "description": "Polls a quote report via an export operation. The quote report can be [downloaded](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1download/get) once the status is \"completed\". The recommended polling interval is 20 seconds. If polling does not return a success status in 20 minutes, it should be abandoned and a new export should be retried.\n\nIf the `exportId` query parameter is not provided, the polling action will return the status for the last generated export.", + "description": "Polls a quote report via an export operation. The quote report can be [downloaded](#/operations/DownloadQuoteReport) once the status is \"completed\". The recommended polling interval is 20 seconds. If polling does not return a success status in 20 minutes, it should be abandoned and a new export should be retried.\n\nIf the `exportId` query parameter is not provided, the polling action will return the status for the last generated export.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -9028,7 +9028,7 @@ } } }, - "description": "Downloads a quote report generated by the [asynchronous export operation](../reference/Public-API.v1.json/paths/~1projects~1{projectId}~1quote-report~1export/post). \n\nIf the `exportId` query parameter is not provided, the last generated export quote will be downloaded.", + "description": "Downloads a quote report generated by the [asynchronous export operation](#/operations/ExportQuoteReport). \n\nIf the `exportId` query parameter is not provided, the last generated export quote will be downloaded.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -9662,7 +9662,7 @@ "Project Group" ], "summary": "Add Projects To Group", - "description": "Adds projects to the project group.\n\nThe projects are not added instantly. To check the status use the [Get Project Group](../reference/Public-API.v1.json/paths/~1project-groups~1{projectGroupId}/get) endpoint.", + "description": "Adds projects to the project group.\n\nThe projects are not added instantly. To check the status use the [Get Project Group](#/operations/GetProjectGroup) endpoint.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -9783,7 +9783,7 @@ "Project Group" ], "summary": "Remove Projects From Group", - "description": "Removes projects from the project group.\n\nThe projects are not removed instantly. To check the status use the [Get Project Group](../reference/Public-API.v1.json/paths/~1project-groups~1{projectGroupId}/get) endpoint.", + "description": "Removes projects from the project group.\n\nThe projects are not removed instantly. To check the status use the [Get Project Group](#/operations/GetProjectGroup) endpoint.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -13094,7 +13094,7 @@ } } }, - "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." + "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.html)." }, "tags": [ "Termbase Template" @@ -14222,7 +14222,7 @@ "$ref": "#/components/parameters/fields" } ], - "description": "Creates a new termbase entry. For more information about how to use `fieldValueLinks` see [`Create termbase entry`](../docs/termbase/Termbase-entries.md#creating-a-termbase-entry).", + "description": "Creates a new termbase entry. For more information about how to use `fieldValueLinks` see [`Create termbase entry`](../docs/termbase/Termbase-entries.html#creating-a-termbase-entry).", "requestBody": { "content": { "application/json": { @@ -14841,7 +14841,7 @@ } } }, - "description": "Generates an asynchronous export operation.
\nUse the [Poll Export Termbase](../reference/Public-API.v1.json/paths/~1termbases~1{termbaseId}~1exports~1{exportId}/get) endpoint to poll until the export status is `done`.", + "description": "Generates an asynchronous export operation.
\nUse the [Poll Export Termbase](#/operations/PollExportTermbase) endpoint to poll until the export status is `done`.", "tags": [ "Termbase Export" ] @@ -15470,7 +15470,7 @@ "examples": {} } }, - "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." + "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.html)." }, "description": "Generates an asynchronous import operation.
\nUse the Poll Import Termbase endpoint to poll until the import status is `done`.
", "tags": [ @@ -16022,7 +16022,7 @@ } } }, - "description": "Updates a Translation Memory. We recommend reading this page too [Updating data with PUT](../docs/Updating-data-with-PUT.md).", + "description": "Updates a Translation Memory. We recommend reading this page too [Updating data with PUT](../docs/Updating-data-with-PUT.html).", "requestBody": { "content": { "application/json": { @@ -16901,9 +16901,9 @@ "examples": {} } }, - "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.md)." + "description": "For details on multipart requests please see [this article](../docs/How-to-multipart.html)." }, - "description": "Generates an asynchronous import operation. \n
\n
Read more about prerequisites and limitations on the [official documentation center](https://docs.rws.com/791595/741139/trados-enterprise/importing-tm-content).\n
\nNote: The order of the multipart form parameter must be implemented as such: properties first, file second.\n
\nUse the Poll Translation Memory Import endpoint to poll until the import status is `done`.
\nTo track the progress of the import please refer to [Poll Translation Memory Import](../reference/Public-API.v1.json/paths/~1translation-memory~1imports~1{importId}/get).", + "description": "Generates an asynchronous import operation. \n
\n
Read more about prerequisites and limitations on the [official documentation center](https://docs.rws.com/791595/741139/trados-enterprise/importing-tm-content).\n
\nNote: The order of the multipart form parameter must be implemented as such: properties first, file second.\n
\nUse the Poll Translation Memory Import endpoint to poll until the import status is `done`.
\nTo track the progress of the import please refer to [Poll Translation Memory Import](#/operations/PollTMImport).", "tags": [ "Translation Memory Import" ] @@ -17109,7 +17109,7 @@ } } }, - "description": "Generates an asynchronous export operation.\nUse the [Poll Translation Memory Export](../reference/Public-API.v1.json/paths/~1translation-memory~1exports~1{exportId}/get) endpoint to poll until the export status is `done`.", + "description": "Generates an asynchronous export operation.\nUse the [Poll Translation Memory Export](#/operations/PollTranslationMemoryExport) endpoint to poll until the export status is `done`.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -17420,7 +17420,7 @@ "tags": [ "Translation" ], - "description": "Translates a phrase in plain text or a BCM fragment containing a single segment. The translated content will be returned as a BCM [fragment](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html) or [term](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Skeleton.Term.html). \n\n For detailed concepts and examples see the [Translation API](../docs/translations/Translations.md) page.", + "description": "Translates a phrase in plain text or a BCM fragment containing a single segment. The translated content will be returned as a BCM [fragment](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html) or [term](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Skeleton.Term.html). \n\n For detailed concepts and examples see the [Translation API](../docs/translations/Translations.html) page.", "requestBody": { "content": { "application/json": { @@ -17532,7 +17532,7 @@ "x-stoplight": { "id": "w7q4r8d7hum33" }, - "description": "Performs a concordance search for a given text within the TM linked to the specified translation engine. The translated content will be returned as a BCM [fragment](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html) or [term](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Skeleton.Term.html). \n\n For detailed concepts and examples see the [Translation API](../docs/translations/Translations.md) page.", + "description": "Performs a concordance search for a given text within the TM linked to the specified translation engine. The translated content will be returned as a BCM [fragment](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html) or [term](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Skeleton.Term.html). \n\n For detailed concepts and examples see the [Translation API](../docs/translations/Translations.html) page.", "requestBody": { "content": { "application/json": { @@ -17644,7 +17644,7 @@ "x-stoplight": { "id": "pyjdd2h02zm8z" }, - "description": "Updates a translation unit. The system identifies matching translation units in the TM based on the provided BCM [fragment](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html). \n\n For detailed concepts and examples see the [Translation API](../docs/translations/Translations.md) page.", + "description": "Updates a translation unit. The system identifies matching translation units in the TM based on the provided BCM [fragment](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html). \n\n For detailed concepts and examples see the [Translation API](../docs/translations/Translations.html) page.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -17749,7 +17749,7 @@ } }, "operationId": "TranslationsAdd", - "description": "Adds a translation unit. The system identifies matching translation units in the TM based on the provided BCM [fragment](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html). \n\n For detailed concepts and examples see the [Translation API](../docs/translations/Translations.md) page.", + "description": "Adds a translation unit. The system identifies matching translation units in the TM based on the provided BCM [fragment](https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html). \n\n For detailed concepts and examples see the [Translation API](../docs/translations/Translations.html) page.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -32135,4 +32135,4 @@ } } } -} \ No newline at end of file +} diff --git a/articles/LCPublicAPI/api/Webhooks.v1.json b/articles/LCPublicAPI/api/Webhooks.v1.json index dfd877e..4697497 100644 --- a/articles/LCPublicAPI/api/Webhooks.v1.json +++ b/articles/LCPublicAPI/api/Webhooks.v1.json @@ -1,4 +1,4 @@ -{ +{ "openapi": "3.1.0", "info": { "title": "Webhooks", @@ -628,7 +628,7 @@ "webhook": { "title": "Webhook", "type": "object", - "description": "For correlation between `eventType` and `data`, please check the [Webhook Payload](../docs/webhooks/Webhooks-payload.md) page.", + "description": "For correlation between `eventType` and `data`, please check the [Webhook Payload](../docs/webhooks/Webhooks-payload.html) page.", "properties": { "eventId": { "type": "string", @@ -737,7 +737,7 @@ }, "items": { "$ref": "#/components/schemas/webhook", - "description": "For correlation between `eventType` and `data`, please check the [Webhook Payload](../docs/webhooks/Webhooks-payload.md) page.", + "description": "For correlation between `eventType` and `data`, please check the [Webhook Payload](../docs/webhooks/Webhooks-payload.html) page.", "x-stoplight": { "id": "6ff5pybiu7n07" } @@ -747,4 +747,4 @@ } } } -} \ No newline at end of file +} diff --git a/scripts/convert-contract-links.ps1 b/scripts/convert-contract-links.ps1 new file mode 100644 index 0000000..56ef915 --- /dev/null +++ b/scripts/convert-contract-links.ps1 @@ -0,0 +1,259 @@ +<# +Convert markdown links inside contract JSON files. + +Behavior: +- If a markdown link points to a .md file, replace the url to .html (literal change). +- If a markdown link points to a reference or api JSON path like + ../reference/Public-API.v1.json/paths/~1files~1{fileId}/get or ../api/Public-API.v1.json/components/schemas/foo + then replace the URL with either a local fragment (#/operations/... or #/schemas/...) when the referenced contract is the same file, + or with a full relative path to the referenced contract HTML (e.g. ../../LCPublicAPI/api/Public-API.v1-fv.html#/operations/OpId) + +Usage: +.\scripts\convert-contract-links.ps1 -Contract [-Root ] [-Force] +If -Contract is omitted the script will process all *.json files under +articles/Extensibility/api and articles/LCPublicAPI/api. + +Preview runs by default; add -Force to write changes. +#> + +param( + [string]$Contract, + [string]$Root = (Get-Location).Path, + [switch]$Force +) + +Write-Host "Root: $Root" + +# ensure $Root is a single string (some callers may pass arrays) +if ($Root -is [array]) { $Root = $Root[0] } + +function Resolve-ReferencedJsonFile { + param( + [string]$referencedFileName, + [string]$currentDir, + [string]$root + ) + + # Candidate locations relative to current file and repo + $candidates = @() + $candidates += Join-Path $currentDir "..\reference\$referencedFileName" + $candidates += Join-Path $currentDir "..\api\$referencedFileName" + $candidates += Join-Path $root "articles\LCPublicAPI\api\$referencedFileName" + $candidates += Join-Path $root "articles\Extensibility\api\$referencedFileName" + + foreach ($c in $candidates) { + try { + $p = Resolve-Path -Path $c -ErrorAction Stop + if ($p) { return $p.Path } + } catch { } + } + + return $null +} + +function Get-JsonPointerPath { + param([string]$pointer) + # pointer segments are separated by /; ~1 -> /, ~0 -> ~ + $seg = $pointer -split '/' + $decoded = ($seg | ForEach-Object { $_ -replace '~1', '/' -replace '~0','~' }) -join '/' + return $decoded +} + +function Get-OperationIdFromJson { + param( + [object]$jsonObj, + [string]$jsonPointer, + [string]$method + ) + # $jsonPointer is like 'paths/~1files~1{fileId}~1versions~1{fileVersionId}~1download' + $pathKey = $jsonPointer -replace '^paths/','' + # decode ~1 and ~0 + $pathKeyDecoded = ($pathKey -split '/').ForEach({ $_ -replace '~1','/' -replace '~0','~' }) -join '/' + if ($jsonObj.paths -and $jsonObj.paths.PSObject.Properties.Name -contains $pathKeyDecoded) { + $pathObj = $jsonObj.paths.$($pathKeyDecoded) + if ($null -ne $pathObj) { + $methodLower = $method.ToLower() + if ($pathObj.PSObject.Properties.Name -contains $methodLower) { + $op = $pathObj.$methodLower.operationId + if ($op) { return $op } + } + } + } + return $null +} + +function Get-SchemaNameFromJsonPointer { + param([string]$pointer) + # pointer like components/schemas/MySchema + if ($pointer -match '^components/schemas/(.+)$') { return $Matches[1] } + return $null +} + +if ($Contract) { + $contractFiles = @((Resolve-Path -Path $Contract).Path) +} else { + $dirs = @( + "$Root\articles\Extensibility\api", + "$Root\articles\LCPublicAPI\api" + ) + $contractFiles = @() + foreach ($d in $dirs) { + if (Test-Path $d) { + $contractFiles += Get-ChildItem -Path $d -Filter '*.json' -File -Recurse | Select-Object -ExpandProperty FullName + } + } +} + +if (-not $contractFiles -or $contractFiles.Count -eq 0) { + Write-Error "No contract files found to process. Provide -Contract or ensure API folders exist under articles/." + exit 1 +} + +$report = @() + +foreach ($cf in $contractFiles) { + Write-Host "Processing: $cf" + $origContent = Get-Content -Raw -Path $cf -Encoding UTF8 + $newContent = $origContent + $currentDir = Split-Path -Path $cf -Parent + $jsonObj = $null + try { $jsonObj = $origContent | ConvertFrom-Json -ErrorAction Stop } catch { } + + # find markdown links [text](url) + $linkPattern = '\[([^\]]+)\]\(([^)]+)\)' + $linkMatches = [regex]::Matches($origContent, $linkPattern) + foreach ($m in $linkMatches) { + $fullMatch = $m.Value + $text = $m.Groups[1].Value + $url = $m.Groups[2].Value + + # Skip absolute URLs (http, https, mailto) + if ($url -match '^(https?:|mailto:|#)') { continue } + + $newUrl = $null + + # Case 1: .md -> .html + if ($url -match '\.md(\#.*)?$') { + $newUrl = $url -replace '\.md(\#.*)?$','.html$1' + $report += [pscustomobject]@{ File = $cf; Old = $url; New = $newUrl; Reason = '.md -> .html' } + } + + # Case 2: reference or api JSON paths + elseif ($url -match '^(?:\.\./)?(?:reference|api)/(?[^/]+\.json)/(?.+)$') { + $refFile = $Matches['file'] + $rest = $Matches['rest'] + + # locate referenced json file on disk + $resolved = Resolve-ReferencedJsonFile -referencedFileName $refFile -currentDir $currentDir -root $Root + if (-not $resolved) { + Write-Warning "Referenced JSON not found: $refFile (in $cf)" + continue + } + + # load referenced json object + try { + $refJsonText = Get-Content -Raw -Path $resolved -Encoding UTF8 + $refObj = $refJsonText | ConvertFrom-Json -ErrorAction Stop + } catch { + Write-Warning "Failed to parse referenced JSON: $resolved" + continue + } + + # determine if referenced file is the same as current contract + $isLocalContract = ($resolved -eq (Resolve-Path -Path $cf).Path) + + if ($rest -like 'paths/*') { + # rest format: paths/~1something~1foo/post + $parts = $rest -split '/' + # last segment is method + $method = $parts[-1] + $pointer = ($parts[0..($parts.Length-2)] -join '/') + + # try to get operationId + $opId = Get-OperationIdFromJson -jsonObj $refObj -jsonPointer $pointer -method $method + if (-not $opId) { + Write-Warning "OperationId not found for $url in $resolved" + continue + } + + if ($isLocalContract) { + $newUrl = "#/operations/$opId" + } else { + # compute relative path from current file to referenced file's folder + $refDir = Split-Path -Path $resolved -Parent + $refHtmlFile = [System.IO.Path]::Combine($refDir, ([System.IO.Path]::GetFileNameWithoutExtension($refFile) + '-fv.html')) + # create a relative path using URI trick + $fromUri = (Get-Item $currentDir).FullName.TrimEnd('\') + '\' + $toUri = (Get-Item $refHtmlFile).FullName + $uriFrom = New-Object System.Uri($fromUri) + $uriTo = New-Object System.Uri($toUri) + $rel = $uriFrom.MakeRelativeUri($uriTo).ToString() -replace '/','\' + # convert Windows backslashes to forward slashes for markdown + $rel = $rel -replace '\\','/' + $newUrl = "$rel#\/operations\/$opId" + # remove escapes inserted above + $newUrl = $newUrl -replace '\\/', '/' + } + + $report += [pscustomobject]@{ File = $cf; Old = $url; New = $newUrl; Reason = 'paths -> operationId' } + } + + elseif ($rest -like 'components/schemas/*') { + $schema = $rest -replace '^components/schemas/','' + if ($isLocalContract) { + $newUrl = "#/schemas/$schema" + } else { + $refDir = Split-Path -Path $resolved -Parent + $refHtmlFile = [System.IO.Path]::Combine($refDir, ([System.IO.Path]::GetFileNameWithoutExtension($refFile) + '-fv.html')) + $fromUri = (Get-Item $currentDir).FullName.TrimEnd('\') + '\' + $toUri = (Get-Item $refHtmlFile).FullName + $uriFrom = New-Object System.Uri($fromUri) + $uriTo = New-Object System.Uri($toUri) + $rel = $uriFrom.MakeRelativeUri($uriTo).ToString() -replace '/','\\' + $rel = $rel -replace '\\','/' + $newUrl = "$rel#\/schemas\/$schema" + $newUrl = $newUrl -replace '\\/', '/' + } + $report += [pscustomobject]@{ File = $cf; Old = $url; New = $newUrl; Reason = 'components/schemas -> schema' } + } + + else { + # Not handled pointer type + continue + } + } + + if ($newUrl) { + # literal replace the url inside the JSON content + $escapedOld = [Regex]::Escape($url) + # Replace only the exact markdown link target inside parentheses to avoid accidental replacements elsewhere + $patternFull = "(\[" + [Regex]::Escape($text) + "\]\()" + $escapedOld + "\)" + $replacement = "`$1" + $newUrl + ")" + # fallback simple replace if above fails + if ($newContent -match [regex]::Escape($fullMatch)) { + $newContent = $newContent -replace [regex]::Escape($fullMatch), "[$text]($newUrl)" + } else { + $newContent = $newContent -replace $patternFull, $replacement + } + } + } + + if ($newContent -ne $origContent) { + Write-Host "Preview (no write): $cf" + # print replacements for this file + $report | Where-Object { $_.File -eq $cf } | ForEach-Object { Write-Host " $($_.Old) -> $($_.New)" } + + if ($Force) { + Set-Content -Path $cf -Value $newContent -Encoding UTF8 + Write-Host "Wrote changes to $cf" + } + } +} + +# summary +$grouped = $report | Group-Object -Property File +foreach ($g in $grouped) { + Write-Host "File: $($g.Name) - Changes: $($g.Count)" +} + +if (-not $Force) { Write-Host "Processed $($contractFiles.Count) files. Use -Force to apply changes." } diff --git a/scripts/convert-reference-links.ps1 b/scripts/convert-reference-links.ps1 new file mode 100644 index 0000000..cd01f52 --- /dev/null +++ b/scripts/convert-reference-links.ps1 @@ -0,0 +1,169 @@ +<# +.SYNOPSIS + Convert ../reference/*.json links in markdown files to ../api/*-fv.html links. + +.DESCRIPTION + Scans all markdown files under articles/LCPublicAPI/docs and finds links that + reference JSON files under ../reference/. It converts two types of references: + + - paths -> operations: ../reference/.json/paths/~1path~1sub/get + becomes ../api/-fv.html#/operations/# + + - components/schemas -> schemas: ../reference/.json/components/schemas/ + becomes ../api/-fv.html#/schemas/# + + By default the script runs in preview mode and only prints proposed replacements. + Use -Force to apply changes to files. + +.PARAMETER Root + Root path of the repository. Defaults to the current working directory. + +.PARAMETER Force + Apply changes. If not specified the script only shows a preview. + +.EXAMPLE + # preview + .\convert-reference-links.ps1 + + # apply changes + .\convert-reference-links.ps1 -Force +#> + +param( + [string]$Root = (Get-Location).Path, + [switch]$Force +) + +Write-Host "Root: $Root" + +$docsDir = Join-Path $Root 'articles\LCPublicAPI\docs' +if (-not (Test-Path $docsDir)) { + Write-Error "Docs directory not found: $docsDir" + exit 1 +} + +$mdFiles = Get-ChildItem -Path $docsDir -Recurse -Include *.md -File +if ($mdFiles.Count -eq 0) { + Write-Host "No markdown files found under $docsDir" + exit 0 +} + +$linkPattern = '\.\./reference/(?[^/\\)]+)\.json/(?[^)\s]+)' +$regex = [regex]$linkPattern + +$summary = [System.Collections.Generic.List[psobject]]::new() + +foreach ($md in $mdFiles) { + $content = Get-Content -Raw -Path $md.FullName -ErrorAction Stop + $mMatches = $regex.Matches($content) + if ($mMatches.Count -eq 0) { continue } + + $newContent = $content + $fileChanges = [System.Collections.Generic.List[string]]::new() + + foreach ($m in $mMatches) { + $orig = $m.Value + $fileName = $m.Groups['file'].Value + $rest = $m.Groups['rest'].Value + + $newUrl = $null + + if ($rest -like 'paths/*') { + # expected format: paths// + $parts = $rest -split '/' | Where-Object { $_ -ne '' } + # remove the leading 'paths' + if ($parts.Count -lt 3) { continue } + $parts = $parts[1..($parts.Count - 1)] + $method = $parts[-1].ToLower() + $encPathParts = $parts[0..($parts.Count - 2)] + $encodedPointer = ($encPathParts -join '/') + # decode JSON Pointer escaping ~1 -> / and ~0 -> ~ + $decodedPath = $encodedPointer -replace '~1','/' -replace '~0','~' + + $refJsonPath = Join-Path $Root "articles\LCPublicAPI\reference\$fileName.json" + if (-not (Test-Path $refJsonPath)) { + # try the api folder as some sources place the json files under articles/LCPublicAPI/api + $apiJsonPath = Join-Path $Root "articles\LCPublicAPI\api\$fileName.json" + if (Test-Path $apiJsonPath) { + Write-Host "Info: using API JSON fallback: $apiJsonPath (for $fileName.json in $($md.FullName))" + $refJsonPath = $apiJsonPath + } + else { + Write-Warning "Referenced JSON not found: $refJsonPath (in $($md.FullName))" + continue + } + } + + try { + $json = Get-Content -Raw -Path $refJsonPath | ConvertFrom-Json -ErrorAction Stop + } + catch { + Write-Warning "Failed to parse JSON: $refJsonPath" + continue + } + + $pathObj = $null + if ($json.paths -and $json.paths.PSObject.Properties.Name -contains $decodedPath) { + $pathObj = $json.paths.PSObject.Properties[$decodedPath].Value + } + else { + # no exact match; try a best-effort find using replacement of '{' '}' to parameter name + $alt = $json.paths.PSObject.Properties.Name | Where-Object { $_ -replace '[{}]','' -eq ($decodedPath -replace '[{}]','') } + if ($alt) { $pathObj = $json.paths.PSObject.Properties[$alt].Value } + } + + $operationId = $null + if ($null -ne $pathObj) { + if ($pathObj.PSObject.Properties.Name -contains $method) { + $op = $pathObj.PSObject.Properties[$method].Value + if ($op -and $op.operationId) { $operationId = $op.operationId } + } + } + + if (-not $operationId) { + # fallback: create a slug-like id from method + path + $slug = ($method + '-' + ($decodedPath -replace '[^0-9A-Za-z]','-')).Trim('-') + $operationId = $slug + Write-Host "Warning: operationId not found for $fileName.json $decodedPath $method. Falling back to $operationId" + } + + # build new URL using fragment format '#/operations/' + $newUrl = "../api/$fileName-fv.html#/operations/$operationId" + } + elseif ($rest -like 'components/schemas/*') { + # schema name is the last segment + $parts = $rest -split '/' + $schema = $parts[-1] + $newUrl = "../api/$fileName-fv.html#/schemas/$schema" + } + else { + continue + } + + if ($newUrl) { + # literal replace the matched path portion to avoid regex escape issues + $newContent = $newContent.Replace($orig, $newUrl) + $fileChanges.Add("$orig -> $newUrl") + } + } + + if ($fileChanges.Count -gt 0) { + $summary.Add([pscustomobject]@{ File = $md.FullName; Changes = $fileChanges }) + if ($Force) { + Set-Content -Path $md.FullName -Value $newContent -Encoding UTF8 + Write-Host "Updated: $($md.FullName)" + } + else { + Write-Host "Preview (no write): $($md.FullName)" + foreach ($c in $fileChanges) { Write-Host " $c" } + } + } +} + +# Summary +if ($summary.Count -eq 0) { + Write-Host "No links matched the pattern." +} +else { + Write-Host "Processed $($summary.Count) files. Use -Force to apply changes." +} From 38cc86fc49d5992920438fe1549c784036163113 Mon Sep 17 00:00:00 2001 From: Mihai Dipsan Date: Tue, 4 Nov 2025 11:52:56 +0200 Subject: [PATCH 08/19] Push new branch --- articles/Extensibility/docs/appManagement/Approvals.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/articles/Extensibility/docs/appManagement/Approvals.md b/articles/Extensibility/docs/appManagement/Approvals.md index b464bb0..2b1b4cc 100644 --- a/articles/Extensibility/docs/appManagement/Approvals.md +++ b/articles/Extensibility/docs/appManagement/Approvals.md @@ -8,7 +8,7 @@ stoplight-id: f0cb88dbb2089 All apps have to go through the **Approval Process** in order to achieve certain results. The **Approval Process** is our way of validating that your apps comply with the RWS Trados policies. We have a dedicated **RWS Support** team responsible for the apps validations. The support team has full rights over the registered apps. -After having registered your app in Trados, you will gain access to the comments panel within the app's details page. Here you can leave comments or questions for our **RWS Support** team. The replies received from the Support team members will be displayed in the same panel. +After having registered your app in Trados, you will gain access to the comments panel within the app's details page. Here you can leave comments or questions for our **RWS Support** team. The replies received from the Support team members will be displayed in the same panel. -![Register](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/extensibility/app-management/RegisterApp.gif?raw=true) +![Register](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/extensibility/app-management/RegisterAppDevCheckbox.gif?raw=true) Common issues that may occur during registration include: diff --git a/articles/Extensibility/docs/appManagement/Sharing.md b/articles/Extensibility/docs/appManagement/Sharing.md index aa5e268..65b6a19 100644 --- a/articles/Extensibility/docs/appManagement/Sharing.md +++ b/articles/Extensibility/docs/appManagement/Sharing.md @@ -5,6 +5,8 @@ stoplight-id: ruuiy7dsn27on # Sharing the App By default, a newly registered app is private, meaning that only the developer tenant has access to it. However, you can share your app with other tenants even if it hasn't been published yet. +A private version of a public app can also be shared prior to its publication. Please note that once the app is published, the Share button will no longer be visible. + To share the app you need to: 1. Test that it works as expected. 2. Select your app from the **My Apps** tab and click the **Share** button. diff --git a/articles/Extensibility/docs/development/App-Versioning.md b/articles/Extensibility/docs/development/App-Versioning.md index d8a4308..ed51b20 100644 --- a/articles/Extensibility/docs/development/App-Versioning.md +++ b/articles/Extensibility/docs/development/App-Versioning.md @@ -9,7 +9,7 @@ This article explains how the app versions work and how to use multiple versions ## Versions in Trados -When registering the app, the descriptor is saved in Trados as the initial version. The [descriptor](../../App-API.v1.json/paths/~1descriptor/get) includes a `version` field, which indicates the app's version. This version number should be incremented each time changes are made to the descriptor (such as endpoints or naming) to ensure Trados detects the new version. Newly detected versions are added alongside existing ones. This enables the installed instances to be associated with a particular version of the app. +When registering the app, the descriptor is saved in Trados as the initial version. The [descriptor](../../App-API.v1.json/paths/~1descriptor/get) includes a `version` field, which indicates the app's version. This version number should be incremented each time changes are made to the descriptor (such as endpoints or naming) to ensure Trados detects the new version. Only descriptors with higher version numbers are detected and added alongside existing ones. This enables the installed instances to be associated with a particular version of the app. Throughout an app's lifespan, it can be installed in various versions across different tenants. For instance, one tenant might install version 1.0.1, another 1.0.2, and a third 1.0.3. Although they expect to use the app at these particular versions, if no special actions are taken by the developer, they will probably all be using the same instance, which probably has a single implementation and does not take into consideration the expected version. diff --git a/articles/Extensibility/docs/development/Multi-Region.md b/articles/Extensibility/docs/development/Multi-Region.md index 9ede93c..1fdeb82 100644 --- a/articles/Extensibility/docs/development/Multi-Region.md +++ b/articles/Extensibility/docs/development/Multi-Region.md @@ -16,6 +16,9 @@ To enable multi-region on your app you must provide regional instances of your a Currently, the supported regions are Europe(`eu`) and Canada(`ca`). Depending on where your app is deployed you can choose either one or both of them. This will tell Trados what endpoints to invoke based on where the consumer tenant is living. + +> All instances, in all regions should provide the exact same descriptor. + ## Installing an App with Multi-Region support When a consumer installs an app, if `regionalBaseUrls` is present and same region as consumer's is available, that region will be used. @@ -33,6 +36,9 @@ The `INSTALLED` lifecycle event now includes the region information for the acco The `baseUrl` property from [descriptor](../../App-API.v1.json/paths/~1descriptor/get) remains mandatory even if you add the `regionalBaseUrls` property(which is optional). + +> The `baseUrl` in your app should stay fixed and not change based on region. When an App is registered, `baseUrl` from that initial descriptor is used for setting audience for all future authentication requests, independent of regions (it is possible to change it later, see [Changing Base URL](App-Descriptor.md#changing-base-url). + Your "multi-region descriptor" should look something like this: ```json { diff --git a/articles/Extensibility/docs/development/Preview-App-development-guide.md b/articles/Extensibility/docs/development/Preview-App-development-guide.md index f340195..0f32b31 100644 --- a/articles/Extensibility/docs/development/Preview-App-development-guide.md +++ b/articles/Extensibility/docs/development/Preview-App-development-guide.md @@ -10,7 +10,7 @@ stoplight-id: i7ib8ruwpxdxr Preview apps offer the possibility to use external preview providers within the Trados Enterprise platform. -The type of preview generated is known as "Dynamic Preview" as it can dynamically adjust depending on choices the user might make in the browser, for instance, selecting different preview sections or views from the rendered preview. The extension acts as a webserver which implements custom endpoints to serve the content to the browser. This content can be anything which the browser is able to parse and display accordingly. For more details on Dynamic Preview Concepts, please see the second section towards the end of this document. +The type of preview generated is known as "Dynamic Preview" as it can dynamically adjust depending on choices the user might make in the browser, for instance, selecting different preview sections or views from the rendered preview. The extension acts as a webserver which implements custom endpoints to serve the content to the browser. This content can be anything which the browser is able to parse and display accordingly. To build a new preview app we recommend to start by using the provided [app blueprints](https://github.com/RWS/language-cloud-extensibility/tree/main/blueprints). @@ -38,13 +38,12 @@ For example: }, "supportedFileTypes": "html", "requiredInputFiles": { - "bilingualDocument": false, - "previewPackageTemplate": false, - "nativeSourceFile": false, - "nativeTargetFile": false, - "nativeAnnotatedTargetFile": true + "bilingualDocument": true, + "previewPackageTemplate": true, + "nativeFile": true, + "nativeAnnotatedFile": true }, - "outputType": "previewUrl" + "outputType": "previewPackage" } } ] @@ -58,26 +57,18 @@ For example: - `extensionPointId` - the extension point identifier corresponding to this extensionType: **lc.previewprovider**. - `description` - the preview extension description - `configuration` - the extension configuration. - - `endpoints` - the required endpoints for the preview extension. - - `lc.previewprovider.startpreview` - the endpoint used to start the preview generation. - - `lc.previewprovider.refreshpreview` - the endpoint used to refresh the existing preview session. - - `lc.previewprovider.updatesegment` - the endpoint used to update a segment based on a BCM document fragment. - - `lc.previewprovider.endpreview` - the endpoint used to clean up any state associated with a given preview session. - - For the V2 API, they are: - - `lc.previewprovider.startpreview.v2` - - `lc.previewprovider.refreshpreview.v2` - - `lc.previewprovider.updatesegment.v2` - - `lc.previewprovider.endpreview.v2` - + - `endpoints` - the required endpoints for the preview extension, should be relative to your `baseUrl`. + - `lc.previewprovider.startpreview` - the endpoint used to start the preview generation. For ex: `/start-preview`. + - `lc.previewprovider.refreshpreview` - the endpoint used to refresh the existing preview session. For ex: `refresh-preview`. + - `lc.previewprovider.updatesegment` - the endpoint used to update a segment based on a BCM document fragment. For ex: `update-segment`. + - `lc.previewprovider.endpreview` - the endpoint used to clean up any state associated with a given preview session. For ex: `end-preview`. - `supportedFileTypes` - A list of FileTypeDefinitionIds which this app may be associated with - `requiredInputFiles` - provides details about which types of input files this extension will require for generating a preview. - `bilingualDocument` - request an endpoint for downloading a BCM document. - `previewPackageTemplate` - request an endpoint for downloading a preview Package Template. - - `nativeSourceFile` - request an endpoint for downloading a native source file. - - `nativeTargetFile` - request an endpoint for downloading a native target file. - - `nativeAnnotatedTargetFile` - request an endpoint for downloading a native annotated target file. - - `outputType` - Indicates which type of output is generated by the extension. Dynamic previews only support a URL endpoint result and thus this should be set to **previewUrl** + - `nativeFile` - request an endpoint for downloading a native file. + - `nativeAnnotatedFile` - request an endpoint for downloading a native annotated file. + - `outputType` - Indicates which type of output is generated by the extension. For v1, this can be "previewPackage" for package-based previews or "previewUrl" for dynamic URL-based previews. ### Preview App Endpoints @@ -87,18 +78,14 @@ and returns after creating the background worker which generates the actual prev If the app needs to store any state, it should associate it with this identifier. The very first call for a given session should always be _startPreview_. If other endpoints are called before this, they should return an error. -The preview content is served by the app via one or more endpoints the app implements. The content can be any format, as long as the browser hosting the preview can parse and display that content. This includes, HTML, PDF, streamed video etc. -The resulting resource identifier returned from this call should be set in the `previewResult` field of the callback response. This will be a URL pointing to the initial endpoint implementation on the extension which the Browser hosting the preview will use to retrieve the preview content. As mentioned, the preview extension can implement additional endpoints which can then be called from the hosted portion in the Browser via AJAX calls or similar. +If the app is generating a previewPackage or standalone HTML result, it should be uploaded via the URL defined in the `previewResultFileUrl` field. +The resulting resource identifier returned from this call should be set in the `previewResult` field of the callback response. -There are currently 2 versions of the Preview API supported by Extensions: +For dynamic previews (outputType: "previewUrl"), the preview content is served by the app via one or more endpoints the app implements. The content can be any format, as long as the browser hosting the preview can parse and display that content. This includes HTML, PDF, streamed video etc. The resulting URL returned from this call should be set in the `previewResult` field of the callback response. -## APIs - -### API V1 - - Examples: + Example: ```html -POST /v1/start-preview +POST https://your-app.com/start-preview ``` - The request is as follows: @@ -175,7 +162,7 @@ The request and responses (REST and Callback) are identical to the _startPreview Example: ```html -POST /v1/refresh-preview +POST https://your-app.com/refresh-preview ``` Endpoint usage: @@ -188,7 +175,7 @@ The _updateSegment_ endpoint accepts a list of BCM document fragments along with Example: ```html -POST /v1/update-segment +POST https://your-app.com/update-segment ``` - The request is as follows: @@ -246,7 +233,7 @@ The _endPreview_ endpoint is called when a given preview session associated with Example: ```html -POST /v1/end-preview +POST https://your-app.com/end-preview ``` ```json @@ -260,246 +247,11 @@ Called to indicate a preview session has terminated. Any required cleanup should Please refer to the endpoint's [documentation](../../App-API.v1.json/paths/~1lc.preview.endpreview/post) for further details. -### API V2 - - Examples: -```html -POST /v2/start-preview -``` - -- The request is as follows: - -```json -{ - "previewSessionId": "string", - "projectId": "string", - "scope": "target", - "fileInformation": { - "name": "string", - "sourceLanguage": "string", - "targetLanguage": "string" - }, - "inputFiles": { - "bilingualDocument": {"id": "string", "version": "int", "url": "string"}, - "previewPackageTemplate": {"id": "string", "version": "int", "url": "string"}, - "nativeSourceFile": {"id": "string", "version": "int", "url": "string"}, - "nativeTargetFile": {"id": "string", "version": "int", "url": "string"}, - "nativeAnnotatedTargetFile": {"id": "string", "version": "int", "url": "string"} - }, - "callbackUrl": "string", -} -``` -- The response after setting up the background worker, would look like this: -```json -{ - "errorCode": "string", - "message": "string", - "details": [ - { - "name": "string", - "code": "string", - "value": "string" - } - ] -} -``` - -- The final result, which is sent on the callback, is shown below: - -```json -{ - "previewSessionId": "string", - "previewResult": "string", - "errors": [ - { - "errorCode": "string", - "message": "string", - "details": [ - { - "name": "string", - "code": "string", - "value": "string" - } - ] - } - ] -} -``` - -Endpoint usage: - -This endpoint is used to initiate a preview session on the app. When this endpoint is called, the app should generate the initial preview and associate it (internally, if any state is kept) - with the `previewSessionId`. - -This should be the first endpoint called for any given session - if another endpoint is called for a given session ID before this one, an error should be returned. +### Javascript Communication Protocol +The Online Editor Container communicates with the Preview Viewer iframe using the Javascript postMessage mechanism. The API is detailed below: -Please refer to the endpoint's [documentation](../../App-API.v1.json/paths/~1lc.preview.startpreview.v2/post) for further details. - -#### RefreshPreview -The _refreshPreview_ endpoint refreshes an existing preview. The mechanism for this in entirely up to the Extension implementation in that it might keep state from the initial preview generation from _startPreview_ in order to speed up the refresh. - -The request and responses (REST and Callback) are identical to the _startPreview_ endpoint. - - Example: -```html -POST /v2/refresh-preview -``` - -Endpoint usage: -This endpoint is called when a preview refresh is requested by the user. Any state the app holds from the initial preview generation may be used to speed up the refresh. - -Please refer to the endpoint's [documentation](../../App-API.v1.json/paths/~1lc.preview.refreshpreview.v2/put) for further details. - -#### UpdateSegment -The _updateSegment_ endpoint accepts a list of BCM document fragments along with their associated segment IDs. The Extension will generate and return an HTML rendered fragment for each BCM document fragment sent in this manner. - -Example: -```html -POST /v2/update-segment -``` - -- The request is as follows: - -```json -{ - "previewSessionId": "string", - "segments": [ - { - "segmentId": "string", - "fragment": {} - } - ], - "fileInformation": { - "name": "string", - "sourceLanguage": "string", - "targetLanguage": "string" - }, - "scope": "source" -} -``` -- `previewSessionId` - unique ID of current preview session. -- `segments` - an array of segments with the following details: - - `segmentId` - ID of segment being rendered. - - `fragment` - BCM document JSON fragment. -- `fileInformation` - provides information relating to the file for which the rendered HTML is being generated. -- `scope` - indicates whether the generation is happening for source or target content. - -- The response would look like this: -```json -{ - "previewSessionId": "string", - "renderedTranslations": [ - { - "html": "string", - "segmentId": "string", - "errorCode": "string" - } - ] -} -``` -- `previewSessionId` - unique ID of current preview session. -- `renderedTranslations` - an array of rendered translations with the following details: - - `html` - rendered HTML content for this segment. - - `segmentId` - ID of this segment. - - `errorCode` - Error code for this segment (App/Extension specific). - -Endpoint usage: -This endpoint is called when the user is updating one or more segments in the Editor. For each segment, the extension will render an equivalent HTML fragment based on the input BCM document fragment. - -Please refer to the endpoint's [documentation](../../App-API.v1.json/paths/~1lc.preview.updatesegment.v2/post) for further details. - -#### EndPreview -The _endPreview_ endpoint is called when a given preview session associated with the previewSessionId is finished. This is called so that the app may perform any required cleanup. - -Example: -```html -POST /v2/end-preview -``` - -```json -{ - "previewSessionId": "string" -} -``` - -Endpoint usage: -Called to indicate a preview session has terminated. Any required cleanup should be performed by the app. - -Please refer to the endpoint's [documentation](../../App-API.v1.json/paths/~1lc.preview.endpreview.v2/post) for further details. - - -## Session Management and Tenant Separation -It is up to the app to manage any session state internally and have an expiry mechanism for this. -Also, any data which is tenant specific needs to be kept separate from any other data and the app also needs to manage tenant separation concerns internally. -
-
-
- - -# Dynamic Preview Concepts - -Dynamic Preview concepts are explained a little more in this section. The Preview Container/Viewer (which hosts its content in an iframe) can dynamically update parts of the preview when the user selects different "pages" inside it via a selection mechanism, such as a drop-down or something similar. The app implements an endpoint which will initially serve the starting content and also any additional "dynamic" content requested via an AJAX call or similar. In general, the content generated dynamically will be a different rendering or view of the same BCM document content. For example, applying different XSLTs to an XML could provide such dynamic content (if the native file is XML based). It might also be different sections of the previewed document, or indeed, streamed video snippets, depending on which segments etc are selected in the previewed document. - - -Please refer also to this document before continuing: -[Preview Provider](../../docs/development/Preview-App-development-guide.md). - - -The app acts as a web server for this dynamic content. Some of the concepts around this are defined here: - -- Custom Preview Endpoint(s) - this is a custom endpoint on the app which supports TLS and which is used to serve the Initial Preview Content and the subsequent Dynamic Preview Content. Depending on the implementation, the app might specify one or more of these. -- Initial Preview Content - this is the HTML/Javascript content which is first served from the custom preview endpoint. It consists of some basic HTML and Javascript content which initializes the preview and loads an initial dynamic page. The URL for this initial call is set as the value for the "src" attribute on the iframe and is in the following format: - -```json -https://my.extension/custom-endpoint?sessionId={sessionId}&tenant={tenantId}&accessToken={hard-to-guess-access-token}&page={pageId} -``` -An example of such a URL is: - -```json -https://0ba1-212-17-60-65.ngrok.io/api/dynamic/v1/preview/endpoint?sessionId=1234567892&tenantId=12345&accessToken=a6f56954-7f55-440a-9919-160a2c4af91c&page=initial -``` - -The returned HTML/Javascript will be embedded in an iframe and there should be some Javascript mechanism to extract the access token from the current URL of the iframe and next pass it as a header in subsequent dynamic calls made from the iframe during dynamic content selection. -- Dynamic Preview Content - this is the dynamic content which is loaded based on a page selection. This can be loaded initially as part of the initialization routine of the Initial Preview Content after it checks for the hash fragment, and then also, when a user selects a given page using the page selection mechanism (via drop-down or similar). Loading the dynamic content involves making a dynamic call to the app on one of the Custom Preview Endpoints and must pass in the hash fragment as a header to the call. Mechanisms for initiating the call and updating the content might involve AJAX/JQuery or similar. -- TLS (Transport Layer Security) - the app should enable the TLS protocol on all custom endpoints. A valid certificate will be needed for this. -- Authorization/Access token - this is a hard-to-guess value which the app must generate and return as a response to the initial StartPreview request. It should be set as a hash fragment value on the returned URL. The app should provide for a TTL on this access token so that it will expire after a pre-determined time. The app should manage the TTL and any requirements around expiry of this. -- Preview Session - This is a session related to a given preview. Each session has a unique ID associated with it called "Preview Session ID" and it is sent to the app during various requests, including StartPreview. The app should use this to keep track of content related to a specific session when storing it locally. -- App storage - this could be a database or local disk-based storage etc. It is used by the app to store preview related content for specific sessions, such as files used to generate the preview, generated preview content, and any other specific data the app needs to store to work. -- Input Files - these files represent the initial data used to generate the preview. They might be a PreviewPackageTemplate, Native Source or Target files or Annotated Native Source or Target files. These files are described in more detail here: - - PreviewPackageTemplate - this file is a zip package containing different content which is used in the generation of preview content. Examples include XML, HTML, images, CSS, XSLT, Javascript etc. The content of this file is specific to the native file format used to generate the preview. - - Native File - this represents the native format which is being translated or previewed. Examples would be Word documents, Excel documents, XML documents, text documents etc. These files can be source or target, where the source represents the language which is being translated into other languages and the target represents the translated file (for example, source might be Japanese, and target might be French.) - This is a one-to-many relationship type, meaning that there is only one source language but possibly many more target languages. - - Annotated Native File - This is a native source or target file which has been annotated with special characters which encode a segment identifier in the annotation. The annotations also indicate where the segment boundaries are. These are used for segment navigation between the Editor and the Preview and for updating of segments inside the preview when content has changed in the Editor. -- Output Preview Content - The generated content is stored by the app locally and a URL is created allowing access to the stored content via a Custom Preview Endpoint on the app. In essence, the app acts like a web server. -- CORS (Cross Origin Resource Sharing) - Please see https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS . -- iframe - Please see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe. - - -## Creating a Preview Provider App - -The following steps should be considered when creating a Dynamic Preview App: - -- Add one or more custom endpoints in the PreviewController class -- Ensure the TLS security protocol is enabled on the app endpoints. A certificate from a trusted CA is required for this. -- Implement the endpoint functionality in the PreviewService class. -- Implement a mechanism for generating and storing hard-to-guess tokens with TTL support. When any of the custom endpoints are called, the TTL associated with that session's access token should be refreshed. When RefreshPreview is called, a new custom URL and access token with a new TTL should be generated. -- Implement the code to generate the preview from the initial files downloaded from the Trados Cloud Platform API. -- In the StartPreview implementation in the PreviewService class, ensure the background job is set up to call the preview generation implementation. -- Store the resulting initial files and the generated preview content from the above preview implementation locally or in a database. -- The response from the background job (StartPreview/RefreshPreview) should generate a URL as detailed in the previous section which points to the custom endpoint and includes the hard-to-guess access token as a hash fragment. This response should return the Initial Preview Content. -- Subsequent Dynamic Preview Content requests should respond with the relevant dynamic content after authorizing the access token sent in a header in the request. The header name can be decided by the app developer as it will be present in the Initial Preview Content HTML/Javascript and will be sent by the dynamic request (AJAX/JQuery etc) from there. -- If the access token has expired, the app should respond with a 401. -- Any calls to RefreshPreview should generate a new access token. -- Any calls to EndPreview should clean up all local data related to the given Preview Session ID. -- Implement a TTL on the local data. If EndPreview has not been called before the TTL expires, clean up all local data related to the given Preview Session ID. -- Implement UpdateSegment endpoint. -- Ensure UpdateSegment updates ALL dynamic pages generated by the app so that when a particular page is selected, it will have the updated content inside the segment. -- Implement a background job which cleans up sessions after a set interval. -- The TTLs associated with the access tokens and session cleanup should be configurable. - - -## Javascript API details -The Online Editor Container communicates with the Preview Viewer iframe using the Javascript postMessage mechanism. The API is detailed here in this Javascript file: -```js +```javascript "use strict"; /* Communication Protocol between the RWS Online Editor and the preview loaded into it. @@ -525,284 +277,101 @@ The Online Editor Container communicates with the Preview Viewer iframe using th } if (!window.sdlPreviewScriptIncludeGuard) { + // when the preview package gets inlined into a single html file, the script can + // get included multiple times; we use this guard to only subscribe to the events + // once + window.sdlPreviewScriptIncludeGuard = true; + //state var selectedSegmentId = ""; var segmentIdToSigCache = {}; var initialized = false; - // events ---------------------------------------------------------------------- - + // names of the events var PREVIEW_SEGMENT_SELECTED = "Preview:segmentSelected"; var PREVIEW_SHOW_MESSAGE = "Preview:showMessage"; var UE_SEGMENT_SELECTED = "UE:segmentSelected"; var UE_UPDATE_SEGMENT = "UE:updateSegment"; -} - - // communication --------------------------------------------------------------- - - function onSegmentSelectedInEditor(segmentId) { - setActiveSegment(segmentId); -} - - function onUpdateSegmentWithTranslation(payload) { - var segmentId = payload.segmentId; - var segmentSnippet = payload.snippet; - updateSegmentWithTranslation(segmentId, segmentSnippet); -} - - function onSegmentSelectedInPreview(segmentId) { - if (window.chrome && window.chrome.webview) { - window.chrome.webview.postMessage({ - "type": "selectSegment", - "segmentId": segmentId - }); - } else { - emitEvent(PREVIEW_SEGMENT_SELECTED, segmentId); - } -} - - function notifyPreviewControlToApplyInitialSelection() { - if (window.chrome && window.chrome.webview) { - window.chrome.webview.postMessage({ - "type": "applyInitialSelection" - }); - } -} - - function notifyNavigationFailure(segmentId) { - if (window.chrome && window.chrome.webview) { - window.chrome.webview.postMessage({ - "type": "cannotNavigateToSegment", - "segmentId": segmentId - }); - } - else - emitEvent(PREVIEW_SHOW_MESSAGE, "CannotNavigateToSegment"); -} - - function notifyPreviewUpdateFailure() { - emitEvent(PREVIEW_SHOW_MESSAGE, "PreviewCannotUpdate"); -} - - function emitEvent(eventName, parameter) { - window.parent.postMessage({ - "eventName": eventName, - "payload": parameter - }, '*'); -} - - // for scroll sync on side-by-side preview - if (window.chrome && window.chrome.webview) { - window.onscroll = () => window.chrome.webview.postMessage({ - "type": "windowScrolled", - "x": window.scrollX, - "y": window.scrollY - }); -} - - // segment update -------------------------------------------------------------- - - function updateSegmentWithTranslation(segmentId, segmentSnippet) { - var sigs = segmentIdToSigCache[segmentId]; - if (!sigs || !sigs.length || sigs.length > 1) { - notifyPreviewUpdateFailure(); - return; - }; - - var sigToReplace = sigs[0]; - var segmentSnippetDom = new DOMParser().parseFromString(segmentSnippet, "text/html"); - updateImagesInSnippet(segmentSnippetDom, sigToReplace); - updateFieldsInSnippet(segmentSnippetDom, sigToReplace); - sigToReplace.innerHTML = ""; - - var updatedSegment = segmentSnippetDom.getElementsByTagName("segment")[0]; - - while (updatedSegment.hasChildNodes()) { - sigToReplace.appendChild(updatedSegment.firstChild); - } -} - - function updateImagesInSnippet(segmentSnippetDom, sigToReplace) { - var snippetImgs = segmentSnippetDom.getElementsByTagName("img"); - var sigImgs = sigToReplace.getElementsByTagName("img"); - - if (snippetImgs.length > sigImgs.length) { - notifyPreviewUpdateFailure(); - return; - } - - if (snippetImgs.length > 0 && snippetImgs[0].dataset.preserveallimages) { - // object and it might have multiple images - for (let i = sigImgs.length - 1; i >= 0; i--) { - snippetImgs[0].parentElement.insertBefore(sigImgs[i], snippetImgs[0].nextSibling); - } - snippetImgs[0].remove(); - } else { - for (let i = 0; i < snippetImgs.length; i++) { - var currentImg = snippetImgs[i]; - cloneAttributes(currentImg, sigImgs[i]); - } - } -} - - function updateFieldsInSnippet(segmentSnippetDom, sigToReplace) { - - var snippetSpans = segmentSnippetDom.getElementsByTagName("span"); - - for (var i = 0; i < snippetSpans.length; i++) { - var currentSpan = snippetSpans[i]; - if (currentSpan.dataset.field) { - var fieldType = currentSpan.dataset.field; - var fieldInDom = sigToReplace.getElementsByTagName(fieldType); - - if (fieldInDom.length !== 1) { - notifyPreviewUpdateFailure(); - return; - } - - currentSpan.parentElement.insertBefore(fieldInDom[0], currentSpan); - currentSpan.remove(); - } - } -} - - function cloneAttributes(element, sourceNode) { - var attr; - var attributes = Array.prototype.slice.call(sourceNode.attributes); - while ((attr = attributes.pop())) { - element.setAttribute(attr.nodeName, attr.nodeValue); - } -} - // navigation ------------------------------------------------------------------ + document.addEventListener("DOMContentLoaded", function (event) { + /* preparations can be done here */ + }); - function setActiveSegment(segmentId) { - clearSegmentHighlight(selectedSegmentId); - selectedSegmentId = segmentId; + window.addEventListener(UE_SEGMENT_SELECTED, function (event) { + // event.detail will contain the id of the segment we need to navigate to + // the segment with this id can be highlighted and scrolled into view - highlightSegment(segmentId, "selected"); - scrollSegmentIntoView(segmentId); -} - - function highlightSegment(segmentId, className) { - var elements = segmentIdToSigCache[segmentId]; - if (!elements) { - if (initialized) notifyNavigationFailure(segmentId); - return; - } + // if the segment cannot be highlighted on the preview: + reportError("CannotNavigateToSegment"); + }); - for (var i = 0; i < elements.length; i++) { - var sig = elements[i]; - sig.setAttribute("class", className); - } -} + window.addEventListener(UE_UPDATE_SEGMENT, function(event) { + // the id of the segment being updated + var segmentId = event.detail.segmentId; - function clearSegmentHighlight(segmentId) { - if (!segmentId) return; + // the string (html snippet) returned by the segment updater + var segmentSnippet = event.detail.snippet; - var elements = segmentIdToSigCache[segmentId]; - if (!elements) return; + /* the contents of the corresponding page element can be changed + * here according to the snippet + */ - for (var i = 0; i < elements.length; i++) { - var sig = elements[i]; - sig.setAttribute("class", ""); - } + // if the update cannot be done: + reportError("PreviewCannotUpdate"); + }); } - function scrollSegmentIntoView(segmentId) { - var elements = segmentIdToSigCache[segmentId]; - if (!elements) return; +function reportError(type) { + // types currently being used are "CannotNavigateToSegment" and "PreviewCannotUpdate" + // TBD if we can support custom messages being sent in the detail attribute here - scrollIntoViewIfNeeded(elements[0]); + window.dispatchEvent(new CustomEvent( + PREVIEW_SHOW_MESSAGE, + { detail: type } + )); } - function scrollIntoViewIfNeeded(element) { - if (!element) return; - - var bottomLimit = Math.min( - document.documentElement.clientHeight, - document.body.clientHeight - ); - var rect = element.getBoundingClientRect(); - - var overTop = rect.top < 0; - var overBottom = rect.top + rect.height > bottomLimit; +function somethingWasClicked() { + // can be handler of onclick on page elements corresponding to segments - if (overTop || overBottom) { - element.scrollIntoView({ block: "center", inline: "center" }); - } -} + var previousSelection = "..."; + var segmentId = "..."; - //Finds y value of given object - function findPos(obj) { - var curtop = 0; - if (obj.offsetParent) { - do { - curtop += obj.offsetTop; - } while ((obj = obj.offsetParent)); - return [curtop]; + if (segmentId !== previousSelection) { + window.dispatchEvent(new CustomEvent( + PREVIEW_SEGMENT_SELECTED, + { detail: segmentId } // this informs the editor which segment it should navigate to + )); } - - return [curtop]; -} - - // others ---------------------------------------------------------------------- - - function onLoad() { - var sigs = document.getElementsByTagName("sig"); - segmentIdToSigCache = {}; - - for (var i = 0; i < sigs.length; ++i) { - var current = sigs[i]; - var id = current.getAttribute("data-segment-id"); - - if (id) { - current.onclick = onSigClick; - current.onmouseover = onSigMouseOver; - current.onmouseout = onSigMouseOut; - - if (segmentIdToSigCache[id]) { - segmentIdToSigCache[id].push(current); - } else { - segmentIdToSigCache[id] = [current]; - } - } - } - - if (selectedSegmentId) setActiveSegment(selectedSegmentId); - - notifyPreviewControlToApplyInitialSelection(); - - initialized = true; -} - function onSigClick() { - var id = this.getAttribute("data-segment-id"); - setActiveSegment(id); - onSegmentSelectedInPreview(id); -} - - function onSigMouseOver() { - var id = this.getAttribute("data-segment-id"); - if (id !== selectedSegmentId) highlightSegment(id, "highlighted"); } +``` - function onSigMouseOut() { - var id = this.getAttribute("data-segment-id"); - if (id !== selectedSegmentId) clearSegmentHighlight(id); -} +For dynamic previews, a more comprehensive Javascript API is available that handles communication via postMessage between the iframe and the Online Editor. This includes: +- Navigation between segments +- Segment updates with translation changes +- Error messaging +- Scroll synchronization for side-by-side preview +- Segment highlighting and selection +### Session Management and Tenant Separation +It is up to the app to manage any session state internally and have an expiry mechanism for this. +Also, any data which is tenant specific needs to be kept separate from any other data and the app also needs to manage tenant separation concerns internally. - // entry point - window.addEventListener("message", function (event) { - switch(event.data.eventName) { - case UE_SEGMENT_SELECTED: - onSegmentSelectedInEditor(event.data.payload); - break; - case UE_UPDATE_SEGMENT: - onUpdateSegmentWithTranslation(event.data.payload); - break; - default: - console.log("No handler for event: ", event.data.eventName); - } -}); - document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file +### Input Files +The preview provider works with various types of input files: +- **PreviewPackageTemplate** - a zip package containing content used in preview generation (XML, HTML, images, CSS, XSLT, Javascript etc.) +- **Native File** - the native format being translated or previewed (Word, Excel, XML documents etc.) +- **Annotated Native File** - a native file annotated with special characters encoding segment identifiers and boundaries + +### Dynamic Preview Concepts (for outputType: "previewUrl") +When implementing dynamic previews: +- The app acts as a web server implementing custom endpoints +- TLS (Transport Layer Security) must be enabled on all custom endpoints +- Authorization via hard-to-guess access tokens with TTL support +- Content can be dynamically updated based on user selections +- Support for different renderings or views of the same BCM document content + +The URL format for dynamic preview endpoints: +``` +https://my.extension/custom-endpoint?sessionId={sessionId}&tenant={tenantId}&accessToken={hard-to-guess-access-token}&page={pageId} +``` \ No newline at end of file diff --git a/articles/Extensibility/docs/development/Tehnical-Requirements-And-Best-Practices.md b/articles/Extensibility/docs/development/Tehnical-Requirements-And-Best-Practices.md new file mode 100644 index 0000000..0f1e89f --- /dev/null +++ b/articles/Extensibility/docs/development/Tehnical-Requirements-And-Best-Practices.md @@ -0,0 +1,70 @@ +# Technical Requirements And Best Practices + +## Technical requirements for Apps + +Most technical requirements are driven by the app's developer. For example, CPU/Memory requirements should be decided by the developer after taking into consideration the particular functionality of the app and its expected load. + +For reference, a typical machine translation app built on the .NET Core Blueprint, which adapts a third party translation engine, with 250,000 transactions per month, only requires very minimal hardware resources, with 0.1 CPU and 500 MB RAM. + +But there are certain aspects that still need to be covered to ensure secure and resilient operations. + +## Framework + +Apps can be developed using any framework, but we provide two blueprints to help you get started: one for .NET Core 8 and the other for Java. + +## Redundancy + +A load balanced, two instance deployment is recommended to ensure there are no interruptions in operation in case of failures, or more importantly, no downtime when a new version is deployed (by using rolling deployments). + +This recommended setup can be easily achieved if the application is deployed on a cloud platform. + +## Security +All communication should be secured against interfering and eavesdropping. This includes the communication between the Trados platform and the App, and also between the app and the resources it uses: third party Machine Translation Engines, databases and other resources. + +Trados uses two mechanisms to secure the apps communication: +- HTTPS support is mandatory, and Trados will not communicate with the app over an unsecured HTTP channel, or via a channel with expired or invalid certificates. +- The app can also validate that the caller is indeed Trados, by verifying the signature in each call with the [Public Key](https://languagecloud.sdl.com/lc/api-docs/8c6f7b35af0ea-list-public-keys) available from Trados on an HTTPS endpoint. + +An additional security mechanism used by Trados is signing the request body. This provides an extra layer of validation, but it can also be used in case the application gets compromised, and an analysis is required to identify which messages are authentic and which aren't. For that, all incoming messages need to be logged or audited in some form. + +By following these guidelines, app developers can ensure that their code is secure and resistant to attacks, protecting sensitive data and maintaining the confidentiality, integrity, and availability of their applications, while also staying aware of and addressing any potential vulnerabilities in their dependencies: + +- Input Validation: Always validate user inputs to ensure they are within the expected range and format. This helps to prevent injection attacks such as SQL injection or Cross-Site Scripting (XSS). +- Secure Configuration: Configure your app securely by avoiding default settings and keeping all passwords and sensitive information out of code. +- Secure Coding Practices: Follow secure coding practices such as avoiding hardcoded passwords, using secure coding patterns and libraries, and avoiding dynamic code execution. +- Access Control: Ensure that access controls are in place to prevent unauthorized access to sensitive data or functions within the application. +- Error Handling: Implement proper error handling to prevent sensitive information from being exposed to attackers. +- Manage Vulnerable Dependencies: Keep track of the dependencies used in your application and regularly check for any known vulnerabilities in those dependencies. Update to the latest version of the dependency as soon as possible to reduce the risk of exploitation. + +## Logging + +Logging is required for tracking the flow of operations and for debugging any possible issues. Logging is already set up for both blueprints, but you need to adjust the template of the logs and their destinations. + +Important components in the logs, already present in the blueprints, include: +- timestamp - this should have a timezone, to avoid any confusion of whether it's local time or UTC. +- trace id - each request sent from Trados contains a trace id which can be used to track a complete flow. This is also propagated in the code from the moment a request is performed until a response is returned. +- thread id +- host/node name - this depends on your infrastructure setup, and we recommend having it logged, especially if you have more than one instance running. +- account id +- message - an informative description of what is happening +- error and stack trace + +Do not log sensitive information in the logs, like personal identification information, API keys, incoming authentication details or signatures. + +## Metrics + +Metrics help answer questions like: +- Usage - how many/how much? +- Hardware requirements - are the currently allocated resources enough? Do we need to scale up or can we scale down to save on running costs? + +This is not a strict requirement, but it is strongly recommended to have some form of metrics set up. This should be set up in such a way to enable you to: +- Track the number of failed request/errors. +- Track the total number of transactions. +- Track the timing of the transactions/requests (this can be addressed by various metrics like `max`, `min`, `median`, `percentile`). +- Monitor CPU and Memory utilization. This should be used to correlate transactions with resource usage. + +## Error Responses + +It's important to follow the specification for the endpoints when it comes to returning error responses. Each endpoint defines a set of expected error responses and the error response model. Implementing the contract correctly allows Trados to parse the response correctly and, in some situations, to handle the error and make decisions on it. + +Endpoints can have a set of predefined error codes that Trados can interpret. One such example would be the `invalidConfiguration`. Error responses can even pinpoint further the source of the problem, in the `details` array that might indicate, for example, the actual field with the incorrect value, along with a corresponding code, for example, `invalidValue` or `nullValue`. \ No newline at end of file diff --git a/articles/Extensibility/docs/development/UI-App-custom-elements-locations.md b/articles/Extensibility/docs/development/UI-App-custom-elements-locations.md index 8b141e9..b0a5e82 100644 --- a/articles/Extensibility/docs/development/UI-App-custom-elements-locations.md +++ b/articles/Extensibility/docs/development/UI-App-custom-elements-locations.md @@ -6,7 +6,7 @@ tags: [Development] # Custom Elements and Locations The platform supports the addition of various UI elements, including **buttons** (generic, link, and dropdown) and **panels** (generic, sidebar, and tab). -These elements can be incorporated into specific sections of the user interface in the **Inbox** and **Projects** areas. +These elements can be incorporated into specific sections of the user interface in the **Inbox, Orders, Projects and Reports** areas. @@ -21,7 +21,17 @@ These elements can be incorporated into specific sections of the user interface - + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + +
InboxInboxTasks list + tasks-list-tabpanel + tasks-list-tabpanel location + tab
New tasks list new-tasks-list-sidebar @@ -135,8 +145,28 @@ These elements can be incorporated into specific sections of the user interface
ProjectsProjects listOrdersOrders list + orders-list-tabpanel + orders-list-tabpanel location + tab
ProjectsProjects list + projects-list-tabpanel + projects-list-tabpanel location + tab
projects-list-toolbar projects-list-toolbar location @@ -236,6 +266,17 @@ These elements can be incorporated into specific sections of the user interface projectDetailsActiveTab, projectDetails, projectTaskHistory
ReportsReports list + reports-list-tabpanel + reports-list-tabpanel location + tab
diff --git a/articles/Extensibility/docs/development/UI-App-development-guide.md b/articles/Extensibility/docs/development/UI-App-development-guide.md index 25e991d..95447bd 100644 --- a/articles/Extensibility/docs/development/UI-App-development-guide.md +++ b/articles/Extensibility/docs/development/UI-App-development-guide.md @@ -50,7 +50,7 @@ If you don't already have Node.js installed, you can download the most recent LT ### Dependencies -- [@trados/trados-ui-extensibility](https://www.npmjs.com/package/@trados/trados-ui-extensibility) v0.1.4 +- [@trados/trados-ui-extensibility](https://www.npmjs.com/package/@trados/trados-ui-extensibility) v0.1.5 - [GitHub repository](https://github.com/RWS/trados-ui-extensibility) - [GitHub wiki](https://github.com/RWS/trados-ui-extensibility/wiki) diff --git a/articles/Extensibility/docs/development/Verification-App-development-guide.md b/articles/Extensibility/docs/development/Verification-App-development-guide.md index 6b41ea4..3019d2f 100644 --- a/articles/Extensibility/docs/development/Verification-App-development-guide.md +++ b/articles/Extensibility/docs/development/Verification-App-development-guide.md @@ -1,28 +1,31 @@ --- -stoplight-id: 0rl7inhtg6utq +stoplight-id: 9r7ku59767q11 --- # Verification Provider ## Overview + Trados provides verification functionality on translatable content (source and/or target) in several ways: + - Batch Verification Task (set in project workflows) - Editor Document Verification Task - Editor Segment-level Verification operation + The first two verification tasks validate the whole document, whereas the last operation, validates a single segment. For document validation, native verification is also possible. This allows for validation of a native file or a native annotated file. The difference between an annotated file and a non-annotated file is that the first allows for the generation of location information and the second does not. For native verification, a verification resource package may also be retrieved by the extension. This would contain ancillary files such as schemas, for example, in the case of XML validation. Trados supports a set of internal verifiers which are fixed in nature and the user can decide, through settings, what will be verified using these. Some of them are, for example: + - QA Checker - Tag Verifier + To allow for extending of the verification functionality, Trados supports the creation of extensible or external verifiers. These are hosted in apps which are essentially a self-contained serviced offering the verification functionality. Extensible verifiers would normally only support a small set of verification types, such as a target segment length check (against the length of the source) for example, or perhaps, a punctuation checker. -Each verifier will generate a set of error or warning messages based on the type of validation they perform. The user can change validation settings in the LC UI Project Settings which will affect how or when the messages are generated. External verifiers also have the option to specify resource packages in the settings which will allow the user to upload support files required during the validation process. This option is verifier specific as not all verifiers might require a package. - There are 2 types of verification which are supported by extensibility: - Bilingual Document Verification - Native File Verification @@ -31,6 +34,8 @@ There are 2 types of verification which are supported by extensibility: Native File Verification validates the native source or target file. This file might also be annotated to allow for the easy determination of segment identifiers. An example of native file verification would be schema validation on an XML file. The aim of native verification is to establish if the translation process has broken any of the document structure and rendered an invalid document. +Each verifier will generate a set of error or warning messages based on the type of validation they perform. The user can change validation settings in the LC UI Project Settings which will affect how or when the messages are generated. External verifiers also have the option to specify resource packages in the settings which will allow the user to upload support files required during the validation process. This option is verifier specific as not all verifiers might require a package. + The user can see generated verification messages in the Editor UI and can choose to ignore certain messages by message type or individually, depending on their needs. They can subsequently un-ignore them at a later stage if desired. Verifiers may also provide localized messages which can be displayed in the same language the Editor UI is presenting in. @@ -40,9 +45,7 @@ Flows: ![Verification Flow 2](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/extensibility/verification-flow2.png?raw=true) - - -#### Notes on the above Flow Diagrams +#### Notes on the Flow Diagrams The ***StartVerification*** request initiates the background job on the extension. The background job will be responsible for generating the verification messages. @@ -57,21 +60,16 @@ The app receives a VerifyDocument request from Trados. The request specifies cer These resources are downloaded to the app via the Trados Cloud Platform API and can be stored locally during the verification operation. -When the request is received, the app responds with 201(Created) and starts a background job which will generate the verification messages. For each verification error or warning the app creates, it needs to send this back to Trados via the Trados Cloud Platform API. These messages may grouped into batches to minimize chatty behaviour between the app and the Trados Cloud Platform API. +When the request is received, the app responds with 201(Created) and starts a background job which will generate the verification messages. For each verification error or warning the app creates, it needs to send this back to Trados via the Trados Cloud Platform API. These messages may be grouped into batches to minimize chatty behavior between the app and the Trados Cloud Platform API. The app may also receive a request to verify a single segment. All interactions between the app and Trados Cloud Platform API are via REST calls. -## APIs -The extensible verifier API consists of a number of endpoints - an overview of their purpose is given here - there are currently two versions of the API - +### API Overview +The extensible verifier API consists of a number of endpoints - an overview of their purpose is given here: -### API V1 - -A verification extension defines the following in its descriptor - and specific details are shown below which are defined inside the `extensions` array +A verification extension defines the following in its descriptor: ```json -... -"extensions": [ { "extensionPointId": "lc.verificationprovider", "id": "string", @@ -88,7 +86,6 @@ A verification extension defines the following in its descriptor - and specific "validationInputType": "string", } } -] ``` The extensionPointId must always be ***"lc.verificationprovider"*** @@ -100,90 +97,11 @@ The validationInputType defines which type of validation will happen based on th The respective download URL(s) will be provided in the *StartVerification* request and the extension must download and store these resources as required. -The endpoints for V1 are: - -VerifyDocument: -```html -POST /v1/verify/document -``` -VerifySegment: -```html -POST /v1/verify/segment -``` -GetMessagesByCulture: -```html -GET /v1/messages -``` -GetSettingsSchema: -```html -GET /v1/schemas -``` - -### API V2 -The only difference between the V1 and V2 APIs is in the descriptor where the validationInputType has changed its name to validationInputFiles and its type to an array of strings in addition to versioning and the addition of the validatorType and supportedFileTypes fields - -```json -... -"extensions": [ -{ - "extensionPointId": "lc.verificationprovider", - "id": "string", - "name": "string", - "description": "string", - "extensionPointVersion": "2.0", - "configuration": { - "endpoints": { - "lc.verification.startverification.v2": "string", - "lc.verification.verifysegment.v2": "string", - "lc.verification.getmessagesbyculture.v2": "string", - "lc.verification.getsettingsschema.v2": "string" - }, - "validationInputFiles": ["string"], - "validatorType": "string", - "supportedFileTypes": ["string"]} - } -] -``` -The extensionPointId must always be `lc.verificationprovider` - -The `validationInputFiles` defines which files should be provided for the validation and can be one or more of the following, having unique entries in the array - NativeSource and NativeTarget are mutually exclusive selections: -- BilingualDocument -- NativeSource -- NativeTarget -- NativeAnnotatedTarget - -The `validatorType` defines which type of validator should be used. It can be one of the following: -- BilingualDocumentValidator -- NativeSourceValidator -- NativeTargetValidator -- NativeAnnotatedTargetValidator - -The `supportedFileTypes` field defines an array of FileTypeDefinitionIds to which this validator may be assigned to. - -The respective download URL(s) will be provided in the *StartVerification* request and the extension must download and store these resources as required. - -The endpoints for V2 are: - -VerifyDocument: -```html -POST /v2/verify/document -``` -VerifySegment: -```html -POST /v2/verify/segment -``` -GetMessagesByCulture: -```html -GET /v2/messages -``` -GetSettingsSchema: -```html -GET /v2/schemas -``` - - - -### API V1 and V2 Common +- `endpoints` - the required endpoints for the verification extension, should be relative to your `baseUrl`. + - `lc.verification.startverification` - the endpoint used to start the verification operation. For ex: `/verify/document`. + - `lc.verification.verifysegment` - the endpoint used to verify a single segment. For ex: `/verify/segment`. + - `lc.verification.getmessagesbyculture` - the endpoint used to retrieve localized messages. For ex: `/messages`. + - `lc.verification.getsettingsschema` - the endpoint used to retrieve the settings schema. For ex: `/schemas`. There are four endpoints which the extension supports: @@ -197,7 +115,12 @@ There are described in a little more detail here: ##### StartVerification This endpoint is called by Trados to initiate the document verification operation. Generally, a background job is started when this call is made and it returns 201(Created) The background job then prepares batches of verification messages which it then publishes to Trados via the Trados Cloud Platform API using the PublishMessages endpoint URL which is provided in the initial StartVerification request. Please see the API documentation for more details: -[StartVerification](../../App-API.v1.json/paths/~1lc.verification.startverification.v2~1{requestId}/post) +[StartVerification](../../App-API.v1.json/paths/~1lc.verification.startverification~1{requestId}/post) + +Example: +```html +POST https://your-app.com/verify/document +``` The request for StartVerification is shown below: @@ -304,11 +227,14 @@ Each message contains the following fields: `messageLocation` - the offsets within the segment representing the error span - - ##### VerifySegment This endpoint is called by Trados to validate an individual segment. This endpoint responds with a collection of messages which relate to any issues found for this segment. Please see the API documentation for more details: -[VerifySegment](../../App-API.v1.json/paths/~1lc.verification.verifysegment.v2/post) +[VerifySegment](../../App-API.v1.json/paths/~1lc.verification.verifysegment/post) + +Example: +```html +POST https://your-app.com/verify/segment +``` The request is structured as follows: @@ -341,11 +267,21 @@ The request is structured as follows: ##### GetMessagesByCulture This endpoint is called by Trados to retrieve localized resources for the messages. The culture is specified in the call as a URL parameter. The app can support localized resources for various languages which will allow the messages to be displayed in the native language of the user in the UI. Please see the API documentation for more details: -[GetMessagesByCulture](../../App-API.v1.json/paths/~1lc.verification.getmessagesbyculture.v2~1{culture}/get) +[GetMessagesByCulture](../../App-API.v1.json/paths/~1lc.verification.getmessagesbyculture~1{culture}/get) + +Example: +```html +GET https://your-app.com/messages/es-ES +``` ##### GetSettingsSchema -This endpoint is called by Trados to retrieve the schema related to any settings which the extension supports. **A note on schemas - once you define your settings schema for the extension, it should only be modified in a backwards compatible way, i.e. only adding of additional fields is allowed, not removing or renaming existing fields.** Please see the API documentation for more details: -[GetSettingsSchema](../../App-API.v1.json/paths/~1lc.verification.getsettingsschema.v2/get) +This endpoint is called by Trados to retrieve the schema related to any settings which the extension supports. **A note on schemas - once you define your settings schema for the extension, it should only be modified in a backwards compatible way, i.e. only adding of extra fields is allowed, not removing or renaming existing fields.** Please see the API documentation for more details: +[GetSettingsSchema](../../App-API.v1.json/paths/~1lc.verification.getsettingsschema/get) + +Example: +```html +GET https://your-app.com/schemas +``` An example schema is shown below: ```json @@ -362,6 +298,7 @@ An example schema is shown below: }, "verificationResourcePackage": { "type": "object", + "properties": { "platformSettingType": { "type": "string", "enum": [ diff --git a/articles/Extensibility/docs/development/Webhooks.md b/articles/Extensibility/docs/development/Webhooks.md index 775f56b..cd5c759 100644 --- a/articles/Extensibility/docs/development/Webhooks.md +++ b/articles/Extensibility/docs/development/Webhooks.md @@ -11,13 +11,16 @@ Apps can specify a list of webhooks that will be registered automatically when t Not all accounts have webhooks enabled. Installing of the app requiring webhooks will be disabled (grayed out in UI) on accounts that don't have webhooks enabled. + +> Webhooks require one of the following [scopes](./Trados-Cloud-API.md#scopes) to be delivered: `TENANT` or `TENANT_READ`. + ## Setup The required list of webhooks must be specified in the descriptor in the `webhooks` property. `webhooks` is an array of URLs and corresponding event types. You can specify a single URL for all webhook event types, or one URL for each event type, or any combination. This is done for maximum flexibility so you can decide if you want to ingest all webhooks through a single endpoint or have multiple endpoints maybe by event type or category, etc. -`url` can be an absolute URL or a path relative to `basePath`. +`url` can be an absolute URL or a path relative to `basePath`. Example of a `webhooks` property in the app descriptor: ```json @@ -26,7 +29,14 @@ Example of a `webhooks` property in the app descriptor: "webhooks": [ { "url": "/webhooks-endpoint", - "events": ["PROJECT.TASK.ACCEPTED", "PROJECT.TASK.CREATED"] + "evenTypes": [ + { + "eventType": "PROJECT.TASK.ACCEPTED" + }, + { + "eventType": "PROJECT.TASK.CREATED" + } + ] } ] ... From ad4fd96297d7771fa1443ec97c1beba0caf3cfc4 Mon Sep 17 00:00:00 2001 From: Mihai Dipsan Date: Tue, 4 Nov 2025 15:34:23 +0200 Subject: [PATCH 11/19] Update extensibility doc links to contract --- articles/Extensibility/docs/Whats-New.md | 10 +++++----- .../Extensibility/docs/appManagement/Installing.md | 4 ++-- .../Extensibility/docs/appManagement/Registering.md | 4 ++-- articles/Extensibility/docs/appManagement/Updating.md | 2 +- .../Extensibility/docs/development/App-Descriptor.md | 4 ++-- .../Extensibility/docs/development/App-Versioning.md | 4 ++-- .../Automatic-Task-App-development-guide.md | 6 +++--- .../docs/development/MT-App-development-guide.md | 6 +++--- .../Extensibility/docs/development/Multi-Region.md | 4 ++-- .../docs/development/Preview-App-development-guide.md | 10 +++++----- .../Extensibility/docs/development/Trados-Cloud-API.md | 4 ++-- .../docs/development/UI-App-development-guide.md | 6 +++--- .../development/Verification-App-development-guide.md | 8 ++++---- 13 files changed, 36 insertions(+), 36 deletions(-) diff --git a/articles/Extensibility/docs/Whats-New.md b/articles/Extensibility/docs/Whats-New.md index 4c0fb16..48a70bf 100644 --- a/articles/Extensibility/docs/Whats-New.md +++ b/articles/Extensibility/docs/Whats-New.md @@ -10,7 +10,7 @@ ## April 2025 -- To facilitate the management of large translation requests, batching support has been added for MT provider apps. This update includes the introduction of a new parameter, `extensions.configuration.segmentBatchSize`, which can be added to your [descriptor](../App-API.v1.json/paths/~1descriptor/get), along with a new error response featuring status code [413](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/413) on the translation [endpoint](../App-API.v1.json/paths/~1lc.mtprovider.translate/post). +- To facilitate the management of large translation requests, batching support has been added for MT provider apps. This update includes the introduction of a new parameter, `extensions.configuration.segmentBatchSize`, which can be added to your [descriptor](../api/Extensibility-API.v1-fv.html#/operations/descriptor), along with a new error response featuring status code [413](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/413) on the translation [endpoint](../api/Extensibility-API.v1-fv.html#/operations/MachineTranslationProviderTranslateBCM). - A new option has been introduced on the app registration [page](../docs/appManagement/Registering.md), allowing users to designate their app for development purposes by selecting a checkbox. ## December 2024 @@ -25,7 +25,7 @@ - With this release we deliver a new extension point designed to allow developers to extend and customize the UI elements of our platform. This extension point is being released as BETA. For more details see this [page](../docs/development/UI-App-development-guide.md). - We unified the Preview documentation pages into a single comprehensive [page](../docs/development/Preview-App-development-guide.md). We have introduced a new version, known as V2, of our Preview APIs. - We extended the information available under Verification Provider [page](../docs/development/Verification-App-development-guide.md). We have introduced a new version, known as V2, of our Verification APIs. -- You can now add comments to [Submit Task Outcome](../App-API.v1.json/paths/~1external-job~1v1~1callback/post) for the automatic task extensions. +- You can now add comments to [Submit Task Outcome](../api/Extensibility-API.v1-fv.html#/operations/automatiktasktypecallback) for the automatic task extensions. ## June 2024 - With this release, we have migrated from the Add-Ons concept to Apps. This significant first step sets the stage for expanding this concept to multiple areas that facilitate integrations. @@ -38,12 +38,12 @@ ## August 2023 -- With this release we introduced a folder identifier where the translation engines will be added. This can be used to filter the [engines](../App-API.v1.json/paths/~1lc.mtprovider.engines/get) by folder. +- With this release we introduced a folder identifier where the translation engines will be added. This can be used to filter the [engines](../api/Extensibility-API.v1-fv.html#/operations/GetMachineTranslationProviderEngines) by folder. - We also added recommendations on [best practices](../docs/development/Tehnical-Requirements-And-Best-Practices.md) for a secure application development. - We made additional smaller improvements and corrections to our documentation. ## April 2023 -- We added details for the `engineId`, `projectId`, `sourceFileId` and `targetFileId` parameters of the [Translate](../App-API.v1.json/paths/~1lc.mtprovider.translate/post) endpoint. +- We added details for the `engineId`, `projectId`, `sourceFileId` and `targetFileId` parameters of the [Translate](../api/Extensibility-API.v1-fv.html#/operations/MachineTranslationProviderTranslateBCM) endpoint. - We updated the [Registering the app](../docs/appManagement/Registering.md) page. @@ -51,7 +51,7 @@ - We introduced requirements that become mandatory for all future apps, namely: acceptance of Terms & Conditions and the Privacy Policy, along with the provisioning of the app's release notes, documentation link and the developer's contact details, starting with descriptor version `1.3`. - We published newer blueprints for both Java and .NET. - We made available headers for developers to implement custom functionality based on the current version of the installed apps: `appVersion`, `extensionPointVersion` and `extensionId`. -- Added `projectId`, `sourceFileId` and `targetFileId` on the [translate](../App-API.v1.json/paths/~1lc.mtprovider.translate/post) request. +- Added `projectId`, `sourceFileId` and `targetFileId` on the [translate](../api/Extensibility-API.v1-fv.html#/operations/MachineTranslationProviderTranslateBCM) request. ## January 2023 - We published new pages with our recommendations for implementing Dynamic Preview. diff --git a/articles/Extensibility/docs/appManagement/Installing.md b/articles/Extensibility/docs/appManagement/Installing.md index dc40d35..c258bd8 100644 --- a/articles/Extensibility/docs/appManagement/Installing.md +++ b/articles/Extensibility/docs/appManagement/Installing.md @@ -9,7 +9,7 @@ After the app is successfully registered, you can proceed to install it. The ins To install the app you need to: 1. Find your app in the **My Apps** tab and select the **Install** button. -2. When prompted with a form containing placeholders for the account settings details, remember that these are the configuration settings exposed through the [descriptor](../../App-API.v1.json/paths/~1descriptor/get). All mandatory fields will be marked with '*'. +2. When prompted with a form containing placeholders for the account settings details, remember that these are the configuration settings exposed through the [descriptor](../../api/Extensibility-API.v1-fv.html#/operations/descriptor). All mandatory fields will be marked with '*'. 3. Pay attention if the app advertises any [scopes](../../docs/development/Authentication-Overview.md), you will be notified by the installation form. > The `baseUrl` in your app should stay fixed and not change based on region. When an App is registered, `baseUrl` from that initial descriptor is used for setting audience for all future authentication requests, independent of regions (it is possible to change it later, see [Changing Base URL](App-Descriptor.md#changing-base-url). diff --git a/articles/Extensibility/docs/development/Preview-App-development-guide.md b/articles/Extensibility/docs/development/Preview-App-development-guide.md index 0f32b31..49bc2a7 100644 --- a/articles/Extensibility/docs/development/Preview-App-development-guide.md +++ b/articles/Extensibility/docs/development/Preview-App-development-guide.md @@ -16,7 +16,7 @@ To build a new preview app we recommend to start by using the provided [app blue ## Preview App Extension -A preview app needs to define at least one preview extension within its [descriptor](../../App-API.v1.json/paths/~1descriptor/get). +A preview app needs to define at least one preview extension within its [descriptor](../../api/Extensibility-API.v1-fv.html#/operations/descriptor). For example: ```json @@ -153,7 +153,7 @@ This endpoint is used to initiate a preview session on the app. When this endpoi This should be the first endpoint called for any given session - if another endpoint is called for a given session ID before this one, an error should be returned. -Please refer to the endpoint's [documentation](../../App-API.v1.json/paths/~1lc.preview.startpreview/post) for further details. +Please refer to the endpoint's [documentation](../../api/Extensibility-API.v1-fv.html#/operations/StartPreview) for further details. #### RefreshPreview The _refreshPreview_ endpoint refreshes an existing preview. The mechanism for this in entirely up to the Extension implementation in that it might keep state from the initial preview generation from _startPreview_ in order to speed up the refresh. @@ -168,7 +168,7 @@ POST https://your-app.com/refresh-preview Endpoint usage: This endpoint is called when a preview refresh is requested by the user. Any state the app holds from the initial preview generation may be used to speed up the refresh. -Please refer to the endpoint's [documentation](../../App-API.v1.json/paths/~1lc.preview.refreshpreview/put) for further details. +Please refer to the endpoint's [documentation](../../api/Extensibility-API.v1-fv.html#/operations/RefreshPreview) for further details. #### UpdateSegment The _updateSegment_ endpoint accepts a list of BCM document fragments along with their associated segment IDs. The Extension will generate and return an HTML rendered fragment for each BCM document fragment sent in this manner. @@ -226,7 +226,7 @@ POST https://your-app.com/update-segment Endpoint usage: This endpoint is called when the user is updating one or more segments in the Editor. For each segment, the extension will render an equivalent HTML fragment based on the input BCM document fragment. -Please refer to the endpoint's [documentation](../../App-API.v1.json/paths/~1lc.preview.updatesegment/post) for further details. +Please refer to the endpoint's [documentation](../../api/Extensibility-API.v1-fv.html#/operations/UpdateSegment) for further details. #### EndPreview The _endPreview_ endpoint is called when a given preview session associated with the previewSessionId is finished. This is called so that the app may perform any required cleanup. @@ -245,7 +245,7 @@ POST https://your-app.com/end-preview Endpoint usage: Called to indicate a preview session has terminated. Any required cleanup should be performed by the app. -Please refer to the endpoint's [documentation](../../App-API.v1.json/paths/~1lc.preview.endpreview/post) for further details. +Please refer to the endpoint's [documentation](../../api/Extensibility-API.v1-fv.html#/operations/EndPreview) for further details. ### Javascript Communication Protocol diff --git a/articles/Extensibility/docs/development/Trados-Cloud-API.md b/articles/Extensibility/docs/development/Trados-Cloud-API.md index 0652eb8..4e6b403 100644 --- a/articles/Extensibility/docs/development/Trados-Cloud-API.md +++ b/articles/Extensibility/docs/development/Trados-Cloud-API.md @@ -8,7 +8,7 @@ Communication to Trados Cloud Platform API is also authenticated and the process ## Credentials -When an app is registered, credentials (`clientId` and `clientSecret`) are sent to the app with the `REGISTERED` lifecycle event on the [App Lifecycle endpoint](../../App-API.v1.json/paths/~1app-lifecycle/post). +When an app is registered, credentials (`clientId` and `clientSecret`) are sent to the app with the `REGISTERED` lifecycle event on the [App Lifecycle endpoint](../../api/Extensibility-API.v1-fv.html#/operations/Lifecycle). An example payload: @@ -27,7 +27,7 @@ An example payload: Here `clientId` and `clientSecret` represent the credentials for the Trados Cloud Platform API and can be used for getting a token for communicating with the Trados Cloud Platform API, as described by the [Trados Cloud Platform API documentation](https://languagecloud.sdl.com/lc/api-docs/ZG9jOjExMDcyMQ-authentication). -When an app is installed on an account, a service user will be created in Trados and an event will be sent on the [App Lifecycle endpoint](../../App-API.v1.json/paths/~1app-lifecycle/post) with event `id` being `INSTALLED`. +When an app is installed on an account, a service user will be created in Trados and an event will be sent on the [App Lifecycle endpoint](../../api/Extensibility-API.v1-fv.html#/operations/Lifecycle) with event `id` being `INSTALLED`. Account ID should always be used from the request authentication header token. This is built in in the provided blueprints. diff --git a/articles/Extensibility/docs/development/UI-App-development-guide.md b/articles/Extensibility/docs/development/UI-App-development-guide.md index 95447bd..bc080e4 100644 --- a/articles/Extensibility/docs/development/UI-App-development-guide.md +++ b/articles/Extensibility/docs/development/UI-App-development-guide.md @@ -16,7 +16,7 @@ UI extensions offer the possibility to add custom user interface elements and fu > * A UI extension's JavaScript file will be loaded in an isolated context, independent from Trados. > * The communication model between App UI and Backend will change in the final version and will have to be redesigned. -A UI extension is defined in the app [descriptor](../../App-API.v1.json/paths/\~1descriptor/get) in the `extensions` array. +A UI extension is defined in the app [descriptor](../../api/Extensibility-API.v1-fv.html#/operations/descriptor) in the `extensions` array. ```json { @@ -40,7 +40,7 @@ A UI extension is defined in the app [descriptor](../../App-API.v1.json/paths/\~ The `extensionPointId` is always **"lc.ui"**. -The `configuration`'s `scriptPath` is the path of the JavaScript file which will be loaded in the Trados user interface. The path is relative to the `basePath` in the [descriptor](../../App-API.v1.json/paths/\~1descriptor/get). This JavaScript file contains the code describing the custom elements that will be added to the user interface and their functionality. +The `configuration`'s `scriptPath` is the path of the JavaScript file which will be loaded in the Trados user interface. The path is relative to the `basePath` in the [descriptor](../../api/Extensibility-API.v1-fv.html#/operations/descriptor). This JavaScript file contains the code describing the custom elements that will be added to the user interface and their functionality. ## Prerequisites @@ -85,7 +85,7 @@ If you don't already have Node.js installed, you can download the most recent LT npm run build-dev ``` - - The `build` (or `build-dev`) command will create a `my-ui-extension-script.js` file in `Rws.LC.UISampleApp/Resources/frontend/dist/`. This is the path you need to use in the [descriptor](../../App-API.v1.json/paths/\~1descriptor/get) for your extension's configuration `scriptPath`, for example `Rws.LC.UISampleApp/Resources/frontend/dist/my-ui-extension-script.js`. + - The `build` (or `build-dev`) command will create a `my-ui-extension-script.js` file in `Rws.LC.UISampleApp/Resources/frontend/dist/`. This is the path you need to use in the [descriptor](../../api/Extensibility-API.v1-fv.html#/operations/descriptor) for your extension's configuration `scriptPath`, for example `Rws.LC.UISampleApp/Resources/frontend/dist/my-ui-extension-script.js`. - You can change the `my-ui-extension-script.js` file name by editing - the `module.exports`' `output.filename` property in `Rws.LC.UISampleApp/Resources/frontend/webpack.config.js` and diff --git a/articles/Extensibility/docs/development/Verification-App-development-guide.md b/articles/Extensibility/docs/development/Verification-App-development-guide.md index 3019d2f..b6a79f4 100644 --- a/articles/Extensibility/docs/development/Verification-App-development-guide.md +++ b/articles/Extensibility/docs/development/Verification-App-development-guide.md @@ -115,7 +115,7 @@ There are described in a little more detail here: ##### StartVerification This endpoint is called by Trados to initiate the document verification operation. Generally, a background job is started when this call is made and it returns 201(Created) The background job then prepares batches of verification messages which it then publishes to Trados via the Trados Cloud Platform API using the PublishMessages endpoint URL which is provided in the initial StartVerification request. Please see the API documentation for more details: -[StartVerification](../../App-API.v1.json/paths/~1lc.verification.startverification~1{requestId}/post) +[StartVerification](../../api/Extensibility-API.v1-fv.html#/operations/VerificationProviderStartVerification) Example: ```html @@ -229,7 +229,7 @@ Each message contains the following fields: ##### VerifySegment This endpoint is called by Trados to validate an individual segment. This endpoint responds with a collection of messages which relate to any issues found for this segment. Please see the API documentation for more details: -[VerifySegment](../../App-API.v1.json/paths/~1lc.verification.verifysegment/post) +[VerifySegment](../../api/Extensibility-API.v1-fv.html#/operations/VerificationProviderVerifySegment) Example: ```html @@ -267,7 +267,7 @@ The request is structured as follows: ##### GetMessagesByCulture This endpoint is called by Trados to retrieve localized resources for the messages. The culture is specified in the call as a URL parameter. The app can support localized resources for various languages which will allow the messages to be displayed in the native language of the user in the UI. Please see the API documentation for more details: -[GetMessagesByCulture](../../App-API.v1.json/paths/~1lc.verification.getmessagesbyculture~1{culture}/get) +[GetMessagesByCulture](../../api/Extensibility-API.v1-fv.html#/operations/VerificationProviderGetMessagesByCulture) Example: ```html @@ -276,7 +276,7 @@ GET https://your-app.com/messages/es-ES ##### GetSettingsSchema This endpoint is called by Trados to retrieve the schema related to any settings which the extension supports. **A note on schemas - once you define your settings schema for the extension, it should only be modified in a backwards compatible way, i.e. only adding of extra fields is allowed, not removing or renaming existing fields.** Please see the API documentation for more details: -[GetSettingsSchema](../../App-API.v1.json/paths/~1lc.verification.getsettingsschema/get) +[GetSettingsSchema](../../api/Extensibility-API.v1-fv.html#/operations/VerificationProviderGetSettingsSchema) Example: ```html From 4aa7f8c49432d7fe1439627cfde2c10d59fba537 Mon Sep 17 00:00:00 2001 From: Mihai Dipsan Date: Tue, 4 Nov 2025 15:47:30 +0200 Subject: [PATCH 12/19] Fix old broken linkds --- articles/Extensibility/docs/development/App-Descriptor.md | 2 +- .../docs/development/blueprints/Dot-Net-Migration-Blueprint.md | 2 +- .../docs/development/blueprints/Java-Migration-Blueprint.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/articles/Extensibility/docs/development/App-Descriptor.md b/articles/Extensibility/docs/development/App-Descriptor.md index 50dbe86..4d22ddf 100644 --- a/articles/Extensibility/docs/development/App-Descriptor.md +++ b/articles/Extensibility/docs/development/App-Descriptor.md @@ -90,7 +90,7 @@ Any extension will have the generic set of properties: Read more on how to define the extensions for your app in our development guides: 1. Automatic Task [guide](./Automatic-Task-App-development-guide.md). 2. Machine Translation [guide](./MT-App-development-guide.md). -3. Preview [guide](./Dynamic-Preview-guide.md). +3. Preview [guide](./Preview-App-development-guide.md). ## Configuration diff --git a/articles/Extensibility/docs/development/blueprints/Dot-Net-Migration-Blueprint.md b/articles/Extensibility/docs/development/blueprints/Dot-Net-Migration-Blueprint.md index 6b235b2..e1ee3e3 100644 --- a/articles/Extensibility/docs/development/blueprints/Dot-Net-Migration-Blueprint.md +++ b/articles/Extensibility/docs/development/blueprints/Dot-Net-Migration-Blueprint.md @@ -52,7 +52,7 @@ AppRegistrationEntity appRegistration = await _appRegistrationRepository.GetRegi ClientCredentialsEntity clientCredentials = appRegistration.ClientCredentials; ``` -For more details see the [Trados Cloud Platform API guide](../Language-Cloud-API.md#Credentials). +For more details see the [Trados Cloud Platform API guide](../Trados-Cloud-API.md#credentials). ## Summary diff --git a/articles/Extensibility/docs/development/blueprints/Java-Migration-Blueprint.md b/articles/Extensibility/docs/development/blueprints/Java-Migration-Blueprint.md index 28cce76..d5fe941 100644 --- a/articles/Extensibility/docs/development/blueprints/Java-Migration-Blueprint.md +++ b/articles/Extensibility/docs/development/blueprints/Java-Migration-Blueprint.md @@ -52,7 +52,7 @@ AppRegistration entity = appRegistrationRepository.findFirst(); ClientCredentials clientCredentials = entity.getClientCredentials(); ``` -For more details see the [Trados Cloud Platform API guide](../Language-Cloud-API.md#Credentials). +For more details see the [Trados Cloud Platform API guide](../Trados-Cloud-API.md#credentials). ## Summary From 9454f24fafbd257d491fda92ae67d036b13698c8 Mon Sep 17 00:00:00 2001 From: Mihai Dipsan Date: Tue, 4 Nov 2025 16:11:14 +0200 Subject: [PATCH 13/19] Open extensibility API spec directly in fullscreen --- articles/Extensibility/toc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/articles/Extensibility/toc.yml b/articles/Extensibility/toc.yml index 37e3d1c..90afa12 100644 --- a/articles/Extensibility/toc.yml +++ b/articles/Extensibility/toc.yml @@ -101,4 +101,4 @@ - name: APIs items: - name: Extensibility API - href: api/Extensibility-API.v1.md \ No newline at end of file + href: api/Extensibility-API.v1-fv.html \ No newline at end of file From 13e3d6266cca608cb3144af4343f84edaa69186e Mon Sep 17 00:00:00 2001 From: Mihai Dipsan Date: Tue, 4 Nov 2025 16:57:11 +0200 Subject: [PATCH 14/19] Fix extensibility API internal links --- articles/Extensibility/api/Extensibility-API.v1.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/articles/Extensibility/api/Extensibility-API.v1.json b/articles/Extensibility/api/Extensibility-API.v1.json index 47b2f81..40efbe8 100644 --- a/articles/Extensibility/api/Extensibility-API.v1.json +++ b/articles/Extensibility/api/Extensibility-API.v1.json @@ -871,7 +871,7 @@ } } }, - "description": "This endpoint initiates the preview generation. It initiates an asynchronous background job to generate the preview. The timeout for this request which initiates the background job should be 10 seconds. The Response will be sent on the callbackUrl and not from this request.\n [Callback Response](App-API.v1.json/components/schemas/PreviewProvider.MainResponse)", + "description": "This endpoint initiates the preview generation. It initiates an asynchronous background job to generate the preview. The timeout for this request which initiates the background job should be 10 seconds. The Response will be sent on the callbackUrl and not from this request.\n [Callback Response](#/schemas/PreviewProvider.MainResponse)", "tags": [ "Preview Provider" ], @@ -931,7 +931,7 @@ } } }, - "description": "This endpoint refreshes the preview. This initiates an asynchronous background job to generate the preview. The timeout for this request which initiates the background job should be 10 seconds - the background job might run longer than this. The Response will be sent on the callbackUrl and not from this request. [Callback Response](App-API.v1.json/components/schemas/PreviewProvider.MainResponse)", + "description": "This endpoint refreshes the preview. This initiates an asynchronous background job to generate the preview. The timeout for this request which initiates the background job should be 10 seconds - the background job might run longer than this. The Response will be sent on the callbackUrl and not from this request. [Callback Response](#/schemas/PreviewProvider.MainResponse)", "tags": [ "Preview Provider" ], @@ -1109,7 +1109,7 @@ } } }, - "description": "This endpoint initiates the background job for verification. The background job will push messages back to the Verification Service via a publish message URL and then send an asynchronous response once the job has completed.\nThe response for the callback is given here:\n[CallbackResponse](AddOn-API.v1.json/components/schemas/VerificationProvider.MainResponse)", + "description": "This endpoint initiates the background job for verification. The background job will push messages back to the Verification Service via a publish message URL and then send an asynchronous response once the job has completed.\nThe response for the callback is given here:\n[CallbackResponse](#/schemas/VerificationProvider.MainResponse)", "security": [ { "Trados Cloud Platform JWS Token": [] From 9c998b1040b1177f5bcdeb7a8eff7308ed35c811 Mon Sep 17 00:00:00 2001 From: Mihai Dipsan Date: Wed, 5 Nov 2025 08:28:29 +0200 Subject: [PATCH 15/19] Revert navbar search icon placement and clean up CSS after merge from main --- RWSTemplate/partials/navbar.tmpl.partial | 1 + RWSTemplate/styles/docfx.css | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/RWSTemplate/partials/navbar.tmpl.partial b/RWSTemplate/partials/navbar.tmpl.partial index 995c57a..4f18a57 100644 --- a/RWSTemplate/partials/navbar.tmpl.partial +++ b/RWSTemplate/partials/navbar.tmpl.partial @@ -14,6 +14,7 @@
+
diff --git a/RWSTemplate/styles/docfx.css b/RWSTemplate/styles/docfx.css index e74c39b..ce502ee 100644 --- a/RWSTemplate/styles/docfx.css +++ b/RWSTemplate/styles/docfx.css @@ -785,8 +785,6 @@ body .toc { left: 8px; } - - .toc-filter>.clear-icon { position: absolute; text-align: center; From 55903750f6ca2d2c22d84c90609fbfeae6c360de Mon Sep 17 00:00:00 2001 From: Mihai Dipsan Date: Wed, 5 Nov 2025 08:33:47 +0200 Subject: [PATCH 16/19] Revert favicon --- RWSTemplate/favicon.ico | Bin 894 -> 32988 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/RWSTemplate/favicon.ico b/RWSTemplate/favicon.ico index 5a2d99072fad94d0f9997a0eeca154a7adc12bdb..1356373bb80feb29ae02322b1779c7934aa68964 100644 GIT binary patch literal 32988 zcmeHP33OD~dA<*W!3EpcP7OJYZIZaD7gAQUSu9?_I4qK8=FMmUi+}(F1|$qN2^hhQ zG+IE|WNREJC$ZDCP8>H5!IQBjh`M-u^52rzw-TVKJ27!f}uJ!4_4mmgQ zMmigF!EZ0C?km2ex*y6bzd>SWJr|VsXlF$O)`{g$r+RFuZa=WF@>;)M@lGthhtuP- zK5$l4qv=0>J{-I8n_T78p5>tpgCG1qp%eWM@AqiYo<70OG$5y! z>gGR1n+M)UE5zy@z2#qTo)6f)1(a7!0r+qRe^PyB{I&D9()xiJv`NgPMdCoe=!15b z=N6x%tc9EveTLoOKjU9Ja0V5N2{<;AO|)+74Ih(v*6%3&L8^3pG#N7ZzYh4VOqboW zD_Off8gFCWs@QZZScSBR;!O5A%HyFr6uZ9H(lfwkZqu-D^z zXG&<`vzNX`IlC;^dz4c_m!MByo4A}dU-uw=8F*KSX;Q}<7^9t82Na0!V;%T}9HIu; z8=w;}l2f#NB_6)U^B>ODbU8f7SpH+_s(A0qIgUB~r#Vkh$xRQ@5;2KZgTF;V*^Y)e z^xg)!4tl`ly4Mo?YMxios}l=pJA9HpR ztry+8JQPzR-xdBxBj8taf#pE03k}85Fh;v~Q7^f@GuzYFTlwcT{MGS=mSI=?XZbI> zLjJpDp@#Vn8;SKpgDV%MHyo0PLNsretk`u2%lN?Wd<4PH&N3_H_- z*S{s=xfuA>T;O>C8F(WaPP2RP`*u=pbyE0Q?)Q#eD)n7&bX_Rljqj}g5eoqR^F8!` zxBQ37K`m?pX(Q&D;WWG6Wh-64{7*F2#lGTs+YZ`z&Hc2-Lb+%BMH<_K_d%}z3qC+& z9Qe;b4?vBHhX2$BU1f$f(si0wegpiUdUBR0Bm?Zf9GFlDyAJw3LE9$Q|K-}Rt&XDm zLV0g|uLTV*fMzWVBH@g7&2RI5I}sls0DIo&@{${V%cB<0d!~)@e}4+w_d;B}H|B)W z1C2k8hBeZ?OM2;8pVJFFC_W#MW40eY^dx*#_-Pib^`Y`mq)kHnBMZ1|anvV-AF%?= zm%5g0QG0VFoYAf!_V-G>GQhI``h?~1;igzD`!m7&(Xb<40Pmx%dxp%1pLq_nv0aex z9O!Vl??iqV4pwYEKzWt)!tJ@ze+}hb@4nBJHt!nY2vXBy-nUV`({MAt!sCS23ycY1$grV9wzFJj%_ zI&3!ldTZ?64cc9pOWT664%U0&^E&?DE^!v}Uvt7CPN8BpxlbUcYy@(EhglB7=K|wz z&)z{>hCXNk{^`(nchPcf3uL|(<8J5`cBWep|A+HM&0i&lUOmNijWQ1k8ie|XEdQ4f zx88Q$92wV1PTpt2#+xkH`DNNpV80N=p1j-}GQ<85z8}-Y2Uqt7fACo?;HubyTzCiP z1!ar_*aNVA%0D$P3H`^o@0DxZT5S&e_x-_juCCX7H}JC!2)iLEU&xGJoqG8MzoT+5 z=LjSn@^{g9ZqqSmr^dbh7im*~`->8Pp>V@i{|J2N*k=55JD&fld_hA>>W^U?%l zdoSWMvt8o+ zdu$)%fey*oNk+W`KaaLvg`S^~%vk#GnV($c6m9tq(fkH%gf7+%3d>o@GW#oaIBJ7u zq@iF(a14ie9jtL^cZueo<%)9&$F%zobL5_tt#o!1=I}n)3@2ebwky1?kn6Lc0mr`@ zF5ud6)VI70`B?)W>Te^r_LqGXb72@`1OKN&rtb&l``|lGwu!pW6$lz)H9CGzz$hHE za9H`CfUfMa*`2z(U*;t0c4zrq6+Z08Y$RJ5L+rCpr_D11{a%o@qsX88oRz0ZcmG{q z44~7#V>E8RgDnKn$bt}Gv`SzWuiW0(1Md$Vt>+O@Mn8| ztnzX3_swJE`jn;xTWRanGZCltel$-|!u3&?obE9)=AA%&q|A?EPY>4yUBtZHcy$JC z5ZPGYKKgKhpwA}43%|XzI^I1gGB?5X^t_+yOJAjmuzQTCF_-{9HTR0sE@?zu~Li8f^@e z<@r3;7dZ6hwXs~!e`ekm+C20D#P-c=AvhPXMsrFV-mv3g3mwlFO`kCv1LxnmZ0?rO z+*|0}WBI-S`Qkhr(>hxH8P}Ao))q_rs;;C)+Lnk}{QF!%gU!a^v$_AnjQ?B%@uS=G zWLBn4pRo)vq<<0oIefiUvym zN&SNQqo;3P7)Sn5)zd7~yr#LfJej|!-)q)?yIygt+!q*J_hkOp2Duv+EC0*&EaQ;} zvH|mHV2>OhWnTw0IX+Vm-e?v1qwKuOPk0UDb>%|lcKXVY2cp&;s+`*#=$xZ64`UXS zf-b<=KCX`yME})J+L(E7|Y5I5QJtIH_Wy zoCoWvV~yWD*O=xUqeXspVzT{3dJg&R8-b~kY05g4<$~)`)uCcOusKdS#kn2q`$uZS zifaYp>~M}1VH`W`qW-(+>p6}W=7 z{7x~mF~xHods&|9*|uS~t3Ke%90@F|zA>J*!vEv5m2QdLcF#VrpXf;SXB-Lj0bAA? zy=~P8+r0iPH$6Gnc{oG-`G)W@M*7X~tm?A6>r~9Z80(d10W@M74Tx@bEDy7{RYd-H$Z+_pb51(zvuT<=yo8~;PP;*a}H_bP(p}GAG zw0{^hYL+$vYTDk8RMYCWm0q!Tf$j6XcP~-<(IV{4V4HlcHW%vv*XgL5OU|Q0Uv4z$ zZk!=I^Lc-eQ3uL0*p^vBPYgES_oDW1tcN`!YjNdzr0m?9Gb_UCGO46wpwI69y^Ni4 z+yeW_j$(hfd2L;Ww5#*PTRqxmyGzyo)ZTB5-8gr$?dqyT(hTtd(B}0qg(m(g*Q4G| zg<2Wf?z!)j*HBgGQCDQN8+xW}_d>s`{5*a6oAkyPmxb|lI>tOv*1|2rZ{HChhl>`Rg+ilKj05faln)un=2AIJ$bJXxt%uEM z5$!tc%jvM04jVQVpS!=qB@}0Wt&3BWqO}pvJ(oE5Fk&*h!RNiu13yPy*G|q~nmx;Q z5-aXeI1;s!IJV`_sjA@pr+7S}5Bq?4-|RtJ@@=dMrLTRUm&EiNjSd2fb`I@+cO`5B z-shlu_s8?jX8Ek64DUbe`OZ(ue})hz+IM8dgh56>kcNNf+ z*uTj87}$?qDPG4M>)adO2IyRA;FhrmhXU%b_$N zhbN!y8;KV&+IPmSxMFQ$J+?^fllnl_^wcgj+TeGNVxML+T6@lM7Jg?= zHs<-q7=OL=?J(yL8PD@MU@x<&8ukj>e0l9+y*ys(&wOAv)+^`^UbC9Q{RO-$WgcQd zM@xr2OpgiHyHgQYO&9>&XYitcri zb(PX}buUJER$fBP@*Wprhfd_kp%Zzm!9(qb#y+?J#?CH`=?D6#0Q0+p{Xtcy(T09~ z&?l|!pkt2dgCRGt&u+9+v_6A4>Otghe}!kOZK8%%L;91ZK$-$+3ZyBJra+nkX$qt% zkfuPI0%;1QDUhZ>ngVGGq$!Z5K$-$+3ZyBJra+nkX$qt%kfuPI0%;1QDUhZ>ngVGG Nq$!Z5z+W&0{ujjYW@Z2Y literal 894 zcmZQzU<5(|0R|u`!H~hsz#zuJz@P!dKp_SNAO?xUKmw2f!Z7go*|w{-$|Na7Ze_tstvib&J zaYVepBIwM;3b^{&bD8U0CE;2Kst1}jrIVx91*(M@^*}ANX0mkW2u@G;n33;@-#u_y wNc#Ew8&)|}z%LnAr0QN`2EC2ui From 6ff2b33fea1a83ff9194a0bcbd5853b95d38eec0 Mon Sep 17 00:00:00 2001 From: Mihai Dipsan Date: Wed, 5 Nov 2025 09:36:25 +0200 Subject: [PATCH 17/19] Remove scripts for converting contract and reference links in markdown files --- Requirements.md | 38 -- api/bcm/.manifest | 988 ---------------------------- scripts/convert-contract-links.ps1 | 259 -------- scripts/convert-reference-links.ps1 | 169 ----- 4 files changed, 1454 deletions(-) delete mode 100644 Requirements.md delete mode 100644 api/bcm/.manifest delete mode 100644 scripts/convert-contract-links.ps1 delete mode 100644 scripts/convert-reference-links.ps1 diff --git a/Requirements.md b/Requirements.md deleted file mode 100644 index e2256e7..0000000 --- a/Requirements.md +++ /dev/null @@ -1,38 +0,0 @@ -# Requirements - -Create a powershell script (convert-reference-links.ps1) that will: - -- Find all links in markdown files in "./articles/LCPublicAPI/docs/" and for links that start with "../reference/.json/paths/" replace with: - - for links that link to operations: "../api/-fv.html#/operations/" - - for links that link to scheams: "../api/-fv.html#/schemas/" -- Current links in the markdown relative paths are not correct. those are actually referencing files from the /articles/LCPublicAPI/api - -Second powershell script (convert-contract-links.ps1) that will: - -- Find all links in markdown format (ex: `[Translation API](../docs/translations/Translations.md)`) in a provided contract file (.json file in "/articles/Extensibility/api" or "/articles/LCPublicAPI/api") and rename them to *.html -- Find all links in markdown format (ex: `[Upload Zip File](../reference/Public-API.v1.json/paths/~1files/post)`) in the given contract (same as above) and: - - change the url to operationId using hash, example: `[Poll Upload Zip File](../reference/Public-API.v1.json/paths/~1files~1{fileId}/get)` becomes `[Poll Upload Zip File](#/operations/PollUploadZipFile)` - - for schemas the path becomes `#/schemas/..` - - if the url is relative to another contract file format a full relative path, ex: `[Poll Upload Zip File](../reference/Public-API.v1.json/paths/~1files~1{fileId}/get)` becomes `[Poll Upload Zip File](../../LCPublicAPI/api/Public-API.v1-fv.html#/operations/PollUploadZipFile)` - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/api/bcm/.manifest b/api/bcm/.manifest deleted file mode 100644 index 3a75591..0000000 --- a/api/bcm/.manifest +++ /dev/null @@ -1,988 +0,0 @@ -{ - "Sdl.Core.Bcm.BcmModel": "Sdl.Core.Bcm.BcmModel.yml", - "Sdl.Core.Bcm.BcmModel.Alignment": "Sdl.Core.Bcm.BcmModel.Alignment.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData": "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.#ctor": "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.Clone": "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.ContentInsertDate": "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.IncompatibleSpanPairSet": "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.ModelDate": "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.SpanPairSet": "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.TuId": "Sdl.Core.Bcm.BcmModel.Alignment.AlignmentData.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.LiftSpan": "Sdl.Core.Bcm.BcmModel.Alignment.LiftSpan.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.LiftSpan.#ctor": "Sdl.Core.Bcm.BcmModel.Alignment.LiftSpan.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.LiftSpan.Clone": "Sdl.Core.Bcm.BcmModel.Alignment.LiftSpan.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.LiftSpan.Length": "Sdl.Core.Bcm.BcmModel.Alignment.LiftSpan.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.LiftSpan.StartIndex": "Sdl.Core.Bcm.BcmModel.Alignment.LiftSpan.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.SpanPairNode": "Sdl.Core.Bcm.BcmModel.Alignment.SpanPairNode.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.SpanPairNode.#ctor": "Sdl.Core.Bcm.BcmModel.Alignment.SpanPairNode.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.SpanPairNode.Clone": "Sdl.Core.Bcm.BcmModel.Alignment.SpanPairNode.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.SpanPairNode.Confidence": "Sdl.Core.Bcm.BcmModel.Alignment.SpanPairNode.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.SpanPairNode.Provenance": "Sdl.Core.Bcm.BcmModel.Alignment.SpanPairNode.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.SpanPairNode.SourceSpan": "Sdl.Core.Bcm.BcmModel.Alignment.SpanPairNode.yml", - "Sdl.Core.Bcm.BcmModel.Alignment.SpanPairNode.TargetSpan": "Sdl.Core.Bcm.BcmModel.Alignment.SpanPairNode.yml", - "Sdl.Core.Bcm.BcmModel.Annotations": "Sdl.Core.Bcm.BcmModel.Annotations.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.AnnotationContainer": "Sdl.Core.Bcm.BcmModel.Annotations.AnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.AnnotationContainer.#ctor": "Sdl.Core.Bcm.BcmModel.Annotations.AnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.AnnotationContainer.AnnotationId": "Sdl.Core.Bcm.BcmModel.Annotations.AnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.AnnotationContainer.Equals(Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.Annotations.AnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.AnnotationContainer.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Annotations.AnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.AnnotationContainer.GetHashCode": "Sdl.Core.Bcm.BcmModel.Annotations.AnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer": "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.#ctor": "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.AcceptVisitor(Sdl.Core.Bcm.BcmModel.Common.BcmVisitor)": "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.Clone": "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.CommentDefinitionId": "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.Definition": "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.Equals(Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.GetHashCode": "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.Type": "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.UniqueClone": "Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer": "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.#ctor": "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.AcceptVisitor(Sdl.Core.Bcm.BcmModel.Common.BcmVisitor)": "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.Definition": "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.Equals(Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.GetHashCode": "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.TerminologyDataId": "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.Type": "Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer.yml", - "Sdl.Core.Bcm.BcmModel.Collections": "Sdl.Core.Bcm.BcmModel.Collections.yml", - "Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx`2": "Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx`2.#ctor": "Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx`2.#ctor(Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx{`0,`1})": "Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}})": "Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx`2.Equals(Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx{`0,`1})": "Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx`2.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx`2.GetHashCode": "Sdl.Core.Bcm.BcmModel.Collections.DictionaryEx-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.FileCollection": "Sdl.Core.Bcm.BcmModel.Collections.FileCollection.yml", - "Sdl.Core.Bcm.BcmModel.Collections.FileCollection.#ctor": "Sdl.Core.Bcm.BcmModel.Collections.FileCollection.yml", - "Sdl.Core.Bcm.BcmModel.Collections.FileCollection.IdGenerator": "Sdl.Core.Bcm.BcmModel.Collections.FileCollection.yml", - "Sdl.Core.Bcm.BcmModel.Collections.FileCollection.InsertItem(System.Int32,Sdl.Core.Bcm.BcmModel.File)": "Sdl.Core.Bcm.BcmModel.Collections.FileCollection.yml", - "Sdl.Core.Bcm.BcmModel.Collections.FileCollection.SetItem(System.Int32,Sdl.Core.Bcm.BcmModel.File)": "Sdl.Core.Bcm.BcmModel.Collections.FileCollection.yml", - "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt`2": "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt`2.#ctor": "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt`2.Add(`0,`1)": "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt`2.Clear": "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt`2.ContainsKey(`0)": "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt`2.GetHashCodeInternal(`0)": "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt`2.Item(`0)": "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt`2.Remove(`0)": "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt`2.TryGetValue(`0,`1@)": "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt`2._backingDictionary": "Sdl.Core.Bcm.BcmModel.Collections.HashDictionaryInt-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection`2": "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection`2.#ctor": "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection`2.#ctor(System.Func{`1,`0})": "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection`2.Equals(Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection{`0,`1})": "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection`2.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection`2.ForEach(System.Action{`1})": "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection`2.GetHashCode": "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection`2.GetKeyForItem(`1)": "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection`2.KeySelector": "Sdl.Core.Bcm.BcmModel.Collections.KeyBasedCollection-2.yml", - "Sdl.Core.Bcm.BcmModel.Collections.ParagraphUnitCollection": "Sdl.Core.Bcm.BcmModel.Collections.ParagraphUnitCollection.yml", - "Sdl.Core.Bcm.BcmModel.Collections.ParagraphUnitCollection.#ctor": "Sdl.Core.Bcm.BcmModel.Collections.ParagraphUnitCollection.yml", - "Sdl.Core.Bcm.BcmModel.Collections.ParagraphUnitCollection.AllSegmentPairs": "Sdl.Core.Bcm.BcmModel.Collections.ParagraphUnitCollection.yml", - "Sdl.Core.Bcm.BcmModel.Collections.ParagraphUnitCollection.InsertItem(System.Int32,Sdl.Core.Bcm.BcmModel.ParagraphUnit)": "Sdl.Core.Bcm.BcmModel.Collections.ParagraphUnitCollection.yml", - "Sdl.Core.Bcm.BcmModel.Collections.ParagraphUnitCollection.ParentFile": "Sdl.Core.Bcm.BcmModel.Collections.ParagraphUnitCollection.yml", - "Sdl.Core.Bcm.BcmModel.Collections.ParagraphUnitCollection.SegmentCount": "Sdl.Core.Bcm.BcmModel.Collections.ParagraphUnitCollection.yml", - "Sdl.Core.Bcm.BcmModel.Collections.SegmentPairCollection": "Sdl.Core.Bcm.BcmModel.Collections.SegmentPairCollection.yml", - "Sdl.Core.Bcm.BcmModel.Collections.SegmentPairCollection.#ctor(System.Collections.Generic.IEnumerable{Sdl.Core.Bcm.BcmModel.SegmentPair})": "Sdl.Core.Bcm.BcmModel.Collections.SegmentPairCollection.yml", - "Sdl.Core.Bcm.BcmModel.Collections.SegmentPairCollection.GetEnumerator": "Sdl.Core.Bcm.BcmModel.Collections.SegmentPairCollection.yml", - "Sdl.Core.Bcm.BcmModel.Collections.SegmentPairCollection.Item(System.String)": "Sdl.Core.Bcm.BcmModel.Collections.SegmentPairCollection.yml", - "Sdl.Core.Bcm.BcmModel.Common": "Sdl.Core.Bcm.BcmModel.Common.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmConst": "Sdl.Core.Bcm.BcmModel.Common.BcmConst.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmConst.CurrentBcmModelVersion": "Sdl.Core.Bcm.BcmModel.Common.BcmConst.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmConst.DateTimeFormat": "Sdl.Core.Bcm.BcmModel.Common.BcmConst.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmConst.FrameworkOriginalParagraphUnitId": "Sdl.Core.Bcm.BcmModel.Common.BcmConst.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmConst.FrameworkOriginalTagId": "Sdl.Core.Bcm.BcmModel.Common.BcmConst.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmConst.KeepContextFromPreviousParagraph": "Sdl.Core.Bcm.BcmModel.Common.BcmConst.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmModelValidation": "Sdl.Core.Bcm.BcmModel.Common.BcmModelValidation.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmModelValidation.ExcludeBaseTypes": "Sdl.Core.Bcm.BcmModel.Common.BcmModelValidation.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor": "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.#ctor": "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.VisitCommentContainer(Sdl.Core.Bcm.BcmModel.Annotations.CommentContainer)": "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.VisitFeedbackContainer(Sdl.Core.Bcm.BcmModel.FeedbackContainer)": "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.VisitLockedContentContainer(Sdl.Core.Bcm.BcmModel.LockedContentContainer)": "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.VisitParagraph(Sdl.Core.Bcm.BcmModel.Paragraph)": "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.VisitPlaceholderTag(Sdl.Core.Bcm.BcmModel.PlaceholderTag)": "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.VisitRevisionContainer(Sdl.Core.Bcm.BcmModel.RevisionContainer)": "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.VisitSegment(Sdl.Core.Bcm.BcmModel.Segment)": "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.VisitStructure(Sdl.Core.Bcm.BcmModel.StructureTag)": "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.VisitTagPair(Sdl.Core.Bcm.BcmModel.TagPair)": "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.VisitTerminologyContainer(Sdl.Core.Bcm.BcmModel.Annotations.TerminologyAnnotationContainer)": "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.yml", - "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.VisitText(Sdl.Core.Bcm.BcmModel.TextMarkup)": "Sdl.Core.Bcm.BcmModel.Common.BcmVisitor.yml", - "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin": "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.AdaptiveMachineTranslation": "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.AutoPropagated": "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.AutomatedAlignment": "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.AutomaticTranslation": "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.DocumentMatch": "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.Interactive": "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.MachineTranslation": "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.NeuralMachineTranslation": "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.NotTranslated": "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.ReverseAlignment": "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.Source": "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.TranslationMemory": "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.Unknown": "Sdl.Core.Bcm.BcmModel.Common.DefaultTranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Common.ICloneable`1": "Sdl.Core.Bcm.BcmModel.Common.ICloneable-1.yml", - "Sdl.Core.Bcm.BcmModel.Common.ICloneable`1.Clone": "Sdl.Core.Bcm.BcmModel.Common.ICloneable-1.yml", - "Sdl.Core.Bcm.BcmModel.Common.ModelExtensions": "Sdl.Core.Bcm.BcmModel.Common.ModelExtensions.yml", - "Sdl.Core.Bcm.BcmModel.Common.ModelExtensions.IsSequenceEqual``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IList{``0})": "Sdl.Core.Bcm.BcmModel.Common.ModelExtensions.yml", - "Sdl.Core.Bcm.BcmModel.Common.TranslationQualityEstimationConstants": "Sdl.Core.Bcm.BcmModel.Common.TranslationQualityEstimationConstants.yml", - "Sdl.Core.Bcm.BcmModel.Common.TranslationQualityEstimationConstants.TqeDescription": "Sdl.Core.Bcm.BcmModel.Common.TranslationQualityEstimationConstants.yml", - "Sdl.Core.Bcm.BcmModel.Common.TranslationQualityEstimationConstants.TqeEvaluatedAt": "Sdl.Core.Bcm.BcmModel.Common.TranslationQualityEstimationConstants.yml", - "Sdl.Core.Bcm.BcmModel.Common.TranslationQualityEstimationConstants.TqeModel": "Sdl.Core.Bcm.BcmModel.Common.TranslationQualityEstimationConstants.yml", - "Sdl.Core.Bcm.BcmModel.Common.TranslationQualityEstimationConstants.TqeScore": "Sdl.Core.Bcm.BcmModel.Common.TranslationQualityEstimationConstants.yml", - "Sdl.Core.Bcm.BcmModel.Common.TranslationQualityEstimationConstants.TqeSystem": "Sdl.Core.Bcm.BcmModel.Common.TranslationQualityEstimationConstants.yml", - "Sdl.Core.Bcm.BcmModel.ConfirmationLevel": "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.yml", - "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.ApprovedSignOff": "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.yml", - "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.ApprovedTranslation": "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.yml", - "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.Draft": "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.yml", - "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.NotTranslated": "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.yml", - "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.RejectedSignOff": "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.yml", - "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.RejectedTranslation": "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.yml", - "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.Translated": "Sdl.Core.Bcm.BcmModel.ConfirmationLevel.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFile": "Sdl.Core.Bcm.BcmModel.DependencyFile.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFile.#ctor": "Sdl.Core.Bcm.BcmModel.DependencyFile.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFile.Clone": "Sdl.Core.Bcm.BcmModel.DependencyFile.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFile.EmbeddedContent": "Sdl.Core.Bcm.BcmModel.DependencyFile.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFile.Equals(Sdl.Core.Bcm.BcmModel.DependencyFile)": "Sdl.Core.Bcm.BcmModel.DependencyFile.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFile.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.DependencyFile.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFile.FileId": "Sdl.Core.Bcm.BcmModel.DependencyFile.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFile.FileName": "Sdl.Core.Bcm.BcmModel.DependencyFile.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFile.GetHashCode": "Sdl.Core.Bcm.BcmModel.DependencyFile.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFile.Id": "Sdl.Core.Bcm.BcmModel.DependencyFile.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFile.Location": "Sdl.Core.Bcm.BcmModel.DependencyFile.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFile.Provider": "Sdl.Core.Bcm.BcmModel.DependencyFile.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFile.Usage": "Sdl.Core.Bcm.BcmModel.DependencyFile.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFileUsage": "Sdl.Core.Bcm.BcmModel.DependencyFileUsage.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFileUsage.Extraction": "Sdl.Core.Bcm.BcmModel.DependencyFileUsage.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFileUsage.Final": "Sdl.Core.Bcm.BcmModel.DependencyFileUsage.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFileUsage.Generation": "Sdl.Core.Bcm.BcmModel.DependencyFileUsage.yml", - "Sdl.Core.Bcm.BcmModel.DependencyFileUsage.None": "Sdl.Core.Bcm.BcmModel.DependencyFileUsage.yml", - "Sdl.Core.Bcm.BcmModel.Document": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.#ctor": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.Clone": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.DeserializeFromString(System.String)": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.Equals(Sdl.Core.Bcm.BcmModel.Document)": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.Files": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.GetHashCode": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.Id": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.IdGenerator": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.ModelVersion": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.Name": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.SourceLanguageCode": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.SourceLanguageName": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.TargetLanguageCode": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Document.TargetLanguageName": "Sdl.Core.Bcm.BcmModel.Document.yml", - "Sdl.Core.Bcm.BcmModel.Exceptions": "Sdl.Core.Bcm.BcmModel.Exceptions.yml", - "Sdl.Core.Bcm.BcmModel.Exceptions.InvalidBcmDocumentException": "Sdl.Core.Bcm.BcmModel.Exceptions.InvalidBcmDocumentException.yml", - "Sdl.Core.Bcm.BcmModel.Exceptions.InvalidBcmDocumentException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)": "Sdl.Core.Bcm.BcmModel.Exceptions.InvalidBcmDocumentException.yml", - "Sdl.Core.Bcm.BcmModel.Exceptions.InvalidBcmDocumentException.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.Exceptions.InvalidBcmDocumentException.yml", - "Sdl.Core.Bcm.BcmModel.ExtensionDataContainer": "Sdl.Core.Bcm.BcmModel.ExtensionDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.ExtensionDataContainer.#ctor": "Sdl.Core.Bcm.BcmModel.ExtensionDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.ExtensionDataContainer.ExtensionData": "Sdl.Core.Bcm.BcmModel.ExtensionDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.#ctor": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.#ctor(Sdl.Core.Bcm.BcmModel.FeedbackType)": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.AcceptVisitor(Sdl.Core.Bcm.BcmModel.Common.BcmVisitor)": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.Author": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.Category": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.Clone": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.Comment": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.CommentDefinitionId": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.DocumentCategory": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.Equals(Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.FeedbackType": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.GetHashCode": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.Origin": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.ReplacementId": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.Severity": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.Timestamp": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.Type": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackContainer.UniqueClone": "Sdl.Core.Bcm.BcmModel.FeedbackContainer.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackType": "Sdl.Core.Bcm.BcmModel.FeedbackType.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackType.Added": "Sdl.Core.Bcm.BcmModel.FeedbackType.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackType.Comment": "Sdl.Core.Bcm.BcmModel.FeedbackType.yml", - "Sdl.Core.Bcm.BcmModel.FeedbackType.Deleted": "Sdl.Core.Bcm.BcmModel.FeedbackType.yml", - "Sdl.Core.Bcm.BcmModel.File": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.#ctor": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.Clone": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.CommentDefinitionIds": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.DependencyFiles": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.Equals(Sdl.Core.Bcm.BcmModel.File)": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.FileTypeDefinitionId": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.GetHashCode": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.Id": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.IdGenerator": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.OriginalEncoding": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.OriginalFileName": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.ParagraphUnits": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.Parent": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.PreferredTargetEncoding": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.ShouldSerializeCommentDefinitionIds": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.ShouldSerializeDependencyFiles": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.File.Skeleton": "Sdl.Core.Bcm.BcmModel.File.yml", - "Sdl.Core.Bcm.BcmModel.FileMetaDataKeys": "Sdl.Core.Bcm.BcmModel.FileMetaDataKeys.yml", - "Sdl.Core.Bcm.BcmModel.FileMetaDataKeys.ContextFileLocation": "Sdl.Core.Bcm.BcmModel.FileMetaDataKeys.yml", - "Sdl.Core.Bcm.BcmModel.Fragment": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.#ctor": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.Clone": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.CommentDefinitionIds": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.ContextList": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.DocumentId": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.Equals(Sdl.Core.Bcm.BcmModel.Fragment)": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.GetHashCode": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.Index": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.ShouldSerializeCommentDefinitionIds": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.ShouldSerializeContextList": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.ShouldSerializeSkeleton": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.Skeleton": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.SourceContent": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.SourceLanguageCode": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.StructureContextId": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.TargetContent": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.TargetLanguageCode": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.Fragment.ToString": "Sdl.Core.Bcm.BcmModel.Fragment.yml", - "Sdl.Core.Bcm.BcmModel.ISkeletonItemReference`1": "Sdl.Core.Bcm.BcmModel.ISkeletonItemReference-1.yml", - "Sdl.Core.Bcm.BcmModel.ISkeletonItemReference`1.Definition": "Sdl.Core.Bcm.BcmModel.ISkeletonItemReference-1.yml", - "Sdl.Core.Bcm.BcmModel.LocalizableSubContent": "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.yml", - "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.#ctor": "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.yml", - "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.Clone": "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.yml", - "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.Equals(Sdl.Core.Bcm.BcmModel.LocalizableSubContent)": "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.yml", - "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.yml", - "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.GetHashCode": "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.yml", - "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.Length": "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.yml", - "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.ParagraphUnitId": "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.yml", - "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.SourceTagContentOffset": "Sdl.Core.Bcm.BcmModel.LocalizableSubContent.yml", - "Sdl.Core.Bcm.BcmModel.LockedContentContainer": "Sdl.Core.Bcm.BcmModel.LockedContentContainer.yml", - "Sdl.Core.Bcm.BcmModel.LockedContentContainer.#ctor": "Sdl.Core.Bcm.BcmModel.LockedContentContainer.yml", - "Sdl.Core.Bcm.BcmModel.LockedContentContainer.AcceptVisitor(Sdl.Core.Bcm.BcmModel.Common.BcmVisitor)": "Sdl.Core.Bcm.BcmModel.LockedContentContainer.yml", - "Sdl.Core.Bcm.BcmModel.LockedContentContainer.Clone": "Sdl.Core.Bcm.BcmModel.LockedContentContainer.yml", - "Sdl.Core.Bcm.BcmModel.LockedContentContainer.Type": "Sdl.Core.Bcm.BcmModel.LockedContentContainer.yml", - "Sdl.Core.Bcm.BcmModel.LockedContentContainer.UniqueClone": "Sdl.Core.Bcm.BcmModel.LockedContentContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.#ctor": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.AcceptVisitor(Sdl.Core.Bcm.BcmModel.Common.BcmVisitor)": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.Ancestors": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.Clone": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.Equals(Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.GetHashCode": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.Id": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.IndexInParent": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.IsContainer": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.Parent": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.ParentFragment": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.ParentParagraph": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.ParentParagraphUnit": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.ParentSegment": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.Type": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupData.UniqueClone": "Sdl.Core.Bcm.BcmModel.MarkupData.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.#ctor": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.Add(Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.Add(System.Collections.Generic.IEnumerable{Sdl.Core.Bcm.BcmModel.MarkupData})": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.AllSubItems": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.AutoClonedTagPairKey": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.Children": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.Clear": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.Clone": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.CloneWithoutChildren": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.Count": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.Equals(Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.Equals(Sdl.Core.Bcm.BcmModel.MarkupDataContainer)": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.GetAllChildren(System.Func{Sdl.Core.Bcm.BcmModel.MarkupData,System.Boolean})": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.GetAllChildren``1(System.Func{``0,System.Boolean})": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.GetEnumerator": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.GetHashCode": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.Insert(System.Int32,Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.Item(System.Int32)": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.MoveToContainer(Sdl.Core.Bcm.BcmModel.MarkupDataContainer,System.Int32,System.Int32,System.Int32)": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.OnDeserialized": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.Remove(Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.ToString": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.UniqueClone": "Sdl.Core.Bcm.BcmModel.MarkupDataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MetadataContainer": "Sdl.Core.Bcm.BcmModel.MetadataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MetadataContainer.#ctor": "Sdl.Core.Bcm.BcmModel.MetadataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MetadataContainer.Equals(Sdl.Core.Bcm.BcmModel.MetadataContainer)": "Sdl.Core.Bcm.BcmModel.MetadataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MetadataContainer.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.MetadataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MetadataContainer.GetHashCode": "Sdl.Core.Bcm.BcmModel.MetadataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MetadataContainer.GetMetadata(System.String)": "Sdl.Core.Bcm.BcmModel.MetadataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MetadataContainer.Metadata": "Sdl.Core.Bcm.BcmModel.MetadataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MetadataContainer.SetMetadata(System.String,System.String)": "Sdl.Core.Bcm.BcmModel.MetadataContainer.yml", - "Sdl.Core.Bcm.BcmModel.MetadataContainer.ShouldSerialize_metadata": "Sdl.Core.Bcm.BcmModel.MetadataContainer.yml", - "Sdl.Core.Bcm.BcmModel.Paragraph": "Sdl.Core.Bcm.BcmModel.Paragraph.yml", - "Sdl.Core.Bcm.BcmModel.Paragraph.#ctor": "Sdl.Core.Bcm.BcmModel.Paragraph.yml", - "Sdl.Core.Bcm.BcmModel.Paragraph.#ctor(Sdl.Core.Bcm.BcmModel.Segment)": "Sdl.Core.Bcm.BcmModel.Paragraph.yml", - "Sdl.Core.Bcm.BcmModel.Paragraph.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.Paragraph.yml", - "Sdl.Core.Bcm.BcmModel.Paragraph.AcceptVisitor(Sdl.Core.Bcm.BcmModel.Common.BcmVisitor)": "Sdl.Core.Bcm.BcmModel.Paragraph.yml", - "Sdl.Core.Bcm.BcmModel.Paragraph.Clone": "Sdl.Core.Bcm.BcmModel.Paragraph.yml", - "Sdl.Core.Bcm.BcmModel.Paragraph.ParentParagraphUnit": "Sdl.Core.Bcm.BcmModel.Paragraph.yml", - "Sdl.Core.Bcm.BcmModel.Paragraph.Type": "Sdl.Core.Bcm.BcmModel.Paragraph.yml", - "Sdl.Core.Bcm.BcmModel.Paragraph.UniqueClone": "Sdl.Core.Bcm.BcmModel.Paragraph.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.#ctor": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.Clone": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.CommentDefinitionIds": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.ContextList": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.Equals(Sdl.Core.Bcm.BcmModel.ParagraphUnit)": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.GetHashCode": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.Id": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.Index": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.IsLocked": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.IsStructure": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.ParentFile": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.ParentFileId": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.SegmentPairs": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.Source": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.StructureContextId": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.Target": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnit.ToString": "Sdl.Core.Bcm.BcmModel.ParagraphUnit.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnitMetadataKeys": "Sdl.Core.Bcm.BcmModel.ParagraphUnitMetadataKeys.yml", - "Sdl.Core.Bcm.BcmModel.ParagraphUnitMetadataKeys.FrameworkOriginalParagraphUnitId": "Sdl.Core.Bcm.BcmModel.ParagraphUnitMetadataKeys.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization": "Sdl.Core.Bcm.BcmModel.PartialSerialization.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.#ctor": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.AddFile(Sdl.Core.Bcm.BcmModel.File)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.DeleteFile(System.Int32)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.DeleteFile(System.String)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.Dispose": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.Dispose(System.Boolean)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.GetDocumentWithoutFiles": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.GetFileCount": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.GetFileIds": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.GetFileSerializer(System.String)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.InsertFile(System.Int32,Sdl.Core.Bcm.BcmModel.File)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.SaveAsJson(System.IO.Stream)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.SaveAsJson(System.IO.TextWriter)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.SaveAsJson(System.String)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.AbstractPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.AddFile(Sdl.Core.Bcm.BcmModel.File)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.DeleteFile(System.Int32)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.DeleteFile(System.String)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.GetDocumentWithoutFiles": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.GetFileCount": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.GetFileIds": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.GetFileSerializer(System.String)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.InsertFile(System.Int32,Sdl.Core.Bcm.BcmModel.File)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.SaveAsJson(System.IO.Stream)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.SaveAsJson(System.IO.TextWriter)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.SaveAsJson(System.String)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.AddParagraphUnit(Sdl.Core.Bcm.BcmModel.ParagraphUnit)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.GetAllParagraphUnits": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.GetFileWithoutParagraphUnits": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.GetParagraphUnitCount": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.GetParagraphUnitIds": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.GetSpecificParagraphUnit(System.Int32)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.GetSpecificParagraphUnit(System.String)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.InsertParagraphUnit(System.Int32,Sdl.Core.Bcm.BcmModel.ParagraphUnit)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.RemoveParagraphUnit(System.Int32)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.RemoveParagraphUnit(System.String)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.RemoveParagraphUnitRange(System.Int32,System.Int32)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.UpdateFileDataWithoutParagraphUnits(Sdl.Core.Bcm.BcmModel.File)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.UpdateParagraphUnit(Sdl.Core.Bcm.BcmModel.ParagraphUnit)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.IPartialFileSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.#ctor": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.#ctor(Sdl.Core.Bcm.BcmModel.Document)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.#ctor(System.String,System.Boolean)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.AddFile(Sdl.Core.Bcm.BcmModel.File)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.DeleteFile(System.Int32)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.DeleteFile(System.String)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.Dispose(System.Boolean)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.ExtractDocument": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.GetDocumentWithoutFiles": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.GetFileCount": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.GetFileIds": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.GetFileSerializer(System.String)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.InsertFile(System.Int32,Sdl.Core.Bcm.BcmModel.File)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.SaveAsJson(System.IO.TextWriter)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.InMemory.InMemoryBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.PartialBcmSerializerFactory": "Sdl.Core.Bcm.BcmModel.PartialSerialization.PartialBcmSerializerFactory.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.PartialBcmSerializerFactory.#ctor": "Sdl.Core.Bcm.BcmModel.PartialSerialization.PartialBcmSerializerFactory.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.PartialBcmSerializerFactory.CreateSerializer(Sdl.Core.Bcm.BcmModel.Document)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.PartialBcmSerializerFactory.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.PartialBcmSerializerFactory.CreateSerializer(System.IO.Stream)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.PartialBcmSerializerFactory.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.PartialBcmSerializerFactory.CreateSerializer(System.String)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.PartialBcmSerializerFactory.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.PartialBcmSerializerFactory.FileSizeLimitInMBForInMemory": "Sdl.Core.Bcm.BcmModel.PartialSerialization.PartialBcmSerializerFactory.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased": "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer": "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.#ctor": "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.#ctor(System.String,System.Boolean)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.AddFile(Sdl.Core.Bcm.BcmModel.File)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.DeleteFile(System.Int32)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.DeleteFile(System.String)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.Dispose(System.Boolean)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.GetDocumentWithoutFiles": "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.GetFileCount": "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.GetFileIds": "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.GetFileSerializer(System.String)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.InsertFile(System.Int32,Sdl.Core.Bcm.BcmModel.File)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.SaveAsJson(System.IO.TextWriter)": "Sdl.Core.Bcm.BcmModel.PartialSerialization.TempFileBased.TempFileBasedBcmSerializer.yml", - "Sdl.Core.Bcm.BcmModel.PlaceholderTag": "Sdl.Core.Bcm.BcmModel.PlaceholderTag.yml", - "Sdl.Core.Bcm.BcmModel.PlaceholderTag.#ctor": "Sdl.Core.Bcm.BcmModel.PlaceholderTag.yml", - "Sdl.Core.Bcm.BcmModel.PlaceholderTag.AcceptVisitor(Sdl.Core.Bcm.BcmModel.Common.BcmVisitor)": "Sdl.Core.Bcm.BcmModel.PlaceholderTag.yml", - "Sdl.Core.Bcm.BcmModel.PlaceholderTag.Clone": "Sdl.Core.Bcm.BcmModel.PlaceholderTag.yml", - "Sdl.Core.Bcm.BcmModel.PlaceholderTag.Definition": "Sdl.Core.Bcm.BcmModel.PlaceholderTag.yml", - "Sdl.Core.Bcm.BcmModel.PlaceholderTag.Equals(Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.PlaceholderTag.yml", - "Sdl.Core.Bcm.BcmModel.PlaceholderTag.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.PlaceholderTag.yml", - "Sdl.Core.Bcm.BcmModel.PlaceholderTag.GetHashCode": "Sdl.Core.Bcm.BcmModel.PlaceholderTag.yml", - "Sdl.Core.Bcm.BcmModel.PlaceholderTag.PlaceholderTagDefinitionId": "Sdl.Core.Bcm.BcmModel.PlaceholderTag.yml", - "Sdl.Core.Bcm.BcmModel.PlaceholderTag.TagNumber": "Sdl.Core.Bcm.BcmModel.PlaceholderTag.yml", - "Sdl.Core.Bcm.BcmModel.PlaceholderTag.Type": "Sdl.Core.Bcm.BcmModel.PlaceholderTag.yml", - "Sdl.Core.Bcm.BcmModel.RevisionContainer": "Sdl.Core.Bcm.BcmModel.RevisionContainer.yml", - "Sdl.Core.Bcm.BcmModel.RevisionContainer.#ctor": "Sdl.Core.Bcm.BcmModel.RevisionContainer.yml", - "Sdl.Core.Bcm.BcmModel.RevisionContainer.#ctor(Sdl.Core.Bcm.BcmModel.RevisionType)": "Sdl.Core.Bcm.BcmModel.RevisionContainer.yml", - "Sdl.Core.Bcm.BcmModel.RevisionContainer.AcceptVisitor(Sdl.Core.Bcm.BcmModel.Common.BcmVisitor)": "Sdl.Core.Bcm.BcmModel.RevisionContainer.yml", - "Sdl.Core.Bcm.BcmModel.RevisionContainer.Author": "Sdl.Core.Bcm.BcmModel.RevisionContainer.yml", - "Sdl.Core.Bcm.BcmModel.RevisionContainer.Clone": "Sdl.Core.Bcm.BcmModel.RevisionContainer.yml", - "Sdl.Core.Bcm.BcmModel.RevisionContainer.Equals(Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.RevisionContainer.yml", - "Sdl.Core.Bcm.BcmModel.RevisionContainer.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.RevisionContainer.yml", - "Sdl.Core.Bcm.BcmModel.RevisionContainer.GetHashCode": "Sdl.Core.Bcm.BcmModel.RevisionContainer.yml", - "Sdl.Core.Bcm.BcmModel.RevisionContainer.RevisionType": "Sdl.Core.Bcm.BcmModel.RevisionContainer.yml", - "Sdl.Core.Bcm.BcmModel.RevisionContainer.Timestamp": "Sdl.Core.Bcm.BcmModel.RevisionContainer.yml", - "Sdl.Core.Bcm.BcmModel.RevisionContainer.Type": "Sdl.Core.Bcm.BcmModel.RevisionContainer.yml", - "Sdl.Core.Bcm.BcmModel.RevisionContainer.UniqueClone": "Sdl.Core.Bcm.BcmModel.RevisionContainer.yml", - "Sdl.Core.Bcm.BcmModel.RevisionType": "Sdl.Core.Bcm.BcmModel.RevisionType.yml", - "Sdl.Core.Bcm.BcmModel.RevisionType.Deleted": "Sdl.Core.Bcm.BcmModel.RevisionType.yml", - "Sdl.Core.Bcm.BcmModel.RevisionType.Inserted": "Sdl.Core.Bcm.BcmModel.RevisionType.yml", - "Sdl.Core.Bcm.BcmModel.RevisionType.Unchanged": "Sdl.Core.Bcm.BcmModel.RevisionType.yml", - "Sdl.Core.Bcm.BcmModel.Segment": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.#ctor": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.#ctor(System.String,Sdl.Core.Bcm.BcmModel.ConfirmationLevel)": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.AcceptVisitor(Sdl.Core.Bcm.BcmModel.Common.BcmVisitor)": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.AlignmentData": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.CharacterCount": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.Clone": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.CloneWithoutChildren": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.ConfirmationLevel": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.Equals(Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.GetHashCode": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.IsLocked": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.SegmentNumber": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.SiblingSegment": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.ToString": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.Tokens": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.TranslationOrigin": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.Type": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.UniqueClone": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.Segment.WordCount": "Sdl.Core.Bcm.BcmModel.Segment.yml", - "Sdl.Core.Bcm.BcmModel.SegmentMetaDataKeys": "Sdl.Core.Bcm.BcmModel.SegmentMetaDataKeys.yml", - "Sdl.Core.Bcm.BcmModel.SegmentMetaDataKeys.AlignmentTimestamp": "Sdl.Core.Bcm.BcmModel.SegmentMetaDataKeys.yml", - "Sdl.Core.Bcm.BcmModel.SegmentMetaDataKeys.Contexts": "Sdl.Core.Bcm.BcmModel.SegmentMetaDataKeys.yml", - "Sdl.Core.Bcm.BcmModel.SegmentMetaDataKeys.CustomFields": "Sdl.Core.Bcm.BcmModel.SegmentMetaDataKeys.yml", - "Sdl.Core.Bcm.BcmModel.SegmentMetaDataKeys.SystemFields": "Sdl.Core.Bcm.BcmModel.SegmentMetaDataKeys.yml", - "Sdl.Core.Bcm.BcmModel.SegmentMetaDataKeys.TuGuId": "Sdl.Core.Bcm.BcmModel.SegmentMetaDataKeys.yml", - "Sdl.Core.Bcm.BcmModel.SegmentMetaDataKeys.TuId": "Sdl.Core.Bcm.BcmModel.SegmentMetaDataKeys.yml", - "Sdl.Core.Bcm.BcmModel.SegmentPair": "Sdl.Core.Bcm.BcmModel.SegmentPair.yml", - "Sdl.Core.Bcm.BcmModel.SegmentPair.#ctor(Sdl.Core.Bcm.BcmModel.Segment,Sdl.Core.Bcm.BcmModel.Segment)": "Sdl.Core.Bcm.BcmModel.SegmentPair.yml", - "Sdl.Core.Bcm.BcmModel.SegmentPair.Clone": "Sdl.Core.Bcm.BcmModel.SegmentPair.yml", - "Sdl.Core.Bcm.BcmModel.SegmentPair.Source": "Sdl.Core.Bcm.BcmModel.SegmentPair.yml", - "Sdl.Core.Bcm.BcmModel.SegmentPair.Target": "Sdl.Core.Bcm.BcmModel.SegmentPair.yml", - "Sdl.Core.Bcm.BcmModel.SegmentationHint": "Sdl.Core.Bcm.BcmModel.SegmentationHint.yml", - "Sdl.Core.Bcm.BcmModel.SegmentationHint.Exclude": "Sdl.Core.Bcm.BcmModel.SegmentationHint.yml", - "Sdl.Core.Bcm.BcmModel.SegmentationHint.Include": "Sdl.Core.Bcm.BcmModel.SegmentationHint.yml", - "Sdl.Core.Bcm.BcmModel.SegmentationHint.IncludeWithText": "Sdl.Core.Bcm.BcmModel.SegmentationHint.yml", - "Sdl.Core.Bcm.BcmModel.SegmentationHint.MayExclude": "Sdl.Core.Bcm.BcmModel.SegmentationHint.yml", - "Sdl.Core.Bcm.BcmModel.Serialization": "Sdl.Core.Bcm.BcmModel.Serialization.yml", - "Sdl.Core.Bcm.BcmModel.Serialization.MarkupDataMapping": "Sdl.Core.Bcm.BcmModel.Serialization.MarkupDataMapping.yml", - "Sdl.Core.Bcm.BcmModel.Serialization.MarkupDataMapping.GetType(System.String)": "Sdl.Core.Bcm.BcmModel.Serialization.MarkupDataMapping.yml", - "Sdl.Core.Bcm.BcmModel.Serialization.TokenMapping": "Sdl.Core.Bcm.BcmModel.Serialization.TokenMapping.yml", - "Sdl.Core.Bcm.BcmModel.Serialization.TokenMapping.GetType(System.String)": "Sdl.Core.Bcm.BcmModel.Serialization.TokenMapping.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton": "Sdl.Core.Bcm.BcmModel.Skeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition": "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.Author": "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.Clone": "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.CommentSeverity": "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.Date": "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition)": "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.GetHashCode": "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.Text": "Sdl.Core.Bcm.BcmModel.Skeleton.CommentDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.CommentSeverity": "Sdl.Core.Bcm.BcmModel.Skeleton.CommentSeverity.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.CommentSeverity.High": "Sdl.Core.Bcm.BcmModel.Skeleton.CommentSeverity.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.CommentSeverity.Low": "Sdl.Core.Bcm.BcmModel.Skeleton.CommentSeverity.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.CommentSeverity.Medium": "Sdl.Core.Bcm.BcmModel.Skeleton.CommentSeverity.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Context": "Sdl.Core.Bcm.BcmModel.Skeleton.Context.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Context.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.Context.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Context.Clone": "Sdl.Core.Bcm.BcmModel.Skeleton.Context.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Context.ContextDefinitionId": "Sdl.Core.Bcm.BcmModel.Skeleton.Context.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Context.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.Context)": "Sdl.Core.Bcm.BcmModel.Skeleton.Context.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Context.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Skeleton.Context.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Context.GetHashCode": "Sdl.Core.Bcm.BcmModel.Skeleton.Context.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Context.ParentContextId": "Sdl.Core.Bcm.BcmModel.Skeleton.Context.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Context.ToString": "Sdl.Core.Bcm.BcmModel.Skeleton.Context.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.Clone": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.Description": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.DisplayCode": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.DisplayColor": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.DisplayName": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition)": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.FormattingGroupId": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.GetHashCode": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.IsSidContext": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.IsStructureContext": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.IsTmContext": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.IsTmStructureContext": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.ToString": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.TypeId": "Sdl.Core.Bcm.BcmModel.Skeleton.ContextDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.Clone": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.CommentDefinitions": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.ContextDefinitions": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.Contexts": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton)": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.FileId": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.FormattingGroups": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.GetHashCode": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.IdGenerator": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.ParentFile": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.PlaceholderTagDefinitions": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.QuickInsertIds": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.ShouldSerializeCommentDefinitions": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.ShouldSerializeContextDefinitions": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.ShouldSerializeContexts": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.ShouldSerializeFormattingGroups": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.ShouldSerializePlaceholderTagDefinitions": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.ShouldSerializeQuickInsertIds": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.ShouldSerializeStructureTagDefinitions": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.ShouldSerializeSubContentPUs": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.ShouldSerializeTagPairDefinitions": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.ShouldSerializeTerminologyData": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.StructureTagDefinitions": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.SubContentPUs": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.TagPairDefinitions": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.TerminologyData": "Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup": "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.Clone": "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup)": "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.GetHashCode": "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.Items": "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.ShouldSerializeItems": "Sdl.Core.Bcm.BcmModel.Skeleton.FormattingGroup.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ITermAttributeContainer": "Sdl.Core.Bcm.BcmModel.Skeleton.ITermAttributeContainer.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.ITermAttributeContainer.TermAttributes": "Sdl.Core.Bcm.BcmModel.Skeleton.ITermAttributeContainer.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.IdGenerator": "Sdl.Core.Bcm.BcmModel.Skeleton.IdGenerator.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.IdGenerator.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.IdGenerator.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.IdGenerator.GetNext``1": "Sdl.Core.Bcm.BcmModel.Skeleton.IdGenerator.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.IdGenerator.UpdateFrom(Sdl.Core.Bcm.BcmModel.Document)": "Sdl.Core.Bcm.BcmModel.Skeleton.IdGenerator.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.IdGenerator.UpdateFrom(Sdl.Core.Bcm.BcmModel.Skeleton.FileSkeleton)": "Sdl.Core.Bcm.BcmModel.Skeleton.IdGenerator.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.IdGenerator.Update``1(``0)": "Sdl.Core.Bcm.BcmModel.Skeleton.IdGenerator.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition": "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.Clone": "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.DisplayText": "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition)": "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.GetHashCode": "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.QuickInsertId": "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.SegmentationHint": "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.SubContent": "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.TagContent": "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.TextEquivalent": "Sdl.Core.Bcm.BcmModel.Skeleton.PlaceholderTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.#ctor(System.Int32)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.From(System.Int32)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.GetHashCode": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.Id": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.op_Equality(Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey,Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.op_Inequality(Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey,Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollectionKey.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection`1": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection-1.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection`1.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection-1.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection`1.ClearItems": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection-1.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection`1.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection{`0})": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection-1.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection`1.GetById(System.Int32)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection-1.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection`1.GetKeyForItem(`0)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection-1.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection`1.GetOrAdd(`0)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection-1.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection`1.GetOrAddWithExistingId(`0)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection-1.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection`1.IdGenerator": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection-1.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection`1.InsertItem(System.Int32,`0)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection-1.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection`1.ParentSkeleton": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection-1.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection`1.RemoveItem(System.Int32)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection-1.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection`1.SetItem(System.Int32,`0)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonCollection-1.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonItem": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonItem.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonItem.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonItem.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonItem.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonItem)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonItem.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonItem.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonItem.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonItem.GetHashCode": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonItem.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonItem.Id": "Sdl.Core.Bcm.BcmModel.Skeleton.SkeletonItem.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition": "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.Clone": "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.DisplayText": "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition)": "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.GetHashCode": "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.SubContent": "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.TagContent": "Sdl.Core.Bcm.BcmModel.Skeleton.StructureTagDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SubContentCollection": "Sdl.Core.Bcm.BcmModel.Skeleton.SubContentCollection.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.SubContentCollection.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.SubContentCollection.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.CanHide": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.Clone": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.EndTagContent": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.EndTagDisplayText": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition)": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.FormattingGroupId": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.GetHashCode": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.QuickInsertId": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.SegmentationHint": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.StartTagContent": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.StartTagDisplayText": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.SubContent": "Sdl.Core.Bcm.BcmModel.Skeleton.TagPairDefinition.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Term": "Sdl.Core.Bcm.BcmModel.Skeleton.Term.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Term.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.Term.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Term.Clone": "Sdl.Core.Bcm.BcmModel.Skeleton.Term.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Term.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.Term)": "Sdl.Core.Bcm.BcmModel.Skeleton.Term.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Term.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Skeleton.Term.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Term.GetHashCode": "Sdl.Core.Bcm.BcmModel.Skeleton.Term.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Term.Id": "Sdl.Core.Bcm.BcmModel.Skeleton.Term.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Term.Score": "Sdl.Core.Bcm.BcmModel.Skeleton.Term.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Term.ShouldSerializeTermAttributes": "Sdl.Core.Bcm.BcmModel.Skeleton.Term.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Term.ShouldSerializeTermTranslations": "Sdl.Core.Bcm.BcmModel.Skeleton.Term.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Term.TermAttributes": "Sdl.Core.Bcm.BcmModel.Skeleton.Term.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Term.TermOrigin": "Sdl.Core.Bcm.BcmModel.Skeleton.Term.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Term.TermTranslations": "Sdl.Core.Bcm.BcmModel.Skeleton.Term.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.Term.Text": "Sdl.Core.Bcm.BcmModel.Skeleton.Term.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin": "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.Clone": "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin)": "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.GetHashCode": "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.ResourceId": "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.ResourceName": "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.SystemId": "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.SystemName": "Sdl.Core.Bcm.BcmModel.Skeleton.TermOrigin.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation": "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.Clone": "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation)": "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.GetHashCode": "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.Id": "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.ShouldSerializeTermAttributes": "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.TermAttributes": "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.Text": "Sdl.Core.Bcm.BcmModel.Skeleton.TermTranslation.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData": "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.#ctor": "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.Clone": "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.Equals(Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData)": "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.GetHashCode": "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.Origin": "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.yml", - "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.Terms": "Sdl.Core.Bcm.BcmModel.Skeleton.TerminologyData.yml", - "Sdl.Core.Bcm.BcmModel.StructureTag": "Sdl.Core.Bcm.BcmModel.StructureTag.yml", - "Sdl.Core.Bcm.BcmModel.StructureTag.#ctor": "Sdl.Core.Bcm.BcmModel.StructureTag.yml", - "Sdl.Core.Bcm.BcmModel.StructureTag.AcceptVisitor(Sdl.Core.Bcm.BcmModel.Common.BcmVisitor)": "Sdl.Core.Bcm.BcmModel.StructureTag.yml", - "Sdl.Core.Bcm.BcmModel.StructureTag.Clone": "Sdl.Core.Bcm.BcmModel.StructureTag.yml", - "Sdl.Core.Bcm.BcmModel.StructureTag.Definition": "Sdl.Core.Bcm.BcmModel.StructureTag.yml", - "Sdl.Core.Bcm.BcmModel.StructureTag.Equals(Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.StructureTag.yml", - "Sdl.Core.Bcm.BcmModel.StructureTag.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.StructureTag.yml", - "Sdl.Core.Bcm.BcmModel.StructureTag.GetHashCode": "Sdl.Core.Bcm.BcmModel.StructureTag.yml", - "Sdl.Core.Bcm.BcmModel.StructureTag.StructureTagDefinitionId": "Sdl.Core.Bcm.BcmModel.StructureTag.yml", - "Sdl.Core.Bcm.BcmModel.StructureTag.TagNumber": "Sdl.Core.Bcm.BcmModel.StructureTag.yml", - "Sdl.Core.Bcm.BcmModel.StructureTag.Type": "Sdl.Core.Bcm.BcmModel.StructureTag.yml", - "Sdl.Core.Bcm.BcmModel.TagPair": "Sdl.Core.Bcm.BcmModel.TagPair.yml", - "Sdl.Core.Bcm.BcmModel.TagPair.#ctor": "Sdl.Core.Bcm.BcmModel.TagPair.yml", - "Sdl.Core.Bcm.BcmModel.TagPair.AcceptVisitor(Sdl.Core.Bcm.BcmModel.Common.BcmVisitor)": "Sdl.Core.Bcm.BcmModel.TagPair.yml", - "Sdl.Core.Bcm.BcmModel.TagPair.Clone": "Sdl.Core.Bcm.BcmModel.TagPair.yml", - "Sdl.Core.Bcm.BcmModel.TagPair.Definition": "Sdl.Core.Bcm.BcmModel.TagPair.yml", - "Sdl.Core.Bcm.BcmModel.TagPair.Equals(Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.TagPair.yml", - "Sdl.Core.Bcm.BcmModel.TagPair.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.TagPair.yml", - "Sdl.Core.Bcm.BcmModel.TagPair.GetHashCode": "Sdl.Core.Bcm.BcmModel.TagPair.yml", - "Sdl.Core.Bcm.BcmModel.TagPair.OnDeserialized": "Sdl.Core.Bcm.BcmModel.TagPair.yml", - "Sdl.Core.Bcm.BcmModel.TagPair.TagNumber": "Sdl.Core.Bcm.BcmModel.TagPair.yml", - "Sdl.Core.Bcm.BcmModel.TagPair.TagPairDefinitionId": "Sdl.Core.Bcm.BcmModel.TagPair.yml", - "Sdl.Core.Bcm.BcmModel.TagPair.Type": "Sdl.Core.Bcm.BcmModel.TagPair.yml", - "Sdl.Core.Bcm.BcmModel.TagPair.UniqueClone": "Sdl.Core.Bcm.BcmModel.TagPair.yml", - "Sdl.Core.Bcm.BcmModel.TagPairMetaDataKeys": "Sdl.Core.Bcm.BcmModel.TagPairMetaDataKeys.yml", - "Sdl.Core.Bcm.BcmModel.TagPairMetaDataKeys.EndTagMetadataPrefix": "Sdl.Core.Bcm.BcmModel.TagPairMetaDataKeys.yml", - "Sdl.Core.Bcm.BcmModel.TagPairMetaDataKeys.FrameworkOriginalSegmentationHint": "Sdl.Core.Bcm.BcmModel.TagPairMetaDataKeys.yml", - "Sdl.Core.Bcm.BcmModel.TagPairMetaDataKeys.FrameworkOriginalTagId": "Sdl.Core.Bcm.BcmModel.TagPairMetaDataKeys.yml", - "Sdl.Core.Bcm.BcmModel.TextContextMatchLevel": "Sdl.Core.Bcm.BcmModel.TextContextMatchLevel.yml", - "Sdl.Core.Bcm.BcmModel.TextContextMatchLevel.None": "Sdl.Core.Bcm.BcmModel.TextContextMatchLevel.yml", - "Sdl.Core.Bcm.BcmModel.TextContextMatchLevel.Source": "Sdl.Core.Bcm.BcmModel.TextContextMatchLevel.yml", - "Sdl.Core.Bcm.BcmModel.TextContextMatchLevel.SourceAndTarget": "Sdl.Core.Bcm.BcmModel.TextContextMatchLevel.yml", - "Sdl.Core.Bcm.BcmModel.TextMarkup": "Sdl.Core.Bcm.BcmModel.TextMarkup.yml", - "Sdl.Core.Bcm.BcmModel.TextMarkup.#ctor": "Sdl.Core.Bcm.BcmModel.TextMarkup.yml", - "Sdl.Core.Bcm.BcmModel.TextMarkup.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.TextMarkup.yml", - "Sdl.Core.Bcm.BcmModel.TextMarkup.AcceptVisitor(Sdl.Core.Bcm.BcmModel.Common.BcmVisitor)": "Sdl.Core.Bcm.BcmModel.TextMarkup.yml", - "Sdl.Core.Bcm.BcmModel.TextMarkup.Clone": "Sdl.Core.Bcm.BcmModel.TextMarkup.yml", - "Sdl.Core.Bcm.BcmModel.TextMarkup.Equals(Sdl.Core.Bcm.BcmModel.MarkupData)": "Sdl.Core.Bcm.BcmModel.TextMarkup.yml", - "Sdl.Core.Bcm.BcmModel.TextMarkup.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.TextMarkup.yml", - "Sdl.Core.Bcm.BcmModel.TextMarkup.GetHashCode": "Sdl.Core.Bcm.BcmModel.TextMarkup.yml", - "Sdl.Core.Bcm.BcmModel.TextMarkup.Text": "Sdl.Core.Bcm.BcmModel.TextMarkup.yml", - "Sdl.Core.Bcm.BcmModel.TextMarkup.ToString": "Sdl.Core.Bcm.BcmModel.TextMarkup.yml", - "Sdl.Core.Bcm.BcmModel.TextMarkup.Type": "Sdl.Core.Bcm.BcmModel.TextMarkup.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization": "Sdl.Core.Bcm.BcmModel.Tokenization.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.DateTimePatternType": "Sdl.Core.Bcm.BcmModel.Tokenization.DateTimePatternType.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.DateTimePatternType.LongDate": "Sdl.Core.Bcm.BcmModel.Tokenization.DateTimePatternType.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.DateTimePatternType.LongTime": "Sdl.Core.Bcm.BcmModel.Tokenization.DateTimePatternType.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.DateTimePatternType.ShortDate": "Sdl.Core.Bcm.BcmModel.Tokenization.DateTimePatternType.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.DateTimePatternType.ShortTime": "Sdl.Core.Bcm.BcmModel.Tokenization.DateTimePatternType.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.NumericSeparator": "Sdl.Core.Bcm.BcmModel.Tokenization.NumericSeparator.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.NumericSeparator.Alternate": "Sdl.Core.Bcm.BcmModel.Tokenization.NumericSeparator.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.NumericSeparator.None": "Sdl.Core.Bcm.BcmModel.Tokenization.NumericSeparator.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.NumericSeparator.Primary": "Sdl.Core.Bcm.BcmModel.Tokenization.NumericSeparator.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.#ctor(System.Int32,System.Int32)": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.Clone": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.Compare(Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition,Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition)": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.GetHashCode": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.PositionInRun": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.RunIndex": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.ToString": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.#ctor(Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition,Sdl.Core.Bcm.BcmModel.Tokenization.SegmentPosition)": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.#ctor(System.Int32,System.Int32,System.Int32)": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.Clone": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.Compare(Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange,Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange)": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.Equals(Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange)": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.From": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.GetHashCode": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.Into": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.ToString": "Sdl.Core.Bcm.BcmModel.Tokenization.SegmentRange.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Sign": "Sdl.Core.Bcm.BcmModel.Tokenization.Sign.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Sign.Minus": "Sdl.Core.Bcm.BcmModel.Tokenization.Sign.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Sign.None": "Sdl.Core.Bcm.BcmModel.Tokenization.Sign.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Sign.Plus": "Sdl.Core.Bcm.BcmModel.Tokenization.Sign.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.TagType": "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.End": "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.LockedContent": "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.Standalone": "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.Start": "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.TextPlaceholder": "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.Undefined": "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.UnmatchedEnd": "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.UnmatchedStart": "Sdl.Core.Bcm.BcmModel.Tokenization.TagType.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AbbreviationToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AbbreviationToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AbbreviationToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AbbreviationToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AbbreviationToken.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AbbreviationToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AbbreviationToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AbbreviationToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AcronymToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AcronymToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AcronymToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AcronymToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AcronymToken.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AcronymToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AcronymToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AcronymToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AlphanumericToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AlphanumericToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AlphanumericToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AlphanumericToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AlphanumericToken.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AlphanumericToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AlphanumericToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.AlphanumericToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.CharSequenceToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.CharSequenceToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.CharSequenceToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.CharSequenceToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.CharSequenceToken.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.CharSequenceToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.CharSequenceToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.CharSequenceToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.DateTimeToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.DateTimeToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.DateTimeToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.DateTimeToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.DateTimeToken.#ctor(System.String,System.DateTime,Sdl.Core.Bcm.BcmModel.Tokenization.DateTimePatternType)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.DateTimeToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.DateTimeToken.DateTimeType": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.DateTimeToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.DateTimeToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.DateTimeToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.DateTimeToken.Value": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.DateTimeToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GeneralPunctuationToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GeneralPunctuationToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GeneralPunctuationToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GeneralPunctuationToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GeneralPunctuationToken.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GeneralPunctuationToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GeneralPunctuationToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GeneralPunctuationToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GenericPlaceableToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GenericPlaceableToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GenericPlaceableToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GenericPlaceableToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GenericPlaceableToken.TokenClass": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GenericPlaceableToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GenericPlaceableToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.GenericPlaceableToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.IPAdressToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.IPAdressToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.IPAdressToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.IPAdressToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.IPAdressToken.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.IPAdressToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.IPAdressToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.IPAdressToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.MeasureToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.MeasureToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.MeasureToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.MeasureToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.MeasureToken.#ctor(System.String,Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken,Sdl.Core.Bcm.BcmModel.Tokenization.Unit,System.String,System.Char)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.MeasureToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.MeasureToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.MeasureToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.MeasureToken.Unit": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.MeasureToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.MeasureToken.UnitSeparator": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.MeasureToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.MeasureToken.UnitString": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.MeasureToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.#ctor(System.String,Sdl.Core.Bcm.BcmModel.Tokenization.NumericSeparator,Sdl.Core.Bcm.BcmModel.Tokenization.NumericSeparator,System.Char,System.Char,Sdl.Core.Bcm.BcmModel.Tokenization.Sign,System.String,System.String,System.String)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.AlternateDecimalSeparator": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.AlternateGroupSeparator": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.DecimalSeparator": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.GroupSeparator": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.RawDecimalDigits": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.RawFractionalDigits": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.RawSign": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.Sign": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.NumberToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.#ctor(Sdl.Core.Bcm.BcmModel.Tokenization.TagType,System.String,System.Int32,System.Int32,System.String,System.Boolean)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.AlignmentAnchor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.Anchor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.CanHide": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.TagId": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.TagType": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.TextEquivalent": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.ToString": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.TagToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.Clone": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.Span": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.Text": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.ToString": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.Token.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.URIToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.URIToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.URIToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.URIToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.URIToken.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.URIToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.URIToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.URIToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.VariableToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.VariableToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.VariableToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.VariableToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.VariableToken.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.VariableToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.VariableToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.VariableToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WhiteSpaceToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WhiteSpaceToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WhiteSpaceToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WhiteSpaceToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WhiteSpaceToken.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WhiteSpaceToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WhiteSpaceToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WhiteSpaceToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WordToken": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WordToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WordToken.#ctor": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WordToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WordToken.#ctor(System.String)": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WordToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WordToken.IsStopword": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WordToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WordToken.Stem": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WordToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WordToken.Type": "Sdl.Core.Bcm.BcmModel.Tokenization.Tokens.WordToken.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISacre": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISbuUK": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISbuUSDry": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISflozUK": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISflozUS": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISft": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISft2": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISfurlong": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISgalUK": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISgalUS": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISin": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISin2": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISlb": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISlongHW": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISlongTon": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISmi": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISmi2": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISoz": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISptUK": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISptUS": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISptUSDry": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISqtUK": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISshortHW": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISshortTon": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISstone": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISyd": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.BISyd2": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Currency": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Ma": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mcentigrade": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mcl": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mcm": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mcm2": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mcm3": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mdegree": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mdl": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mdm": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mfahrenheit": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mg": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mha": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mkelvin": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mkg": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mkm": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mkm2": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Ml": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mm": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mm2": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mm3": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mmg": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mml": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mmm": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mmm2": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mpercent": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Mt": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.NoUnit": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.Other": "Sdl.Core.Bcm.BcmModel.Tokenization.Unit.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.#ctor": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.#ctor(System.String,System.String,System.Int32,System.Boolean,System.Boolean,Sdl.Core.Bcm.BcmModel.TextContextMatchLevel,System.String,Sdl.Core.Bcm.BcmModel.TranslationOrigin)": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.ChangeDisplayUsername": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.Clone": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.CreatedBy": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.CreatedOn": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.CreationDate": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.CreationDisplayUsername": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.Equals(Sdl.Core.Bcm.BcmModel.TranslationOrigin)": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.GetHashCode": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.IsSidContextMatch": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.IsStructureContextMatch": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.LastModifiedDate": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.LastModifiedUserId": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.LastUsedDate": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.LastUsedUserId": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.MatchPercent": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.ModifiedBy": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.ModifiedOn": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.OriginBeforeAdaptation": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.OriginSystem": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.OriginType": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.OriginalTranslationHash": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.TextContextMatchLevel": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.TranslationQualityEstimations": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.UseCount": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOrigin.UseDisplayUsername": "Sdl.Core.Bcm.BcmModel.TranslationOrigin.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData": "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.ChangeDisplayUsername": "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.CreatedBy": "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.CreationDate": "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.CreationDisplayUsername": "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.LastModifiedDate": "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.LastModifiedUserId": "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.LastUsedDate": "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.LastUsedUserId": "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.UseCount": "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.yml", - "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.UseDisplayUsername": "Sdl.Core.Bcm.BcmModel.TranslationOriginMetaData.yml", - "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation": "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.yml", - "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.#ctor": "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.yml", - "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.Description": "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.yml", - "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.Equals(System.Object)": "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.yml", - "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.EvaluatedAt": "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.yml", - "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.GetHashCode": "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.yml", - "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.Model": "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.yml", - "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.Score": "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.yml", - "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.System": "Sdl.Core.Bcm.BcmModel.TranslationQualityEstimation.yml", - "Sdl.Core.Bcm.BcmModel.UnknownMarkupData": "Sdl.Core.Bcm.BcmModel.UnknownMarkupData.yml", - "Sdl.Core.Bcm.BcmModel.UnknownMarkupData.#ctor": "Sdl.Core.Bcm.BcmModel.UnknownMarkupData.yml", - "Sdl.Core.Bcm.BcmModel.UnknownMarkupData.AcceptVisitor(Sdl.Core.Bcm.BcmModel.Common.BcmVisitor)": "Sdl.Core.Bcm.BcmModel.UnknownMarkupData.yml", - "Sdl.Core.Bcm.BcmModel.UnknownMarkupData.Type": "Sdl.Core.Bcm.BcmModel.UnknownMarkupData.yml" -} \ No newline at end of file diff --git a/scripts/convert-contract-links.ps1 b/scripts/convert-contract-links.ps1 deleted file mode 100644 index 56ef915..0000000 --- a/scripts/convert-contract-links.ps1 +++ /dev/null @@ -1,259 +0,0 @@ -<# -Convert markdown links inside contract JSON files. - -Behavior: -- If a markdown link points to a .md file, replace the url to .html (literal change). -- If a markdown link points to a reference or api JSON path like - ../reference/Public-API.v1.json/paths/~1files~1{fileId}/get or ../api/Public-API.v1.json/components/schemas/foo - then replace the URL with either a local fragment (#/operations/... or #/schemas/...) when the referenced contract is the same file, - or with a full relative path to the referenced contract HTML (e.g. ../../LCPublicAPI/api/Public-API.v1-fv.html#/operations/OpId) - -Usage: -.\scripts\convert-contract-links.ps1 -Contract [-Root ] [-Force] -If -Contract is omitted the script will process all *.json files under -articles/Extensibility/api and articles/LCPublicAPI/api. - -Preview runs by default; add -Force to write changes. -#> - -param( - [string]$Contract, - [string]$Root = (Get-Location).Path, - [switch]$Force -) - -Write-Host "Root: $Root" - -# ensure $Root is a single string (some callers may pass arrays) -if ($Root -is [array]) { $Root = $Root[0] } - -function Resolve-ReferencedJsonFile { - param( - [string]$referencedFileName, - [string]$currentDir, - [string]$root - ) - - # Candidate locations relative to current file and repo - $candidates = @() - $candidates += Join-Path $currentDir "..\reference\$referencedFileName" - $candidates += Join-Path $currentDir "..\api\$referencedFileName" - $candidates += Join-Path $root "articles\LCPublicAPI\api\$referencedFileName" - $candidates += Join-Path $root "articles\Extensibility\api\$referencedFileName" - - foreach ($c in $candidates) { - try { - $p = Resolve-Path -Path $c -ErrorAction Stop - if ($p) { return $p.Path } - } catch { } - } - - return $null -} - -function Get-JsonPointerPath { - param([string]$pointer) - # pointer segments are separated by /; ~1 -> /, ~0 -> ~ - $seg = $pointer -split '/' - $decoded = ($seg | ForEach-Object { $_ -replace '~1', '/' -replace '~0','~' }) -join '/' - return $decoded -} - -function Get-OperationIdFromJson { - param( - [object]$jsonObj, - [string]$jsonPointer, - [string]$method - ) - # $jsonPointer is like 'paths/~1files~1{fileId}~1versions~1{fileVersionId}~1download' - $pathKey = $jsonPointer -replace '^paths/','' - # decode ~1 and ~0 - $pathKeyDecoded = ($pathKey -split '/').ForEach({ $_ -replace '~1','/' -replace '~0','~' }) -join '/' - if ($jsonObj.paths -and $jsonObj.paths.PSObject.Properties.Name -contains $pathKeyDecoded) { - $pathObj = $jsonObj.paths.$($pathKeyDecoded) - if ($null -ne $pathObj) { - $methodLower = $method.ToLower() - if ($pathObj.PSObject.Properties.Name -contains $methodLower) { - $op = $pathObj.$methodLower.operationId - if ($op) { return $op } - } - } - } - return $null -} - -function Get-SchemaNameFromJsonPointer { - param([string]$pointer) - # pointer like components/schemas/MySchema - if ($pointer -match '^components/schemas/(.+)$') { return $Matches[1] } - return $null -} - -if ($Contract) { - $contractFiles = @((Resolve-Path -Path $Contract).Path) -} else { - $dirs = @( - "$Root\articles\Extensibility\api", - "$Root\articles\LCPublicAPI\api" - ) - $contractFiles = @() - foreach ($d in $dirs) { - if (Test-Path $d) { - $contractFiles += Get-ChildItem -Path $d -Filter '*.json' -File -Recurse | Select-Object -ExpandProperty FullName - } - } -} - -if (-not $contractFiles -or $contractFiles.Count -eq 0) { - Write-Error "No contract files found to process. Provide -Contract or ensure API folders exist under articles/." - exit 1 -} - -$report = @() - -foreach ($cf in $contractFiles) { - Write-Host "Processing: $cf" - $origContent = Get-Content -Raw -Path $cf -Encoding UTF8 - $newContent = $origContent - $currentDir = Split-Path -Path $cf -Parent - $jsonObj = $null - try { $jsonObj = $origContent | ConvertFrom-Json -ErrorAction Stop } catch { } - - # find markdown links [text](url) - $linkPattern = '\[([^\]]+)\]\(([^)]+)\)' - $linkMatches = [regex]::Matches($origContent, $linkPattern) - foreach ($m in $linkMatches) { - $fullMatch = $m.Value - $text = $m.Groups[1].Value - $url = $m.Groups[2].Value - - # Skip absolute URLs (http, https, mailto) - if ($url -match '^(https?:|mailto:|#)') { continue } - - $newUrl = $null - - # Case 1: .md -> .html - if ($url -match '\.md(\#.*)?$') { - $newUrl = $url -replace '\.md(\#.*)?$','.html$1' - $report += [pscustomobject]@{ File = $cf; Old = $url; New = $newUrl; Reason = '.md -> .html' } - } - - # Case 2: reference or api JSON paths - elseif ($url -match '^(?:\.\./)?(?:reference|api)/(?[^/]+\.json)/(?.+)$') { - $refFile = $Matches['file'] - $rest = $Matches['rest'] - - # locate referenced json file on disk - $resolved = Resolve-ReferencedJsonFile -referencedFileName $refFile -currentDir $currentDir -root $Root - if (-not $resolved) { - Write-Warning "Referenced JSON not found: $refFile (in $cf)" - continue - } - - # load referenced json object - try { - $refJsonText = Get-Content -Raw -Path $resolved -Encoding UTF8 - $refObj = $refJsonText | ConvertFrom-Json -ErrorAction Stop - } catch { - Write-Warning "Failed to parse referenced JSON: $resolved" - continue - } - - # determine if referenced file is the same as current contract - $isLocalContract = ($resolved -eq (Resolve-Path -Path $cf).Path) - - if ($rest -like 'paths/*') { - # rest format: paths/~1something~1foo/post - $parts = $rest -split '/' - # last segment is method - $method = $parts[-1] - $pointer = ($parts[0..($parts.Length-2)] -join '/') - - # try to get operationId - $opId = Get-OperationIdFromJson -jsonObj $refObj -jsonPointer $pointer -method $method - if (-not $opId) { - Write-Warning "OperationId not found for $url in $resolved" - continue - } - - if ($isLocalContract) { - $newUrl = "#/operations/$opId" - } else { - # compute relative path from current file to referenced file's folder - $refDir = Split-Path -Path $resolved -Parent - $refHtmlFile = [System.IO.Path]::Combine($refDir, ([System.IO.Path]::GetFileNameWithoutExtension($refFile) + '-fv.html')) - # create a relative path using URI trick - $fromUri = (Get-Item $currentDir).FullName.TrimEnd('\') + '\' - $toUri = (Get-Item $refHtmlFile).FullName - $uriFrom = New-Object System.Uri($fromUri) - $uriTo = New-Object System.Uri($toUri) - $rel = $uriFrom.MakeRelativeUri($uriTo).ToString() -replace '/','\' - # convert Windows backslashes to forward slashes for markdown - $rel = $rel -replace '\\','/' - $newUrl = "$rel#\/operations\/$opId" - # remove escapes inserted above - $newUrl = $newUrl -replace '\\/', '/' - } - - $report += [pscustomobject]@{ File = $cf; Old = $url; New = $newUrl; Reason = 'paths -> operationId' } - } - - elseif ($rest -like 'components/schemas/*') { - $schema = $rest -replace '^components/schemas/','' - if ($isLocalContract) { - $newUrl = "#/schemas/$schema" - } else { - $refDir = Split-Path -Path $resolved -Parent - $refHtmlFile = [System.IO.Path]::Combine($refDir, ([System.IO.Path]::GetFileNameWithoutExtension($refFile) + '-fv.html')) - $fromUri = (Get-Item $currentDir).FullName.TrimEnd('\') + '\' - $toUri = (Get-Item $refHtmlFile).FullName - $uriFrom = New-Object System.Uri($fromUri) - $uriTo = New-Object System.Uri($toUri) - $rel = $uriFrom.MakeRelativeUri($uriTo).ToString() -replace '/','\\' - $rel = $rel -replace '\\','/' - $newUrl = "$rel#\/schemas\/$schema" - $newUrl = $newUrl -replace '\\/', '/' - } - $report += [pscustomobject]@{ File = $cf; Old = $url; New = $newUrl; Reason = 'components/schemas -> schema' } - } - - else { - # Not handled pointer type - continue - } - } - - if ($newUrl) { - # literal replace the url inside the JSON content - $escapedOld = [Regex]::Escape($url) - # Replace only the exact markdown link target inside parentheses to avoid accidental replacements elsewhere - $patternFull = "(\[" + [Regex]::Escape($text) + "\]\()" + $escapedOld + "\)" - $replacement = "`$1" + $newUrl + ")" - # fallback simple replace if above fails - if ($newContent -match [regex]::Escape($fullMatch)) { - $newContent = $newContent -replace [regex]::Escape($fullMatch), "[$text]($newUrl)" - } else { - $newContent = $newContent -replace $patternFull, $replacement - } - } - } - - if ($newContent -ne $origContent) { - Write-Host "Preview (no write): $cf" - # print replacements for this file - $report | Where-Object { $_.File -eq $cf } | ForEach-Object { Write-Host " $($_.Old) -> $($_.New)" } - - if ($Force) { - Set-Content -Path $cf -Value $newContent -Encoding UTF8 - Write-Host "Wrote changes to $cf" - } - } -} - -# summary -$grouped = $report | Group-Object -Property File -foreach ($g in $grouped) { - Write-Host "File: $($g.Name) - Changes: $($g.Count)" -} - -if (-not $Force) { Write-Host "Processed $($contractFiles.Count) files. Use -Force to apply changes." } diff --git a/scripts/convert-reference-links.ps1 b/scripts/convert-reference-links.ps1 deleted file mode 100644 index cd01f52..0000000 --- a/scripts/convert-reference-links.ps1 +++ /dev/null @@ -1,169 +0,0 @@ -<# -.SYNOPSIS - Convert ../reference/*.json links in markdown files to ../api/*-fv.html links. - -.DESCRIPTION - Scans all markdown files under articles/LCPublicAPI/docs and finds links that - reference JSON files under ../reference/. It converts two types of references: - - - paths -> operations: ../reference/.json/paths/~1path~1sub/get - becomes ../api/-fv.html#/operations/# - - - components/schemas -> schemas: ../reference/.json/components/schemas/ - becomes ../api/-fv.html#/schemas/# - - By default the script runs in preview mode and only prints proposed replacements. - Use -Force to apply changes to files. - -.PARAMETER Root - Root path of the repository. Defaults to the current working directory. - -.PARAMETER Force - Apply changes. If not specified the script only shows a preview. - -.EXAMPLE - # preview - .\convert-reference-links.ps1 - - # apply changes - .\convert-reference-links.ps1 -Force -#> - -param( - [string]$Root = (Get-Location).Path, - [switch]$Force -) - -Write-Host "Root: $Root" - -$docsDir = Join-Path $Root 'articles\LCPublicAPI\docs' -if (-not (Test-Path $docsDir)) { - Write-Error "Docs directory not found: $docsDir" - exit 1 -} - -$mdFiles = Get-ChildItem -Path $docsDir -Recurse -Include *.md -File -if ($mdFiles.Count -eq 0) { - Write-Host "No markdown files found under $docsDir" - exit 0 -} - -$linkPattern = '\.\./reference/(?[^/\\)]+)\.json/(?[^)\s]+)' -$regex = [regex]$linkPattern - -$summary = [System.Collections.Generic.List[psobject]]::new() - -foreach ($md in $mdFiles) { - $content = Get-Content -Raw -Path $md.FullName -ErrorAction Stop - $mMatches = $regex.Matches($content) - if ($mMatches.Count -eq 0) { continue } - - $newContent = $content - $fileChanges = [System.Collections.Generic.List[string]]::new() - - foreach ($m in $mMatches) { - $orig = $m.Value - $fileName = $m.Groups['file'].Value - $rest = $m.Groups['rest'].Value - - $newUrl = $null - - if ($rest -like 'paths/*') { - # expected format: paths// - $parts = $rest -split '/' | Where-Object { $_ -ne '' } - # remove the leading 'paths' - if ($parts.Count -lt 3) { continue } - $parts = $parts[1..($parts.Count - 1)] - $method = $parts[-1].ToLower() - $encPathParts = $parts[0..($parts.Count - 2)] - $encodedPointer = ($encPathParts -join '/') - # decode JSON Pointer escaping ~1 -> / and ~0 -> ~ - $decodedPath = $encodedPointer -replace '~1','/' -replace '~0','~' - - $refJsonPath = Join-Path $Root "articles\LCPublicAPI\reference\$fileName.json" - if (-not (Test-Path $refJsonPath)) { - # try the api folder as some sources place the json files under articles/LCPublicAPI/api - $apiJsonPath = Join-Path $Root "articles\LCPublicAPI\api\$fileName.json" - if (Test-Path $apiJsonPath) { - Write-Host "Info: using API JSON fallback: $apiJsonPath (for $fileName.json in $($md.FullName))" - $refJsonPath = $apiJsonPath - } - else { - Write-Warning "Referenced JSON not found: $refJsonPath (in $($md.FullName))" - continue - } - } - - try { - $json = Get-Content -Raw -Path $refJsonPath | ConvertFrom-Json -ErrorAction Stop - } - catch { - Write-Warning "Failed to parse JSON: $refJsonPath" - continue - } - - $pathObj = $null - if ($json.paths -and $json.paths.PSObject.Properties.Name -contains $decodedPath) { - $pathObj = $json.paths.PSObject.Properties[$decodedPath].Value - } - else { - # no exact match; try a best-effort find using replacement of '{' '}' to parameter name - $alt = $json.paths.PSObject.Properties.Name | Where-Object { $_ -replace '[{}]','' -eq ($decodedPath -replace '[{}]','') } - if ($alt) { $pathObj = $json.paths.PSObject.Properties[$alt].Value } - } - - $operationId = $null - if ($null -ne $pathObj) { - if ($pathObj.PSObject.Properties.Name -contains $method) { - $op = $pathObj.PSObject.Properties[$method].Value - if ($op -and $op.operationId) { $operationId = $op.operationId } - } - } - - if (-not $operationId) { - # fallback: create a slug-like id from method + path - $slug = ($method + '-' + ($decodedPath -replace '[^0-9A-Za-z]','-')).Trim('-') - $operationId = $slug - Write-Host "Warning: operationId not found for $fileName.json $decodedPath $method. Falling back to $operationId" - } - - # build new URL using fragment format '#/operations/' - $newUrl = "../api/$fileName-fv.html#/operations/$operationId" - } - elseif ($rest -like 'components/schemas/*') { - # schema name is the last segment - $parts = $rest -split '/' - $schema = $parts[-1] - $newUrl = "../api/$fileName-fv.html#/schemas/$schema" - } - else { - continue - } - - if ($newUrl) { - # literal replace the matched path portion to avoid regex escape issues - $newContent = $newContent.Replace($orig, $newUrl) - $fileChanges.Add("$orig -> $newUrl") - } - } - - if ($fileChanges.Count -gt 0) { - $summary.Add([pscustomobject]@{ File = $md.FullName; Changes = $fileChanges }) - if ($Force) { - Set-Content -Path $md.FullName -Value $newContent -Encoding UTF8 - Write-Host "Updated: $($md.FullName)" - } - else { - Write-Host "Preview (no write): $($md.FullName)" - foreach ($c in $fileChanges) { Write-Host " $c" } - } - } -} - -# Summary -if ($summary.Count -eq 0) { - Write-Host "No links matched the pattern." -} -else { - Write-Host "Processed $($summary.Count) files. Use -Force to apply changes." -} From 783b9cee1b1791f5242087d2bda952aba9a37b1b Mon Sep 17 00:00:00 2001 From: Mihai Dipsan Date: Thu, 6 Nov 2025 11:36:15 +0200 Subject: [PATCH 18/19] Update style for Extensibility notes --- .../Extensibility/docs/appManagement/Approvals.md | 2 ++ .../Extensibility/docs/appManagement/Installing.md | 1 + .../Extensibility/docs/appManagement/Publishing.md | 1 + .../Extensibility/docs/appManagement/Retiring.md | 1 + articles/Extensibility/docs/appManagement/Sharing.md | 1 + .../consumer/Automatic-Task-App-consumer-guide.md | 3 +++ .../docs/consumer/MT-App-consumer-guide.md | 3 +++ .../Extensibility/docs/development/App-Descriptor.md | 7 ++++++- .../docs/development/Deployment-Strategy.md | 1 + .../Extensibility/docs/development/Multi-Region.md | 12 ++++++++---- .../docs/development/Request-Authentication.md | 1 + .../docs/development/UI-App-development-guide.md | 11 +++++------ articles/Extensibility/docs/development/Webhooks.md | 3 ++- .../blueprints/Dot-Net-Migration-Blueprint.md | 1 + .../blueprints/Java-Migration-Blueprint.md | 1 + .../development/blueprints/Testing-with-Docker.md | 3 ++- .../docs/development/blueprints/Testing.md | 3 ++- 17 files changed, 41 insertions(+), 14 deletions(-) diff --git a/articles/Extensibility/docs/appManagement/Approvals.md b/articles/Extensibility/docs/appManagement/Approvals.md index b464bb0..a345ff9 100644 --- a/articles/Extensibility/docs/appManagement/Approvals.md +++ b/articles/Extensibility/docs/appManagement/Approvals.md @@ -15,6 +15,7 @@ focus: false --> ![Comment](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/extensibility/app-management/Comment.gif?raw=true) +> [!NOTE] > This is not a live chat, and you should refresh to check for replies. However, you don't need to keep an eye on it always, as we have email notifications in place for both roles: the developer and the support team member. The comments panel is also used to track the **approval requests**. These requests can only be triggered by the app's developer in one of the following scenarios: @@ -37,6 +38,7 @@ The **Approval Process** ends with one of the following: 1. The request is **approved** or **rejected** by the RWS Support team. 2. The request is **canceled** by the developer. +> [!NOTE] > During the Approval Process you can still use your app as usual. ## App Suspended diff --git a/articles/Extensibility/docs/appManagement/Installing.md b/articles/Extensibility/docs/appManagement/Installing.md index c258bd8..f8ee9d1 100644 --- a/articles/Extensibility/docs/appManagement/Installing.md +++ b/articles/Extensibility/docs/appManagement/Installing.md @@ -25,4 +25,5 @@ focus: false --> ![Install](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/extensibility/app-management/InstallApp.gif?raw=true) +> [!NOTE] > The configuration settings can be modified anytime by clicking the **Edit App Configuration** button. \ No newline at end of file diff --git a/articles/Extensibility/docs/appManagement/Publishing.md b/articles/Extensibility/docs/appManagement/Publishing.md index a8b810c..37eb698 100644 --- a/articles/Extensibility/docs/appManagement/Publishing.md +++ b/articles/Extensibility/docs/appManagement/Publishing.md @@ -20,4 +20,5 @@ focus: false --> ![Publish](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/extensibility/app-management/Publish.gif?raw=true) +> [!NOTE] > Publishing a private app will always publish its latest version. \ No newline at end of file diff --git a/articles/Extensibility/docs/appManagement/Retiring.md b/articles/Extensibility/docs/appManagement/Retiring.md index 471a918..6d80b95 100644 --- a/articles/Extensibility/docs/appManagement/Retiring.md +++ b/articles/Extensibility/docs/appManagement/Retiring.md @@ -27,6 +27,7 @@ focus: false After the app becomes private, the only active instances left should be the developer's one and the shared ones (if the app had been previously shared). You can either uninstall them manually or unregister the app directly. The second option will automatically uninstall the instances left, before removing the app. +> [!NOTE] > An app can only be deleted when there are no other installed instances. To unregister the app, you need to: diff --git a/articles/Extensibility/docs/appManagement/Sharing.md b/articles/Extensibility/docs/appManagement/Sharing.md index 65b6a19..30ade2e 100644 --- a/articles/Extensibility/docs/appManagement/Sharing.md +++ b/articles/Extensibility/docs/appManagement/Sharing.md @@ -18,4 +18,5 @@ focus: false --> ![Share](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/extensibility/app-management/Share.gif?raw=true) +> [!NOTE] > The number of sharing links and shared installed instances is restricted by the sharing benefit quota from your account subscription. \ No newline at end of file diff --git a/articles/Extensibility/docs/consumer/Automatic-Task-App-consumer-guide.md b/articles/Extensibility/docs/consumer/Automatic-Task-App-consumer-guide.md index 3b8d905..15453bd 100644 --- a/articles/Extensibility/docs/consumer/Automatic-Task-App-consumer-guide.md +++ b/articles/Extensibility/docs/consumer/Automatic-Task-App-consumer-guide.md @@ -35,6 +35,7 @@ To benefit from the app's functionality, you first have to install it on your ac Some apps also support validation of the configured settings. The first validation is automatically performed at installation time. If the provided settings are invalid, you will be prompted with an error message letting you know that the settings are incorrect. +> [!NOTE] > The configuration settings can be modified at any time by clicking the **Edit App Configuration** button. ## Using the Automatic Task App @@ -59,6 +60,7 @@ To use the app's automatic task(s) within your projects, first, you will need a 5. Click **Save configurations** and complete your template. 6. When finished, click **Save & Activate**. +> [!NOTE] > The above illustrations are based on a template draft. You may need to create the new template from scratch. ### Creating a New Workflow @@ -82,4 +84,5 @@ After creating the project, you can track the progress in the **Task History** t ![AutomaticTaskProjectHistory](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/extensibility/guides/consumer/ConsumerATTaskHistory-app.png?raw=true) +> [!NOTE] > The app task illustrated above is just a mockup task that does not have a real purpose. \ No newline at end of file diff --git a/articles/Extensibility/docs/consumer/MT-App-consumer-guide.md b/articles/Extensibility/docs/consumer/MT-App-consumer-guide.md index 194d547..958feeb 100644 --- a/articles/Extensibility/docs/consumer/MT-App-consumer-guide.md +++ b/articles/Extensibility/docs/consumer/MT-App-consumer-guide.md @@ -26,6 +26,7 @@ To benefit from the app's functionality first you have to install it on your acc Some apps also support validation of the configured settings. The first validation is automatically performed at installation time. If the provided settings are invalid, you will be prompted with an error message letting you know that the settings are incorrect. +> [!NOTE] > The configuration settings can be modified at any time by clicking the **Edit App Configuration** button. ## Using the Machine Translation App @@ -62,10 +63,12 @@ To create a **Project** with the new resources you can either have them in a **P ![MTProject](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/extensibility/guides/consumer/ConsumerCreateMTAppProject.gif?raw=true) +> [!NOTE] > The project language pair also has to match the ones from the engine and the workflow. Once the project reaches the **Translation** step, you can open it in **Online Editor** and check the translated segments from the MT app. You also have the possibility to search for Lookups in order to receive alternative translations. ![OEtranslations](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/extensibility/guides/MTAppOELookup.gif?raw=true) +> [!NOTE] > The translations illustrated above are just some demonstrative mock-ups. \ No newline at end of file diff --git a/articles/Extensibility/docs/development/App-Descriptor.md b/articles/Extensibility/docs/development/App-Descriptor.md index 4d22ddf..b464343 100644 --- a/articles/Extensibility/docs/development/App-Descriptor.md +++ b/articles/Extensibility/docs/development/App-Descriptor.md @@ -42,7 +42,7 @@ When updating the host, you also have to update `baseUrl` to match the new host. You must still support old host as all previous installs will be calling on the `baseUrl` at the installed version. In order to be able to decomission the old host, you must make sure all consumers updated their installs to latest version. - +> [!WARNING] > Because request authentication is based on Audience matching 'baseUrl', you must ensure that your authentication code can accept both old and new `baseUrl`. See [Request Authentication](Request-Authentication.md). ## Standard Endpoints @@ -58,6 +58,7 @@ Standard endpoints are defined under the `Standard` tag. The actual path should Additionally, in the `standardEnpoints` section we can find the lifecycle endpoint. This endpoint needs to handle different events sent by Trados (similar to webhooks). For instance, when the app is being installed on a certain account, Trados will send an `INSTALLED` event along with some data for that account. The app should react and save the received data. - `appLifecycle` - is used for all types of events: `REGISTERED`, `UNREGISTERED`, `INSTALLED`, and `UNINSTALLED`. See the contract [here](../../api/Extensibility-API.v1-fv.html#/operations/Lifecycle). +> [!NOTE] > If your app is built from our blueprints, you shouldn't have to change anything, as these endpoints work out of the box. ## Extensions @@ -96,6 +97,7 @@ Read more on how to define the extensions for your app in our development guides An app can request configuration details at installation time (and it can be edited later). +> [!NOTE] > On an update, new configuration settings can be added, and the user will be requested to enter the newer configuration values. Configurations are app scoped. If you need to assign configuration values for individual extensions within the app, use clear and explicit naming conventions so users understand what information to input into each field. Additionally, tooltips can be provided by setting the description attribute. @@ -121,6 +123,8 @@ Example: ... } ``` + +> [!NOTE] > Note that in the example the `optional` and `defaultValue` properties have not been specified, so these will be set to their default values, as specified in the contract ( false for `optional` and undefined for `defaultValue`). Moreover, you have the option to define a list of choices using the `options` field. When this field is filled, the values will be presented in a dropdown menu. It's important to note that the only acceptable `dataType` in this scenario is `string`. @@ -134,6 +138,7 @@ The scopes advised in the descriptor will be presented to the consumers during i Once access is granted, the app will be able to perform authorized requests to the Trados Cloud Platform API. +> [!NOTE] > If the app doesn't make requests to Trados Cloud Platform API, no scopes should be specified. ## Webhooks diff --git a/articles/Extensibility/docs/development/Deployment-Strategy.md b/articles/Extensibility/docs/development/Deployment-Strategy.md index 83ed4d8..b6b0166 100644 --- a/articles/Extensibility/docs/development/Deployment-Strategy.md +++ b/articles/Extensibility/docs/development/Deployment-Strategy.md @@ -18,6 +18,7 @@ We suggest using a distinctive **development name** and **description** to diffe ![RegisterPreview](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/extensibility/guides/developer/RegisterPreview.gif?raw=true) +> [!NOTE] > Make sure you use a **descriptor URL** different from the one you need for the live instance. You cannot register two apps with the same descriptor URL. ## The Live Instance diff --git a/articles/Extensibility/docs/development/Multi-Region.md b/articles/Extensibility/docs/development/Multi-Region.md index 4458dbf..fc3dd7d 100644 --- a/articles/Extensibility/docs/development/Multi-Region.md +++ b/articles/Extensibility/docs/development/Multi-Region.md @@ -9,14 +9,15 @@ To fulfill the requirements of our customers, Trados Enterprise allows multi-reg To enable multi-region on your app you must provide regional instances of your app and include their `regionalBaseUrls` in your [descriptor](../../api/Extensibility-API.v1-fv.html#/operations/descriptor). +> [!NOTE] > Multi-Region is only supported on apps starting with `decriptorVersion: 1.4` - +> [!WARNING] > Please note that the responsibility for ensuring region-specific URLs lies with the developer. The URLs should accurately reflect the physical location of the instances. Currently, the supported regions are Europe(`eu`) and Canada(`ca`). Depending on where your app is deployed you can choose either one or both of them. This will tell Trados what endpoints to invoke based on where the consumer tenant is living. - +> [!WARNING] > All instances, in all regions should provide the exact same descriptor. ## Installing an App with Multi-Region support @@ -27,7 +28,7 @@ If your app does not provide the region where the consumer tenant belongs, the c ![RegionalInstall](https://github.com/RWS/language-cloud-public-api-doc-resources/blob/main/extensibility/guides/developer/RegionalInstallPopupNew.png?raw=true) - +> [!WARNING] > Once installed globally, if the app adds support for a new region, the consumers will have to reinstall it to change the region. The `INSTALLED` lifecycle event now includes the region information for the account where the app is installed so you can save it in the database and use it to identify to which regions calls should be made (for ex. which region/url to use for Public API). That is already implemented in the provided [Java](https://github.com/RWS/language-cloud-extensibility/tree/main/blueprints/javaAppBlueprint) and [.NET](https://github.com/RWS/language-cloud-extensibility/tree/main/blueprints/dotNetAppBlueprint) blueprints. @@ -36,7 +37,7 @@ The `INSTALLED` lifecycle event now includes the region information for the acco The `baseUrl` property from [descriptor](../../api/Extensibility-API.v1-fv.html#/operations/descriptor) remains mandatory even if you add the `regionalBaseUrls` property(which is optional). - +> [!WARNING] > The `baseUrl` in your app should stay fixed and not change based on region. When an App is registered, `baseUrl` from that initial descriptor is used for setting audience for all future authentication requests, independent of regions (it is possible to change it later, see [Changing Base URL](App-Descriptor.md#changing-base-url). Your "multi-region descriptor" should look something like this: @@ -51,12 +52,15 @@ Your "multi-region descriptor" should look something like this: //.. } ``` + +> [!NOTE] > It is also acceptable to have the same URL in `baseUrl` as for one of regions in your `regionalBaseUrls` property. The `baseUrl` is treated as a global region URL and is still used in the following scenarios even if `regionalBaseUrls` is also defined: 1. Health checks - the `/health` endpoint that is periodically invoked to check the health status of your app 2. Version checks - the `/descriptor` endpoint that is periodically invoked to check for new versions(by the `version` property). + > [!NOTE] > It is the developer's responsibility to keep the version of the regional instances in sync. 3. `UPDATED` lifecycle event - explained below in the [Special Case](#special-case) section. diff --git a/articles/Extensibility/docs/development/Request-Authentication.md b/articles/Extensibility/docs/development/Request-Authentication.md index 056297e..9425ea8 100644 --- a/articles/Extensibility/docs/development/Request-Authentication.md +++ b/articles/Extensibility/docs/development/Request-Authentication.md @@ -8,6 +8,7 @@ All but a few of the endpoints are required to check for valid Authentication. T Trados might send the Authorization header even on the endpoints that do not need authentication, but the app is not required to validate them. If the header is sent, the app should either ignore it or validate it. But if the token is not valid, then this should result in a 401/403 result. +> [!NOTE] > Note: the provided blueprints (both Java and .NET Core) have authentication implemented and working out of the box. You can skip the rest of this document unless you're interested in the technical details. ## Authorization header diff --git a/articles/Extensibility/docs/development/UI-App-development-guide.md b/articles/Extensibility/docs/development/UI-App-development-guide.md index bc080e4..1b3ba36 100644 --- a/articles/Extensibility/docs/development/UI-App-development-guide.md +++ b/articles/Extensibility/docs/development/UI-App-development-guide.md @@ -7,8 +7,7 @@ tags: [Development] UI extensions offer the possibility to add custom user interface elements and functionality. Custom [buttons and panels can be added to specific places](UI-App-custom-elements-locations.md) within the user interface. - - +> [!CAUTION] > #### This feature is currently in BETA. > Please note that in a future phase, we will introduce significant changes as we move towards the official release: > * The current implementation utilizes the authorization token of the logged-in Trados user for the Trados Cloud Platform API and the app's own API calls. In a future update, a different authorization token will be introduced for these operation. @@ -62,6 +61,7 @@ If you don't already have Node.js installed, you can download the most recent LT ## Getting started +> [!NOTE] > Make sure you are familiar with Trados app development and testing presented in the [Getting Started with Blueprints](blueprints/Getting-Started.md) and [Testing](blueprints/Testing.md) articles. 1. Download the [.NET sample app which contains a UI extension](https://github.com/RWS/language-cloud-extensibility/tree/main/samples/dotnet/UISampleApp). @@ -90,6 +90,7 @@ If you don't already have Node.js installed, you can download the most recent LT - You can change the `my-ui-extension-script.js` file name by editing - the `module.exports`' `output.filename` property in `Rws.LC.UISampleApp/Resources/frontend/webpack.config.js` and - the extension's configuration `scriptPath` field. + > [!NOTE] > If your app is already registered, after changing the extension's configuration `scriptPath` field you need to [update](../appManagement/Updating.md) your app to a new version. - Once you have built your new JavaScript file, refresh the Trados browser tab to see your changes. @@ -234,15 +235,13 @@ Note that adding `script` tags is not allowed and scripts from sources that are ### Notes - - +> [!NOTE] > #### Custom elements display order > Within a single UI extension: custom elements in your extension that have the same `location` are displayed in the same order in which they are present in your `ExtensionElement`s array. > > With multiple UI extensions: the display order is determined by the order in which each UI extension's script file is loaded in the Trados UI. - - +> [!NOTE] > #### Unexpected re-renders > A custom element's `onrender` event can be triggered multiple times depending on state changes in the Trados UI and depending on user's interactions with Trados UI. Subsequently, the corresponding `eventHandler` gets executed multiple times. You can add logic specific to you use-case to protect your UI extension against unneeded execution of `onrender` `eventHandler`. \ No newline at end of file diff --git a/articles/Extensibility/docs/development/Webhooks.md b/articles/Extensibility/docs/development/Webhooks.md index cd5c759..38fdf6d 100644 --- a/articles/Extensibility/docs/development/Webhooks.md +++ b/articles/Extensibility/docs/development/Webhooks.md @@ -11,7 +11,7 @@ Apps can specify a list of webhooks that will be registered automatically when t Not all accounts have webhooks enabled. Installing of the app requiring webhooks will be disabled (grayed out in UI) on accounts that don't have webhooks enabled. - +> [!WARNING] > Webhooks require one of the following [scopes](./Trados-Cloud-API.md#scopes) to be delivered: `TENANT` or `TENANT_READ`. ## Setup @@ -52,6 +52,7 @@ The webhook payload description can be found in our [Trados Cloud Platform API d Webhooks are grouped in batches by callback URL, so it is likely that events from different tenants will be included in the same batch. It is the responsability of the app developer to handle the events from the batch accordingly to their `accountId` from the event body. +> [!NOTE] > **Note:** For *Webhook Authenticity*, ignore the described behavior in the above link and only consider the following chapter about *Signature Validation*. diff --git a/articles/Extensibility/docs/development/blueprints/Dot-Net-Migration-Blueprint.md b/articles/Extensibility/docs/development/blueprints/Dot-Net-Migration-Blueprint.md index e1ee3e3..caa6a2d 100644 --- a/articles/Extensibility/docs/development/blueprints/Dot-Net-Migration-Blueprint.md +++ b/articles/Extensibility/docs/development/blueprints/Dot-Net-Migration-Blueprint.md @@ -12,6 +12,7 @@ There are a couple of main points to consider when doing the upgrade: First and foremost you'll need to change the `descriptorVersion` field to `1.4` in the descriptor JSON. This is the version that tells Trados Enterprise that your add-on has became an app and needs to be handled accordingly. +> [!NOTE] > In addition to `descriptorVersion`, the `version` field also needs to be updated to signal Trados Enterprise that there's a new descriptor available, as per usual. ### App Lifecycle Endpoint diff --git a/articles/Extensibility/docs/development/blueprints/Java-Migration-Blueprint.md b/articles/Extensibility/docs/development/blueprints/Java-Migration-Blueprint.md index d5fe941..b8ac051 100644 --- a/articles/Extensibility/docs/development/blueprints/Java-Migration-Blueprint.md +++ b/articles/Extensibility/docs/development/blueprints/Java-Migration-Blueprint.md @@ -12,6 +12,7 @@ There are a couple of main points to consider when doing the upgrade: First and foremost you'll need to change the `descriptorVersion` field to `1.4` in the descriptor JSON. This is the version that tells Trados Enterprise that your add-on has became an app and needs to be handled accordingly. +> [!NOTE] > In addition to `descriptorVersion`, the `version` field also needs to be updated to signal Trados Enterprise that there's a new descriptor available, as per usual. ### App Lifecycle Endpoint diff --git a/articles/Extensibility/docs/development/blueprints/Testing-with-Docker.md b/articles/Extensibility/docs/development/blueprints/Testing-with-Docker.md index 690f1b4..c9e21fa 100644 --- a/articles/Extensibility/docs/development/blueprints/Testing-with-Docker.md +++ b/articles/Extensibility/docs/development/blueprints/Testing-with-Docker.md @@ -6,6 +6,7 @@ Before continuing here, we recommend reading the [basic testing guide](./Testing The only additional prerequisite to Ngrok and MongoDB (which we mention in the basic guide) is [Docker Desktop](https://www.docker.com/products/docker-desktop). You can find a setup guide [here](https://docs.docker.com/get-docker/). +> [!NOTE] > Please note that Docker Desktop is no longer free for large businesses. ## Docker files @@ -22,7 +23,7 @@ Before proceeding to run the app from a Docker container, there are a few config Because a Linux Docker container can be considered as a VM, and communicating from your container to your host machine cannot be done through localhost, you need to allow MongoDB connections on your machine IP, so that the application from your container can connect to it from an "external" machine. - +> [!WARNING] > This might open your database to access from outside your machine if your firewall is not configured correctly or installed. To configure your MongoDB follow these steps: diff --git a/articles/Extensibility/docs/development/blueprints/Testing.md b/articles/Extensibility/docs/development/blueprints/Testing.md index dbb8acb..f5bdfc1 100644 --- a/articles/Extensibility/docs/development/blueprints/Testing.md +++ b/articles/Extensibility/docs/development/blueprints/Testing.md @@ -77,6 +77,7 @@ You can find a quick guide on how to install and set up Ngrok [here](https://ngr 4. [Register](../../appManagement/Registering.md) the app in Trados using the URL provided by Ngrok. +> [!NOTE] > You can restart the app application anytime while running a Ngrok session, without having to start a new session. ## MongoDB @@ -117,7 +118,7 @@ You can edit the Mongo settings in the configuration files of the blueprints: ... ``` - +> [!WARNING] > If you decide to use a different database, you should also modify your code accordingly. If you plan to package your app into a Docker container, here is a dedicated article for [Testing with Docker](./Testing-with-Docker.md). \ No newline at end of file From 3d04b15229e1df4a16b88cbfe84c93ca5e9299b7 Mon Sep 17 00:00:00 2001 From: Mihai Dipsan Date: Thu, 6 Nov 2025 15:55:00 +0200 Subject: [PATCH 19/19] Fix broken link to BCM Fragment --- articles/Extensibility/api/Extensibility-API.v1.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/articles/Extensibility/api/Extensibility-API.v1.json b/articles/Extensibility/api/Extensibility-API.v1.json index 40efbe8..46b6a2d 100644 --- a/articles/Extensibility/api/Extensibility-API.v1.json +++ b/articles/Extensibility/api/Extensibility-API.v1.json @@ -2430,14 +2430,14 @@ "id": "8j8v4sxg1flul" }, "type": "object", - "description": "The fragment object is described here: https://developers.rws.com/languagecloud-api-docs/api/BCM/Sdl.Core.Bcm.BcmModel.Fragment.html", + "description": "The fragment object is described here: https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html", "properties": { "segmentId": { "type": "string" }, "fragment": { "type": "object", - "description": "This object represents a BCM fragment. The documentation for the BCM fragment can be found here: https://developers.rws.com/languagecloud-api-docs/api/BCM/Sdl.Core.Bcm.BcmModel.Fragment.html" + "description": "This object represents a BCM fragment. The documentation for the BCM fragment can be found here: https://developers.rws.com/languagecloud-api-docs/api/bcm/Sdl.Core.Bcm.BcmModel.Fragment.html" } } },