From 3f7ec0424275081d6dd7df37e97047de350bbc5c Mon Sep 17 00:00:00 2001 From: Hirotada Kobayashi Date: Tue, 11 Jun 2024 10:59:31 +0900 Subject: [PATCH] ## Added new features / Bug fixed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・スクリプト、サーバースクリプトにサイト名からサイトIDを取得する関数を追加。 ・ユーザのパスワードを生成する機能を追加。 ・サイト画像をキャッシュする機能を追加。 ・コンテナの公開ポートを80から8080へ修正。 ・サーバースクリプトのAddChoiceHashで「検索機能」を使用した場合に別カラムにも検索条件が適応される問題を解消。 ・グループのゴミ箱画面に「新規作成」ボタンが表示される問題を解消。 ・「API設定」画面でAPIキー削除後のメッセージが適切でない問題を解消。 ・ダッシュボード表示時のメニューに「ごみ箱」が表示される問題を解消。 ・「作業量」と「進捗率」の詳細設定画面において、利用できない「Null許容」チェックボックスが表示される問題を解消。 ・「テーブルの管理」の「ガイド」タブにおいて、ガイドの内容を削除しても削除した内容がプレビュー画面に残る問題を解消。 ・項目のアクセス制御において、無効化された組織・グループにもアクセス権が付与される問題を解消。 ・ダッシュボードパーツの「タイムライン」で、タイトル、内容欄に設定した項目名がユーザの言語を変更すると機能しない問題を解消。 ・プロセスの条件で組織のドロップダウンリストに「自分」を選択した際に正しく判定されない問題を解消。 ・サーバスクリプトのgroup.ContainsUserの実行結果が従来と異なる問題を解消。 ・新UIでサイトパッケージのエクスポートのダイアログ操作により表示崩れが発生する問題を解消。 ・新UIでダッシュボードのタイムラインに表示する内容のフォントサイズがCSSで変更できない問題を解消。 ・新UIの画面表示に関連する軽微な問題を解消。 --- Implem.CodeDefiner/Implem.CodeDefiner.csproj | 6 +- .../Implem.DefinitionAccessor.csproj | 6 +- Implem.DefinitionAccessor/Initializer.cs | 1 + .../Implem.DisplayAccessor.csproj | 6 +- Implem.Factory/Implem.Factory.csproj | 6 +- Implem.Libraries/Implem.Libraries.csproj | 8 +- .../Implem.ParameterAccessor.csproj | 6 +- Implem.ParameterAccessor/Parameters.cs | 1 + Implem.ParameterAccessor/Parts/OutputCache.cs | 8 + .../Parts/OutputCacheControl.cs | 8 + .../Parts/SecureCacheControl.cs | 2 +- Implem.ParameterAccessor/Parts/Security.cs | 1 + Implem.Pleasanter.sln | 18 -- .../Definition_Code/Model_Create_Body.txt | 1 - .../Template16_SiteSettingsTemplate.json | 8 +- .../Template17_SiteSettingsTemplate.json | 11 +- .../Displays/PasswordAutoGenerate.json | 34 ++++ .../App_Data/Parameters/OutputCache.json | 6 + .../App_Data/Parameters/Security.json | 1 + Implem.Pleasanter/App_Start/BundleConfig.cs | 1 + .../Controllers/Api/ItemsController.cs | 21 +++ .../Controllers/BinariesController.cs | 2 + .../Controllers/UsersController.cs | 15 ++ Implem.Pleasanter/Dockerfile | 23 ++- Implem.Pleasanter/Implem.Pleasanter.csproj | 17 +- .../Libraries/Extensions/MatchExtensions.cs | 27 ++- .../Libraries/HtmlParts/HtmlControls.cs | 3 +- .../Libraries/HtmlParts/HtmlNavigationMenu.cs | 4 +- .../Libraries/Responses/Displays.cs | 10 + .../Libraries/Server/SiteInfo.cs | 2 + .../Libraries/Server/SiteNameTree.cs | 175 ++++++++++++++++++ .../Libraries/Server/TenantCache.cs | 1 + .../ServerScriptModelApiItems.cs | 11 ++ .../ServerScripts/ServerScriptUtilities.cs | 31 ++++ .../Libraries/Settings/ColumnAccessControl.cs | 36 +++- .../Libraries/Settings/SiteSettings.cs | 21 ++- .../Models/Groups/GroupUtilities.cs | 4 +- Implem.Pleasanter/Models/Shared/_BaseModel.cs | 4 +- .../Models/Sites/SiteApiModel.cs | 1 + Implem.Pleasanter/Models/Sites/SiteModel.cs | 12 +- .../Models/Sites/SiteUtilities.cs | 59 +++++- .../Models/Users/UserUtilities.cs | 34 +++- Implem.Pleasanter/Startup.cs | 10 + Implem.Pleasanter/bundleconfig.json | 1 + Implem.Pleasanter/wwwroot/content/styles.css | 42 ++++- .../wwwroot/content/styles.min.css | 2 +- Implem.Pleasanter/wwwroot/scripts/_api.js | 6 +- Implem.Pleasanter/wwwroot/scripts/display.js | 7 + .../wwwroot/scripts/generatepassword.js | 42 +++++ Implem.Pleasanter/wwwroot/scripts/jqueryui.js | 1 + Implem.Pleasanter/wwwroot/scripts/markdown.js | 3 +- .../styles/plugins/themes/cerulean/custom.css | 32 +++- .../plugins/themes/green-tea/custom.css | 75 ++++++-- .../styles/plugins/themes/mandarin/custom.css | 75 ++++++-- .../styles/plugins/themes/midnight/custom.css | 80 ++++++-- Implem.Pleasanter/wwwroot/styles/site.css | 42 ++++- .../implem.TestAutomation.csproj | 14 +- Rds/Implem.IRds/Implem.IRds.csproj | 6 +- .../Implem.PostgreSql.csproj | 6 +- Rds/Implem.SqlServer/Implem.SqlServer.csproj | 6 +- docker-compose.dcproj | 19 ++ 61 files changed, 967 insertions(+), 154 deletions(-) create mode 100644 Implem.ParameterAccessor/Parts/OutputCache.cs create mode 100644 Implem.ParameterAccessor/Parts/OutputCacheControl.cs create mode 100644 Implem.Pleasanter/App_Data/Displays/PasswordAutoGenerate.json create mode 100644 Implem.Pleasanter/App_Data/Parameters/OutputCache.json create mode 100644 Implem.Pleasanter/Libraries/Server/SiteNameTree.cs create mode 100644 Implem.Pleasanter/wwwroot/scripts/generatepassword.js create mode 100644 docker-compose.dcproj diff --git a/Implem.CodeDefiner/Implem.CodeDefiner.csproj b/Implem.CodeDefiner/Implem.CodeDefiner.csproj index 5b4f95e3a..19429e0bb 100644 --- a/Implem.CodeDefiner/Implem.CodeDefiner.csproj +++ b/Implem.CodeDefiner/Implem.CodeDefiner.csproj @@ -5,9 +5,9 @@ net8.0 Copyright © Implem Inc 2014 - 2024 This program does the automatic code creation and merging of existing code based on the definition. Also it will make the configuration change of sql server database. - 1.4.4.0 - 1.4.4.0 - 1.4.4.0 + 1.4.5.0 + 1.4.5.0 + 1.4.5.0 Linux diff --git a/Implem.DefinitionAccessor/Implem.DefinitionAccessor.csproj b/Implem.DefinitionAccessor/Implem.DefinitionAccessor.csproj index d9c15fff8..dbc53e86e 100644 --- a/Implem.DefinitionAccessor/Implem.DefinitionAccessor.csproj +++ b/Implem.DefinitionAccessor/Implem.DefinitionAccessor.csproj @@ -3,9 +3,9 @@ net8.0 Copyright © Implem Inc 2014 - 2024 - 1.4.4.0 - 1.4.4.0 - 1.4.4.0 + 1.4.5.0 + 1.4.5.0 + 1.4.5.0 disable diff --git a/Implem.DefinitionAccessor/Initializer.cs b/Implem.DefinitionAccessor/Initializer.cs index 6076576e8..34443756c 100644 --- a/Implem.DefinitionAccessor/Initializer.cs +++ b/Implem.DefinitionAccessor/Initializer.cs @@ -134,6 +134,7 @@ public static void SetParameters() Parameters.Validation = Read(); Parameters.Dashboard = Read(); Parameters.GroupChildren = Read(); + Parameters.OutputCache = Read(); Parameters.Rds.SaConnectionString = Strings.CoalesceEmpty( Parameters.Rds.SaConnectionString, Environment.GetEnvironmentVariable($"{Parameters.Service.EnvironmentName}_Rds_SaConnectionString"), diff --git a/Implem.DisplayAccessor/Implem.DisplayAccessor.csproj b/Implem.DisplayAccessor/Implem.DisplayAccessor.csproj index af4bbd562..61a97c941 100644 --- a/Implem.DisplayAccessor/Implem.DisplayAccessor.csproj +++ b/Implem.DisplayAccessor/Implem.DisplayAccessor.csproj @@ -3,9 +3,9 @@ net8.0 Copyright © Implem Inc 2014 - 2024 - 1.4.4.0 - 1.4.4.0 - 1.4.4.0 + 1.4.5.0 + 1.4.5.0 + 1.4.5.0 disable diff --git a/Implem.Factory/Implem.Factory.csproj b/Implem.Factory/Implem.Factory.csproj index 41b1da8e5..08286c0f5 100644 --- a/Implem.Factory/Implem.Factory.csproj +++ b/Implem.Factory/Implem.Factory.csproj @@ -3,9 +3,9 @@ net8.0 Copyright © Implem Inc 2014 - 2024 - 1.4.4.0 - 1.4.4.0 - 1.4.4.0 + 1.4.5.0 + 1.4.5.0 + 1.4.5.0 disable diff --git a/Implem.Libraries/Implem.Libraries.csproj b/Implem.Libraries/Implem.Libraries.csproj index 792d42daf..46b979b37 100644 --- a/Implem.Libraries/Implem.Libraries.csproj +++ b/Implem.Libraries/Implem.Libraries.csproj @@ -3,14 +3,14 @@ net8.0 Copyright © Implem Inc 2014 - 2024 - 1.4.4.0 - 1.4.4.0 - 1.4.4.0 + 1.4.5.0 + 1.4.5.0 + 1.4.5.0 disable - + diff --git a/Implem.ParameterAccessor/Implem.ParameterAccessor.csproj b/Implem.ParameterAccessor/Implem.ParameterAccessor.csproj index 300895a9f..35bfb5e50 100644 --- a/Implem.ParameterAccessor/Implem.ParameterAccessor.csproj +++ b/Implem.ParameterAccessor/Implem.ParameterAccessor.csproj @@ -3,9 +3,9 @@ net8.0 Copyright © Implem Inc 2014 - 2024 - 1.4.4.0 - 1.4.4.0 - 1.4.4.0 + 1.4.5.0 + 1.4.5.0 + 1.4.5.0 disable diff --git a/Implem.ParameterAccessor/Parameters.cs b/Implem.ParameterAccessor/Parameters.cs index ea695c35a..d2a53ac92 100644 --- a/Implem.ParameterAccessor/Parameters.cs +++ b/Implem.ParameterAccessor/Parameters.cs @@ -56,6 +56,7 @@ public static class Parameters public static Validation Validation; public static Dashboard Dashboard; public static GroupChildren GroupChildren; + public static OutputCache OutputCache; public static bool CommercialLicense() { diff --git a/Implem.ParameterAccessor/Parts/OutputCache.cs b/Implem.ParameterAccessor/Parts/OutputCache.cs new file mode 100644 index 000000000..b6c0c5196 --- /dev/null +++ b/Implem.ParameterAccessor/Parts/OutputCache.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; +namespace Implem.ParameterAccessor.Parts +{ + public class OutputCache + { + public OutputCacheControl OutputCacheControl; + } +} diff --git a/Implem.ParameterAccessor/Parts/OutputCacheControl.cs b/Implem.ParameterAccessor/Parts/OutputCacheControl.cs new file mode 100644 index 000000000..6130543d9 --- /dev/null +++ b/Implem.ParameterAccessor/Parts/OutputCacheControl.cs @@ -0,0 +1,8 @@ +namespace Implem.ParameterAccessor.Parts +{ + public class OutputCacheControl + { + public bool NoOutputCache; + public int OutputCacheDuration; + } +} diff --git a/Implem.ParameterAccessor/Parts/SecureCacheControl.cs b/Implem.ParameterAccessor/Parts/SecureCacheControl.cs index d8b2c613e..44e3ac38a 100644 --- a/Implem.ParameterAccessor/Parts/SecureCacheControl.cs +++ b/Implem.ParameterAccessor/Parts/SecureCacheControl.cs @@ -6,6 +6,6 @@ public class SecureCacheControl public bool NoStore; public bool Private; public bool MustRevalidate; - public bool PragmaNoCache; + public bool PragmaNoCache; } } diff --git a/Implem.ParameterAccessor/Parts/Security.cs b/Implem.ParameterAccessor/Parts/Security.cs index 7dd1b32e3..d74e8c0f9 100644 --- a/Implem.ParameterAccessor/Parts/Security.cs +++ b/Implem.ParameterAccessor/Parts/Security.cs @@ -20,6 +20,7 @@ public class Security public bool DisableCheckPasswordPolicyIfApi; public List PasswordPolicies; public SecondaryAuthentication SecondaryAuthentication; + public bool PasswordGenerator; public AspNetCoreDataProtection AspNetCoreDataProtection; public HttpStrictTransportSecurity HttpStrictTransportSecurity; public SecureCacheControl SecureCacheControl; diff --git a/Implem.Pleasanter.sln b/Implem.Pleasanter.sln index ffb70b900..bd11745f1 100644 --- a/Implem.Pleasanter.sln +++ b/Implem.Pleasanter.sln @@ -42,16 +42,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Implem.TestAutomation", "Im {C082A0D7-13C6-4D8A-9735-3C302E81B280} = {C082A0D7-13C6-4D8A-9735-3C302E81B280} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CICD", "CICD", "{EDD4BA11-3C06-4DE2-82CA-D0B945EE21E6}" - ProjectSection(SolutionItems) = preProject - .github\workflows\stale.yml = .github\workflows\stale.yml - .github\workflows\build-docker-images.yaml = .github\workflows\build-docker-images.yml - EndProjectSection -EndProject Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{10984740-E12C-427F-A980-0100734AE1B9}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Implem.PleasanterTest", "Implem.PleasanterTest\Implem.PleasanterTest.csproj", "{2563902C-E1D2-4ED7-9B1B-B836C485267A}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Implem.Plugins", "Implem.Plugins\Implem.Plugins.csproj", "{DB7A8513-48C4-4226-92F9-60FD4DB90DD8}" EndProject Global @@ -181,16 +173,6 @@ Global {10984740-E12C-427F-A980-0100734AE1B9}.Release|Any CPU.ActiveCfg = Release|Any CPU {10984740-E12C-427F-A980-0100734AE1B9}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU {10984740-E12C-427F-A980-0100734AE1B9}.SingleImage|Any CPU.Build.0 = Release|Any CPU - {2563902C-E1D2-4ED7-9B1B-B836C485267A}.CD_ROM|Any CPU.ActiveCfg = Debug|Any CPU - {2563902C-E1D2-4ED7-9B1B-B836C485267A}.CD_ROM|Any CPU.Build.0 = Debug|Any CPU - {2563902C-E1D2-4ED7-9B1B-B836C485267A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2563902C-E1D2-4ED7-9B1B-B836C485267A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2563902C-E1D2-4ED7-9B1B-B836C485267A}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU - {2563902C-E1D2-4ED7-9B1B-B836C485267A}.DVD-5|Any CPU.Build.0 = Debug|Any CPU - {2563902C-E1D2-4ED7-9B1B-B836C485267A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2563902C-E1D2-4ED7-9B1B-B836C485267A}.Release|Any CPU.Build.0 = Release|Any CPU - {2563902C-E1D2-4ED7-9B1B-B836C485267A}.SingleImage|Any CPU.ActiveCfg = Debug|Any CPU - {2563902C-E1D2-4ED7-9B1B-B836C485267A}.SingleImage|Any CPU.Build.0 = Debug|Any CPU {DB7A8513-48C4-4226-92F9-60FD4DB90DD8}.CD_ROM|Any CPU.ActiveCfg = Debug|Any CPU {DB7A8513-48C4-4226-92F9-60FD4DB90DD8}.CD_ROM|Any CPU.Build.0 = Debug|Any CPU {DB7A8513-48C4-4226-92F9-60FD4DB90DD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU diff --git a/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_Create_Body.txt b/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_Create_Body.txt index ca865a76c..76956b326 100644 --- a/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_Create_Body.txt +++ b/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_Create_Body.txt @@ -22,7 +22,6 @@ - statements.AddRange(CreateStatements( diff --git a/Implem.Pleasanter/App_Data/Definitions/Definition_Template/Template16_SiteSettingsTemplate.json b/Implem.Pleasanter/App_Data/Definitions/Definition_Template/Template16_SiteSettingsTemplate.json index 7e605666c..94b85aa54 100644 --- a/Implem.Pleasanter/App_Data/Definitions/Definition_Template/Template16_SiteSettingsTemplate.json +++ b/Implem.Pleasanter/App_Data/Definitions/Definition_Template/Template16_SiteSettingsTemplate.json @@ -13,7 +13,6 @@ "NumB", "NumC", "NumD", - "DateA", "StartTime", "CompletionTime", "Status", @@ -34,7 +33,6 @@ "NumB", "NumC", "NumD", - "DateA", "StartTime", "CompletionTime", "Status", @@ -131,15 +129,11 @@ { "ColumnName": "ClassC", "LabelText": "商品区分", - "ChoicesText": "商品区分1\n商品区分2\n商品区分3\n商品区分4\n商品区分5" + "ChoicesText": "システム開発\nソフトウェア販売\nコンサルティング" }, { "ColumnName": "StartTime", "LabelText": "商談開始日" - }, - { - "ColumnName": "DateA", - "DateFilterSetMode": 2 } ], "Aggregations": [ diff --git a/Implem.Pleasanter/App_Data/Definitions/Definition_Template/Template17_SiteSettingsTemplate.json b/Implem.Pleasanter/App_Data/Definitions/Definition_Template/Template17_SiteSettingsTemplate.json index 89f470055..c33ed6921 100644 --- a/Implem.Pleasanter/App_Data/Definitions/Definition_Template/Template17_SiteSettingsTemplate.json +++ b/Implem.Pleasanter/App_Data/Definitions/Definition_Template/Template17_SiteSettingsTemplate.json @@ -5,11 +5,14 @@ "GridColumns": [ "ResultId", "ClassF", - "TitleBody", - "Comments", + "Title", "ClassH", - "DateA", - "DateB", + "ClassA", + "ClassB", + "ClassD", + "DateC", + "NumA", + "NumB", "Updator", "UpdatedTime" ], diff --git a/Implem.Pleasanter/App_Data/Displays/PasswordAutoGenerate.json b/Implem.Pleasanter/App_Data/Displays/PasswordAutoGenerate.json new file mode 100644 index 000000000..10b0911cf --- /dev/null +++ b/Implem.Pleasanter/App_Data/Displays/PasswordAutoGenerate.json @@ -0,0 +1,34 @@ +{ + "Id": "PasswordAutoGenerate", + "Type": "110", + "ClientScript": true, + "Languages": [ + { + "Body": "Password Auto Generate" + }, + { + "Language": "zh", + "Body": "密码自动生成" + }, + { + "Language": "ja", + "Body": "パスワード自動生成" + }, + { + "Language": "de", + "Body": "Kennwort automatisch generieren" + }, + { + "Language": "ko", + "Body": "비밀번호 자동 생성" + }, + { + "Language": "es", + "Body": "Generación automática de contraseñas" + }, + { + "Language": "vn", + "Body": "Tự động tạo mật khẩu" + } + ] +} \ No newline at end of file diff --git a/Implem.Pleasanter/App_Data/Parameters/OutputCache.json b/Implem.Pleasanter/App_Data/Parameters/OutputCache.json new file mode 100644 index 000000000..121949a8c --- /dev/null +++ b/Implem.Pleasanter/App_Data/Parameters/OutputCache.json @@ -0,0 +1,6 @@ +{ + "OutputCacheControl": { + "NoOutputCache": false, + "OutputCacheDuration": 86400 + } +} \ No newline at end of file diff --git a/Implem.Pleasanter/App_Data/Parameters/Security.json b/Implem.Pleasanter/App_Data/Parameters/Security.json index 89fe0d457..0b91206a8 100644 --- a/Implem.Pleasanter/App_Data/Parameters/Security.json +++ b/Implem.Pleasanter/App_Data/Parameters/Security.json @@ -81,6 +81,7 @@ ] } ], + "PasswordGenerator": true, "SecondaryAuthentication": { "Mode": "None", "NotificationType": "Mail", diff --git a/Implem.Pleasanter/App_Start/BundleConfig.cs b/Implem.Pleasanter/App_Start/BundleConfig.cs index 3a7f0754d..6bba7007f 100644 --- a/Implem.Pleasanter/App_Start/BundleConfig.cs +++ b/Implem.Pleasanter/App_Start/BundleConfig.cs @@ -52,6 +52,7 @@ public static IEnumerable Generals() "~/scripts/formula.js", "~/scripts/gantt.js", "~/scripts/ganttevents.js", + "~/scripts/generatepassword.js", "~/scripts/grid.js", "~/scripts/gridevents.js", "~/scripts/group.js", diff --git a/Implem.Pleasanter/Controllers/Api/ItemsController.cs b/Implem.Pleasanter/Controllers/Api/ItemsController.cs index 3ab59e540..4ddcdb43f 100644 --- a/Implem.Pleasanter/Controllers/Api/ItemsController.cs +++ b/Implem.Pleasanter/Controllers/Api/ItemsController.cs @@ -314,5 +314,26 @@ public ContentResult UpdateSiteSettings(long id) log.Finish(context: context, responseSize: result.Content.Length); return result.ToHttpResponse(request: Request); } + + [HttpPost("{id}/GetClosestSiteId")] + public ContentResult GetClosestSiteId(long id) + { + var body = default(string); + using (var reader = new StreamReader(Request.Body)) body = reader.ReadToEnd(); + var context = new Context( + sessionStatus: User?.Identity?.IsAuthenticated == true, + sessionData: User?.Identity?.IsAuthenticated == true, + apiRequestBody: body, + contentType: Request.ContentType, + api: true); + var log = new SysLogModel(context: context); + var result = context.Authenticated + ? SiteUtilities.GetClosestSiteIdByApi( + context: context, + id: id) + : ApiResults.Unauthorized(context: context); + log.Finish(context: context, responseSize: result.Content.Length); + return result.ToHttpResponse(request: Request); + } } } diff --git a/Implem.Pleasanter/Controllers/BinariesController.cs b/Implem.Pleasanter/Controllers/BinariesController.cs index efc3036f5..4b62da7d3 100644 --- a/Implem.Pleasanter/Controllers/BinariesController.cs +++ b/Implem.Pleasanter/Controllers/BinariesController.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.OutputCaching; using System.Collections.Generic; using System.Linq; namespace Implem.Pleasanter.Controllers @@ -15,6 +16,7 @@ public class BinariesController : Controller { [HttpGet] [ResponseCache(Duration = int.MaxValue)] + [OutputCache(PolicyName = "imageCache")] public ActionResult SiteImageThumbnail(string reference, long id) { var context = new Context(); diff --git a/Implem.Pleasanter/Controllers/UsersController.cs b/Implem.Pleasanter/Controllers/UsersController.cs index 6a6fe0d06..f9d6c1114 100644 --- a/Implem.Pleasanter/Controllers/UsersController.cs +++ b/Implem.Pleasanter/Controllers/UsersController.cs @@ -724,5 +724,20 @@ public string PhysicalDelete(long id) log.Finish(context: context, responseSize: json.Length); return json; } + + /// + /// Fixed: + /// + [HttpPost] + public string GeneratePassword(string passwordObject, string passwordValidateObject) + { + var context = new Context(); + var log = new SysLogModel(context: context); + var json = UserUtilities.GeneratePassword( + passwordObject, + passwordValidateObject); + log.Finish(context: context, responseSize: json.Length); + return json; + } } } diff --git a/Implem.Pleasanter/Dockerfile b/Implem.Pleasanter/Dockerfile index 139f3711d..383422971 100644 --- a/Implem.Pleasanter/Dockerfile +++ b/Implem.Pleasanter/Dockerfile @@ -1,10 +1,13 @@ #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base -RUN apt-get update && apt-get install -y libgdiplus +RUN apt-get update && apt-get install -y \ + libgdiplus \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* WORKDIR /app -EXPOSE 80 +EXPOSE 8080 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src @@ -24,12 +27,26 @@ WORKDIR "/src/Implem.Pleasanter" RUN dotnet build "Implem.Pleasanter.csproj" -c Release -o /app/build FROM build AS publish -RUN apt-get update && apt-get install -y jq +RUN apt-get update && apt-get install -y \ + jq \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + RUN dotnet publish "Implem.Pleasanter.csproj" -c Release -o /app/publish RUN cat App_Data/Parameters/Rds.json \ | jq '.Dbms|="PostgreSQL" | .SaConnectionString|=null | .OwnerConnectionString|=null | .UserConnectionString|=null' \ > /app/publish/App_Data/Parameters/Rds.json +FROM publish AS settings +RUN cat App_Data/Parameters/Service.json \ + | jq '.WithoutChangeDefaultPassword|=true | .ShowStartGuide|=false | .Demo|=false' \ + > /app/publish/App_Data/Parameters/Service.json + +FROM base AS testing +WORKDIR /app +COPY --from=settings /app/publish . +ENTRYPOINT ["dotnet", "Implem.Pleasanter.dll"] + FROM base AS final WORKDIR /app COPY --from=publish /app/publish . diff --git a/Implem.Pleasanter/Implem.Pleasanter.csproj b/Implem.Pleasanter/Implem.Pleasanter.csproj index 0b4bb6123..e7c2cfa3e 100644 --- a/Implem.Pleasanter/Implem.Pleasanter.csproj +++ b/Implem.Pleasanter/Implem.Pleasanter.csproj @@ -5,9 +5,9 @@ Copyright © Implem Inc 2014 - 2024 Business application platform Implem.Pleasanter - 1.4.4.0 - 1.4.4.0 - 1.4.4.0 + 1.4.5.0 + 1.4.5.0 + 1.4.5.0 disable Linux ..\docker-compose.dcproj @@ -32,11 +32,12 @@ - + - + - + + NU1701 @@ -60,8 +61,8 @@ - - + + diff --git a/Implem.Pleasanter/Libraries/Extensions/MatchExtensions.cs b/Implem.Pleasanter/Libraries/Extensions/MatchExtensions.cs index a445eab2f..bdaadc6a5 100644 --- a/Implem.Pleasanter/Libraries/Extensions/MatchExtensions.cs +++ b/Implem.Pleasanter/Libraries/Extensions/MatchExtensions.cs @@ -138,11 +138,10 @@ private static bool DateTimeMatched(Context context, DateTime value, Column colu public static bool Matched(this string value, Context context, Column column, string condition) { - var param = condition.Deserialize>() - ?.Select(o => (column.Type == Column.Types.User || column.Type == Column.Types.Dept) && o == "Own" - ? context.UserId.ToString() - : o) - .ToList(); + var param = GetMatchedParam( + context: context, + column: column, + condition: condition); if (column.HasChoices()) { if (column.MultipleSelections == true) @@ -250,5 +249,23 @@ public static bool Matched(this string value, Context context, Column column, st } } } + + private static List GetMatchedParam(Context context, Column column, string condition) + { + var param = condition.Deserialize>(); + switch (column.Type) + { + case Column.Types.User: + return param?.Select(o => o == "Own" + ? context.UserId.ToString() + : o).ToList(); + case Column.Types.Dept: + return param?.Select(o => o == "Own" + ? context.DeptId.ToString() + : o).ToList(); + default: + return param?.ToList(); + } + } } } \ No newline at end of file diff --git a/Implem.Pleasanter/Libraries/HtmlParts/HtmlControls.cs b/Implem.Pleasanter/Libraries/HtmlParts/HtmlControls.cs index bb7090c0a..ad686fc0c 100644 --- a/Implem.Pleasanter/Libraries/HtmlParts/HtmlControls.cs +++ b/Implem.Pleasanter/Libraries/HtmlParts/HtmlControls.cs @@ -163,7 +163,8 @@ public static HtmlBuilder TextBox( .DataValidateEmail(validateEmail) .DataValidateEqualTo(validateEqualTo) .DataValidateMaxLength(validateMaxLength) - .Add(attributes)); + .Add(attributes) + .Add("data-passwordgenerator", Implem.DefinitionAccessor.Parameters.Security.PasswordGenerator ? "1" : "0")); case HtmlTypes.TextTypes.File: return hb.Input(attributes: new HtmlAttributes() .Id(controlId) diff --git a/Implem.Pleasanter/Libraries/HtmlParts/HtmlNavigationMenu.cs b/Implem.Pleasanter/Libraries/HtmlParts/HtmlNavigationMenu.cs index 7781b4617..65d9a712c 100644 --- a/Implem.Pleasanter/Libraries/HtmlParts/HtmlNavigationMenu.cs +++ b/Implem.Pleasanter/Libraries/HtmlParts/HtmlNavigationMenu.cs @@ -648,6 +648,7 @@ private static bool Using( ? context.CanManageSite(ss: ss) : ss.ReferenceType == "Groups" ? canCreateGroups + && context.Action != "trashbox" : context.CanCreate(ss: ss, site: true) && ss.ReferenceType != "Wikis" && context.Action != "trashbox" @@ -676,7 +677,8 @@ private static bool Using( return canManageRegistrations; case "SettingsMenu_TrashBox": return canManageTrashBox - && ss.ReferenceType != "Wikis"; + && ss.ReferenceType != "Wikis" + && ss.ReferenceType != "Dashboards"; case "SettingsMenu_GroupTrashBox": return canManageGroupTrashBox; case "SettingsMenu_DeptTrashBox": diff --git a/Implem.Pleasanter/Libraries/Responses/Displays.cs b/Implem.Pleasanter/Libraries/Responses/Displays.cs index f162fcbb2..087872c50 100644 --- a/Implem.Pleasanter/Libraries/Responses/Displays.cs +++ b/Implem.Pleasanter/Libraries/Responses/Displays.cs @@ -7559,6 +7559,16 @@ public static string Password( data: data); } + public static string PasswordAutoGenerate( + Context context, + params string[] data) + { + return Get( + context: context, + id: "PasswordAutoGenerate", + data: data); + } + public static string PasswordHasBeenUsed( Context context, params string[] data) diff --git a/Implem.Pleasanter/Libraries/Server/SiteInfo.cs b/Implem.Pleasanter/Libraries/Server/SiteInfo.cs index 80757a747..36dfeed2f 100644 --- a/Implem.Pleasanter/Libraries/Server/SiteInfo.cs +++ b/Implem.Pleasanter/Libraries/Server/SiteInfo.cs @@ -531,6 +531,7 @@ private static void SetSites(TenantCache tenantCache, EnumerableRowCollection dataRows) @@ -631,6 +632,7 @@ private static void DeleteSites(TenantCache tenantCache, List siteIds) sites.Add(data.Key, data.Value)); sites.RemoveAll((key, value) => siteIds.Contains(key)); tenantCache.Sites = sites; + tenantCache.SiteNameTree = new SiteNameTree(sites); } private static void DeleteSiteMenu(TenantCache tenantCache, List siteIds) diff --git a/Implem.Pleasanter/Libraries/Server/SiteNameTree.cs b/Implem.Pleasanter/Libraries/Server/SiteNameTree.cs new file mode 100644 index 000000000..dc402db1a --- /dev/null +++ b/Implem.Pleasanter/Libraries/Server/SiteNameTree.cs @@ -0,0 +1,175 @@ +using Implem.Libraries.Utilities; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; + +namespace Implem.Pleasanter.Libraries.Server +{ + public class SiteNameTree + { + public readonly List Items = new List(); + public readonly Dictionary> Names = new Dictionary>(); + public readonly List<(string name, long triggerId, long nameId, long ticks)> Caches = new List<(string, long, long, long)>(); + + public SiteNameTree(Dictionary sites) + { + foreach (var site in sites) + { + AddNode(site.Value.String("ReferenceType"), site.Key, site.Value.Long("ParentId"), site.Value.String("SiteName")); + } + Items.Sort(); + } + + private void AddNode(string type, long id, long parentId, string name) + { + if (name != null) + { + if (Names.ContainsKey(name) == false) + { + Names.Add(name, new List()); + } + Names[name].Add(id); + } + Items.Add(new SiteNameTreeItem( + id: id, + parentId: parentId, + type: type)); + } + + public long Find(long startId, string name) + { + if (Names.ContainsKey(name) == false) return -1; + var nameIdList = Names[name]; + if (nameIdList.Count == 1) return nameIdList[0]; + var cacheNode = FindCaches( + name: name, + triggerId: startId); + if (cacheNode.name != null) + { + cacheNode.ticks = DateTime.UtcNow.Ticks; + return cacheNode.nameId; + } + var triggerNode = SearchItem(startId: startId); + if (triggerNode == null) return -1; + var foundNode = FindSameLevel( + nameIdList: nameIdList, + folderId: triggerNode.ParentId, + id: triggerNode.Id, + isUp: false); + if (Caches.Count > 1024) + { + Caches.RemoveAt(Caches.Select((v, index) => (v, index)).MinBy(v => v.v.ticks).index); + } + Caches.Add(new(name, startId, foundNode?.Id ?? -1, DateTime.UtcNow.Ticks)); + return foundNode?.Id ?? -1; + } + + private (string name, long triggerId, long nameId, long ticks) FindCaches(string name, long triggerId) + { + return Caches.FirstOrDefault(v => v.name == name && v.triggerId == triggerId); + } + + private SiteNameTreeItem SearchItem(long startId) + { + var idx = Items.BinarySearch(SiteNameTreeItem.SearchKey(id: startId)); + return (idx >= 0) ? Items[idx] : null; + } + + private SiteNameTreeItem FindSameLevel(List nameIdList, long folderId, long id, bool isUp) + { + var sameLevel = Items.Where(v => v.ParentId == folderId).OrderBy((p) => p.Id == id ? -1 : p.Id).ToArray(); + var foundNode = sameLevel.FirstOrDefault(v1 => nameIdList.Any(v2 => v2 == v1.Id)); + if (foundNode != null) + { + return foundNode; + } + foreach (var item in sameLevel.Where(v => v.Type == SiteNameTreeItem.SiteType.Folder)) + { + if (id == item.Id && isUp) continue; + var sameFolder = FindSameLevel( + nameIdList: nameIdList, + folderId: item.Id, + id: -1, + isUp: false); + if (sameFolder != null) return sameFolder; + } + if (!isUp && id == -1) return null; + var parentNode = SearchItem(startId: folderId); + return (parentNode != null) + ? FindSameLevel( + nameIdList: nameIdList, + folderId: parentNode.ParentId, + id: parentNode.Id, + isUp: true) + : null; + } + } + + public class SiteNameTreeItem : IComparable + { + public enum SiteType : short + { + Folder, + Issues, + Results, + Wiki, + Dashboard + } + public readonly long Id; + public readonly long ParentId; + public readonly SiteType Type; + + public SiteNameTreeItem(long id, long parentId, string type) + { + Type = GetSiteType(type); + Id = id; + ParentId = parentId; + } + + public SiteNameTreeItem(long id, long parentId, SiteType type) + { + Type = type; + Id = id; + ParentId = parentId; + } + + public static SiteType GetSiteType(string str) + { + switch (str) + { + case "Dashboards": return SiteType.Dashboard; + case "Issues": return SiteType.Issues; + case "Results": return SiteType.Results; + case "Sites": return SiteType.Folder; + case "Wikis": return SiteType.Wiki; + } + return SiteType.Issues; + } + + public static SiteNameTreeItem SearchKey(long id) + { + return new SiteNameTreeItem( + id: id, + parentId: 0, + type: SiteType.Results); + } + + int IComparable.CompareTo(SiteNameTreeItem other) + { + return Id.CompareTo(other?.Id); + } + + public override bool Equals(object obj) + { + return obj is SiteNameTreeItem item + && Id == item.Id + && ParentId == item.ParentId; + } + + public override int GetHashCode() + { + return HashCode.Combine(Id, ParentId); + } + } +} \ No newline at end of file diff --git a/Implem.Pleasanter/Libraries/Server/TenantCache.cs b/Implem.Pleasanter/Libraries/Server/TenantCache.cs index b666f559e..26ed69c44 100644 --- a/Implem.Pleasanter/Libraries/Server/TenantCache.cs +++ b/Implem.Pleasanter/Libraries/Server/TenantCache.cs @@ -19,6 +19,7 @@ public class TenantCache public Dictionary> SiteDeptHash; public Dictionary> SiteGroupHash; public Dictionary> SiteUserHash; + public SiteNameTree SiteNameTree; public UpdateMonitor UpdateMonitor; diff --git a/Implem.Pleasanter/Libraries/ServerScripts/ServerScriptModelApiItems.cs b/Implem.Pleasanter/Libraries/ServerScripts/ServerScriptModelApiItems.cs index ec744ef3a..22ebe81f1 100644 --- a/Implem.Pleasanter/Libraries/ServerScripts/ServerScriptModelApiItems.cs +++ b/Implem.Pleasanter/Libraries/ServerScripts/ServerScriptModelApiItems.cs @@ -73,6 +73,17 @@ public ServerScriptModelApiModel[] GetSiteByGroupName( return ret; } + public ServerScriptModelApiModel GetClosestSite( + object siteName, + object id = null) + { + var ret = ServerScriptUtilities.GetClosestSite( + context: Context, + id: id?.ToLong(), + siteName: siteName?.ToString() ?? string.Empty); + return ret; + } + public ServerScriptModelApiModel New() { return NewIssue(); diff --git a/Implem.Pleasanter/Libraries/ServerScripts/ServerScriptUtilities.cs b/Implem.Pleasanter/Libraries/ServerScripts/ServerScriptUtilities.cs index b52b37357..971a56544 100644 --- a/Implem.Pleasanter/Libraries/ServerScripts/ServerScriptUtilities.cs +++ b/Implem.Pleasanter/Libraries/ServerScripts/ServerScriptUtilities.cs @@ -1348,6 +1348,37 @@ public static ServerScriptModelApiModel[] GetSite( return items; } + public static ServerScriptModelApiModel GetClosestSite( + Context context, + long? id = null, + string siteName = null) + { + if (siteName.IsNullOrEmpty()) return null; + var startId = id ?? context.SiteId; + if (context.CanRead( + ss: SiteSettingsUtilities.Get( + context: context, + siteId: startId, + referenceId: startId), + site: true) == false) return null; + var tenantCache = SiteInfo.TenantCaches[context.TenantId]; + var findId = tenantCache.SiteNameTree.Find( + startId: startId, + name: siteName); + if (findId == -1) return null; + if (context.CanRead( + ss: SiteSettingsUtilities.Get( + context: context, + siteId: findId, + referenceId: findId), + site: true) == false) return null; + return GetSite( + context: context, + id: findId, + apiRequestBody: string.Empty) + .FirstOrDefault(); + } + public static bool Create(Context context, long id, object model) { var apiContext = CreateContext( diff --git a/Implem.Pleasanter/Libraries/Settings/ColumnAccessControl.cs b/Implem.Pleasanter/Libraries/Settings/ColumnAccessControl.cs index 946095098..cb6c55a3f 100644 --- a/Implem.Pleasanter/Libraries/Settings/ColumnAccessControl.cs +++ b/Implem.Pleasanter/Libraries/Settings/ColumnAccessControl.cs @@ -2,6 +2,7 @@ using Implem.Pleasanter.Libraries.Requests; using Implem.Pleasanter.Libraries.Responses; using Implem.Pleasanter.Libraries.Security; +using Implem.Pleasanter.Libraries.Server; using Implem.Pleasanter.Models; using System; using System.Collections.Generic; @@ -81,7 +82,7 @@ public bool Allowed( { return true; } - else if (Depts?.Contains(context.DeptId) == true) + else if (DeptContains(context: context)) { return true; } @@ -89,8 +90,7 @@ public bool Allowed( { return true; } - else if (Users?.Contains(context.UserId) == true - || (Users?.Contains(-1) == true && context.Authenticated)) + else if (UserContains(context: context)) { return true; } @@ -116,11 +116,37 @@ public bool Allowed( } } + private bool DeptContains(Context context) + { + if (Depts?.Contains(context.DeptId) != true) return false; + var dept = SiteInfo.Dept( + tenantId: context.TenantId, + deptId: context.DeptId); + return dept?.Id == context.DeptId && dept?.Disabled == false; + } + private bool GroupContains(Context context) { return Groups?.Any() == true - ? context.Groups?.Any(o => Groups.Contains(o)) ?? false - : false; + && context.Groups?.Any() == true + && Groups.Intersect(context.Groups) + .Any(o => + { + var group = SiteInfo.Group( + tenantId: context.TenantId, + groupId: o); + return group?.Id == o && group?.Disabled == false; + }); + } + + private bool UserContains(Context context) + { + if (Users?.Contains(-1) == true && context.Authenticated) return true; + if (Users?.Contains(context.UserId) != true) return false; + var user = SiteInfo.User( + context: context, + userId: context.UserId); + return user?.Id == context.UserId && user?.Disabled == false; } public List GetPermissions(SiteSettings ss) diff --git a/Implem.Pleasanter/Libraries/Settings/SiteSettings.cs b/Implem.Pleasanter/Libraries/Settings/SiteSettings.cs index a05d25e87..e28741208 100644 --- a/Implem.Pleasanter/Libraries/Settings/SiteSettings.cs +++ b/Implem.Pleasanter/Libraries/Settings/SiteSettings.cs @@ -665,12 +665,23 @@ public bool IsDashboardEditor(Context context) } switch (context.Action) { - case "index": - return false; - case "dashboardpart": - return false; - default: + case "copy": + case "delete": + case "deletecomment": + case "deletehistory": + case "edit": + case "histories": + case "history": + case "permissions": + case "restore": + case "restorefromhistory": + case "searchdropdown": + case "selectsearchdropdown": + case "setsitesettings": + case "update": return true; + default: + return false; } } diff --git a/Implem.Pleasanter/Models/Groups/GroupUtilities.cs b/Implem.Pleasanter/Models/Groups/GroupUtilities.cs index 6b738713b..02bc87bf0 100644 --- a/Implem.Pleasanter/Models/Groups/GroupUtilities.cs +++ b/Implem.Pleasanter/Models/Groups/GroupUtilities.cs @@ -1003,7 +1003,7 @@ public static string Editor( : groupModel.Title.MessageDisplay(context: context), script: groupModel.MethodType != BaseModel.MethodTypes.New ? "$p.setPaging('CurrentMembers'); $p.setPaging('SelectableMembers');" - + "$p.setPaging('CurrentChildren'); $p.setPaging('SelectableChildren');" + + "$p.setPaging('CurrentChildren'); $p.setPaging('SelectableChildren');" : null, action: () => hb .Editor( @@ -3364,7 +3364,7 @@ private static bool Contains(Context context, int groupId, int deptId, int userI where: Rds.GroupMembersWhere() .GroupId(groupId) .ChildGroup(false) - .Add(or: Rds.GroupMembersWhere() + .Add(and: Rds.GroupMembersWhere() .ChildGroup(false) .DeptId(deptId, _using: deptId > 0) .UserId(userId, _using: userId > 0)) diff --git a/Implem.Pleasanter/Models/Shared/_BaseModel.cs b/Implem.Pleasanter/Models/Shared/_BaseModel.cs index d5bc122ef..5903653ec 100644 --- a/Implem.Pleasanter/Models/Shared/_BaseModel.cs +++ b/Implem.Pleasanter/Models/Shared/_BaseModel.cs @@ -836,7 +836,9 @@ public static void SetServerScriptModelColumns(Context context, SiteSettings ss, { if (scriptColumn.Value.ChoiceHash != null) { - var searchText = context.Forms.Data("DropDownSearchText"); + var searchText = context.Forms.Data("DropDownSearchTarget") == column.Id + ? context.Forms.Data("DropDownSearchText") + : null; var searchIndexes = searchText.SearchIndexes(); column.ChoiceHash = scriptColumn.Value ?.ChoiceHash diff --git a/Implem.Pleasanter/Models/Sites/SiteApiModel.cs b/Implem.Pleasanter/Models/Sites/SiteApiModel.cs index b9b469386..206dcf67b 100644 --- a/Implem.Pleasanter/Models/Sites/SiteApiModel.cs +++ b/Implem.Pleasanter/Models/Sites/SiteApiModel.cs @@ -44,6 +44,7 @@ public class SiteApiModel : _BaseApiModel public string ItemTitle { get; set; } public bool? DisableSiteCreatorPermission { get; set; } public List SummaryId { get; set; } + public List FindSiteNames { get; set; } public SiteApiModel() { diff --git a/Implem.Pleasanter/Models/Sites/SiteModel.cs b/Implem.Pleasanter/Models/Sites/SiteModel.cs index 4aebc8ec2..cd60ebff3 100644 --- a/Implem.Pleasanter/Models/Sites/SiteModel.cs +++ b/Implem.Pleasanter/Models/Sites/SiteModel.cs @@ -8399,8 +8399,10 @@ private void AddDashboardPart(Context context, ResponseCollection res, string co quickAccessSites: context.Forms.Data("DashboardPartQuickAccessSites"), quickAccessLayout: context.Forms.Data("DashboardPartQuickAccessLayout").ToEnum(), timeLineSites: context.Forms.Data("DashboardPartTimeLineSites"), - timeLineTitle: context.Forms.Data("DashboardPartTimeLineTitle"), - timeLineBody: context.Forms.Data("DashboardPartTimeLineBody"), + timeLineTitle: SiteSettings.LabelTextToColumnName( + text: context.Forms.Data("DashboardPartTimeLineTitle")), + timeLineBody: SiteSettings.LabelTextToColumnName( + text: context.Forms.Data("DashboardPartTimeLineBody")), timeLineItemCount: context.Forms.Int("DashboardPartTimeLineItemCount"), content: context.Forms.Data("DashboardPartContent"), htmlContent: context.Forms.Data("DashboardPartHtmlContent"), @@ -8475,8 +8477,10 @@ private void UpdateDashboardPart(Context context, ResponseCollection res) quickAccessSites: context.Forms.Data("DashboardPartQuickAccessSites"), quickAccessLayout: context.Forms.Data("DashboardPartQuickAccessLayout").ToEnum(), timeLineSites: context.Forms.Data("DashboardPartTimeLineSites"), - timeLineTitle: context.Forms.Data("DashboardPartTimeLineTitle"), - timeLineBody: context.Forms.Data("DashboardPartTimeLineBody"), + timeLineTitle: SiteSettings.LabelTextToColumnName( + text: context.Forms.Data("DashboardPartTimeLineTitle")), + timeLineBody: SiteSettings.LabelTextToColumnName( + text: context.Forms.Data("DashboardPartTimeLineBody")), timeLineItemCount: context.Forms.Int("DashboardPartTimeLineItemCount"), content: context.Forms.Data("DashboardPartContent"), htmlContent: context.Forms.Data("DashboardPartHtmlContent"), diff --git a/Implem.Pleasanter/Models/Sites/SiteUtilities.cs b/Implem.Pleasanter/Models/Sites/SiteUtilities.cs index 2cb3a86d9..c2d2b27f2 100644 --- a/Implem.Pleasanter/Models/Sites/SiteUtilities.cs +++ b/Implem.Pleasanter/Models/Sites/SiteUtilities.cs @@ -6806,7 +6806,9 @@ public static HtmlBuilder EditorColumnDialogTab( labelText: Displays.Nullable(context: context), _checked: column.Nullable.ToBool(), _using: !column.Id_Ver - && !column.NotUpdate) + && !column.NotUpdate + && column.ColumnName != "WorkValue" + && column.ColumnName != "ProgressRate") .FieldTextBox( controlId: "Unit", controlCss: " w50", @@ -17147,5 +17149,60 @@ public static HtmlBuilder SearchEditorColumnDialog( onClick: "$p.closeDialog($(this));", icon: "ui-icon-cancel"))); } + + /// + /// Fixed: + /// + public static ContentResultInheritance GetClosestSiteIdByApi(Context context, long id) + { + var findSiteNames = context.RequestDataString.Deserialize()?.FindSiteNames; + if (findSiteNames == null) + { + return ApiResults.BadRequest(context: context); + } + if (!Mime.ValidateOnApi(contentType: context.ContentType)) + { + return ApiResults.BadRequest(context: context); + } + var resultCollection = new List(); + var startCanRead = context.CanRead( + ss: SiteSettingsUtilities.Get( + context: context, + siteId: id, + referenceId: id), + site: true); + var tenantCache = SiteInfo.TenantCaches[context.TenantId]; + foreach (var siteName in findSiteNames) + { + if (siteName.IsNullOrEmpty() || startCanRead == false) + { + resultCollection.Add(new { SiteName = siteName, SiteId = -1 }); + } + else + { + var foundId = tenantCache.SiteNameTree.Find( + startId: id, + name: siteName); + if (foundId != -1) + { + if (context.CanRead( + ss: SiteSettingsUtilities.Get( + context: context, + siteId: foundId, + referenceId: foundId), + site: true) == false) + { + foundId = -1; + } + } + resultCollection.Add(new { SiteName = siteName, SiteId = foundId }); + } + } + return ApiResults.Get(apiResponse: new + { + SiteId = id, + Data = resultCollection + }.ToJson()); + } } } diff --git a/Implem.Pleasanter/Models/Users/UserUtilities.cs b/Implem.Pleasanter/Models/Users/UserUtilities.cs index e2f4a9bb2..0de01f22d 100644 --- a/Implem.Pleasanter/Models/Users/UserUtilities.cs +++ b/Implem.Pleasanter/Models/Users/UserUtilities.cs @@ -4603,7 +4603,7 @@ public static string DeleteApiKey(Context context, SiteSettings ss) new HtmlBuilder().ApiEditor( context: context, userModel: userModel)) - .Message(Messages.ApiKeyCreated(context: context)) + .Message(Messages.ApiKeyDeleted(context: context)) .ToJson(); } } @@ -5536,5 +5536,37 @@ public static int CountByIds(Context context, SiteSettings ss, List ids) where: Rds.UsersWhere() .UserId_In(value: ids))); } + + /// + /// Fixed: + /// + public static string GeneratePassword(string passwordObject, string passwordValidateObject) + { + var password = ""; + var regex = ""; + var defaultRegex = Parameters.Security.PasswordPolicies[0].Enabled + ? Parameters.Security.PasswordPolicies[0].Regex + : "[!-~]{ 6,}"; + foreach(var policy in Parameters.Security.PasswordPolicies.Skip(1).Where(o => o.Enabled)) + { + regex += "(?=.*?" + policy.Regex + ")"; + } + regex += defaultRegex; + var xeger = new Fare.Xeger(defaultRegex, new Random()); + while(!System.Text.RegularExpressions.Regex.IsMatch(password, $"^{regex}$")) + { + password = xeger.Generate(); + } + return new ResponseCollection() + .Val( + target: passwordObject, + value: password) + .Val( + target: passwordValidateObject, + value: password) + .SetData(target: passwordObject) + .SetData(target: passwordValidateObject) + .ToJson(); + } } } diff --git a/Implem.Pleasanter/Startup.cs b/Implem.Pleasanter/Startup.cs index 5d8a14f4d..87b075865 100644 --- a/Implem.Pleasanter/Startup.cs +++ b/Implem.Pleasanter/Startup.cs @@ -220,6 +220,11 @@ public void ConfigureServices(IServiceCollection services) } }); } + services.AddOutputCache(options => + { + options.AddBasePolicy(builder => builder.NoCache()); + options.AddPolicy("imageCache", builder => builder.Expire(System.TimeSpan.FromSeconds(Parameters.OutputCache.OutputCacheControl.OutputCacheDuration))); + }); } private IEnumerable GetExtendedLibraryPaths() @@ -275,6 +280,11 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) app.UseCookiePolicy(); app.UseRouting(); app.UseCors(); + + if (Parameters.OutputCache.OutputCacheControl != null && !Parameters.OutputCache.OutputCacheControl.NoOutputCache) + { + app.UseOutputCache(); + } app.UseSession(); app.UseAuthentication(); app.UseAuthorization(); diff --git a/Implem.Pleasanter/bundleconfig.json b/Implem.Pleasanter/bundleconfig.json index 0c55f6766..136a7e8af 100644 --- a/Implem.Pleasanter/bundleconfig.json +++ b/Implem.Pleasanter/bundleconfig.json @@ -60,6 +60,7 @@ "wwwroot/scripts/formula.js", "wwwroot/scripts/gantt.js", "wwwroot/scripts/ganttevents.js", + "wwwroot/scripts/generatepassword.js", "wwwroot/scripts/grid.js", "wwwroot/scripts/gridevents.js", "wwwroot/scripts/group.js", diff --git a/Implem.Pleasanter/wwwroot/content/styles.css b/Implem.Pleasanter/wwwroot/content/styles.css index a3fd3fdd7..cb5f565e4 100644 --- a/Implem.Pleasanter/wwwroot/content/styles.css +++ b/Implem.Pleasanter/wwwroot/content/styles.css @@ -2960,7 +2960,15 @@ h3.title-header { z-index: 10; } -input[type="password"]::-ms-reveal{ +#passwordGenerateicon { + position: absolute; + top: 4px; + right: -60px; + cursor: pointer; + z-index: 10; +} + +input[type="password"]::-ms-reveal { display: none; } @@ -3194,15 +3202,41 @@ input[type="password"]::-ms-reveal{ border: solid 1px silver; overflow: hidden; border-radius: 5px; + display: flex; + align-items: center; + justify-content: space-between; +} + +.ui-widget.ui-state-default.ui-multiselect .ui-multiselect-open { + display: block; + order: 2; +} + +.ui-widget.ui-state-default.ui-multiselect .ui-multiselect-open + span { + display: block; + order: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.ui-multiselect-menu { + width: auto !important; + min-width: 225px; + max-width: 450px; } .ui-multiselect-checkboxes { min-height: 300px; } - .ui-multiselect-checkboxes input { - margin: 0px 5px; - } +.ui-multiselect-checkboxes label { + white-space: nowrap; +} + +.ui-multiselect-checkboxes input { + margin: 0px 5px; +} .ui-corner-all.ui-state-hover { border-radius: 2px; diff --git a/Implem.Pleasanter/wwwroot/content/styles.min.css b/Implem.Pleasanter/wwwroot/content/styles.min.css index 39faeb2a8..24a2c88ef 100644 --- a/Implem.Pleasanter/wwwroot/content/styles.min.css +++ b/Implem.Pleasanter/wwwroot/content/styles.min.css @@ -1 +1 @@ -@charset "utf-8";*{box-sizing:border-box}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-style:normal;font-weight:normal;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}input,textarea{margin:0;padding:0}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th{text-align:left}a:focus{outline:none}.cf:before,.cf:after{content:" ";display:table}.cf:after{clear:both}.cf{*zoom:1}.both{clear:both}img{max-width:100%;height:auto;width:auto}::-webkit-input-placeholder{color:#c0c0c0}:-moz-placeholder{color:#c0c0c0;opacity:1}::-moz-placeholder{color:#c0c0c0;opacity:1}:-ms-input-placeholder{color:#c0c0c0}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type="number"]{-moz-appearance:textfield}body{min-width:1200px;font-size:.75em;font-family:Hiragino Kaku Gothic Pro,"Meiryo UI",sans-serif;clear:both}h1{clear:both}h2{clear:both}h3{clear:both}legend{cursor:pointer}legend>*{display:block;float:left}label{position:relative;cursor:pointer;z-index:2}input{background-color:#fff;position:relative;z-index:2}select{position:relative;z-index:2}table{width:100%;border:0;border-collapse:collapse;clear:both}td{padding:3px;vertical-align:top;color:#000}td.right-align>p{float:right}pre{line-height:1.5em;font-family:Terminal,Hiragino Kaku Gothic Pro;word-wrap:break-word;word-break:break-all;white-space:pre-wrap}#Logo{padding:3px 0}#CorpLogo{display:block;float:left;margin:3px 0 0 0}#ProductLogo{display:block;float:left;padding:0 0 0 5px;font-size:26px;font-weight:bold;color:#696969;text-decoration:none}#PortalLink{position:relative;top:-38px;right:40px;float:right}#LoginFieldSet{width:500px;margin:150px auto 20px auto;padding:50px;background-color:#f5f5f5;border-radius:10px}#LoginCommands{text-align:right;clear:both}#AuthenticationByMail{float:left;padding:0 0 10px 50px}#TotpQRCode{width:38%;height:160px;margin-left:auto;margin-right:auto}#TotpQRCodeText{margin-left:auto;margin-right:auto}#qrCodeText{font-size:1.3em}.annonymous .close-announcement{display:none}#TotpAuthenticationCodeSeparate{width:150px;display:flex;padding:0 0 10px 40px}#TotpAuthenticationCodeSeparate>.field-normal>.field-control{margin-left:unset}#TotpAuthenticationCodeSeparate>.field-normal>.field-control>.container-normal{margin-left:10px}.totp-authentication-code{height:25px;width:25px;border:none;outline:none;border-bottom:2px solid #000;font-size:125%;text-align:center}.totp-form{visibility:hidden}#Demo{width:500px;margin:0 auto}#DemoFields{padding:20px 10px 10px 10px}#SearchPermissionElements{margin-left:15px}#Breadcrumb{float:left;margin:0 0 5px 0}#Breadcrumb .item{display:block;float:left;padding:3px 5px}#Breadcrumb .item.trashbox{display:block;float:left;color:#fff;background-color:#f00;border-radius:3px}#Breadcrumb .separator{margin:0 0 0 8px}#Guide>div{width:100%;display:block;float:left;margin:0 0 5px 0;padding:5px 10px;background:#fafad2;border:solid 1px #c0c0c0;position:relative;clear:both;border-radius:5px}#Guide>.with-icon-close{padding:10px 5px 10px}#Guide>div>#ReduceGuides{float:left;cursor:pointer;padding-right:5px}#Guide>#ExpandGuides{font-weight:bold;cursor:pointer;padding:10px 5px 10px}#CopyToClipboards>.display-control{float:left;cursor:pointer}#Header{width:100%;float:left;padding:0 6px;border:none;position:relative;clear:both}.theme-version-1_0 #Navigations,#NavigationsUpperRight{height:30px;margin:0 0 5px 0;padding:0 5px 0 15px;border:none;top:0;right:5px;border-radius:20px 0 0 20px;float:right}#NavigationMenu{float:left;margin-right:5px}#NavigationMenu>li{width:158px;height:30px;display:block;float:left;position:relative}#NavigationMenu>li>div{height:30px;text-align:center;line-height:30px;cursor:pointer}#NavigationMenu>li>div>a{height:30px;display:block;text-decoration:none}#NavigationMenu .menu{width:158px;display:none;border-top:none !important;position:absolute;top:30px;right:0;border-radius:0 0 5px 5px;z-index:4}#NavigationMenu .menu>li>a{display:block;text-decoration:none}#NavigationMenu .menu>li>a.ui-state-active{font-weight:normal;text-decoration:none}#TemplateDialog>div{padding:0 15px;overflow:hidden}#SearchField{float:left;margin:3px 0;color:#000}#Search{height:24px}#SwitchUserInfo{width:100%;display:block;float:left;margin:0 10px 5px 0;padding:5px 10px;color:#fff;background-color:#00f;border-radius:7px}#SwitchUserInfo>a{width:100%;display:block;float:left;color:#fff;text-decoration:none}#ExcessLicenseWarning{width:100%;display:block;float:left;margin:0 10px 5px 0;padding:5px 10px;color:#fff;background:#f00;border-radius:7px}#PublishWarning{width:100%;display:block;float:left;margin:0 10px 5px 0;padding:5px 10px;background:#f00;border-radius:7px}#PublishWarning>a{width:100%;display:block;float:left;color:#fff;text-decoration:none}#LockedWarning{width:100%;display:block;float:left;margin:0 10px 5px 0;padding:5px 10px;background:#f00;border-radius:7px}#LockedWarning>div{width:100%;display:block;float:left;color:#fff;text-decoration:none}#Application{width:100%;float:left;margin:10px 0 0 0;padding:0 10px 120px 10px;position:relative;clear:both}#Application>.site-image-icon{display:block;float:left;margin:0 10px 0 0}#StartGuide{width:100%;display:block;float:left;margin:0 0 10px 0;padding:50px 0 0 0;background-color:#f5f5f5;position:relative;border-radius:10px}#StartGuide>#StartGuideContents{width:900px;margin:0 auto}#StartGuide>#StartGuideContents>a{width:150px;display:block;float:left;margin:0 37px;padding:5px;text-align:center;border-radius:5px}#StartGuide>#StartGuideContents>a:hover{background-color:#fff}#StartGuide>#StartGuideContents>a>*{display:block;text-align:center;clear:both}#StartGuide>#StartGuideContents>a>img{width:50px;margin:5px 50px}#StartGuide>#DisableStartGuideField{display:block;float:left;margin:50px 0 0 20px;clear:both}#StartGuide>.ui-icon{position:absolute;top:10px;right:10px;cursor:pointer}#SiteImageIconContainer{float:left}#SiteImageIconContainer>*{margin:0 5px 0 0}#HeaderTitleContainer{float:left;margin:0 0 10px 0}#HeaderTitle{font-size:20px;font-weight:bold;color:#d2691e}#Notes>*{width:100%;float:left;margin:0 10px 5px 0}#Notes>.history{width:100%;display:block;float:left;padding:5px 10px;color:#fff;background-color:#00f;border-radius:7px}#Notes>.readonly{width:100%;display:block;float:left;padding:5px 10px;color:#fff;background-color:#ffa500;border-radius:7px}#ViewSelectorField{position:absolute;top:-10px;right:0}#ViewFilters{width:100%;float:left;margin:0 0 5px 0;padding:5px 5px 2px 5px;border:solid 1px #c0c0c0;border-radius:5px}#ViewFilters.reduced{width:auto;padding:0;border:none}#ViewFilters>.field-auto-thin{height:32px;float:left;padding:0}#ViewFilters_Reset{display:block;float:left;margin:0 20px 0 0}#ViewFilters>.display-control{float:left;margin:0 5px 0 0;padding:5px 10px 5px 0;font-weight:bold;cursor:pointer}#ViewFilters .ui-icon.ui-icon-info{transform:scale(1,-1)}#FilterButton{display:block;float:left}#Aggregations{width:100%;float:left;margin:0 0 5px 0;padding:3px 5px 5px 5px;border:solid 1px #c0c0c0;border-radius:5px}#Aggregations.reduced{width:auto;padding:0;border:none}#Aggregations .label{height:26px;display:block;float:left;margin:2px 5px 0 0;padding:5px 10px;background:#dcdcdc;border-radius:5px}#Aggregations .label.overdue{font-weight:bold;color:#fff;background-color:#f00;cursor:pointer}#Aggregations .data{height:26px;display:block;float:left;margin:2px 5px 0 0;padding:5px}#Aggregations .data.overdue{color:#f00;cursor:pointer}#Aggregations em{display:block;float:left;margin-right:5px;font-weight:bold}#Aggregations>.display-control{float:left;margin:0 5px 0 0;padding:5px 10px 5px 0;font-weight:bold;cursor:pointer}#SitePackagesSelectable span.include-data{margin:0 0 0 10px;color:#f00}.CalendarDate{margin-right:10px}.CalendarBody table{table-layout:fixed}div.Calendar>.CalendarBody>.grid>thead>tr>th{padding:5px;text-align:center;border:solid 1px #c0c0c0}th.calendar-header{text-align:center;background-color:#fff}.CalendarBody .saturday{background-color:#add8e6}.CalendarBody .sunday{background-color:#ffc0cb}.CalendarBody td{padding:0;border:solid 1px #c0c0c0}.CalendarBody td>div{min-height:50px;padding:5px}.CalendarBody td.hover{background-color:#f5f5f5}.CalendarBody .other-month{background-color:#dcdcdc}.CalendarBody .today{border:solid 2px #00f;z-index:20}.CalendarBody .item{height:25px;margin:5px 0 0 0;background-color:#fafad2;border:solid 1px #c0c0c0;border-radius:3px}.CalendarBody .item.hover{background-color:#fff;border:solid 1px #ffa500}.CalendarBody .item.changed{font-weight:bold;background-color:#ff0;border:solid 1px #ffa500}.CalendarBody .item .connection{width:14px;height:25px;background-color:#fafad2;border-top:solid 1px #c0c0c0;border-bottom:solid 1px #c0c0c0;position:relative;top:-1px;left:-14px}.CalendarBody .item .connection.hover{background-color:#fff;border-top:solid 1px #ffa500;border-bottom:solid 1px #ffa500}.CalendarBody .item .connection.changed{font-weight:bold;background-color:#ff0;border-top:solid 1px #ffa500;border-bottom:solid 1px #ffa500}.CalendarBody .item .title{padding:5px 0;position:absolute;overflow:hidden;white-space:nowrap;z-index:30}.CalendarBody .item .title.sub{display:none}.CalendarBody .item .title>span:not(.ui-icon){margin-right:3px}.CalendarBody .dragging{height:25px;padding:5px;background-color:#fafad2;border-radius:3px;z-index:50}.CalendarBody .dummy{height:25px;margin:5px 0 0 0}.fc .fc-scrollgrid-section-sticky>*{z-index:2}#Crosstab .crosstab-row{border-bottom:dotted 1px #c0c0c0}#Crosstab .saturday{background-color:#eee}#Crosstab .sunday{background-color:#fee}#CrosstabMonth{margin-right:10px}#Gantt{width:100%;background-color:#f5f5f5;border-radius:20px}#Gantt .saturday{fill:#eee}#Gantt .sunday{fill:#fee}#Gantt .date{stroke:white}#Gantt .now{stroke:red}#Gantt .planned rect{cursor:pointer;fill:gainsboro}#Gantt .planned rect.summary{cursor:auto}#Gantt .earned rect{cursor:pointer;fill:darkseagreen}#Gantt .earned rect.summary{cursor:auto}#Gantt rect.delay{fill:#ffccd5}#Gantt rect.completed{fill:lightsteelblue}#Gantt .title text{cursor:pointer}#Gantt .title text.delay{fill:red}#Gantt .title text.summary{font-size:1.2em;font-weight:bold;cursor:auto}#GanttStartDate{margin-right:10px}#GanttAxis{width:calc(100% + 20px);height:50px;margin-left:-10px;margin-top:-25px;background-color:rgba(255,255,255,.5);position:sticky;left:0;bottom:75px}#GanttAxis .saturday{fill:gainsboro}#GanttAxis .sunday{fill:#fdd}#GanttAxis .weekday{fill:whitesmoke}#GanttAxis .date{stroke:white}#BurnDown{width:100%;height:350px;background-color:#f5f5f5;border-radius:20px}#BurnDown .now{stroke:red}#BurnDown .total{fill:none;stroke:green}#BurnDown .planned{fill:none;stroke:gray}#BurnDown .earned{fill:none;stroke:orange}#BurnDown .total circle{fill:green}#BurnDown .planned circle{fill:gray}#BurnDown .earned circle{fill:orange}#BurnDownDetails>tbody>tr:hover{background-color:#f5f5f5;cursor:pointer}#BurnDownDetails>tbody>tr>td{padding:6px}#BurnDownDetails>tbody>tr>td.warning{font-weight:bold;color:#f00}#BurnDownDetails>tbody>tr>td.difference{font-size:1.3em;font-weight:bold;color:#00f;background-color:#e0ffff}#BurnDownDetails>tbody>tr>td.difference.warning{color:#f00;background-color:#ffccd5}#BurnDownDetails .user-info{margin:5px;padding:8px;font-weight:bold;background-color:#eee8aa}#BurnDownDetails .items{padding:5px 0 5px 20px}#BurnDownDetails .items a{color:#000;text-decoration:none}#BurnDownDetails .items a:hover{color:#00f;text-decoration:underline}#TimeSeries{width:100%;height:450px;background-color:#f5f5f5;border-radius:20px}#TimeSeries .surface{stroke:white}#TimeSeries .index{fill:black}.kambanbody .kamban-row{border-bottom:dotted 1px #c0c0c0}.kambanbody .kamban-container{background-color:#fff}.kambanbody .kamban-container>div{min-height:30px}.kambanbody .kamban-container.hover{background-color:#f5f5f5}.kambanbody .kamban-container .kamban-item:last-child{margin:3px 3px 30px 3px}.kambanbody .kamban-item{margin:3px;padding:4px 16px 4px 5px;background-color:#fafad2;border:solid 1px #c0c0c0;position:relative;cursor:pointer;border-radius:5px;overflow:hidden}.kambanbody .kamban-item:hover{background-color:#fff;border:solid 1px #ffa500}.kambanbody .kamban-item.changed{font-weight:bold;background-color:#ff0;border:solid 1px #ffa500}.kambanbody .kamban-item .ui-icon{position:absolute;top:0;right:0}.kambanbody .kamban-item>span{margin-right:3px}.kambanbody .dragging{padding:5px;background-color:#fafad2;border-radius:3px;z-index:50}.dashboard-kamban-header{position:sticky;top:-20px;z-index:1}.dashboard-kamban-header>th{overflow-x:hidden}#ImageLib .item{width:250px;height:250px;float:left;margin:10px 10px 0 0;padding:10px;border:solid 1px #c0c0c0;position:relative;overflow:hidden}#ImageLib .item .image{width:100%;float:left;margin:5px 0 0 0}#ImageLib .item .delete-image{float:left;position:absolute;right:5px;bottom:5px}#RecordHeader{width:100%;float:left;margin:0 0 5px 0}#RecordInfo{float:left;padding:6px 0 0 0}#RecordInfo div{float:left;margin-right:50px}#RecordInfo div p{float:left;margin-right:5px}#RecordInfo div p .elapsed-time{float:left;padding:0 5px;font-weight:bold;background-color:#eee;border-radius:2px}#RecordSwitchers{float:right}#RecordSwitchers>*{float:left}#RecordSwitchers .current{height:26px;display:block;float:left;margin:0 1px 0 0;padding:5px;border-radius:5px}#TemplateTabsContainer{width:100%;float:left}#Editor{width:100%;float:left;clear:both}#EditorTabsContainer{width:73%;float:left;margin:0 0 20px 0}#EditorTabsContainer.max{width:100%}#MailEditorTabsContainer{width:100%;float:left;margin:0 0 20px 0;border:none}#EditorComments{width:27%;float:right;margin:0 0 15px 0;padding:0 0 0 5px}#EditorComments .title-header{margin:3px 10px 8px 0}#CommentField{margin:0 0 5px 0}#OutgoingMailsForm{width:73%;float:left}#OutgoingMailsForm>.item{width:100%;float:left;position:relative;border-radius:10px}#OutgoingMailsForm .content{width:100%;float:left;margin:5px 0 20px 0;padding:10px 0 0 0;border:solid 1px #c0c0c0;border-top:none;border-radius:0 0 10px 10px/0 0 10px 10px}#DropDownSearchDialogForm{width:100%;padding:0 20px}#ProcessTabsContainer{margin:0 20px 10px 20px;clear:both}#StatusControlTabsContainer{margin:0 20px 10px 20px;clear:both}#StatusControlColumnHash .column-control-types{margin:0 0 0 10px}#ViewTabsContainer{margin:0 20px 10px 20px;clear:both}#ExportTabsContainer{margin:0 20px 10px 20px;clear:both}#EditorDetailTabsContainer{margin:0 20px 10px 20px;clear:both}#ColumnAccessControlTabsContainer{margin:0 20px 10px 20px;clear:both}#SearchResults{width:80%;float:left;margin:0 100px}#SearchResults .count{float:left;margin:0 0 10px 0}#SearchResults .count .label{height:26px;display:block;float:left;margin:0 5px 5px 0;padding:5px 10px;background:#dcdcdc;border-radius:5px}#SearchResults .count .data{height:26px;display:block;float:left;margin:0 5px 5px 0;padding:5px}#SearchResults .result{width:100%;float:left;padding:15px;border:solid 1px #fff;clear:both}#SearchResults .result>ul{display:block;float:left;clear:both}#SearchResults .result>h3{display:block;float:left;margin:5px 0;clear:both}#SearchResults .result>h3>a{font-size:1.3em;font-weight:bold}#SearchResults .result>h3>a>span{font-weight:bold}#SearchResults .result>p{display:block;float:left;clear:both}#SearchResults .result:hover{border:solid 1px #ffa500;cursor:pointer}.highlight{background:#ff0}#MainCommandsContainer{width:100%;height:47px;padding:7px 0 0 0;background-color:rgba(0,0,0,.65);position:fixed;left:0;bottom:30px;z-index:100}#MainCommands{text-align:center}#MainCommands>button{display:inline;float:none;margin:2px 4px}#ApiEditorCommands{padding:0 5px 200px 140px}#ApiEditorCommands>*{margin-right:10px}#BottomMargin{height:100px;clear:both}#Video{width:640px;height:480px;display:block;float:left;margin:0 16px}#Canvas{display:none}#Footer{width:100%;height:30px;display:block;padding:5px 10px;text-align:right;background-color:#000;position:fixed;left:0;bottom:0;z-index:100}#Footer a{color:#fff;text-decoration:none}#Versions{width:500px;margin:150px auto 20px auto;padding:50px;background-color:#f5f5f5;border-radius:10px}#Versions span{margin:10px;line-height:30px}.template{width:100%;display:block;float:left}.template-selectable{width:340px;display:block;float:left}.template-viewer-container{width:100%;display:block;float:right;margin:0 0 0 -340px}.template-viewer{margin:0 0 0 340px}.template-viewer .description{margin:10px 0 8px 0;padding:5px;background-color:#fefedd;border:solid 1px #c0c0c0;border-radius:5px}.template-viewer .samples-displayed{margin:0 0 8px 0;padding:5px;color:#f00;background-color:#ffc0cb;border:solid 1px #f00;border-radius:5px}.template-tab-container{min-height:600px}.main-form{clear:both}.nav-sites{margin:0 -10px;clear:both}.nav-site{width:220px;height:70px;float:left;margin:10px;position:relative;top:0;left:0;border-radius:5px}.nav-site .heading{width:50px;height:9px;position:absolute;top:-10px;left:5px;border-radius:3px 3px 0 0/3px 3px 0 0}.nav-site.dashboards{box-shadow:4px 4px 2px rgba(0,0,0,.2)}.nav-site .stacking1{width:220px;height:70px;border-bottom:solid 1px #c0c0c0;border-right:solid 1px #c0c0c0;position:absolute;top:1px;left:1px;border-radius:5px}.nav-site .stacking2{width:220px;height:70px;border-bottom:solid 1px #c0c0c0;border-right:solid 1px #c0c0c0;position:absolute;top:4px;left:4px;border-radius:5px}.nav-site a{width:100%;height:100%;display:block;padding:10px 3px 3px 10px;overflow:hidden;word-wrap:break-word;text-decoration:none}.nav-site.has-image a{padding:10px 3px 3px 65px}.nav-site span.title{margin-left:5px}.nav-site.to-parent{height:36px;background-color:#fff}.nav-site.to-parent a{padding:9px 3px 3px 30px}.nav-site.to-parent.has-image a{padding:9px 3px 3px 35px}.nav-site.to-parent .ui-icon{position:absolute;top:9px;left:9px}.nav-site .site-image-thumbnail{position:absolute;top:8px;left:8px;border-radius:8px}.nav-site .site-image-icon{position:absolute;top:4px;left:8px;border-radius:8px}.nav-site .conditions{font-size:.75em;color:#000;position:absolute;right:1px;bottom:1px}.nav-site .conditions span{display:block;float:left;margin:2px 2px 2px 0;padding:2px 5px;background-color:#eee;border-radius:2px}.nav-site .conditions span.overdue{color:#fff;background-color:#f00}.nav-site .conditions span.elapsed-time.old{color:#c0c0c0}.error-page{padding:30px 50px;border-top:dotted 1px #808080}.error-page-title{margin:0 0 20px 0;padding:10px 0;font-weight:bold;color:#f00;border-bottom:dotted 1px #f00}.error-page-message{margin:15px 0 0 0;padding:5px 20px;font-weight:bold;color:#fff;background-color:#808080}.error-page-action{margin:5px 0 0 0;padding:5px 10px;color:#c0c0c0;background-color:#dcdcdc}.error-page-action em{margin:10px;color:#000}.error-page-stacktrace{margin:5px 0 0 0;padding:5px 20px;background-color:#f5f5f5}.fieldset.enclosed{margin:0 0 10px 0;padding:10px;border:solid 1px #c0c0c0;clear:both}.fieldset.enclosed-half{width:380px;float:left;margin:0 0 10px 0;padding:10px;border:solid 1px #c0c0c0}.fieldset.enclosed-thin{margin:0 0 10px 0;padding:5px 5px 5px 10px;border:solid 1px #c0c0c0;clear:both}.fieldset.enclosed-thin [class*="field-auto"]{height:35px}.fieldset.enclosed-auto{float:left;margin:0 0 10px 10px;padding:5px 5px 5px 10px;border:solid 1px #c0c0c0}.fieldset[class^="enclosed"]>legend{margin:0 0 0 10px;font-weight:bold}.command-field{padding:10px 5px 5px 136px;text-align:center;clear:both}.command-field>button{display:block;float:left;margin:2px 4px}.command-center{padding:5px 5px 5px 5px;text-align:center;clear:both}.command-center>button{display:inline;float:none;margin:2px 4px}.command-left{float:left;padding:5px 5px 5px 5px;clear:both}.command-left>*{display:block;float:left}.command-left>button{margin:2px 4px}.command-left>.ui-icon{margin:7px 3px 0 15px}.command-right{padding:5px 5px 5px 5px;text-align:right;clear:both}.command-right>button{display:inline;float:none;margin:2px 4px}.field-normal{width:340px;height:45px;float:left;padding:0 20px 10px 0}.field-normal>.field-label{width:120px;float:left;margin-right:-120px;padding:7px 7px 7px 0;text-align:right}.field-normal>.field-control{width:100%;float:right}:not(td)>div.field-normal .container-normal{width:auto;margin-left:120px}td>.field-normal,td>.field-wide{width:100%;padding:0}.field-normal>.buttons{padding:3px 10px}.field-normal .control-text{height:30px}.field-wide{width:100%;min-height:45px;float:left;padding:0 10px 10px 0;clear:both}.field-wide>.field-label{width:120px;float:left;margin-right:-120px;padding:7px 7px 7px 0;text-align:right}.field-wide>.field-control{width:100%;float:right}:not(td)>div.field-wide .container-normal{margin-left:120px}.field-markdown{width:100%;min-height:45px;float:left;padding:0 10px 10px 0;clear:both}.field-markdown>.field-label{width:120px;float:left;margin-right:-120px;padding:7px 7px 7px 0;text-align:right}.field-markdown>.field-control{width:100%;float:right}:not(td)>div.field-markdown .container-normal{margin-left:120px}.field-textarea{width:100%;min-height:45px;float:left;padding:0 10px 10px 0;clear:both}.field-textarea>.field-label{width:120px;float:left;margin-right:-120px;padding:7px 7px 7px 0;text-align:right}.field-textarea>.field-control{width:100%;float:right}:not(td)>div.field-textarea .container-normal{margin-left:120px}.field-auto{width:auto;height:45px;float:left;margin-right:35px;padding:0 10px 10px 0}.field-auto>.field-label{width:120px;float:left;padding:7px 7px 7px 0;text-align:right}.field-auto>.field-control{width:auto;float:left}.field-auto-thin{width:auto;height:45px;float:left;margin:0 5px;padding:0 10px 10px 0}.field-auto-thin>.field-label{float:left;padding:7px 7px 7px 0;text-align:right}.field-auto-thin>.field-control{width:auto;float:left}.field-auto-thin select{max-width:120px}.field-vertical{width:330px;height:100%;float:left;padding:0 20px 20px 0}.field-vertical>.field-label{width:100%;float:left;margin-right:-120px;padding:5px 10px;text-align:center}.field-vertical>.field-control{width:100%;float:left;clear:both}.field-label{overflow:hidden}label.required:after{margin-left:3px;color:#f00;content:'*'}.field-control .unit{display:block;float:left;padding:5px 0 0 5px}.field-section{width:100%;display:block;float:left;margin:15px;padding:2px 5px;font-weight:bold;border-bottom:solid 1px #c0c0c0;clear:both}.container-normal{position:relative}.container-left{width:340px;float:left;margin-right:-340px;padding:0 0 15px 0;position:relative}.container-right{width:100%;float:right;position:relative}.container-right>*{display:block;margin-left:340px}.control-text{width:100%;min-height:30px;display:block;padding:6px 4px 2px 4px;color:#000;background:#f5f5f5;border:solid 1px #c0c0c0;overflow:hidden;border-radius:5px}.control-textbox{width:100%;height:30px;padding:4px;border:solid 1px #c0c0c0;border-radius:5px}.control-textbox.with-unit{width:70%;display:block;float:left}.control-textbox.anchor{width:100%;height:30px;padding:4px;border:solid 1px #c0c0c0;border-radius:5px;z-index:0}.control-textarea{width:100%;height:100px;padding:4px 4px 4px 6px;border:solid 1px #c0c0c0;border-radius:5px}.container-radio>label.error{top:0}.control-attachments+label.error{height:22px;position:absolute;top:50px}.control-attachments-upload{width:100%;display:block;float:left;padding:25px 0;text-align:center;border:dotted 2px #d19405;border-radius:3px}.control-attachments-items{width:100%;display:block;float:left}.control-attachments-item{width:100%;display:block;float:left;margin:5px 0 0 0;padding:5px 10px;text-align:left;border:solid 1px #d19405;border-radius:5px}.progress-bar{width:100%;height:30px;display:block;float:left;margin:5px 0 0 0;vertical-align:top;border:solid 1px #d19405;overflow:hidden;border-radius:5px}.progress-bar>div{width:0;height:100%;line-height:22px;color:#fff;background-color:#fece2f;border-radius:3px}.already-attachments{background-color:#fece2f}.preparation-delete{background-color:#f5f5f5;border:solid 1px #c0c0c0}.preparation-delete>a{color:#c0c0c0}.show-file{display:block;float:left;margin:0}.file-name{display:block;float:left}.delete-file{display:block;float:right;margin:2px -5px 0 0}.field-control .control-markup{width:100%;min-height:100px;float:left;padding:4px 25px 4px 6px;color:#000;background:#f5f5f5;border:solid 1px #c0c0c0;border-radius:5px}.md{width:100%;float:left;line-height:1.5em;font-family:Terminal,Hiragino Kaku Gothic Pro;word-wrap:break-word;word-break:break-all}.md>*{float:left;clear:both}.md h1{margin:10px 0 10px 0;font-weight:bold}.md h1:not(:first-child){margin:20px 0 10px 0}.md h2{margin:5px 0 8px 0;font-weight:bold}.md h2:not(:first-child){margin:20px 0 8px 0}.md h3{margin:3px 0 6px 0;font-weight:bold}.md h3:not(:first-child){margin:10px 0 6px 0}.md h4{margin:3px 0 4px 0;font-weight:bold}.md h4:not(:first-child){margin:10px 0 4px 0}.md h5{margin:3px 0 2px 0;font-weight:bold}.md h5:not(:first-child){margin:10px 0 2px 0}.md h6{margin:3px 0 2px 0;font-weight:bold}.md h6:not(:first-child){margin:10px 0 2px 0}.md hr{float:none;clear:both}.md ol{margin:0 10px 10px 32px;list-style-type:decimal}.md p{margin:0 0 10px 0;clear:both}.md table{width:auto;margin:0 0 10px 0;background-color:#fff}.md td{padding:5px 10px;border:solid 1px #c0c0c0}.md th{padding:5px 10px;font-weight:bold;border:solid 1px #c0c0c0}.md tbody tr:nth-child(odd){background-color:#f5f5f5}.md ul{margin:0 10px 10px 32px;list-style-type:disc}.control-markdown{width:100%;display:none;padding:4px 4px 4px 6px;border:solid 1px #c0c0c0;border-radius:5px}.control-dropdown{width:100%;height:30px;padding:4px;border:solid 1px #c0c0c0;border-radius:5px}.control-spinner{width:auto;height:22px;display:block;float:left;padding:1px;color:#000}.control-checkbox{display:block;float:left;margin:8px 0}.control-checkbox~label{display:block;float:left;margin:7px 5px 0 6px}.control-checkbox+.ui-icon.ui-icon-info{display:block;float:left;margin:7px -7px 0 0}.field-normal .control-checkbox+label{width:175px}_::-webkit-full-page-media,_:future,:root .field-normal .control-checkbox+label{width:172px}.container-radio{padding:7px 0}.container-radio>label{display:block;float:left;margin:0 5px 0 0;white-space:nowrap}.control-radio{display:block;float:left;margin:3px}.radio-clear-both .container-radio>label{clear:both}.control-slider{width:30px;float:left;margin:8px 0 0 12px}.control-slider-ui{width:140px;float:left;margin:11px 0 0 5px}.container-selectable .wrapper{width:100%;min-height:300px;display:block;float:left;background-color:#f5f5f5;border:solid 1px #c0c0c0;overflow:auto;border-radius:5px}.control-selectable{width:100%;display:block;float:left;padding:5px 10px 5px 5px;list-style-type:none;touch-action:pan-y}.control-selectable li{width:100%;min-height:24px;margin:3px;padding:2px 5px;border-radius:5px}.control-basket{margin-left:120px;padding:5px 5px 0 5px;background-color:#f5f5f5;border:solid 1px #c0c0c0;border-radius:5px}.control-basket>li{display:block;float:left;margin:0 5px 5px 0;padding:3px 5px;border-radius:5px}.control-basket>li>span{display:block;float:left;z-index:2}.comment{width:100%;display:block;float:left;margin:0 0 5px 0;padding:5px 10px 10px 20px;background:#fafad2;border:solid 1px #c0c0c0;position:relative;clear:both}.comment>*{display:block;float:left}.comment>.time{float:left;margin:0 0 8px -10px;margin-right:10px}.comment>.body{width:100%;clear:both}.comment>.button.edit{position:absolute;top:3px;right:20px;cursor:pointer}.comment>.button.delete{position:absolute;top:3px;right:5px;cursor:pointer}.comment>.control-markup{width:100%}.comment>.control-markdown{width:100%;display:none}.user{float:left}.user>span{display:block;float:left;font-weight:bold}.dept{float:left}.dept>span{display:block;float:left;font-weight:bold}.both{clear:both}.hidden{display:none}.right{float:right}.right-align{text-align:right;text-align-last:right}.center-align{text-align:center;text-align-last:center}.tooltip{display:none;position:absolute}.no-border{border:none}.grid{margin:0 0 10px 0}.grid.fixed{table-layout:fixed}.grid>thead>tr>caption{margin:0 0 5px 0}.grid>thead>tr>th{padding:6px;vertical-align:middle;border-top:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent;border-right:solid 1px #fff;word-wrap:break-word}.grid>thead>tr>th>div{width:100%;float:left;text-align:center;z-index:2}.grid>thead>tr>th span{display:block;float:left}.grid>thead>tr:first-child>th:first-child{border-radius:10px 0 0 0/10px 0 0 0}.grid>thead>tr:first-child>th:last-child{border-right:solid 1px transparent;border-radius:0 10px 0 0/0 10px 0 0}.grid>thead>tr>th.sortable:hover{cursor:pointer}.grid>tbody>tr>td{max-width:300px;border-left:dotted 1px #c0c0c0;border-right:dotted 1px #c0c0c0;word-wrap:break-word}.grid>tbody>tr.message-row>td{padding:0;text-align:center}.grid>tbody>tr [class*="status-"]{padding:0 5px;font-weight:bold;border:solid 1px #c0c0c0;border-radius:3px}.grid>tbody>tr>th{padding:6px;vertical-align:middle;font-weight:normal;background-color:#dcdcdc;border-top:solid 1px #fff;border-bottom:solid 1px #fff;border-left:solid 1px transparent;border-right:solid 1px transparent;word-wrap:break-word}.grid-row{background-color:#fff;border-bottom:solid 1px #c0c0c0}.grid-row td{overflow:hidden}.grid-row .comment{min-width:200px;max-height:100px;margin:0 0 3px 0;padding:3px 6px 3px 15px;background:#fafad2;border:solid 1px #fff;clear:both;overflow:hidden}.grid-row .comment.one-third{max-height:306px}.grid-row .comment.half{max-height:151px}.grid:not(.not-link) .grid-row:hover{background-color:#f5f5f5;cursor:pointer}.grid-row:hover .comment{background-color:#ffffe0}.grid-row p{float:left}.grid-row p.body{clear:both}.grid-row[data-history]{background-color:#d3d3d3}.grid-title-body{min-width:200px;max-height:306px;margin:0 0 3px 0;padding:3px 6px;background:inherit;border:solid 1px transparent;clear:both;overflow:hidden}.grid-title-body>.body{width:100%}.grid-title-body>.title+.body{padding:8px 0 0 10px}.dashboard-grid-header{position:sticky;top:-20px;z-index:3}.links{padding:0 10px}#Links>.fieldset{display:grid}#Links>.fieldset>div{overflow:auto}#Links>.fieldset>div .grid{width:max-content;min-width:100%}.link-creations button{display:block;float:left;margin:0 10px 0 0}.text{width:250px;display:block;float:left;border:solid 1px #c0c0c0}.datepicker{display:block;float:left;border:solid 1px #c0c0c0}.dropdown{display:block;float:left;border:solid 1px #c0c0c0}[class*="limit-"]{margin-left:10px;padding:0 5px}.limit-warning1{color:#f00}.limit-warning2{color:#f00;background-color:#ffccd5}.limit-warning3{color:#fff;background-color:#f00}.message{width:100%;text-align:center;position:fixed;left:0;bottom:78px;z-index:100}.message .body{margin-bottom:4px;position:relative;border-radius:20px}.message .close{background-color:#fff;position:absolute;top:11px;right:8px;cursor:pointer;border-radius:10px}.message-dialog{width:100%;display:block;float:left;margin:0 auto;text-align:center}.message-form-bottom{width:600px;margin:0 auto;text-align:center}.alert-error{min-height:32px;display:block;padding:5px;color:#fff;background-color:rgba(255,0,0,.9);border:solid 1px #f00}.alert-success{min-height:32px;display:block;padding:5px;color:#fff;background-color:rgba(0,128,0,.9);border:solid 1px #008000}.alert-warning{min-height:32px;display:block;padding:5px;color:#000;background-color:#ff0;border:solid 1px #ff0}.alert-information{min-height:32px;display:block;padding:5px;color:#fff;background-color:#00f;border:solid 1px #00f}label.error{width:100%;display:block;float:left;padding:0 5px;color:#f00;background-color:#fff;border-top:none;top:-5px;left:0;border-radius:0 0 5px 5px/0 0 5px 5px;z-index:2}.ui-spinner>label.error{margin-top:3px}.error{border:solid 1px #f00}.error+.ui-widget.ui-state-default.ui-multiselect{border:solid 1px #f00}.with-unit+label.error{width:70%;position:absolute;top:25px}.button-edit-markdown{position:absolute;top:5px;right:5px;cursor:pointer;z-index:1}.comment>.button-edit-markdown{top:6px;right:20px}.button-delete-address{cursor:pointer}.button-right-justified{float:right}.status-new{background:#fff}.status-preparation{color:#fff;background:#ff8c00}.status-inprogress{color:#fff;background:#008000}.status-review{background:#ff0}.status-closed{color:#fff;background:#00f}.status-rejected{color:#fff;background:#808080}.always-hidden{display:none}h3.title-header{height:40px;padding:10px 20px;text-align:center;background-color:#dcdcdc;border:solid 1px #a9a9a9;border-radius:10px 10px 0 0/10px 10px 0 0}.outgoing-mail .dialog{padding:0 !important}.outgoing-mail .ui-dialog-titlebar{display:none}.svg-work-value{width:50px;height:40px}.svg-work-value rect:nth-of-type(1){fill:gainsboro}.svg-work-value rect:nth-of-type(2){fill:darkseagreen}.svg-progress-rate{width:50px;height:40px}.svg-progress-rate.warning text{fill:red}.svg-progress-rate rect:nth-of-type(1){fill:gainsboro}.svg-progress-rate rect:nth-of-type(2){fill:gray}.svg-progress-rate rect:nth-of-type(3){fill:darkseagreen}.svg-progress-rate.warning rect:nth-of-type(3){fill:#ffccd5}.svg-kamban-aggregation-view{width:100%;height:20px}.svg-kamban-aggregation-view rect{height:20px;fill:darkseagreen}.svg-crosstab{width:100%;height:20px}.svg-crosstab rect{height:20px;fill:darkseagreen}.show-password{position:absolute;top:4px;right:-27px;cursor:pointer;z-index:10}input[type="password"]::-ms-reveal{display:none}.axis{fill:none;stroke:gray;shape-rendering:crispEdges}.h2{margin:0 0 5px 0;padding:0}.h3{margin:0 0 5px 10px;padding:0}.h4{margin:0 0 5px 20px;padding:0}.h5{margin:0 0 5px 30px;padding:0}.h6{margin:0 0 5px 40px;padding:0}.h2>h2{padding:5px 0;font-weight:bold;border-bottom:solid 1px #c0c0c0}.h3>h3{font-weight:bold}.h4>h4{font-weight:bold}.h5>h5{font-weight:bold}.h6>h6{font-weight:bold}.w50{width:50px}.w100{width:100px}.w150{width:150px}.w200{width:200px}.w250{width:250px}.w300{width:300px}.w350{width:350px}.w400{width:400px}.w450{width:450px}.w500{width:500px}.w550{width:550px}.w600{width:600px}.h100{height:100px}.h150{height:150px}.h200{height:200px}.h250{height:250px}.h300{height:300px}.h350{height:350px}.h400{height:400px}.h450{height:450px}.h500{height:500px}.h550{height:550px}.h600{height:600px}.m-l10{margin-left:10px}.m-l20{margin-left:20px}.m-l30{margin-left:30px}.m-l40{margin-left:40px}.m-l50{margin-left:50px}.paragraph{padding:3px 3px 3px 10px}.dialog{display:none;padding:15px 0 10px 0 !important}.dialog .fieldset{margin:0 10px 10px 10px}.link span{margin-right:5px}.link span.bold{font-weight:bold;cursor:pointer}.histories-form{padding:20px}.ui-widget input,.ui-widget select,.ui-widget button{font-family:Hiragino Kaku Gothic Pro,"Meiryo UI",sans-serif}.ui-widget textarea{line-height:1.5em;font-family:Terminal,Hiragino Kaku Gothic Pro}.ui-widget{font-size:1em}.ui-button{padding:4px 4px 4px 2px !important}.ui-dialog{overflow:visible !important}.ui-icon.a{float:left;margin:6px 0 0 0}.ui-spinner{display:block;float:left;background:#fff;max-height:46px}.ui-widget.ui-state-default.ui-multiselect{height:30px;background:#fff;border:solid 1px #c0c0c0;overflow:hidden;border-radius:5px}.ui-multiselect-checkboxes{min-height:300px}.ui-multiselect-checkboxes input{margin:0 5px}.ui-corner-all.ui-state-hover{border-radius:2px}.ui-icon-white{background-image:url(../styles/plugins/images/ui-icons_ffffff_256x240.png)}div.field-control .ui-multiselect.ui-state-disabled{background-color:#f5f5f5;opacity:1}.height-auto{max-height:none !important}.focus-inform{background-color:#fff !important;border:solid 1px #ffa500 !important}.menu-negative{border-left:solid 1px #fff;border-right:solid 1px #fff;position:absolute;z-index:10}.menu-negative>li{width:100%;display:block;float:left;border-top:dotted 1px #fff;cursor:pointer;clear:both}.menu-sort{border-left:solid 1px #fff;border-right:solid 1px #fff;position:absolute;border-radius:0 0 10px 10px/0 0 10px 10px;z-index:10}.menu-sort>li{width:100%;display:block;float:left;border-top:dotted 1px #fff;cursor:pointer;clear:both}.menu-sort>li.ui-menu-divider{height:initial;font-size:initial}.menu-sort>li.grid-header-filter .ui-icon{position:initial}.menu-sort>li:not(.grid-header-filter) div.field-control>*{border:solid 1px #c0c0c0}.current-time{position:absolute;top:9px;right:-17px;cursor:pointer;z-index:10}.current-user{position:absolute;top:9px;right:-17px;cursor:pointer;z-index:10}.current-dept{position:absolute;top:9px;right:-17px;cursor:pointer;z-index:10}input:focus{background-color:#ffc}select:focus:not(.has-css){background-color:#ffc}textarea:focus{background-color:#ffc}.ssoLoginMessage{margin:10px;padding:6px;border-top:solid 1px #c0c0c0}#EnterPriseBanner{width:238px;position:fixed;right:8px;bottom:280px;z-index:3}#SupportBanner{width:238px;position:fixed;right:8px;bottom:180px;z-index:3}#CasesBanner{width:238px;position:fixed;right:8px;bottom:80px;z-index:3}.annonymous .close-announcement{display:none}.grid-stack{background-color:#fff;margin:10px}.grid-stack-item-content{background-color:#f5f5f5}.dashboard-timeline-container{display:flex;flex-direction:column;gap:4px}.dashboard-timeline-item{background-color:#fff;margin:4px;padding:8px;transition:background-color .3s;cursor:pointer;box-shadow:0 2px 4px rgba(0,0,0,.2);border-radius:4px}.dashboard-timeline-item:hover{background-color:#ebebeb}.dashboard-timeline-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.dashboard-timeline-header a{color:#007bff;font-weight:bold;min-width:40px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dashboard-timeline-header-closed{overflow:hidden;max-height:0;margin-bottom:0}.dashboard-timeline-item:hover .dashboard-timeline-header-closed{max-height:200px;margin-bottom:4px;overflow:auto;transition:max-height .5s linear 1s}.dashboard-timeline-record-time{font-size:.8em;color:#777;margin-left:3px;font-weight:bold;display:flex;white-space:nowrap}.dashboard-timeline-record-time time{margin-left:4px}.dashboard-timeline-record-time .elapsed-time{margin-left:4px;font-weight:bold;background-color:#eee}.dashboard-timeline-title{font-size:1.2em;font-weight:bold;color:#333}.dashboard-timeline-body{margin-top:8px;line-height:1.5;color:#555}.dashboard-timeline-body-closed{margin-top:0;overflow:hidden;max-height:0}.dashboard-timeline-item:hover .dashboard-timeline-body-closed{margin-top:8px;max-height:300px;overflow:auto;transition:max-height .5s linear 1s,margin-top 0s;transition-delay:1s}.grid-stack-item-content{background-color:#f2f2f2;padding:16px;border-radius:5px;box-shadow:0 2px 4px rgba(0,0,0,.1);display:flex;flex-direction:column}.grid-stack>.grid-stack-item>.grid-stack-item-content{overflow-x:auto}.dashboard-part-title{font-size:1.2em;color:#333;font-weight:bold;margin-bottom:10px}.dashboard-part-nav{margin-top:10px}.dashboard-part-nav-menu{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap}.dashboard-part-nav-menu>.dashboard-part-nav-item{max-width:200px;min-width:120px;margin-left:10px;white-space:nowrap;overflow:hidden;padding:4px;box-shadow:0 2px 4px rgba(0,0,0,.2)}.dashboard-part-nav-menu-vartical{list-style:none;padding:0;margin:0;display:flex;flex-direction:column}.dashboard-part-nav-item{color:#333;margin-bottom:8px;padding:4px;display:flex;border-radius:4px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.2)}.dashboard-part-nav-item:hover{background-color:#ddd}.dashboard-part-nav-link{padding:4px;text-decoration:none;color:inherit;width:100%}.dashboard-part-refresh{position:absolute;top:8px;left:8px;border:none;color:#636363;background-color:transparent;opacity:0;padding-top:0;padding-left:0;z-index:5}@keyframes custom-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.dashboard-part-road{position:absolute;left:calc(50% - 25px);top:calc(50% - 25px);font-size:50px;color:#636363;display:inline-block;animation:custom-spin 1s linear infinite}#AnalyPartTimePeriodValueField{width:230px}#AnalyPartTimePeriodField{width:110px}#AnalyPartTimePeriodField .field-label{display:none}#AnalyPartTimePeriodField div.container-normal{margin-left:0}.gs-20>.grid-stack-item{width:5%;min-width:5%}.gs-20>.grid-stack-item[gs-w="1"]{width:5%;min-width:5%}.gs-20>.grid-stack-item[gs-x="1"]{left:5%}.gs-20>.grid-stack-item[gs-w="2"]{width:10%}.gs-20>.grid-stack-item[gs-x="2"]{left:10%}.gs-20>.grid-stack-item[gs-w="3"]{width:15%}.gs-20>.grid-stack-item[gs-x="3"]{left:15%}.gs-20>.grid-stack-item[gs-w="4"]{width:20%}.gs-20>.grid-stack-item[gs-x="4"]{left:20%}.gs-20>.grid-stack-item[gs-w="5"]{width:25%}.gs-20>.grid-stack-item[gs-x="5"]{left:25%}.gs-20>.grid-stack-item[gs-w="6"]{width:30%}.gs-20>.grid-stack-item[gs-x="6"]{left:30%}.gs-20>.grid-stack-item[gs-w="7"]{width:35%}.gs-20>.grid-stack-item[gs-x="7"]{left:35%}.gs-20>.grid-stack-item[gs-w="8"]{width:40%}.gs-20>.grid-stack-item[gs-x="8"]{left:40%}.gs-20>.grid-stack-item[gs-w="9"]{width:45%}.gs-20>.grid-stack-item[gs-x="9"]{left:45%}.gs-20>.grid-stack-item[gs-w="10"]{width:50%}.gs-20>.grid-stack-item[gs-x="10"]{left:50%}.gs-20>.grid-stack-item[gs-w="11"]{width:55%}.gs-20>.grid-stack-item[gs-x="11"]{left:55%}.gs-20>.grid-stack-item[gs-w="12"]{width:60%}.gs-20>.grid-stack-item[gs-x="12"]{left:60%}.gs-20>.grid-stack-item[gs-w="13"]{width:65%}.gs-20>.grid-stack-item[gs-x="13"]{left:65%}.gs-20>.grid-stack-item[gs-w="14"]{width:70%}.gs-20>.grid-stack-item[gs-x="14"]{left:70%}.gs-20>.grid-stack-item[gs-w="15"]{width:75%}.gs-20>.grid-stack-item[gs-x="15"]{left:75%}.gs-20>.grid-stack-item[gs-w="16"]{width:80%}.gs-20>.grid-stack-item[gs-x="16"]{left:80%}.gs-20>.grid-stack-item[gs-w="17"]{width:85%}.gs-20>.grid-stack-item[gs-x="17"]{left:85%}.gs-20>.grid-stack-item[gs-w="18"]{width:90%}.gs-20>.grid-stack-item[gs-x="18"]{left:90%}.gs-20>.grid-stack-item[gs-w="19"]{width:95%}.gs-20>.grid-stack-item[gs-x="19"]{left:95%}.gs-20>.grid-stack-item[gs-w="20"]{width:100%}div.lower-search-ui{margin:4px 0 0 0} \ No newline at end of file +@charset "utf-8";*{box-sizing:border-box}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-style:normal;font-weight:normal;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}input,textarea{margin:0;padding:0}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th{text-align:left}a:focus{outline:none}.cf:before,.cf:after{content:" ";display:table}.cf:after{clear:both}.cf{*zoom:1}.both{clear:both}img{max-width:100%;height:auto;width:auto}::-webkit-input-placeholder{color:#c0c0c0}:-moz-placeholder{color:#c0c0c0;opacity:1}::-moz-placeholder{color:#c0c0c0;opacity:1}:-ms-input-placeholder{color:#c0c0c0}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type="number"]{-moz-appearance:textfield}body{min-width:1200px;font-size:.75em;font-family:Hiragino Kaku Gothic Pro,"Meiryo UI",sans-serif;clear:both}h1{clear:both}h2{clear:both}h3{clear:both}legend{cursor:pointer}legend>*{display:block;float:left}label{position:relative;cursor:pointer;z-index:2}input{background-color:#fff;position:relative;z-index:2}select{position:relative;z-index:2}table{width:100%;border:0;border-collapse:collapse;clear:both}td{padding:3px;vertical-align:top;color:#000}td.right-align>p{float:right}pre{line-height:1.5em;font-family:Terminal,Hiragino Kaku Gothic Pro;word-wrap:break-word;word-break:break-all;white-space:pre-wrap}#Logo{padding:3px 0}#CorpLogo{display:block;float:left;margin:3px 0 0 0}#ProductLogo{display:block;float:left;padding:0 0 0 5px;font-size:26px;font-weight:bold;color:#696969;text-decoration:none}#PortalLink{position:relative;top:-38px;right:40px;float:right}#LoginFieldSet{width:500px;margin:150px auto 20px auto;padding:50px;background-color:#f5f5f5;border-radius:10px}#LoginCommands{text-align:right;clear:both}#AuthenticationByMail{float:left;padding:0 0 10px 50px}#TotpQRCode{width:38%;height:160px;margin-left:auto;margin-right:auto}#TotpQRCodeText{margin-left:auto;margin-right:auto}#qrCodeText{font-size:1.3em}.annonymous .close-announcement{display:none}#TotpAuthenticationCodeSeparate{width:150px;display:flex;padding:0 0 10px 40px}#TotpAuthenticationCodeSeparate>.field-normal>.field-control{margin-left:unset}#TotpAuthenticationCodeSeparate>.field-normal>.field-control>.container-normal{margin-left:10px}.totp-authentication-code{height:25px;width:25px;border:none;outline:none;border-bottom:2px solid #000;font-size:125%;text-align:center}.totp-form{visibility:hidden}#Demo{width:500px;margin:0 auto}#DemoFields{padding:20px 10px 10px 10px}#SearchPermissionElements{margin-left:15px}#Breadcrumb{float:left;margin:0 0 5px 0}#Breadcrumb .item{display:block;float:left;padding:3px 5px}#Breadcrumb .item.trashbox{display:block;float:left;color:#fff;background-color:#f00;border-radius:3px}#Breadcrumb .separator{margin:0 0 0 8px}#Guide>div{width:100%;display:block;float:left;margin:0 0 5px 0;padding:5px 10px;background:#fafad2;border:solid 1px #c0c0c0;position:relative;clear:both;border-radius:5px}#Guide>.with-icon-close{padding:10px 5px 10px}#Guide>div>#ReduceGuides{float:left;cursor:pointer;padding-right:5px}#Guide>#ExpandGuides{font-weight:bold;cursor:pointer;padding:10px 5px 10px}#CopyToClipboards>.display-control{float:left;cursor:pointer}#Header{width:100%;float:left;padding:0 6px;border:none;position:relative;clear:both}.theme-version-1_0 #Navigations,#NavigationsUpperRight{height:30px;margin:0 0 5px 0;padding:0 5px 0 15px;border:none;top:0;right:5px;border-radius:20px 0 0 20px;float:right}#NavigationMenu{float:left;margin-right:5px}#NavigationMenu>li{width:158px;height:30px;display:block;float:left;position:relative}#NavigationMenu>li>div{height:30px;text-align:center;line-height:30px;cursor:pointer}#NavigationMenu>li>div>a{height:30px;display:block;text-decoration:none}#NavigationMenu .menu{width:158px;display:none;border-top:none !important;position:absolute;top:30px;right:0;border-radius:0 0 5px 5px;z-index:4}#NavigationMenu .menu>li>a{display:block;text-decoration:none}#NavigationMenu .menu>li>a.ui-state-active{font-weight:normal;text-decoration:none}#TemplateDialog>div{padding:0 15px;overflow:hidden}#SearchField{float:left;margin:3px 0;color:#000}#Search{height:24px}#SwitchUserInfo{width:100%;display:block;float:left;margin:0 10px 5px 0;padding:5px 10px;color:#fff;background-color:#00f;border-radius:7px}#SwitchUserInfo>a{width:100%;display:block;float:left;color:#fff;text-decoration:none}#ExcessLicenseWarning{width:100%;display:block;float:left;margin:0 10px 5px 0;padding:5px 10px;color:#fff;background:#f00;border-radius:7px}#PublishWarning{width:100%;display:block;float:left;margin:0 10px 5px 0;padding:5px 10px;background:#f00;border-radius:7px}#PublishWarning>a{width:100%;display:block;float:left;color:#fff;text-decoration:none}#LockedWarning{width:100%;display:block;float:left;margin:0 10px 5px 0;padding:5px 10px;background:#f00;border-radius:7px}#LockedWarning>div{width:100%;display:block;float:left;color:#fff;text-decoration:none}#Application{width:100%;float:left;margin:10px 0 0 0;padding:0 10px 120px 10px;position:relative;clear:both}#Application>.site-image-icon{display:block;float:left;margin:0 10px 0 0}#StartGuide{width:100%;display:block;float:left;margin:0 0 10px 0;padding:50px 0 0 0;background-color:#f5f5f5;position:relative;border-radius:10px}#StartGuide>#StartGuideContents{width:900px;margin:0 auto}#StartGuide>#StartGuideContents>a{width:150px;display:block;float:left;margin:0 37px;padding:5px;text-align:center;border-radius:5px}#StartGuide>#StartGuideContents>a:hover{background-color:#fff}#StartGuide>#StartGuideContents>a>*{display:block;text-align:center;clear:both}#StartGuide>#StartGuideContents>a>img{width:50px;margin:5px 50px}#StartGuide>#DisableStartGuideField{display:block;float:left;margin:50px 0 0 20px;clear:both}#StartGuide>.ui-icon{position:absolute;top:10px;right:10px;cursor:pointer}#SiteImageIconContainer{float:left}#SiteImageIconContainer>*{margin:0 5px 0 0}#HeaderTitleContainer{float:left;margin:0 0 10px 0}#HeaderTitle{font-size:20px;font-weight:bold;color:#d2691e}#Notes>*{width:100%;float:left;margin:0 10px 5px 0}#Notes>.history{width:100%;display:block;float:left;padding:5px 10px;color:#fff;background-color:#00f;border-radius:7px}#Notes>.readonly{width:100%;display:block;float:left;padding:5px 10px;color:#fff;background-color:#ffa500;border-radius:7px}#ViewSelectorField{position:absolute;top:-10px;right:0}#ViewFilters{width:100%;float:left;margin:0 0 5px 0;padding:5px 5px 2px 5px;border:solid 1px #c0c0c0;border-radius:5px}#ViewFilters.reduced{width:auto;padding:0;border:none}#ViewFilters>.field-auto-thin{height:32px;float:left;padding:0}#ViewFilters_Reset{display:block;float:left;margin:0 20px 0 0}#ViewFilters>.display-control{float:left;margin:0 5px 0 0;padding:5px 10px 5px 0;font-weight:bold;cursor:pointer}#ViewFilters .ui-icon.ui-icon-info{transform:scale(1,-1)}#FilterButton{display:block;float:left}#Aggregations{width:100%;float:left;margin:0 0 5px 0;padding:3px 5px 5px 5px;border:solid 1px #c0c0c0;border-radius:5px}#Aggregations.reduced{width:auto;padding:0;border:none}#Aggregations .label{height:26px;display:block;float:left;margin:2px 5px 0 0;padding:5px 10px;background:#dcdcdc;border-radius:5px}#Aggregations .label.overdue{font-weight:bold;color:#fff;background-color:#f00;cursor:pointer}#Aggregations .data{height:26px;display:block;float:left;margin:2px 5px 0 0;padding:5px}#Aggregations .data.overdue{color:#f00;cursor:pointer}#Aggregations em{display:block;float:left;margin-right:5px;font-weight:bold}#Aggregations>.display-control{float:left;margin:0 5px 0 0;padding:5px 10px 5px 0;font-weight:bold;cursor:pointer}#SitePackagesSelectable span.include-data{margin:0 0 0 10px;color:#f00}.CalendarDate{margin-right:10px}.CalendarBody table{table-layout:fixed}div.Calendar>.CalendarBody>.grid>thead>tr>th{padding:5px;text-align:center;border:solid 1px #c0c0c0}th.calendar-header{text-align:center;background-color:#fff}.CalendarBody .saturday{background-color:#add8e6}.CalendarBody .sunday{background-color:#ffc0cb}.CalendarBody td{padding:0;border:solid 1px #c0c0c0}.CalendarBody td>div{min-height:50px;padding:5px}.CalendarBody td.hover{background-color:#f5f5f5}.CalendarBody .other-month{background-color:#dcdcdc}.CalendarBody .today{border:solid 2px #00f;z-index:20}.CalendarBody .item{height:25px;margin:5px 0 0 0;background-color:#fafad2;border:solid 1px #c0c0c0;border-radius:3px}.CalendarBody .item.hover{background-color:#fff;border:solid 1px #ffa500}.CalendarBody .item.changed{font-weight:bold;background-color:#ff0;border:solid 1px #ffa500}.CalendarBody .item .connection{width:14px;height:25px;background-color:#fafad2;border-top:solid 1px #c0c0c0;border-bottom:solid 1px #c0c0c0;position:relative;top:-1px;left:-14px}.CalendarBody .item .connection.hover{background-color:#fff;border-top:solid 1px #ffa500;border-bottom:solid 1px #ffa500}.CalendarBody .item .connection.changed{font-weight:bold;background-color:#ff0;border-top:solid 1px #ffa500;border-bottom:solid 1px #ffa500}.CalendarBody .item .title{padding:5px 0;position:absolute;overflow:hidden;white-space:nowrap;z-index:30}.CalendarBody .item .title.sub{display:none}.CalendarBody .item .title>span:not(.ui-icon){margin-right:3px}.CalendarBody .dragging{height:25px;padding:5px;background-color:#fafad2;border-radius:3px;z-index:50}.CalendarBody .dummy{height:25px;margin:5px 0 0 0}.fc .fc-scrollgrid-section-sticky>*{z-index:2}#Crosstab .crosstab-row{border-bottom:dotted 1px #c0c0c0}#Crosstab .saturday{background-color:#eee}#Crosstab .sunday{background-color:#fee}#CrosstabMonth{margin-right:10px}#Gantt{width:100%;background-color:#f5f5f5;border-radius:20px}#Gantt .saturday{fill:#eee}#Gantt .sunday{fill:#fee}#Gantt .date{stroke:white}#Gantt .now{stroke:red}#Gantt .planned rect{cursor:pointer;fill:gainsboro}#Gantt .planned rect.summary{cursor:auto}#Gantt .earned rect{cursor:pointer;fill:darkseagreen}#Gantt .earned rect.summary{cursor:auto}#Gantt rect.delay{fill:#ffccd5}#Gantt rect.completed{fill:lightsteelblue}#Gantt .title text{cursor:pointer}#Gantt .title text.delay{fill:red}#Gantt .title text.summary{font-size:1.2em;font-weight:bold;cursor:auto}#GanttStartDate{margin-right:10px}#GanttAxis{width:calc(100% + 20px);height:50px;margin-left:-10px;margin-top:-25px;background-color:rgba(255,255,255,.5);position:sticky;left:0;bottom:75px}#GanttAxis .saturday{fill:gainsboro}#GanttAxis .sunday{fill:#fdd}#GanttAxis .weekday{fill:whitesmoke}#GanttAxis .date{stroke:white}#BurnDown{width:100%;height:350px;background-color:#f5f5f5;border-radius:20px}#BurnDown .now{stroke:red}#BurnDown .total{fill:none;stroke:green}#BurnDown .planned{fill:none;stroke:gray}#BurnDown .earned{fill:none;stroke:orange}#BurnDown .total circle{fill:green}#BurnDown .planned circle{fill:gray}#BurnDown .earned circle{fill:orange}#BurnDownDetails>tbody>tr:hover{background-color:#f5f5f5;cursor:pointer}#BurnDownDetails>tbody>tr>td{padding:6px}#BurnDownDetails>tbody>tr>td.warning{font-weight:bold;color:#f00}#BurnDownDetails>tbody>tr>td.difference{font-size:1.3em;font-weight:bold;color:#00f;background-color:#e0ffff}#BurnDownDetails>tbody>tr>td.difference.warning{color:#f00;background-color:#ffccd5}#BurnDownDetails .user-info{margin:5px;padding:8px;font-weight:bold;background-color:#eee8aa}#BurnDownDetails .items{padding:5px 0 5px 20px}#BurnDownDetails .items a{color:#000;text-decoration:none}#BurnDownDetails .items a:hover{color:#00f;text-decoration:underline}#TimeSeries{width:100%;height:450px;background-color:#f5f5f5;border-radius:20px}#TimeSeries .surface{stroke:white}#TimeSeries .index{fill:black}.kambanbody .kamban-row{border-bottom:dotted 1px #c0c0c0}.kambanbody .kamban-container{background-color:#fff}.kambanbody .kamban-container>div{min-height:30px}.kambanbody .kamban-container.hover{background-color:#f5f5f5}.kambanbody .kamban-container .kamban-item:last-child{margin:3px 3px 30px 3px}.kambanbody .kamban-item{margin:3px;padding:4px 16px 4px 5px;background-color:#fafad2;border:solid 1px #c0c0c0;position:relative;cursor:pointer;border-radius:5px;overflow:hidden}.kambanbody .kamban-item:hover{background-color:#fff;border:solid 1px #ffa500}.kambanbody .kamban-item.changed{font-weight:bold;background-color:#ff0;border:solid 1px #ffa500}.kambanbody .kamban-item .ui-icon{position:absolute;top:0;right:0}.kambanbody .kamban-item>span{margin-right:3px}.kambanbody .dragging{padding:5px;background-color:#fafad2;border-radius:3px;z-index:50}.dashboard-kamban-header{position:sticky;top:-20px;z-index:1}.dashboard-kamban-header>th{overflow-x:hidden}#ImageLib .item{width:250px;height:250px;float:left;margin:10px 10px 0 0;padding:10px;border:solid 1px #c0c0c0;position:relative;overflow:hidden}#ImageLib .item .image{width:100%;float:left;margin:5px 0 0 0}#ImageLib .item .delete-image{float:left;position:absolute;right:5px;bottom:5px}#RecordHeader{width:100%;float:left;margin:0 0 5px 0}#RecordInfo{float:left;padding:6px 0 0 0}#RecordInfo div{float:left;margin-right:50px}#RecordInfo div p{float:left;margin-right:5px}#RecordInfo div p .elapsed-time{float:left;padding:0 5px;font-weight:bold;background-color:#eee;border-radius:2px}#RecordSwitchers{float:right}#RecordSwitchers>*{float:left}#RecordSwitchers .current{height:26px;display:block;float:left;margin:0 1px 0 0;padding:5px;border-radius:5px}#TemplateTabsContainer{width:100%;float:left}#Editor{width:100%;float:left;clear:both}#EditorTabsContainer{width:73%;float:left;margin:0 0 20px 0}#EditorTabsContainer.max{width:100%}#MailEditorTabsContainer{width:100%;float:left;margin:0 0 20px 0;border:none}#EditorComments{width:27%;float:right;margin:0 0 15px 0;padding:0 0 0 5px}#EditorComments .title-header{margin:3px 10px 8px 0}#CommentField{margin:0 0 5px 0}#OutgoingMailsForm{width:73%;float:left}#OutgoingMailsForm>.item{width:100%;float:left;position:relative;border-radius:10px}#OutgoingMailsForm .content{width:100%;float:left;margin:5px 0 20px 0;padding:10px 0 0 0;border:solid 1px #c0c0c0;border-top:none;border-radius:0 0 10px 10px/0 0 10px 10px}#DropDownSearchDialogForm{width:100%;padding:0 20px}#ProcessTabsContainer{margin:0 20px 10px 20px;clear:both}#StatusControlTabsContainer{margin:0 20px 10px 20px;clear:both}#StatusControlColumnHash .column-control-types{margin:0 0 0 10px}#ViewTabsContainer{margin:0 20px 10px 20px;clear:both}#ExportTabsContainer{margin:0 20px 10px 20px;clear:both}#EditorDetailTabsContainer{margin:0 20px 10px 20px;clear:both}#ColumnAccessControlTabsContainer{margin:0 20px 10px 20px;clear:both}#SearchResults{width:80%;float:left;margin:0 100px}#SearchResults .count{float:left;margin:0 0 10px 0}#SearchResults .count .label{height:26px;display:block;float:left;margin:0 5px 5px 0;padding:5px 10px;background:#dcdcdc;border-radius:5px}#SearchResults .count .data{height:26px;display:block;float:left;margin:0 5px 5px 0;padding:5px}#SearchResults .result{width:100%;float:left;padding:15px;border:solid 1px #fff;clear:both}#SearchResults .result>ul{display:block;float:left;clear:both}#SearchResults .result>h3{display:block;float:left;margin:5px 0;clear:both}#SearchResults .result>h3>a{font-size:1.3em;font-weight:bold}#SearchResults .result>h3>a>span{font-weight:bold}#SearchResults .result>p{display:block;float:left;clear:both}#SearchResults .result:hover{border:solid 1px #ffa500;cursor:pointer}.highlight{background:#ff0}#MainCommandsContainer{width:100%;height:47px;padding:7px 0 0 0;background-color:rgba(0,0,0,.65);position:fixed;left:0;bottom:30px;z-index:100}#MainCommands{text-align:center}#MainCommands>button{display:inline;float:none;margin:2px 4px}#ApiEditorCommands{padding:0 5px 200px 140px}#ApiEditorCommands>*{margin-right:10px}#BottomMargin{height:100px;clear:both}#Video{width:640px;height:480px;display:block;float:left;margin:0 16px}#Canvas{display:none}#Footer{width:100%;height:30px;display:block;padding:5px 10px;text-align:right;background-color:#000;position:fixed;left:0;bottom:0;z-index:100}#Footer a{color:#fff;text-decoration:none}#Versions{width:500px;margin:150px auto 20px auto;padding:50px;background-color:#f5f5f5;border-radius:10px}#Versions span{margin:10px;line-height:30px}.template{width:100%;display:block;float:left}.template-selectable{width:340px;display:block;float:left}.template-viewer-container{width:100%;display:block;float:right;margin:0 0 0 -340px}.template-viewer{margin:0 0 0 340px}.template-viewer .description{margin:10px 0 8px 0;padding:5px;background-color:#fefedd;border:solid 1px #c0c0c0;border-radius:5px}.template-viewer .samples-displayed{margin:0 0 8px 0;padding:5px;color:#f00;background-color:#ffc0cb;border:solid 1px #f00;border-radius:5px}.template-tab-container{min-height:600px}.main-form{clear:both}.nav-sites{margin:0 -10px;clear:both}.nav-site{width:220px;height:70px;float:left;margin:10px;position:relative;top:0;left:0;border-radius:5px}.nav-site .heading{width:50px;height:9px;position:absolute;top:-10px;left:5px;border-radius:3px 3px 0 0/3px 3px 0 0}.nav-site.dashboards{box-shadow:4px 4px 2px rgba(0,0,0,.2)}.nav-site .stacking1{width:220px;height:70px;border-bottom:solid 1px #c0c0c0;border-right:solid 1px #c0c0c0;position:absolute;top:1px;left:1px;border-radius:5px}.nav-site .stacking2{width:220px;height:70px;border-bottom:solid 1px #c0c0c0;border-right:solid 1px #c0c0c0;position:absolute;top:4px;left:4px;border-radius:5px}.nav-site a{width:100%;height:100%;display:block;padding:10px 3px 3px 10px;overflow:hidden;word-wrap:break-word;text-decoration:none}.nav-site.has-image a{padding:10px 3px 3px 65px}.nav-site span.title{margin-left:5px}.nav-site.to-parent{height:36px;background-color:#fff}.nav-site.to-parent a{padding:9px 3px 3px 30px}.nav-site.to-parent.has-image a{padding:9px 3px 3px 35px}.nav-site.to-parent .ui-icon{position:absolute;top:9px;left:9px}.nav-site .site-image-thumbnail{position:absolute;top:8px;left:8px;border-radius:8px}.nav-site .site-image-icon{position:absolute;top:4px;left:8px;border-radius:8px}.nav-site .conditions{font-size:.75em;color:#000;position:absolute;right:1px;bottom:1px}.nav-site .conditions span{display:block;float:left;margin:2px 2px 2px 0;padding:2px 5px;background-color:#eee;border-radius:2px}.nav-site .conditions span.overdue{color:#fff;background-color:#f00}.nav-site .conditions span.elapsed-time.old{color:#c0c0c0}.error-page{padding:30px 50px;border-top:dotted 1px #808080}.error-page-title{margin:0 0 20px 0;padding:10px 0;font-weight:bold;color:#f00;border-bottom:dotted 1px #f00}.error-page-message{margin:15px 0 0 0;padding:5px 20px;font-weight:bold;color:#fff;background-color:#808080}.error-page-action{margin:5px 0 0 0;padding:5px 10px;color:#c0c0c0;background-color:#dcdcdc}.error-page-action em{margin:10px;color:#000}.error-page-stacktrace{margin:5px 0 0 0;padding:5px 20px;background-color:#f5f5f5}.fieldset.enclosed{margin:0 0 10px 0;padding:10px;border:solid 1px #c0c0c0;clear:both}.fieldset.enclosed-half{width:380px;float:left;margin:0 0 10px 0;padding:10px;border:solid 1px #c0c0c0}.fieldset.enclosed-thin{margin:0 0 10px 0;padding:5px 5px 5px 10px;border:solid 1px #c0c0c0;clear:both}.fieldset.enclosed-thin [class*="field-auto"]{height:35px}.fieldset.enclosed-auto{float:left;margin:0 0 10px 10px;padding:5px 5px 5px 10px;border:solid 1px #c0c0c0}.fieldset[class^="enclosed"]>legend{margin:0 0 0 10px;font-weight:bold}.command-field{padding:10px 5px 5px 136px;text-align:center;clear:both}.command-field>button{display:block;float:left;margin:2px 4px}.command-center{padding:5px 5px 5px 5px;text-align:center;clear:both}.command-center>button{display:inline;float:none;margin:2px 4px}.command-left{float:left;padding:5px 5px 5px 5px;clear:both}.command-left>*{display:block;float:left}.command-left>button{margin:2px 4px}.command-left>.ui-icon{margin:7px 3px 0 15px}.command-right{padding:5px 5px 5px 5px;text-align:right;clear:both}.command-right>button{display:inline;float:none;margin:2px 4px}.field-normal{width:340px;height:45px;float:left;padding:0 20px 10px 0}.field-normal>.field-label{width:120px;float:left;margin-right:-120px;padding:7px 7px 7px 0;text-align:right}.field-normal>.field-control{width:100%;float:right}:not(td)>div.field-normal .container-normal{width:auto;margin-left:120px}td>.field-normal,td>.field-wide{width:100%;padding:0}.field-normal>.buttons{padding:3px 10px}.field-normal .control-text{height:30px}.field-wide{width:100%;min-height:45px;float:left;padding:0 10px 10px 0;clear:both}.field-wide>.field-label{width:120px;float:left;margin-right:-120px;padding:7px 7px 7px 0;text-align:right}.field-wide>.field-control{width:100%;float:right}:not(td)>div.field-wide .container-normal{margin-left:120px}.field-markdown{width:100%;min-height:45px;float:left;padding:0 10px 10px 0;clear:both}.field-markdown>.field-label{width:120px;float:left;margin-right:-120px;padding:7px 7px 7px 0;text-align:right}.field-markdown>.field-control{width:100%;float:right}:not(td)>div.field-markdown .container-normal{margin-left:120px}.field-textarea{width:100%;min-height:45px;float:left;padding:0 10px 10px 0;clear:both}.field-textarea>.field-label{width:120px;float:left;margin-right:-120px;padding:7px 7px 7px 0;text-align:right}.field-textarea>.field-control{width:100%;float:right}:not(td)>div.field-textarea .container-normal{margin-left:120px}.field-auto{width:auto;height:45px;float:left;margin-right:35px;padding:0 10px 10px 0}.field-auto>.field-label{width:120px;float:left;padding:7px 7px 7px 0;text-align:right}.field-auto>.field-control{width:auto;float:left}.field-auto-thin{width:auto;height:45px;float:left;margin:0 5px;padding:0 10px 10px 0}.field-auto-thin>.field-label{float:left;padding:7px 7px 7px 0;text-align:right}.field-auto-thin>.field-control{width:auto;float:left}.field-auto-thin select{max-width:120px}.field-vertical{width:330px;height:100%;float:left;padding:0 20px 20px 0}.field-vertical>.field-label{width:100%;float:left;margin-right:-120px;padding:5px 10px;text-align:center}.field-vertical>.field-control{width:100%;float:left;clear:both}.field-label{overflow:hidden}label.required:after{margin-left:3px;color:#f00;content:'*'}.field-control .unit{display:block;float:left;padding:5px 0 0 5px}.field-section{width:100%;display:block;float:left;margin:15px;padding:2px 5px;font-weight:bold;border-bottom:solid 1px #c0c0c0;clear:both}.container-normal{position:relative}.container-left{width:340px;float:left;margin-right:-340px;padding:0 0 15px 0;position:relative}.container-right{width:100%;float:right;position:relative}.container-right>*{display:block;margin-left:340px}.control-text{width:100%;min-height:30px;display:block;padding:6px 4px 2px 4px;color:#000;background:#f5f5f5;border:solid 1px #c0c0c0;overflow:hidden;border-radius:5px}.control-textbox{width:100%;height:30px;padding:4px;border:solid 1px #c0c0c0;border-radius:5px}.control-textbox.with-unit{width:70%;display:block;float:left}.control-textbox.anchor{width:100%;height:30px;padding:4px;border:solid 1px #c0c0c0;border-radius:5px;z-index:0}.control-textarea{width:100%;height:100px;padding:4px 4px 4px 6px;border:solid 1px #c0c0c0;border-radius:5px}.container-radio>label.error{top:0}.control-attachments+label.error{height:22px;position:absolute;top:50px}.control-attachments-upload{width:100%;display:block;float:left;padding:25px 0;text-align:center;border:dotted 2px #d19405;border-radius:3px}.control-attachments-items{width:100%;display:block;float:left}.control-attachments-item{width:100%;display:block;float:left;margin:5px 0 0 0;padding:5px 10px;text-align:left;border:solid 1px #d19405;border-radius:5px}.progress-bar{width:100%;height:30px;display:block;float:left;margin:5px 0 0 0;vertical-align:top;border:solid 1px #d19405;overflow:hidden;border-radius:5px}.progress-bar>div{width:0;height:100%;line-height:22px;color:#fff;background-color:#fece2f;border-radius:3px}.already-attachments{background-color:#fece2f}.preparation-delete{background-color:#f5f5f5;border:solid 1px #c0c0c0}.preparation-delete>a{color:#c0c0c0}.show-file{display:block;float:left;margin:0}.file-name{display:block;float:left}.delete-file{display:block;float:right;margin:2px -5px 0 0}.field-control .control-markup{width:100%;min-height:100px;float:left;padding:4px 25px 4px 6px;color:#000;background:#f5f5f5;border:solid 1px #c0c0c0;border-radius:5px}.md{width:100%;float:left;line-height:1.5em;font-family:Terminal,Hiragino Kaku Gothic Pro;word-wrap:break-word;word-break:break-all}.md>*{float:left;clear:both}.md h1{margin:10px 0 10px 0;font-weight:bold}.md h1:not(:first-child){margin:20px 0 10px 0}.md h2{margin:5px 0 8px 0;font-weight:bold}.md h2:not(:first-child){margin:20px 0 8px 0}.md h3{margin:3px 0 6px 0;font-weight:bold}.md h3:not(:first-child){margin:10px 0 6px 0}.md h4{margin:3px 0 4px 0;font-weight:bold}.md h4:not(:first-child){margin:10px 0 4px 0}.md h5{margin:3px 0 2px 0;font-weight:bold}.md h5:not(:first-child){margin:10px 0 2px 0}.md h6{margin:3px 0 2px 0;font-weight:bold}.md h6:not(:first-child){margin:10px 0 2px 0}.md hr{float:none;clear:both}.md ol{margin:0 10px 10px 32px;list-style-type:decimal}.md p{margin:0 0 10px 0;clear:both}.md table{width:auto;margin:0 0 10px 0;background-color:#fff}.md td{padding:5px 10px;border:solid 1px #c0c0c0}.md th{padding:5px 10px;font-weight:bold;border:solid 1px #c0c0c0}.md tbody tr:nth-child(odd){background-color:#f5f5f5}.md ul{margin:0 10px 10px 32px;list-style-type:disc}.control-markdown{width:100%;display:none;padding:4px 4px 4px 6px;border:solid 1px #c0c0c0;border-radius:5px}.control-dropdown{width:100%;height:30px;padding:4px;border:solid 1px #c0c0c0;border-radius:5px}.control-spinner{width:auto;height:22px;display:block;float:left;padding:1px;color:#000}.control-checkbox{display:block;float:left;margin:8px 0}.control-checkbox~label{display:block;float:left;margin:7px 5px 0 6px}.control-checkbox+.ui-icon.ui-icon-info{display:block;float:left;margin:7px -7px 0 0}.field-normal .control-checkbox+label{width:175px}_::-webkit-full-page-media,_:future,:root .field-normal .control-checkbox+label{width:172px}.container-radio{padding:7px 0}.container-radio>label{display:block;float:left;margin:0 5px 0 0;white-space:nowrap}.control-radio{display:block;float:left;margin:3px}.radio-clear-both .container-radio>label{clear:both}.control-slider{width:30px;float:left;margin:8px 0 0 12px}.control-slider-ui{width:140px;float:left;margin:11px 0 0 5px}.container-selectable .wrapper{width:100%;min-height:300px;display:block;float:left;background-color:#f5f5f5;border:solid 1px #c0c0c0;overflow:auto;border-radius:5px}.control-selectable{width:100%;display:block;float:left;padding:5px 10px 5px 5px;list-style-type:none;touch-action:pan-y}.control-selectable li{width:100%;min-height:24px;margin:3px;padding:2px 5px;border-radius:5px}.control-basket{margin-left:120px;padding:5px 5px 0 5px;background-color:#f5f5f5;border:solid 1px #c0c0c0;border-radius:5px}.control-basket>li{display:block;float:left;margin:0 5px 5px 0;padding:3px 5px;border-radius:5px}.control-basket>li>span{display:block;float:left;z-index:2}.comment{width:100%;display:block;float:left;margin:0 0 5px 0;padding:5px 10px 10px 20px;background:#fafad2;border:solid 1px #c0c0c0;position:relative;clear:both}.comment>*{display:block;float:left}.comment>.time{float:left;margin:0 0 8px -10px;margin-right:10px}.comment>.body{width:100%;clear:both}.comment>.button.edit{position:absolute;top:3px;right:20px;cursor:pointer}.comment>.button.delete{position:absolute;top:3px;right:5px;cursor:pointer}.comment>.control-markup{width:100%}.comment>.control-markdown{width:100%;display:none}.user{float:left}.user>span{display:block;float:left;font-weight:bold}.dept{float:left}.dept>span{display:block;float:left;font-weight:bold}.both{clear:both}.hidden{display:none}.right{float:right}.right-align{text-align:right;text-align-last:right}.center-align{text-align:center;text-align-last:center}.tooltip{display:none;position:absolute}.no-border{border:none}.grid{margin:0 0 10px 0}.grid.fixed{table-layout:fixed}.grid>thead>tr>caption{margin:0 0 5px 0}.grid>thead>tr>th{padding:6px;vertical-align:middle;border-top:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent;border-right:solid 1px #fff;word-wrap:break-word}.grid>thead>tr>th>div{width:100%;float:left;text-align:center;z-index:2}.grid>thead>tr>th span{display:block;float:left}.grid>thead>tr:first-child>th:first-child{border-radius:10px 0 0 0/10px 0 0 0}.grid>thead>tr:first-child>th:last-child{border-right:solid 1px transparent;border-radius:0 10px 0 0/0 10px 0 0}.grid>thead>tr>th.sortable:hover{cursor:pointer}.grid>tbody>tr>td{max-width:300px;border-left:dotted 1px #c0c0c0;border-right:dotted 1px #c0c0c0;word-wrap:break-word}.grid>tbody>tr.message-row>td{padding:0;text-align:center}.grid>tbody>tr [class*="status-"]{padding:0 5px;font-weight:bold;border:solid 1px #c0c0c0;border-radius:3px}.grid>tbody>tr>th{padding:6px;vertical-align:middle;font-weight:normal;background-color:#dcdcdc;border-top:solid 1px #fff;border-bottom:solid 1px #fff;border-left:solid 1px transparent;border-right:solid 1px transparent;word-wrap:break-word}.grid-row{background-color:#fff;border-bottom:solid 1px #c0c0c0}.grid-row td{overflow:hidden}.grid-row .comment{min-width:200px;max-height:100px;margin:0 0 3px 0;padding:3px 6px 3px 15px;background:#fafad2;border:solid 1px #fff;clear:both;overflow:hidden}.grid-row .comment.one-third{max-height:306px}.grid-row .comment.half{max-height:151px}.grid:not(.not-link) .grid-row:hover{background-color:#f5f5f5;cursor:pointer}.grid-row:hover .comment{background-color:#ffffe0}.grid-row p{float:left}.grid-row p.body{clear:both}.grid-row[data-history]{background-color:#d3d3d3}.grid-title-body{min-width:200px;max-height:306px;margin:0 0 3px 0;padding:3px 6px;background:inherit;border:solid 1px transparent;clear:both;overflow:hidden}.grid-title-body>.body{width:100%}.grid-title-body>.title+.body{padding:8px 0 0 10px}.dashboard-grid-header{position:sticky;top:-20px;z-index:3}.links{padding:0 10px}#Links>.fieldset{display:grid}#Links>.fieldset>div{overflow:auto}#Links>.fieldset>div .grid{width:max-content;min-width:100%}.link-creations button{display:block;float:left;margin:0 10px 0 0}.text{width:250px;display:block;float:left;border:solid 1px #c0c0c0}.datepicker{display:block;float:left;border:solid 1px #c0c0c0}.dropdown{display:block;float:left;border:solid 1px #c0c0c0}[class*="limit-"]{margin-left:10px;padding:0 5px}.limit-warning1{color:#f00}.limit-warning2{color:#f00;background-color:#ffccd5}.limit-warning3{color:#fff;background-color:#f00}.message{width:100%;text-align:center;position:fixed;left:0;bottom:78px;z-index:100}.message .body{margin-bottom:4px;position:relative;border-radius:20px}.message .close{background-color:#fff;position:absolute;top:11px;right:8px;cursor:pointer;border-radius:10px}.message-dialog{width:100%;display:block;float:left;margin:0 auto;text-align:center}.message-form-bottom{width:600px;margin:0 auto;text-align:center}.alert-error{min-height:32px;display:block;padding:5px;color:#fff;background-color:rgba(255,0,0,.9);border:solid 1px #f00}.alert-success{min-height:32px;display:block;padding:5px;color:#fff;background-color:rgba(0,128,0,.9);border:solid 1px #008000}.alert-warning{min-height:32px;display:block;padding:5px;color:#000;background-color:#ff0;border:solid 1px #ff0}.alert-information{min-height:32px;display:block;padding:5px;color:#fff;background-color:#00f;border:solid 1px #00f}label.error{width:100%;display:block;float:left;padding:0 5px;color:#f00;background-color:#fff;border-top:none;top:-5px;left:0;border-radius:0 0 5px 5px/0 0 5px 5px;z-index:2}.ui-spinner>label.error{margin-top:3px}.error{border:solid 1px #f00}.error+.ui-widget.ui-state-default.ui-multiselect{border:solid 1px #f00}.with-unit+label.error{width:70%;position:absolute;top:25px}.button-edit-markdown{position:absolute;top:5px;right:5px;cursor:pointer;z-index:1}.comment>.button-edit-markdown{top:6px;right:20px}.button-delete-address{cursor:pointer}.button-right-justified{float:right}.status-new{background:#fff}.status-preparation{color:#fff;background:#ff8c00}.status-inprogress{color:#fff;background:#008000}.status-review{background:#ff0}.status-closed{color:#fff;background:#00f}.status-rejected{color:#fff;background:#808080}.always-hidden{display:none}h3.title-header{height:40px;padding:10px 20px;text-align:center;background-color:#dcdcdc;border:solid 1px #a9a9a9;border-radius:10px 10px 0 0/10px 10px 0 0}.outgoing-mail .dialog{padding:0 !important}.outgoing-mail .ui-dialog-titlebar{display:none}.svg-work-value{width:50px;height:40px}.svg-work-value rect:nth-of-type(1){fill:gainsboro}.svg-work-value rect:nth-of-type(2){fill:darkseagreen}.svg-progress-rate{width:50px;height:40px}.svg-progress-rate.warning text{fill:red}.svg-progress-rate rect:nth-of-type(1){fill:gainsboro}.svg-progress-rate rect:nth-of-type(2){fill:gray}.svg-progress-rate rect:nth-of-type(3){fill:darkseagreen}.svg-progress-rate.warning rect:nth-of-type(3){fill:#ffccd5}.svg-kamban-aggregation-view{width:100%;height:20px}.svg-kamban-aggregation-view rect{height:20px;fill:darkseagreen}.svg-crosstab{width:100%;height:20px}.svg-crosstab rect{height:20px;fill:darkseagreen}.show-password{position:absolute;top:4px;right:-27px;cursor:pointer;z-index:10}#passwordGenerateicon{position:absolute;top:4px;right:-60px;cursor:pointer;z-index:10}input[type="password"]::-ms-reveal{display:none}.axis{fill:none;stroke:gray;shape-rendering:crispEdges}.h2{margin:0 0 5px 0;padding:0}.h3{margin:0 0 5px 10px;padding:0}.h4{margin:0 0 5px 20px;padding:0}.h5{margin:0 0 5px 30px;padding:0}.h6{margin:0 0 5px 40px;padding:0}.h2>h2{padding:5px 0;font-weight:bold;border-bottom:solid 1px #c0c0c0}.h3>h3{font-weight:bold}.h4>h4{font-weight:bold}.h5>h5{font-weight:bold}.h6>h6{font-weight:bold}.w50{width:50px}.w100{width:100px}.w150{width:150px}.w200{width:200px}.w250{width:250px}.w300{width:300px}.w350{width:350px}.w400{width:400px}.w450{width:450px}.w500{width:500px}.w550{width:550px}.w600{width:600px}.h100{height:100px}.h150{height:150px}.h200{height:200px}.h250{height:250px}.h300{height:300px}.h350{height:350px}.h400{height:400px}.h450{height:450px}.h500{height:500px}.h550{height:550px}.h600{height:600px}.m-l10{margin-left:10px}.m-l20{margin-left:20px}.m-l30{margin-left:30px}.m-l40{margin-left:40px}.m-l50{margin-left:50px}.paragraph{padding:3px 3px 3px 10px}.dialog{display:none;padding:15px 0 10px 0 !important}.dialog .fieldset{margin:0 10px 10px 10px}.link span{margin-right:5px}.link span.bold{font-weight:bold;cursor:pointer}.histories-form{padding:20px}.ui-widget input,.ui-widget select,.ui-widget button{font-family:Hiragino Kaku Gothic Pro,"Meiryo UI",sans-serif}.ui-widget textarea{line-height:1.5em;font-family:Terminal,Hiragino Kaku Gothic Pro}.ui-widget{font-size:1em}.ui-button{padding:4px 4px 4px 2px !important}.ui-dialog{overflow:visible !important}.ui-icon.a{float:left;margin:6px 0 0 0}.ui-spinner{display:block;float:left;background:#fff;max-height:46px}.ui-widget.ui-state-default.ui-multiselect{height:30px;background:#fff;border:solid 1px #c0c0c0;overflow:hidden;border-radius:5px;display:flex;align-items:center;justify-content:space-between}.ui-widget.ui-state-default.ui-multiselect .ui-multiselect-open{display:block;order:2}.ui-widget.ui-state-default.ui-multiselect .ui-multiselect-open+span{display:block;order:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ui-multiselect-menu{width:auto !important;min-width:225px;max-width:450px}.ui-multiselect-checkboxes{min-height:300px}.ui-multiselect-checkboxes label{white-space:nowrap}.ui-multiselect-checkboxes input{margin:0 5px}.ui-corner-all.ui-state-hover{border-radius:2px}.ui-icon-white{background-image:url(../styles/plugins/images/ui-icons_ffffff_256x240.png)}div.field-control .ui-multiselect.ui-state-disabled{background-color:#f5f5f5;opacity:1}.height-auto{max-height:none !important}.focus-inform{background-color:#fff !important;border:solid 1px #ffa500 !important}.menu-negative{border-left:solid 1px #fff;border-right:solid 1px #fff;position:absolute;z-index:10}.menu-negative>li{width:100%;display:block;float:left;border-top:dotted 1px #fff;cursor:pointer;clear:both}.menu-sort{border-left:solid 1px #fff;border-right:solid 1px #fff;position:absolute;border-radius:0 0 10px 10px/0 0 10px 10px;z-index:10}.menu-sort>li{width:100%;display:block;float:left;border-top:dotted 1px #fff;cursor:pointer;clear:both}.menu-sort>li.ui-menu-divider{height:initial;font-size:initial}.menu-sort>li.grid-header-filter .ui-icon{position:initial}.menu-sort>li:not(.grid-header-filter) div.field-control>*{border:solid 1px #c0c0c0}.current-time{position:absolute;top:9px;right:-17px;cursor:pointer;z-index:10}.current-user{position:absolute;top:9px;right:-17px;cursor:pointer;z-index:10}.current-dept{position:absolute;top:9px;right:-17px;cursor:pointer;z-index:10}input:focus{background-color:#ffc}select:focus:not(.has-css){background-color:#ffc}textarea:focus{background-color:#ffc}.ssoLoginMessage{margin:10px;padding:6px;border-top:solid 1px #c0c0c0}#EnterPriseBanner{width:238px;position:fixed;right:8px;bottom:280px;z-index:3}#SupportBanner{width:238px;position:fixed;right:8px;bottom:180px;z-index:3}#CasesBanner{width:238px;position:fixed;right:8px;bottom:80px;z-index:3}.annonymous .close-announcement{display:none}.grid-stack{background-color:#fff;margin:10px}.grid-stack-item-content{background-color:#f5f5f5}.dashboard-timeline-container{display:flex;flex-direction:column;gap:4px}.dashboard-timeline-item{background-color:#fff;margin:4px;padding:8px;transition:background-color .3s;cursor:pointer;box-shadow:0 2px 4px rgba(0,0,0,.2);border-radius:4px}.dashboard-timeline-item:hover{background-color:#ebebeb}.dashboard-timeline-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.dashboard-timeline-header a{color:#007bff;font-weight:bold;min-width:40px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dashboard-timeline-header-closed{overflow:hidden;max-height:0;margin-bottom:0}.dashboard-timeline-item:hover .dashboard-timeline-header-closed{max-height:200px;margin-bottom:4px;overflow:auto;transition:max-height .5s linear 1s}.dashboard-timeline-record-time{font-size:.8em;color:#777;margin-left:3px;font-weight:bold;display:flex;white-space:nowrap}.dashboard-timeline-record-time time{margin-left:4px}.dashboard-timeline-record-time .elapsed-time{margin-left:4px;font-weight:bold;background-color:#eee}.dashboard-timeline-title{font-size:1.2em;font-weight:bold;color:#333}.dashboard-timeline-body{margin-top:8px;line-height:1.5;color:#555}.dashboard-timeline-body-closed{margin-top:0;overflow:hidden;max-height:0}.dashboard-timeline-item:hover .dashboard-timeline-body-closed{margin-top:8px;max-height:300px;overflow:auto;transition:max-height .5s linear 1s,margin-top 0s;transition-delay:1s}.grid-stack-item-content{background-color:#f2f2f2;padding:16px;border-radius:5px;box-shadow:0 2px 4px rgba(0,0,0,.1);display:flex;flex-direction:column}.grid-stack>.grid-stack-item>.grid-stack-item-content{overflow-x:auto}.dashboard-part-title{font-size:1.2em;color:#333;font-weight:bold;margin-bottom:10px}.dashboard-part-nav{margin-top:10px}.dashboard-part-nav-menu{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap}.dashboard-part-nav-menu>.dashboard-part-nav-item{max-width:200px;min-width:120px;margin-left:10px;white-space:nowrap;overflow:hidden;padding:4px;box-shadow:0 2px 4px rgba(0,0,0,.2)}.dashboard-part-nav-menu-vartical{list-style:none;padding:0;margin:0;display:flex;flex-direction:column}.dashboard-part-nav-item{color:#333;margin-bottom:8px;padding:4px;display:flex;border-radius:4px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.2)}.dashboard-part-nav-item:hover{background-color:#ddd}.dashboard-part-nav-link{padding:4px;text-decoration:none;color:inherit;width:100%}.dashboard-part-refresh{position:absolute;top:8px;left:8px;border:none;color:#636363;background-color:transparent;opacity:0;padding-top:0;padding-left:0;z-index:5}@keyframes custom-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.dashboard-part-road{position:absolute;left:calc(50% - 25px);top:calc(50% - 25px);font-size:50px;color:#636363;display:inline-block;animation:custom-spin 1s linear infinite}#AnalyPartTimePeriodValueField{width:230px}#AnalyPartTimePeriodField{width:110px}#AnalyPartTimePeriodField .field-label{display:none}#AnalyPartTimePeriodField div.container-normal{margin-left:0}.gs-20>.grid-stack-item{width:5%;min-width:5%}.gs-20>.grid-stack-item[gs-w="1"]{width:5%;min-width:5%}.gs-20>.grid-stack-item[gs-x="1"]{left:5%}.gs-20>.grid-stack-item[gs-w="2"]{width:10%}.gs-20>.grid-stack-item[gs-x="2"]{left:10%}.gs-20>.grid-stack-item[gs-w="3"]{width:15%}.gs-20>.grid-stack-item[gs-x="3"]{left:15%}.gs-20>.grid-stack-item[gs-w="4"]{width:20%}.gs-20>.grid-stack-item[gs-x="4"]{left:20%}.gs-20>.grid-stack-item[gs-w="5"]{width:25%}.gs-20>.grid-stack-item[gs-x="5"]{left:25%}.gs-20>.grid-stack-item[gs-w="6"]{width:30%}.gs-20>.grid-stack-item[gs-x="6"]{left:30%}.gs-20>.grid-stack-item[gs-w="7"]{width:35%}.gs-20>.grid-stack-item[gs-x="7"]{left:35%}.gs-20>.grid-stack-item[gs-w="8"]{width:40%}.gs-20>.grid-stack-item[gs-x="8"]{left:40%}.gs-20>.grid-stack-item[gs-w="9"]{width:45%}.gs-20>.grid-stack-item[gs-x="9"]{left:45%}.gs-20>.grid-stack-item[gs-w="10"]{width:50%}.gs-20>.grid-stack-item[gs-x="10"]{left:50%}.gs-20>.grid-stack-item[gs-w="11"]{width:55%}.gs-20>.grid-stack-item[gs-x="11"]{left:55%}.gs-20>.grid-stack-item[gs-w="12"]{width:60%}.gs-20>.grid-stack-item[gs-x="12"]{left:60%}.gs-20>.grid-stack-item[gs-w="13"]{width:65%}.gs-20>.grid-stack-item[gs-x="13"]{left:65%}.gs-20>.grid-stack-item[gs-w="14"]{width:70%}.gs-20>.grid-stack-item[gs-x="14"]{left:70%}.gs-20>.grid-stack-item[gs-w="15"]{width:75%}.gs-20>.grid-stack-item[gs-x="15"]{left:75%}.gs-20>.grid-stack-item[gs-w="16"]{width:80%}.gs-20>.grid-stack-item[gs-x="16"]{left:80%}.gs-20>.grid-stack-item[gs-w="17"]{width:85%}.gs-20>.grid-stack-item[gs-x="17"]{left:85%}.gs-20>.grid-stack-item[gs-w="18"]{width:90%}.gs-20>.grid-stack-item[gs-x="18"]{left:90%}.gs-20>.grid-stack-item[gs-w="19"]{width:95%}.gs-20>.grid-stack-item[gs-x="19"]{left:95%}.gs-20>.grid-stack-item[gs-w="20"]{width:100%}div.lower-search-ui{margin:4px 0 0 0} \ No newline at end of file diff --git a/Implem.Pleasanter/wwwroot/scripts/_api.js b/Implem.Pleasanter/wwwroot/scripts/_api.js index 415dd6006..d8ea3f6d4 100644 --- a/Implem.Pleasanter/wwwroot/scripts/_api.js +++ b/Implem.Pleasanter/wwwroot/scripts/_api.js @@ -154,4 +154,8 @@ $p.apiUpdateSite = function (args) { $p.apiDeleteSite = function (args) { return $p.apiExec($p.apiUrl(args.id, 'deletesite'), args); -} \ No newline at end of file +} + +$p.apiGetClosestSiteId = function (args) { + return $p.apiExec($p.apiUrl(args.id, 'getclosestsiteid'), args); +} diff --git a/Implem.Pleasanter/wwwroot/scripts/display.js b/Implem.Pleasanter/wwwroot/scripts/display.js index 55d48c656..a70650609 100644 --- a/Implem.Pleasanter/wwwroot/scripts/display.js +++ b/Implem.Pleasanter/wwwroot/scripts/display.js @@ -297,6 +297,13 @@ OrderRelease_ko: '릴리즈', OrderRelease_es: 'Liberar', OrderRelease_vn: 'Chấm dứt', + PasswordAutoGenerate: 'Password Auto Generate', + PasswordAutoGenerate_zh: '密码自动生成', + PasswordAutoGenerate_ja: 'パスワード自動生成', + PasswordAutoGenerate_de: 'Kennwort automatisch generieren', + PasswordAutoGenerate_ko: '비밀번호 자동 생성', + PasswordAutoGenerate_es: 'Generación automática de contraseñas', + PasswordAutoGenerate_vn: 'Tự động tạo mật khẩu', Positive: 'Positive', Positive_zh: '积极的', Positive_ja: '肯定', diff --git a/Implem.Pleasanter/wwwroot/scripts/generatepassword.js b/Implem.Pleasanter/wwwroot/scripts/generatepassword.js new file mode 100644 index 000000000..613ff416d --- /dev/null +++ b/Implem.Pleasanter/wwwroot/scripts/generatepassword.js @@ -0,0 +1,42 @@ +$(function () { + var passwordObject; + var passwordValidateObject; + if ($('input#Users_PasswordValidate').length) { + $p.generatePasswordButton('#Users_Password', '#Users_PasswordValidate'); + } + if ($('input#Users_ChangedPasswordValidator').length) { + $p.generatePasswordButton('#Users_ChangedPassword', '#Users_ChangedPasswordValidator'); + } + if ($('input#Users_AfterResetPasswordValidator').length) { + $p.generatePasswordButton('#Users_AfterResetPassword', '#Users_AfterResetPasswordValidator'); + } +}); + +$p.generatePasswordButton = function (passwordObject, passwordValidateObject) { + if (!parseInt($(passwordObject).data('passwordgenerator'))) { + return; + } + $('', { + id: 'passwordGenerateicon', + class: 'material-symbols-outlined generate-password', + title: $p.display('PasswordAutoGenerate'), + text: 'key', + 'data-action': 'GeneratePassword' + }).appendTo($(passwordObject).closest('div')); + + $(document).on('click', '#passwordGenerateicon', function () { + $p.generatePassword($(this), passwordObject, passwordValidateObject); + }); +} + +$p.generatePassword = function ($control, passwordObject, passwordValidateObject) { + var action = $control.attr('data-action'); + var url = action + ? $('.main-form').attr('action').replace('_action_', action.toLowerCase()) + : location.href; + var data = { + passwordObject: passwordObject, + passwordValidateObject: passwordValidateObject + }; + $p.ajax(url, 'post', data, $control); +} \ No newline at end of file diff --git a/Implem.Pleasanter/wwwroot/scripts/jqueryui.js b/Implem.Pleasanter/wwwroot/scripts/jqueryui.js index c250b3d92..5a9027215 100644 --- a/Implem.Pleasanter/wwwroot/scripts/jqueryui.js +++ b/Implem.Pleasanter/wwwroot/scripts/jqueryui.js @@ -85,6 +85,7 @@ $p.apply = function () { }); } }, + filter: ".ui-widget-content", stop: function () { $p.setData($(this)); } diff --git a/Implem.Pleasanter/wwwroot/scripts/markdown.js b/Implem.Pleasanter/wwwroot/scripts/markdown.js index 7fc3ed71a..c22e0bd5b 100644 --- a/Implem.Pleasanter/wwwroot/scripts/markdown.js +++ b/Implem.Pleasanter/wwwroot/scripts/markdown.js @@ -135,7 +135,8 @@ $p.markup = function (markdownValue, enableLightBox, encoded, dataId) { $p.setInputGuide = function (id, text, markup) { if (text.length === 0) { $('[id="' + id + '.viewer"]').css("color", "darkgray"); - return $('[id="' + id + '"]').attr('placeholder'); + var placeholder = $('[id="' + id + '"]').attr('placeholder'); + return (!placeholder) ? '' : placeholder; } else { $('[id="' + id + '.viewer"]').css("color", "black"); return markup; diff --git a/Implem.Pleasanter/wwwroot/styles/plugins/themes/cerulean/custom.css b/Implem.Pleasanter/wwwroot/styles/plugins/themes/cerulean/custom.css index f45d431ef..64e2e3ae6 100644 --- a/Implem.Pleasanter/wwwroot/styles/plugins/themes/cerulean/custom.css +++ b/Implem.Pleasanter/wwwroot/styles/plugins/themes/cerulean/custom.css @@ -92,17 +92,14 @@ } /* 全体共通 */ -* { - font-family: 'メイリオ', 'Meiryo', 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', sans-serif; - font-size: 13px; -} - a, a:link { color: #106EBE; } -body { +html body { background-color: #E7E7E7; + font-size: 13px; + font-family: 'メイリオ', 'Meiryo', 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', sans-serif; } /* コンテンツ */ @@ -1664,7 +1661,7 @@ body#login #MainContainer #Application #PortalLink{ padding-right: 0; } -#Logins div #Tenant select { +#Logins div #Tenants select { height: 48px; border: 1px solid #CECECE; border-radius: 4px; @@ -1774,3 +1771,24 @@ body#login #MainContainer #Application #PortalLink{ #CalendarBody tbody { background-color: #fff; } + +.fieldset .generate-password, +.ui-dialog .generate-password { + color: #666666; + font-weight: lighter; +} + +.md { + h1{ + font-size: 2em; + } + h2 { + font-size: 1.5em; + } + h3 { + font-size: 1.17em; + } + strong{ + font-size: inherit; + } +} diff --git a/Implem.Pleasanter/wwwroot/styles/plugins/themes/green-tea/custom.css b/Implem.Pleasanter/wwwroot/styles/plugins/themes/green-tea/custom.css index 9358b0494..d24f8ae47 100644 --- a/Implem.Pleasanter/wwwroot/styles/plugins/themes/green-tea/custom.css +++ b/Implem.Pleasanter/wwwroot/styles/plugins/themes/green-tea/custom.css @@ -92,17 +92,14 @@ } /* 全体共通 */ -* { - font-family: 'メイリオ', 'Meiryo', 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', sans-serif; - font-size: 13px; -} - a, a:link { color: #058266; } -body { +html body { background-color: #E7E7E7; + font-size: 13px; + font-family: 'メイリオ', 'Meiryo', 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', sans-serif; } /* コンテンツ */ @@ -1480,7 +1477,7 @@ section.accordion { cursor: pointer; } -.menulabel::before { +label.menulabel::before { content: ""; width: 6px; height: 6px; @@ -1529,7 +1526,7 @@ section.accordion { width: 52px; } -.menubox label { +.menubox .menulabel { display: flex; flex-direction: row; align-items: center; @@ -1541,8 +1538,15 @@ section.accordion { background-color: #E8F9F3; } -.menubox label span:first-child { - padding: 10px; +.menubox .menulabel span:first-child { + width: 52px; + height: 52px; + justify-content: center; +} + +.menubox .menulabel span:first-child img{ + width: initial; + margin: auto; } .menubox-sub { @@ -1572,6 +1576,28 @@ section.accordion { align-items: center; } +.menubox-sub .sub-menu .sub-menu > ul { + margin-bottom: 15px; +} + +.menubox-sub .sub-menu .sub-menu > ul li { + padding-left: 52px; +} + +.menubox-sub .sub-menu .sub-menu > ul > li > a { + position: relative; + padding: 3px 1.5em; + font-size: 12px; + word-break: break-all; +} + +.menubox-sub .sub-menu .sub-menu > ul > li > a::before { + position: absolute; + top: 3px; + left: 0; + content: '・'; +} + /* ログイン画面 */ body#login { background-color: #F8F8F8; @@ -1631,10 +1657,22 @@ body#login #MainContainer #Application #PortalLink{ border: solid 1px #f00; } -#Logins div #Tenants { +#Logins div #Tenants:empty { display: none; } +#Logins div #Tenants.field-wide { + padding-right: 0; +} + +#Logins div #Tenants select { + height: 48px; + border: 1px solid #CECECE; + border-radius: 4px; + padding: 4px 20px; + font-size: 16px; +} + #Logins #SsoLogin .ssoLoginMessage { margin: 10px 0; padding: 6px 0; @@ -1737,3 +1775,18 @@ body#login #MainContainer #Application #PortalLink{ #CalendarBody tbody { background-color: #fff; } + +.md { + h1{ + font-size: 2em; + } + h2 { + font-size: 1.5em; + } + h3 { + font-size: 1.17em; + } + strong{ + font-size: inherit; + } +} diff --git a/Implem.Pleasanter/wwwroot/styles/plugins/themes/mandarin/custom.css b/Implem.Pleasanter/wwwroot/styles/plugins/themes/mandarin/custom.css index 6563776d7..7c3314533 100644 --- a/Implem.Pleasanter/wwwroot/styles/plugins/themes/mandarin/custom.css +++ b/Implem.Pleasanter/wwwroot/styles/plugins/themes/mandarin/custom.css @@ -92,17 +92,14 @@ } /* 全体共通 */ -* { - font-family: 'メイリオ', 'Meiryo', 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', sans-serif; - font-size: 13px; -} - a, a:link { color: #666666; } -body { +html body { background-color: #E7E7E7; + font-size: 13px; + font-family: 'メイリオ', 'Meiryo', 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', sans-serif; } /* コンテンツ */ @@ -1480,7 +1477,7 @@ section.accordion { cursor: pointer; } -.menulabel::before { +label.menulabel::before { content: ""; width: 6px; height: 6px; @@ -1529,7 +1526,7 @@ section.accordion { width: 52px; } -.menubox label { +.menubox .menulabel { display: flex; flex-direction: row; align-items: center; @@ -1541,8 +1538,15 @@ section.accordion { background-color: #FFF9EA; } -.menubox label span:first-child { - padding: 10px; +.menubox .menulabel span:first-child { + width: 52px; + height: 52px; + justify-content: center; +} + +.menubox .menulabel span:first-child img{ + width: initial; + margin: auto; } .menubox-sub { @@ -1572,6 +1576,28 @@ section.accordion { align-items: center; } +.menubox-sub .sub-menu .sub-menu > ul { + margin-bottom: 15px; +} + +.menubox-sub .sub-menu .sub-menu > ul li { + padding-left: 52px; +} + +.menubox-sub .sub-menu .sub-menu > ul > li > a { + position: relative; + padding: 3px 1.5em; + font-size: 12px; + word-break: break-all; +} + +.menubox-sub .sub-menu .sub-menu > ul > li > a::before { + position: absolute; + top: 3px; + left: 0; + content: '・'; +} + /* ログイン画面 */ body#login { background-color: #F8F8F8; @@ -1631,10 +1657,22 @@ body#login #MainContainer #Application #PortalLink{ border: solid 1px #f00; } -#Logins div #Tenants { +#Logins div #Tenants:empty { display: none; } +#Logins div #Tenants.field-wide { + padding-right: 0; +} + +#Logins div #Tenants select { + height: 48px; + border: 1px solid #CECECE; + border-radius: 4px; + padding: 4px 20px; + font-size: 16px; +} + #Logins #SsoLogin .ssoLoginMessage { margin: 10px 0; padding: 6px 0; @@ -1737,3 +1775,18 @@ body#login #MainContainer #Application #PortalLink{ #CalendarBody tbody { background-color: #fff; } + +.md { + h1{ + font-size: 2em; + } + h2 { + font-size: 1.5em; + } + h3 { + font-size: 1.17em; + } + strong{ + font-size: inherit; + } +} diff --git a/Implem.Pleasanter/wwwroot/styles/plugins/themes/midnight/custom.css b/Implem.Pleasanter/wwwroot/styles/plugins/themes/midnight/custom.css index 3caad103f..b16228c73 100644 --- a/Implem.Pleasanter/wwwroot/styles/plugins/themes/midnight/custom.css +++ b/Implem.Pleasanter/wwwroot/styles/plugins/themes/midnight/custom.css @@ -94,17 +94,14 @@ } /* 全体共通 */ -* { - font-family: 'メイリオ', 'Meiryo', 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', sans-serif; - font-size: 13px; -} - a, a:link { color: #FFFFFF; } -body { +html body { background-color: #333333; + font-size: 13px; + font-family: 'メイリオ', 'Meiryo', 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', sans-serif; } /* コンテンツ */ @@ -1293,6 +1290,11 @@ table.grid tbody td > input { background-color: #FFF9E3; } +#Application #ReduceGuides .ui-icon, +#Application #ExpandGuides .ui-icon{ + background-image: url("images/ui-icons_3d3d3d_256x240.png"); +} + #HeaderTitleContainer #HeaderTitle { font-size: 16px; color: #FFFFFF; @@ -1776,7 +1778,7 @@ section.accordion { cursor: pointer; } -.menulabel::before { +label.menulabel::before { content: ""; width: 6px; height: 6px; @@ -1825,7 +1827,7 @@ section.accordion { width: 52px; } -.menubox label { +.menubox .menulabel { display: flex; flex-direction: row; align-items: center; @@ -1837,8 +1839,15 @@ section.accordion { background-color: #333333; } -.menubox label span:first-child { - padding: 10px; +.menubox .menulabel span:first-child { + width: 52px; + height: 52px; + justify-content: center; +} + +.menubox .menulabel span:first-child img{ + width: initial; + margin: auto; } .menubox-sub { @@ -1868,6 +1877,28 @@ section.accordion { align-items: center; } +.menubox-sub .sub-menu .sub-menu > ul { + margin-bottom: 15px; +} + +.menubox-sub .sub-menu .sub-menu > ul li { + padding-left: 52px; +} + +.menubox-sub .sub-menu .sub-menu > ul > li > a { + position: relative; + padding: 3px 1.5em; + font-size: 12px; + word-break: break-all; +} + +.menubox-sub .sub-menu .sub-menu > ul > li > a::before { + position: absolute; + top: 3px; + left: 0; + content: '・'; +} + /* ログイン画面 */ body#login { background-color: #3C3C3C; @@ -1927,10 +1958,22 @@ body#login #MainContainer #Application #PortalLink{ border: solid 1px #f00; } -#Logins div #Tenants { +#Logins div #Tenants:empty { display: none; } +#Logins div #Tenants.field-wide { + padding-right: 0; +} + +#Logins div #Tenants select { + height: 48px; + border: 1px solid #CECECE; + border-radius: 4px; + padding: 4px 20px; + font-size: 16px; +} + #Logins #SsoLogin .ssoLoginMessage { margin: 10px 0; padding: 6px 0; @@ -2023,3 +2066,18 @@ body#login #MainContainer #Application #PortalLink{ #FullCalendar .fc-event-time { padding: 0 8px; } + +.md { + h1{ + font-size: 2em; + } + h2 { + font-size: 1.5em; + } + h3 { + font-size: 1.17em; + } + strong{ + font-size: inherit; + } +} diff --git a/Implem.Pleasanter/wwwroot/styles/site.css b/Implem.Pleasanter/wwwroot/styles/site.css index db8b6ed1d..a28025aef 100644 --- a/Implem.Pleasanter/wwwroot/styles/site.css +++ b/Implem.Pleasanter/wwwroot/styles/site.css @@ -2960,7 +2960,15 @@ h3.title-header { z-index: 10; } -input[type="password"]::-ms-reveal{ +#passwordGenerateicon { + position: absolute; + top: 4px; + right: -60px; + cursor: pointer; + z-index: 10; +} + +input[type="password"]::-ms-reveal { display: none; } @@ -3194,15 +3202,41 @@ input[type="password"]::-ms-reveal{ border: solid 1px silver; overflow: hidden; border-radius: 5px; + display: flex; + align-items: center; + justify-content: space-between; +} + +.ui-widget.ui-state-default.ui-multiselect .ui-multiselect-open { + display: block; + order: 2; +} + +.ui-widget.ui-state-default.ui-multiselect .ui-multiselect-open + span { + display: block; + order: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.ui-multiselect-menu { + width: auto !important; + min-width: 225px; + max-width: 450px; } .ui-multiselect-checkboxes { min-height: 300px; } - .ui-multiselect-checkboxes input { - margin: 0px 5px; - } +.ui-multiselect-checkboxes label { + white-space: nowrap; +} + +.ui-multiselect-checkboxes input { + margin: 0px 5px; +} .ui-corner-all.ui-state-hover { border-radius: 2px; diff --git a/Implem.TestAutomation/implem.TestAutomation.csproj b/Implem.TestAutomation/implem.TestAutomation.csproj index 543e536ea..7099a5ed8 100644 --- a/Implem.TestAutomation/implem.TestAutomation.csproj +++ b/Implem.TestAutomation/implem.TestAutomation.csproj @@ -4,9 +4,9 @@ Exe net8.0 Copyright © Implem Inc 2014 - 2024 - 1.4.4.0 - 1.4.4.0 - 1.4.4.0 + 1.4.5.0 + 1.4.5.0 + 1.4.5.0 Linux @@ -22,12 +22,12 @@ - + - - - + + + diff --git a/Rds/Implem.IRds/Implem.IRds.csproj b/Rds/Implem.IRds/Implem.IRds.csproj index af4bbd562..61a97c941 100644 --- a/Rds/Implem.IRds/Implem.IRds.csproj +++ b/Rds/Implem.IRds/Implem.IRds.csproj @@ -3,9 +3,9 @@ net8.0 Copyright © Implem Inc 2014 - 2024 - 1.4.4.0 - 1.4.4.0 - 1.4.4.0 + 1.4.5.0 + 1.4.5.0 + 1.4.5.0 disable diff --git a/Rds/Implem.PostgreSql/Implem.PostgreSql.csproj b/Rds/Implem.PostgreSql/Implem.PostgreSql.csproj index 7d475159f..708e53db1 100644 --- a/Rds/Implem.PostgreSql/Implem.PostgreSql.csproj +++ b/Rds/Implem.PostgreSql/Implem.PostgreSql.csproj @@ -3,9 +3,9 @@ net8.0 Copyright © Implem Inc 2014 - 2024 - 1.4.4.0 - 1.4.4.0 - 1.4.4.0 + 1.4.5.0 + 1.4.5.0 + 1.4.5.0 disable diff --git a/Rds/Implem.SqlServer/Implem.SqlServer.csproj b/Rds/Implem.SqlServer/Implem.SqlServer.csproj index b2e6f2fbd..51af77e88 100644 --- a/Rds/Implem.SqlServer/Implem.SqlServer.csproj +++ b/Rds/Implem.SqlServer/Implem.SqlServer.csproj @@ -3,9 +3,9 @@ net8.0 Copyright © Implem Inc 2014 - 2024 - 1.4.4.0 - 1.4.4.0 - 1.4.4.0 + 1.4.5.0 + 1.4.5.0 + 1.4.5.0 disable diff --git a/docker-compose.dcproj b/docker-compose.dcproj new file mode 100644 index 000000000..02865096f --- /dev/null +++ b/docker-compose.dcproj @@ -0,0 +1,19 @@ + + + + 2.1 + Linux + 10984740-e12c-427f-a980-0100734ae1b9 + LaunchBrowser + {Scheme}://localhost:{ServicePort}/items/3/index + implem.pleasanter + + + + + docker-compose.yml + + + + + \ No newline at end of file