2023年5月14日日曜日

SVGのロゴをメニューに表示する

 SVGで提供されているロゴをメニューに表示してみます。今回はOpenAIのロゴを使用します。APEXで作ったアプリにChatGPTのAPIを呼び出す機能を加えたときに、役に立つかもしれません。


SVGのロゴのありかをOpenAIのChatGPT(GPT-3)に聞いてみました。


おそらく2021年までは回答の場所にあったのだと思いますが、現在はhttps://openai.com/brand#logosにありました。Download logosをクリックするとopenai-logos.zipというファイルがダウンロードされます。

SVGのロゴは、openai-logos.zipを展開すると作成されるディレクトリSVGs以下に、openai-logomark.svg(黒)、openai-white-logomark.svg(白)として含まれています。

SVGs % ls -l

total 40

-rw-r--r--@ 1 **********  staff  2946  4 11 06:44 openai-lockup.svg

-rw-r--r--@ 1 **********  staff  1735  4 11 06:45 openai-logomark.svg

-rw-r--r--@ 1 **********  staff  4141  4 11 06:46 openai-white-lockup.svg

-rw-r--r--@ 1 **********  staff  2414  4 11 06:47 openai-white-logomark.svg

SVGs % 


APEXアプリケーションの共有コンポーネント静的ワークスペース・ファイルを開きます。


SVGのデータを使ってCSSクラスを作成するには、2通りの方法があります。
  1. SVGファイルをアップロードし、CSSのクラス定義からファイルを参照する
  2. SVGファイルの内容をBASE64でエンコード(Quoted Printableも可)してCSSクラスに埋め込む
ファイルをアップロードするには、ファイルの作成をクリックします。


コンテンツを指定するためにファイルをドラッグ・アンド・ドロップをクリックして、ファイルを選択します。または、書いてある通りファイルをドラッグ・アンド・ドロップします。

作成をクリックすると、選択したファイルが静的ワークスペース・ファイルとしてアップロードされます。


openai-logomark.svgopenai-white-logomark.svgをアップロードします。


アップロードしたSVGファイルを参照するCSSクラスを作成します。ファイルのアップロードと同様に、ファイルの作成をクリックします。

ファイル名vendor-logos.cssとします。コンテンツを選択せずに作成をクリックすると、ファイルが新規作成されます。


ファイルの内容として以下を記述します。ファイルの拡張子がcssであれば、変更の適用時に自動的にミニファイされたCSSファイルも作成されます。参照はAPEXアプリケーションから、このCSSファイルの読み込むために使用します。あらかじめ、コピーしておきます。



CSSからSVGファイルを参照するのではなく、CSSファイルに埋め込むにはbackground-imageの指定を以下のように変更します。

background-image: url("data:image/svg+xml;base64,SVGファイルをBASE64でエンコードした内容");

メニューにロゴを表示するために、このCSSクラスをアプリケーションのすべてのページから参照可能にします。

静的ワークスペース・ファイルvendor-logos.css参照を、アプリケーション定義ユーザー・インターフェースCSSファイルURLに設定します。


以上ですべてのページからOpenAIのロゴが参照できるようになりました。

デフォルトで作成されるホーム・ページへのナビゲーションのアイコンを、OpenAIのアイコンに変更してみます。

共有コンポーネントナビゲーション・メニューに含まれるナビゲーション・メニューを開きます。

リスト・エントリホームがあるので、それを開きます。


イメージ/クラスをopenai-white-logomarkに変更します。


以上で記事の先頭の画像のように、OpenAIのロゴがメニューに表示されます。

これまでの例は、ユーザー・インターフェースナビゲーション・メニューのリスト・テンプレートとしてSide Navigation Menuが選択されていました。

これをTop Navigation Mega Menuに変更します。


ナビゲーション・メニューをTop Navigation Mega Menuに変更すると、アイコンが表示されません。


これには2つ理由があります。
  1. 背景色が白なのでopenai-white-logmarkの代わりにopenai-logomarkを使用する
  2. クラスfaを追加で指定する
Side Navigation MenuTop Navigation Mega Menuでテンプレート定義が異なるため、Top Navigation Mega MenuではCSSのクラス指定にfaを追加する必要があります

リスト・エントリイメージ/クラスfa openai-logomarkに変更します。


今度は、アイコンが表示されます。


APEXのアプリケーションには、アイコンを埋め込むことができる場所が多数あります。思ったように表示されない場合(特にアイコンとなるspan要素がHTMLに含まれているにもかかわらず)には、同様の対応が有効である可能性があります。

以上になります。

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