diff --git a/README.md b/README.md index a7b9e1efa..1b6019f18 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ The users who use Open Touryo in a system development project need to use [OpenT ## Summary Please refer to the following files. - - [Introductions of Open Touryo, Japanese Version](https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/0_Introduction/ja-JP/Introduction.md) + - [List of documents, Japanese Version](https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/0_Introduction/ja-JP) - [Function List, Japanese Version (Excel)](https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/0_Introduction/ja-JP/Functional_list.xlsx) ## Details @@ -51,7 +51,7 @@ Programs, configuration files, sql files, and more are stored in this directory. The samples included in *Open Touryo Template Base* can be used to evaluate Open Touryo. When the mismatch is generated between *the features of Open Touryo* and *the requirements of the development project*, the customizing template base is useful for resolving the mismatch. -Refer to the [tutorial document](https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/2_Tutorial/ja-JP/Tutorial_Template_development.doc) about the customizing method of template base. +Refer to the [tutorial document](https://github.com/OpenTouryoProject/OpenTouryo/wiki) about the customizing method of template base. For more information, please refer to the Readme files in the following repository. - [OpenTouryoTemplates](https://github.com/OpenTouryoProject/OpenTouryoTemplates) diff --git a/Readme.ja.md b/Readme.ja.md index 9f249c72e..ace95f483 100644 --- a/Readme.ja.md +++ b/Readme.ja.md @@ -30,7 +30,7 @@ ## 概要 以下のファイルを参照してください。 - - [概要資料集](https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/0_Introduction/ja-JP/Introduction.md) + - [資料一覧](https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/0_Introduction/ja-JP) - [機能一覧 (Excel)](https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/0_Introduction/ja-JP/Functional_list.xlsx) ## 詳細 @@ -52,7 +52,7 @@ Open 棟梁のドキュメントは、[OpenTouryoDocuments リポジトリ](http Open 棟梁テンプレート・ベースに含まれるサンプルは、Open 棟梁の評価に利用できます。 もし Open 棟梁の機能の中で、システム開発プロジェクトの要件に合わない部分がありましたら、このテンプレート・ベースをカスタマイズすることでご対応いただけます。 -テンプレートベースのカスタマイズ方法につきましては、[チュートリアル](https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/2_Tutorial/ja-JP/Tutorial_Template_development.doc)をご覧ください。 +テンプレートベースのカスタマイズ方法につきましては、[チュートリアル](https://github.com/OpenTouryoProject/OpenTouryo/wiki/Home.ja)をご覧ください。 詳細は、以下リポジトリの Readme ファイルを参照してください。 - [OpenTouryoTemplates](https://github.com/OpenTouryoProject/OpenTouryoTemplates) diff --git a/license/README.txt b/license/README.txt index 3f3027d74..2850b6219 100644 --- a/license/README.txt +++ b/license/README.txt @@ -1,7 +1,7 @@ Open Touryo Project Status ============== -Open Touryo is an in-house tool of Hitachi Solutions, Ltd. +Open Touryo was an in-house tool of Hitachi Solutions, Ltd. Open Touryo was released as open source in April 2014. And it was forked by the Open Touryo project. Web site: http://www.osscons.jp/dotNetDevelopmentInfrastructure/ @@ -22,7 +22,8 @@ There is possibility that the library of OSS that not include source code automatically acquired from the Internet by the package manager like the NuGet. If so, must follow these licenses of the oss when using / distributing this OSS. Incidentally, the OSS that will -be obtained by NuGet can be checked by referring to each package.cponfig. +be obtained by NuGet can be checked by referring to package tag in +package.config file or PackageReference tag in project file. ================================================== @@ -49,4 +50,5 @@ Webサイト:http://www.osscons.jp/dotNetDevelopmentInfrastructure/ ソースコードを含まないOSSのライブラリは、NuGetのようなパッケージマネージャ によってインターネットから自動的に取得される可能性があります。 その場合は、 このOSSを使用/配布する際には、これらのOSSのライセンスに従わなければなりません。 -ちなみに、NuGetが取得するOSSは、それぞれのpackage.cponfigを参照することで確認できます。 +ちなみに、NuGetが取得するOSSは、package.configファイルのpackageタグや +ProjectファイルのPackageReferenceタグを参照することで確認できます。 diff --git a/license/STATUS.txt b/license/STATUS.txt index 7be1ce255..268ea426a 100644 --- a/license/STATUS.txt +++ b/license/STATUS.txt @@ -3,7 +3,7 @@ Open Touryo Project Status Project Status ============== -Open Touryo is an in-house tool of Hitachi Solutions, Ltd. +Open Touryo was an in-house tool of Hitachi Solutions, Ltd. Open Touryo was released as open source in April 2014. And it was forked by the Open Touryo project. @@ -11,12 +11,18 @@ Project Details =============== Web site: -Issue Tracking: + - https://opentouryo.osscons.jp/ + - https://github.com/OpenTouryoProject/OpenTouryo/wiki + +Issue Tracking: + - https://github.com/OpenTouryoProject/OpenTouryo/issues + Source Code: -Mailing Lists: - User: - Dev: + - https://github.com/OpenTouryoProject/OpenTouryo +Mailing Lists: + User: ws-dotNetDevInfra-contact@osscons.jp + Dev: ws-dotNetDevInfra-contact@osscons.jp Active Committers ================= diff --git a/root/README.md b/root/README.md index 8716208f1..7e338aaf9 100644 --- a/root/README.md +++ b/root/README.md @@ -108,7 +108,8 @@ By executing `0_ExecAllBat.bat`, you can execute necessary batch files together. - + + @@ -117,250 +118,330 @@ By executing `0_ExecAllBat.bat`, you can execute necessary batch files together. + - + + - + + - + + - + + - + + - + + - + + - - + + + - - + + + + + + + + + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + + + + + + + + - + + - + + + + + + + + + - + + - - + + + - + + + + + + + + + - + + - - + + + - + - - - + + + + + - - + + + + + + + + + + + - + + - - + + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + @@ -406,8 +487,6 @@ At the login screen, enter the arbitrary alphanumeric characters. (By default, t - ASP.NET MVC - C:\root\programs\CS\Samples\WebApp_sample\MVC_Sample\MVC_Sample.sln - C:\root\programs\VB\Samples\WebApp_sample\MVC_Sample\MVC_Sample.sln -- ASP.NET Core MVC - - C:\root\programs\CS\Samples4NetCore\WebApp_sample\MVC_Sample\MVC_Sample.sln #### Two-tier client server application: - Windows Forms @@ -428,6 +507,27 @@ C:\root\programs\CS\Samples\WS_sample\WSClient_sample\WSClientWinCone_sample\WSC - C:\root\programs\CS\Samples\WS_sample\WSClient_sample\WSClientWPF_sample\WSClientWPF_sample.sln - C:\root\programs\VB\Samples\WS_sample\WSClient_sample\WSClientWPF_sample\WSClientWPF_sample.sln +### .NET Core application + +#### Infrastructure: +- C# + - C:\root\programs\CS\Frameworks\Infrastructure + - C:\root\programs\CS\Frameworks\Infrastructure\ServiceInterface\ASPNETWebServiceCore +- VB +... + +#### Tools: +- C# + - C:\root\programs\CS\Frameworks\Tools +- VB +... + +#### Sample application: +- C# + - C:\root\programs\CS\Samples4NetCore +- VB +... + ## Other items of note ### Copyright and license diff --git a/root/Readme.ja.md b/root/Readme.ja.md index 8ae5e8f9d..4caa4e8c5 100644 --- a/root/Readme.ja.md +++ b/root/Readme.ja.md @@ -99,6 +99,7 @@ Open 棟梁のプログラムをビルドするときは、**初回のみ、MSBu
Batch file name #Batch file name  Description Existence
VB
1 0_ExecAllBat.batPerform a batch build using the following files: Customize as needed.Perform a batch build using the following files: Customize as needed.
2 1_DeleteDir.batDelete (Clean up) the folders that are generated by building.Delete (Clean up) the folders that are generated by building.
3 1_DeleteFile.batDelete (Clean up) the temporary files. Delete (Clean up) the temporary files. 
4 2_Build_NuGet_net45.batBuild the framework (Base class 1 and library part) to make NuGet package that targets .NET Framework 4.5.2. Build the framework (Base class 1 and library part) to make NuGet package that targets .NET Framework 4.5.2.  ○*1
5 2_Build_NuGet_net46.batBuild the framework (Base class 1 and library part) to make NuGet package that targets .NET Framework 4.6. Build the framework (Base class 1 and library part) to make NuGet package that targets .NET Framework 4.6.  ○*1
6 2_Build_NuGet_net47.batBuild the framework (Base class 1 and library part) to make NuGet package that targets .NET Framework 4.7. Build the framework (Base class 1 and library part) to make NuGet package that targets .NET Framework 4.7.  ○*1
7 2_Build_NuGet_net48.batBuild the framework (Base class 1 and library part) to make NuGet package that targets .NET Framework 4.8.Build the framework (Base class 1 and library part) to make NuGet package that targets .NET Framework 4.8. ○*1
8 2_Build_NuGet_netstd20.batBuild the framework (Base class 1 and library part) to make NuGet package that targets .NET Standard 2.0. ○*1, *3Build the framework (Base class 1 and library part) to make NuGet package that targets .NET Standard 2.0. ○*1, *3
9 2_Build_NuGet_netstd21.batBuild the framework (Base class 1 and library part) to make NuGet package that targets .NET Standard 2.1.○*1, *3Build the framework (Base class 1 and library part) to make NuGet package that targets .NET Standard 2.1.○*1, *3
102_Build_NuGet_nettcore30.batBuild the framework (Base class 1 and library part) to make NuGet package that targets .NET Core 3.0.○*1, *3
11 3_Build_Business_net45.batBuild a framework (base class 2, library part) of Business namespace that targets .NET Framework 4.5.2.Build a framework (base class 2, library part) of Business namespace that targets .NET Framework 4.5.2.
12 3_Build_Business_net46.batBuild a framework (base class 2, library part) of Business namespace that targets .NET Framework 4.6.Build a framework (base class 2, library part) of Business namespace that targets .NET Framework 4.6.
13 3_Build_Business_net47.batBuild a framework (base class 2, library part) of Business namespace that targets .NET Framework 4.7.Build a framework (base class 2, library part) of Business namespace that targets .NET Framework 4.7.
14 3_Build_Business_net48.batBuild a framework (base class 2, library part) of Business namespace that targets .NET Framework 4.8.Build a framework (base class 2, library part) of Business namespace that targets .NET Framework 4.8.
15 3_Build_BusinessRichClient_net45.batBuild a framework for rich client application (base class 2, library part) of Business namespace that targets .NET Framework 4.5.2.Build a framework for rich client application (base class 2, library part) of Business namespace that targets .NET Framework 4.5.2. ○*2
16 3_Build_BusinessRichClient_net46.batBuild a framework for rich client application (base class 2, library part) of Business namespace that targets .NET Framework 4.6.Build a framework for rich client application (base class 2, library part) of Business namespace that targets .NET Framework 4.6. ○*2
17 3_Build_BusinessRichClient_net47.batBuild a framework for rich client application (base class 2, library part) of Business namespace that targets .NET Framework 4.7.Build a framework for rich client application (base class 2, library part) of Business namespace that targets .NET Framework 4.7. ○*2
18 3_Build_BusinessRichClient_net48.batBuild a framework for rich client application (base class 2, library part) of Business namespace that targets .NET Framework 4.8.Build a framework for rich client application (base class 2, library part) of Business namespace that targets .NET Framework 4.8. ○*2
19 3_Build_Business_netcore20.batBuild a framework (base class 2, library part) of Business namespace that targets .NET Core 2.0.Build a framework (base class 2, library part) of Business namespace that targets .NET Core 2.0. ○*3
20 3_Build_Business_netcore30.batBuild a framework (base class 2, library part) of Business namespace that targets .NET Core 3.0.Build a framework (base class 2, library part) of Business namespace that targets .NET Core 3.0. ○*3
213_Build_BusinessRichClient_netcore30.batBuild a framework for rich client application (base class 2, library part) of Business namespace that targets .NET Core 3.0.○*2, *3
22 4_Build_CopyAssemblies.batCopy the primary output of the above build to the reference folder.Copy the primary output of the above build to the reference folder.
23 4_Build_Framework_Tool.batBuild the .NET Framework-based tools bundled with Open Touryo.Build the .NET Framework-based tools bundled with Open Touryo.
244_Build_Framework_ToolCore.batBuild the .NET Core-based tools bundled with Open Touryo.○*3
25 5_Build_Bat_sample.batBuild the .NET Framework-based sample application. (Batch application)Build the .NET Framework-based sample application. (Batch application) ○*4
26 5_Build_BatCore_sample.batBuild the .NET Core-based sample application. (Batch application)○*3, *4Build the .NET Core-based sample application. (Batch application)○*3, *4
27 5_Build_2CS_sample.batBuild the .NET Framework-based sample application. (Two-tier client server application)Build the .NET Framework-based sample application. (Two-tier client server application) ○*4
285_Build_2CSCore_sample.batBuild the .NET Core-based sample application. (Two-tier client server application)○*3, *4
29 6_Build_WSSrv_sample.batBuild the .NET Framework-based sample application. (Web services (Server-side logic))Build the .NET Framework-based sample application. (Web services (Server-side logic)) ○*4
30 6_Build_WSSrvCore_sample.batBuild the .NET Core-based sample application. (Web services (Server-side logic))Build the .NET Core-based sample application. (Web services (Server-side logic))○*3, *4
31 7_Build_Framework_WS.batBuild the .NET Framework-based framework. (Service interface)Build the .NET Framework-based framework. (Service interface) ○*4
8_Build_WSClntWin_sample.batBuild the .NET Framework-based sample application. (Web service client (Windows forms)) ○*4327_Build_Framework_WSCore.batBuild the .NET Core-based framework. (Service interface)○*3, *4
9_Build_WSClntWPF_sample.batBuild the .NET Framework-based sample application. (Web service client (WPF)) 338_Build_WSClnt_sample.batBuild the .NET Framework-based sample application. (Web service client)  ○*4
348_Build_WSClntCore_sample.batBuild the .NET Core-based sample application. (Web service client) ○*3, *4
35 10_Build_WebApp_sample.batBuild the sample web application. (ASP.NET)Build the sample web application. (ASP.NET) ○*4
36 10_Build_WebAppCore_sample.batBuild the sample web application. (ASP.NET Core)○*3, *4Build the sample web application. (ASP.NET Core)○*3, *4
37 99_BuildLibsAtOtherRepos.batBatch file for to use the Business namespace of the repository in other repositories. (using OpenTouryoTemplates-master branch)Batch file for to use the Business namespace of the repository in other repositories. (using OpenTouryoTemplates-master branch)
38 99_BuildLibsAtOtherReposInTimeOfDev.batBatch file for to use the Business namespace of the repository in other repositories. (using OpenTouryo-develop branch)Batch file for to use the Business namespace of the repository in other repositories. (using OpenTouryo-develop branch)
39 y_Build_TestCode.batPerform batch build and execution of the following test code.Perform batch build and execution of the following test code.
40 y_Build_TestCode_Public.batBuild and execute the test code of the following Public namespace.Build and execute the test code of the following Public namespace.
41 y_Build_TestCode_SecCUI.batBuild and execute the CUI test code of the following Public.Security namespace.Build and execute the CUI test code of the following Public.Security namespace.
42 y_Build_TestCode_SecCUI.shBuild and execute the CUI test code of the following Public.Security namespace usin WSL.Build and execute the CUI test code of the following Public.Security namespace usin WSL.
43 y_Build_TestCode_SecGUI.batBuild and execute the GUI test code of the following Public.Security namespace.Build and execute the GUI test code of the following Public.Security namespace.
44 z_ChangePackages_net45.batBatch file to switch packages.config when creating NuGet package. (for .NET Framework 4.5.2)Batch file to switch packages.config when creating NuGet package. (for .NET Framework 4.5.2)
45 z_ChangePackages_net46.batBatch file to switch packages.config when creating NuGet package. (for .NET Framework 4.6)Batch file to switch packages.config when creating NuGet package. (for .NET Framework 4.6)
46 z_ChangePackages_net47.batBatch file to switch packages.config when creating NuGet package. (for .NET Framework 4.7)Batch file to switch packages.config when creating NuGet package. (for .NET Framework 4.7)
47 z_ChangePackages_net48.batBatch file to switch packages.config when creating NuGet package. (for .NET Framework 4.8)Batch file to switch packages.config when creating NuGet package. (for .NET Framework 4.8)
48 z_Common.batCommon settings (for MSBuild)Common settings (for MSBuild)
49 z_Common2.batCommon settings (for Visual Studio)Common settings (for Visual Studio)
+ @@ -108,248 +109,328 @@ Open 棟梁のプログラムをビルドするときは、**初回のみ、MSBu + + + + + + + - + + + - + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - - - + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -397,8 +478,6 @@ C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(2863,5): - ASP.NET MVC - C:\root\programs\CS\Samples\WebApp_sample\MVC_Sample\MVC_Sample.sln - C:\root\programs\VB\Samples\WebApp_sample\MVC_Sample\MVC_Sample.sln -- ASP.NET Core MVC - - C:\root\programs\CS\Samples4NetCore\WebApp_sample\MVC_Sample\MVC_Sample.sln #### C/S 2階層の場合: - Windows Forms @@ -419,6 +498,28 @@ C:\root\programs\CS\Samples\WS_sample\WSClient_sample\WSClientWinCone_sample\WSC - C:\root\programs\CS\Samples\WS_sample\WSClient_sample\WSClientWPF_sample\WSClientWPF_sample.sln - C:\root\programs\VB\Samples\WS_sample\WSClient_sample\WSClientWPF_sample\WSClientWPF_sample.sln +### .NET Core アプリケーション + +#### 基盤: +- C# + - C:\root\programs\CS\Frameworks\Infrastructure + - C:\root\programs\CS\Frameworks\Infrastructure\ServiceInterface\ASPNETWebServiceCore +- VB +... + +#### ツール: +- C# + - C:\root\programs\CS\Frameworks\Tools +- VB +... + +#### Sample アプリケーション: +- C# + - C:\root\programs\CS\Samples4NetCore +- VB +... + + ## その他 特記事項 ### 著作権、ライセンス diff --git a/root/files/resource/X509/GenECDsaCertByOpenSSL.bat b/root/files/resource/X509/GenECDsaCertByOpenSSL.bat index 9f272afd4..12901a43f 100644 --- a/root/files/resource/X509/GenECDsaCertByOpenSSL.bat +++ b/root/files/resource/X509/GenECDsaCertByOpenSSL.bat @@ -12,5 +12,5 @@ openssl pkcs12 -export -inkey private-key.pem -in _SHA384ECDSA.cer > _SHA384ECDS openssl ecparam -out private-key.pem -name secp521r1 -genkey openssl req -new -key private-key.pem > csr.csr -openssl x509 -in csr.csr -days 365000 -req -signkey private-key.pem > _SHA512ECDSA.cer -openssl pkcs12 -export -inkey private-key.pem -in _SHA512ECDSA.cer > _SHA512ECDSA.pfx \ No newline at end of file +openssl x509 -in csr.csr -days 365000 -req -signkey private-key.pem > _SHA521ECDSA.cer +openssl pkcs12 -export -inkey private-key.pem -in _SHA521ECDSA.cer > _SHA521ECDSA.pfx \ No newline at end of file diff --git a/root/files/resource/X509/SHA256ECDSA_Client.cer b/root/files/resource/X509/SHA256ECDSA_Client.cer new file mode 100644 index 000000000..3e881ab47 --- /dev/null +++ b/root/files/resource/X509/SHA256ECDSA_Client.cer @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBlTCCAToCCQDK5QwMi/MqnjAKBggqhkjOPQQDAjBRMQswCQYDVQQGEwJBVTET +MBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ +dHkgTHRkMQowCAYDVQQDDAF4MCAXDTE5MDIwNTA3NTI1M1oYDzMwMTgwNjA4MDc1 +MjUzWjBRMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UE +CgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQowCAYDVQQDDAF4MFkwEwYHKoZI +zj0CAQYIKoZIzj0DAQcDQgAEQHqRgMdwA7DemAL3OrTMMUOPs6dvLLiguQYRTv8I +arqXo/ZMSrPHmD9LYDcI9NqxJwzd1LwO34pgFjdYIBHEITAKBggqhkjOPQQDAgNJ +ADBGAiEA7AReGzXr3llZmVQyVbtaTy+2yKmWR7Jtune/fX6z394CIQCjX2Yzkxnh +7+4iQfVH3CJufY+g2RfEVU3YZHjCdokLJw== +-----END CERTIFICATE----- diff --git a/root/files/resource/X509/SHA256ECDSA_Client.pfx b/root/files/resource/X509/SHA256ECDSA_Client.pfx new file mode 100644 index 000000000..739d48b9c Binary files /dev/null and b/root/files/resource/X509/SHA256ECDSA_Client.pfx differ diff --git a/root/files/resource/X509/SHA256RSAClientCert.pfx b/root/files/resource/X509/SHA256RSAClientCert.pfx index 698c1c298..8dd27f662 100644 Binary files a/root/files/resource/X509/SHA256RSAClientCert.pfx and b/root/files/resource/X509/SHA256RSAClientCert.pfx differ diff --git a/root/files/resource/X509/SHA512ECDSA.cer b/root/files/resource/X509/SHA521ECDSA.cer similarity index 100% rename from root/files/resource/X509/SHA512ECDSA.cer rename to root/files/resource/X509/SHA521ECDSA.cer diff --git a/root/files/resource/X509/SHA512ECDSA.pfx b/root/files/resource/X509/SHA521ECDSA.pfx similarity index 100% rename from root/files/resource/X509/SHA512ECDSA.pfx rename to root/files/resource/X509/SHA521ECDSA.pfx diff --git a/root/files/tools/WinMergeFilters/touryo.flt b/root/files/tools/WinMergeFilters/touryo.flt index 0b35422d8..eaeb6abd7 100644 --- a/root/files/tools/WinMergeFilters/touryo.flt +++ b/root/files/tools/WinMergeFilters/touryo.flt @@ -2,19 +2,14 @@ desc: 棟梁 def: include -f: \.sln$ ## ソリューションファイル f: \.suo$ ## ソリューションファイル f: \.user$ ## ユーザファイル -f: \.csproj$ ## プロジェクトファイル -f: \.vbproj$ ## プロジェクトファイル ## デザイナ(自動生成) - f: \.designer\..*$ ## デザイナファイル -d: \\\web references$ ## web reference directory +d: \\web references$ ## web reference directory ## ビルドモジュール - f: \.dll$ ## DLLファイル f: \.pdb$ ## PDBファイル f: \.xap$ ## XAPファイル @@ -25,16 +20,19 @@ d: \\debug$ ## ビルドモジュール d: \\release$ ## ビルドモジュール d: \\build$ ## ビルドモジュール -## ログファイル - -f: \.log$ ## LOGファイル +## PKGマネージャーの類 +d: \\packages$ ## NuGet +d: \\node_modules$ ## npm ## ソース管理の類 - f: \.svnignore$ ## Subversion ignore file f: \.(vs[sp])?scc$ ## Visual SourceSafe files d: \\\.git$ ## git working copy d: \\\.svn$ ## Subversion working copy d: \\_svn$ ## Subversion working copy ASP.NET Hack -d: \\cvs$ ## CVS control directory \ No newline at end of file +d: \\cvs$ ## CVS control directory + +## ログファイル +f: \.log$ ## LOGファイル + diff --git a/root/files/tools/WinMergeFilters/touryofull.flt b/root/files/tools/WinMergeFilters/touryofull.flt index cea60a461..5b9944a6e 100644 --- a/root/files/tools/WinMergeFilters/touryofull.flt +++ b/root/files/tools/WinMergeFilters/touryofull.flt @@ -8,8 +8,15 @@ f: \.user$ ## ユーザファイル f: \.csproj$ ## プロジェクトファイル f: \.vbproj$ ## プロジェクトファイル -## ビルドモジュール +## IDE +d: \\\.vs$ ## Visual Studio +d: \\\.vscode$ ## Visual Studio Code + +## デザイナ(自動生成) +f: \.designer\..*$ ## デザイナファイル +d: \\web references$ ## web reference directory +## ビルドモジュール f: \.dll$ ## DLLファイル f: \.pdb$ ## PDBファイル f: \.xap$ ## XAPファイル @@ -20,16 +27,19 @@ d: \\debug$ ## ビルドモジュール d: \\release$ ## ビルドモジュール d: \\build$ ## ビルドモジュール -## ログファイル - -f: \.log$ ## LOGファイル +## PKGマネージャーの類 +d: \\packages$ ## NuGet +d: \\node_modules$ ## npm ## ソース管理の類 - f: \.svnignore$ ## Subversion ignore file f: \.(vs[sp])?scc$ ## Visual SourceSafe files d: \\\.git$ ## git working copy d: \\\.svn$ ## Subversion working copy d: \\_svn$ ## Subversion working copy ASP.NET Hack -d: \\cvs$ ## CVS control directory \ No newline at end of file +d: \\cvs$ ## CVS control directory + +## ログファイル +f: \.log$ ## LOGファイル + diff --git a/root/programs/CS/0_ExecAllBat.bat b/root/programs/CS/0_ExecAllBat.bat index 37264e2e3..f586eb60e 100644 --- a/root/programs/CS/0_ExecAllBat.bat +++ b/root/programs/CS/0_ExecAllBat.bat @@ -10,6 +10,7 @@ echo | call 2_Build_NuGet_net47.bat echo | call 2_Build_NuGet_net48.bat echo | call 2_Build_NuGet_netstd20.bat echo | call 2_Build_NuGet_netstd21.bat +echo | call 2_Build_NuGet_nettcore30.bat @echo on timeout 5 @@ -24,20 +25,31 @@ echo | call 3_Build_BusinessRichClient_net45.bat echo | call 3_Build_BusinessRichClient_net46.bat echo | call 3_Build_BusinessRichClient_net47.bat echo | call 3_Build_BusinessRichClient_net48.bat +echo | call 3_Build_BusinessRichClient_netcore30.bat + echo | call 4_Build_CopyAssemblies.bat @echo on timeout 5 echo | call 4_Build_Framework_Tool.bat +echo | call 4_Build_Framework_ToolCore.bat + +echo | call 5_Build_2CS_sample.bat +echo | call 5_Build_2CSCore_sample.bat + echo | call 5_Build_Bat_sample.bat echo | call 5_Build_BatCore_sample.bat -echo | call 5_Build_2CS_sample.bat + echo | call 6_Build_WSSrv_sample.bat echo | call 6_Build_WSSrvCore_sample.bat + echo | call 7_Build_Framework_WS.bat -echo | call 8_Build_WSClntWin_sample.bat -echo | call 9_Build_WSClntWPF_sample.bat +echo | call 7_Build_Framework_WSCore.bat + +echo | call 8_Build_WSClnt_sample.bat +echo | call 9_Build_WSClntCore_sample.bat + echo | call 10_Build_WebApp_sample.bat echo | call 10_Build_WebAppCore_sample.bat diff --git a/root/programs/CS/9_Build_WSClntWPF_sample.bat b/root/programs/CS/2_Build_NuGet_nettcore30.bat similarity index 76% rename from root/programs/CS/9_Build_WSClntWPF_sample.bat rename to root/programs/CS/2_Build_NuGet_nettcore30.bat index 72cfa9c70..dc634bb59 100644 --- a/root/programs/CS/9_Build_WSClntWPF_sample.bat +++ b/root/programs/CS/2_Build_NuGet_nettcore30.bat @@ -16,11 +16,12 @@ set CURRENT_DIR="%~dp0" call %CURRENT_DIR%z_Common.bat rem -------------------------------------------------- -rem Batch build of WSClientWPF_sample. +rem Build the batch Infrastructure rem -------------------------------------------------- -%BUILDFILEPATH% %COMMANDLINE% "Samples\WS_sample\WSClient_sample\WSClientWPF_sample\WSClientWPF_sample.sln" +call dotnet restore "Frameworks\Infrastructure\Nuget_RichClient_netcore30.sln" +call dotnet msbuild %COMMANDLINE% "Frameworks\Infrastructure\Nuget_RichClient_netcore30.sln" pause rem ------------------------------------------------------- -endlocal +endlocal \ No newline at end of file diff --git a/root/programs/CS/3_Build_BusinessRichClient_netcore30.bat b/root/programs/CS/3_Build_BusinessRichClient_netcore30.bat new file mode 100644 index 000000000..3a2e35f36 --- /dev/null +++ b/root/programs/CS/3_Build_BusinessRichClient_netcore30.bat @@ -0,0 +1,27 @@ +setlocal + +@rem -------------------------------------------------- +@rem Turn off the echo function. +@rem -------------------------------------------------- +@echo off + +@rem -------------------------------------------------- +@rem Get the path to the executable file. +@rem -------------------------------------------------- +set CURRENT_DIR="%~dp0" + +@rem -------------------------------------------------- +@rem Execution of the common processing. +@rem -------------------------------------------------- +call %CURRENT_DIR%z_Common.bat + +rem -------------------------------------------------- +rem Build the batch Infrastructure +rem -------------------------------------------------- +call dotnet restore "Frameworks\Infrastructure\BusinessRichClient_netcore30.sln" +call dotnet msbuild %COMMANDLINE% "Frameworks\Infrastructure\BusinessRichClient_netcore30.sln" + +pause + +rem ------------------------------------------------------- +endlocal \ No newline at end of file diff --git a/root/programs/CS/4_Build_Framework_ToolCore.bat b/root/programs/CS/4_Build_Framework_ToolCore.bat new file mode 100644 index 000000000..a33ae808e --- /dev/null +++ b/root/programs/CS/4_Build_Framework_ToolCore.bat @@ -0,0 +1,35 @@ +setlocal + +@rem -------------------------------------------------- +@rem Turn off the echo function. +@rem -------------------------------------------------- +@echo off + +@rem -------------------------------------------------- +@rem Get the path to the executable file. +@rem -------------------------------------------------- +set CURRENT_DIR="%~dp0" + +@rem -------------------------------------------------- +@rem Execution of the common processing. +@rem -------------------------------------------------- +call %CURRENT_DIR%z_Common.bat + +rem -------------------------------------------------- +rem Batch build of DPQuery_Tool. +rem -------------------------------------------------- +call dotnet restore "Frameworks\Tools\DPQuery_Tool\DPQuery_ToolCore.sln" +call dotnet msbuild %COMMANDLINE% "Frameworks\Tools\DPQuery_Tool\DPQuery_ToolCore.sln" + +pause + +rem -------------------------------------------------- +rem Batch build of DaoGen_Tool. +rem -------------------------------------------------- +call dotnet restore "Frameworks\Tools\DaoGen_Tool\DaoGen_ToolCore.sln" +call dotnet msbuild %COMMANDLINE% "Frameworks\Tools\DaoGen_Tool\DaoGen_ToolCore.sln" + +pause + +rem ------------------------------------------------------- +endlocal diff --git a/root/programs/CS/5_Build_2CSCore_sample.bat b/root/programs/CS/5_Build_2CSCore_sample.bat new file mode 100644 index 000000000..f42958565 --- /dev/null +++ b/root/programs/CS/5_Build_2CSCore_sample.bat @@ -0,0 +1,57 @@ +setlocal + +@rem -------------------------------------------------- +@rem Turn off the echo function. +@rem -------------------------------------------------- +@echo off + +@rem -------------------------------------------------- +@rem Get the path to the executable file. +@rem -------------------------------------------------- +set CURRENT_DIR="%~dp0" + +@rem -------------------------------------------------- +@rem Execution of the common processing. +@rem -------------------------------------------------- +call %CURRENT_DIR%z_Common.bat + +rem -------------------------------------------------- +rem Batch build of 2CSClientWin_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\2CS_sample\2CSClientWin_sample\2CSClientWin_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\2CS_sample\2CSClientWin_sample\2CSClientWin_sample.sln" + +rem -------------------------------------------------- +rem Batch build of GenDaoAndBatUpd_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\2CS_sample\GenDaoAndBatUpd_sample\GenDaoAndBatUpd_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\2CS_sample\GenDaoAndBatUpd_sample\GenDaoAndBatUpd_sample.sln" + +rem -------------------------------------------------- +rem Batch build of TimeStamp_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\2CS_sample\TimeStamp_sample\TimeStamp_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\2CS_sample\TimeStamp_sample\TimeStamp_sample.sln" + +rem -------------------------------------------------- +rem Batch build of 2CSClientWPF_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\2CS_sample\2CSClientWPF_sample\2CSClientWPF_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\2CS_sample\2CSClientWPF_sample\2CSClientWPF_sample.sln" + +rem -------------------------------------------------- +rem Batch build of AsyncEvent_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\2CS_sample\AsyncEvent_sample\AsyncEvent_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\2CS_sample\AsyncEvent_sample\AsyncEvent_sample.sln" + +rem -------------------------------------------------- +rem Batch build of CustCtrl_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\2CS_sample\CustCtrl_sample\CustCtrl_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\2CS_sample\CustCtrl_sample\CustCtrl_sample.sln" + +pause + +rem ------------------------------------------------------- +endlocal diff --git a/root/programs/CS/5_Build_2CS_sample.bat b/root/programs/CS/5_Build_2CS_sample.bat index d98884fe2..f41ecc72c 100644 --- a/root/programs/CS/5_Build_2CS_sample.bat +++ b/root/programs/CS/5_Build_2CS_sample.bat @@ -23,7 +23,7 @@ rem -------------------------------------------------- pause rem -------------------------------------------------- -rem Batch build of DenDaoAndBatUpd_sample. +rem Batch build of GenDaoAndBatUpd_sample. rem -------------------------------------------------- %BUILDFILEPATH% %COMMANDLINE% "Samples\2CS_sample\GenDaoAndBatUpd_sample\GenDaoAndBatUpd_sample.sln" diff --git a/root/programs/CS/6_Build_WSSrvCore_sample.bat b/root/programs/CS/6_Build_WSSrvCore_sample.bat index 5229fe979..3c680e303 100644 --- a/root/programs/CS/6_Build_WSSrvCore_sample.bat +++ b/root/programs/CS/6_Build_WSSrvCore_sample.bat @@ -15,11 +15,20 @@ set CURRENT_DIR="%~dp0" @rem -------------------------------------------------- call %CURRENT_DIR%z_Common.bat +rem -------------------------------------------------- +rem Make the Directory. +rem -------------------------------------------------- +md "Samples4NetCore\Legacy\WS_sample\Temp" +md "Samples4NetCore\Legacy\WS_sample\Build" + rem -------------------------------------------------- rem Batch build of WSServer_sample. rem -------------------------------------------------- -dotnet restore "Samples4NetCore\Legacy\WSServer_sample\WSServer_sample.sln" -dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\WSServer_sample\WSServer_sample.sln" +dotnet restore "Samples4NetCore\Legacy\WS_sample\WSServer_sample\WSServer_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\WS_sample\WSServer_sample\WSServer_sample.sln" + +xcopy /E /Y "Samples4NetCore\Legacy\WS_sample\WSServer_sample\bin\%BUILD_CONFIG%\netcoreapp3.0" "Samples4NetCore\Legacy\WS_sample\Temp\%BUILD_CONFIG%\netcoreapp3.0\" +xcopy /E /Y "Samples4NetCore\Legacy\WS_sample\Temp\%BUILD_CONFIG%\netcoreapp3.0" "Samples4NetCore\Legacy\WS_sample\Build\netcoreapp3.0\" pause diff --git a/root/programs/CS/7_Build_Framework_WSCore.bat b/root/programs/CS/7_Build_Framework_WSCore.bat new file mode 100644 index 000000000..82d12f01a --- /dev/null +++ b/root/programs/CS/7_Build_Framework_WSCore.bat @@ -0,0 +1,42 @@ +setlocal + +@rem -------------------------------------------------- +@rem Turn off the echo function. +@rem -------------------------------------------------- +@echo off + +@rem -------------------------------------------------- +@rem Get the path to the executable file. +@rem -------------------------------------------------- +set CURRENT_DIR="%~dp0" + +@rem -------------------------------------------------- +@rem Execution of the common processing. +@rem -------------------------------------------------- +call %CURRENT_DIR%z_Common.bat + +rem -------------------------------------------------- +rem Batch build of ServiceInterface(ASPNETWebService). +rem -------------------------------------------------- +..\nuget.exe restore "Frameworks\Infrastructure\ServiceInterface\ASPNETWebService\ASPNETWebService.sln" +%BUILDFILEPATH% %COMMANDLINE% "Frameworks\Infrastructure\ServiceInterface\ASPNETWebService\ASPNETWebService.sln" + +pause + +rem -------------------------------------------------- +rem Copy the dll folder assembly. +rem -------------------------------------------------- + +md "Frameworks\Infrastructure\ServiceInterface\WCFService\dll" +xcopy /E /Y "Samples\WS_sample\Build" "Frameworks\Infrastructure\ServiceInterface\WCFService\dll\" +pause + +rem -------------------------------------------------- +rem Batch build of ServiceInterface(WCFService). +rem -------------------------------------------------- +%BUILDFILEPATH% %COMMANDLINE% "Frameworks\Infrastructure\ServiceInterface\WCFService\WCFService.sln" + +pause + +rem ------------------------------------------------------- +endlocal diff --git a/root/programs/CS/8_Build_WSClntCore_sample.bat b/root/programs/CS/8_Build_WSClntCore_sample.bat new file mode 100644 index 000000000..6ed689dc2 --- /dev/null +++ b/root/programs/CS/8_Build_WSClntCore_sample.bat @@ -0,0 +1,43 @@ +setlocal + +@rem -------------------------------------------------- +@rem Turn off the echo function. +@rem -------------------------------------------------- +@echo off + +@rem -------------------------------------------------- +@rem Get the path to the executable file. +@rem -------------------------------------------------- +set CURRENT_DIR="%~dp0" + +@rem -------------------------------------------------- +@rem Execution of the common processing. +@rem -------------------------------------------------- +call %CURRENT_DIR%z_Common.bat + +rem -------------------------------------------------- +rem Batch build of WSClientWin_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\WS_sample\WSClient_sample\WSClientWin_sample\WSClientWin_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\WS_sample\WSClient_sample\WSClientWin_sample\WSClientWin_sample.sln" + +pause + +rem -------------------------------------------------- +rem Batch build of WSClientWPF_sample. +rem -------------------------------------------------- +rem dotnet restore "Samples4NetCore\Legacy\WS_sample\WSClient_sample\WSClientWinWPF_sample\WSClientWinWPF_sample.sln" +rem dotnet msbuild "Samples4NetCore\Legacy\WS_sample\WSClient_sample\WSClientWinWPF_sample\WSClientWinWPF_sample.sln" + +pause + +rem -------------------------------------------------- +rem Batch build of WSClientWin2_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\WS_sample\WSClient_sample\WSClientWin2_sample\WSClientWin2_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\WS_sample\WSClient_sample\WSClientWin2_sample\WSClientWin2_sample.sln" + +pause + +rem ------------------------------------------------------- +endlocal diff --git a/root/programs/CS/8_Build_WSClntWin_sample.bat b/root/programs/CS/8_Build_WSClnt_sample.bat similarity index 85% rename from root/programs/CS/8_Build_WSClntWin_sample.bat rename to root/programs/CS/8_Build_WSClnt_sample.bat index 3305ec65b..1c62601cb 100644 --- a/root/programs/CS/8_Build_WSClntWin_sample.bat +++ b/root/programs/CS/8_Build_WSClnt_sample.bat @@ -23,6 +23,13 @@ rem -------------------------------------------------- pause +rem -------------------------------------------------- +rem Batch build of WSClientWPF_sample. +rem -------------------------------------------------- +%BUILDFILEPATH% %COMMANDLINE% "Samples\WS_sample\WSClient_sample\WSClientWPF_sample\WSClientWPF_sample.sln" + +pause + rem -------------------------------------------------- rem Batch build of WSClientWin2_sample. rem -------------------------------------------------- diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business/MyFcBaseLogic.cs b/root/programs/CS/Frameworks/Infrastructure/Business/Business/MyFcBaseLogic.cs index 984dab0c4..5360b296c 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business/MyFcBaseLogic.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business/MyFcBaseLogic.cs @@ -175,7 +175,7 @@ protected override void UOC_ConnectionOpen( // 接続文字列をロード connstring = GetConfigParameter.GetConnectionString("ConnectionString_SQL"); } -#if NETCORE +#if NETCOREAPP #else else if (parameterValue.ActionType.Split('%')[0] == "OLE") { diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net45.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net45.csproj index 2579e7a78..ea95f605e 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net45.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net45.csproj @@ -96,6 +96,9 @@ False..\Build_net45\OpenTouryo.Public.dll + + ..\Build_net45\OpenTouryo.Public.Security.dll + ..\packages\Owin.1.0\lib\net40\Owin.dll True @@ -157,6 +160,7 @@ + ASPXCodeBehind diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net46.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net46.csproj index cd2dcd98d..ddd3a8de0 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net46.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net46.csproj @@ -96,6 +96,9 @@ False ..\Build_net46\OpenTouryo.Public.dll + + ..\Build_net46\OpenTouryo.Public.Security.dll + ..\packages\Owin.1.0\lib\net40\Owin.dll True @@ -157,6 +160,7 @@ + ASPXCodeBehind diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net47.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net47.csproj index 1d1a41682..8b30148f5 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net47.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net47.csproj @@ -96,6 +96,9 @@ False ..\Build_net47\OpenTouryo.Public.dll + + ..\Build_net47\OpenTouryo.Public.Security.dll + ..\packages\Owin.1.0\lib\net40\Owin.dll True @@ -157,6 +160,7 @@ + ASPXCodeBehind diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net48.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net48.csproj index 6579ef302..7b55677ec 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net48.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net48.csproj @@ -96,6 +96,9 @@ False ..\Build_net48\OpenTouryo.Public.dll + + ..\Build_net48\OpenTouryo.Public.Security.dll + ..\packages\Owin.1.0\lib\net40\Owin.dll True @@ -157,6 +160,7 @@ + ASPXCodeBehind diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj index dc9121b5e..be5924eea 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj @@ -8,7 +8,7 @@ - TRACE;DEBUG;NETCORE + TRACE;DEBUG;NETCOREAPP ..\Build_netcore20\ ..\Build_netcore20\netcoreapp2.0\OpenTouryo.Business.xml portable @@ -17,7 +17,7 @@ - TRACE;NETCORE + TRACE;NETCOREAPP ..\Build_netcore20r\netstandard2.0\OpenTouryo.Business.xml ..\Build_netcore20r\ @@ -36,6 +36,7 @@ + @@ -84,6 +85,9 @@ ..\Build_netstd20\netstandard2.0\OpenTouryo.Public.dll + + ..\Build_netstd20\netstandard2.0\OpenTouryo.Public.Security.dll + diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj index 0713e5a88..db806f7dc 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj @@ -8,7 +8,7 @@ - TRACE;DEBUG;NETCORE + TRACE;DEBUG;NETCOREAPP ..\Build_netcore30\ ..\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.xml portable @@ -17,7 +17,7 @@ - TRACE;NETCORE + TRACE;NETCOREAPP ..\Build_netcore30r\netcoreapp3.0\OpenTouryo.Business.xml ..\Build_netcore30r\ @@ -36,6 +36,7 @@ + @@ -84,6 +85,9 @@ ..\Build_netstd21\netstandard2.1\OpenTouryo.Public.dll + + ..\Build_netstd21\netstandard2.1\OpenTouryo.Public.Security.dll + diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/AuthenticationFailureResult.cs b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/AuthenticationFailureResult.cs new file mode 100644 index 000000000..50502a649 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/AuthenticationFailureResult.cs @@ -0,0 +1,86 @@ +//********************************************************************************** +//* Copyright (C) 2007,2016 Hitachi Solutions,Ltd. +//********************************************************************************** + +#region Apache License +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#endregion + +//********************************************************************************** +//* クラス名 :AuthenticationFailureResult +//* クラス日本語名 :AuthenticationFailureResult +//* +//* 作成者 :生技 西野 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 2020/02/12 西野 大介 新規作成 +//********************************************************************************** + +using System.Threading; +using System.Threading.Tasks; +using System.Web.Http; +using System.Net; +using System.Net.Http; + +namespace Touryo.Infrastructure.Business.Presentation +{ + /// AuthenticationFailureResult + public class AuthenticationFailureResult : IHttpActionResult + { + #region インスタンス変数 + + /// RequestMessage + public HttpRequestMessage RequestMessage { get; private set; } + + + /// ReasonPhrase + public string ReasonPhrase { get; private set; } + + #endregion + + #region コンストラクタ + + /// コンストラクタ + /// HttpRequestMessage + /// string + public AuthenticationFailureResult(HttpRequestMessage requestMessage, string reasonPhrase) + { + this.RequestMessage = requestMessage; + this.ReasonPhrase = reasonPhrase; + } + + #endregion + + /// ExecuteAsync + /// + /// Task(HttpResponseMessage) + public Task ExecuteAsync(CancellationToken cancellationToken) + { + return Task.FromResult(Execute()); + } + + /// Execute + /// HttpResponseMessage + private HttpResponseMessage Execute() + { + HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Unauthorized); + response.RequestMessage = this.RequestMessage; + response.ReasonPhrase = this.ReasonPhrase; + return response; + } + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiController.cs b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiController.cs index e16151066..d4165c4cf 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiController.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiController.cs @@ -29,6 +29,7 @@ //* ---------- ---------------- ------------------------------------------------- //* 2017/08/11 西野 大介 新規作成 //* 2018/12/12 西野 大介 インターフェイスの拡張 +//* 2020/02/12 西野 大介 属性ベース機構の強化(EnumHttpAuthHeaderの導入) //********************************************************************************** #pragma warning disable 1998 @@ -53,6 +54,7 @@ using Touryo.Infrastructure.Framework.Authentication; using Touryo.Infrastructure.Framework.Exceptions; using Touryo.Infrastructure.Public.Log; +using Touryo.Infrastructure.Public.Security; using Touryo.Infrastructure.Public.Util; namespace Touryo.Infrastructure.Business.Presentation @@ -62,6 +64,8 @@ namespace Touryo.Infrastructure.Business.Presentation [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] public class MyBaseAsyncApiController : ActionFilterAttribute, IAuthenticationFilter, IActionFilter, IExceptionFilter { + #region インスタンス変数 + /// 性能測定 private PerformanceRecorder perfRec; @@ -74,8 +78,32 @@ public class MyBaseAsyncApiController : ActionFilterAttribute, IAuthenticationFi /// ActionName protected string ActionName = ""; + /// HttpAuthHeader + protected EnumHttpAuthHeader HttpAuthHeader = EnumHttpAuthHeader.None; + + #endregion + + #region コンストラクタ + + /// コンストラクタ + /// 自由に利用できる。 + public MyBaseAsyncApiController() : base() + { + this.HttpAuthHeader = EnumHttpAuthHeader.None; + } + + /// コンストラクタ + /// EnumHttpAuthHeader + /// 自由に利用できる。 + public MyBaseAsyncApiController(EnumHttpAuthHeader httpAuthHeader) : base() + { + this.HttpAuthHeader = httpAuthHeader; + } + + #endregion + #region 認証・認可 - + /// /// プロセスが承認を要求したときに呼び出します。 /// https://msdn.microsoft.com/ja-jp/library/dn314618.aspx @@ -281,7 +309,7 @@ private string GetExceptionMessageID(Exception ex) #region 情報取得用 - /// GetControllerAndActionName + /// Controller/Action名を取得する /// HttpActionContext private void GetControllerAndActionName(HttpActionContext actionContext) { @@ -313,76 +341,110 @@ private void GetControllerAndActionName(HttpActionContext actionContext) /// HttpAuthenticationContext private async Task GetUserInfoAsync(HttpAuthenticationContext authenticationContext) { - // カスタム認証処理 -------------------------------------------- - // Authorization: Bearer ヘッダから - // JWTアサーションを処理し、認証、UserInfoを生成するなど。 - // ------------------------------------------------------------- - List claims = null; - - if (authenticationContext.Request.Headers.Authorization != null) + // Authorization: + if (this.HttpAuthHeader == EnumHttpAuthHeader.None) { - if (authenticationContext.Request.Headers.Authorization.Scheme.ToLower() == "bearer") - { - string access_token = authenticationContext.Request.Headers.Authorization.Parameter; - - string sub = ""; - List roles = null; - List scopes = null; - JObject jobj = null; + // 認証なし + return; + } + else if (this.HttpAuthHeader.HasFlag(EnumHttpAuthHeader.Basic)) + { + // Basic認証の認証アルゴリズムを追加 + // Authorization: Basic XXXXXXXXXX + return; + } + else if (this.HttpAuthHeader.HasFlag(EnumHttpAuthHeader.Bearer)) + { + // Bearer認証の認証アルゴリズムを追加 -------------------------- + // Authorization: Bearer XXXXXXXXXX + // JWTアサーションを処理し、認証、UserInfoを生成するなど。 + // ------------------------------------------------------------- + List claims = null; - if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) + if (authenticationContext.Request.Headers.Authorization != null) + { + try { - // ActionFilterAttributeとApiController間の情報共有はcontext.Principalを使用する。 - // ★ 必要であれば、他の業務共通引継ぎ情報などをロードする。 - claims = new List() + if (authenticationContext.Request.Headers.Authorization.Scheme.ToLower() == "bearer") { - new Claim(ClaimTypes.Name, sub), - new Claim(ClaimTypes.Role, string.Join(",", roles)), - new Claim(OAuth2AndOIDCConst.UrnScopesClaim, string.Join(",", scopes)), - new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, (string)jobj[OAuth2AndOIDCConst.aud]), - new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress(authenticationContext.Request)) - }; - // The request message contains valid credential. - authenticationContext.Principal = new ClaimsPrincipal(new List { new ClaimsIdentity(claims, "Token") }); - - return; + string access_token = authenticationContext.Request.Headers.Authorization.Parameter; + + string sub = ""; + List roles = null; + List scopes = null; + JObject jobj = null; + + if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) + { + // ActionFilterAttributeとApiController間の情報共有はcontext.Principalを使用する。 + // ★ 必要であれば、他の業務共通引継ぎ情報などをロードする。 + claims = new List() + { + new Claim(ClaimTypes.Name, sub), + new Claim(ClaimTypes.Role, string.Join(",", roles)), + new Claim(OAuth2AndOIDCConst.UrnScopesClaim, string.Join(",", scopes)), + new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, (string)jobj[OAuth2AndOIDCConst.aud]), + new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress(authenticationContext.Request)) + }; + + // The request message contains valid credential. + authenticationContext.Principal = new ClaimsPrincipal( + new List { new ClaimsIdentity(claims, "Token") }); + + return; + } + else + { + // JWTの内容検証に失敗 + } + + } + else + { + // Authorization HeaderがBearerでない。 + } } - else + catch { - // JWTの内容検証に失敗 + // 例外発生 ≒ 未認証扱い。 } } else { - // Authorization HeaderがBearerでない。 + // Authorization Headerが存在しない。 } - } - else - { - // Authorization Headerが存在しない。 - } - - #region 未認証状態の場合の扱い - // The request message contains invalid credential. - //context.ErrorResult = new UnauthorizedResult(new AuthenticationHeaderValue[0], context.Request); + #region 未認証状態の場合の扱い - // 未認証状態のclaimsを作成格納 - claims = new List() - { - new Claim(ClaimTypes.Name, "未認証"), - new Claim(ClaimTypes.Role, ""), - new Claim(OAuth2AndOIDCConst.UrnScopesClaim, ""), - new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, ""), - new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress(authenticationContext.Request)) - }; + if (this.HttpAuthHeader.HasFlag(EnumHttpAuthHeader.None)) + { + // 未認証状態のclaimsを作成格納 + claims = new List() + { + new Claim(ClaimTypes.Name, "未認証"), + new Claim(ClaimTypes.Role, ""), + new Claim(OAuth2AndOIDCConst.UrnScopesClaim, ""), + new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, ""), + new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress(authenticationContext.Request)) + }; + + authenticationContext.Principal = new ClaimsPrincipal(new List { new ClaimsIdentity(claims, "Token") }); + } + else + { - authenticationContext.Principal = new ClaimsPrincipal(new List { new ClaimsIdentity(claims, "Token") }); + // 認証エラーを返す。 + // ASP.NET Web API 2 | Microsoft Docs + // https://docs.microsoft.com/ja-jp/aspnet/web-api/overview/security/authentication-filters + authenticationContext.ErrorResult = new AuthenticationFailureResult( + authenticationContext.Request, "Bearer Credentials is invalid."); + } - return; + return; - #endregion + #endregion + } } /// GetClientIpAddress @@ -437,7 +499,16 @@ public static ClaimsIdentity GetClaimsIdentity() /// IEnumerable(Claim) public static IEnumerable GetRawClaims() { - return MyBaseAsyncApiController.GetClaimsIdentity().Claims; + ClaimsIdentity claimsIdentity = MyBaseAsyncApiController.GetClaimsIdentity(); + + if (claimsIdentity == null) + { + return null; + } + else + { + return claimsIdentity.Claims; + } } /// GetClaims @@ -448,10 +519,60 @@ public static IEnumerable GetRawClaims() public static void GetClaims(out string userName, out string roles, out string scopes, out string ipAddress) { IEnumerable claims = MyBaseAsyncApiController.GetRawClaims(); - userName = claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value; - roles = claims.FirstOrDefault(c => c.Type == ClaimTypes.Role).Value; - scopes = claims.FirstOrDefault(c => c.Type == OAuth2AndOIDCConst.UrnScopesClaim).Value; - ipAddress = claims.FirstOrDefault(c => c.Type == "IpAddress").Value; + + if (claims == null) + { + // claims == null + userName = "未認証"; + roles = ""; + scopes = ""; + ipAddress = ""; + } + else + { + // claims != null + Claim claim = null; + + claim = claims.FirstOrDefault(c => c.Type == ClaimTypes.Name); + if (claim == null) + { + userName = "未認証"; + } + else + { + userName = claim.Value; + } + + claim = claims.FirstOrDefault(c => c.Type == ClaimTypes.Role); + if (claim == null) + { + roles = ""; + } + else + { + roles = claim.Value; + } + + claim = claims.FirstOrDefault(c => c.Type == OAuth2AndOIDCConst.UrnScopesClaim); + if (claim == null) + { + scopes = ""; + } + else + { + scopes = claim.Value; + } + + claim = claims.FirstOrDefault(c => c.Type == "IpAddress"); + if (claim == null) + { + ipAddress = ""; + } + else + { + ipAddress = claim.Value; + } + } } #endregion diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiControllerCore.cs b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiControllerCore.cs index e3f06aa28..0594aa407 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiControllerCore.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiControllerCore.cs @@ -29,6 +29,7 @@ //* ---------- ---------------- ------------------------------------------------- //* 2018/04/09 西野 大介 新規作成 //* 2018/12/12 西野 大介 インターフェイスの拡張 +//* 2020/02/12 西野 大介 属性ベース機構の強化(EnumHttpAuthHeaderの導入) //********************************************************************************** using System; @@ -36,6 +37,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using System.Security.Claims; +using System.Net.Http.Headers; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Abstractions; @@ -51,6 +53,7 @@ using Touryo.Infrastructure.Framework.Exceptions; using Touryo.Infrastructure.Framework.Util; using Touryo.Infrastructure.Public.Log; +using Touryo.Infrastructure.Public.Security; using Touryo.Infrastructure.Public.Util; namespace Touryo.Infrastructure.Business.Presentation @@ -60,6 +63,8 @@ namespace Touryo.Infrastructure.Business.Presentation [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] public class MyBaseAsyncApiController : ActionFilterAttribute, IAsyncAuthorizationFilter, IAsyncActionFilter, IExceptionFilter { + #region インスタンス変数 + /// 性能測定 private PerformanceRecorder perfRec; @@ -72,6 +77,30 @@ public class MyBaseAsyncApiController : ActionFilterAttribute, IAsyncAuthorizati /// ActionName protected string ActionName = ""; + /// HttpAuthHeader + protected EnumHttpAuthHeader HttpAuthHeader = EnumHttpAuthHeader.None; + + #endregion + + #region コンストラクタ + + /// コンストラクタ + /// 自由に利用できる。 + public MyBaseAsyncApiController() : base() + { + this.HttpAuthHeader = EnumHttpAuthHeader.None; + } + + /// コンストラクタ + /// EnumHttpAuthHeader + /// 自由に利用できる。 + public MyBaseAsyncApiController(EnumHttpAuthHeader httpAuthHeader) : base() + { + this.HttpAuthHeader = httpAuthHeader; + } + + #endregion + #region 認証・認可 /// AuthorizationFilterContext @@ -250,7 +279,7 @@ private string GetExceptionMessageID(Exception ex) #region 情報取得用 - /// GetControllerAndActionName + /// Controller/Action名を取得する /// ActionExecutingContext private void GetControllerAndActionName(ActionExecutingContext context) { @@ -286,79 +315,107 @@ private void GetControllerAndActionName(ActionExecutingContext context) /// awaitするメソッドを追加して呼ぶ可能性も高いのでasyncを付与 private async Task GetUserInfoAsync(AuthorizationFilterContext authorizationContext) { - // カスタム認証処理 -------------------------------------------- - // Authorization: Bearer ヘッダから - // JWTアサーションを処理し、認証、UserInfoを生成するなど。 - // ------------------------------------------------------------- - List claims = null; - - if (authorizationContext.HttpContext.Request.Headers != null) + // Authorization: + if (this.HttpAuthHeader == EnumHttpAuthHeader.None) + { + // 認証なし + return; + } + else if (this.HttpAuthHeader.HasFlag(EnumHttpAuthHeader.Basic)) + { + // Basic認証の認証アルゴリズムを追加 + // Authorization: Basic XXXXXXXXXX + return; + } + else if (this.HttpAuthHeader.HasFlag(EnumHttpAuthHeader.Bearer)) { - StringValues authHeaders = ""; + // Bearer認証の認証アルゴリズムを追加 -------------------------- + // Authorization: Bearer XXXXXXXXXX + // JWTアサーションを処理し、認証、UserInfoを生成するなど。 + // ------------------------------------------------------------- + List claims = null; - if (authorizationContext.HttpContext.Request.Headers.TryGetValue("Authorization", out authHeaders)) + if (authorizationContext.HttpContext.Request.Headers != null) { - string access_token = authHeaders[0].Split(' ')[1]; + StringValues authHeaders = ""; - string sub = ""; - List roles = null; - List scopes = null; - JObject jobj = null; - - if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) + try { - // ActionFilterAttributeとApiController間の情報共有はcontext.Principalを使用する。 - // ★ 必要であれば、他の業務共通引継ぎ情報などをロードする。 - claims = new List() + if (authorizationContext.HttpContext.Request.Headers.TryGetValue("Authorization", out authHeaders)) { - new Claim(ClaimTypes.Name, sub), - new Claim(ClaimTypes.Role, string.Join(",", roles)), - new Claim(OAuth2AndOIDCConst.UrnScopesClaim, string.Join(",", scopes)), - new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, (string)jobj[OAuth2AndOIDCConst.aud]), - new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress()) - }; - - // ClaimsPrincipalを設定 - MyHttpContext.Current.User = new ClaimsPrincipal(new ClaimsIdentity(claims, "Token")); - - return; + string access_token = authHeaders[0].Split(' ')[1]; + + string sub = ""; + List roles = null; + List scopes = null; + JObject jobj = null; + + if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) + { + // ActionFilterAttributeとApiController間の情報共有はcontext.Principalを使用する。 + // ★ 必要であれば、他の業務共通引継ぎ情報などをロードする。 + claims = new List() + { + new Claim(ClaimTypes.Name, sub), + new Claim(ClaimTypes.Role, string.Join(",", roles)), + new Claim(OAuth2AndOIDCConst.UrnScopesClaim, string.Join(",", scopes)), + new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, (string)jobj[OAuth2AndOIDCConst.aud]), + new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress()) + }; + + // ClaimsPrincipalを設定 + MyHttpContext.Current.User = new ClaimsPrincipal(new ClaimsIdentity(claims, "Token")); + + return; + } + else + { + // JWTの内容検証に失敗 + } + } + else + { + // Authorization HeaderがBearerでない。 + } } - else + catch { - // JWTの内容検証に失敗 + // 例外発生 ≒ 未認証扱い。 } } else { - // Authorization HeaderがBearerでない。 + // Authorization Headerが存在しない。 } - } - else - { - // Authorization Headerが存在しない。 - } - #region 未認証状態の場合の扱い + #region 未認証状態の場合の扱い - // The request message contains invalid credential - //context.ErrorResult = new UnauthorizedResult(new AuthenticationHeaderValue[0], context.Request); - - // 未認証状態のclaimsを作成格納 - claims = new List() - { - new Claim(ClaimTypes.Name, "未認証"), - new Claim(ClaimTypes.Role, ""), - new Claim(OAuth2AndOIDCConst.UrnScopesClaim, ""), - new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, ""), - new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress()) - }; - - // The request message contains valid credential. - MyHttpContext.Current.User.AddIdentity(new ClaimsIdentity(claims, "Token")); + if (this.HttpAuthHeader.HasFlag(EnumHttpAuthHeader.None)) + { + // 未認証状態のclaimsを作成格納 + claims = new List() + { + new Claim(ClaimTypes.Name, "未認証"), + new Claim(ClaimTypes.Role, ""), + new Claim(OAuth2AndOIDCConst.UrnScopesClaim, ""), + new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, ""), + new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress()) + }; + + MyHttpContext.Current.User.AddIdentity(new ClaimsIdentity(claims, "Token")); + } + else + { + // 認証エラーを返す。 + // ASP.NET Core MVCで403エラーをクライアントへ返す - Living Absurd World + // https://blog.hmatoba.net/Article/144 + authorizationContext.Result = new UnauthorizedResult(); + } - return; + return; - #endregion + #endregion + } } /// GetClientIpAddress @@ -379,7 +436,16 @@ public static ClaimsIdentity GetClaimsIdentity() /// IEnumerable(Claim) public static IEnumerable GetRawClaims() { - return MyBaseAsyncApiController.GetClaimsIdentity().Claims; + ClaimsIdentity claimsIdentity = MyBaseAsyncApiController.GetClaimsIdentity(); + + if (claimsIdentity == null) + { + return null; + } + else + { + return claimsIdentity.Claims; + } } /// GetClaims @@ -391,11 +457,61 @@ public static void GetClaims(out string userName, out string roles, out string s { // MyHttpContext.Current.User.Identity側ではなく、Identities側に入っている。 // Identityは認証ミドルウェアを使用する必要がある?(coreでjwtをどう処理するのか?) - IEnumerable claims = MyBaseAsyncApiController.GetRawClaims(); - userName = claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value; - roles = claims.FirstOrDefault(c => c.Type == ClaimTypes.Role).Value; - scopes = claims.FirstOrDefault(c => c.Type == OAuth2AndOIDCConst.UrnScopesClaim).Value; - ipAddress = claims.FirstOrDefault(c => c.Type == "IpAddress").Value; + IEnumerable claims = MyBaseAsyncApiController.GetRawClaims(); + + if (claims == null) + { + // claims == null + userName = "未認証"; + roles = ""; + scopes = ""; + ipAddress = ""; + } + else + { + // claims != null + Claim claim = null; + + claim = claims.FirstOrDefault(c => c.Type == ClaimTypes.Name); + if (claim == null) + { + userName = "未認証"; + } + else + { + userName = claim.Value; + } + + claim = claims.FirstOrDefault(c => c.Type == ClaimTypes.Role); + if (claim == null) + { + roles = ""; + } + else + { + roles = claim.Value; + } + + claim = claims.FirstOrDefault(c => c.Type == OAuth2AndOIDCConst.UrnScopesClaim); + if (claim == null) + { + scopes = ""; + } + else + { + scopes = claim.Value; + } + + claim = claims.FirstOrDefault(c => c.Type == "IpAddress"); + if (claim == null) + { + ipAddress = ""; + } + else + { + ipAddress = claim.Value; + } + } } #endregion diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_net46.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_net46.csproj index fd8fe22e6..b42461471 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_net46.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_net46.csproj @@ -81,15 +81,15 @@ ..\..\Build_net46\OpenTouryo.Framework.RichClient.dll + + ..\..\Build\OpenTouryo.Public.dll + 3.0 3.0 - - ..\..\Build\OpenTouryo.Public.dll - diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_netcore30.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_netcore30.csproj new file mode 100644 index 000000000..7458cb7d2 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_netcore30.csproj @@ -0,0 +1,59 @@ + + + + Library + netcoreapp3.0 + true + true + OpenTouryo.Business.RichClient + Touryo.Infrastructure.Business.RichClient + + + + TRACE;NETCOREAPP + ..\..\Build_netcore30\ + ..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.RichClient.xml + portable + true + 1701;1702;NU1701 + + + + TRACE;NETCOREAPP + ..\..\Build_netcore30r\netcoreapp3.0\OpenTouryo.Business.RichClient.xml + ..\..\Build_netcore30r\ + + + + + + + + + ..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.RichClient.dll + + + ..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.dll + + + ..\..\Build_netstd21\netstandard2.1\OpenTouryo.DamManagedOdp.dll + + + ..\..\Build_netstd21\netstandard2.1\OpenTouryo.DamMySQL.dll + + + ..\..\Build_netstd21\netstandard2.1\OpenTouryo.DamPstGrS.dll + + + ..\..\Build_netstd21\netstandard2.1\OpenTouryo.Framework.dll + + + ..\..\Build_netstd21\netstandard2.1\OpenTouryo.Public.dll + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyBaseLogic2CS.cs b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyBaseLogic2CS.cs index 0fcd516b4..e9401d78e 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyBaseLogic2CS.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyBaseLogic2CS.cs @@ -145,7 +145,7 @@ protected override void UOC_ConnectionOpen( // 接続文字列をロード connstring = GetConfigParameter.GetConnectionString("ConnectionString_SQL"); } -#if NETCOREAPP2_0 +#if NETCOREAPP #else else if (parameterValue.ActionType.Split('%')[0] == "OLE") { diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyFcBaseLogic2CS.cs b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyFcBaseLogic2CS.cs index df30b8be9..862b3be42 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyFcBaseLogic2CS.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyFcBaseLogic2CS.cs @@ -173,7 +173,7 @@ protected override void UOC_ConnectionOpen( // 接続文字列をロード connstring = GetConfigParameter.GetConnectionString("ConnectionString_SQL"); } -#if NETCOREAPP2_0 +#if NETCOREAPP #else else if (parameterValue.ActionType.Split('%')[0] == "OLE") { diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Util/MyCmnFunction.cs b/root/programs/CS/Frameworks/Infrastructure/Business/Util/MyCmnFunction.cs index e2300841b..ccde4c07e 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Util/MyCmnFunction.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Util/MyCmnFunction.cs @@ -49,7 +49,7 @@ using Touryo.Infrastructure.Public.IO; using Touryo.Infrastructure.Public.Util; -#if NETCORE +#if NETCOREAPP using Touryo.Infrastructure.Framework.StdMigration; using Microsoft.AspNetCore.Http; #else @@ -92,7 +92,7 @@ public static long CalculateSessionSize() long size = 0; // SessionのオブジェクトをBinarySerializeしてサイズを取得。 -#if NETCORE +#if NETCOREAPP foreach (string key in MyHttpContext.Current.Session.Keys) { // 当該キーのオブジェクト・サイズを足しこむ。 @@ -115,7 +115,7 @@ public static long CalculateSessionSize() #region コントロール取得&イベントハンドラ設定 -#if NETCORE +#if NETCOREAPP #else /// コントロール取得&イベントハンドラ設定(下位互換) /// コントロール diff --git a/root/programs/CS/Frameworks/Infrastructure/BusinessRichClient_netcore30.sln b/root/programs/CS/Frameworks/Infrastructure/BusinessRichClient_netcore30.sln new file mode 100644 index 000000000..d22155443 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/BusinessRichClient_netcore30.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Business.RichClient_netcore30", "Business\RichClient\Business.RichClient_netcore30.csproj", "{7518B624-536C-4F4B-8E73-E5421EDCF1DD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomControl.RichClient_netcore30", "CustomControl\RichClient\CustomControl.RichClient_netcore30.csproj", "{7F43B77D-7B02-4C18-94CC-4B1348CDEB57}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Release|Any CPU.Build.0 = Release|Any CPU + {7F43B77D-7B02-4C18-94CC-4B1348CDEB57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F43B77D-7B02-4C18-94CC-4B1348CDEB57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F43B77D-7B02-4C18-94CC-4B1348CDEB57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F43B77D-7B02-4C18-94CC-4B1348CDEB57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {F8E24A69-525F-46B8-B01A-3223411B148E} + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/Control/WinCustomTextBox.cs b/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/Control/WinCustomTextBox.cs index 068fead5a..30095b540 100644 --- a/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/Control/WinCustomTextBox.cs +++ b/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/Control/WinCustomTextBox.cs @@ -29,6 +29,7 @@ //* ---------- ---------------- ------------------------------------------------- //* 2016/01/28 Sai Corrected IsIndispensabile property spelling //* 2017/01/31 西野 大介 "Indispensable" ---> "Required" +//* 2017/01/31 西野 大介 Obsolete of String.Copy. //********************************************************************************** using System; @@ -43,6 +44,7 @@ using System.Windows.Forms.Design; using Touryo.Infrastructure.Framework.RichClient.Util; +using Touryo.Infrastructure.Public.IO; using Touryo.Infrastructure.Public.Str; namespace Touryo.Infrastructure.CustomControl.RichClient @@ -1140,7 +1142,11 @@ private void WinCustomTextBox_KeyUp(object sender, KeyEventArgs e) //Debug.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + ":" + base.Text); // 無限ループ対応 +#if NETCOREAPP + string txt = this.StringCopy(base.Text); +#else string txt = String.Copy(base.Text); +#endif if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back) { @@ -1178,7 +1184,11 @@ private void WinCustomTextBox_KeyUp(object sender, KeyEventArgs e) public void PreValidate() { // 生入力 +#if NETCOREAPP + string txt = this.StringCopy(base.Text); +#else string txt = String.Copy(base.Text); +#endif // 半角化(数値指定されている場合) if (this.NumericalPossibility) @@ -1357,7 +1367,11 @@ public bool Validate(out string[] result) // ワーク List lstRet = new List(); +#if NETCOREAPP + string txt = this.StringCopy(base.Text); +#else string txt = String.Copy(base.Text); +#endif if (this.CheckType != null) { @@ -1571,12 +1585,20 @@ internal void Edit() if (this.DisplayUnits == null) { // DisplayUnitsがNULLである。 +#if NETCOREAPP + txt = this.StringCopy(base.Text); +#else txt = String.Copy(base.Text); +#endif } else { // DisplayUnitsがNULLでない。 +#if NETCOREAPP + txt = this.StringCopy(this._Value); +#else txt = String.Copy(this._Value); +#endif } //Debug.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + ":point1"); @@ -1645,10 +1667,14 @@ internal void ReEdit() // 0対応 string temp = ""; +#if NETCOREAPP + string txt = this.StringCopy(base.Text); +#else string txt = String.Copy(base.Text); +#endif //Debug.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + ":point1"); - + // 数値だが、数値で無い場合、 if (this.NumericalPossibility && (!StringChecker.IsNumeric(txt))) { @@ -1985,5 +2011,14 @@ private string DeleteZeroAfterDP(string txt, EditDigitsAfterDP edad) } #endregion + +#if NETCOREAPP + /// StringCopy + private string StringCopy(string input) + { + return (string)BinarySerialize.DeepClone(input); + } +#else +#endif } } diff --git a/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/CustomControl.RichClient_netcore30.csproj b/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/CustomControl.RichClient_netcore30.csproj new file mode 100644 index 000000000..3a4f64b12 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/CustomControl.RichClient_netcore30.csproj @@ -0,0 +1,47 @@ + + + + Library + netcoreapp3.0 + true + true + OpenTouryo.CustomControl.RichClient + Touryo.Infrastructure.CustomControl.RichClient + + + + TRACE;NETCOREAPP + ..\..\Build_netcore30\ + ..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.CustomControl.RichClient.xml + portable + true + 1701;1702;NU1701 + + + + TRACE;NETCOREAPP + ..\..\Build_netcore30r\netcoreapp3.0\OpenTouryo.CustomControl.RichClient.xml + ..\..\Build_netcore30r\ + + + + + + + + + ..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.RichClient.dll + + + ..\..\Build_netstd21\netstandard2.1\OpenTouryo.Framework.dll + + + ..\..\Build_netstd21\netstandard2.1\OpenTouryo.Public.dll + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnClientParams.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnClientParams.cs index 130f69940..05c85060c 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnClientParams.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnClientParams.cs @@ -20,7 +20,7 @@ //********************************************************************************** //* クラス名 :CmnClientParams -//* クラス日本語名 :SAML2, OAuth2/OIDC, FAPIの各種パラメタ +//* クラス日本語名 :SAML2, OAuth2/OIDC, FAPIの各種Client側パラメタ //* //* 作成者 :生技 西野 //* 更新履歴 : @@ -60,6 +60,7 @@ public static string Isser #region 鍵関連 + #region Token検証 /// RsaCerFilePath public static string RsaCerFilePath { @@ -77,6 +78,11 @@ public static string EcdsaCerFilePath return GetConfigParameter.GetConfigValue("SpRp_EcdsaCerFilePath"); } } + #endregion + + #region クライアント認証 + // OAuth 2.0 JWT Bearer Token Flow + // JWT Secured Authorization Request (JAR) /// RsaPfxPassword public static string RsaPfxPassword @@ -96,6 +102,29 @@ public static string RsaPfxFilePath } } +#if NET45 || NET46 +#else + /// EcdsaPfxPassword + public static string EcdsaPfxPassword + { + get + { + return GetConfigParameter.GetConfigValue("SpRp_EcdsaPfxPassword"); + } + } + + /// EcdsaPfxFilePath + public static string EcdsaPfxFilePath + { + get + { + return GetConfigParameter.GetConfigValue("SpRp_EcdsaPfxFilePath"); + } + } +#endif + #endregion + + #region クライアント証明書 /// ClientCertPfxPassword public static string ClientCertPfxPassword { @@ -113,6 +142,7 @@ public static string ClientCertPfxFilePath return GetConfigParameter.GetConfigValue("SpRp_ClientCertPfxFilePath"); } } + #endregion #endregion } diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs index 2e99a7b99..6eded38fa 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs @@ -28,6 +28,8 @@ //* 日時 更新者 内容 //* ---------- ---------------- ------------------------------------------------- //* 2018/11/28 西野 大介 新規作成(分割) +//* 2020/03/02 西野 大介 検証メソッドの追加 +//* 2020/03/04 西野 大介 Claim生成メソッドの追加 //********************************************************************************** using System; @@ -38,6 +40,7 @@ using Touryo.Infrastructure.Public.IO; using Touryo.Infrastructure.Public.Str; +using Touryo.Infrastructure.Public.Util; using Touryo.Infrastructure.Public.Security.Jwt; namespace Touryo.Infrastructure.Framework.Authentication @@ -234,5 +237,109 @@ public static bool Verify(string jwtToken, out string jwtPayload) return ret; } + + /// + /// OAuth2AndOIDCConst.jti + /// + /// + /// JitClaim + /// + public static string CreateJitClaim() + { + return Guid.NewGuid().ToString("N"); + } + + /// + /// OAuth2AndOIDCConst.iat + /// + /// + /// IatClaim + /// + public static string CreateIatClaim() + { +#if NET45 + return PubCmnFunction.ToUnixTime(DateTimeOffset.Now).ToString(); +#else + return DateTimeOffset.Now.ToUnixTimeSeconds().ToString(); +#endif + } + + /// + /// OAuth2AndOIDCConst.exp + /// + /// TimeSpan + /// + /// ExpClaim + /// + public static string CreateExpClaim(TimeSpan forExp) + { +#if NET45 + return PubCmnFunction.ToUnixTime(DateTimeOffset.Now.Add(forExp)).ToString(); +#else + return DateTimeOffset.Now.Add(forExp).ToUnixTimeSeconds().ToString(); +#endif + } + + /// CheckClaims + /// JObject + /// string + /// string + /// string + /// string + /// bool + /// bool + public static bool CheckClaims( + JObject json, string key, out string value, + out string err, out string errDescription, bool nullable = false) + { + value = ""; + err = ""; + errDescription = ""; + + if (json.ContainsKey(key)) + { + value = (string)json[key]; + return true; + } + else + { + if (nullable) + { + return true; + } + else + { + err = "server_error"; + errDescription = "the value correspond this key is not contained: " + key; + return false; + } + } + } + + #region ClaimVerifier + /// VerifyExp + /// exp + /// bool + public static bool VerifyExp(string exp) + { +#if NET45 + return (long.Parse(exp) >= PubCmnFunction.ToUnixTime(DateTimeOffset.Now)); +#else + return (long.Parse(exp) >= DateTimeOffset.Now.ToUnixTimeSeconds()); +#endif + } + + /// VerifyNbf + /// nbf + /// bool + public static bool VerifyNbf(string nbf) + { +#if NET45 + return (long.Parse(nbf) <= PubCmnFunction.ToUnixTime(DateTimeOffset.Now)); +#else + return (long.Parse(nbf) <= DateTimeOffset.Now.ToUnixTimeSeconds()); +#endif + } + #endregion } } diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs index db7303d12..61528017d 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs @@ -30,7 +30,9 @@ //* 2017/12/26 西野 大介 新規作成 //* 2018/03/28 西野 大介 .NET Standard対応で、幾らか、I/F変更あり。 //* 2018/11/27 西野 大介 XML(Base64) ---> Jwk(Base64Url)に変更。 -//* 2018/11/27 西野 大介 秘密鍵 <---> JWKサポート追加 +//* 2018/11/27 西野 大介 秘密鍵 <---> JWKのサポートを追加 +//* 2020/03/04 西野 大介 ...ECDsaのサポートを追加 +//* 2020/03/04 西野 大介 Claim生成メソッドの利用 //********************************************************************************** using System; @@ -64,19 +66,37 @@ public class JwtAssertion public static string Create( string iss, string aud, TimeSpan forExp, string scopes, string jwkPrivateKey) { - RsaPrivateKeyConverter rpkc = new RsaPrivateKeyConverter(JWS_RSA.RS._256); - return JwtAssertion.Create(iss, aud, forExp, scopes, - rpkc.JwkToParam(jwkPrivateKey)); + JObject temp = JsonConvert.DeserializeObject(jwkPrivateKey); + if (temp.ContainsKey("kty")) + { + if (((string)temp["kty"]).ToUpper() == "RSA") + { + RsaPrivateKeyConverter rpkc = new RsaPrivateKeyConverter(JWS_RSA.RS._256); + return JwtAssertion.CreateByRsa(iss, aud, forExp, scopes, + rpkc.JwkToParam(jwkPrivateKey)); + } +#if NET45 || NET46 +#else + else if (((string)temp["kty"]).ToUpper() == "EC") + { + EccPrivateKeyConverter epkc = new EccPrivateKeyConverter(JWS_ECDSA.ES._256); + return JwtAssertion.CreateByECDsa(iss, aud, forExp, scopes, + epkc.JwkToParam(jwkPrivateKey)); + } +#endif + } + + return ""; } - /// Create + /// CreateByRsa /// client_id /// Token2 EndPointのuri /// DateTimeOffset /// scopes /// RS256用のRSAParameters秘密鍵 /// JwtAssertion - public static string Create( + public static string CreateByRsa( string iss, string aud, TimeSpan forExp, string scopes, RSAParameters rsaPrivateKey) { string json = ""; @@ -89,15 +109,10 @@ public static string Create( jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iss, iss); // client_id jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.aud, aud); // Token EndPointのuri。 -#if NET45 - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.exp, PubCmnFunction.ToUnixTime(DateTimeOffset.Now.Add(forExp)).ToString()); - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iat, PubCmnFunction.ToUnixTime(DateTimeOffset.Now).ToString()); -#else - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.exp, (DateTimeOffset.Now.Add(forExp)).ToUnixTimeSeconds().ToString()); - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iat, DateTimeOffset.Now.ToUnixTimeSeconds().ToString()); -#endif + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.exp, CmnJwtToken.CreateExpClaim(forExp)); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iat, CmnJwtToken.CreateIatClaim()); - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.jti, Guid.NewGuid().ToString("N")); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.jti, CmnJwtToken.CreateJitClaim()); jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.scope, scopes); // scopes json = JsonConvert.SerializeObject(jwtAssertionClaimSet); @@ -111,6 +126,89 @@ public static string Create( #endregion } + +#if NET45 || NET46 +#else + /// CreateByECDsa + /// client_id + /// Token2 EndPointのuri + /// DateTimeOffset + /// scopes + /// ES256用のECParameters秘密鍵 + /// JwtAssertion + public static string CreateByECDsa( + string iss, string aud, TimeSpan forExp, string scopes, ECParameters eccPrivateKey) + { + string json = ""; + //string jws = ""; + + #region ClaimSetの生成 + + Dictionary jwtAssertionClaimSet = new Dictionary(); + + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iss, iss); // client_id + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.aud, aud); // Token EndPointのuri。 + + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.exp, CmnJwtToken.CreateExpClaim(forExp)); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iat, CmnJwtToken.CreateIatClaim()); + + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.jti, CmnJwtToken.CreateJitClaim()); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.scope, scopes); // scopes + + json = JsonConvert.SerializeObject(jwtAssertionClaimSet); + + #endregion + + #region JWT化 + + JWS_ES256_Param jwtES256 = new JWS_ES256_Param(eccPrivateKey, true); + return jwtES256.Create(json); + + #endregion + } + + /// CreateByECDsa + /// client_id + /// Token2 EndPointのuri + /// DateTimeOffset + /// scopes + /// ES256用の X.509秘密鍵 の File Path + /// ES256用の X.509秘密鍵 の Password + /// JwtAssertion + public static string CreateByECDsa( + string iss, string aud, TimeSpan forExp, string scopes, + string ecdsaX509FilePath, string ecdsaX509Password) + ///// ES256用のECParameters秘密鍵 + //ECParameters ecPrivateKey) // ECDsa.ExportParameters(true)が動かねぇ。 + { + string json = ""; + //string jws = ""; + + #region ClaimSetの生成 + + Dictionary jwtAssertionClaimSet = new Dictionary(); + + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iss, iss); // client_id + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.aud, aud); // Token EndPointのuri。 + + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.exp, CmnJwtToken.CreateExpClaim(forExp)); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iat, CmnJwtToken.CreateIatClaim()); + + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.jti, CmnJwtToken.CreateJitClaim()); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.scope, scopes); // scopes + + json = JsonConvert.SerializeObject(jwtAssertionClaimSet); + + #endregion + + #region JWT化 + + JWS_ES256_X509 jwtES256 = new JWS_ES256_X509(ecdsaX509FilePath, ecdsaX509Password); + return jwtES256.Create(json); + + #endregion + } +#endif #endregion #region Verify @@ -125,13 +223,37 @@ public static string Create( public static bool Verify(string jwtAssertion, out string iss, out string aud, out string scopes, out JObject jobj, string jwkPublicKey) { - RsaPublicKeyConverter rpkc = new RsaPublicKeyConverter(); - return JwtAssertion.Verify(jwtAssertion, - out iss, out aud, out scopes, out jobj, - rpkc.JwkToParam(jwkPublicKey)); + iss = ""; + aud = ""; + scopes = ""; + jobj = null; + + JObject temp = JsonConvert.DeserializeObject(jwkPublicKey); + if (temp.ContainsKey("kty")) + { + if (((string)temp["kty"]).ToUpper() == "RSA") + { + RsaPublicKeyConverter rpkc = new RsaPublicKeyConverter(); + return JwtAssertion.VerifyByRsa(jwtAssertion, + out iss, out aud, out scopes, out jobj, + rpkc.JwkToParam(jwkPublicKey)); + } +#if NET45 || NET46 +#else + else if (((string)temp["kty"]).ToUpper() == "EC") + { + EccPublicKeyConverter epkc = new EccPublicKeyConverter(); + return JwtAssertion.VerifyByECDsa(jwtAssertion, + out iss, out aud, out scopes, out jobj, + epkc.JwkToParam(jwkPublicKey)); + } +#endif + } + + return false; } - /// Verify + /// VerifyByRsa /// string /// client_id /// Token2 EndPointのuri @@ -139,7 +261,7 @@ public static bool Verify(string jwtAssertion, /// JObject /// RS256用のRSAParameters公開鍵 /// 検証結果 - public static bool Verify(string jwtAssertion, + public static bool VerifyByRsa(string jwtAssertion, out string iss, out string aud, out string scopes, out JObject jobj, RSAParameters rsaPublicKey) { iss = ""; @@ -185,6 +307,64 @@ public static bool Verify(string jwtAssertion, // 認証に失敗 return false; } + +#if NET45 || NET46 +#else + /// VerifyByECDsa + /// string + /// client_id + /// Token2 EndPointのuri + /// scopes + /// JObject + /// ES256用のECParameters公開鍵 + /// 検証結果 + public static bool VerifyByECDsa(string jwtAssertion, + out string iss, out string aud, out string scopes, out JObject jobj, ECParameters eccPublicKey) + { + iss = ""; + aud = ""; + scopes = ""; + jobj = null; + + JWS_ES256_Param jwtES256 = new JWS_ES256_Param(eccPublicKey, false); + + if (jwtES256.Verify(jwtAssertion)) + { + string jwtPayload = CustomEncode.ByteToString( + CustomEncode.FromBase64UrlString(jwtAssertion.Split('.')[1]), CustomEncode.UTF_8); + + jobj = ((JObject)JsonConvert.DeserializeObject(jwtPayload)); + + iss = (string)jobj[OAuth2AndOIDCConst.iss]; + aud = (string)jobj[OAuth2AndOIDCConst.aud]; + //string iat = (string)jobj[OAuth2AndOIDCConst.iat]; + scopes = (string)jobj[OAuth2AndOIDCConst.scope]; + + long unixTimeSeconds = 0; +#if NET45 + unixTimeSeconds = PubCmnFunction.ToUnixTime(DateTimeOffset.Now); +#else + unixTimeSeconds = DateTimeOffset.Now.ToUnixTimeSeconds(); +#endif + string exp = (string)jobj[OAuth2AndOIDCConst.exp]; + if (long.Parse(exp) >= unixTimeSeconds) + { + return true; + } + else + { + // JWTの内容検証に失敗 + } + } + else + { + // JWTの署名検証に失敗 + } + + // 認証に失敗 + return false; + } +#endif #endregion } } diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCClient.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCClient.cs index bfce9fc9f..6ea0df8c3 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCClient.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCClient.cs @@ -31,6 +31,7 @@ //* 2017/04/24 西野 大介 新規 //* 2018/08/10 西野 大介 汎用認証サイトからのコード移行 //* 2019/08/01 西野 大介 client_secret_postのサポートを追加 +//* 2020/03/04 西野 大介 CIBAの認可リクエスト(WebAPI)を追加 //********************************************************************************** using System; @@ -76,7 +77,7 @@ public static HttpClient HttpClient /// client_secret /// redirect_uri /// code - /// OAuth2AndOIDCEnum.AuthMethods + /// OAuth2AndOIDCEnum.AuthMethods /// 結果のJSON文字列 public static async Task GetAccessTokenByCodeAsync( Uri tokenEndpointUri, string client_id, string client_secret, string redirect_uri, string code, @@ -644,6 +645,89 @@ public static async Task RegisterRequestObjectAsync( return await httpResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false); } + #region CIBA + /// FAPI CIBAの認可リクエスト(WebAPI) + /// Uri + /// string + /// 結果のJSON文字列 + public static async Task CibaAuthZRequestAsyncAsync(Uri cibaAuthZUri, string requestObjectUri) + { + // 通信用の変数 + HttpRequestMessage httpRequestMessage = null; + HttpResponseMessage httpResponseMessage = null; + + // HttpRequestMessage (Method & RequestUri) + httpRequestMessage = new HttpRequestMessage + { + Method = HttpMethod.Post, + RequestUri = cibaAuthZUri, + }; + + httpRequestMessage.Content = new FormUrlEncodedContent( + new Dictionary + { + { OAuth2AndOIDCConst.request_uri, requestObjectUri } + }); + + // HttpResponseMessage + httpResponseMessage = await OAuth2AndOIDCClient._HttpClient.SendAsync(httpRequestMessage).ConfigureAwait(false); + return await httpResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false); + } + + /// FAPI CIBAのTokenリクエスト + /// Uri + /// client_id + /// client_secret + /// string + /// OAuth2AndOIDCEnum.AuthMethods + /// 結果のJSON文字列 + public static async Task GetAccessTokenByCibaAsync( + Uri tokenEndpointUri, string client_id, string client_secret, string auth_req_id, + OAuth2AndOIDCEnum.AuthMethods authMethod = OAuth2AndOIDCEnum.AuthMethods.client_secret_basic) + { + // 通信用の変数 + HttpRequestMessage httpRequestMessage = null; + HttpResponseMessage httpResponseMessage = null; + + // HttpRequestMessage (Method & RequestUri) + httpRequestMessage = new HttpRequestMessage + { + Method = HttpMethod.Post, + RequestUri = tokenEndpointUri, + }; + + // body + Dictionary body = new Dictionary + { + { OAuth2AndOIDCConst.grant_type, OAuth2AndOIDCConst.CibaGrantType }, + { "auth_req_id", auth_req_id } + }; + + // 認証情報の付加 + if (authMethod == OAuth2AndOIDCEnum.AuthMethods.client_secret_basic) + { + httpRequestMessage.Headers.Authorization + = AuthenticationHeader.CreateBasicAuthenticationHeaderValue(client_id, client_secret); + } + else if (authMethod == OAuth2AndOIDCEnum.AuthMethods.client_secret_post) + { + body.Add(OAuth2AndOIDCConst.client_id, client_id); + body.Add(OAuth2AndOIDCConst.client_secret, client_secret); + } + else + { + throw new ArgumentException( + PublicExceptionMessage.ARGUMENT_INCORRECT, "authMethod"); + } + + httpRequestMessage.Content = new FormUrlEncodedContent(body); + + // HttpResponseMessage + httpResponseMessage = await OAuth2AndOIDCClient._HttpClient.SendAsync(httpRequestMessage).ConfigureAwait(false); + return await httpResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false); + } + #endregion + #endregion } } \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCConst.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCConst.cs index 19298c5a8..92b9aeea7 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCConst.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCConst.cs @@ -28,6 +28,8 @@ //* 日時 更新者 内容 //* ---------- ---------------- ------------------------------------------------- //* 2018/08/10 西野 大介 新規作成(汎用認証サイトからのコード移行) +//* 201X/XX/XX 西野 大介 ... +//* 2020/02/27 西野 大介 CIBAのパラメタを追加 //********************************************************************************** // urnはClaimのurnで、 @@ -178,6 +180,9 @@ public class OAuth2AndOIDCConst /// JWT bearer token authorizationグラント種別 public const string JwtBearerTokenFlowGrantType = "urn:ietf:params:oauth:grant-type:jwt-bearer"; + /// CIBA(Client Initiated Backchannel Authentication)グラント種別 + public const string CibaGrantType = "urn:openid:params:grant-type:ciba"; + #endregion #region ResponseType @@ -512,6 +517,40 @@ public class OAuth2AndOIDCConst #endregion + #region CIBA + + #region 認可リクエスト + /// Login Hint Token + public const string login_hint_token = "login_hint_token"; + + /// Id Token Hint + public const string id_token_hint = "id_token_hint"; + + /// Binding Message + public const string binding_message = "binding_message"; + + /// User Code + public const string user_code = "user_code"; + + /// Requested Expiry + public const string requested_expiry = "requested_expiry"; + + /// Client Notification Token + public const string client_notification_token = "client_notification_token"; + #endregion + + #region 認可レスポンス + /// Auth Req Id + public const string auth_req_id = "auth_req_id"; + + // expires_in + + /// PollingInterval + public const string PollingInterval = "interval"; + #endregion + + #endregion + #region LoA(acr) #region urn diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCEnum.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCEnum.cs index 6e5d0ff6e..03ad020f3 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCEnum.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCEnum.cs @@ -28,6 +28,7 @@ //* 日時 更新者 内容 //* ---------- ---------------- ------------------------------------------------- //* 2019/02/06 西野 大介 新規作成 +//* 2019/12/25 西野 大介 PPID対応による見直し //********************************************************************************** namespace Touryo.Infrastructure.Framework.Authentication @@ -87,7 +88,95 @@ public enum AuthMethods : int #endregion - #region ClientMode + #region SubjectTypes + + /// SubjectTypes + public enum SubjectTypes : int + { + /// uname + uname, + + /// public + @public, + + /// pairwise + pairwise + } + + #endregion + + #region CIBA + + #region CIBA mode + + /// CibaのMode + public enum CibaMode : int + { + /// poll + poll, + + /// ping + ping, + + /// push + push + } + + #endregion + + #region CIBA state + + /// CibaのState + public enum CibaState : int + { + /// + /// 保留中 + /// + authorization_pending, + /// + /// 許可された(仕様外) + /// + access_permitted, + /// + /// 拒否された + /// + access_denied, + /// + /// 期限切れ + /// + expired_token, + /// + /// Polling間隔を5秒遅らせる。 + /// + slow_down, + /// + /// 見つからない(仕様外) + /// + not_found, + /// + /// データ不正(仕様外) + /// + irregularity_data + } + + #endregion + + #endregion + + #region ClientInfo(仕様外) + + /// ClientType + public enum ClientType : int + { + /// Confidential + confidential, + + /// Public(SPA) + public_spa, + + /// Public(Native) + public_native + } /// ClientMode public enum ClientMode : int diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs index be868230d..996b97f73 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs @@ -28,6 +28,7 @@ //* 日時 更新者 内容 //* ---------- ---------------- ------------------------------------------------- //* 2019/06/19 西野 大介 新規作成 +//* 2020/03/03 西野 大介 CIBA対応 //********************************************************************************** using System; @@ -50,6 +51,10 @@ namespace Touryo.Infrastructure.Framework.Authentication /// public class RequestObject { + #region FAPI2 CC + + // OpenID Connect Core 1.0 incorporating errata set 1 + // 6.1. Passing a Request Object by Value // https://openid.net/specs/openid-connect-core-1_0.html#RequestObject // { // "iss": "s6BhdRkqt3", @@ -83,7 +88,7 @@ public class RequestObject /// string /// string /// ClaimsInRO - /// string + /// RS256用のJWK秘密鍵 /// RequestObject public static string Create( string iss, string aud, string response_type, string response_mode, @@ -119,7 +124,6 @@ public static string Create( string max_age, string prompt, string login_hint, ClaimsInRO claims, RSAParameters rsaPrivateKey) { string json = ""; - //string jws = ""; #region ClaimSetの生成 @@ -186,14 +190,9 @@ public static bool Verify(string ro, out string iss, RSAParameters rsaPublicKey) iss = ""; string aud = ""; string response_type = ""; - //string response_mode = ""; - //string redirect_uri = ""; string scopes = ""; string state = ""; string nonce = ""; - //string prompt = ""; - //string login_hint = ""; - //JObject claims = null; JWS_RS256_Param jwtRS256 = new JWS_RS256_Param(rsaPublicKey); @@ -207,24 +206,10 @@ public static bool Verify(string ro, out string iss, RSAParameters rsaPublicKey) iss = (string)jobj[OAuth2AndOIDCConst.iss]; aud = (string)jobj[OAuth2AndOIDCConst.aud]; response_type = (string)jobj[OAuth2AndOIDCConst.response_type]; - - //if(jobj.ContainsKey(OAuth2AndOIDCConst.response_mode)) - // response_mode = (string)jobj[OAuth2AndOIDCConst.response_mode]; - //if (jobj.ContainsKey(OAuth2AndOIDCConst.redirect_uri)) - // redirect_uri = (string)jobj[OAuth2AndOIDCConst.redirect_uri]; - scopes = (string)jobj[OAuth2AndOIDCConst.scope]; state = (string)jobj[OAuth2AndOIDCConst.state]; nonce = (string)jobj[OAuth2AndOIDCConst.nonce]; - //if (jobj.ContainsKey(OAuth2AndOIDCConst.prompt)) - // prompt = (string)jobj[OAuth2AndOIDCConst.prompt]; - //if (jobj.ContainsKey(OAuth2AndOIDCConst.login_hint)) - // login_hint = (string)jobj[OAuth2AndOIDCConst.login_hint]; - - //if (jobj.ContainsKey(OAuth2AndOIDCConst.claims)) - // claims = (JObject)jobj[OAuth2AndOIDCConst.claims]; - if (!string.IsNullOrEmpty(iss) && !string.IsNullOrEmpty(aud) && !string.IsNullOrEmpty(response_type) && @@ -248,5 +233,192 @@ public static bool Verify(string ro, out string iss, RSAParameters rsaPublicKey) } } #endregion + + #endregion + +#if NET45 || NET46 +#else + #region FAPI CIBA + + // - OpenID Connect Client Initiated Backchannel Authentication Flow - Core 1.0 draft-01 + // https://openid.net/specs/openid-client-initiated-backchannel-authentication-core-1_0.html + // - Financial-grade API: Client Initiated Backchannel Authentication Profile + // https://openid.net/specs/openid-financial-api-ciba-ID1.html + + #region Create + ///// CreateCiba + ///// string + ///// string + ///// string + ///// string + ///// string + ///// string + ///// string + ///// string + ///// string + ///// string + ///// Dictionary(string, object) + ///// ES256用のJWK秘密鍵 + ///// RequestObject + //public static string CreateCiba( + // string iss, string aud, string exp, string nbf, string scopes, + // string client_notification_token, string binding_message, + // string user_code, string requested_expiry, string login_hint, + // Dictionary requestContextAndIntent, string jwkPrivateKey) + //{ + // EccPrivateKeyConverter epkc = new EccPrivateKeyConverter(); + // return RequestObject.CreateCiba( + // iss, aud, exp, nbf, scopes, + // client_notification_token, binding_message, + // user_code, requested_expiry, login_hint, + // requestContextAndIntent, epkc.JwkToParam(jwkPrivateKey)); + //} + + /// CreateCiba + /// string + /// string + /// string + /// string + /// string + /// string + /// string + /// string + /// string + /// string + /// Dictionary(string, object) + /// ES256用の X.509秘密鍵 の File Path + /// ES256用の X.509秘密鍵 の Password + /// RequestObject + public static string CreateCiba( + string iss, string aud, string exp, string nbf, string scopes, + string client_notification_token, string binding_message, + string user_code, string requested_expiry, string login_hint, + Dictionary requestContextAndIntent, + string ecdsaX509FilePath, string ecdsaX509Password) + ///// ES256用のECParameters秘密鍵 + //ECParameters ecPrivateKey) // ECDsa.ExportParameters(true)が動かねぇ。 + { + string json = ""; + + #region ClaimSetの生成 + + Dictionary requestObjectClaimSet = new Dictionary(); + + requestObjectClaimSet.Add(OAuth2AndOIDCConst.iss, iss); // client_id + requestObjectClaimSet.Add(OAuth2AndOIDCConst.aud, aud); // ROS EndPointのuri。 + requestObjectClaimSet.Add(OAuth2AndOIDCConst.exp, exp); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.iat, CmnJwtToken.CreateIatClaim()); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.nbf, nbf); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.jti, CmnJwtToken.CreateJitClaim()); + + requestObjectClaimSet.Add(OAuth2AndOIDCConst.scope, scopes); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.client_notification_token, client_notification_token); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.binding_message, binding_message); + + if (!string.IsNullOrEmpty(user_code)) + requestObjectClaimSet.Add(OAuth2AndOIDCConst.user_code, user_code); + if (!string.IsNullOrEmpty(requested_expiry)) + requestObjectClaimSet.Add(OAuth2AndOIDCConst.requested_expiry, requested_expiry); + + requestObjectClaimSet.Add(OAuth2AndOIDCConst.login_hint, login_hint); + + if (requestContextAndIntent != null) + { + foreach (string key in requestContextAndIntent.Keys) + { + requestObjectClaimSet.Add(key, requestContextAndIntent[key]); + } + } + + json = JsonConvert.SerializeObject(requestObjectClaimSet); + + #endregion + + #region JWT化 + + JWS_ES256_X509 jwtES256 = new JWS_ES256_X509(ecdsaX509FilePath, ecdsaX509Password); + return jwtES256.Create(json); + + #endregion + } + #endregion + + #region Verify + /// VerifyCiba + /// string + /// string + /// ES256用のJWK公開鍵 + /// 検証結果 + public static bool VerifyCiba(string ro, out string iss, string jwkPublicKey) + { + EccPublicKeyConverter epkc = new EccPublicKeyConverter(); + return RequestObject.VerifyCiba(ro, out iss, + epkc.JwkToParam(jwkPublicKey)); + } + + /// VerifyCiba + /// string + /// string + /// ES256用のECParameters公開鍵 + /// 検証結果 + public static bool VerifyCiba(string ro, out string iss, ECParameters ecPublicKey) + { + iss = ""; + string aud = ""; + string exp = ""; + string nbf = ""; + string scopes = ""; + string client_notification_token = ""; + string binding_message = ""; + string login_hint = ""; + + JWS_ES256_Param jwtES256 = new JWS_ES256_Param(ecPublicKey, false); + + if (jwtES256.Verify(ro)) + { + string jwtPayload = CustomEncode.ByteToString( + CustomEncode.FromBase64UrlString(ro.Split('.')[1]), CustomEncode.UTF_8); + + JObject jobj = ((JObject)JsonConvert.DeserializeObject(jwtPayload)); + + iss = (string)jobj[OAuth2AndOIDCConst.iss]; + aud = (string)jobj[OAuth2AndOIDCConst.aud]; + exp = (string)jobj[OAuth2AndOIDCConst.exp]; + nbf = (string)jobj[OAuth2AndOIDCConst.nbf]; + scopes = (string)jobj[OAuth2AndOIDCConst.scope]; + client_notification_token = (string)jobj[OAuth2AndOIDCConst.client_notification_token]; + binding_message = (string)jobj[OAuth2AndOIDCConst.binding_message]; + login_hint = (string)jobj[OAuth2AndOIDCConst.login_hint]; + + //if (...requestContextAndIntent + + if (!string.IsNullOrEmpty(iss) && + !string.IsNullOrEmpty(aud) && + !string.IsNullOrEmpty(exp) && + !string.IsNullOrEmpty(nbf) && + !string.IsNullOrEmpty(scopes) && + !string.IsNullOrEmpty(client_notification_token) && + !string.IsNullOrEmpty(binding_message) && + !string.IsNullOrEmpty(login_hint)) + { + // OK + return true; + } + else + { + // 必須項目の不足 + return true; + } + } + else + { + // JWTの署名検証に失敗 + return false; + } + } + #endregion + + #endregion +#endif } } diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Const.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Const.cs index ad506df82..84e23a6ed 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Const.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Const.cs @@ -28,6 +28,7 @@ //* 日時 更新者 内容 //* ---------- ---------------- ------------------------------------------------- //* 2019/05/21 西野 大介 新規作成 +//* 2019/12/25 西野 大介 PPID対応による見直し //********************************************************************************** namespace Touryo.Infrastructure.Framework.Authentication @@ -244,6 +245,9 @@ public const string MetadataTemplate /// NameIDPolicy要素のFormat属性をunspecifiedに指定する。 public const string UrnNameIDFormatUnspecified = UrnHeader11 + "nameid-format:unspecified"; + /// NameIDPolicy要素のFormat属性をemailAddressに指定する。 + public const string UrnNameIDFormatEmailAddress = UrnHeader11 + "nameid-format:emailAddress"; + /// NameIDPolicy要素のFormat属性を永続的仮名に指定する。 public const string UrnNameIDFormatPersistent = UrnHeader20 + "nameid-format:persistent"; diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Enum.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Enum.cs index 86c01aa8b..2e1aebaf8 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Enum.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Enum.cs @@ -28,6 +28,7 @@ //* 日時 更新者 内容 //* ---------- ---------------- ------------------------------------------------- //* 2019/05/21 西野 大介 新規作成 +//* 2019/12/25 西野 大介 PPID対応による見直し //********************************************************************************** //using Touryo.Infrastructure.Public.FastReflection; @@ -64,14 +65,17 @@ public enum SamlSchema : int /// NameIDFormat public enum NameIDFormat : int { - /// unspecified + /// unspecified(UserName or E-Mail or UserID) Unspecified, - /// persistent - Persistent, + /// emailAddress(E-Mail) + EmailAddress, + + /// persistent(PPID) + Persistent, // UserIDをPPID化 /// transient - Transient + Transient // 現状、サポート無し } /// ProtocolBinding @@ -140,6 +144,9 @@ public static string EnumToString(NameIDFormat nameIDFormat) case SAML2Enum.NameIDFormat.Unspecified: ret = SAML2Const.UrnNameIDFormatUnspecified; break; + case SAML2Enum.NameIDFormat.EmailAddress: + ret = SAML2Const.UrnNameIDFormatEmailAddress; + break; case SAML2Enum.NameIDFormat.Persistent: ret = SAML2Const.UrnNameIDFormatPersistent; break; @@ -240,6 +247,10 @@ public static void StringToEnum(string str, out NameIDFormat? nameIDFormat) { nameIDFormat = NameIDFormat.Unspecified; } + else if (str == SAML2Const.UrnNameIDFormatEmailAddress) + { + nameIDFormat = NameIDFormat.EmailAddress; + } else if (str == SAML2Const.UrnNameIDFormatPersistent) { nameIDFormat = NameIDFormat.Persistent; diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Params.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Params.cs index 2a9b23d5f..a7395a855 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Params.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Params.cs @@ -42,9 +42,9 @@ namespace Touryo.Infrastructure.Framework.Authentication { - /// SAML2Params - public class SAML2の各種パラメタ + /// SAML2の各種パラメタ + public class SAML2Params { - // AuthZ、Client共用のパラメタが無い + // AuthZ、Client共用のパラメタが無い } } diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd20.csproj b/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd20.csproj index 5804175d1..842715699 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd20.csproj @@ -4,7 +4,7 @@ netstandard2.0 Touryo.Infrastructure.Framework OpenTouryo.Framework - 2.5.0.0 + 2.6.0.0 Hitachi Solutions @@ -54,6 +54,8 @@ + + diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd21.csproj b/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd21.csproj index d7960a1b0..1456cf483 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd21.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd21.csproj @@ -4,7 +4,7 @@ netstandard2.1 Touryo.Infrastructure.Framework OpenTouryo.Framework - 2.5.0.0 + 2.6.0.0 Hitachi Solutions @@ -54,6 +54,8 @@ + + diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Properties/AssemblyInfo.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Properties/AssemblyInfo.cs index 804a0a9c7..1bfeb4246 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Properties/AssemblyInfo.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ // // すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を // 既定値にすることができます: -[assembly: AssemblyVersion("2.5.0.0")] +[assembly: AssemblyVersion("2.6.0.0")] diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Framework.RichClient_netcore30.csproj b/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Framework.RichClient_netcore30.csproj new file mode 100644 index 000000000..0c7244514 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Framework.RichClient_netcore30.csproj @@ -0,0 +1,35 @@ + + + + Library + netcoreapp3.0 + true + true + + + Touryo.Infrastructure.Framework.RichClient + OpenTouryo.Framework.RichClient + + + + On + ..\..\Build_netcore30\ + ..\..\Build_netcore30\Framework.RichClient.xml + Off + TRACE;NETCOREAPP + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Properties/AssemblyInfo.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Properties/AssemblyInfo.cs index 0dbdf50ba..e3cd51ee8 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Properties/AssemblyInfo.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Properties/AssemblyInfo.cs @@ -63,4 +63,4 @@ // すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を // 既定値にすることができます: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.5.0.0")] +[assembly: AssemblyVersion("2.6.0.0")] diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Transmission/CallController.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Transmission/CallController.cs index b797b10a0..62669afb1 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Transmission/CallController.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Transmission/CallController.cs @@ -59,6 +59,7 @@ //* 2018/03/29 西野 大介 .NET Standard対応:取り敢えずインプロセスのみ残す。 //* 2018/08/04 西野 大介 regionディレクティブのインデントの問題を修正 //* 2018/08/04 西野 大介 HttpClientにpropsの設定値を反映する。 +//* 2019/10/01 西野 大介 .NET Standard対応:ASP.NET WebAPI (JSON-RPC)の復元 //********************************************************************************** using System; @@ -72,8 +73,6 @@ using Touryo.Infrastructure.Public.Db; using Touryo.Infrastructure.Public.Reflection; -#if NETSTD -#else using System.Text; using System.Linq; using System.Collections.Generic; @@ -85,15 +84,17 @@ using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; +#if NETSTD +#else using System.ServiceModel; using System.ServiceModel.Channels; +#endif using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Touryo.Infrastructure.Public.IO; using Touryo.Infrastructure.Public.Str; -#endif #if NETSTD #else @@ -255,6 +256,7 @@ public string WCF_TCPIP_EndPointConfigName #endregion #endregion +#endif #region プロキシのURL @@ -293,7 +295,6 @@ public NetworkCredential NetworkCredentialToProxy } #endregion -#endif #endregion @@ -336,33 +337,8 @@ public object Invoke(string serviceName, object parameterValue) // クラス名 string className = ""; -#if NETSTD -#else - // URL - string url = ""; - - // タイムアウト - int timeout; - - // プロパティ - Dictionary props; -#endif - #endregion - #region 引数・戻り値関係の変数(WS時) - -#if NETSTD -#else - // .NETオブジェクトのバイト配列 // #y-↓3行 - byte[] contextObject = null; - byte[] parameterValueObject = null; - byte[] returnValueObject = null; - - // エラー情報のバイト配列 // #y-↓1行 - byte[] ret = null; -#endif - #endregion // 名前解決(プロトコル タイプ) @@ -401,15 +377,22 @@ public object Invoke(string serviceName, object parameterValue) } else { -#if NETSTD - // サービス呼び出しはサポートしない。 - // コンテキスト・nullエラー - throw new FrameworkException( - FrameworkExceptionMessage.PARAMETER_CHECK_ERROR[0], - String.Format(FrameworkExceptionMessage.PARAMETER_CHECK_ERROR[1], - String.Format(FrameworkExceptionMessage.PARAMETER_CHECK_ERROR_null, "serviceName"))); -#else - #region サービス呼び出し + // URL + string url = ""; + + // タイムアウト + int timeout; + + // プロパティ + Dictionary props; + + // .NETオブジェクトのバイト配列 // #y-↓3行 + byte[] contextObject = null; + byte[] parameterValueObject = null; + byte[] returnValueObject = null; + + // エラー情報のバイト配列 // #y-↓1行 + byte[] ret = null; // 名前解決(プロトコルURL) CallController.PRT_NS.NameResolutionProtocolUrl(serviceName, out url, out timeout, out props); @@ -448,6 +431,29 @@ public object Invoke(string serviceName, object parameterValue) #endregion +#if NETSTD + #region サービス呼び出し + + if (protocol == ((int)FxEnum.TmProtocol.AspNetWebAPI).ToString()) + { + // ASP.NET WebAPI (JSON-RPC) + ret = this.ASPNETWebAPI(serviceName, url, timeout, props, + contextObject, parameterValueObject, out returnValueObject); + } + else + { + // サービス呼び出しはサポートしない。 + // コンテキスト・nullエラー + throw new FrameworkException( + FrameworkExceptionMessage.PARAMETER_CHECK_ERROR[0], + String.Format(FrameworkExceptionMessage.PARAMETER_CHECK_ERROR[1], + String.Format(FrameworkExceptionMessage.PARAMETER_CHECK_ERROR_null, "serviceName"))); + } + + #endregion +#else + #region サービス呼び出し + if (protocol == ((int)FxEnum.TmProtocol.AspNetWs).ToString()) { #region WS-I Basic Profile v1.1、IIS + ASP.NET @@ -724,163 +730,9 @@ public object Invoke(string serviceName, object parameterValue) } else if (protocol == ((int)FxEnum.TmProtocol.AspNetWebAPI).ToString()) { - #region ASP.NET WebAPI (JSON-RPC) - - #region WebRequestHandler - - // 通信用の変数 - WebRequestHandler handler = new WebRequestHandler(); - - #region WASのクライアント認証のセキュリティ資格情報 for WCF - - NetworkCredential nwcWAS = this.CreateCredentials(props); - if (nwcWAS != null) - { - handler.Credentials = nwcWAS; - } - - #endregion - - #region プロキシ経由の要求を行うためのプロキシ情報 - - WebProxy proxy = this.CreateProxy(props); - if (proxy != null) - { - handler.Proxy = proxy; - } - - #endregion - - #region HTTP圧縮の有効・無効(Default:false) - - if (!props.ContainsKey(FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION))// Dic化でnullチェック変更 - { - // XML定義:キーが無い - } - else - { - if (string.IsNullOrEmpty(props[FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION])) - { - // XML定義:null or 空文字列 - } - else - { - // XML定義:あり - - bool compress; - - if (Boolean.TryParse(props[FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION], out compress)) - { - // 書式正常 - if (compress) - { - handler.AutomaticDecompression = - DecompressionMethods.GZip | DecompressionMethods.Deflate; - } - } - else - { - // パラメータ・エラー(書式不正) - throw new FrameworkException( - FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_SWITCH2[0], - String.Format(FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_SWITCH2[1], - FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION - + "=" + props[FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION])); - } - } - } - - #endregion - - #endregion - - #region HttpClient - - HttpClient client = new HttpClient(handler); - - HttpRequestMessage httpRequestMessage = null; - HttpResponseMessage httpResponseMessage = null; - httpRequestMessage = new HttpRequestMessage - { - Method = HttpMethod.Post, - RequestUri = new Uri(url), - Content = new StringContent(JsonConvert.SerializeObject( - new - { - ServiceName = serviceName, - ContextObject = CustomEncode.ToBase64String(contextObject), - ParameterValueObject = CustomEncode.ToBase64String(parameterValueObject) - }), - Encoding.UTF8, "application/json"), - }; - - // タイムアウト指定、有り - if (0 <= timeout) - { - client.Timeout = TimeSpan.FromSeconds(timeout); - } - - #region クライアント証明書、エージェント ヘッダ、接続グループ.etc - - #region クライアント証明書 CERTIFICATE - - X509Certificate2 x509 = this.CreateX509Certificate(props); - if (x509 != null) - { - handler.ClientCertificates.Add(x509); - } - - #endregion - - #region ユーザ エージェント ヘッダ値 - - // (Default:MS Web Services Client Protocol number、numberは、CLRのver) - if (!props.ContainsKey(FxLiteral.TRANSMISSION_HTTP_PROP_USER_AGENT))// Dic化でnullチェック変更 - { - // XML定義:キーが無い - } - else - { - if (string.IsNullOrEmpty(props[FxLiteral.TRANSMISSION_HTTP_PROP_USER_AGENT])) - { - // XML定義:null or 空文字列 - } - else - { - // XML定義:あり - client.DefaultRequestHeaders.Add( - "User-Agent", - props[FxLiteral.TRANSMISSION_HTTP_PROP_USER_AGENT]); - } - } - - #endregion - - #region 接続グループ(Default:Empty) - - // - - - #endregion - - #endregion - - // HttpRequestMessage (Headers) - //httpRequestMessage.Headers.Add("Authorization", authHeader); - //httpRequestMessage.Headers.Authorization = new AuthenticationHeaderValue("OAuth", authHeader); - //httpRequestMessage.Headers.ExpectContinue = false; - - #endregion - - // 同期呼び出しで実行 - httpResponseMessage = client.SendAsync(httpRequestMessage).Result; - string result = httpResponseMessage.Content.ReadAsStringAsync().Result; - JObject jObject = (JObject)JsonConvert.DeserializeObject(result); - - ret = CustomEncode.FromBase64String((string)jObject["Return"]); - contextObject = CustomEncode.FromBase64String((string)jObject["ContextObject"]); - returnValueObject = CustomEncode.FromBase64String((string)jObject["ReturnValueObject"]); - - #endregion + // ASP.NET WebAPI (JSON-RPC) + ret = this.ASPNETWebAPI(serviceName, url, timeout, props, + contextObject, parameterValueObject, out returnValueObject); } else { @@ -893,6 +745,9 @@ public object Invoke(string serviceName, object parameterValue) String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_prt2, protocol, serviceName))); // #14,32-この行 } + #endregion +#endif + #region 戻り値のデシリアライズ(#y-このregion) #region エラー情報 @@ -960,18 +815,191 @@ public object Invoke(string serviceName, object parameterValue) #endregion #endregion + } + } - #endregion + /// + /// ASP.NET WebAPI (JSON-RPC) + /// .NETCoreでも利用するため共通化 + /// + /// string + /// string + /// int + /// Dictionary(string, string) + /// byte[] + /// byte[] + /// byte[] + /// エラー情報のバイト配列 + private byte[] ASPNETWebAPI( + string serviceName, string url, int timeout, Dictionary props, + byte[] contextObject, byte[] parameterValueObject, out byte[] returnValueObject) + { + // Equivalent to WebRequestHandler in .net Core · Issue #26223 · dotnet/corefx + // https://github.com/dotnet/corefx/issues/26223 + + // 通信用の変数 +#if NETSTD + #region HttpClientHandler + HttpClientHandler handler = new HttpClientHandler(); + #endregion +#else + #region WebRequestHandler + WebRequestHandler handler = new WebRequestHandler(); + #endregion #endif + + #region WASのクライアント認証のセキュリティ資格情報 for WCF + + NetworkCredential nwcWAS = this.CreateCredentials(props); + if (nwcWAS != null) + { + handler.Credentials = nwcWAS; } - } - #endregion + #endregion + + #region プロキシ経由の要求を行うためのプロキシ情報 + + WebProxy proxy = this.CreateProxy(props); + if (proxy != null) + { + handler.Proxy = proxy; + } + + #endregion + + #region HTTP圧縮の有効・無効(Default:false) + + if (!props.ContainsKey(FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION))// Dic化でnullチェック変更 + { + // XML定義:キーが無い + } + else + { + if (string.IsNullOrEmpty(props[FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION])) + { + // XML定義:null or 空文字列 + } + else + { + // XML定義:あり + + bool compress; + + if (Boolean.TryParse(props[FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION], out compress)) + { + // 書式正常 + if (compress) + { + handler.AutomaticDecompression = + DecompressionMethods.GZip | DecompressionMethods.Deflate; + } + } + else + { + // パラメータ・エラー(書式不正) + throw new FrameworkException( + FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_SWITCH2[0], + String.Format(FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_SWITCH2[1], + FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION + + "=" + props[FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION])); + } + } + } + + #endregion + + #region HttpClient + + HttpClient client = new HttpClient(handler); + + HttpRequestMessage httpRequestMessage = null; + HttpResponseMessage httpResponseMessage = null; + httpRequestMessage = new HttpRequestMessage + { + Method = HttpMethod.Post, + RequestUri = new Uri(url), + Content = new StringContent(JsonConvert.SerializeObject( + new + { + ServiceName = serviceName, + ContextObject = CustomEncode.ToBase64String(contextObject), + ParameterValueObject = CustomEncode.ToBase64String(parameterValueObject) + }), + Encoding.UTF8, "application/json"), + }; + + // タイムアウト指定、有り + if (0 <= timeout) + { + client.Timeout = TimeSpan.FromSeconds(timeout); + } + + #region クライアント証明書、エージェント ヘッダ、接続グループ.etc + + #region クライアント証明書 CERTIFICATE + + X509Certificate2 x509 = this.CreateX509Certificate(props); + if (x509 != null) + { + handler.ClientCertificates.Add(x509); + } + + #endregion + + #region ユーザ エージェント ヘッダ値 + + // (Default:MS Web Services Client Protocol number、numberは、CLRのver) + if (!props.ContainsKey(FxLiteral.TRANSMISSION_HTTP_PROP_USER_AGENT))// Dic化でnullチェック変更 + { + // XML定義:キーが無い + } + else + { + if (string.IsNullOrEmpty(props[FxLiteral.TRANSMISSION_HTTP_PROP_USER_AGENT])) + { + // XML定義:null or 空文字列 + } + else + { + // XML定義:あり + client.DefaultRequestHeaders.Add( + "User-Agent", + props[FxLiteral.TRANSMISSION_HTTP_PROP_USER_AGENT]); + } + } + + #endregion + + #region 接続グループ(Default:Empty) + + // - + + #endregion + + #endregion + + // HttpRequestMessage (Headers) + //httpRequestMessage.Headers.Add("Authorization", authHeader); + //httpRequestMessage.Headers.Authorization = new AuthenticationHeaderValue("OAuth", authHeader); + //httpRequestMessage.Headers.ExpectContinue = false; + + #endregion + + // 同期呼び出しで実行 + httpResponseMessage = client.SendAsync(httpRequestMessage).Result; + string result = httpResponseMessage.Content.ReadAsStringAsync().Result; + JObject jObject = (JObject)JsonConvert.DeserializeObject(result); + + byte[] ret = CustomEncode.FromBase64String((string)jObject["Return"]); + contextObject = CustomEncode.FromBase64String((string)jObject["ContextObject"]); + returnValueObject = CustomEncode.FromBase64String((string)jObject["ReturnValueObject"]); + + return ret; + } #region ヘルパー -#if NETSTD -#else /// CreateProxy /// Dictionary(string, string) /// WebProxy @@ -1187,7 +1215,6 @@ private X509Certificate2 CreateX509Certificate(Dictionary props) return x509; } -#endif #endregion diff --git a/root/programs/CS/Frameworks/Infrastructure/Nuget_RichClient_netcore30.sln b/root/programs/CS/Frameworks/Infrastructure/Nuget_RichClient_netcore30.sln new file mode 100644 index 000000000..5ffc17049 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/Nuget_RichClient_netcore30.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Framework.RichClient_netcore30", "Framework\RichClient\Framework.RichClient_netcore30.csproj", "{7518B624-536C-4F4B-8E73-E5421EDCF1DD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Public_netstd21", "Public\Public_netstd21.csproj", "{B7B97B7C-B8A2-44CC-AB00-107D634A45E7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Framework_netstd21", "Framework\Framework_netstd21.csproj", "{D5A5BE98-2C29-48BE-95B3-0E6A8F500E14}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Release|Any CPU.Build.0 = Release|Any CPU + {B7B97B7C-B8A2-44CC-AB00-107D634A45E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B7B97B7C-B8A2-44CC-AB00-107D634A45E7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B7B97B7C-B8A2-44CC-AB00-107D634A45E7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B7B97B7C-B8A2-44CC-AB00-107D634A45E7}.Release|Any CPU.Build.0 = Release|Any CPU + {D5A5BE98-2C29-48BE-95B3-0E6A8F500E14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5A5BE98-2C29-48BE-95B3-0E6A8F500E14}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5A5BE98-2C29-48BE-95B3-0E6A8F500E14}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5A5BE98-2C29-48BE-95B3-0E6A8F500E14}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {F8E24A69-525F-46B8-B01A-3223411B148E} + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/BaseDam.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Db/BaseDam.cs index abac07453..0b233d510 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/BaseDam.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/BaseDam.cs @@ -38,8 +38,7 @@ //* 2009/03/19 西野 大介 DRのインターフェイスをobject→IDataReaderへ変更。 //* 2009/04/26 西野 大介 配列バインド対応を兼ね、型指定を可能にした。 //* 2009/04/28 西野 大介 デフォルト値を設けた -//* 2009/06/02 西野 大介 sln - IR版からの修正 -//* ・#x : CommandTimeOutデフォルト値を設定 +//* 2009/06/02 西野 大介 CommandTimeOutに既定値を設定可能にした。 //* 2009/08/12 西野 大介 比較演算子の向きを「<」に統一した。 //* 2009/09/25 西野 大介 内部の性能測定ログ出力処理を挿入した。 //* ※ Debug.WriteLineは意外に時間がかかるので注意! @@ -71,6 +70,7 @@ //* 2019/07/17 西野 大介 SQLの cache対応 で stackoverflow対応 が顕在化したため、 //* 自動生成でタグ数が多くなり過ぎるケースの対応を行う。 //* ProcessIFTag, ProcessINSCOLTag +//* 2020/01/16 西野 大介 CommandTimeOutの既定値に0を設定可能にした。 //********************************************************************************** using System; @@ -269,11 +269,12 @@ protected void SetCommandTimeout(IDbCommand cmd) } else { + // Configに指定された値を設定する。 int ret = 0; if (int.TryParse(sqlCommandTimeout, out ret)) { - if (0 < ret) // 2009/08/12-この行 + if (0 <= ret) { // 指定の値を設定 cmd.CommandTimeout = ret; diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd20.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd20.csproj index 2510559fa..37e68d574 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd20.csproj @@ -3,7 +3,7 @@ netstandard2.0 OpenTouryo.DamManagedOdp Touryo.Infrastructure.Public.Db - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd21.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd21.csproj index 541dad0d4..a42d5b49e 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd21.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd21.csproj @@ -3,7 +3,7 @@ netstandard2.1 OpenTouryo.DamManagedOdp Touryo.Infrastructure.Public.Db - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/Properties/AssemblyInfo.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/Properties/AssemblyInfo.cs index dfe89fec8..b326d36c6 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/Properties/AssemblyInfo.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ // // すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を // 既定値にすることができます: -[assembly: AssemblyVersion("2.5.0.0")] +[assembly: AssemblyVersion("2.6.0.0")] diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd20.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd20.csproj index 8d7f5f339..abada950f 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd20.csproj @@ -3,7 +3,7 @@ netstandard2.0 OpenTouryo.DamMySQL Touryo.Infrastructure.Public.Db - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd21.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd21.csproj index 8967c81c0..bd24e5a71 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd21.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd21.csproj @@ -3,7 +3,7 @@ netstandard2.1 OpenTouryo.DamMySQL Touryo.Infrastructure.Public.Db - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/Properties/AssemblyInfo.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/Properties/AssemblyInfo.cs index 6b9da0e7c..d5524769d 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/Properties/AssemblyInfo.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ // // すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を // 既定値にすることができます: -[assembly: AssemblyVersion("2.5.0.0")] \ No newline at end of file +[assembly: AssemblyVersion("2.6.0.0")] \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd20.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd20.csproj index 9cb6d4c2f..90752e0bd 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd20.csproj @@ -3,7 +3,7 @@ netstandard2.0 OpenTouryo.DamPstGrS Touryo.Infrastructure.Public.Db - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd21.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd21.csproj index ff85bfc84..99903365d 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd21.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd21.csproj @@ -3,7 +3,7 @@ netstandard2.1 OpenTouryo.DamPstGrS Touryo.Infrastructure.Public.Db - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/Properties/AssemblyInfo.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/Properties/AssemblyInfo.cs index 3f92dc629..913a2313e 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/Properties/AssemblyInfo.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ // // すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を // 既定値にすることができます: -[assembly: AssemblyVersion("2.5.0.0")] \ No newline at end of file +[assembly: AssemblyVersion("2.6.0.0")] \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/IO/ExponentialBackoff.cs b/root/programs/CS/Frameworks/Infrastructure/Public/IO/ExponentialBackoff.cs new file mode 100644 index 000000000..66e25d709 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/Public/IO/ExponentialBackoff.cs @@ -0,0 +1,144 @@ +//********************************************************************************** +//* Copyright (C) 2007,2016 Hitachi Solutions,Ltd. +//********************************************************************************** + +#region Apache License +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#endregion + +//********************************************************************************** +//* クラス名 :ExponentialBackoff +//* クラス日本語名 :ExponentialBackoffクラス +//* +//* 作成者 :生技 西野 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 2020/03/16 西野 大介 新規作成 +//********************************************************************************** + +using System; +using System.Threading; +using Touryo.Infrastructure.Public.Util; + +namespace Touryo.Infrastructure.Public.IO +{ + /// + /// Exponential Backoff(指数バックオフ) - マイクロソフト系技術情報 Wiki + /// https://techinfoofmicrosofttech.osscons.jp/index.php?Exponential%20Backoff%EF%BC%88%E6%8C%87%E6%95%B0%E3%83%90%E3%83%83%E3%82%AF%E3%82%AA%E3%83%95%EF%BC%89 + /// + public class ExponentialBackoff + { + /// 現在のリトライ間隔 + private int _current_retry_interval_msec = -1; + + /// 現在のリトライ回数 + private int _current_retry_count = 0; + + #region 最大 + + /// 最大リトライ回数 + private int _maximum_retry_count = 0; + + /// + /// リトライ間隔の最大値 + /// ・通常、32 秒または 64 秒 + /// ・適切な値はユースケースによって異なる。 + /// + private int _maximum_backoff_msec = 0; + + #endregion + + /// constructor + /// int + public ExponentialBackoff(int maximum_retry_count) : this(maximum_retry_count, 32) { } + + /// constructor + /// int + /// int + public ExponentialBackoff(int maximum_retry_count, int maximum_backoff_seconds) + { + // maximum_backoff_secondsの既定値は32 + + this._maximum_retry_count = maximum_retry_count; + this._maximum_backoff_msec = maximum_backoff_seconds * 1000; + } + + /// Sleep + /// + /// - true : ループを継続する。 + /// - false : ループを終了する。 + /// + public bool Sleep() + { + int temp = this.CalculateSleepIntervalMSec(); + + if (temp == -1) + { + return false; + } + else + { + Thread.Sleep(temp); + return true; + } + } + + /// GetSleepIntervalMSec + /// int + public int GetSleepIntervalMSec() + { + return this._current_retry_interval_msec; + } + + /// CalculateSleepIntervalMSec + /// int + public int CalculateSleepIntervalMSec() + { + //Thread.Sleep(int millisecondsTimeout) // 引数はミリ秒 + + // 基底のミリ秒 + int temp = (int)(Math.Pow(2, this._current_retry_count) * 1000); + + // 1,000 ミリ秒以下の乱数を足し込む。 + // 再試行リクエストの後に毎回再計算 + temp += (int)(RandomValueGenerator.GenerateRandomUint() % 1000); + + this._current_retry_count++; + + if (this._maximum_retry_count <= this._current_retry_count) + { + // 最大リトライ回数超過 → ループ終了 + this._current_retry_interval_msec = -1; + } + else + { + if (this._maximum_backoff_msec <= temp) + { + // 最大リトライ間隔超過 → 最大値を返す。 + this._current_retry_interval_msec = this._maximum_backoff_msec; + } + else + { + // 計算値を返す。 + this._current_retry_interval_msec = temp; + } + } + + return this._current_retry_interval_msec; + } + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Properties/AssemblyInfo.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Properties/AssemblyInfo.cs index 10fae7bbb..d953b091c 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Properties/AssemblyInfo.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ // // すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を // 既定値にすることができます: -[assembly: AssemblyVersion("2.5.0.0")] \ No newline at end of file +[assembly: AssemblyVersion("2.6.0.0")] \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net45.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net45.csproj index dbaf62097..d33d84fc3 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net45.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net45.csproj @@ -64,18 +64,10 @@ false - - ..\packages\BouncyCastle.NetCore.1.8.3\lib\net20\BouncyCastle.Crypto.dll - True - ..\packages\DotNetZip.1.12.0\lib\net20\DotNetZip.dll True - - ..\packages\jose-jwt.2.4.0\lib\net40\jose-jwt.dll - True - ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll True @@ -114,6 +106,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net46.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net46.csproj index 84bc3e0c0..18b5130bd 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net46.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net46.csproj @@ -64,18 +64,10 @@ false - - ..\packages\BouncyCastle.NetCore.1.8.3\lib\net20\BouncyCastle.Crypto.dll - True - ..\packages\DotNetZip.1.12.0\lib\net20\DotNetZip.dll True - - ..\packages\jose-jwt.2.4.0\lib\net40\jose-jwt.dll - True - ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll True @@ -114,6 +106,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net47.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net47.csproj index ea01e51f4..9e3b3faf0 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net47.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net47.csproj @@ -64,18 +64,10 @@ false - - ..\packages\BouncyCastle.NetCore.1.8.3\lib\net20\BouncyCastle.Crypto.dll - True - ..\packages\DotNetZip.1.12.0\lib\net20\DotNetZip.dll True - - ..\packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll - True - ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll True @@ -114,6 +106,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net48.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net48.csproj index 38f4a4acf..60f8433da 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net48.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net48.csproj @@ -64,18 +64,10 @@ false - - ..\packages\BouncyCastle.NetCore.1.8.3\lib\net20\BouncyCastle.Crypto.dll - True - ..\packages\DotNetZip.1.12.0\lib\net20\DotNetZip.dll True - - ..\packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll - True - ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll True @@ -114,6 +106,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd20.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd20.csproj index 9a6a6d740..32b46b819 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd20.csproj @@ -4,7 +4,7 @@ netstandard2.0 OpenTouryo.Public Touryo.Infrastructure.Public - 2.5.0.0 + 2.6.0.0 Hitachi Solutions @@ -101,6 +101,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd21.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd21.csproj index f852b96cd..940660635 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd21.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd21.csproj @@ -4,7 +4,7 @@ netstandard2.1 OpenTouryo.Public Touryo.Infrastructure.Public - 2.5.0.0 + 2.6.0.0 Hitachi Solutions @@ -101,6 +101,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumHttpAuthHeader.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumHttpAuthHeader.cs new file mode 100644 index 000000000..a3e93dcd1 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumHttpAuthHeader.cs @@ -0,0 +1,48 @@ +//********************************************************************************** +//* Copyright (C) 2007,2016 Hitachi Solutions,Ltd. +//********************************************************************************** + +#region Apache License +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#endregion + +//********************************************************************************** +//* クラス名 :EnumHttpAuthHeader +//* クラス日本語名 :HTTPリクエスト・ヘッダ「認証・認可」列挙型 +//* +//* 作成者 :生技 西野 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 2020/02/12 西野 大介 新規作成 +//********************************************************************************** + +using System; + +namespace Touryo.Infrastructure.Public.Security +{ + /// EnumHttpAuthHeader + [Flags] + public enum EnumHttpAuthHeader + { + /// None + None = 1, + /// Basic + Basic = 1 << 1, + /// Bearer + Bearer = 1 << 2 + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetHash.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetHash.cs index 13aa2d940..92da74b3f 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetHash.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetHash.cs @@ -35,6 +35,7 @@ //* 2017/01/10 西野 大介 上記のformat変更に伴い、EqualSaltedPasswd側のI/F変更が発生。 //* 2017/09/08 西野 大介 名前空間の移動( ---> Security ) //* 2018/10/30 西野 大介 各種プロバイダのサポートを追加 +//* 2019/11/15 西野 大介 GetHashBytesのStretchCountの既定値 = 0 //********************************************************************************** using System.Security.Cryptography; @@ -82,6 +83,19 @@ public static string GetHashString(string sourceString, EnumHashAlgorithm eha, i /// ハッシュ・アルゴリズム列挙型 /// ハッシュ値(バイト配列) public static byte[] GetHashBytes(byte[] asb, EnumHashAlgorithm eha) + { + // overloadへ + return GetHash.GetHashBytes(asb, eha, 0); + } + + /// + /// バイト配列のハッシュ値を計算して返す + /// (StretchCount = 1 の 下位互換用)。 + /// + /// バイト配列 + /// ハッシュ・アルゴリズム列挙型 + /// ハッシュ値(バイト配列) + public static byte[] GetHashBytes_org(byte[] asb, EnumHashAlgorithm eha) { // overloadへ return GetHash.GetHashBytes(asb, eha, 1); diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Properties/AssemblyInfo.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Properties/AssemblyInfo.cs index 1d99b233c..095863085 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Properties/AssemblyInfo.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ // // すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を // 既定値にすることができます: -[assembly: AssemblyVersion("2.5.0.0")] \ No newline at end of file +[assembly: AssemblyVersion("2.6.0.0")] \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net45.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net45.csproj index bcc2baaf2..150f8131c 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net45.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net45.csproj @@ -86,6 +86,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net46.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net46.csproj index 847f15836..14c65aa9a 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net46.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net46.csproj @@ -86,6 +86,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net47.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net47.csproj index e5eba536c..ef8fe9b24 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net47.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net47.csproj @@ -86,6 +86,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net48.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net48.csproj index 7af62c798..503b2f618 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net48.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net48.csproj @@ -86,6 +86,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd20.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd20.csproj index ec5fc1553..5c52329ff 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd20.csproj @@ -4,7 +4,7 @@ netstandard2.0 OpenTouryo.Public.Security Touryo.Infrastructure.Public.Security - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd21.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd21.csproj index 7cb63b717..f82d73c54 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd21.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd21.csproj @@ -4,7 +4,7 @@ netstandard2.1 OpenTouryo.Public.Security Touryo.Infrastructure.Public.Security - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringChecker.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringChecker.cs index c9dc118bd..4d4d32ea8 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringChecker.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringChecker.cs @@ -37,6 +37,7 @@ //* 2012/09/26 西野 大介 IsNumericメソッドを追加 //* 2013/08/30 西野 大介 IsInCodePageメソッドを追加 //* 2018/03/28 西野 大介 .NET Standard対応で、Microsoft.VisualBasicのサポート無し。 +//* 2019/10/28 西野 大介 VisualBasic → Zipanguで、IsNumericを復帰 //********************************************************************************** using System.Text; @@ -57,8 +58,8 @@ public class StringChecker { #region 数値チェック -#if NETSTD -#else +//#if NETSTD +//#else /// 数字(double)に変換可能か確認する。 /// 入力文字列 /// @@ -82,7 +83,7 @@ public static bool IsNumeric(string input) return double.TryParse(input, out temp); } -#endif +//#endif /// 指定された文字列が、数字のみで構成されているかどうか確認する。 /// 入力文字列 diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringConverter.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringConverter.cs index 4f765301b..273903452 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringConverter.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringConverter.cs @@ -33,22 +33,25 @@ //* 2015/09/30 Sai-san Changed the parameter locale ID to 1041(Japanese) in StrConv method //* 2017/08/11 西野 大介 BaseDam.ClearText ---> StringConverter.FormattingForOneLineLog //* 2018/03/28 西野 大介 .NET Standard対応で、Microsoft.VisualBasicのサポート無し。 +//* 2019/10/28 西野 大介 VisualBasic→Zipanguで、ToZenkaku、Hankaku、Hiragana、Katakanaを復帰 //********************************************************************************** using System.Text; #if NETSTD +using Zipangu; #else using Microsoft.VisualBasic; #endif + namespace Touryo.Infrastructure.Public.Str { /// 文字列の変換処理クラス public class StringConverter { -#if NETSTD -#else +//#if NETSTD +//#else #region 全角 / 半角 変換処理 /// → 全角変換 @@ -56,8 +59,13 @@ public class StringConverter /// (全角化された)出力文字列 public static string ToZenkaku(string input) { +#if NETSTD + // Zipanguを使用する。 + return input.AsciiToWide(); +#else // VB関数を使用する。 return Strings.StrConv(input, VbStrConv.Wide, 1041); +#endif } /// → 半角変換 @@ -65,8 +73,13 @@ public static string ToZenkaku(string input) /// (半角化された)出力文字列 public static string ToHankaku(string input) { +#if NETSTD + // Zipanguを使用する。 + return input.AsciiToNarrow(); +#else // VB関数を使用する。 return Strings.StrConv(input, VbStrConv.Narrow, 1041); +#endif } #endregion @@ -78,8 +91,13 @@ public static string ToHankaku(string input) /// (平仮名化された)出力文字列 public static string ToHiragana(string input) { +#if NETSTD + // Zipanguを使用する。 + return input.KatakanaToHiragana(); +#else // VB関数を使用する。 return Strings.StrConv(input, VbStrConv.Hiragana, 1041); +#endif } /// → 片仮名変換 @@ -87,12 +105,17 @@ public static string ToHiragana(string input) /// (片仮名化された)出力文字列 public static string ToKatakana(string input) { +#if NETSTD + // Zipanguを使用する。 + return input.HiraganaToKatakana(); +#else // VB関数を使用する。 return Strings.StrConv(input, VbStrConv.Katakana, 1041); +#endif } #endregion -#endif + //#endif #region 入力補完 変換処理 diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/ASPNETWebService.csproj b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/ASPNETWebService.csproj index e8b2a3206..92993312f 100644 --- a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/ASPNETWebService.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/ASPNETWebService.csproj @@ -16,6 +16,7 @@ ASPNETWebService v4.6 true + @@ -23,7 +24,7 @@ - + true True diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/Web.config b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/Web.config index 898f5422a..797ebe6bd 100644 --- a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/Web.config +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/Web.config @@ -234,13 +234,13 @@ - - + + diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/app.config b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/app.config index e0f0d0063..afd5b04aa 100644 --- a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/app.config +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/app.config @@ -29,13 +29,13 @@ - + - + diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore.sln b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore.sln new file mode 100644 index 000000000..3075dcd3b --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29209.62 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASPNETWebServiceCore", "ASPNETWebServiceCore\ASPNETWebServiceCore.csproj", "{B325E5F0-EEF5-4E52-A55E-2AA5F46A5697}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B325E5F0-EEF5-4E52-A55E-2AA5F46A5697}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B325E5F0-EEF5-4E52-A55E-2AA5F46A5697}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B325E5F0-EEF5-4E52-A55E-2AA5F46A5697}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B325E5F0-EEF5-4E52-A55E-2AA5F46A5697}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {3DC00DE5-BB95-47DA-8FBE-BBEEF24C887D} + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/ASPNETWebServiceCore.csproj b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/ASPNETWebServiceCore.csproj new file mode 100644 index 000000000..ce20b218b --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/ASPNETWebServiceCore.csproj @@ -0,0 +1,45 @@ + + + + netcoreapp3.0 + + + + + + + + + + + + + ..\..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.dll + + + ..\..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.DamManagedOdp.dll + + + ..\..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.DamMySQL.dll + + + ..\..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.DamPstGrS.dll + + + ..\..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.dll + + + ..\..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.dll + + + ..\..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.Security.dll + + + ..\..\..\..\..\Samples4NetCore\Legacy\WS_sample\Build\netcoreapp3.0\WSIFType_sample.dll + + + ..\..\..\..\..\Samples4NetCore\Legacy\WS_sample\Build\netcoreapp3.0\WSServer_sample.dll + + + + diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Controllers/FxController.cs b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Controllers/FxController.cs new file mode 100644 index 000000000..4b71d23c4 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Controllers/FxController.cs @@ -0,0 +1,369 @@ +//********************************************************************************** +//* Copyright (C) 2007,2016 Hitachi Solutions,Ltd. +//********************************************************************************** + +#region Apache License +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#endregion + +//********************************************************************************** +//* クラス名 :FxController +//* クラス日本語名 :ASP.NET WebAPI JSON-RPCの.NETオブジェクトの +//* バイナリ転送用メソッドを公開するサービス インターフェイス基盤 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 2017/08/18 西野 大介 新規作成 +//* 2019/11/18 西野 大介 .NET Core化 +//********************************************************************************** + +using System; +//using System.Data; +using System.Collections.Generic; +using System.Threading.Tasks; +using System.Diagnostics; +using System.Runtime.ExceptionServices; + +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Cors; + +using Newtonsoft.Json.Linq; + +using Touryo.Infrastructure.Business.Presentation; +using Touryo.Infrastructure.Framework.Transmission; +using Touryo.Infrastructure.Framework.Authentication; +using Touryo.Infrastructure.Framework.Exceptions; +using Touryo.Infrastructure.Framework.Common; +using Touryo.Infrastructure.Framework.Util; + +using Touryo.Infrastructure.Public.Db; +using Touryo.Infrastructure.Public.IO; +using Touryo.Infrastructure.Public.Log; +using Touryo.Infrastructure.Public.Str; +using Touryo.Infrastructure.Public.Util; +using Touryo.Infrastructure.Public.Reflection; + +namespace ASPNETWebService.Controllers +{ + /// + /// ASP.NET WebAPI JSON-RPCの.NETオブジェクトの + /// バイナリ転送用メソッドを公開するサービス インターフェイス基盤 + /// + [EnableCors] + //[ApiController] + public class FxController : ControllerBase + { + #region 疎通テスト用 + + /// + /// 疎通テスト用 + /// http(s)://hostName:portNum/testで疎通テスト可能。 + /// + /// Dictionary(string, string) + [HttpGet] + [Route("test")] + public Dictionary test() + { + Dictionary dic = new Dictionary(); + dic.Add("AAA", "aaa"); + dic.Add("BBB", "bbb"); + dic.Add("CCC", "ccc"); + + return dic; + } + + #endregion + + #region グローバル変数 + + /// インプロセス呼び出しの名前解決シングルトン クラス + /// + /// 初期化は起動時の1回のみであり、 + /// 読み取り専用のデータを保持する場合 + /// のみに適用するデザインパターンとする。 + /// + private static InProcessNameService IPR_NS = new InProcessNameService(); + + #endregion + + #region ASP.NET WebAPI JSON-RPCの.NETオブジェクトのバイナリ転送用メソッド + + /// + /// ASP.NET WebAPI JSON-RPCの.NETオブジェクトのバイナリ転送用メソッド + /// + /// + /// 引数:Dictionary(string, string) + /// ・ServiceName + /// ・ContextObject + /// ・ParameterValueObject + /// + /// + /// 戻り値:Dictionary(string, string) + /// ・Return + /// ・ContextObject + /// ・ReturnValueObject + /// + [HttpPost] + //[Route("WebAPIControllerForFx")] → Startup.cs へ + public async Task> DotNETOnlineWebAPI([FromBody] Dictionary paramDic) + { + // 引数 + string serviceName = paramDic["ServiceName"]; + byte[] contextObject = CustomEncode.FromBase64String(paramDic["ContextObject"]); + byte[] parameterValueObject = CustomEncode.FromBase64String(paramDic["ParameterValueObject"]); + + // 戻り値 + byte[] ret = null; + byte[] returnValueObject = null; + Dictionary returnDic = new Dictionary(); + + // ステータス + string status = "-"; + + // 初期化のため + returnValueObject = null; + + #region 呼出し制御関係の変数 + + // アセンブリ名 + string assemblyName = ""; + + // クラス名 + string className = ""; + + #endregion + + #region 引数・戻り値関係の変数 + + // コンテキスト情報 + object context; // 2009/09/29-この行 + + // 引数・戻り値の.NETオブジェクト + BaseParameterValue parameterValue = null; + BaseReturnValue returnValue = null; + + // エラー情報(クライアント側で復元するため) + WSErrorInfo wsErrorInfo = new WSErrorInfo(); + + // エラー情報(ログ出力用) + string errorType = ""; // 2009/09/15-この行 + string errorMessageID = ""; + string errorMessage = ""; + string errorToString = ""; + + #endregion + + try + { + // 開始ログの出力 + LogIF.InfoLog("SERVICE-IF", FxLiteral.SIF_STATUS_START); + + #region 名前解決 + + // ★ + status = FxLiteral.SIF_STATUS_NAME_SERVICE; + + // 名前解決(インプロセス) + FxController.IPR_NS.NameResolution(serviceName, out assemblyName, out className); + + #endregion + + #region 引数のデシリアライズ + + // ★ + status = FxLiteral.SIF_STATUS_DESERIALIZE; + + // コンテキストクラスの.NETオブジェクト化 + context = BinarySerialize.BytesToObject(contextObject); // 2009/09/29-この行 + // ※ コンテキストの利用方法は任意だが、サービスインターフェイス上での利用に止める。 + + // 引数クラスの.NETオブジェクト化 + parameterValue = (BaseParameterValue)BinarySerialize.BytesToObject(parameterValueObject); + + // 引数クラスをパラメタ セットに格納 + object[] paramSet = new object[] { parameterValue, DbEnum.IsolationLevelEnum.User }; + + #endregion + + #region 認証処理のUOC + + // ★ + status = FxLiteral.SIF_STATUS_AUTHENTICATION; + + if (context is string) + { + // System.Stringの場合 + string access_token = (string)context; + if (!string.IsNullOrEmpty(access_token)) + { + string sub = ""; + List roles = null; + List scopes = null; + JObject jobj = null; + + if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) + { + // 認証成功 + Debug.WriteLine("認証成功"); + } + else + { + // 認証失敗(認証必須ならエラーにする。 + } + } + else + { + // 認証失敗(認証必須ならエラーにする。 + } + } + else + { + // MyUserInfoの場合 + } + + //contextObject = BinarySerialize.ObjectToBytes(hogehoge); // 更新可能だが...。 + + #endregion + + #region B層・D層呼出し + + // ★ + status = FxLiteral.SIF_STATUS_INVOKE; + + // #17-start + try + { + // B層・D層呼出し + Task result = (Task)Latebind.InvokeMethod( + assemblyName, className, + FxLiteral.TRANSMISSION_INPROCESS_ASYNC_METHOD_NAME, paramSet); + returnValue = await result; + } + catch (System.Reflection.TargetInvocationException rtEx) + { + //// InnerExceptionを投げなおす。 + //throw rtEx.InnerException; + + // スタックトレースを保って InnerException を throw + ExceptionDispatchInfo.Capture(rtEx.InnerException).Throw(); + } + // #17-end + + #endregion + + #region 戻り値のシリアライズ + + // ★ + status = FxLiteral.SIF_STATUS_SERIALIZE; + + returnValueObject = BinarySerialize.ObjectToBytes(returnValue); + + #endregion + + // ★ + status = ""; + + // 戻り値を返す。 + ret = BinarySerialize.ObjectToBytes(""); + } + catch (BusinessSystemException bsEx) + { + // システム例外 + + // エラー情報を設定する。 + wsErrorInfo.ErrorType = FxEnum.ErrorType.BusinessSystemException; + wsErrorInfo.ErrorMessageID = bsEx.messageID; + wsErrorInfo.ErrorMessage = bsEx.Message; + + // ログ出力用の情報を保存 + errorType = FxEnum.ErrorType.BusinessSystemException.ToString(); // 2009/09/15-この行 + errorMessageID = bsEx.messageID; + errorMessage = bsEx.Message; + + errorToString = bsEx.ToString(); + + // エラー情報を戻す。 + ret = BinarySerialize.ObjectToBytes(wsErrorInfo); + } + catch (FrameworkException fxEx) + { + // フレームワーク例外 + // ★ インナーエクセプション情報は消失 + + // エラー情報を設定する。 + wsErrorInfo.ErrorType = FxEnum.ErrorType.FrameworkException; + wsErrorInfo.ErrorMessageID = fxEx.messageID; + wsErrorInfo.ErrorMessage = fxEx.Message; + + // ログ出力用の情報を保存 + errorType = FxEnum.ErrorType.FrameworkException.ToString(); // 2009/09/15-この行 + errorMessageID = fxEx.messageID; + errorMessage = fxEx.Message; + + errorToString = fxEx.ToString(); + + // エラー情報を戻す。 + ret = BinarySerialize.ObjectToBytes(wsErrorInfo); + } + catch (Exception ex) + { + // ログ出力用の情報を保存 + errorType = FxEnum.ErrorType.ElseException.ToString(); // 2009/09/15-この行 + errorMessageID = "-"; + errorMessage = ex.Message; + + errorToString = ex.ToString(); + + throw; // SoapExceptionになって伝播 + } + finally + { + //// Sessionステートレス + //Session.Clear(); + //Session.Abandon(); + + // 終了ロクの出力 + if (status == "") + { + // 終了ログ出力 + LogIF.InfoLog("SERVICE-IF", "正常終了"); + } + else + { + // 終了ログ出力 + LogIF.ErrorLog("SERVICE-IF", + "異常終了" + + ":" + status + "\r\n" + + "エラー タイプ:" + errorType + "\r\n" // 2009/09/15-この行 + + "エラー メッセージID:" + errorMessageID + "\r\n" + + "エラー メッセージ:" + errorMessage + "\r\n" + + errorToString); + } + } + + returnDic.Add("Return", CustomEncode.ToBase64String(ret)); + returnDic.Add("ContextObject", CustomEncode.ToBase64String(contextObject)); + returnDic.Add("ReturnValueObject", CustomEncode.ToBase64String(returnValueObject)); + + return returnDic; + } + + #endregion + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Controllers/ValuesController.cs b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Controllers/ValuesController.cs new file mode 100644 index 000000000..35278ba54 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Controllers/ValuesController.cs @@ -0,0 +1,44 @@ +//********************************************************************************** +//* テスト・コントローラー +//********************************************************************************** + +// テスト・コントローラーなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :ValuesController +//* クラス日本語名 :疎通確認用 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 2018/09/07 西野 大介 新規作成 +//********************************************************************************** + +using System.Collections.Generic; + +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Cors; + +namespace ASPNETWebServiceCore.Controllers +{ + [EnableCors] + [ApiController] + [Route("api/[controller]/[action]")] + public class ValuesController : ControllerBase + { + /// + /// GET api/values/get + /// + /// + /// IEnumerable(string) + /// + [HttpGet] + public IEnumerable get() + { + return new string[] { "value1", "value2" }; + } + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Program.cs b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Program.cs new file mode 100644 index 000000000..d4e142b62 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Program.cs @@ -0,0 +1,55 @@ +//********************************************************************************** +//* テンプレート +//********************************************************************************** + +// サンプル中のテンプレートなので、必要に応じて使用して下さい。 + +//********************************************************************************** +//* クラス名 :Program +//* クラス日本語名 :Program +//* +//* 作成日時 :- +//* 作成者 :- +//* 更新履歴 :- +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Net.Http; + +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; + +using Touryo.Infrastructure.Framework.Authentication; + +namespace ASPNETWebServiceCore +{ + /// Program + public class Program + { + /// + /// Main(エントリポイント) + /// コマンドライン引数 + public static void Main(string[] args) + { + // JwkSet取得用 + OAuth2AndOIDCClient.HttpClient = new HttpClient(); + + // BuildWebHostが返すIWebHostをRunする。 + // 呼び出し元スレッドは終了までブロックされる。 + Program.CreateHostBuilder(args).Build().Run(); + } + + /// CreateHostBuilder + /// コマンドライン引数 + /// IWebHost + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Properties/launchSettings.json b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Properties/launchSettings.json new file mode 100644 index 000000000..03012eaef --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:8888/", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "ASPNETWebService": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "http://localhost:8888/" + } + } +} \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Startup.cs b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Startup.cs new file mode 100644 index 000000000..df06c2849 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Startup.cs @@ -0,0 +1,159 @@ +//********************************************************************************** +//* テンプレート +//********************************************************************************** + +// サンプル中のテンプレートなので、必要に応じて使用して下さい。 + +//********************************************************************************** +//* クラス名 :Startup +//* クラス日本語名 :Startup +//* +//* 作成日時 :- +//* 作成者 :- +//* 更新履歴 :- +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.HttpsPolicy; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; + +// using Microsoft.AspNetCore.Mvc.Cors.Internal; + +using Touryo.Infrastructure.Framework.StdMigration; +using Touryo.Infrastructure.Public.Util; + +namespace ASPNETWebServiceCore +{ + /// + /// Startup + /// ミドルウェア /サービス / フレームワークを + /// Startupクラスのメソッドで注入することにより、活用できるようになる。 + /// + public class Startup + { + #region mem & prop & constructor + + /// Configuration + public IConfiguration Configuration { get; } + + /// constructor + /// IConfiguration + public Startup(IConfiguration configuration) + { + Configuration = configuration; + + // ライブラリにも設定 + GetConfigParameter.InitConfiguration(configuration); + // Dockerで埋め込まれたリソースを使用する場合、 + // 以下のコメントアウトを解除し、appsettings.jsonのappSettings sectionに、 + // "Azure": "既定の名前空間" を指定し、設定ファイルを埋め込まれたリソースに変更する。 + //Touryo.Infrastructure.Business.Dao.MyBaseDao.UseEmbeddedResource = true; + } + + #endregion + + #region Configure & ConfigureServices + + /// + /// This method gets called by the runtime. + /// Use this method to configure the HTTP request pipeline. + /// + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + // The default HSTS value is 30 days. + // You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); + } + + // HttpContextのマイグレーション用 + app._UseHttpContextAccessor(); + + app.UseHttpsRedirection(); + + app.UseRouting(); + + //app.UseAuthentication(); + //app.UseAuthorization(); + + app.UseCors( //認証・認可の後ろ + builder => builder + .AllowAnyOrigin() + .AllowAnyMethod() + .AllowAnyHeader()); + + //.AllowCredentials()); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute( + name: "DotNETOnlineWebAPI", + pattern: "WebAPIControllerForFx", + defaults: new { controller = "Fx", action = "DotNETOnlineWebAPI" }); + + endpoints.MapControllerRoute( + name: "hoge", + pattern: "hogehoge", + defaults: new { controller = "Fx", action = "hoge" }); + + endpoints.MapControllerRoute( + name: "default", + pattern: "{controller=Home}/{action=Index}/{id?}"); + }); + } + + /// + /// This method gets called by the runtime. + /// Use this method to add services to the container. + /// + /// IServiceCollection + public void ConfigureServices(IServiceCollection services) + { + // 構成情報から、AppConfiguration SectionをAppConfiguration Classへバインドするようなケース。 + //services.Configure(Configuration.GetSection("AppConfiguration")); + + // HttpContextのマイグレーション用 + services._AddHttpContextAccessor(); + + // Core 3.0のテンプレートではUseMvcの + // 代わりにこれらを使用するようになった。 + services + .AddControllers()// WebAPI + .AddNewtonsoftJson();// JSON シリアライザの変更 + + //services.AddControllersWithViews(); // MVC & WebAPI + // services.AddRazorPages(); // Razor Page + + // AddMvc + services.AddMvc(); + + // AddCors + services.AddCors( + o => o.AddPolicy("AllowAllOrigins", + builder => + { + builder + .AllowAnyOrigin() + .AllowAnyMethod() + .AllowAnyHeader(); + })); + } + + #endregion + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.Development.json b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.Development.json new file mode 100644 index 000000000..fa8ce71a9 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.Development.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "IncludeScopes": false, + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.json b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.json new file mode 100644 index 000000000..c4fddfd02 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.json @@ -0,0 +1,86 @@ +{ + // 簡易ログの設定 + "Logging": { + "IncludeScopes": false, + "Debug": { + "LogLevel": { + "Default": "Warning" + } + }, + "Console": { + "LogLevel": { + "Default": "Warning" + } + } + }, + + // Here is where you can supply custom configuration settings, Since it is is JSON, + // everything is represented as key: value pairs. Name of section is your choice. + "AppConfiguration": { + "XXXX": "xxxx", + "YYYY": "yyyy" + }, + + // 以下は*.configから移行されたsection + + // connectionStrings section + "connectionStrings": { + "ConnectionString_SQL": "Data Source=localhost\\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;", + "ConnectionString_ODBC": "Dsn=odbc_test1", + "ConnectionString_ODP": "User Id=SCOTT;Password=tiger;Data Source=localhost/XE;", + "ConnectionString_MCN": "Server=localhost;Database=test;User Id=root;Password=seigi@123", + "ConnectionString_NPS": "HOST=localhost;DATABASE=postgres;USER ID=postgres;PASSWORD=seigi@123;" + }, + + // appSettings section + "appSettings": { + // Webサービス用 + + // フレームワークの使用するパラメータ - start + + // 共有情報定義へのパス + "FxXMLSPDefinition": "C:\\root\\files\\resource\\XML\\SPDefinition.xml", + // メッセージ定義へのパス + "FxXMLMSGDefinition": "C:\\root\\files\\resource\\XML\\MSGDefinition.xml", + // トランザクション制御定義へのパス + "FxXMLTCDefinition": "C:\\root\\files\\resource\\XML\\TCDefinition.xml", + // 名前解決定義へのパス + "FxXMLTMInProcessDefinition": "C:\\root\\files\\resource\\XML\\TMInProcessDefinition.xml", + + // フレームワークの使用するパラメータ - end + + // 共通部品の使用するパラメータ - start + + // Log4Netのコンフィグファイルへのパス + "FxLog4NetConfFile": "C:\\root\\files\\resource\\Log\\SampleLogConfWebService.xml", + // 共通部品の使用するパラメータ - end + // D層のパフォーマンスログ出力機能のon・off" "-->", + "FxSqlTraceLog": "on", + // D層のSQL文キャッシュ機能のon・off + // 開発フェーズのことを考慮して、デフォルトoffに設定", + "FxSqlCacheSwitch": "off", + // D層のSQLロード時のエンコーディングを指定(shift_jis、utf-8.etc) + "FxSqlEncoding": "utf-8", + // D層のコマンド タイムアウト値を指定(秒) + "FxSqlCommandTimeout": "30", + + // 共通部品の使用するパラメータ - end + + // アプリケーションの使用するパラメータ - start + + // OAuth2, OIDC認証 + "SpRp_Isser": "https://ssoauth.opentouryo.com", + "OAuth2AndOidcClientIDs": [ + "67d328bfe8604aae83fb15fa44780d8b", + "f53469c17c5a432f86ce563b7805ab89", + "b6b393fe861b430eb4ee061006826b03", + "f374a155909d486a9234693c34e94479" + ], + "SpRp_RsaCerFilePath": "C:\\root\\files\\resource\\X509\\SHA256RSA_Server.cer", + + // SQLファイルファイル(フォルダ)へのパス + "SqlTextFilePath": "C:\\root\\files\\resource\\Sql" + + // アプリケーションの使用するパラメータ - end + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/WCFService/App.config b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/WCFService/App.config index a026a2c67..5a573f741 100644 --- a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/WCFService/App.config +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/WCFService/App.config @@ -26,13 +26,13 @@ - + - + diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/Program.cs b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/Program.cs index 29930387b..4ab846724 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/Program.cs +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/Program.cs @@ -57,9 +57,9 @@ public class Program /// ECDsaのX509証明書のパス(*.cer) private static string PublicECDsaX509_384Path = @"SHA384ECDSA.cer"; /// ECDsaのX509証明書のパス(*.pfx) - private static string PrivateECDsaX509_512Path = @"SHA512ECDSA.pfx"; + private static string PrivateECDsaX509_512Path = @"SHA521ECDSA.pfx"; /// ECDsaのX509証明書のパス(*.cer) - private static string PublicECDsaX509_512Path = @"SHA512ECDSA.cer"; + private static string PublicECDsaX509_512Path = @"SHA521ECDSA.cer"; public static void Main(string[] args) { @@ -133,7 +133,7 @@ private static void Hash() MyDebug.OutputDebugAndConsole("HashAlgorithm.SHA512_M", GetHash.GetHashString(data, EnumHashAlgorithm.SHA512_M)); #endregion -#if NETCORE +#if NETCOREAPP #else #region CNG MyDebug.OutputDebugAndConsole("HashAlgorithm.MD5_CNG", GetHash.GetHashString(data, EnumHashAlgorithm.MD5_CNG)); @@ -283,7 +283,7 @@ private static void PublicKeyCryptography() MyDebug.InspectPublicX509Key("RSA", publicX509Key); #endregion -#if NETCORE || NET47 +#if NETCOREAPP || NET47 #region DSA // https://github.com/dotnet/corefx/issues/18733#issuecomment-296723615 @@ -338,11 +338,11 @@ private static void PublicKeyCryptography() DigitalSignXML dsXML = null; // ECDsa -#if NETCORE || NET47 +#if NETCOREAPP || NET47 DigitalSignECDsaX509 dsECDsaX509 = null; DigitalSignECDsaCng dsECDsaCng = null; #endif -#if NETCORE +#if NETCOREAPP DigitalSignECDsaOpenSsl dsECDsaOpenSsl = null; #endif @@ -367,7 +367,7 @@ private static void PublicKeyCryptography() dsXML = new DigitalSignXML(EnumDigitalSignAlgorithm.RsaCSP_SHA256); sign = dsXML.Sign(data); -#if !NETCORE +#if !NETCOREAPP // NETCOREでは、XML鍵のExportが動かない。 dsXML = new DigitalSignXML(dsXML.PublicKey, EnumDigitalSignAlgorithm.RsaCSP_SHA256); #endif @@ -392,7 +392,7 @@ private static void PublicKeyCryptography() dsXML = new DigitalSignXML(EnumDigitalSignAlgorithm.DsaCSP_SHA1); sign = dsXML.SignByFormatter(data); -#if !NETCORE +#if !NETCOREAPP // NETCOREでは、XML鍵のExportが動かない。 dsXML = new DigitalSignXML(dsXML.PublicKey, EnumDigitalSignAlgorithm.DsaCSP_SHA1); #endif @@ -402,7 +402,7 @@ private static void PublicKeyCryptography() #region ECDsa #region 256 -#if NETCORE || NET47 +#if NETCOREAPP || NET47 // X509 dsECDsaX509 = new DigitalSignECDsaX509(Program.PrivateECDsaX509_256Path, Program.PfxPassword, HashAlgorithmName.SHA256); sign = dsECDsaX509.Sign(data); @@ -422,7 +422,7 @@ private static void PublicKeyCryptography() #endregion #region 512 -#if NETCORE || NET47 +#if NETCOREAPP || NET47 // X509 dsECDsaX509 = new DigitalSignECDsaX509(Program.PrivateECDsaX509_256Path, Program.PfxPassword, HashAlgorithmName.SHA512); sign = dsECDsaX509.Sign(data); @@ -444,7 +444,7 @@ private static void PublicKeyCryptography() } else //if (os.Platform == PlatformID.Unix) { -#if NETCORE +#if NETCOREAPP #region RSA // X509 dsX509 = new DigitalSignX509(Program.PrivateRsaX509Path, Program.PfxPassword, "SHA256"); @@ -563,7 +563,7 @@ private static void MyJwt() byte[] key = null; string jwk = ""; RsaPublicKeyConverter rpkc = null; -#if NETCORE || NET47 +#if NETCOREAPP || NET47 EccPublicKeyConverter epkc = null; #endif #endregion @@ -581,7 +581,7 @@ private static void MyJwt() JWS_RS512_X509 jWS_RS512_X509 = null; JWS_RS512_Param jWS_RS512_Param = null; -#if NETCORE || NET47 +#if NETCOREAPP || NET47 // ES256 JWS_ES256_X509 jWS_ES256_X509 = null; JWS_ES256_Param jWS_ES256_Param = null; @@ -654,7 +654,7 @@ private static void MyJwt() jWS_RS256_Param = new JWS_RS256_Param(rpkc.JwkToParam(jwk)); MyDebug.OutputDebugAndConsole("JWS_RS256_Param.Verify", jWS_RS256_Param.Verify(token).ToString()); #endregion -#if NETCORE +#if NETCOREAPP #else #region 384 // 署名(XML) @@ -700,7 +700,7 @@ private static void MyJwt() // DSA -#if NETCORE || NET47 +#if NETCOREAPP || NET47 #region ECDsa(ES) #region 256 @@ -733,7 +733,7 @@ private static void MyJwt() // ★ xLibTest Program.VerifyResultJwt("JwsAlgorithm.xLibTest", token, jWS_ES256_X509.DigitalSignECDsaX509.AsymmetricAlgorithm, JwsAlgorithm.ES256); #endregion -#if NETCORE +#if NETCOREAPP #else #region 384 // 署名(X509) @@ -810,7 +810,7 @@ private static void MyJwt() } else //if (os.Platform == PlatformID.Unix) { -#if NETCORE +#if NETCOREAPP #region RSA(RS256) // 署名(X509) jWS_RS256_X509 = new JWS_RS256_X509(Program.PrivateRsaX509Path, Program.PfxPassword, x509KSF); @@ -951,7 +951,7 @@ private static void JoseJwt() CngKey privateKeyOfCng = null; RsaPublicKeyConverter rpkc = null; -#if NETCORE || NET47 +#if NETCOREAPP || NET47 EccPublicKeyConverter epkc = null; #endif #endregion @@ -990,7 +990,7 @@ private static void JoseJwt() token = ""; -#if NETCORE +#if NETCOREAPP rsa = (RSA)privateX509Key.PrivateKey; #else // .net frameworkでは、何故かコレが必要。 @@ -1021,7 +1021,7 @@ private static void JoseJwt() } else //if (os.Platform == PlatformID.Unix) { -#if NETCORE +#if NETCOREAPP ECParameters eCParameters = new ECParameters(); epkc = new EccPublicKeyConverter(JWS_ECDSA.ES._256); @@ -1044,13 +1044,13 @@ private static void JoseJwt() #endif } -#if NETCORE || NET47 +#if NETCOREAPP || NET47 privateX509Key = new X509Certificate2(Program.PrivateECDsaX509_256Path, Program.PfxPassword); publicX509Key = new X509Certificate2(Program.PublicECDsaX509_256Path, ""); try { -#if NETCORE +#if NETCOREAPP if (os.Platform == PlatformID.Win32NT) { } @@ -1187,7 +1187,7 @@ private static void JoseJwt() privateX509Key = new X509Certificate2(Program.PrivateRsaX509Path, Program.PfxPassword, x509KSF); publicX509Key = new X509Certificate2(Program.PublicRsaX509Path, "", x509KSF); -#if NETCORE +#if NETCOREAPP rsa = (RSA)privateX509Key.PrivateKey; #else // .net frameworkでは、何故かコレが必要。 diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/copy_cert.bat b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/copy_cert.bat index 253c366f6..6f5638a63 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/copy_cert.bat +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/copy_cert.bat @@ -8,5 +8,5 @@ copy "C:\root\files\resource\X509\SHA256ECDSA.cer" SHA256ECDSA.cer copy "C:\root\files\resource\X509\SHA256ECDSA.pfx" SHA256ECDSA.pfx copy "C:\root\files\resource\X509\SHA384ECDSA.cer" SHA384ECDSA.cer copy "C:\root\files\resource\X509\SHA384ECDSA.pfx" SHA384ECDSA.pfx -copy "C:\root\files\resource\X509\SHA512ECDSA.cer" SHA512ECDSA.cer -copy "C:\root\files\resource\X509\SHA512ECDSA.pfx" SHA512ECDSA.pfx +copy "C:\root\files\resource\X509\SHA521ECDSA.cer" SHA521ECDSA.cer +copy "C:\root\files\resource\X509\SHA521ECDSA.pfx" SHA521ECDSA.pfx diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core20/EncAndDecUtilCUICore.csproj b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core20/EncAndDecUtilCUICore.csproj index 3f4fd8875..a1652b905 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core20/EncAndDecUtilCUICore.csproj +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core20/EncAndDecUtilCUICore.csproj @@ -7,7 +7,7 @@ - TRACE;NETCORE + TRACE;NETCOREAPP @@ -49,10 +49,10 @@ Always - + Always - + Always @@ -86,10 +86,10 @@ Always - + Always - + Always diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core30/EncAndDecUtilCUICore.csproj b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core30/EncAndDecUtilCUICore.csproj index 26bba1f38..f26d9824e 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core30/EncAndDecUtilCUICore.csproj +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core30/EncAndDecUtilCUICore.csproj @@ -7,7 +7,7 @@ - TRACE;NETCORE + TRACE;NETCOREAPP @@ -49,10 +49,10 @@ Always - + Always - + Always @@ -86,10 +86,10 @@ Always - + Always - + Always diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net45/EncAndDecUtilCUIFx.csproj b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net45/EncAndDecUtilCUIFx.csproj index d778288fb..f217f3442 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net45/EncAndDecUtilCUIFx.csproj +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net45/EncAndDecUtilCUIFx.csproj @@ -94,12 +94,12 @@ SHA384ECDSA.pfx Always - - SHA512ECDSA.cer + + SHA521ECDSA.cer Always - - SHA512ECDSA.pfx + + SHA521ECDSA.pfx Always diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net46/EncAndDecUtilCUIFx.csproj b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net46/EncAndDecUtilCUIFx.csproj index e60dd9e77..41f70acb6 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net46/EncAndDecUtilCUIFx.csproj +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net46/EncAndDecUtilCUIFx.csproj @@ -94,12 +94,12 @@ SHA384ECDSA.pfx Always - - SHA512ECDSA.cer + + SHA521ECDSA.cer Always - - SHA512ECDSA.pfx + + SHA521ECDSA.pfx Always diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net47/EncAndDecUtilCUIFx.csproj b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net47/EncAndDecUtilCUIFx.csproj index 8bc828dda..bc5fecdba 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net47/EncAndDecUtilCUIFx.csproj +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net47/EncAndDecUtilCUIFx.csproj @@ -94,12 +94,12 @@ SHA384ECDSA.pfx Always - - SHA512ECDSA.cer + + SHA521ECDSA.cer Always - - SHA512ECDSA.pfx + + SHA521ECDSA.pfx Always diff --git a/root/programs/CS/Frameworks/Tests/TestCode/core20/TestCodeCore.csproj b/root/programs/CS/Frameworks/Tests/TestCode/core20/TestCodeCore.csproj index 120cdcb09..b8b86d79d 100644 --- a/root/programs/CS/Frameworks/Tests/TestCode/core20/TestCodeCore.csproj +++ b/root/programs/CS/Frameworks/Tests/TestCode/core20/TestCodeCore.csproj @@ -7,7 +7,7 @@ - TRACE;NETCORE + TRACE;NETCOREAPP diff --git a/root/programs/CS/Frameworks/Tests/TestCode/core30/TestCodeCore.csproj b/root/programs/CS/Frameworks/Tests/TestCode/core30/TestCodeCore.csproj index 0b7e13a89..08cd91ec3 100644 --- a/root/programs/CS/Frameworks/Tests/TestCode/core30/TestCodeCore.csproj +++ b/root/programs/CS/Frameworks/Tests/TestCode/core30/TestCodeCore.csproj @@ -7,7 +7,7 @@ - TRACE;NETCORE + TRACE;NETCOREAPP diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.csproj b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.csproj new file mode 100644 index 000000000..69a669a38 --- /dev/null +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.csproj @@ -0,0 +1,77 @@ + + + + WinExe + netcoreapp3.0 + true + + + DPQuery_Tool + OpenTouryo.DPQuery_Tool + + + + TRACE;NETCOREAPP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.DamManagedOdp.dll + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.DamMySQL.dll + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.DamPstGrS.dll + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.Public.dll + + + + + + True + True + Resource.resx + + + + + + ResXFileCodeGenerator + Resource.Designer.cs + + + + + + Always + + + + \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.sln b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.sln new file mode 100644 index 000000000..8190fe20f --- /dev/null +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DPQuery_Tool", "DPQuery_ToolCore.csproj", "{1A31B69C-1DA9-4F0F-AC19-E52929285EB3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1A31B69C-1DA9-4F0F-AC19-E52929285EB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1A31B69C-1DA9-4F0F-AC19-E52929285EB3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1A31B69C-1DA9-4F0F-AC19-E52929285EB3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1A31B69C-1DA9-4F0F-AC19-E52929285EB3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form1.cs b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form1.cs index 856b1c7ed..9883e499d 100644 --- a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form1.cs +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form1.cs @@ -58,6 +58,7 @@ //* 2014/05/12 Rituparna Removed and tags. //* 2015/07/19 Sandeep Improved UI of tools and button controls. //* 2015/10/28 Sandeep Optimized messages in the resource file and implemented code to format it. +//* 2018/10/29 西野 大介 NETCOREAPP対応で、サポートされないDBを「#if」した。 //********************************************************************************** // -------------------- @@ -67,12 +68,15 @@ //using System.Data.OracleClient; // 衝突するのでエイリアスを作成 //using Oracle.DataAccess.Client; // Managedに移行 //using Oracle.ManagedDataAccess.Client; // 衝突するのでエイリアスを作成 -using System.Data.OleDb; using System.Data.Odbc; using Npgsql; using MySql.Data.MySqlClient; +#if NETCOREAPP +#else +using System.Data.OleDb; using IBM.Data.DB2; //using Hitachi.HiRDB; +#endif // -------------------- using System; @@ -183,14 +187,17 @@ public Form1() // 初期設定(DataProvider) this.cmbDataProvider.Items.Add(Literal.DAP_SQL); - this.cmbDataProvider.Items.Add(Literal.DAP_OLE); this.cmbDataProvider.Items.Add(Literal.DAP_ODB); this.cmbDataProvider.Items.Add(Literal.DAP_ORA); this.cmbDataProvider.Items.Add(Literal.DAP_ODP); - this.cmbDataProvider.Items.Add(Literal.DAP_DB2); - //this.cmbDataProvider.Items.Add(Literal.DAP_HiRDB); this.cmbDataProvider.Items.Add(Literal.DAP_MySQL); this.cmbDataProvider.Items.Add(Literal.DAP_PstgrS); +#if NETCOREAPP +#else + this.cmbDataProvider.Items.Add(Literal.DAP_OLE); + this.cmbDataProvider.Items.Add(Literal.DAP_DB2); + //this.cmbDataProvider.Items.Add(Literal.DAP_HiRDB); +#endif this.cmbDataProvider.SelectedIndex = 0; // 初期設定(スロット) @@ -420,10 +427,6 @@ private void btnLoadConfig_Click(object sender, EventArgs e) { this.cmbDataProvider.SelectedIndex = 0; } - else if (str.Substring(len) == Literal.DAP_OLE) - { - this.cmbDataProvider.SelectedIndex = 1; - } else if (str.Substring(len) == Literal.DAP_ODB) { this.cmbDataProvider.SelectedIndex = 2; @@ -436,14 +439,6 @@ private void btnLoadConfig_Click(object sender, EventArgs e) { this.cmbDataProvider.SelectedIndex = 4; } - else if (str.Substring(len) == Literal.DAP_DB2) - { - this.cmbDataProvider.SelectedIndex = 5; - } - //else if (str.Substring(len) == Literal.DAP_HiRDB) - //{ - // this.cmbDataProvider.SelectedIndex = x; - //} else if (str.Substring(len) == Literal.DAP_MySQL) { this.cmbDataProvider.SelectedIndex = 6; @@ -452,6 +447,21 @@ private void btnLoadConfig_Click(object sender, EventArgs e) { this.cmbDataProvider.SelectedIndex = 7; } +#if NETCOREAPP +#else + else if (str.Substring(len) == Literal.DAP_OLE) + { + this.cmbDataProvider.SelectedIndex = 1; + } + else if (str.Substring(len) == Literal.DAP_DB2) + { + this.cmbDataProvider.SelectedIndex = 5; + } + //else if (str.Substring(len) == Literal.DAP_HiRDB) + //{ + // this.cmbDataProvider.SelectedIndex = x; + //} +#endif else { // ありえない @@ -589,27 +599,6 @@ private void cmbDataProvider_SelectedIndexChanged(object sender, EventArgs e) // 状態 ((ToolStripStatusLabel)this.statBar.Items[0]).Text = string.Format(this.RM_GetString("STATUS_DATA_PROVIDER_SELECTED"), Literal.DAP_SQL); - } - else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_OLE) - { - //OLEDB.NET - this._dam = new DamOLEDB(); - - //接続文字列のサンプルを設定する(空の場合)。 - OleDbConnectionStringBuilder csb = new OleDbConnectionStringBuilder(); - - csb.Provider = "Provider"; - csb.DataSource = "DataSourceName"; - csb.FileName = "FileName"; - - this.txtCnnStr.Text = csb.ConnectionString; - - // 活性 - this.nudNumOfBind.Enabled = true; - - // 状態 - ((ToolStripStatusLabel)this.statBar.Items[0]).Text = string.Format(this.RM_GetString("STATUS_DATA_PROVIDER_SELECTED"), Literal.DAP_OLE); - } else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_ODB) { @@ -673,45 +662,6 @@ private void cmbDataProvider_SelectedIndexChanged(object sender, EventArgs e) ((ToolStripStatusLabel)this.statBar.Items[0]).Text = string.Format(this.RM_GetString("STATUS_DATA_PROVIDER_SELECTED"), Literal.DAP_ODP); } - else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_DB2) - { - //DB2.NET - this._dam = new DamDB2(); - - //接続文字列のサンプルを設定する(空の場合)。 - DB2ConnectionStringBuilder csb = new DB2ConnectionStringBuilder(); - - //csb.Server = this._ip + ":50000"; - csb.Database = "SAMPLE"; - csb.UserID = this._uid; - csb.Password = this._pwd; - - this.txtCnnStr.Text = csb.ConnectionString; - - // 状態 - ((ToolStripStatusLabel)this.statBar.Items[0]).Text = string.Format(this.RM_GetString("STATUS_DATA_PROVIDER_SELECTED"), Literal.DAP_DB2); - - } - //else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_HiRDB) - //{ - // //HiRDBデータ プロバイダ - // this._dam = new DamHiRDB(); - - // //接続文字列のサンプルを設定する(空の場合)。 - // //HiRDBデータ プロバイダは、ConnectionStringBuilderがない。 - // string csb = ""; - // csb += "DataSource=C:\\Windows\\HiRDB.ini;"; - // csb += "UID=" + this._uid + ";"; - // csb += "PWD=" + this._pwd + ";"; - - // this.txtCnnStr.Text = csb; - - // // 活性 - // this.nudNumOfBind.Enabled = true; - - // // 状態 - // ((ToolStripStatusLabel)this.statBar.Items[0]).Text = Literal.STATUS_HRD_CREATED; - //} else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_MySQL) { //MySQL Connector/NET @@ -756,6 +706,69 @@ private void cmbDataProvider_SelectedIndexChanged(object sender, EventArgs e) // 状態 ((ToolStripStatusLabel)this.statBar.Items[0]).Text = string.Format(this.RM_GetString("STATUS_DATA_PROVIDER_SELECTED"), Literal.DAP_PstgrS); } +#if NETCOREAPP +#else + else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_OLE) + { + //OLEDB.NET + this._dam = new DamOLEDB(); + + //接続文字列のサンプルを設定する(空の場合)。 + OleDbConnectionStringBuilder csb = new OleDbConnectionStringBuilder(); + + csb.Provider = "Provider"; + csb.DataSource = "DataSourceName"; + csb.FileName = "FileName"; + + this.txtCnnStr.Text = csb.ConnectionString; + + // 活性 + this.nudNumOfBind.Enabled = true; + + // 状態 + ((ToolStripStatusLabel)this.statBar.Items[0]).Text = string.Format(this.RM_GetString("STATUS_DATA_PROVIDER_SELECTED"), Literal.DAP_OLE); + + } + else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_DB2) + { + //DB2.NET + this._dam = new DamDB2(); + + //接続文字列のサンプルを設定する(空の場合)。 + DB2ConnectionStringBuilder csb = new DB2ConnectionStringBuilder(); + + //csb.Server = this._ip + ":50000"; + csb.Database = "SAMPLE"; + csb.UserID = this._uid; + csb.Password = this._pwd; + + this.txtCnnStr.Text = csb.ConnectionString; + + // 状態 + ((ToolStripStatusLabel)this.statBar.Items[0]).Text = string.Format(this.RM_GetString("STATUS_DATA_PROVIDER_SELECTED"), Literal.DAP_DB2); + + } + //else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_HiRDB) + //{ + // //HiRDBデータ プロバイダ + // this._dam = new DamHiRDB(); + + // //接続文字列のサンプルを設定する(空の場合)。 + // //HiRDBデータ プロバイダは、ConnectionStringBuilderがない。 + // string csb = ""; + // csb += "DataSource=C:\\Windows\\HiRDB.ini;"; + // csb += "UID=" + this._uid + ";"; + // csb += "PWD=" + this._pwd + ";"; + + // this.txtCnnStr.Text = csb; + + // // 活性 + // this.nudNumOfBind.Enabled = true; + + // // 状態 + // ((ToolStripStatusLabel)this.statBar.Items[0]).Text = Literal.STATUS_HRD_CREATED; + //} +#endif else { //ありえない @@ -1366,11 +1379,6 @@ private void btnExecQuery_Click(object sender, EventArgs e) // sqlClientの型情報を推論 this.InferSQLType(dr[2].GetType(), out dbTypeInfo); } - else if (this._dam.GetType() == typeof(DamOLEDB)) - { - // OLEDBの型情報を推論 - this.InferOLEType(dr[2].GetType(), out dbTypeInfo); - } else if (this._dam.GetType() == typeof(DamODBC)) { // ODBCの型情報を推論 @@ -1381,12 +1389,18 @@ private void btnExecQuery_Click(object sender, EventArgs e) // Oracle Clientの型情報を推論 this.InferORAType(dr[2].GetType(), out dbTypeInfo); } - else if (this._dam.GetType() == typeof(DamManagedOdp)) { // ODP.NETの型情報を推論 this.InferODPType(dr[2].GetType(), out dbTypeInfo); } +#if NETCOREAPP +#else + else if (this._dam.GetType() == typeof(DamOLEDB)) + { + // OLEDBの型情報を推論 + this.InferOLEType(dr[2].GetType(), out dbTypeInfo); + } else if (this._dam.GetType() == typeof(DamDB2)) { // DB2.NETの型情報を推論 @@ -1394,6 +1408,7 @@ private void btnExecQuery_Click(object sender, EventArgs e) } // HiRDBデータプロバイダ、MySQL Connector/NET、PostgreSQL Npgsql // については、推論不明(マニュアル無し)。推論非対応。 +#endif // パラメタを設定(型情報・有) ((BaseDam)this._dam).SetParameter(dr[1].ToString(), dr[2], dbTypeInfo); @@ -1856,6 +1871,8 @@ private bool InferSQLType(Type type, out object sqlDbType) #endregion +#if NETCOREAPP +#else #region OLEDB /// @@ -1975,6 +1992,7 @@ private bool InferOLEType(Type type, out object oleDbType) } #endregion +#endif #region ODBC @@ -2303,6 +2321,8 @@ private bool InferODPType(Type type, out object oracleDbType) #endregion +#if NETCOREAPP +#else #region DB2.NET /// @@ -2373,6 +2393,7 @@ private bool InferDB2Type(Type type, out object db2DbType) } #endregion +#endif // HiRDBデータ プロバイダは情報が見当たらず diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form3.resx b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form3.resx index 0972bf986..236c41f1e 100644 --- a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form3.resx +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form3.resx @@ -225,18 +225,6 @@ 0 - - cmbSTEncoding - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxSqlTemplateEncoding - - - 0 - 280, 213 @@ -261,30 +249,6 @@ 0 - - rbnDTL_VB - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDaoTemplateLanguage - - - 0 - - - rbnDTL_CS - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDaoTemplateLanguage - - - 1 - 21, 155 @@ -309,18 +273,6 @@ 1 - - cmbDTEncoding - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDaoTemplateEncoding - - - 0 - 21, 213 @@ -375,18 +327,6 @@ 3 - - cmbDDEncoding - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDaoDefinitionEncoding - - - 0 - 21, 55 @@ -591,42 +531,6 @@ 0 - - gbxSQLFileEncoding - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxOutput - - - 2 - - - gbxDaoFileEncoding - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxOutput - - - 3 - - - txtSetOutput - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxOutput - - - 4 - 5, 286 @@ -681,42 +585,6 @@ 0 - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage2 - - - 0 - - - gbxDataProviders - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage2 - - - 1 - - - groupBox2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage2 - - - 2 - 4, 22 @@ -972,78 +840,6 @@ 4 - - cbxTSIndisp - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 0 - - - label4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 1 - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 2 - - - txtTimeStampColName - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 3 - - - txtTimeStampUpdMethod - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 4 - - - label6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 5 - 6, 175 @@ -1233,78 +1029,6 @@ 5 - - rbnODB - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDataProviders - - - 0 - - - rbnOLE - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDataProviders - - - 1 - - - rbnPstgrs - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDataProviders - - - 2 - - - rbnMySQL - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDataProviders - - - 3 - - - rbnDB2 - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDataProviders - - - 4 - - - rbnODP - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDataProviders - - - 5 - rbnSQL @@ -1539,66 +1263,6 @@ SQL Server Client - - rbnSQL - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDataProviders - - - 6 - - - txtPersonalName - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 - - - lblFamilyName - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - txtFamilyName - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 2 - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 3 - 6, 83 diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Literal.cs b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Literal.cs index fb5037e40..3da7059fc 100644 --- a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Literal.cs +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Literal.cs @@ -35,6 +35,7 @@ //* 2012/02/09 西野 大介 OLEDB、ODBCのデータプロバイダ対応 //* 2014/02/05 西野 大介 System.Data.OracleClientデータプロバイダ対応 //* 2017/11/29 西野 大介 Resource化したメッセージを削除 +//* 2018/10/29 西野 大介 NETCOREAPP対応で、サポートされないDBを「#if」した。 //********************************************************************************** namespace DPQuery_Tool @@ -75,9 +76,6 @@ public readonly static string[] SLOT /// 選択:SQL Server用 sqlClient public const string DAP_SQL = "SQL Server - sqlClient"; - /// 選択:OLEDB.NET - public const string DAP_OLE = "OLEDB.NET"; - /// 選択:ODBC.NET public const string DAP_ODB = "ODBC.NET"; @@ -87,18 +85,24 @@ public readonly static string[] SLOT /// 選択:Oracle用 ODP.NET public const string DAP_ODP = "Oracle - ODP.NET"; - /// 選択:DB2用 DB2.NET - public const string DAP_DB2 = "DB2 - DB2.NET"; - - ///// 選択:HiRDB用 データ プロバイダ - //public const string DAP_HiRDB = "HiRDB - HiRDBデータ プロバイダ"; - /// 選択:MySQL用 MySQL Connector/NET public const string DAP_MySQL = "MySQL - Connector/NET"; /// 選択:PostgreSQL用 Npgsql public const string DAP_PstgrS = "PostgreSQL - Npgsql"; +#if NETCOREAPP +#else + /// 選択:OLEDB.NET + public const string DAP_OLE = "OLEDB.NET"; + + /// 選択:DB2用 DB2.NET + public const string DAP_DB2 = "DB2 - DB2.NET"; + + ///// 選択:HiRDB用 データ プロバイダ + //public const string DAP_HiRDB = "HiRDB - HiRDBデータ プロバイダ"; +#endif + #endregion #region 実行メソッド diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Program.cs b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Program.cs index f63934542..95a1b19dd 100644 --- a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Program.cs +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Program.cs @@ -32,6 +32,7 @@ //* Created Resource folder and Resource.ja-JP.resx,Resource.resx files inside the Resource folder. //* Added proper key and values in those files for English and Japanese languages. //* 2014/05/12 Rituparna Removed and tags, added check while reading DefaultCulture from app.config file +//* 2018/10/29 西野 大介 NETCOREAPP対応で、configの初期化 //********************************************************************************** using System; @@ -53,6 +54,11 @@ static class Program [STAThread] static void Main() { +#if NETCOREAPP + // configの初期化 + GetConfigParameter.InitConfiguration("appsettings.json"); +#else +#endif try { // Add DefaultCulture key in app.Config file and take the culture value from app.Config file. diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/app.config b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/app.config index 7b63975fd..0424b27c2 100644 --- a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/app.config +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/app.config @@ -71,7 +71,7 @@ - + @@ -125,6 +125,8 @@ + + diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/appsettings.json b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/appsettings.json new file mode 100644 index 000000000..f15dfc248 --- /dev/null +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/appsettings.json @@ -0,0 +1,222 @@ +{ + // appSettings section + "appSettings": { + + // ʕi̎gpp[^ - start + // cw̃ptH[}XOo͋@\onEoff + "FxSqlTraceLog": "on", + // cwSQLLbV@\onEoff + // JtF[ŶƂlāAftHgoffɐݒ + "FxSqlCacheSwitch": "off", + // cwSQL[h̃GR[fBOwishift_jisAutf-8.etcj + "FxSqlEncoding": "utf-8", + // cwSQLCommandTimeoutlw + "FxSqlCommandTimeout": "30", + // ʕi̎gpp[^ - end + + // tH_ + "InputFilesRoot": "C:\\", + "OutputFilesRoot": "C:\\", + + // pҖ + "FamilyName": "", + "PersonalName": "Y", + + // ͍ځiev[gj + + // DaoNX ev[g t@Cigqj + "DaoTemplateFileName": "DaoTemplate", + + // EntityNX ev[g t@Cigqj + "EntityTemplateFileName": "EntityTemplate", + // DataSetNX ev[g t@C + "DataSetTemplateFileName": "DataSetTemplate.xsd", + + // eiX ev[g t@C + "TableAdapterTemplateFileName": "TableAdapter", + "JoinConditionalSearchTemplateFileName": "_Screen_ConditionalSearch.aspx", + "JoinSearchAndUpdateTemplateFileName": "_Screen_SearchAndUpdate.aspx", + "JoinDetailTemplateFileName": "_Screen_Detail.aspx", + + // SQL ev[g t@C + // ÓI + "InsertTemplateFileName": "s1_InsertTemplate.sql", + "SelectTemplateFileName": "s2_SelectTemplate.xml", + "UpdateTemplateFileName": "s3_UpdateTemplate.xml", + "DeleteTemplateFileName": "s4_DeleteTemplate.xml", + + // I + "DynInsTemplateFileName": "d1_DynInsTemplate.xml", + "DynSelTemplateFileName": "d2_DynSelTemplate.xml", + "DynUpdTemplateFileName": "d3_DynUpdTemplate.xml", + "DynDelTemplateFileName": "d4_DynDelTemplate.xml", + + // g\bhp + "DynSelCntTemplateFileName": "d5_DynSelCntTemplate.xml", + + // o͍ + // DaoNX t@C̃wb_Etb^ + // DaoNX̃wb_Etb^ + "DaoClassNameHeader": "Dao", + "DaoClassNameFooter": "", + + // EntityNX t@C̃wb_Etb^ + // EntityNX̃wb_Etb^ + "EntityClassNameHeader": "", + "EntityClassNameFooter": "Entity", + + // DataSetNX t@C̃wb_Etb^ + // DataSetNX̃wb_Etb^ + "DataSetClassNameHeader": "", + "DataSetClassNameFooter": "DataSet", + + // DataTableNX̃wb_Etb^ + // DataTableNX̃wb_Etb^ + "DataTableClassNameHeader": "", + "DataTableClassNameFooter": "DataTable", + + // \bhCRUD + "MethodLabel_Ins": "1_Insert", + "MethodLabel_Sel": "2_Select", + "MethodLabel_Upd": "3_Update", + "MethodLabel_Del": "4_Delete", + "MethodLabel_SelCnt": "5_SelCnt", + + // \bh̃wb_Etb^iÓIj + "MethodNameHeaderS": "S", + "MethodNameFooterS": "", + + // \bh̃wb_Etb^iIj + "MethodNameHeaderD": "D", + "MethodNameFooterD": "", + + // Updatẽp^̃wb_Etb^ + "UpdateParamHeader": "Set_", + "UpdateParamFooter": "_forUPD", + + // Likẽp^̃wb_Etb^ + "LikeParamHeader": "", + "LikeParamFooter": "_Like", + + // SQLt@C̃wb_Etb^ + // @SQLt@ĆADaoNX{\bhƂB + + // f[^ + // ev[g̒u + + // + "RpFileName": "_FileName_", + "RpTimeStamp": "_TimeStamp_", + "RpUserName": "_UserName_", + + "RpTableName": "_TableName_", + "RpColumnName": "_ColumnName_", + + "RpJoinTableName": "_JoinTableName_", + "RpJoinColumnName": "_JoinColumnName_", + "RpJoinTextboxColumnName": "_JoinTextboxColumnName_", + + "RpAllColumnList": "_AllColumnList_", + "RpPKColumnList": "_PKColumnList_", + + "CcLoopStart_PKColumn": "ControlComment:LoopStart-PKColumn", + "CcLoopEnd_PKColumn": "ControlComment:LoopEnd-PKColumn", + + "CcLoopStart_JoinTables": "ControlComment:LoopStart-JoinTables", + "CcLoopEnd_JoinTables": "ControlComment:LoopEnd-JoinTables", + + "CcLoopStart_ElseColumn": "ControlComment:LoopStart-ElseColumn", + "CcLoopEnd_ElseColumn": "ControlComment:LoopEnd-ElseColumn", + + "CcIsRequired_TimeStamp": "ControlComment:IsRequired-TimeStamp", + + // SQL + "RpXMLEncoding": "_XMLEncoding_", + + "RpAllColumnListSQL": "_AllColumnListSQL_", + "RpPKColumnListSQL": "_PKColumnListSQL_", + + "RpAllColumnListTableAdapterSQL": "_AllColumnListTableAdapterSQL_", + "RpTimeStampColName": "_TimeStampColName_", + + "RpColumnsCondition": "_ColumnsCondition_", + "RpDynColsCondition": "_DynColsCondition_", + "RpDynColsCondition_Like": "_DynColsConditionLike_", + + // "RpInsertColumns": "_InsertColumns_", + "RpDynInsColumns": "_DynInsColumns_", + + "RpInsertParameters": "_InsertParameters_", + "RpDynInsParameters": "_DynInsParameters_", + + // "RpUpdateParameters": "_UpdateParameters_", + "RpDynUpdParameters": "_DynUpdParameters_", + + // Daoit@Cj + "RpDaoClassName": "_DaoClassName_", + + // vpeB vV[W + "CcLoopStart_PPUpdSet": "ControlComment:LoopStart-PPUpdSet", + "CcLoopEnd_PPUpdSet": "ControlComment:LoopEnd-PPUpdSet", + + "CcLoopStart_PPLike": "ControlComment:LoopStart-PPLike", + "CcLoopEnd_PPLike": "ControlComment:LoopEnd-PPLike", + + // \bh + "RpInsertMethodName": "_InsertMethodName_", + "RpDynInsMethodName": "_DynInsMethodName_", + + "RpSelectMethodName": "_SelectMethodName_", + "RpDynSelMethodName": "_DynSelMethodName_", + + "RpUpdateMethodName": "_UpdateMethodName_", + "RpDynUpdMethodName": "_DynUpdMethodName_", + + "RpDeleteMethodName": "_DeleteMethodName_", + "RpDynDelMethodName": "_DynDelMethodName_", + + // g\bh + "RpDynSelCntMethodName": "_DynSelCntMethodName_", + + // EntityNXit@Cj + "RpEntityClassName": "_EntityClassName_", + "RpEntityTypeInfo": "_EntityTypeInfo_", + + // DataSetNXit@Cj + "RpDataSetClassName": "_DataSetClassName_", + "RpDataTableClassName": "_DataTableClassName_", + "RpXSDTypeInfo": "_XSDTypeInfo_", + + // SQLt@C + "RpInsertFileName": "_InsertFileName_", + "RpDynInsFileName": "_DynInsFileName_", + + "RpSelectFileName": "_SelectFileName_", + "RpDynSelFileName": "_DynSelFileName_", + + "RpUpdateFileName": "_UpdateFileName_", + "RpDynUpdFileName": "_DynUpdFileName_", + + "RpDeleteFileName": "_DeleteFileName_", + "RpDynDelFileName": "_DynDelFileName_", + + // g\bhpt@C + "RpDynSelCntFileName": "_DynSelCntFileName_", + + // ASPX + "RpCodebehindLanguage": "_CodebehindLanguage_", + "RpClassTemplateFileExtension": "_ClassTemplateFileExtension_", + + // CODE + "RpCommentOut": "_CommentOut_", + "RpPKFirstColumn": "_PKFirstColumn_", + // GridView Header Column Number + "RpColumnNmbr": "_ColumnNmbr_", + // For Internationalization Test + "DefaultCulture": "ja-JP", + + // Add Data Providers from tool + "RpDBMS": "_DBMS_", + "RpDAP": "_DAP_" + } +} \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_Tool.csproj b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_Tool.csproj index aec715348..d04746c4e 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_Tool.csproj +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_Tool.csproj @@ -154,7 +154,6 @@ SimpleTextBoxWindow.cs - diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj new file mode 100644 index 000000000..86b1c6963 --- /dev/null +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj @@ -0,0 +1,77 @@ + + + + WinExe + netcoreapp3.0 + true + + + DaoGen_Tool + OpenTouryo.DaoGen_Tool + + + + TRACE;NETCOREAPP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.DamManagedOdp.dll + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.DamMySQL.dll + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.DamPstGrS.dll + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.Public.dll + + + + + + True + True + Resource.resx + + + + + + ResXFileCodeGenerator + Resource.Designer.cs + + + + + + Always + + + + \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.sln b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.sln new file mode 100644 index 000000000..1e294ac6a --- /dev/null +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DaoGen_Tool", "DaoGen_ToolCore.csproj", "{5CC42F99-B80D-485B-9623-EE2DD59A6EDB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5CC42F99-B80D-485B-9623-EE2DD59A6EDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5CC42F99-B80D-485B-9623-EE2DD59A6EDB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5CC42F99-B80D-485B-9623-EE2DD59A6EDB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5CC42F99-B80D-485B-9623-EE2DD59A6EDB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Form1.cs b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Form1.cs index 080f16f84..0bea7fe09 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Form1.cs +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Form1.cs @@ -49,6 +49,7 @@ //* and and replaced this method wherever hard coded values. //* 2014/08/19 西野 大介 カラム取得時のスキーマ考慮が無かったため追加(奥井さんからの提供) //* 2017/09/06 西野 大介 Oracle.ManagedDataAccess.Clientで主キーが取れなくなった対応 +//* 2018/10/29 西野 大介 NETCOREAPP対応で、サポートされないDBを「#if」した。 //********************************************************************************** // -------------------- @@ -56,12 +57,15 @@ // -------------------- using System.Data.SqlClient; using Oracle.ManagedDataAccess.Client; -using System.Data.OleDb; using System.Data.Odbc; using Npgsql; using MySql.Data.MySqlClient; +#if NETCOREAPP +#else +using System.Data.OleDb; using IBM.Data.DB2; using Hitachi.HiRDB; +#endif // -------------------- using System; @@ -91,21 +95,25 @@ public partial class Form1 : Form /// SqlConnection private SqlConnection SqlCn; - /// OleDbConnection - private OleDbConnection OleCn; /// OdbcConnection private OdbcConnection OdbCn; /// OracleConnection private OracleConnection OdpCn; - /// DB2Connection - private DB2Connection DB2Cn; - /// HiRDBConnection - private HiRDBConnection HiRDBCn; /// MySqlConnection private MySqlConnection MySqlCn; /// NpgsqlConnection private NpgsqlConnection NpgsqlCn; +#if NETCOREAPP +#else + /// OleDbConnection + private OleDbConnection OleCn; + /// DB2Connection + private DB2Connection DB2Cn; + /// HiRDBConnection + private HiRDBConnection HiRDBCn; +#endif + #endregion #region スキーマ情報 @@ -170,6 +178,13 @@ private void Form1_Load(object sender, EventArgs e) this.btnSetPrimaryKey.Enabled = false; this.btnDaoDefinitionGen.Enabled = false; + +#if NETCOREAPP + this.rbnOLE.Enabled = false; + this.rbnDB2.Enabled = false; + this.rbnHiRDB.Enabled = false; +#else +#endif } #endregion @@ -204,11 +219,6 @@ private void ConnectionOpen() this.SqlCn = new SqlConnection(this.txtConnString.Text); this.SqlCn.Open(); } - else if (this.rbnOLE.Checked) - { - this.OleCn = new OleDbConnection(this.txtConnString.Text); - this.OleCn.Open(); - } else if (this.rbnODB.Checked) { this.OdbCn = new OdbcConnection(this.txtConnString.Text); @@ -219,16 +229,6 @@ private void ConnectionOpen() this.OdpCn = new OracleConnection(this.txtConnString.Text); this.OdpCn.Open(); } - else if (this.rbnDB2.Checked) - { - this.DB2Cn = new DB2Connection(this.txtConnString.Text); - this.DB2Cn.Open(); - } - else if (this.rbnHiRDB.Checked) - { - this.HiRDBCn = new HiRDBConnection(this.txtConnString.Text); - this.HiRDBCn.Open(); - } else if (this.rbnMySQL.Checked) { this.MySqlCn = new MySqlConnection(this.txtConnString.Text); @@ -239,6 +239,24 @@ private void ConnectionOpen() this.NpgsqlCn = new NpgsqlConnection(this.txtConnString.Text); this.NpgsqlCn.Open(); } +#if NETCOREAPP +#else + else if (this.rbnOLE.Checked) + { + this.OleCn = new OleDbConnection(this.txtConnString.Text); + this.OleCn.Open(); + } + else if (this.rbnDB2.Checked) + { + this.DB2Cn = new DB2Connection(this.txtConnString.Text); + this.DB2Cn.Open(); + } + else if (this.rbnHiRDB.Checked) + { + this.HiRDBCn = new HiRDBConnection(this.txtConnString.Text); + this.HiRDBCn.Open(); + } +#endif else { // データプロバイダ指定無し(ありえない) @@ -257,11 +275,6 @@ private void ConnectionClose() this.SqlCn.Close(); } - if (this.OleCn != null) - { - this.OleCn.Close(); - } - if (this.OdbCn != null) { this.OdbCn.Close(); @@ -272,25 +285,33 @@ private void ConnectionClose() this.OdpCn.Close(); } - if (this.DB2Cn != null) + if (this.MySqlCn != null) { - this.DB2Cn.Close(); + this.MySqlCn.Close(); } - if (this.HiRDBCn != null) + if (this.NpgsqlCn != null) { - this.HiRDBCn.Close(); + this.NpgsqlCn.Close(); } - if (this.MySqlCn != null) +#if NETCOREAPP +#else + if (this.OleCn != null) { - this.MySqlCn.Close(); + this.OleCn.Close(); } - if (this.NpgsqlCn != null) + if (this.DB2Cn != null) { - this.NpgsqlCn.Close(); + this.DB2Cn.Close(); + } + + if (this.HiRDBCn != null) + { + this.HiRDBCn.Close(); } +#endif } #endregion @@ -604,36 +625,36 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) #endregion } - else if (this.rbnOLE.Checked) + else if (this.rbnODB.Checked) { - #region OLEDB.NET + #region ODBC.NET if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("SummaryInfo")) { // DataSourceInformation - this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); + this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("TypeInfo")) { // DataTypes - this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("ReservedWordInfo")) { // ReservedWords - this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); + this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("RestrictionInfo")) { // Restrictions - this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); + this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("MetadataInfo")) { // MetaDataCollections - this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); + this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); // アイテムの追加 if (this.cmbSchemaInfo.Items.Count <= 5) @@ -646,42 +667,42 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) else { // その他 - this.DtSchma = this.OleCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); + this.DtSchma = this.OdbCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); writeLineFlag = true; } #endregion } - else if (this.rbnODB.Checked) + else if (this.rbnODP.Checked) { - #region ODBC.NET + #region Oracle if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("SummaryInfo")) { // DataSourceInformation - this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); + this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("TypeInfo")) { // DataTypes - this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("ReservedWordInfo")) { // ReservedWords - this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); + this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("RestrictionInfo")) { // Restrictions - this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); + this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("MetadataInfo")) { // MetaDataCollections - this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); + this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); // アイテムの追加 if (this.cmbSchemaInfo.Items.Count <= 5) @@ -694,42 +715,42 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) else { // その他 - this.DtSchma = this.OdbCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); + this.DtSchma = this.OdpCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); writeLineFlag = true; } #endregion } - else if (this.rbnODP.Checked) + else if (this.rbnMySQL.Checked) { - #region Oracle + #region MySQL if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("SummaryInfo")) { // DataSourceInformation - this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); + this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("TypeInfo")) { // DataTypes - this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("ReservedWordInfo")) { // ReservedWords - this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); + this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("RestrictionInfo")) { // Restrictions - this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); + this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("MetadataInfo")) { // MetaDataCollections - this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); + this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); // アイテムの追加 if (this.cmbSchemaInfo.Items.Count <= 5) @@ -742,42 +763,42 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) else { // その他 - this.DtSchma = this.OdpCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); + this.DtSchma = this.MySqlCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); writeLineFlag = true; } #endregion } - else if (this.rbnDB2.Checked) + else if (this.rbnPstgrs.Checked) { - #region DB2 + #region PostgreSQL if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("SummaryInfo")) { // DataSourceInformation - this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); + this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("TypeInfo")) { // DataTypes - this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("ReservedWordInfo")) { // ReservedWords - this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); + this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("RestrictionInfo")) { // Restrictions - this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); + this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("MetadataInfo")) { // MetaDataCollections - this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); + this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); // アイテムの追加 if (this.cmbSchemaInfo.Items.Count <= 5) @@ -790,42 +811,44 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) else { // その他 - this.DtSchma = this.DB2Cn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); + this.DtSchma = this.NpgsqlCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); writeLineFlag = true; } #endregion } - else if (this.rbnHiRDB.Checked) +#if NETCOREAPP +#else + else if (this.rbnOLE.Checked) { - #region HiRDB + #region OLEDB.NET if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("SummaryInfo")) { // DataSourceInformation - this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); + this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("TypeInfo")) { // DataTypes - this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("ReservedWordInfo")) { // ReservedWords - this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); + this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("RestrictionInfo")) { // Restrictions - this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); + this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("MetadataInfo")) { // MetaDataCollections - this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); + this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); // アイテムの追加 if (this.cmbSchemaInfo.Items.Count <= 5) @@ -838,42 +861,42 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) else { // その他 - this.DtSchma = this.HiRDBCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); + this.DtSchma = this.OleCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); writeLineFlag = true; } #endregion } - else if (this.rbnMySQL.Checked) + else if (this.rbnDB2.Checked) { - #region MySQL + #region DB2 if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("SummaryInfo")) { // DataSourceInformation - this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); + this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("TypeInfo")) { // DataTypes - this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("ReservedWordInfo")) { // ReservedWords - this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); + this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("RestrictionInfo")) { // Restrictions - this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); + this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("MetadataInfo")) { // MetaDataCollections - this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); + this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); // アイテムの追加 if (this.cmbSchemaInfo.Items.Count <= 5) @@ -886,42 +909,42 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) else { // その他 - this.DtSchma = this.MySqlCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); + this.DtSchma = this.DB2Cn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); writeLineFlag = true; } #endregion } - else if (this.rbnPstgrs.Checked) + else if (this.rbnHiRDB.Checked) { - #region PostgreSQL + #region HiRDB if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("SummaryInfo")) { // DataSourceInformation - this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); + this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("TypeInfo")) { // DataTypes - this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("ReservedWordInfo")) { // ReservedWords - this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); + this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("RestrictionInfo")) { // Restrictions - this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); + this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("MetadataInfo")) { // MetaDataCollections - this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); + this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); // アイテムの追加 if (this.cmbSchemaInfo.Items.Count <= 5) @@ -934,12 +957,13 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) else { // その他 - this.DtSchma = this.NpgsqlCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); + this.DtSchma = this.HiRDBCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); writeLineFlag = true; } #endregion } +#endif else { // データプロバイダ指定無し(ありえない) @@ -1053,46 +1077,6 @@ private void btnListTable_Click(object sender, EventArgs e) #endregion } - else if (this.rbnOLE.Checked) - { - #region OLEDB - - // 注釈 - //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(OLEDB用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); - MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "OLEDB"), this.RM_GetString("CautionPrerequisiteCaption")); - - #region テーブル・ビューの情報を取得 - - dtSchmaTables = this.OleCn.GetSchema("Tables"); - - // スキーマの情報(カスタム)の作成 - this.HtSchemaCustom = new Hashtable(); - - // テーブル・ビューの取り込み - foreach (System.Data.DataRow row in dtSchmaTables.Rows) - { - if ((string)row["TABLE_TYPE"] == "TABLE") - { - // テーブルの取り込み - HtSchemaCustom.Add((string)row["TABLE_NAME"], - new CTable((string)row["TABLE_NAME"], false)); - } - else if ((string)row["TABLE_TYPE"] == "VIEW") - { - // ビューの取り込み。更新可能かどうかは判断しない。 - HtSchemaCustom.Add((string)row["TABLE_NAME"], - new CTable((string)row["TABLE_NAME"], true)); - } - else - { - // TABLE・VIEW以外 - } - } - - #endregion - - #endregion - } else if (this.rbnODB.Checked) { #region ODBC @@ -1196,56 +1180,69 @@ private void btnListTable_Click(object sender, EventArgs e) #endregion } - else if (this.rbnDB2.Checked) + else if (this.rbnMySQL.Checked) { - #region DB2 + #region MySQL // 注釈 - //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(DB2用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); - MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "DB2"), this.RM_GetString("CautionPrerequisiteCaption")); + // MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(MySQL用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); + MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "MySQL"), this.RM_GetString("CautionPrerequisiteCaption")); #region テーブル・ビューの情報を取得 - dtSchmaTables = this.DB2Cn.GetSchema("Tables"); + dtSchmaTables = this.MySqlCn.GetSchema("Tables"); + dtSchmaViews = this.MySqlCn.GetSchema("Views"); // スキーマの情報(カスタム)の作成 this.HtSchemaCustom = new Hashtable(); - // テーブル・ビューの取り込み + // テーブルの取り込み。 foreach (System.Data.DataRow row in dtSchmaTables.Rows) { - // システム テーブルは避ける。 - if ((string)row["TABLE_TYPE"] == "TABLE" - //|| (string)row["TABLE_TYPE"] == "ALIAS" → 別名はサポートしない - || (string)row["TABLE_TYPE"] == "MATERIALIZED QUERY TABLE") - { - // システム テーブルは避ける。 - if ((string)row["TABLE_SCHEMA"].ToString().Substring(0, 3) == "SYS") - { - } - else - { - // テーブルの取り込み。 - HtSchemaCustom.Add((string)row["TABLE_NAME"], - new CTable((string)row["TABLE_NAME"], false)); - } - } - else if ((string)row["TABLE_TYPE"] == "VIEW") - { - // システム ビューは避ける。 - if ((string)row["TABLE_SCHEMA"].ToString().Substring(0, 3) == "SYS") - { - } - else - { - // ビューの取り込み。更新可能かどうかは判断しない。 - HtSchemaCustom.Add((string)row["TABLE_NAME"], - new CTable((string)row["TABLE_NAME"], true)); - } + HtSchemaCustom.Add((string)row["TABLE_NAME"], + new CTable((string)row["TABLE_NAME"], false)); + } + + // ビューの取り込み。更新可能かどうかは判断しない。 + foreach (System.Data.DataRow row in dtSchmaViews.Rows) + { + HtSchemaCustom.Add((string)row["TABLE_NAME"], + new CTable((string)row["TABLE_NAME"], true)); + } + + #endregion + + #endregion + } + else if (this.rbnPstgrs.Checked) + { + #region PostgreSQL + + // 注釈 + //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(PostgreSQL用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); + MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "PostgreSQL"), this.RM_GetString("CautionPrerequisiteCaption")); + + #region テーブル・ビューの情報を取得 + + dtSchmaTables = this.NpgsqlCn.GetSchema("Tables"); + + // スキーマの情報(カスタム)の作成 + this.HtSchemaCustom = new Hashtable(); + + // テーブル・ビューの取り込み。 + foreach (System.Data.DataRow row in dtSchmaTables.Rows) + { + string tableSchema = ((string)row["TABLE_SCHEMA"]).ToUpper(); + + if (tableSchema == "INFORMATION_SCHEMA" || tableSchema == "PG_CATALOG") + { + // システム スキーマは無視する。 } else { - // 上記以外 + // ユーザ スキーマのみ対象にする。 + HtSchemaCustom.Add((string)row["TABLE_NAME"], + new CTable((string)row["TABLE_NAME"], false)); } } @@ -1253,17 +1250,19 @@ private void btnListTable_Click(object sender, EventArgs e) #endregion } - else if (this.rbnHiRDB.Checked) +#if NETCOREAPP +#else + else if (this.rbnOLE.Checked) { - #region HiRDB + #region OLEDB // 注釈 - //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(HiRDB用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); - MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "ODBC"), this.RM_GetString("CautionPrerequisiteCaption")); + //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(OLEDB用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); + MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "OLEDB"), this.RM_GetString("CautionPrerequisiteCaption")); #region テーブル・ビューの情報を取得 - dtSchmaTables = this.HiRDBCn.GetSchema("Tables"); + dtSchmaTables = this.OleCn.GetSchema("Tables"); // スキーマの情報(カスタム)の作成 this.HtSchemaCustom = new Hashtable(); @@ -1271,10 +1270,50 @@ private void btnListTable_Click(object sender, EventArgs e) // テーブル・ビューの取り込み foreach (System.Data.DataRow row in dtSchmaTables.Rows) { - // システム テーブルは避ける。 if ((string)row["TABLE_TYPE"] == "TABLE") - //|| (string)row["TABLE_TYPE"] == "ALIAS" → 別名はサポートしない - //|| (string)row["TABLE_TYPE"] == "MATERIALIZED QUERY TABLE") + { + // テーブルの取り込み + HtSchemaCustom.Add((string)row["TABLE_NAME"], + new CTable((string)row["TABLE_NAME"], false)); + } + else if ((string)row["TABLE_TYPE"] == "VIEW") + { + // ビューの取り込み。更新可能かどうかは判断しない。 + HtSchemaCustom.Add((string)row["TABLE_NAME"], + new CTable((string)row["TABLE_NAME"], true)); + } + else + { + // TABLE・VIEW以外 + } + } + + #endregion + + #endregion + } + else if (this.rbnDB2.Checked) + { + #region DB2 + + // 注釈 + //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(DB2用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); + MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "DB2"), this.RM_GetString("CautionPrerequisiteCaption")); + + #region テーブル・ビューの情報を取得 + + dtSchmaTables = this.DB2Cn.GetSchema("Tables"); + + // スキーマの情報(カスタム)の作成 + this.HtSchemaCustom = new Hashtable(); + + // テーブル・ビューの取り込み + foreach (System.Data.DataRow row in dtSchmaTables.Rows) + { + // システム テーブルは避ける。 + if ((string)row["TABLE_TYPE"] == "TABLE" + //|| (string)row["TABLE_TYPE"] == "ALIAS" → 別名はサポートしない + || (string)row["TABLE_TYPE"] == "MATERIALIZED QUERY TABLE") { // システム テーブルは避ける。 if ((string)row["TABLE_SCHEMA"].ToString().Substring(0, 3) == "SYS") @@ -1310,69 +1349,56 @@ private void btnListTable_Click(object sender, EventArgs e) #endregion } - else if (this.rbnMySQL.Checked) - { - #region MySQL - - // 注釈 - // MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(MySQL用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); - MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "MySQL"), this.RM_GetString("CautionPrerequisiteCaption")); - - #region テーブル・ビューの情報を取得 - - dtSchmaTables = this.MySqlCn.GetSchema("Tables"); - dtSchmaViews = this.MySqlCn.GetSchema("Views"); - - // スキーマの情報(カスタム)の作成 - this.HtSchemaCustom = new Hashtable(); - - // テーブルの取り込み。 - foreach (System.Data.DataRow row in dtSchmaTables.Rows) - { - HtSchemaCustom.Add((string)row["TABLE_NAME"], - new CTable((string)row["TABLE_NAME"], false)); - } - - // ビューの取り込み。更新可能かどうかは判断しない。 - foreach (System.Data.DataRow row in dtSchmaViews.Rows) - { - HtSchemaCustom.Add((string)row["TABLE_NAME"], - new CTable((string)row["TABLE_NAME"], true)); - } - - #endregion - - #endregion - } - else if (this.rbnPstgrs.Checked) + else if (this.rbnHiRDB.Checked) { - #region PostgreSQL + #region HiRDB // 注釈 - //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(PostgreSQL用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); - MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "PostgreSQL"), this.RM_GetString("CautionPrerequisiteCaption")); + //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(HiRDB用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); + MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "ODBC"), this.RM_GetString("CautionPrerequisiteCaption")); #region テーブル・ビューの情報を取得 - dtSchmaTables = this.NpgsqlCn.GetSchema("Tables"); + dtSchmaTables = this.HiRDBCn.GetSchema("Tables"); // スキーマの情報(カスタム)の作成 this.HtSchemaCustom = new Hashtable(); - // テーブル・ビューの取り込み。 + // テーブル・ビューの取り込み foreach (System.Data.DataRow row in dtSchmaTables.Rows) { - string tableSchema = ((string)row["TABLE_SCHEMA"]).ToUpper(); - - if (tableSchema == "INFORMATION_SCHEMA" || tableSchema == "PG_CATALOG") + // システム テーブルは避ける。 + if ((string)row["TABLE_TYPE"] == "TABLE") + //|| (string)row["TABLE_TYPE"] == "ALIAS" → 別名はサポートしない + //|| (string)row["TABLE_TYPE"] == "MATERIALIZED QUERY TABLE") { - // システム スキーマは無視する。 + // システム テーブルは避ける。 + if ((string)row["TABLE_SCHEMA"].ToString().Substring(0, 3) == "SYS") + { + } + else + { + // テーブルの取り込み。 + HtSchemaCustom.Add((string)row["TABLE_NAME"], + new CTable((string)row["TABLE_NAME"], false)); + } + } + else if ((string)row["TABLE_TYPE"] == "VIEW") + { + // システム ビューは避ける。 + if ((string)row["TABLE_SCHEMA"].ToString().Substring(0, 3) == "SYS") + { + } + else + { + // ビューの取り込み。更新可能かどうかは判断しない。 + HtSchemaCustom.Add((string)row["TABLE_NAME"], + new CTable((string)row["TABLE_NAME"], true)); + } } else { - // ユーザ スキーマのみ対象にする。 - HtSchemaCustom.Add((string)row["TABLE_NAME"], - new CTable((string)row["TABLE_NAME"], false)); + // 上記以外 } } @@ -1380,6 +1406,7 @@ private void btnListTable_Click(object sender, EventArgs e) #endregion } +#endif else { // データプロバイダ指定無し(ありえない) @@ -1472,11 +1499,6 @@ private void btnLoadColumn_Click(object sender, EventArgs e) // DataTypes CmnMethods.DataTypes = this.SqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); } - else if (this.rbnOLE.Checked) - { - // DataTypes - CmnMethods.DataTypes = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); - } else if (this.rbnODB.Checked) { // DataTypes @@ -1487,26 +1509,34 @@ private void btnLoadColumn_Click(object sender, EventArgs e) // DataTypes CmnMethods.DataTypes = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); } - else if (this.rbnDB2.Checked) + else if (this.rbnMySQL.Checked) { // DataTypes - CmnMethods.DataTypes = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + CmnMethods.DataTypes = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); } - else if (this.rbnHiRDB.Checked) + else if (this.rbnPstgrs.Checked) + { + //// DataTypes(NpgsqlではDataTypesがサポートされていない) + //CmnMethods.DataTypes = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + } +#if NETCOREAPP +#else + else if (this.rbnOLE.Checked) { // DataTypes - CmnMethods.DataTypes = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + CmnMethods.DataTypes = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); } - else if (this.rbnMySQL.Checked) + else if (this.rbnDB2.Checked) { // DataTypes - CmnMethods.DataTypes = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + CmnMethods.DataTypes = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); } - else if (this.rbnPstgrs.Checked) + else if (this.rbnHiRDB.Checked) { - //// DataTypes(NpgsqlではDataTypesがサポートされていない) - //CmnMethods.DataTypes = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + // DataTypes + CmnMethods.DataTypes = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); } +#endif else { // データプロバイダ指定無し(ありえない) @@ -1670,44 +1700,6 @@ private void btnLoadColumn_Click(object sender, EventArgs e) #endregion } - else if (this.rbnOLE.Checked) - { - #region OLEDB.NET - - dtSchmaColumns = this.OleCn.GetSchema("Columns"); - - // カラムの取り込み - foreach (System.Data.DataRow row in dtSchmaColumns.Rows) - { - // テーブルを取得 - CTable table = (CTable)this.HtSchemaCustom[(string)row["TABLE_NAME"]]; - - // 有効なテーブルにのみロードする。 - if (table == null) - { - // 不明なテーブル - } - else - { - // 有効なテーブル - if (table.Effective) - { - CColumn column = new CColumn( - (string)row["COLUMN_NAME"], CmnMethods.ConvertToDBTypeInfo_OLEDB(row["DATA_TYPE"].ToString()), - CmnMethods.ConvertToDotNetTypeInfo(CmnMethods.ConvertToDBTypeInfo_OLEDB(row["DATA_TYPE"].ToString()))); - - // ポジションをキーにしてカラムを追加 - table.HtColumns_Position[row["ORDINAL_POSITION"].ToString()] = column; - // カラム名をキーにしてカラムを追加 - table.HtColumns_Name[(string)row["COLUMN_NAME"]] = column; - } - } - } - - // 主キーの情報をロード・・・しない。 - - #endregion - } else if (this.rbnODB.Checked) { #region ODBC.NET @@ -1864,12 +1856,12 @@ private void btnLoadColumn_Click(object sender, EventArgs e) #endregion } - else if (this.rbnDB2.Checked) + else if (this.rbnMySQL.Checked) { - #region DB2 + #region MySQL // カラムの情報を取得 - dtSchmaColumns = this.DB2Cn.GetSchema("Columns"); + dtSchmaColumns = this.MySqlCn.GetSchema("Columns"); // カラムの取り込み foreach (System.Data.DataRow row in dtSchmaColumns.Rows) @@ -1888,8 +1880,8 @@ private void btnLoadColumn_Click(object sender, EventArgs e) if (table.Effective) { CColumn column = new CColumn( - (string)row["COLUMN_NAME"], (string)row["DATA_TYPE_NAME"], - CmnMethods.ConvertToDotNetTypeInfo_DB2((string)row["DATA_TYPE_NAME"])); + (string)row["COLUMN_NAME"], (string)row["DATA_TYPE"], + CmnMethods.ConvertToDotNetTypeInfo((string)row["DATA_TYPE"])); // ポジションをキーにしてカラムを追加 table.HtColumns_Position[row["ORDINAL_POSITION"].ToString()] = column; @@ -1903,12 +1895,12 @@ private void btnLoadColumn_Click(object sender, EventArgs e) #endregion } - else if (this.rbnHiRDB.Checked) + else if (this.rbnPstgrs.Checked) { - #region HiRDB + #region PostgreSQL // カラムの情報を取得 - dtSchmaColumns = this.HiRDBCn.GetSchema("Columns"); + dtSchmaColumns = this.NpgsqlCn.GetSchema("Columns"); // カラムの取り込み foreach (System.Data.DataRow row in dtSchmaColumns.Rows) @@ -1927,8 +1919,9 @@ private void btnLoadColumn_Click(object sender, EventArgs e) if (table.Effective) { CColumn column = new CColumn( - (string)row["COLUMN_NAME"], (string)row["DATA_TYPE_NAME"], - CmnMethods.ConvertToDotNetTypeInfo_DB2((string)row["DATA_TYPE_NAME"])); + (string)row["COLUMN_NAME"], (string)row["DATA_TYPE"], "System.Object"); + //CmnMethods.ConvertToDotNetTypeInfo((string)row["DATA_TYPE"])); + //(NpgsqlではDataTypesがサポートされていないため) // ポジションをキーにしてカラムを追加 table.HtColumns_Position[row["ORDINAL_POSITION"].ToString()] = column; @@ -1942,12 +1935,52 @@ private void btnLoadColumn_Click(object sender, EventArgs e) #endregion } - else if (this.rbnMySQL.Checked) +#if NETCOREAPP +#else + else if (this.rbnOLE.Checked) { - #region MySQL + #region OLEDB.NET + + dtSchmaColumns = this.OleCn.GetSchema("Columns"); + + // カラムの取り込み + foreach (System.Data.DataRow row in dtSchmaColumns.Rows) + { + // テーブルを取得 + CTable table = (CTable)this.HtSchemaCustom[(string)row["TABLE_NAME"]]; + + // 有効なテーブルにのみロードする。 + if (table == null) + { + // 不明なテーブル + } + else + { + // 有効なテーブル + if (table.Effective) + { + CColumn column = new CColumn( + (string)row["COLUMN_NAME"], CmnMethods.ConvertToDBTypeInfo_OLEDB(row["DATA_TYPE"].ToString()), + CmnMethods.ConvertToDotNetTypeInfo(CmnMethods.ConvertToDBTypeInfo_OLEDB(row["DATA_TYPE"].ToString()))); + + // ポジションをキーにしてカラムを追加 + table.HtColumns_Position[row["ORDINAL_POSITION"].ToString()] = column; + // カラム名をキーにしてカラムを追加 + table.HtColumns_Name[(string)row["COLUMN_NAME"]] = column; + } + } + } + + // 主キーの情報をロード・・・しない。 + + #endregion + } + else if (this.rbnDB2.Checked) + { + #region DB2 // カラムの情報を取得 - dtSchmaColumns = this.MySqlCn.GetSchema("Columns"); + dtSchmaColumns = this.DB2Cn.GetSchema("Columns"); // カラムの取り込み foreach (System.Data.DataRow row in dtSchmaColumns.Rows) @@ -1966,8 +1999,8 @@ private void btnLoadColumn_Click(object sender, EventArgs e) if (table.Effective) { CColumn column = new CColumn( - (string)row["COLUMN_NAME"], (string)row["DATA_TYPE"], - CmnMethods.ConvertToDotNetTypeInfo((string)row["DATA_TYPE"])); + (string)row["COLUMN_NAME"], (string)row["DATA_TYPE_NAME"], + CmnMethods.ConvertToDotNetTypeInfo_DB2((string)row["DATA_TYPE_NAME"])); // ポジションをキーにしてカラムを追加 table.HtColumns_Position[row["ORDINAL_POSITION"].ToString()] = column; @@ -1981,12 +2014,12 @@ private void btnLoadColumn_Click(object sender, EventArgs e) #endregion } - else if (this.rbnPstgrs.Checked) + else if (this.rbnHiRDB.Checked) { - #region PostgreSQL + #region HiRDB // カラムの情報を取得 - dtSchmaColumns = this.NpgsqlCn.GetSchema("Columns"); + dtSchmaColumns = this.HiRDBCn.GetSchema("Columns"); // カラムの取り込み foreach (System.Data.DataRow row in dtSchmaColumns.Rows) @@ -2005,9 +2038,8 @@ private void btnLoadColumn_Click(object sender, EventArgs e) if (table.Effective) { CColumn column = new CColumn( - (string)row["COLUMN_NAME"], (string)row["DATA_TYPE"], "System.Object"); - //CmnMethods.ConvertToDotNetTypeInfo((string)row["DATA_TYPE"])); - //(NpgsqlではDataTypesがサポートされていないため) + (string)row["COLUMN_NAME"], (string)row["DATA_TYPE_NAME"], + CmnMethods.ConvertToDotNetTypeInfo_DB2((string)row["DATA_TYPE_NAME"])); // ポジションをキーにしてカラムを追加 table.HtColumns_Position[row["ORDINAL_POSITION"].ToString()] = column; @@ -2021,6 +2053,7 @@ private void btnLoadColumn_Click(object sender, EventArgs e) #endregion } +#endif else { // データプロバイダ指定無し(ありえない) diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Program.cs b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Program.cs index 7db080474..31ef75569 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Program.cs +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Program.cs @@ -28,9 +28,11 @@ //* 日時 更新者 内容 //* ---------- ---------------- ------------------------------------------------- //* 2008/xx/xx 西野 大介 新規作成 -//* 2014/04/30 Santosh san Internationalization: Added Method to get the strings from the resource files based on the keys values passed. -//* and and replaced this method wherever hard coded values. -//* Also Added code to get the Culture information from app.config file. +//* 2014/04/30 Santosh san Internationalization: Added Method to get the strings +//* from the resource files based on the keys values passed. +//* and replaced to this method wherever hard coded values. +//* Also Added code to get the Culture information from app.config file. +//* 2018/10/29 西野 大介 NETCOREAPP対応で、configの初期化 //********************************************************************************** using System; @@ -52,6 +54,11 @@ static class Program [STAThread] static void Main() { +#if NETCOREAPP + // configの初期化 + GetConfigParameter.InitConfiguration("appsettings.json"); +#else +#endif try { Application.EnableVisualStyles(); diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.Designer.cs b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.Designer.cs index 3cb3fc775..4798ba942 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.Designer.cs +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// このコードはツールによって生成されました。 +// ランタイム バージョン:4.0.30319.42000 // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、 +// コードが再生成されるときに損失したりします。 // //------------------------------------------------------------------------------ @@ -13,13 +13,13 @@ namespace DaoGen_Tool.Resources { /// - /// A strongly-typed resource class, for looking up localized strings, etc. + /// ローカライズされた文字列などを検索するための、厳密に型指定されたリソース クラスです。 /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + // このクラスは StronglyTypedResourceBuilder クラスが ResGen + // または Visual Studio のようなツールを使用して自動生成されました。 + // メンバーを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に + // ResGen を実行し直すか、または VS プロジェクトをビルドし直します。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resource { @@ -33,7 +33,7 @@ internal Resource() { } /// - /// Returns the cached ResourceManager instance used by this class. + /// このクラスで使用されているキャッシュされた ResourceManager インスタンスを返します。 /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { @@ -47,8 +47,8 @@ internal Resource() { } /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. + /// すべてについて、現在のスレッドの CurrentUICulture プロパティをオーバーライドします + /// 現在のスレッドの CurrentUICulture プロパティをオーバーライドします。 /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { @@ -61,7 +61,7 @@ internal Resource() { } /// - /// Looks up a localized string similar to app.Config parameter has not been set. :. + /// app.Config parameter has not been set. : に類似しているローカライズされた文字列を検索します。 /// internal static string AppConfigParameterNotSet { get { @@ -70,7 +70,7 @@ internal static string AppConfigParameterNotSet { } /// - /// Looks up a localized string similar to Do not have more than one table with the same name on the same DB ( the specification for the Data layer generator for {0}) . + /// Do not have more than one table with the same name on the same DB ( the specification for the Data layer generator for {0}) に類似しているローカライズされた文字列を検索します。 /// internal static string CautionPrerequisite { get { @@ -79,7 +79,7 @@ internal static string CautionPrerequisite { } /// - /// Looks up a localized string similar to Note - ( prerequisite ) . + /// Note - ( prerequisite ) に類似しているローカライズされた文字列を検索します。 /// internal static string CautionPrerequisiteCaption { get { @@ -88,7 +88,7 @@ internal static string CautionPrerequisiteCaption { } /// - /// Looks up a localized string similar to (Is the specification of Data layer generator for Oracle ) that we only consider the table owned by the ( user ) schema [{0}]. + /// (Is the specification of Data layer generator for Oracle ) that we only consider the table owned by the ( user ) schema [{0}] に類似しているローカライズされた文字列を検索します。 /// internal static string CautionPrerequisiteOracle { get { @@ -97,7 +97,7 @@ internal static string CautionPrerequisiteOracle { } /// - /// Looks up a localized string similar to Check Error is :. + /// Check Error is : に類似しているローカライズされた文字列を検索します。 /// internal static string CheckExceptionError { get { @@ -106,7 +106,7 @@ internal static string CheckExceptionError { } /// - /// Looks up a localized string similar to Confirmation. + /// Confirmation に類似しているローカライズされた文字列を検索します。 /// internal static string Confirm { get { @@ -115,7 +115,7 @@ internal static string Confirm { } /// - /// Looks up a localized string similar to Display ({0}) dialog of schema information of DBMS. + /// Display ({0}) dialog of schema information of DBMS に類似しているローカライズされた文字列を検索します。 /// internal static string DisplaySchemaInfoDialogBox { get { @@ -124,7 +124,16 @@ internal static string DisplaySchemaInfoDialogBox { } /// - /// Looks up a localized string similar to Completion of generation of the Data layer definition information!. + /// The operation was canceled. に類似しているローカライズされた文字列を検索します。 + /// + internal static string DLayerCancelledmessage { + get { + return ResourceManager.GetString("DLayerCancelledmessage", resourceCulture); + } + } + + /// + /// Completion of generation of the Data layer definition information! に類似しているローカライズされた文字列を検索します。 /// internal static string DlayerGeneratedMessage { get { @@ -133,7 +142,7 @@ internal static string DlayerGeneratedMessage { } /// - /// Looks up a localized string similar to Entry Point:. + /// Entry Point: に類似しているローカライズされた文字列を検索します。 /// internal static string EntryPoint { get { @@ -142,7 +151,7 @@ internal static string EntryPoint { } /// - /// Looks up a localized string similar to Escape character is not set.. + /// Escape character is not set. に類似しているローカライズされた文字列を検索します。 /// internal static string EscCharacterNotSet { get { @@ -151,7 +160,7 @@ internal static string EscCharacterNotSet { } /// - /// Looks up a localized string similar to Data layer definition information file format error : There is no table name.. + /// Data layer definition information file format error : There is no table name. に類似しているローカライズされた文字列を検索します。 /// internal static string FileFormatError { get { @@ -160,7 +169,7 @@ internal static string FileFormatError { } /// - /// Looks up a localized string similar to Automatic Generation Completed !. + /// Automatic Generation Completed ! に類似しているローカライズされた文字列を検索します。 /// internal static string FileGenComplete { get { @@ -169,7 +178,7 @@ internal static string FileGenComplete { } /// - /// Looks up a localized string similar to Check error: file type information DB [{0}] does not exist.. + /// Check error: file type information DB [{0}] does not exist. に類似しているローカライズされた文字列を検索します。 /// internal static string FilenotExistDBtypeInfo { get { @@ -178,7 +187,7 @@ internal static string FilenotExistDBtypeInfo { } /// - /// Looks up a localized string similar to Check error:Defined Data layer Information file defined [{0}] does not exist.. + /// Check error:Defined Data layer Information file defined [{0}] does not exist. に類似しているローカライズされた文字列を検索します。 /// internal static string FilenotExistDlayerInfo { get { @@ -187,7 +196,7 @@ internal static string FilenotExistDlayerInfo { } /// - /// Looks up a localized string similar to Check error:. NET type information file [{0}] does not exist.. + /// Check error:. NET type information file [{0}] does not exist. に類似しているローカライズされた文字列を検索します。 /// internal static string FilenotExistNETtypeInfo { get { @@ -196,7 +205,7 @@ internal static string FilenotExistNETtypeInfo { } /// - /// Looks up a localized string similar to Go to the next table.. + /// Go to the next table. に類似しているローカライズされた文字列を検索します。 /// internal static string GotoNextTable { get { @@ -205,7 +214,7 @@ internal static string GotoNextTable { } /// - /// Looks up a localized string similar to Root folder of the input file (template file) does not exist.. + /// Root folder of the input file (template file) does not exist. に類似しているローカライズされた文字列を検索します。 /// internal static string InputFileRootFolderNotExist { get { @@ -214,7 +223,7 @@ internal static string InputFileRootFolderNotExist { } /// - /// Looks up a localized string similar to Invalid Format. + /// Invalid Format に類似しているローカライズされた文字列を検索します。 /// internal static string InvalidFormat { get { @@ -223,7 +232,7 @@ internal static string InvalidFormat { } /// - /// Looks up a localized string similar to Meta-Data Information. + /// Meta-Data Information に類似しているローカライズされた文字列を検索します。 /// internal static string MetadataInfo { get { @@ -232,7 +241,7 @@ internal static string MetadataInfo { } /// - /// Looks up a localized string similar to There is no time stamp column name.. + /// There is no time stamp column name. に類似しているローカライズされた文字列を検索します。 /// internal static string NoTimestampColName { get { @@ -241,7 +250,7 @@ internal static string NoTimestampColName { } /// - /// Looks up a localized string similar to CSV file (*.csv)|*.csv. + /// CSV file (*.csv)|*.csv に類似しているローカライズされた文字列を検索します。 /// internal static string OpenFileDialogFilter { get { @@ -250,7 +259,7 @@ internal static string OpenFileDialogFilter { } /// - /// Looks up a localized string similar to Data layer definition information file. + /// Data layer definition information file に類似しているローカライズされた文字列を検索します。 /// internal static string OpenFileDialogTitle { get { @@ -259,7 +268,7 @@ internal static string OpenFileDialogTitle { } /// - /// Looks up a localized string similar to Root folder (Dao class file, SQL file. Etc) of the output file does not exist.. + /// Root folder (Dao class file, SQL file. Etc) of the output file does not exist. に類似しているローカライズされた文字列を検索します。 /// internal static string OutputFileRootFolderNotExist { get { @@ -268,7 +277,7 @@ internal static string OutputFileRootFolderNotExist { } /// - /// Looks up a localized string similar to Specifies the root folder path (Dao file, SQL file) of the output file. + /// Specifies the root folder path (Dao file, SQL file) of the output file に類似しているローカライズされた文字列を検索します。 /// internal static string OutputFolderPath { get { @@ -277,7 +286,7 @@ internal static string OutputFolderPath { } /// - /// Looks up a localized string similar to Primary key is not defined in the table.. + /// Primary key is not defined in the table. に類似しているローカライズされた文字列を検索します。 /// internal static string PrimaryKeyNotDefined { get { @@ -286,7 +295,7 @@ internal static string PrimaryKeyNotDefined { } /// - /// Looks up a localized string similar to Reserved Word Information. + /// Reserved Word Information に類似しているローカライズされた文字列を検索します。 /// internal static string ReservedWordInfo { get { @@ -295,7 +304,7 @@ internal static string ReservedWordInfo { } /// - /// Looks up a localized string similar to Restriction Information. + /// Restriction Information に類似しているローカライズされた文字列を検索します。 /// internal static string RestrictionInfo { get { @@ -304,7 +313,7 @@ internal static string RestrictionInfo { } /// - /// Looks up a localized string similar to Is a run-time error:. + /// Is a run-time error: に類似しているローカライズされた文字列を検索します。 /// internal static string RuntimeError { get { @@ -313,7 +322,7 @@ internal static string RuntimeError { } /// - /// Looks up a localized string similar to CSV file (*.csv)|*.csv. + /// CSV file (*.csv)|*.csv に類似しているローカライズされた文字列を検索します。 /// internal static string SaveFileDialogFilter { get { @@ -322,7 +331,7 @@ internal static string SaveFileDialogFilter { } /// - /// Looks up a localized string similar to Data layer definition information file. + /// Data layer definition information file に類似しているローカライズされた文字列を検索します。 /// internal static string SaveFileDialogTitle { get { @@ -331,7 +340,7 @@ internal static string SaveFileDialogTitle { } /// - /// Looks up a localized string similar to Setting the primary key information ({0}) dialog. + /// Setting the primary key information ({0}) dialog に類似しているローカライズされた文字列を検索します。 /// internal static string SetPrimaryKeyInfo { get { @@ -340,7 +349,7 @@ internal static string SetPrimaryKeyInfo { } /// - /// Looks up a localized string similar to In front of, I can only be specified indent:.. + /// In front of, I can only be specified indent:. に類似しているローカライズされた文字列を検索します。 /// internal static string StringIndentation { get { @@ -349,7 +358,7 @@ internal static string StringIndentation { } /// - /// Looks up a localized string similar to Summary Information. + /// Summary Information に類似しているローカライズされた文字列を検索します。 /// internal static string SummaryInfo { get { @@ -358,7 +367,7 @@ internal static string SummaryInfo { } /// - /// Looks up a localized string similar to Table name, column DB-type information. + /// Table name, column DB-type information に類似しているローカライズされた文字列を検索します。 /// internal static string TableNameColDbTypeInfo { get { @@ -367,7 +376,7 @@ internal static string TableNameColDbTypeInfo { } /// - /// Looks up a localized string similar to Table name, column. NET type information -. + /// Table name, column. NET type information - に類似しているローカライズされた文字列を検索します。 /// internal static string TableNameColdotNetTypeInfo { get { @@ -376,7 +385,7 @@ internal static string TableNameColdotNetTypeInfo { } /// - /// Looks up a localized string similar to Table name, column information -. + /// Table name, column information - に類似しているローカライズされた文字列を検索します。 /// internal static string TableNameColInfo { get { @@ -385,7 +394,7 @@ internal static string TableNameColInfo { } /// - /// Looks up a localized string similar to Tab 1. + /// Tab 1 に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage1 { get { @@ -394,7 +403,7 @@ internal static string TabPage1 { } /// - /// Looks up a localized string similar to Column Information. + /// Column Information に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage1ColumnInfo { get { @@ -403,7 +412,7 @@ internal static string TabPage1ColumnInfo { } /// - /// Looks up a localized string similar to Schema Information. + /// Schema Information に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage1SchemaInfo { get { @@ -412,7 +421,7 @@ internal static string TabPage1SchemaInfo { } /// - /// Looks up a localized string similar to Table Information. + /// Table Information に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage1TableInfo { get { @@ -421,7 +430,7 @@ internal static string TabPage1TableInfo { } /// - /// Looks up a localized string similar to Tab 2. + /// Tab 2 に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage2 { get { @@ -430,7 +439,7 @@ internal static string TabPage2 { } /// - /// Looks up a localized string similar to Primary Key Information. + /// Primary Key Information に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage2PrimarykeyInfo { get { @@ -439,7 +448,7 @@ internal static string TabPage2PrimarykeyInfo { } /// - /// Looks up a localized string similar to Vieux Information. + /// Vieux Information に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage2VieuxInfo { get { @@ -448,7 +457,7 @@ internal static string TabPage2VieuxInfo { } /// - /// Looks up a localized string similar to Tab 3. + /// Tab 3 に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage3 { get { @@ -457,7 +466,7 @@ internal static string TabPage3 { } /// - /// Looks up a localized string similar to Index Column Information. + /// Index Column Information に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage3IndexColInfo { get { @@ -466,7 +475,7 @@ internal static string TabPage3IndexColInfo { } /// - /// Looks up a localized string similar to Template file does not exist. :. + /// Template file does not exist. : に類似しているローカライズされた文字列を検索します。 /// internal static string TempFilenotExists { get { @@ -475,7 +484,7 @@ internal static string TempFilenotExists { } /// - /// Looks up a localized string similar to Specifies the root folder path input file (template file). + /// Specifies the root folder path input file (template file) に類似しているローカライズされた文字列を検索します。 /// internal static string TemplateFolderPath { get { @@ -484,7 +493,7 @@ internal static string TemplateFolderPath { } /// - /// Looks up a localized string similar to ToolTip Text. + /// This field is optional. に類似しているローカライズされた文字列を検索します。 /// internal static string ToolTipText { get { @@ -493,7 +502,7 @@ internal static string ToolTipText { } /// - /// Looks up a localized string similar to Type Information. + /// Type Information に類似しているローカライズされた文字列を検索します。 /// internal static string TypeInfo { get { diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.ja-JP.resx b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.ja-JP.resx index 571748af3..9e253ea66 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.ja-JP.resx +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.ja-JP.resx @@ -144,9 +144,6 @@ 制限情報 - - ランタイムエラーです: - CSVファイル(*.csv)|*.csv diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.resx b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.resx index 6f2f68679..b6800b9f3 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.resx +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.resx @@ -144,9 +144,6 @@ Restriction Information - - There is Run time error : - CSV file (*.csv)|*.csv diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/app.config b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/app.config index a1688ebdb..d171b32a9 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/app.config +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/app.config @@ -38,7 +38,7 @@ - + @@ -58,7 +58,7 @@ - + @@ -78,7 +78,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -115,7 +115,7 @@ - + @@ -135,7 +135,7 @@ - + @@ -148,7 +148,7 @@ - + @@ -186,14 +186,14 @@ - + - + @@ -211,7 +211,7 @@ - + diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/appsettings.json b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/appsettings.json new file mode 100644 index 000000000..74dae595a --- /dev/null +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/appsettings.json @@ -0,0 +1,216 @@ +{ + // appSettings section + "appSettings": { + + // ͍ځij + + // ڑ + "ConnectionString_SQL": "Data Source=localhost\\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;", + "ConnectionString_ODBC": "Dsn=odbc_test1", + "ConnectionString_ODP": "User Id=SCOTT;Password=tiger;Data Source=localhost/XE;", + "ConnectionString_MCN": "Server=localhost;Database=test;User Id=root;Password=seigi@123", + "ConnectionString_NPS": "HOST=localhost;DATABASE=postgres;USER ID=postgres;PASSWORD=seigi@123;", + + // tH_ + "InputFilesRoot": "C:\\", + "OutputFilesRoot": "C:\\", + + // pҖ + "FamilyName": "", + "PersonalName": "Y", + + // ͍ځiev[gj + + // DaoNX ev[g t@Cigqj + "DaoTemplateFileName": "DaoTemplate", + + // EntityNX ev[g t@Cigqj + "EntityTemplateFileName": "EntityTemplate", + // DataSetNX ev[g t@C + "DataSetTemplateFileName": "DataSetTemplate.xsd", + + // eiX ev[g t@C + "TableAdapterTemplateFileName": "TableAdapter", + "ConditionalSearchTemplateFileName": "ConditionalSearch.aspx", + "SearchAndUpdateTemplateFileName": "SearchAndUpdate.aspx", + "DetailTemplateFileName": "Detail.aspx", + + // SQL ev[g t@C + // ÓI + "InsertTemplateFileName": "s1_InsertTemplate.sql", + "SelectTemplateFileName": "s2_SelectTemplate.xml", + "UpdateTemplateFileName": "s3_UpdateTemplate.xml", + "DeleteTemplateFileName": "s4_DeleteTemplate.xml", + + // I + "DynInsTemplateFileName": "d1_DynInsTemplate.xml", + "DynSelTemplateFileName": "d2_DynSelTemplate.xml", + "DynUpdTemplateFileName": "d3_DynUpdTemplate.xml", + "DynDelTemplateFileName": "d4_DynDelTemplate.xml", + + // g\bhp + "DynSelCntTemplateFileName": "d5_DynSelCntTemplate.xml", + + // o͍ + // DaoNX t@C̃wb_Etb^ + // DaoNX̃wb_Etb^ + "DaoClassNameHeader": "Dao", + "DaoClassNameFooter": "", + + // EntityNX t@C̃wb_Etb^ + // EntityNX̃wb_Etb^ + "EntityClassNameHeader": "", + "EntityClassNameFooter": "Entity", + + // DataSetNX t@C̃wb_Etb^ + // DataSetNX̃wb_Etb^ + "DataSetClassNameHeader": "", + "DataSetClassNameFooter": "DataSet", + + // DataTableNX̃wb_Etb^ + // DataTableNX̃wb_Etb^ + "DataTableClassNameHeader": "", + "DataTableClassNameFooter": "DataTable", + + // \bhCRUD + "MethodLabel_Ins": "1_Insert", + "MethodLabel_Sel": "2_Select", + "MethodLabel_Upd": "3_Update", + "MethodLabel_Del": "4_Delete", + "MethodLabel_SelCnt": "5_SelCnt", + + // \bh̃wb_Etb^iÓIj + "MethodNameHeaderS": "S", + "MethodNameFooterS": "", + + // \bh̃wb_Etb^iIj + "MethodNameHeaderD": "D", + "MethodNameFooterD": "", + + // Updatẽp^̃wb_Etb^ + "UpdateParamHeader": "Set_", + "UpdateParamFooter": "_forUPD", + + // Likẽp^̃wb_Etb^ + "LikeParamHeader": "", + "LikeParamFooter": "_Like", + + // SQLt@C̃wb_Etb^ + // @SQLt@ĆADaoNX{\bhƂB + + // f[^ + // ev[g̒u + + // + "RpFileName": "_FileName_", + "RpTimeStamp": "_TimeStamp_", + "RpUserName": "_UserName_", + + "RpTableName": "_TableName_", + "RpColumnName": "_ColumnName_", + + "RpAllColumnList": "_AllColumnList_", + "RpPKColumnList": "_PKColumnList_", + + "CcLoopStart_PKColumn": "ControlComment:LoopStart-PKColumn", + "CcLoopEnd_PKColumn": "ControlComment:LoopEnd-PKColumn", + + "CcLoopStart_ElseColumn": "ControlComment:LoopStart-ElseColumn", + "CcLoopEnd_ElseColumn": "ControlComment:LoopEnd-ElseColumn", + + "CcIsRequired_TimeStamp": "ControlComment:IsRequired-TimeStamp", + + // SQL + "RpXMLEncoding": "_XMLEncoding_", + + "RpAllColumnListSQL": "_AllColumnListSQL_", + "RpPKColumnListSQL": "_PKColumnListSQL_", + + "RpAllColumnListTableAdapterSQL": "_AllColumnListTableAdapterSQL_", + "RpTimeStampColName": "_TimeStampColName_", + + "RpColumnsCondition": "_ColumnsCondition_", + "RpDynColsCondition": "_DynColsCondition_", + "RpDynColsCondition_Like": "_DynColsConditionLike_", + + // "RpInsertColumns": "_InsertColumns_", + "RpDynInsColumns": "_DynInsColumns_", + + "RpInsertParameters": "_InsertParameters_", + "RpDynInsParameters": "_DynInsParameters_", + + // "RpUpdateParameters": "_UpdateParameters_", + "RpDynUpdParameters": "_DynUpdParameters_", + + // Daoit@Cj + "RpDaoClassName": "_DaoClassName_", + + // vpeB vV[W + "CcLoopStart_PPUpdSet": "ControlComment:LoopStart-PPUpdSet", + "CcLoopEnd_PPUpdSet": "ControlComment:LoopEnd-PPUpdSet", + + "CcLoopStart_PPLike": "ControlComment:LoopStart-PPLike", + "CcLoopEnd_PPLike": "ControlComment:LoopEnd-PPLike", + + // \bh + "RpInsertMethodName": "_InsertMethodName_", + "RpDynInsMethodName": "_DynInsMethodName_", + + "RpSelectMethodName": "_SelectMethodName_", + "RpDynSelMethodName": "_DynSelMethodName_", + + "RpUpdateMethodName": "_UpdateMethodName_", + "RpDynUpdMethodName": "_DynUpdMethodName_", + + "RpDeleteMethodName": "_DeleteMethodName_", + "RpDynDelMethodName": "_DynDelMethodName_", + + // g\bh + "RpDynSelCntMethodName": "_DynSelCntMethodName_", + + // EntityNXit@Cj + "RpEntityClassName": "_EntityClassName_", + "RpEntityTypeInfo": "_EntityTypeInfo_", + + // DataSetNXit@Cj + "RpDataSetClassName": "_DataSetClassName_", + "RpDataTableClassName": "_DataTableClassName_", + "RpXSDTypeInfo": "_XSDTypeInfo_", + + // SQLt@C + "RpInsertFileName": "_InsertFileName_", + "RpDynInsFileName": "_DynInsFileName_", + + "RpSelectFileName": "_SelectFileName_", + "RpDynSelFileName": "_DynSelFileName_", + + "RpUpdateFileName": "_UpdateFileName_", + "RpDynUpdFileName": "_DynUpdFileName_", + + "RpDeleteFileName": "_DeleteFileName_", + "RpDynDelFileName": "_DynDelFileName_", + + // g\bhpt@C + "RpDynSelCntFileName": "_DynSelCntFileName_", + + // ASPX + "RpCodebehindLanguage": "_CodebehindLanguage_", + "RpClassTemplateFileExtension": "_ClassTemplateFileExtension_", + + // CODE + "RpCommentOut": "_CommentOut_", + "RpPKFirstColumn": "_PKFirstColumn_", + // GridView Header Column Number + "RpColumnNmbr": "_ColumnNmbr_", + // For Internationalization Test + "DefaultCulture": "ja-JP", + + // Add Data Providers from tool + "RpDBMS": "_DBMS_", + "RpDAP": "_DAP_", + + // Get Document from tool + "LnkHelpDoc_En": "https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/1_User_Guide/en/5_User_Guide(D_Layer_Automatic_Generation)_EN.doc", + "LnkHelpDoc_Ja": "https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/1_User_Guide/ja-JP/5_User_Guide(D_Layer_Automatic_Generation).doc" + } +} \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Tools/DeployZipPackWithHTTP/DeployZipPackWithHTTP.csproj b/root/programs/CS/Frameworks/Tools/DeployZipPackWithHTTP/DeployZipPackWithHTTP.csproj index e769778a4..4192c8725 100644 --- a/root/programs/CS/Frameworks/Tools/DeployZipPackWithHTTP/DeployZipPackWithHTTP.csproj +++ b/root/programs/CS/Frameworks/Tools/DeployZipPackWithHTTP/DeployZipPackWithHTTP.csproj @@ -82,11 +82,11 @@ False ..\..\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll - False ..\..\Infrastructure\Build\OpenTouryo.Public.dll + diff --git a/root/programs/CS/NuGet/DamManagedOdp.nuspec b/root/programs/CS/NuGet/DamManagedOdp.nuspec index ba8df7549..39df53041 100644 --- a/root/programs/CS/NuGet/DamManagedOdp.nuspec +++ b/root/programs/CS/NuGet/DamManagedOdp.nuspec @@ -3,11 +3,12 @@ Touryo.Infrastructure.Public.Db.DamManagedOdp OpenTouryo.DamManagedOdp - 2.5.0 + 2.6.0 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp + _OpenTouryo.png https://opentouryo.osscons.jp/OpenTouryo.ico true DataAccess library of Oracle.ManagedDataAccess in OpenTouryo. @@ -16,17 +17,19 @@ OpenTouryo Open棟梁 - - + + - - + + + + diff --git a/root/programs/CS/NuGet/DamMySQL.nuspec b/root/programs/CS/NuGet/DamMySQL.nuspec index 7ca2dbbfe..5981c010c 100644 --- a/root/programs/CS/NuGet/DamMySQL.nuspec +++ b/root/programs/CS/NuGet/DamMySQL.nuspec @@ -3,11 +3,12 @@ Touryo.Infrastructure.Public.Db.DamMySQL OpenTouryo.DamMySQL - 2.5.0 + 2.6.0 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL + _OpenTouryo.png https://opentouryo.osscons.jp/OpenTouryo.ico true DataAccess library of MySql.Data in OpenTouryo. @@ -16,18 +17,20 @@ OpenTouryo Open棟梁 - - + + - - + + + + diff --git a/root/programs/CS/NuGet/DamPstGrS.nuspec b/root/programs/CS/NuGet/DamPstGrS.nuspec index ab5923a93..e1e5e0006 100644 --- a/root/programs/CS/NuGet/DamPstGrS.nuspec +++ b/root/programs/CS/NuGet/DamPstGrS.nuspec @@ -3,11 +3,12 @@ Touryo.Infrastructure.Public.Db.DamPstGrS OpenTouryo.DamPstGrS - 2.5.0 + 2.6.0 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS + _OpenTouryo.png https://opentouryo.osscons.jp/OpenTouryo.ico true DataAccess library of Npgsql in OpenTouryo. @@ -16,20 +17,22 @@ OpenTouryo Open棟梁 - - + + - - + + + + diff --git a/root/programs/CS/NuGet/Framework.RichClient.nuspec b/root/programs/CS/NuGet/Framework.RichClient.nuspec index 018a94989..2d10a65e1 100644 --- a/root/programs/CS/NuGet/Framework.RichClient.nuspec +++ b/root/programs/CS/NuGet/Framework.RichClient.nuspec @@ -3,11 +3,12 @@ Touryo.Infrastructure.Framework.RichClient OpenTouryo.Framework.RichClient - 2.5.0 + 2.6.0 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient + _OpenTouryo.png https://opentouryo.osscons.jp/OpenTouryo.ico true RichClient Framework of OpenTouryo. @@ -16,15 +17,17 @@ OpenTouryo Open棟梁 - - - + + + - + + + diff --git a/root/programs/CS/NuGet/Framework.nuspec b/root/programs/CS/NuGet/Framework.nuspec index c7c5b5c2a..e200e8997 100644 --- a/root/programs/CS/NuGet/Framework.nuspec +++ b/root/programs/CS/NuGet/Framework.nuspec @@ -3,11 +3,12 @@ Touryo.Infrastructure.Framework OpenTouryo.Framework - 2.5.0 + 2.6.0 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/root/programs/CS/Frameworks/Infrastructure/Framework + _OpenTouryo.png https://opentouryo.osscons.jp/OpenTouryo.ico true Framework of OpenTouryo. @@ -16,8 +17,8 @@ OpenTouryo Open棟梁 - - + + @@ -26,8 +27,8 @@ - - + + @@ -37,6 +38,8 @@ + + diff --git a/root/programs/CS/NuGet/Public.Security.nuspec b/root/programs/CS/NuGet/Public.Security.nuspec index 62e578f29..00fe3775e 100644 --- a/root/programs/CS/NuGet/Public.Security.nuspec +++ b/root/programs/CS/NuGet/Public.Security.nuspec @@ -3,11 +3,12 @@ Touryo.Infrastructure.Public.Security OpenTouryo.Public.Security - 2.5.0 + 2.6.0 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/root/programs/CS/Frameworks/Infrastructure/Public + _OpenTouryo.png https://opentouryo.osscons.jp/OpenTouryo.ico true Common library of OpenTouryo. @@ -16,14 +17,14 @@ OpenTouryo Open棟梁 - - + + - - + + @@ -33,6 +34,8 @@ + + diff --git a/root/programs/CS/NuGet/Public.nuspec b/root/programs/CS/NuGet/Public.nuspec index 8b87c3222..db6f887db 100644 --- a/root/programs/CS/NuGet/Public.nuspec +++ b/root/programs/CS/NuGet/Public.nuspec @@ -3,11 +3,12 @@ Touryo.Infrastructure.Public OpenTouryo.Public - 2.5.0 + 2.6.0 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/root/programs/CS/Frameworks/Infrastructure/Public + _OpenTouryo.png https://opentouryo.osscons.jp/OpenTouryo.ico true Common library of OpenTouryo. @@ -16,12 +17,12 @@ OpenTouryo Open棟梁 - + - + @@ -36,6 +37,8 @@ + + diff --git a/root/programs/CS/NuGet/Symbol_DamManagedOdp.nuspec b/root/programs/CS/NuGet/Symbol_DamManagedOdp.nuspec index 0d9b2269e..2b44da61d 100644 --- a/root/programs/CS/NuGet/Symbol_DamManagedOdp.nuspec +++ b/root/programs/CS/NuGet/Symbol_DamManagedOdp.nuspec @@ -3,11 +3,12 @@ Touryo.Infrastructure.Public.Db.DamManagedOdp OpenTouryo.DamManagedOdp - 2.5.0 + 2.6.0 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp + _OpenTouryo.png https://opentouryo.osscons.jp/OpenTouryo.ico true DataAccess library of Oracle.ManagedDataAccess in OpenTouryo. @@ -16,17 +17,19 @@ OpenTouryo Open棟梁 - - + + - - + + + + diff --git a/root/programs/CS/NuGet/Symbol_DamMySQL.nuspec b/root/programs/CS/NuGet/Symbol_DamMySQL.nuspec index f3c35da2c..5c5322d12 100644 --- a/root/programs/CS/NuGet/Symbol_DamMySQL.nuspec +++ b/root/programs/CS/NuGet/Symbol_DamMySQL.nuspec @@ -3,11 +3,12 @@ Touryo.Infrastructure.Public.Db.DamMySQL OpenTouryo.DamMySQL - 2.5.0 + 2.6.0 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL + _OpenTouryo.png https://opentouryo.osscons.jp/OpenTouryo.ico true DataAccess library of MySql.Data in OpenTouryo. @@ -16,18 +17,20 @@ OpenTouryo Open棟梁 - - + + - - + + + + diff --git a/root/programs/CS/NuGet/Symbol_DamPstGrS.nuspec b/root/programs/CS/NuGet/Symbol_DamPstGrS.nuspec index 8dad8a073..b3a300653 100644 --- a/root/programs/CS/NuGet/Symbol_DamPstGrS.nuspec +++ b/root/programs/CS/NuGet/Symbol_DamPstGrS.nuspec @@ -3,11 +3,12 @@ Touryo.Infrastructure.Public.Db.DamPstGrS OpenTouryo.DamPstGrS - 2.5.0 + 2.6.0 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS + _OpenTouryo.png https://opentouryo.osscons.jp/OpenTouryo.ico true DataAccess library of Npgsql in OpenTouryo. @@ -16,20 +17,22 @@ OpenTouryo Open棟梁 - - + + - - + + + + diff --git a/root/programs/CS/NuGet/Symbol_Framework.RichClient.nuspec b/root/programs/CS/NuGet/Symbol_Framework.RichClient.nuspec index ab13747fe..3803c6b34 100644 --- a/root/programs/CS/NuGet/Symbol_Framework.RichClient.nuspec +++ b/root/programs/CS/NuGet/Symbol_Framework.RichClient.nuspec @@ -3,11 +3,12 @@ Touryo.Infrastructure.Framework.RichClient OpenTouryo.Framework.RichClient - 2.5.0 + 2.6.0 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient + _OpenTouryo.png https://opentouryo.osscons.jp/OpenTouryo.ico true RichClient Framework of OpenTouryo. @@ -16,15 +17,17 @@ OpenTouryo Open棟梁 - - - + + + - + + + diff --git a/root/programs/CS/NuGet/Symbol_Framework.nuspec b/root/programs/CS/NuGet/Symbol_Framework.nuspec index 7f613be85..ffc2fd498 100644 --- a/root/programs/CS/NuGet/Symbol_Framework.nuspec +++ b/root/programs/CS/NuGet/Symbol_Framework.nuspec @@ -3,11 +3,12 @@ Touryo.Infrastructure.Framework OpenTouryo.Framework - 2.5.0 + 2.6.0 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/root/programs/CS/Frameworks/Infrastructure/Framework + _OpenTouryo.png https://opentouryo.osscons.jp/OpenTouryo.ico true Framework of OpenTouryo. @@ -16,8 +17,8 @@ OpenTouryo Open棟梁 - - + + @@ -26,8 +27,8 @@ - - + + @@ -37,6 +38,8 @@ + + diff --git a/root/programs/CS/NuGet/Symbol_Public.Security.nuspec b/root/programs/CS/NuGet/Symbol_Public.Security.nuspec index eb56a342a..c4ddf805d 100644 --- a/root/programs/CS/NuGet/Symbol_Public.Security.nuspec +++ b/root/programs/CS/NuGet/Symbol_Public.Security.nuspec @@ -3,11 +3,12 @@ Touryo.Infrastructure.Public.Security OpenTouryo.Public.Security - 2.5.0 + 2.6.0 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/root/programs/CS/Frameworks/Infrastructure/Public + _OpenTouryo.png https://opentouryo.osscons.jp/OpenTouryo.ico true Common library of OpenTouryo. @@ -16,14 +17,14 @@ OpenTouryo Open棟梁 - - + + - - + + @@ -33,6 +34,8 @@ + + diff --git a/root/programs/CS/NuGet/Symbol_Public.nuspec b/root/programs/CS/NuGet/Symbol_Public.nuspec index 1e8880506..056b45eab 100644 --- a/root/programs/CS/NuGet/Symbol_Public.nuspec +++ b/root/programs/CS/NuGet/Symbol_Public.nuspec @@ -3,11 +3,12 @@ Touryo.Infrastructure.Public OpenTouryo.Public - 2.5.0 + 2.6.0 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/root/programs/CS/Frameworks/Infrastructure/Public + _OpenTouryo.png https://opentouryo.osscons.jp/OpenTouryo.ico true Common library of OpenTouryo. @@ -16,12 +17,12 @@ OpenTouryo Open棟梁 - + - + @@ -36,6 +37,8 @@ + + diff --git a/root/programs/CS/NuGet/_OpenTouryo.png b/root/programs/CS/NuGet/_OpenTouryo.png new file mode 100644 index 000000000..658762440 Binary files /dev/null and b/root/programs/CS/NuGet/_OpenTouryo.png differ diff --git a/root/programs/CS/NuGet/symbol_template.nuspec b/root/programs/CS/NuGet/symbol_template.nuspec index 4962845dd..b07068680 100644 --- a/root/programs/CS/NuGet/symbol_template.nuspec +++ b/root/programs/CS/NuGet/symbol_template.nuspec @@ -8,6 +8,7 @@ daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/・・・ + images\[*.png, *.iconなどの64*64の画像] [*.png, *.iconなどの64*64の画像] true [概要説明を記入する] @@ -20,10 +21,12 @@ + + - - + + \ No newline at end of file diff --git a/root/programs/CS/NuGet/template.nuspec b/root/programs/CS/NuGet/template.nuspec index ee3111a41..5c0e71e18 100644 --- a/root/programs/CS/NuGet/template.nuspec +++ b/root/programs/CS/NuGet/template.nuspec @@ -8,6 +8,7 @@ daisukenishino77 Apache-2.0 https://github.com/OpenTouryoProject/OpenTouryo/tree/master/・・・ + images\[*.png, *.iconなどの64*64の画像] [*.png, *.iconなどの64*64の画像] true [概要説明を記入する] @@ -20,6 +21,8 @@ + + diff --git a/root/programs/CS/Samples/2CS_sample/2CSClientWPF_sample/app.config b/root/programs/CS/Samples/2CS_sample/2CSClientWPF_sample/app.config index b77aa4355..2e1564550 100644 --- a/root/programs/CS/Samples/2CS_sample/2CSClientWPF_sample/app.config +++ b/root/programs/CS/Samples/2CS_sample/2CSClientWPF_sample/app.config @@ -1,7 +1,7 @@ - + @@ -21,39 +21,44 @@ - + - - + + - - + + + - + + - - - - - - - - - + + + + + + + + + + + + - + diff --git a/root/programs/CS/Samples/2CS_sample/2CSClientWin_sample/app.config b/root/programs/CS/Samples/2CS_sample/2CSClientWin_sample/app.config index f7b5dbeb2..3a82195b4 100644 --- a/root/programs/CS/Samples/2CS_sample/2CSClientWin_sample/app.config +++ b/root/programs/CS/Samples/2CS_sample/2CSClientWin_sample/app.config @@ -57,16 +57,16 @@ - + - + - + diff --git a/root/programs/CS/Samples/2CS_sample/GenDaoAndBatUpd_sample/app.config b/root/programs/CS/Samples/2CS_sample/GenDaoAndBatUpd_sample/app.config index b712a7713..bc4d130f6 100644 --- a/root/programs/CS/Samples/2CS_sample/GenDaoAndBatUpd_sample/app.config +++ b/root/programs/CS/Samples/2CS_sample/GenDaoAndBatUpd_sample/app.config @@ -1,40 +1,46 @@ - + - + - + - - - - + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj b/root/programs/CS/Samples/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj index ff56b0027..db18a5aea 100644 --- a/root/programs/CS/Samples/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj +++ b/root/programs/CS/Samples/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj @@ -8,7 +8,7 @@ {386EA604-40DB-44A8-87AE-F29B209BA9CF} WinExe Properties - _TimeStamp_sample + TimeStamp_sample TimeStamp_sample v4.6 @@ -238,15 +238,9 @@ Always - - Always - Always - - Always - - + + - + - + - - - - - - - - - - - + + + + + + + + + + + + + + - + + + - + diff --git a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj index db68c015a..33dcd210c 100644 --- a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj +++ b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj @@ -31,6 +31,7 @@ false false true + true true diff --git a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/app.config b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/app.config index 543368267..6734fd9de 100644 --- a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/app.config +++ b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/app.config @@ -28,48 +28,17 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config index 5395b3d87..826dc22ff 100644 --- a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config +++ b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config @@ -48,10 +48,10 @@ - + - + diff --git a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin_sample/app.config b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin_sample/app.config index 44268a253..ff7de67d9 100644 --- a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin_sample/app.config +++ b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin_sample/app.config @@ -62,10 +62,10 @@ - + - + diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/App_Start/BundleConfig.cs b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/App_Start/BundleConfig.cs index 624ab1c2d..e1c467897 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/App_Start/BundleConfig.cs +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/App_Start/BundleConfig.cs @@ -38,7 +38,7 @@ public static void RegisterBundles(BundleCollection bundles) { // see : https://www.asp.net/ajax/cdn - string jqueryVersion = "3.3.1"; + string jqueryVersion = "3.4.1"; BundleTable.EnableOptimizations = true; BundleTable.Bundles.UseCdn = true; // same as: bundles.UseCdn = true; @@ -62,7 +62,7 @@ public static void RegisterBundles(BundleCollection bundles) bundles.Add(new ScriptBundle( "~/bundles/jqueryval", - "//ajax.aspnetcdn.com/ajax/jquery.validate/1.16.0/jquery.validate.min.js") + "//ajax.aspnetcdn.com/ajax/jquery.validate/1.17.0/jquery.validate.min.js") { CdnFallbackExpression = "window.jQuery.validator" }.Include("~/Scripts/jquery.validate.js")); @@ -88,7 +88,7 @@ public static void RegisterBundles(BundleCollection bundles) bundles.Add(new ScriptBundle( "~/bundles/bootstrap", - "//ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js") + "//ajax.aspnetcdn.com/ajax/bootstrap/4.3.1/bootstrap.min.js") { CdnFallbackExpression = "window.jQuery.fn.modal" }.Include("~/Scripts/bootstrap.js")); diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Controllers/HomeController.cs b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Controllers/HomeController.cs index e84ca0bd8..688e20c53 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Controllers/HomeController.cs +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Controllers/HomeController.cs @@ -147,7 +147,7 @@ public ActionResult Login(LoginViewModel model) { // 外部ログイン return Redirect(string.Format( - "https://localhost:44300/MultiPurposeAuthSite/Account/OAuth2Authorize" + "https://localhost:44300/MultiPurposeAuthSite/authorize" + "?client_id=" + OAuth2AndOIDCParams.ClientID + "&response_type=code" + "&scope=profile%20email%20phone%20address%20openid" diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/MVC_Sample.csproj b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/MVC_Sample.csproj index ec34a355f..b9bd2cbf7 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/MVC_Sample.csproj +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/MVC_Sample.csproj @@ -17,23 +17,15 @@ v4.6 false true + - true - - - - - 12.0 - - ..\ - true - + true 3.0 @@ -56,19 +48,19 @@ ..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll - True - - ..\packages\Microsoft.Owin.4.0.0\lib\net451\Microsoft.Owin.dll + + + ..\packages\Microsoft.Owin.4.0.1\lib\net45\Microsoft.Owin.dll - - ..\packages\Microsoft.Owin.Host.SystemWeb.4.0.0\lib\net451\Microsoft.Owin.Host.SystemWeb.dll + + ..\packages\Microsoft.Owin.Host.SystemWeb.4.0.1\lib\net45\Microsoft.Owin.Host.SystemWeb.dll - - ..\packages\Microsoft.Owin.Security.4.0.0\lib\net451\Microsoft.Owin.Security.dll + + ..\packages\Microsoft.Owin.Security.4.0.1\lib\net45\Microsoft.Owin.Security.dll - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + + ..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll @@ -76,17 +68,16 @@ ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.Security.dll + + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + ..\packages\Owin.1.0\lib\net40\Owin.dll True - - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll - @@ -96,8 +87,8 @@ - - ..\packages\Microsoft.AspNet.WebApi.Client.5.2.6\lib\net45\System.Net.Http.Formatting.dll + + ..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll ..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net46\System.Security.Cryptography.Algorithms.dll @@ -115,43 +106,64 @@ - ..\packages\Microsoft.AspNet.WebPages.3.2.6\lib\net45\System.Web.Helpers.dll + ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.Helpers.dll - - ..\packages\Microsoft.AspNet.WebApi.Core.5.2.6\lib\net45\System.Web.Http.dll + + ..\packages\Microsoft.AspNet.WebApi.Core.5.2.7\lib\net45\System.Web.Http.dll - - ..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.6\lib\net45\System.Web.Http.WebHost.dll + + ..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.7\lib\net45\System.Web.Http.WebHost.dll - - ..\packages\Microsoft.AspNet.Mvc.5.2.6\lib\net45\System.Web.Mvc.dll + + ..\packages\Microsoft.AspNet.Mvc.5.2.7\lib\net45\System.Web.Mvc.dll ..\packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll - True - ..\packages\Microsoft.AspNet.Razor.3.2.6\lib\net45\System.Web.Razor.dll + ..\packages\Microsoft.AspNet.Razor.3.2.7\lib\net45\System.Web.Razor.dll - - True - ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll - - ..\packages\Microsoft.AspNet.WebPages.3.2.6\lib\net45\System.Web.WebPages.dll + ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.dll - ..\packages\Microsoft.AspNet.WebPages.3.2.6\lib\net45\System.Web.WebPages.Deployment.dll + ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Deployment.dll - ..\packages\Microsoft.AspNet.WebPages.3.2.6\lib\net45\System.Web.WebPages.Razor.dll + ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Razor.dll - ..\packages\WebGrease.1.6.0\lib\WebGrease.dll + + + + + + + + + + + + + + + + + + + + + + True + ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll + + + True + ..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll @@ -207,14 +219,6 @@ - - - - - - - - @@ -225,15 +229,23 @@ - - - - - + + + + + + + + + + + + + + + - - @@ -287,15 +299,15 @@ - - - + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js index 3ae4fe132..d50c0f549 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js @@ -1,6 +1,6 @@ /**! * @fileOverview Kickass library to create and place poppers near their reference elements. - * @version 1.14.0 + * @version 1.14.3 * @license * Copyright (c) 2016 Federico Zivolo and contributors * @@ -87,40 +87,27 @@ function getScrollParent(element) { return getScrollParent(getParentNode(element)); } +var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; + +var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); +var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); + /** - * Tells if you are running Internet Explorer + * Determines if the browser is Internet Explorer * @method * @memberof Popper.Utils - * @argument {number} version to check + * @param {Number} version to check * @returns {Boolean} isIE */ -var cache = {}; - -var isIE = function () { - var version = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'all'; - - version = version.toString(); - if (cache.hasOwnProperty(version)) { - return cache[version]; +function isIE(version) { + if (version === 11) { + return isIE11; } - switch (version) { - case '11': - cache[version] = navigator.userAgent.indexOf('Trident') !== -1; - break; - case '10': - cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1; - break; - case 'all': - cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1; - break; + if (version === 10) { + return isIE10; } - - //Set IE - cache.all = cache.all || Object.keys(cache).some(function (key) { - return cache[key]; - }); - return cache[version]; -}; + return isIE11 || isIE10; +} /** * Returns the offset parent of the given element @@ -629,7 +616,6 @@ function computeAutoPlacement(placement, refRect, popper, reference, boundariesE return computedPlacement + (variation ? '-' + variation : ''); } -var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; var timeoutDuration = 0; for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js.map b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js.map index bb8f0f500..457818e91 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js.map +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js.map @@ -1 +1 @@ -{"version":3,"file":"popper-utils.js","sources":["../../src/utils/getStyleComputedProperty.js","../../src/utils/getParentNode.js","../../src/utils/getScrollParent.js","../../src/utils/isIE.js","../../src/utils/getOffsetParent.js","../../src/utils/isOffsetContainer.js","../../src/utils/getRoot.js","../../src/utils/findCommonOffsetParent.js","../../src/utils/getScroll.js","../../src/utils/includeScroll.js","../../src/utils/getBordersSize.js","../../src/utils/getWindowSizes.js","../../src/utils/getClientRect.js","../../src/utils/getBoundingClientRect.js","../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../src/utils/isFixed.js","../../src/utils/getFixedPositionOffsetParent.js","../../src/utils/getBoundaries.js","../../src/utils/computeAutoPlacement.js","../../src/utils/debounce.js","../../src/utils/find.js","../../src/utils/findIndex.js","../../src/utils/getOffsetRect.js","../../src/utils/getOuterSizes.js","../../src/utils/getOppositePlacement.js","../../src/utils/getPopperOffsets.js","../../src/utils/getReferenceOffsets.js","../../src/utils/getSupportedPropertyName.js","../../src/utils/isFunction.js","../../src/utils/isModifierEnabled.js","../../src/utils/isModifierRequired.js","../../src/utils/isNumeric.js","../../src/utils/getWindow.js","../../src/utils/removeEventListeners.js","../../src/utils/runModifiers.js","../../src/utils/setAttributes.js","../../src/utils/setStyles.js","../../src/utils/setupEventListeners.js","../../src/utils/index.js"],"sourcesContent":["/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nconst cache = {};\n\nexport default function (version = 'all') {\n version = version.toString();\n if(cache.hasOwnProperty(version)){\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(key => cache[key]);\n return cache[version];\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import getWindowSizes from './getWindowSizes';\nimport getClientRect from './getClientRect';\n\n/**\n * Get the position of the given element, relative to its offset parent\n * @method\n * @memberof Popper.Utils\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\nexport default function getOffsetRect(element) {\n let elementRect;\n if (element.nodeName === 'HTML') {\n const { width, height } = getWindowSizes();\n elementRect = {\n width,\n height,\n left: 0,\n top: 0,\n };\n } else {\n elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop,\n };\n }\n\n // position\n return getClientRect(elementRect);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import computeAutoPlacement from './computeAutoPlacement';\nimport debounce from './debounce';\nimport findIndex from './findIndex';\nimport getBordersSize from './getBordersSize';\nimport getBoundaries from './getBoundaries';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getClientRect from './getClientRect';\nimport getOffsetParent from './getOffsetParent';\nimport getOffsetRect from './getOffsetRect';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getOuterSizes from './getOuterSizes';\nimport getParentNode from './getParentNode';\nimport getPopperOffsets from './getPopperOffsets';\nimport getReferenceOffsets from './getReferenceOffsets';\nimport getScroll from './getScroll';\nimport getScrollParent from './getScrollParent';\nimport getStyleComputedProperty from './getStyleComputedProperty';\nimport getSupportedPropertyName from './getSupportedPropertyName';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport isFunction from './isFunction';\nimport isModifierEnabled from './isModifierEnabled';\nimport isModifierRequired from './isModifierRequired';\nimport isNumeric from './isNumeric';\nimport removeEventListeners from './removeEventListeners';\nimport runModifiers from './runModifiers';\nimport setAttributes from './setAttributes';\nimport setStyles from './setStyles';\nimport setupEventListeners from './setupEventListeners';\n\n/** @namespace Popper.Utils */\nexport {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n\n// This is here just for backward compatibility with versions lower than v1.10.3\n// you should import the utilities using named exports, if you want them all use:\n// ```\n// import * as PopperUtils from 'popper-utils';\n// ```\n// The default export will be removed in the next major version.\nexport default {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n"],"names":["getStyleComputedProperty","element","property","nodeType","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","document","body","ownerDocument","overflow","overflowX","overflowY","test","cache","version","toString","hasOwnProperty","navigator","userAgent","indexOf","appVersion","all","Object","keys","some","key","getOffsetParent","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","getClientRect","offsets","width","height","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isIE10","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","window","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","getArea","computeAutoPlacement","placement","refRect","rects","sortedAreas","map","sort","a","b","area","filteredAreas","filter","computedPlacement","length","variation","split","isBrowser","longerTimeoutBrowsers","timeoutDuration","i","microtaskDebounce","fn","called","Promise","resolve","then","taskDebounce","scheduled","supportsMicroTasks","find","arr","check","Array","prototype","findIndex","prop","value","cur","match","obj","getOffsetRect","elementRect","offsetLeft","offsetTop","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","getReferenceOffsets","state","commonOffsetParent","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","slice","prefix","toCheck","style","isFunction","functionToCheck","getType","call","isModifierEnabled","modifiers","modifierName","name","enabled","isModifierRequired","requestingName","requestedName","requesting","isRequired","requested","warn","isNumeric","n","isNaN","isFinite","getWindow","defaultView","removeEventListeners","removeEventListener","updateBound","scrollParents","forEach","scrollElement","eventsEnabled","runModifiers","data","ends","modifiersToRun","undefined","setAttributes","attributes","setAttribute","removeAttribute","setStyles","unit","attachToScrollParents","event","callback","isBody","target","addEventListener","passive","push","setupEventListeners","options"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"popper-utils.js","sources":["../../src/utils/getStyleComputedProperty.js","../../src/utils/getParentNode.js","../../src/utils/getScrollParent.js","../../src/utils/isBrowser.js","../../src/utils/isIE.js","../../src/utils/getOffsetParent.js","../../src/utils/isOffsetContainer.js","../../src/utils/getRoot.js","../../src/utils/findCommonOffsetParent.js","../../src/utils/getScroll.js","../../src/utils/includeScroll.js","../../src/utils/getBordersSize.js","../../src/utils/getWindowSizes.js","../../src/utils/getClientRect.js","../../src/utils/getBoundingClientRect.js","../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../src/utils/isFixed.js","../../src/utils/getFixedPositionOffsetParent.js","../../src/utils/getBoundaries.js","../../src/utils/computeAutoPlacement.js","../../src/utils/debounce.js","../../src/utils/find.js","../../src/utils/findIndex.js","../../src/utils/getOffsetRect.js","../../src/utils/getOuterSizes.js","../../src/utils/getOppositePlacement.js","../../src/utils/getPopperOffsets.js","../../src/utils/getReferenceOffsets.js","../../src/utils/getSupportedPropertyName.js","../../src/utils/isFunction.js","../../src/utils/isModifierEnabled.js","../../src/utils/isModifierRequired.js","../../src/utils/isNumeric.js","../../src/utils/getWindow.js","../../src/utils/removeEventListeners.js","../../src/utils/runModifiers.js","../../src/utils/setAttributes.js","../../src/utils/setStyles.js","../../src/utils/setupEventListeners.js","../../src/utils/index.js"],"sourcesContent":["/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","export default typeof window !== 'undefined' && typeof document !== 'undefined';\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import isBrowser from './isBrowser';\n\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import getWindowSizes from './getWindowSizes';\nimport getClientRect from './getClientRect';\n\n/**\n * Get the position of the given element, relative to its offset parent\n * @method\n * @memberof Popper.Utils\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\nexport default function getOffsetRect(element) {\n let elementRect;\n if (element.nodeName === 'HTML') {\n const { width, height } = getWindowSizes();\n elementRect = {\n width,\n height,\n left: 0,\n top: 0,\n };\n } else {\n elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop,\n };\n }\n\n // position\n return getClientRect(elementRect);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import computeAutoPlacement from './computeAutoPlacement';\nimport debounce from './debounce';\nimport findIndex from './findIndex';\nimport getBordersSize from './getBordersSize';\nimport getBoundaries from './getBoundaries';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getClientRect from './getClientRect';\nimport getOffsetParent from './getOffsetParent';\nimport getOffsetRect from './getOffsetRect';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getOuterSizes from './getOuterSizes';\nimport getParentNode from './getParentNode';\nimport getPopperOffsets from './getPopperOffsets';\nimport getReferenceOffsets from './getReferenceOffsets';\nimport getScroll from './getScroll';\nimport getScrollParent from './getScrollParent';\nimport getStyleComputedProperty from './getStyleComputedProperty';\nimport getSupportedPropertyName from './getSupportedPropertyName';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport isFunction from './isFunction';\nimport isModifierEnabled from './isModifierEnabled';\nimport isModifierRequired from './isModifierRequired';\nimport isNumeric from './isNumeric';\nimport removeEventListeners from './removeEventListeners';\nimport runModifiers from './runModifiers';\nimport setAttributes from './setAttributes';\nimport setStyles from './setStyles';\nimport setupEventListeners from './setupEventListeners';\n\n/** @namespace Popper.Utils */\nexport {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n\n// This is here just for backward compatibility with versions lower than v1.10.3\n// you should import the utilities using named exports, if you want them all use:\n// ```\n// import * as PopperUtils from 'popper-utils';\n// ```\n// The default export will be removed in the next major version.\nexport default {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n"],"names":["getStyleComputedProperty","element","property","nodeType","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","document","body","ownerDocument","overflow","overflowX","overflowY","test","window","isIE11","isBrowser","MSInputMethodContext","documentMode","isIE10","navigator","userAgent","isIE","version","getOffsetParent","documentElement","noOffsetParent","offsetParent","nextElementSibling","indexOf","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","getClientRect","offsets","width","height","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","getArea","computeAutoPlacement","placement","refRect","rects","sortedAreas","Object","keys","map","key","sort","a","b","area","filteredAreas","filter","computedPlacement","length","variation","split","longerTimeoutBrowsers","timeoutDuration","i","microtaskDebounce","fn","called","Promise","resolve","then","taskDebounce","scheduled","supportsMicroTasks","find","arr","check","Array","prototype","findIndex","prop","value","cur","match","obj","getOffsetRect","elementRect","offsetLeft","offsetTop","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","getReferenceOffsets","state","commonOffsetParent","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","slice","prefix","toCheck","style","isFunction","functionToCheck","getType","toString","call","isModifierEnabled","modifiers","modifierName","some","name","enabled","isModifierRequired","requestingName","requestedName","requesting","isRequired","requested","warn","isNumeric","n","isNaN","isFinite","getWindow","defaultView","removeEventListeners","removeEventListener","updateBound","scrollParents","forEach","scrollElement","eventsEnabled","runModifiers","data","ends","modifiersToRun","undefined","setAttributes","attributes","setAttribute","removeAttribute","setStyles","unit","attachToScrollParents","event","callback","isBody","target","addEventListener","passive","push","setupEventListeners","options"],"mappings":"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"} \ No newline at end of file diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.min.js b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.min.js index 95cd4b83f..ab4383924 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.min.js +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.min.js @@ -1,5 +1,5 @@ /* Copyright (C) Federico Zivolo 2018 Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). - */function a(a,b){if(1!==a.nodeType)return[];var c=getComputedStyle(a,null);return b?c[b]:c}function b(a){return'HTML'===a.nodeName?a:a.parentNode||a.host}function c(d){if(!d)return document.body;switch(d.nodeName){case'HTML':case'BODY':return d.ownerDocument.body;case'#document':return d.body;}var e=a(d),f=e.overflow,g=e.overflowX,h=e.overflowY;return /(auto|scroll|overlay)/.test(f+h+g)?d:c(b(d))}var d={},e=function(){var a=0=c.clientWidth&&d>=c.clientHeight}),k=0=c.clientWidth&&d>=c.clientHeight}),k=0 cache[key]);\n return cache[version];\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import getWindowSizes from './getWindowSizes';\nimport getClientRect from './getClientRect';\n\n/**\n * Get the position of the given element, relative to its offset parent\n * @method\n * @memberof Popper.Utils\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\nexport default function getOffsetRect(element) {\n let elementRect;\n if (element.nodeName === 'HTML') {\n const { width, height } = getWindowSizes();\n elementRect = {\n width,\n height,\n left: 0,\n top: 0,\n };\n } else {\n elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop,\n };\n }\n\n // position\n return getClientRect(elementRect);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import computeAutoPlacement from './computeAutoPlacement';\nimport debounce from './debounce';\nimport findIndex from './findIndex';\nimport getBordersSize from './getBordersSize';\nimport getBoundaries from './getBoundaries';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getClientRect from './getClientRect';\nimport getOffsetParent from './getOffsetParent';\nimport getOffsetRect from './getOffsetRect';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getOuterSizes from './getOuterSizes';\nimport getParentNode from './getParentNode';\nimport getPopperOffsets from './getPopperOffsets';\nimport getReferenceOffsets from './getReferenceOffsets';\nimport getScroll from './getScroll';\nimport getScrollParent from './getScrollParent';\nimport getStyleComputedProperty from './getStyleComputedProperty';\nimport getSupportedPropertyName from './getSupportedPropertyName';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport isFunction from './isFunction';\nimport isModifierEnabled from './isModifierEnabled';\nimport isModifierRequired from './isModifierRequired';\nimport isNumeric from './isNumeric';\nimport removeEventListeners from './removeEventListeners';\nimport runModifiers from './runModifiers';\nimport setAttributes from './setAttributes';\nimport setStyles from './setStyles';\nimport setupEventListeners from './setupEventListeners';\n\n/** @namespace Popper.Utils */\nexport {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n\n// This is here just for backward compatibility with versions lower than v1.10.3\n// you should import the utilities using named exports, if you want them all use:\n// ```\n// import * as PopperUtils from 'popper-utils';\n// ```\n// The default export will be removed in the next major version.\nexport default {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n"],"names":["element","nodeType","css","getComputedStyle","property","nodeName","parentNode","host","document","body","ownerDocument","getStyleComputedProperty","overflow","overflowX","overflowY","test","getScrollParent","getParentNode","cache","version","toString","hasOwnProperty","navigator","userAgent","indexOf","appVersion","all","Object","keys","some","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","getOffsetParent","firstElementChild","node","getRoot","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","isOffsetContainer","element1root","findCommonOffsetParent","side","upperSide","html","scrollingElement","subtract","scrollTop","getScroll","scrollLeft","modifier","top","bottom","left","right","sideA","axis","sideB","parseFloat","styles","Math","max","computedStyle","getSize","offsets","width","height","rect","getBoundingClientRect","result","sizes","getWindowSizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getBordersSize","getClientRect","fixedPosition","isIE10","runIsIE","isHTML","parent","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","includeScroll","excludeScroll","relativeOffset","getOffsetRectRelativeToArbitraryNode","window","innerWidth","innerHeight","offset","isFixed","parentElement","el","boundaries","getFixedPositionOffsetParent","boundariesElement","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","popper","padding","placement","getBoundaries","rects","refRect","sortedAreas","map","getArea","sort","b","area","a","filteredAreas","filter","computedPlacement","length","key","variation","split","isBrowser","longerTimeoutBrowsers","timeoutDuration","i","called","Promise","resolve","then","scheduled","supportsMicroTasks","Array","prototype","find","arr","findIndex","cur","match","obj","elementRect","offsetLeft","offsetTop","x","marginBottom","y","marginRight","hash","replace","popperRect","getOuterSizes","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","referenceOffsets","getOppositePlacement","commonOffsetParent","prefixes","upperProp","charAt","toUpperCase","slice","prefix","toCheck","style","functionToCheck","getType","call","modifiers","name","enabled","requesting","isRequired","warn","requested","n","isNaN","isFinite","defaultView","removeEventListener","state","updateBound","scrollParents","forEach","scrollElement","eventsEnabled","modifiersToRun","ends","fn","isFunction","data","reference","value","attributes","removeAttribute","setAttribute","unit","isNumeric","isBody","target","addEventListener","passive","push"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"popper-utils.min.js","sources":["../../src/utils/getStyleComputedProperty.js","../../src/utils/getParentNode.js","../../src/utils/getScrollParent.js","../../src/utils/isBrowser.js","../../src/utils/isIE.js","../../src/utils/getOffsetParent.js","../../src/utils/isOffsetContainer.js","../../src/utils/getRoot.js","../../src/utils/findCommonOffsetParent.js","../../src/utils/getScroll.js","../../src/utils/includeScroll.js","../../src/utils/getBordersSize.js","../../src/utils/getWindowSizes.js","../../src/utils/getClientRect.js","../../src/utils/getBoundingClientRect.js","../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../src/utils/isFixed.js","../../src/utils/getFixedPositionOffsetParent.js","../../src/utils/getBoundaries.js","../../src/utils/computeAutoPlacement.js","../../src/utils/debounce.js","../../src/utils/find.js","../../src/utils/findIndex.js","../../src/utils/getOffsetRect.js","../../src/utils/getOuterSizes.js","../../src/utils/getOppositePlacement.js","../../src/utils/getPopperOffsets.js","../../src/utils/getReferenceOffsets.js","../../src/utils/getSupportedPropertyName.js","../../src/utils/isFunction.js","../../src/utils/isModifierEnabled.js","../../src/utils/isModifierRequired.js","../../src/utils/isNumeric.js","../../src/utils/getWindow.js","../../src/utils/removeEventListeners.js","../../src/utils/runModifiers.js","../../src/utils/setAttributes.js","../../src/utils/setStyles.js","../../src/utils/setupEventListeners.js","../../src/utils/index.js"],"sourcesContent":["/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","export default typeof window !== 'undefined' && typeof document !== 'undefined';\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import isBrowser from './isBrowser';\n\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import getWindowSizes from './getWindowSizes';\nimport getClientRect from './getClientRect';\n\n/**\n * Get the position of the given element, relative to its offset parent\n * @method\n * @memberof Popper.Utils\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\nexport default function getOffsetRect(element) {\n let elementRect;\n if (element.nodeName === 'HTML') {\n const { width, height } = getWindowSizes();\n elementRect = {\n width,\n height,\n left: 0,\n top: 0,\n };\n } else {\n elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop,\n };\n }\n\n // position\n return getClientRect(elementRect);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import computeAutoPlacement from './computeAutoPlacement';\nimport debounce from './debounce';\nimport findIndex from './findIndex';\nimport getBordersSize from './getBordersSize';\nimport getBoundaries from './getBoundaries';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getClientRect from './getClientRect';\nimport getOffsetParent from './getOffsetParent';\nimport getOffsetRect from './getOffsetRect';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getOuterSizes from './getOuterSizes';\nimport getParentNode from './getParentNode';\nimport getPopperOffsets from './getPopperOffsets';\nimport getReferenceOffsets from './getReferenceOffsets';\nimport getScroll from './getScroll';\nimport getScrollParent from './getScrollParent';\nimport getStyleComputedProperty from './getStyleComputedProperty';\nimport getSupportedPropertyName from './getSupportedPropertyName';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport isFunction from './isFunction';\nimport isModifierEnabled from './isModifierEnabled';\nimport isModifierRequired from './isModifierRequired';\nimport isNumeric from './isNumeric';\nimport removeEventListeners from './removeEventListeners';\nimport runModifiers from './runModifiers';\nimport setAttributes from './setAttributes';\nimport setStyles from './setStyles';\nimport setupEventListeners from './setupEventListeners';\n\n/** @namespace Popper.Utils */\nexport {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n\n// This is here just for backward compatibility with versions lower than v1.10.3\n// you should import the utilities using named exports, if you want them all use:\n// ```\n// import * as PopperUtils from 'popper-utils';\n// ```\n// The default export will be removed in the next major version.\nexport default {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n"],"names":["element","nodeType","css","getComputedStyle","property","nodeName","parentNode","host","document","body","ownerDocument","getStyleComputedProperty","overflow","overflowX","overflowY","test","getScrollParent","getParentNode","window","isIE10","isBrowser","navigator","userAgent","version","isIE11","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","indexOf","getOffsetParent","firstElementChild","node","getRoot","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","isOffsetContainer","element1root","findCommonOffsetParent","side","upperSide","html","scrollingElement","subtract","scrollTop","getScroll","scrollLeft","modifier","top","bottom","left","right","sideA","axis","sideB","parseFloat","styles","Math","max","computedStyle","getSize","offsets","width","height","rect","getBoundingClientRect","result","sizes","getWindowSizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getBordersSize","getClientRect","fixedPosition","runIsIE","isHTML","parent","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","includeScroll","excludeScroll","relativeOffset","getOffsetRectRelativeToArbitraryNode","innerWidth","innerHeight","offset","isFixed","parentElement","el","boundaries","getFixedPositionOffsetParent","boundariesElement","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","popper","padding","placement","getBoundaries","rects","refRect","sortedAreas","Object","keys","map","getArea","sort","b","area","a","filteredAreas","filter","computedPlacement","length","key","variation","split","longerTimeoutBrowsers","timeoutDuration","i","called","Promise","resolve","then","scheduled","supportsMicroTasks","Array","prototype","find","arr","findIndex","cur","match","obj","elementRect","offsetLeft","offsetTop","x","marginBottom","y","marginRight","hash","replace","popperRect","getOuterSizes","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","referenceOffsets","getOppositePlacement","commonOffsetParent","prefixes","upperProp","charAt","toUpperCase","slice","prefix","toCheck","style","functionToCheck","getType","toString","call","modifiers","some","name","enabled","requesting","isRequired","warn","requested","n","isNaN","isFinite","defaultView","removeEventListener","state","updateBound","scrollParents","forEach","scrollElement","eventsEnabled","modifiersToRun","ends","fn","isFunction","data","reference","value","attributes","removeAttribute","setAttribute","unit","isNumeric","isBody","target","addEventListener","passive","push"],"mappings":"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"} \ No newline at end of file diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js index f179271e6..3994fd517 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js @@ -1,6 +1,6 @@ /**! * @fileOverview Kickass library to create and place poppers near their reference elements. - * @version 1.14.0 + * @version 1.14.3 * @license * Copyright (c) 2016 Federico Zivolo and contributors * @@ -23,6 +23,7 @@ * SOFTWARE. */ var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; + var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; var timeoutDuration = 0; for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { @@ -149,40 +150,25 @@ function getScrollParent(element) { return getScrollParent(getParentNode(element)); } +var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); +var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); + /** - * Tells if you are running Internet Explorer + * Determines if the browser is Internet Explorer * @method * @memberof Popper.Utils - * @argument {number} version to check + * @param {Number} version to check * @returns {Boolean} isIE */ -var cache = {}; - -var isIE = function () { - var version = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'all'; - - version = version.toString(); - if (cache.hasOwnProperty(version)) { - return cache[version]; +function isIE(version) { + if (version === 11) { + return isIE11; } - switch (version) { - case '11': - cache[version] = navigator.userAgent.indexOf('Trident') !== -1; - break; - case '10': - cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1; - break; - case 'all': - cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1; - break; + if (version === 10) { + return isIE10; } - - //Set IE - cache.all = cache.all || Object.keys(cache).some(function (key) { - return cache[key]; - }); - return cache[version]; -}; + return isIE11 || isIE10; +} /** * Returns the offset parent of the given element @@ -935,6 +921,7 @@ function update() { // compute the popper offsets data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); + data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; // run the modifiers @@ -1240,11 +1227,13 @@ function computeStyle(data, options) { position: popper.position }; - // floor sides to avoid blurry text + // Avoid blurry text by using full pixel integers. + // For pixel-perfect positioning, top/bottom prefers rounded + // values, while left/right prefers floored values. var offsets = { left: Math.floor(popper.left), - top: Math.floor(popper.top), - bottom: Math.floor(popper.bottom), + top: Math.round(popper.top), + bottom: Math.round(popper.bottom), right: Math.floor(popper.right) }; @@ -1800,7 +1789,27 @@ function preventOverflow(data, options) { boundariesElement = getOffsetParent(boundariesElement); } + // NOTE: DOM access here + // resets the popper's position so that the document size can be calculated excluding + // the size of the popper element itself + var transformProp = getSupportedPropertyName('transform'); + var popperStyles = data.instance.popper.style; // assignment to help minification + var top = popperStyles.top, + left = popperStyles.left, + transform = popperStyles[transformProp]; + + popperStyles.top = ''; + popperStyles.left = ''; + popperStyles[transformProp] = ''; + var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); + + // NOTE: DOM access here + // restores the original style properties after the offsets have been computed + popperStyles.top = top; + popperStyles.left = left; + popperStyles[transformProp] = transform; + options.boundaries = boundaries; var order = options.priority; diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js.map b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js.map index 29ed081e9..b63e8370e 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js.map +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js.map @@ -1 +1 @@ -{"version":3,"file":"popper.js","sources":["../../src/utils/debounce.js","../../src/utils/isFunction.js","../../src/utils/getStyleComputedProperty.js","../../src/utils/getParentNode.js","../../src/utils/getScrollParent.js","../../src/utils/isIE.js","../../src/utils/getOffsetParent.js","../../src/utils/isOffsetContainer.js","../../src/utils/getRoot.js","../../src/utils/findCommonOffsetParent.js","../../src/utils/getScroll.js","../../src/utils/includeScroll.js","../../src/utils/getBordersSize.js","../../src/utils/getWindowSizes.js","../../src/utils/getClientRect.js","../../src/utils/getBoundingClientRect.js","../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../src/utils/isFixed.js","../../src/utils/getFixedPositionOffsetParent.js","../../src/utils/getBoundaries.js","../../src/utils/computeAutoPlacement.js","../../src/utils/getReferenceOffsets.js","../../src/utils/getOuterSizes.js","../../src/utils/getOppositePlacement.js","../../src/utils/getPopperOffsets.js","../../src/utils/find.js","../../src/utils/findIndex.js","../../src/utils/runModifiers.js","../../src/methods/update.js","../../src/utils/isModifierEnabled.js","../../src/utils/getSupportedPropertyName.js","../../src/methods/destroy.js","../../src/utils/getWindow.js","../../src/utils/setupEventListeners.js","../../src/methods/enableEventListeners.js","../../src/utils/removeEventListeners.js","../../src/methods/disableEventListeners.js","../../src/utils/isNumeric.js","../../src/utils/setStyles.js","../../src/utils/setAttributes.js","../../src/modifiers/applyStyle.js","../../src/modifiers/computeStyle.js","../../src/utils/isModifierRequired.js","../../src/modifiers/arrow.js","../../src/utils/getOppositeVariation.js","../../src/methods/placements.js","../../src/utils/clockwise.js","../../src/modifiers/flip.js","../../src/modifiers/keepTogether.js","../../src/modifiers/offset.js","../../src/modifiers/preventOverflow.js","../../src/modifiers/shift.js","../../src/modifiers/hide.js","../../src/modifiers/inner.js","../../src/modifiers/index.js","../../src/methods/defaults.js","../../src/index.js"],"sourcesContent":["const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nconst cache = {};\n\nexport default function (version = 'all') {\n version = version.toString();\n if(cache.hasOwnProperty(version)){\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(key => cache[key]);\n return cache[version];\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n // floor sides to avoid blurry text\n const offsets = {\n left: Math.floor(popper.left),\n top: Math.floor(popper.top),\n bottom: Math.floor(popper.bottom),\n right: Math.floor(popper.right),\n };\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const flippedVariation =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side = ['left', 'top'].indexOf(placement) !== -1\n ? 'primary'\n : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport',\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overriden using the `options` argument of Popper.js.
\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n"],"names":["isBrowser","window","document","longerTimeoutBrowsers","timeoutDuration","i","length","navigator","userAgent","indexOf","microtaskDebounce","fn","called","Promise","resolve","then","taskDebounce","scheduled","supportsMicroTasks","isFunction","functionToCheck","getType","toString","call","getStyleComputedProperty","element","property","nodeType","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","body","ownerDocument","overflow","overflowX","overflowY","test","cache","version","hasOwnProperty","appVersion","all","Object","keys","some","key","getOffsetParent","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","getClientRect","offsets","width","height","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isIE10","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","getArea","computeAutoPlacement","placement","refRect","rects","sortedAreas","map","sort","a","b","area","filteredAreas","filter","computedPlacement","variation","split","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","prototype","findIndex","prop","value","cur","match","obj","runModifiers","modifiers","data","ends","modifiersToRun","undefined","slice","forEach","warn","enabled","update","isDestroyed","options","positionFixed","flip","originalPlacement","position","isCreated","onCreate","onUpdate","isModifierEnabled","modifierName","name","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","defaultView","attachToScrollParents","event","callback","scrollParents","isBody","target","addEventListener","passive","push","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","removeEventListeners","removeEventListener","isNumeric","n","isNaN","isFinite","setStyles","unit","setAttributes","attributes","setAttribute","applyStyle","instance","arrowElement","arrowStyles","applyStyleOnLoad","modifierOptions","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","floor","prefixedProperty","invertTop","invertLeft","arrow","isModifierRequired","requestingName","requestedName","requesting","isRequired","requested","querySelector","isVertical","len","sideCapitalized","toLowerCase","altSide","opSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","min","round","getOppositeVariation","validPlacements","placements","clockwise","counter","index","concat","reverse","BEHAVIORS","flipped","placementOpposite","flipOrder","behavior","FLIP","CLOCKWISE","COUNTERCLOCKWISE","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","keepTogether","toValue","str","size","parseOffset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","index2","preventOverflow","priority","escapeWithReference","shift","shiftvariation","shiftOffsets","hide","bound","inner","subtractLength","Popper","requestAnimationFrame","debounce","bind","Defaults","jquery","onLoad","Utils","global","PopperUtils"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"popper.js","sources":["../../src/utils/isBrowser.js","../../src/utils/debounce.js","../../src/utils/isFunction.js","../../src/utils/getStyleComputedProperty.js","../../src/utils/getParentNode.js","../../src/utils/getScrollParent.js","../../src/utils/isIE.js","../../src/utils/getOffsetParent.js","../../src/utils/isOffsetContainer.js","../../src/utils/getRoot.js","../../src/utils/findCommonOffsetParent.js","../../src/utils/getScroll.js","../../src/utils/includeScroll.js","../../src/utils/getBordersSize.js","../../src/utils/getWindowSizes.js","../../src/utils/getClientRect.js","../../src/utils/getBoundingClientRect.js","../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../src/utils/isFixed.js","../../src/utils/getFixedPositionOffsetParent.js","../../src/utils/getBoundaries.js","../../src/utils/computeAutoPlacement.js","../../src/utils/getReferenceOffsets.js","../../src/utils/getOuterSizes.js","../../src/utils/getOppositePlacement.js","../../src/utils/getPopperOffsets.js","../../src/utils/find.js","../../src/utils/findIndex.js","../../src/utils/runModifiers.js","../../src/methods/update.js","../../src/utils/isModifierEnabled.js","../../src/utils/getSupportedPropertyName.js","../../src/methods/destroy.js","../../src/utils/getWindow.js","../../src/utils/setupEventListeners.js","../../src/methods/enableEventListeners.js","../../src/utils/removeEventListeners.js","../../src/methods/disableEventListeners.js","../../src/utils/isNumeric.js","../../src/utils/setStyles.js","../../src/utils/setAttributes.js","../../src/modifiers/applyStyle.js","../../src/modifiers/computeStyle.js","../../src/utils/isModifierRequired.js","../../src/modifiers/arrow.js","../../src/utils/getOppositeVariation.js","../../src/methods/placements.js","../../src/utils/clockwise.js","../../src/modifiers/flip.js","../../src/modifiers/keepTogether.js","../../src/modifiers/offset.js","../../src/modifiers/preventOverflow.js","../../src/modifiers/shift.js","../../src/modifiers/hide.js","../../src/modifiers/inner.js","../../src/modifiers/index.js","../../src/methods/defaults.js","../../src/index.js"],"sourcesContent":["export default typeof window !== 'undefined' && typeof document !== 'undefined';\n","import isBrowser from './isBrowser';\n\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n\n data.offsets.popper.position = this.options.positionFixed\n ? 'fixed'\n : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n // Avoid blurry text by using full pixel integers.\n // For pixel-perfect positioning, top/bottom prefers rounded\n // values, while left/right prefers floored values.\n const offsets = {\n left: Math.floor(popper.left),\n top: Math.round(popper.top),\n bottom: Math.round(popper.bottom),\n right: Math.floor(popper.right),\n };\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const flippedVariation =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n const transformProp = getSupportedPropertyName('transform');\n const popperStyles = data.instance.popper.style; // assignment to help minification\n const { top, left, [transformProp]: transform } = popperStyles;\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side =\n ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport',\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overriden using the `options` argument of Popper.js.
\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n"],"names":["window","document","longerTimeoutBrowsers","timeoutDuration","i","length","isBrowser","navigator","userAgent","indexOf","microtaskDebounce","fn","called","Promise","resolve","then","taskDebounce","scheduled","supportsMicroTasks","isFunction","functionToCheck","getType","toString","call","getStyleComputedProperty","element","property","nodeType","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","body","ownerDocument","overflow","overflowX","overflowY","test","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","version","getOffsetParent","documentElement","noOffsetParent","offsetParent","nextElementSibling","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","getClientRect","offsets","width","height","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","getArea","computeAutoPlacement","placement","refRect","rects","sortedAreas","Object","keys","map","key","sort","a","b","area","filteredAreas","filter","computedPlacement","variation","split","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","prototype","findIndex","prop","value","cur","match","obj","runModifiers","modifiers","data","ends","modifiersToRun","undefined","slice","forEach","warn","enabled","update","isDestroyed","options","positionFixed","flip","originalPlacement","position","isCreated","onCreate","onUpdate","isModifierEnabled","modifierName","some","name","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","defaultView","attachToScrollParents","event","callback","scrollParents","isBody","target","addEventListener","passive","push","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","removeEventListeners","removeEventListener","isNumeric","n","isNaN","isFinite","setStyles","unit","setAttributes","attributes","setAttribute","applyStyle","instance","arrowElement","arrowStyles","applyStyleOnLoad","modifierOptions","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","floor","round","prefixedProperty","invertTop","invertLeft","arrow","isModifierRequired","requestingName","requestedName","requesting","isRequired","requested","querySelector","isVertical","len","sideCapitalized","toLowerCase","altSide","opSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","min","getOppositeVariation","validPlacements","placements","clockwise","counter","index","concat","reverse","BEHAVIORS","flipped","placementOpposite","flipOrder","behavior","FLIP","CLOCKWISE","COUNTERCLOCKWISE","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","keepTogether","toValue","str","size","parseOffset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","index2","preventOverflow","transformProp","popperStyles","transform","priority","escapeWithReference","shift","shiftvariation","shiftOffsets","hide","bound","inner","subtractLength","Popper","requestAnimationFrame","debounce","bind","Defaults","jquery","onLoad","Utils","global","PopperUtils"],"mappings":"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"} \ No newline at end of file diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.min.js b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.min.js index 102591771..f46968d72 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.min.js +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.min.js @@ -1,5 +1,5 @@ /* Copyright (C) Federico Zivolo 2018 Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). - */for(var e='undefined'!=typeof window&&'undefined'!=typeof document,t=['Edge','Trident','Firefox'],o=0,n=0;n=o.clientWidth&&n>=o.clientHeight}),l=0p[c]&&(e.offsets.popper[m]+=s[m]+g-p[c]),e.offsets.popper=D(e.offsets.popper);var u=s[m]+s[l]/2-g/2,b=a(e.instance.popper),y=parseFloat(b['margin'+f],10),w=parseFloat(b['border'+f+'Width'],10),E=u-e.offsets.popper[m]-y-w;return E=Math.max(Math.min(p[l]-g,E),0),e.arrowElement=n,e.offsets.arrow=(o={},S(o,m,Math.round(E)),S(o,h,''),o),e}function se(e){if('end'===e)return'start';return'start'===e?'end':e}var de=['auto-start','auto','auto-end','top-start','top','top-end','right-start','right','right-end','bottom-end','bottom','bottom-start','left-end','left','left-start'],ae=de.slice(3);function le(e){var t=1f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,y=-1!==['top','bottom'].indexOf(n),w=!!t.flipVariations&&(y&&'start'===r&&h||y&&'end'===r&&c||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),w&&(r=se(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=T({},e.offsets.popper,R(e.instance.popper,e.offsets.reference,e.placement)),e=j(e.instance.modifiers,e,'flip'))}),e}function he(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Math.floor,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}function ce(e,t,o,n){var i=Math.max,r=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),p=+r[1],s=r[2];if(!p)return e;if(0===s.indexOf('%')){var d;switch(s){case'%p':d=o;break;case'%':case'%r':default:d=n;}var a=D(d);return a[t]/100*p}if('vh'===s||'vw'===s){var l;return l='vh'===s?i(document.documentElement.clientHeight,window.innerHeight||0):i(document.documentElement.clientWidth,window.innerWidth||0),l/100*p}return p}function ge(e,t,o,n){var i=[0,0],r=-1!==['right','left'].indexOf(n),p=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=p.indexOf(U(p,function(e){return-1!==e.search(/,|\s/)}));p[s]&&-1===p[s].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');var d=/\s*,\s*|\s+/,a=-1===s?[p]:[p.slice(0,s).concat([p[s].split(d)[0]]),[p[s].split(d)[1]].concat(p.slice(s+1))];return a=a.map(function(e,n){var i=(1===n?!r:r)?'height':'width',p=!1;return e.reduce(function(e,t){return''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[]).map(function(e){return ce(e,i,t,o)})}),a.forEach(function(e,t){e.forEach(function(o,n){$(o)&&(i[t]+=o*('-'===e[n-1]?-1:1))})}),i}function ue(e,t){var o,n=t.offset,i=e.placement,r=e.offsets,p=r.popper,s=r.reference,d=i.split('-')[0];return o=$(+n)?[+n,0]:ge(n,p,s,d),'left'===d?(p.top+=o[0],p.left-=o[1]):'right'===d?(p.top+=o[0],p.left+=o[1]):'top'===d?(p.left+=o[0],p.top-=o[1]):'bottom'===d&&(p.left+=o[0],p.top+=o[1]),e.popper=p,e}function be(e,t){var o=t.boundariesElement||c(e.instance.popper);e.instance.reference===o&&(o=c(o));var n=B(e.instance.popper,e.instance.reference,t.padding,o,e.positionFixed);t.boundaries=n;var i=t.priority,r=e.offsets.popper,p={primary:function(e){var o=r[e];return r[e]n[e]&&!t.escapeWithReference&&(i=Math.min(r[o],n[e]-('right'===e?r.width:r.height))),S({},o,i)}};return i.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';r=T({},r,p[t](e))}),e.offsets.popper=r,e}function ye(e){var t=e.placement,o=t.split('-')[0],n=t.split('-')[1];if(n){var i=e.offsets,r=i.reference,p=i.popper,s=-1!==['bottom','top'].indexOf(o),d=s?'left':'top',a=s?'width':'height',l={start:S({},d,r[d]),end:S({},d,r[d]+r[a]-p[a])};e.offsets.popper=T({},p,l[n])}return e}function we(e){if(!re(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=U(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.right=o.clientWidth&&n>=o.clientHeight}),l=0p[c]&&(e.offsets.popper[m]+=s[m]+g-p[c]),e.offsets.popper=D(e.offsets.popper);var u=s[m]+s[l]/2-g/2,b=a(e.instance.popper),y=parseFloat(b['margin'+f],10),w=parseFloat(b['border'+f+'Width'],10),E=u-e.offsets.popper[m]-y-w;return E=Math.max(Math.min(p[l]-g,E),0),e.arrowElement=n,e.offsets.arrow=(o={},T(o,m,Math.round(E)),T(o,h,''),o),e}function de(e){if('end'===e)return'start';return'start'===e?'end':e}var ae=['auto-start','auto','auto-end','top-start','top','top-end','right-start','right','right-end','bottom-end','bottom','bottom-start','left-end','left','left-start'],le=ae.slice(3);function fe(e){var t=1f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,y=-1!==['top','bottom'].indexOf(n),w=!!t.flipVariations&&(y&&'start'===r&&h||y&&'end'===r&&c||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),w&&(r=de(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=C({},e.offsets.popper,U(e.instance.popper,e.offsets.reference,e.placement)),e=j(e.instance.modifiers,e,'flip'))}),e}function ce(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Math.floor,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}function ge(e,t,o,n){var i=Math.max,r=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),p=+r[1],s=r[2];if(!p)return e;if(0===s.indexOf('%')){var d;switch(s){case'%p':d=o;break;case'%':case'%r':default:d=n;}var a=D(d);return a[t]/100*p}if('vh'===s||'vw'===s){var l;return l='vh'===s?i(document.documentElement.clientHeight,window.innerHeight||0):i(document.documentElement.clientWidth,window.innerWidth||0),l/100*p}return p}function ue(e,t,o,n){var i=[0,0],r=-1!==['right','left'].indexOf(n),p=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=p.indexOf(Y(p,function(e){return-1!==e.search(/,|\s/)}));p[s]&&-1===p[s].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');var d=/\s*,\s*|\s+/,a=-1===s?[p]:[p.slice(0,s).concat([p[s].split(d)[0]]),[p[s].split(d)[1]].concat(p.slice(s+1))];return a=a.map(function(e,n){var i=(1===n?!r:r)?'height':'width',p=!1;return e.reduce(function(e,t){return''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[]).map(function(e){return ge(e,i,t,o)})}),a.forEach(function(e,t){e.forEach(function(o,n){ee(o)&&(i[t]+=o*('-'===e[n-1]?-1:1))})}),i}function be(e,t){var o,n=t.offset,i=e.placement,r=e.offsets,p=r.popper,s=r.reference,d=i.split('-')[0];return o=ee(+n)?[+n,0]:ue(n,p,s,d),'left'===d?(p.top+=o[0],p.left-=o[1]):'right'===d?(p.top+=o[0],p.left+=o[1]):'top'===d?(p.left+=o[0],p.top-=o[1]):'bottom'===d&&(p.left+=o[0],p.top+=o[1]),e.popper=p,e}function ye(e,t){var o=t.boundariesElement||g(e.instance.popper);e.instance.reference===o&&(o=g(o));var n=z('transform'),i=e.instance.popper.style,r=i.top,p=i.left,s=i[n];i.top='',i.left='',i[n]='';var d=H(e.instance.popper,e.instance.reference,t.padding,o,e.positionFixed);i.top=r,i.left=p,i[n]=s,t.boundaries=d;var a=t.priority,l=e.offsets.popper,f={primary:function(e){var o=l[e];return l[e]d[e]&&!t.escapeWithReference&&(n=Math.min(l[o],d[e]-('right'===e?l.width:l.height))),T({},o,n)}};return a.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';l=C({},l,f[t](e))}),e.offsets.popper=l,e}function we(e){var t=e.placement,o=t.split('-')[0],n=t.split('-')[1];if(n){var i=e.offsets,r=i.reference,p=i.popper,s=-1!==['bottom','top'].indexOf(o),d=s?'left':'top',a=s?'width':'height',l={start:T({},d,r[d]),end:T({},d,r[d]+r[a]-p[a])};e.offsets.popper=C({},p,l[n])}return e}function Ee(e){if(!pe(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=Y(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.right= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nconst cache = {};\n\nexport default function (version = 'all') {\n version = version.toString();\n if(cache.hasOwnProperty(version)){\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(key => cache[key]);\n return cache[version];\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n // floor sides to avoid blurry text\n const offsets = {\n left: Math.floor(popper.left),\n top: Math.floor(popper.top),\n bottom: Math.floor(popper.bottom),\n right: Math.floor(popper.right),\n };\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const flippedVariation =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side = ['left', 'top'].indexOf(placement) !== -1\n ? 'primary'\n : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport',\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overriden using the `options` argument of Popper.js.
\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n"],"names":["isBrowser","window","document","longerTimeoutBrowsers","timeoutDuration","i","length","navigator","userAgent","indexOf","called","Promise","resolve","then","scheduled","supportsMicroTasks","functionToCheck","getType","toString","call","element","nodeType","css","getComputedStyle","property","nodeName","parentNode","host","body","ownerDocument","getStyleComputedProperty","overflow","overflowX","overflowY","test","getScrollParent","getParentNode","cache","version","hasOwnProperty","appVersion","all","Object","keys","some","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","getOffsetParent","firstElementChild","node","getRoot","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","isOffsetContainer","element1root","findCommonOffsetParent","side","upperSide","html","scrollingElement","subtract","scrollTop","getScroll","scrollLeft","modifier","top","bottom","left","right","sideA","axis","sideB","parseFloat","styles","Math","max","computedStyle","getSize","offsets","width","height","rect","getBoundingClientRect","result","sizes","getWindowSizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getBordersSize","getClientRect","fixedPosition","isIE10","runIsIE","isHTML","parent","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","includeScroll","excludeScroll","relativeOffset","getOffsetRectRelativeToArbitraryNode","innerWidth","innerHeight","offset","isFixed","parentElement","el","boundaries","getFixedPositionOffsetParent","boundariesElement","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","popper","padding","placement","getBoundaries","rects","refRect","sortedAreas","map","getArea","sort","b","area","a","filteredAreas","filter","computedPlacement","key","variation","split","commonOffsetParent","x","marginBottom","y","marginRight","hash","replace","popperRect","getOuterSizes","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","referenceOffsets","getOppositePlacement","Array","prototype","find","arr","findIndex","cur","match","obj","modifiersToRun","ends","modifiers","slice","forEach","warn","fn","enabled","isFunction","data","reference","state","isDestroyed","getReferenceOffsets","options","positionFixed","computeAutoPlacement","flip","originalPlacement","getPopperOffsets","position","runModifiers","isCreated","onUpdate","onCreate","name","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","isModifierEnabled","removeAttribute","willChange","getSupportedPropertyName","disableEventListeners","removeOnDestroy","removeChild","defaultView","isBody","target","addEventListener","passive","push","updateBound","scrollElement","scrollParents","eventsEnabled","setupEventListeners","scheduleUpdate","removeEventListener","removeEventListeners","n","isNaN","isFinite","unit","isNumeric","value","attributes","setAttribute","instance","arrowElement","arrowStyles","floor","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","prefixedProperty","invertTop","invertLeft","arrow","requesting","isRequired","requested","isModifierRequired","querySelector","isVertical","len","sideCapitalized","toLowerCase","altSide","opSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","min","round","validPlacements","placements","counter","index","concat","reverse","BEHAVIORS","flipped","placementOpposite","flipOrder","behavior","FLIP","CLOCKWISE","clockwise","COUNTERCLOCKWISE","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","getOppositeVariation","str","size","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","mergeWithPrevious","op","reduce","toValue","index2","basePlacement","parseOffset","priority","check","escapeWithReference","shiftvariation","shiftOffsets","bound","hide","subtractLength","Popper","requestAnimationFrame","update","debounce","bind","Defaults","jquery","modifierOptions","onLoad","enableEventListeners","destroy","Utils","global","PopperUtils"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"popper.min.js","sources":["../../src/utils/debounce.js","../../src/utils/isBrowser.js","../../src/utils/isFunction.js","../../src/utils/getStyleComputedProperty.js","../../src/utils/getParentNode.js","../../src/utils/getScrollParent.js","../../src/utils/isIE.js","../../src/utils/getOffsetParent.js","../../src/utils/isOffsetContainer.js","../../src/utils/getRoot.js","../../src/utils/findCommonOffsetParent.js","../../src/utils/getScroll.js","../../src/utils/includeScroll.js","../../src/utils/getBordersSize.js","../../src/utils/getWindowSizes.js","../../src/utils/getClientRect.js","../../src/utils/getBoundingClientRect.js","../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../src/utils/isFixed.js","../../src/utils/getFixedPositionOffsetParent.js","../../src/utils/getBoundaries.js","../../src/utils/computeAutoPlacement.js","../../src/utils/getReferenceOffsets.js","../../src/utils/getOuterSizes.js","../../src/utils/getOppositePlacement.js","../../src/utils/getPopperOffsets.js","../../src/utils/find.js","../../src/utils/findIndex.js","../../src/utils/runModifiers.js","../../src/methods/update.js","../../src/utils/isModifierEnabled.js","../../src/utils/getSupportedPropertyName.js","../../src/methods/destroy.js","../../src/utils/getWindow.js","../../src/utils/setupEventListeners.js","../../src/methods/enableEventListeners.js","../../src/utils/removeEventListeners.js","../../src/methods/disableEventListeners.js","../../src/utils/isNumeric.js","../../src/utils/setStyles.js","../../src/utils/setAttributes.js","../../src/modifiers/applyStyle.js","../../src/modifiers/computeStyle.js","../../src/utils/isModifierRequired.js","../../src/modifiers/arrow.js","../../src/utils/getOppositeVariation.js","../../src/methods/placements.js","../../src/utils/clockwise.js","../../src/modifiers/flip.js","../../src/modifiers/keepTogether.js","../../src/modifiers/offset.js","../../src/modifiers/preventOverflow.js","../../src/modifiers/shift.js","../../src/modifiers/hide.js","../../src/modifiers/inner.js","../../src/modifiers/index.js","../../src/methods/defaults.js","../../src/index.js"],"sourcesContent":["import isBrowser from './isBrowser';\n\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","export default typeof window !== 'undefined' && typeof document !== 'undefined';\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n\n data.offsets.popper.position = this.options.positionFixed\n ? 'fixed'\n : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n // Avoid blurry text by using full pixel integers.\n // For pixel-perfect positioning, top/bottom prefers rounded\n // values, while left/right prefers floored values.\n const offsets = {\n left: Math.floor(popper.left),\n top: Math.round(popper.top),\n bottom: Math.round(popper.bottom),\n right: Math.floor(popper.right),\n };\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const flippedVariation =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n const transformProp = getSupportedPropertyName('transform');\n const popperStyles = data.instance.popper.style; // assignment to help minification\n const { top, left, [transformProp]: transform } = popperStyles;\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side =\n ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport',\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overriden using the `options` argument of Popper.js.
\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n"],"names":["window","document","timeoutDuration","i","longerTimeoutBrowsers","length","isBrowser","navigator","userAgent","indexOf","called","Promise","resolve","then","scheduled","supportsMicroTasks","functionToCheck","getType","toString","call","element","nodeType","css","getComputedStyle","property","nodeName","parentNode","host","body","ownerDocument","getStyleComputedProperty","overflow","overflowX","overflowY","test","getScrollParent","getParentNode","isIE11","MSInputMethodContext","documentMode","isIE10","version","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","getOffsetParent","firstElementChild","node","getRoot","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","isOffsetContainer","element1root","findCommonOffsetParent","side","upperSide","html","scrollingElement","subtract","scrollTop","getScroll","scrollLeft","modifier","top","bottom","left","right","sideA","axis","sideB","parseFloat","styles","Math","max","computedStyle","getSize","offsets","width","height","rect","getBoundingClientRect","result","sizes","getWindowSizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getBordersSize","getClientRect","fixedPosition","runIsIE","isHTML","parent","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","includeScroll","excludeScroll","relativeOffset","getOffsetRectRelativeToArbitraryNode","innerWidth","innerHeight","offset","isFixed","parentElement","el","boundaries","getFixedPositionOffsetParent","boundariesElement","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","popper","padding","placement","getBoundaries","rects","refRect","sortedAreas","Object","keys","map","getArea","sort","b","area","a","filteredAreas","filter","computedPlacement","key","variation","split","commonOffsetParent","x","marginBottom","y","marginRight","hash","replace","popperRect","getOuterSizes","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","referenceOffsets","getOppositePlacement","Array","prototype","find","arr","findIndex","cur","match","obj","modifiersToRun","ends","modifiers","slice","forEach","warn","fn","enabled","isFunction","data","reference","state","isDestroyed","getReferenceOffsets","options","positionFixed","computeAutoPlacement","flip","originalPlacement","getPopperOffsets","position","runModifiers","isCreated","onUpdate","onCreate","some","name","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","isModifierEnabled","removeAttribute","willChange","getSupportedPropertyName","disableEventListeners","removeOnDestroy","removeChild","defaultView","isBody","target","addEventListener","passive","push","updateBound","scrollElement","scrollParents","eventsEnabled","setupEventListeners","scheduleUpdate","removeEventListener","removeEventListeners","n","isNaN","isFinite","unit","isNumeric","value","attributes","setAttribute","instance","arrowElement","arrowStyles","round","floor","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","prefixedProperty","invertTop","invertLeft","arrow","requesting","isRequired","requested","isModifierRequired","querySelector","isVertical","len","sideCapitalized","toLowerCase","altSide","opSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","min","validPlacements","placements","counter","index","concat","reverse","BEHAVIORS","flipped","placementOpposite","flipOrder","behavior","FLIP","CLOCKWISE","clockwise","COUNTERCLOCKWISE","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","getOppositeVariation","str","size","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","mergeWithPrevious","op","reduce","toValue","index2","basePlacement","parseOffset","transformProp","popperStyles","transform","priority","check","escapeWithReference","shiftvariation","shiftOffsets","bound","hide","subtractLength","Popper","requestAnimationFrame","update","debounce","bind","Defaults","jquery","modifierOptions","onLoad","enableEventListeners","destroy","Utils","global","PopperUtils"],"mappings":"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"} \ No newline at end of file diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/index.d.ts b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/index.d.ts index e83ea0c8d..cde579ba2 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/index.d.ts +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/index.d.ts @@ -1,119 +1,140 @@ -// Type definitions for popper.js 1.10 -// Project: https://github.com/FezVrasta/popper.js/ -// Definitions by: edcarroll , ggray , rhysd , joscha , seckardt , marcfallows - -// This file only declares the public portions of the API. -// It should not define internal pieces such as utils or modifier details. - -export type Position = 'top' | 'right' | 'bottom' | 'left'; - -export type Placement = 'auto-start' - | 'auto' - | 'auto-end' - | 'top-start' - | 'top' - | 'top-end' - | 'right-start' - | 'right' - | 'right-end' - | 'bottom-end' - | 'bottom' - | 'bottom-start' - | 'left-end' - | 'left' - | 'left-start'; - -export type Boundary = 'scrollParent' | 'viewport' | 'window'; - -export type Behavior = 'flip' | 'clockwise' | 'counterclockwise'; - -export type ModifierFn = (data: Data, options: Object) => Data; - -export interface BaseModifier { - order?: number; - enabled?: boolean; - fn?: ModifierFn; +/** + * @fileoverview This file only declares the public portions of the API. + * It should not define internal pieces such as utils or modifier details. + * + * Original definitions by: edcarroll , ggray , rhysd , joscha , seckardt , marcfallows + */ + +/** + * This kind of namespace declaration is not necessary, but is kept here for backwards-compatibility with + * popper.js 1.x. It can be removed in 2.x so that the default export is simply the Popper class + * and all the types / interfaces are top-level named exports. + */ +declare namespace Popper { + export type Position = 'top' | 'right' | 'bottom' | 'left'; + + export type Placement = 'auto-start' + | 'auto' + | 'auto-end' + | 'top-start' + | 'top' + | 'top-end' + | 'right-start' + | 'right' + | 'right-end' + | 'bottom-end' + | 'bottom' + | 'bottom-start' + | 'left-end' + | 'left' + | 'left-start'; + + export type Boundary = 'scrollParent' | 'viewport' | 'window'; + + export type Behavior = 'flip' | 'clockwise' | 'counterclockwise'; + + export type ModifierFn = (data: Data, options: Object) => Data; + + export interface BaseModifier { + order?: number; + enabled?: boolean; + fn?: ModifierFn; + } + + export interface Modifiers { + shift?: BaseModifier; + offset?: BaseModifier & { + offset?: number | string, + }; + preventOverflow?: BaseModifier & { + priority?: Position[], + padding?: number, + boundariesElement?: Boundary | Element, + escapeWithReference?: boolean + }; + keepTogether?: BaseModifier; + arrow?: BaseModifier & { + element?: string | Element, + }; + flip?: BaseModifier & { + behavior?: Behavior | Position[], + padding?: number, + boundariesElement?: Boundary | Element, + }; + inner?: BaseModifier; + hide?: BaseModifier; + applyStyle?: BaseModifier & { + onLoad?: Function, + gpuAcceleration?: boolean, + }; + computeStyle?: BaseModifier & { + gpuAcceleration?: boolean; + x?: 'bottom' | 'top', + y?: 'left' | 'right' + }; + + [name: string]: (BaseModifier & Record) | undefined; + } + + export interface Offset { + top: number; + left: number; + width: number; + height: number; + } + + export interface Data { + instance: Popper; + placement: Placement; + originalPlacement: Placement; + flipped: boolean; + hide: boolean; + arrowElement: Element; + styles: CSSStyleDeclaration; + boundaries: Object; + offsets: { + popper: Offset, + reference: Offset, + arrow: { + top: number, + left: number, + }, + }; + } + + export interface PopperOptions { + placement?: Placement; + positionFixed?: boolean; + eventsEnabled?: boolean; + modifiers?: Modifiers; + removeOnDestroy?: boolean; + + onCreate?(data: Data): void; + + onUpdate?(data: Data): void; + } + + export interface ReferenceObject { + clientHeight: number; + clientWidth: number; + + getBoundingClientRect(): ClientRect; + } } -export interface Modifiers { - shift?: BaseModifier; - offset?: BaseModifier & { - offset?: number | string, - }; - preventOverflow?: BaseModifier & { - priority?: Position[], - padding?: number, - boundariesElement?: Boundary | Element, - escapeWithReference?: boolean - }; - keepTogether?: BaseModifier; - arrow?: BaseModifier & { - element?: string | Element, - }; - flip?: BaseModifier & { - behavior?: Behavior | Position[], - padding?: number, - boundariesElement?: Boundary | Element, - }; - inner?: BaseModifier; - hide?: BaseModifier; - applyStyle?: BaseModifier & { - onLoad?: Function, - gpuAcceleration?: boolean, - }; - computeStyle?: BaseModifier & { - gpuAcceleration?: boolean; - x?: 'bottom' | 'top', - y?: 'left' | 'right' - }; - - [name: string]: (BaseModifier & Record) | undefined; -} - -export interface Offset { - top: number; - left: number; - width: number; - height: number; -} - -export interface Data { - instance: Popper; - placement: Placement; - originalPlacement: Placement; - flipped: boolean; - hide: boolean; - arrowElement: Element; - styles: CSSStyleDeclaration; - boundaries: Object; - offsets: { - popper: Offset, - reference: Offset, - arrow: { - top: number, - left: number, - }, - }; -} - -export interface PopperOptions { - placement?: Placement; - positionFixed?: boolean; - eventsEnabled?: boolean; - modifiers?: Modifiers; - removeOnDestroy?: boolean; - - onCreate?(data: Data): void; - - onUpdate?(data: Data): void; -} - -export interface ReferenceObject { - clientHeight: number; - clientWidth: number; - - getBoundingClientRect(): ClientRect; -} +// Re-export types in the Popper namespace so that they can be accessed as top-level named exports. +// These re-exports should be removed in 2.x when the "declare namespace Popper" syntax is removed. +export type Position = Popper.Position; +export type Placement = Popper.Placement; +export type Boundary = Popper.Boundary; +export type Behavior = Popper.Behavior; +export type ModifierFn = Popper.ModifierFn; +export type BaseModifier = Popper.BaseModifier; +export type Modifiers = Popper.Modifiers; +export type Offset = Popper.Offset; +export type Data = Popper.Data; +export type PopperOptions = Popper.PopperOptions; +export type ReferenceObject = Popper.ReferenceObject; declare class Popper { static modifiers: (BaseModifier & { name: string })[]; diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.min.js b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.min.js deleted file mode 100644 index 4d9b3a258..000000000 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"
# バッチファイル名 説明 存在VB
1 0_ExecAllBat.bat 以下のファイルを使用してバッチビルドを行う。必要に応じてカスタマイズしてください。
2 1_DeleteDir.bat ビルドによってできたフォルダを削除 (クリーンアップ) する。
3 1_DeleteFile.bat 一時ファイルなどを削除 (クリーンアップ) する。
4 2_Build_NuGet_net45.bat .NET Framework 4.5.2 をターゲットとする NuGet パッケージの作成用に、フレームワーク (ベースクラス1, ライブラリ部分) をビルドする。 ○*1
5 2_Build_NuGet_net46.bat .NET Framework 4.6 をターゲットとする NuGet パッケージの作成用に、フレームワーク (ベースクラス1, ライブラリ部分) をビルドする。 ○*1
6 2_Build_NuGet_net47.bat .NET Framework 4.7 をターゲットとする NuGet パッケージの作成用に、フレームワーク (ベースクラス1, ライブラリ部分) をビルドする。 ○*1
7 2_Build_NuGet_net48.bat.NET Framework 4.8 をターゲットとする NuGet パッケージの作成用に、フレームワーク (ベースクラス2, ライブラリ部分) をビルドする。.NET Framework 4.8 をターゲットとする NuGet パッケージの作成用に、フレームワーク (ベースクラス1, ライブラリ部分) をビルドする。 ○*1
8 2_Build_NuGet_netstd20.bat .NET Standard 2.0 をターゲットとする NuGet パッケージの作成用に、フレームワーク (ベースクラス1, ライブラリ部分) をビルドする。 ○*1, *3
9 2_Build_NuGet_netstd21.bat.NET Standard 2.1 をターゲットとする NuGet パッケージの作成用に、フレームワーク (ベースクラス2, ライブラリ部分) をビルドする。.NET Standard 2.1 をターゲットとする NuGet パッケージの作成用に、フレームワーク (ベースクラス1, ライブラリ部分) をビルドする。 ○*1, *3
102_Build_NuGet_nettcore30.bat.NET Core 3.0 をターゲットとする NuGet パッケージの作成用に、フレームワーク (ベースクラス1, ライブラリ部分) をビルドする。○*1, *3
11 3_Build_Business_net45.bat .NET Framework 4.5.2 をターゲットとする Business名前空間のフレームワーク (ベースクラス2, ライブラリ部分) をビルドする。
12 3_Build_Business_net46.bat .NET Framework 4.6 をターゲットとする Business名前空間のフレームワーク (ベースクラス2, ライブラリ部分) をビルドする。
13 3_Build_Business_net47.bat .NET Framework 4.7 をターゲットとする Business名前空間のフレームワーク (ベースクラス2, ライブラリ部分) をビルドする。
14 3_Build_Business_net48.bat .NET Framework 4.8 をターゲットとする Business名前空間のフレームワーク (ベースクラス2, ライブラリ部分) をビルドする。
15 3_Build_BusinessRichClient_net45.bat .NET Framework 4.5.2 をターゲットとする Business名前空間のリッチクライアント用フレームワーク (ベースクラス2, ライブラリ部分) をビルドする。 ○*2
16 3_Build_BusinessRichClient_net46.bat .NET Framework 4.6 をターゲットとする Business名前空間のリッチクライアント用フレームワーク (ベースクラス2, ライブラリ部分) をビルドする。 ○*2
17 3_Build_BusinessRichClient_net47.bat .NET Framework 4.7 をターゲットとするBusiness名前空間のリッチクライアント用フレームワーク (ベースクラス2, ライブラリ部分) をビルドする。 ○*2
18 3_Build_BusinessRichClient_net48.bat.NET Framework 4.8 をターゲットとするBusiness名前空間のリッチクライアント用フレームワーク (ベースクラス3, ライブラリ部分) をビルドする。.NET Framework 4.8 をターゲットとするBusiness名前空間のリッチクライアント用フレームワーク (ベースクラス2, ライブラリ部分) をビルドする。 ○*2
19 3_Build_Business_netcore20.bat .NET Core 2.0 をターゲットとする Business名前空間のフレームワーク (ベースクラス2, ライブラリ部分) をビルドする。 ○*3
20 3_Build_Business_netcore30.bat .NET Core 3.0 をターゲットとする Business名前空間のフレームワーク (ベースクラス2, ライブラリ部分) をビルドする。 ○*3
213_Build_BusinessRichClient_netcore30.bat.NET Core 3.0 をターゲットとする Business名前空間のリッチクライアント用フレームワーク (ベースクラス2, ライブラリ部分) をビルドする。○*2, *3
22 4_Build_CopyAssemblies.bat 上記ビルドのプライマリ出力を参照先フォルダにコピーする。
23 4_Build_Framework_Tool.bat .NET Frameworkベースの付属ツールをビルドする。
244_Build_Framework_ToolCore.bat.NET Coreベースの付属ツールをビルドする。○*3
25 5_Build_Bat_sample.bat .NET Frameworkベースのサンプルアプリ (バッチ) をビルドする。 ○*4
26 5_Build_BatCore_sample.bat .NET Coreベースのサンプルアプリ (バッチ) をビルドする。 ○*3, *4
27 5_Build_2CS_sample.bat .NET Frameworkベースのサンプルアプリ (2 層 C/S) をビルドする。 ○*4
285_Build_2CSCore_sample.bat.NET Coreベースのサンプルアプリ (2 層 C/S) をビルドする。○*3, *4
29 6_Build_WSSrv_sample.bat .NET Frameworkベースのサンプルアプリ (Web サービス (サーバー側ロジック)) をビルドする。 ○*4
30 6_Build_WSSrvCore_sample.bat .NET Coreベースのサンプルアプリ (Web サービス (サーバー側ロジック)) をビルドする。○*3, *4
31 7_Build_Framework_WS.bat .NET Frameworkベースのフレームワーク (サービスインタフェース部分) をビルドする。  ○*4
8_Build_WSClntWin_sample.bat.NET Frameworkベースのサンプルアプリ (Web サービスクライアント (Windows Forms)) をビルドする。○*4327_Build_Framework_WSCore.bat.NET Coreベースのフレームワーク (サービスインタフェース部分) をビルドする。 ○*3, *4
9_Build_WSClntWPF_sample.bat.NET Frameworkベースのサンプルアプリ (Web サービスクライアント (WPF)) をビルドする。338_Build_WSClnt_sample.bat.NET Frameworkベースのサンプルアプリ (Web サービスクライアント) をビルドする。 ○*4
348_Build_WSClntCore_sample.bat.NET Coreベースのサンプルアプリ (Web サービスクライアント) をビルドする。○*3, *4
35 10_Build_WebApp_sample.bat サンプルWebアプリ (ASP.NET) をビルドする。  ○*4
36 10_Build_WebAppCore_sample.bat サンプルWebアプリ (ASP.NET Core) をビルドする。  ○*3, *4
37 99_BuildLibsAtOtherRepos.bat 当該リポジトリのBusiness名前空間を他のリポジトリで利用する際のバッチ(OpenTouryoTemplates - master ブランチ用)
38 99_BuildLibsAtOtherReposInTimeOfDev.bat 当該リポジトリのBusiness名前空間を他のリポジトリで利用する際のバッチ(OpenTouryo - develop ブランチ用)
39 y_Build_TestCode.bat 以下のテストコードのバッチビルドと実行を行う。
40 y_Build_TestCode_Public.bat 以下のPublic名前空間のテストコードのビルドと実行を行う。
41 y_Build_TestCode_SecCUI.bat Public.Security名前空間のCUIテストコードのビルドと実行を行う。
42 y_Build_TestCode_SecCUI.sh Public.Security名前空間のCUIテストコードのビルドと実行を行う(WSL用)。
43 y_Build_TestCode_SecGUI.bat Public.Security名前空間のGUIテストコードのビルドと実行を行う。
44 z_ChangePackages_net45.bat NuGet パッケージの作成時に、packages.config切り替えるバッチ(.NET Framework 4.5.2)
45 z_ChangePackages_net46.bat NuGet パッケージの作成時に、packages.config切り替えるバッチ(.NET Framework 4.6)
46 z_ChangePackages_net47.bat NuGet パッケージの作成時に、packages.config切り替えるバッチ(.NET Framework 4.7)
47 z_ChangePackages_net48.bat NuGet パッケージの作成時に、packages.config切り替えるバッチ(.NET Framework 4.8)
48 z_Common.bat 共通設定 (MSBuild 用)
49 z_Common2.bat 共通設定 (Visual Studio 用) 
","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("