ラベル FontAPEX の投稿を表示しています。 すべての投稿を表示
ラベル FontAPEX の投稿を表示しています。 すべての投稿を表示

2025年1月28日火曜日

Font APEX 2.4に追加された国旗アイコンを表示する

Oracle APEXには、Font APEXというオープンソースのアイコン・ライブラリが含まれています。Oracle APEX 24.2にバンドルされているFont APEX 2.4に、各国の国旗のアイコンが追加されました。


これらの国旗のアイコンをAPEXアプリケーションに表示してみます。


先日の記事で作成した表EBAJ_COUNTRIESを作成します。
-- create tables
create table ebaj_countries (
    iso_code                      varchar2(2)    not null
                                                constraint ebaj_countries_pk primary key,
    country_name                  varchar2(255)  not null,
    capital_name                  varchar2(255),
    longitude                     number(9,6),
    latitude                      number(9,6) )
/
SQLワークショップSQLスクリプトを開き、作成をクリックします。


スクリプト名としてcountriesを入力し、上記のCREATE TABLE文を貼り付けて、実行をクリックします。


即時実行をクリックします


表EBAJ_COUNTRIESが作成されます。続けてアプリケーションの作成をクリックします。


確認画面が開きます。アプリケーションの作成をクリックします。


アプリケーション作成ウィザードが開きます。スクリプト名よりアプリケーションの名前Countriesとなっています。表EBAJ_COUNTRIESをソースとしたフォーム付き対話モード・レポートのページが追加されています。

このままアプリケーションの作成を実行します。


アプリケーションが作成されます。


表EBAJ_COUNTRIESにデータを投入します。Claude 3.5 Sonnetに以下の指示を与えました。

現在、国連に加盟している国名、ISO3166-1 Alpha-2コード、首都名、首都の位置の経度と緯度をCSV形式で出力してください。データは英語で一覧してください。ISO3166-1のコードは英子文字で出力してください。

アーティファクトとして作成されたので、クリップボードにコピーします。


APEXに戻り、SQLワークショップユーティリティに含まれるデータ・ワークショップを開きます。

データのロードをクリックします。


コピー・アンド・ペーストを選択し、先ほどコピーしたアーティファクトをペーストします。

へ進みます。


ロード先既存の表を選択し、として最初に作成したEBAJ_COUNTIRIESを選択します。列見出し最初の行にヘッダーが含まれるチェックを入れます。

データのロード先となる列をマッピングするため、構成をクリックします。


ソース列COUNTRYマップ先としてCOUNTRY_NAME(Varchar2)、ソース列CAPITALマップ先としてCAPITAL_NAME(Varchar2)を選択します。それ以外のすべてのソース列について、マップ先が設定されていることを確認します。

変更の保存をクリックします。


準備ができたので、データのロードをクリックします。


アプリケーションはすでに作成済みなので、データのロードが完了したら作業は終了です。


作成済みのAPEXアプリケーションCountriesを実行して、表EBAJ_COUNTRIESの内容を一覧する対話モード・レポートを表示します。


ISOコードの表示の前に国旗を表示させます。

Font APEXのリファレンスを開きアイコンを表示するHTMLを確認します。日本の国旗を検索し、そのHTML式をコピーします。


対話モード・レポートの列ISO_CODE列の書式HTML式に以下を記述します。日本の国旗のHTML式のjpの部分を、列ISO_CODEの値である#ISO_CODE#に置き換えます。

<span aria-hidden="true" class="fa fa-flag-#ISO_CODE#"></span>#ISO_CODE#

変更を保存します。


ページを実行します。列ISO Codeに国旗のアイコンが表示されています。


同様にしてマップ・リージョン上にポイントとして国旗を表示させようとしたのですが、国旗のアイコンのソースがSVGであるため表示はできませんでした。

日本の国旗のアイコンは、以下のように定義されています。SVGのバックグランド・イメージです。大抵のアイコンは、SVGではありません。
.fa-flag-jp {
  background-image: url(../images/flags/flag-jp.svg)
}
マップ・リージョンにSVGを表示するには、属性カスタムSVGスタイルに、表示する図形を登録します。

マップ・リージョンのページを作成し、日本の国旗を表示してみます。

ページの作成をクリックします。


マップを選択します。


ページの名前世界地図とします。データ・ソース表/ビューの名前EBAJ_COUNTRIESを指定します。

へ進みます。


マップ・スタイルとしてポイントを選択します。マップ属性ジオメトリ列タイプ2つの数値列を選択し、経度列LONGITUDE(Number)緯度列LATITUDE(Number)を指定します。ツールチップ列COUNTRY_NAME(Varchar2)とします。

ページの作成をクリックします。


マップ・リージョンのページが作成されます。


ページを実行してみます。各国の首都の位置にデフォルトのピンが立っています。


ポイント・オブジェクトスタイルアイコンに変更し、アイコン・ソースアイコン・クラスアイコンCSSクラスとしてfa-dot-circle-oを指定します。国旗のアイコン(SVGがソース)でなければ、ポイント・オブジェクトとしてアイコンが表示されます。


首都の位置にfa-dot-circle-oのアイコンが表示されます。


東京の位置に日本の国旗を表示してみます。

マップ・リージョンの属性カスタムSVGスタイルに以下を記述します。SVGをJSON形式で定義しています。SVGからJSONに書き換える作業が大変なので、日本の国旗だけを登録します。
[
  {
    "name": "fa-flag-jp",
    "width": 24,
    "height": 24,
    "paint-order": "stroke",
    "viewBox": "0 0 24 24",
    "fill": "none",
    "fill-rule": "evenodd",
    "elements": [
      {
        "type": "rect",
        "width": 24,
        "height": 18,
        "y": 3,
        "fill": "#fcfbfa",
        "rx": 2
      },
      {
        "type": "circle",
        "cx": 12,
        "cy": 12,
        "r": 5,
        "fill": "#e70a2d"
      },
      {
        "type": "rect",
        "width": 23,
        "height": 17,
        "x": 0.5,
        "y": 3.5,
        "stroke": "#100f0e",
        "opacity": 0.1,
        "rx": 2
      }
    ]
  }
]

マップ・リージョンに日本の国旗を表示します。日本に限定するため、レイヤー世界地図ソースWHERE句iso_code = 'jp'を記述します。

ポイント・オブジェクトスタイルとしてSVG形状fa-flag-jpを指定します。


以上の設定で、東京の位置に日本の国旗が表示されます。


もし、各国の国旗のアイコンがカスタムSVGスタイルに登録されていると、レイヤーのソースを以下のように変更し、形状&ICON.と設定することで、それぞれの国の首都の位置にその国の国旗を表示できます。
select ISO_CODE,
       COUNTRY_NAME,
       CAPITAL_NAME,
       LONGITUDE,
       LATITUDE,
       'fa-flag-' || iso_code icon
 from EBAJ_COUNTRIES

以下のような表示なります。日本以外はSVGスタイルが登録されていないため、デフォルトの形状が表示されています。


以上でアプリケーションの作成は完了です。

今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sample-font-apex-country-flag-icons.zip

Oracle APEXのアプリケーション作成の参考になれば幸いです。

2023年2月15日水曜日

FontAPEXに含まれていないInstagramのアイコンをアプリに表示させる

 Oracle APEXの標準フォントであるFontAPEXはオープン・ソースで、GitHubにて公開されています。

https://github.com/oracle/font-apex

ライセンスの関係でGoogle、Twitterその他(Oracleも含む)のブランドに関係するアイコンはFontAPEXに含まれていません。

FontAPEXに含まれているアイコンは、以下のサイトより探すことができます。

https://apex.oracle.com/fontapex/


APEXのアイコンを探してみます。

使用するアイコンを決めて、クリックします。

Size、Scale、Animationなどを指定して、HTMLやIconとして記述する文字列を生成します。


APEXアプリケーションには、ここで得られた文字列を埋め込むことができます。

このサイトで、googleのブランド・アイコンを探してみます。

FontAPEXには含まれていないため、No Resultsとなります。


しかし、いくつかのブランド・アイコンはAPEXアプリケーションから参照することができます。

APEXアプリケーションに静的コンテンツのリージョンを作成し、ソースとして以下を記述します。



ページを実行すると以下のように表示されます。


含まれているブランド・アイコンは限定されていて、InstagramはFontAPEXにもAPEXの製品自体にも含まれていないようです。

Font AwesomeとFontAPEXの両方を同時に使用する方法が、海外の記事で紹介されています。

Font Awesome v5 alongside Font APEX, Jeff Kemp

Use Font APEX and Font Awesome Simultaneously, Maxime Tremblay
https://askmax.blog/2018/01/29/use-font-apex-and-font-awesome/

Jeff Kempさん、Maxime Tremblayさん共にOracle APEX界隈では著名な方なので、確かな方法だと思うですが、記事がかなり古い(Font Awesomeは現在v6)のと、フォント全てをダウンロードしてfaというプレフィックス(FontAPEXもfaなので競合する)を書き換える、という作業はできれば避けたいです。

少数の足りないアイコンを表示させるために、SVGを使ってみます。

Font Awesomeのサイトへ行き、Instagramのアイコンを検索します。SVGのアイコンであれば、他のサイトからダウンロードすることもできるでしょう。

使用するアイコンをクリックします。


ダイアログが開くので、アイコンを確認します。


SVGファイルを使用するために、Font Awesome社のGitHubリポジトリからライセンス・フリーのファイルを探してダウンロードします。

https://github.com/FortAwesome/Font-Awesome/blob/6.x/svgs/brands/instagram.svg


Oracle APEXに移り、共有コンポーネント静的ワークスペース・ファイルを開きます。
静的ワークスペース・ファイルとしてアップロードすると、アプリケーション間で共有できます。


ファイルの作成をクリックします。


ダウンロードしたSVGファイルを選択します。

作成をクリックします。


ファイルがアップロードされました。

APEXアプリケーションで使用するので、参照コピーしておきます。


ページ・デザイナでアイコンを使用するページを開き、CSSインラインに以下を記述します。SVGはバックグラウンド・イメージとして表示します。FontAPEXのSmallのサイズに合わせて、width, heightともに16pxとしています。



静的コンテンツの記述に以下を追記します。

<span aria-hidden="true" class="t-Icon fa fa6-instagram"></span>


アプリケーションを実行すると、Instagramのアイコンを確認できます。


以上になります。

今回作成したAPEXアプリケーションのエクスポートは以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/brand-icon.zip

InstagramのSVGファイルは静的ワークスペース・ファイルとして作成しているため、アプリケーションのエクスポートには含まれません。

静的ワークスペース・ファイルをエクスポートするには、アプリケーションのエクスポートの画面のタスクよりコンポーネントのエクスポートを呼び出します。APEX 22.1より、静的ワークスペース・ファイルをエクスポートできるようになりました。


コンポーネントとして静的ワークスペース・ファイルを選択し、エクスポートするファイルをエクスポートに追加します。

へ進みます。


コンポーネントのエクスポートをクリックすると、ファイルがダウンロードされます。


エクスポートの方法を紹介しましたが、SVGファイルはFont Awesomeまたはその他のSVGのアイコンを提供しているサイトよりダウンロードしてください。

Oracle APEXのアプリケーション作成の参考になれば幸いです。