Power Pagesのスタイルシートをハックしてみた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140547/9b45aab8-e0a7-2bbc-00b3-fbf546e170ca.png)
[前回の続き](https://qiita.com/rockfun/items/a8bd49beba9e9ee913d0)で、Microsoft Build 2022で発表された、Preview版のPower Pagesをハックしていきます。
今回は独自のスタイルシートを定義できるのか試してみましたが、先に言っておきます！
僕の思惑通りには動きませんでした！😢😢😢

## 今回実現したかったこと
Power PagesでHTMLやスタイルシートを変更した場合、「どこまで編集可能なのか？」です。目指すは完全にオリジナルのデザイン作成です。

## Power Pagesの基本はデザインのスタイルを選ぶだけ！
Power Pagesのページデザインの基本カラースタイルは、「スタイル」メニューから「スタイル設定」を選ぶだけで、変更することができます。
他にも色を登録したり、フォントやバックグラウンドなど、ページの要素について色を変更することも可能です。

因みに、この色のテイスト、とても良いと思いませんか？
エクセルなどの標準色パレットに関してはパッとしないイメージ（あくまで個人的見解です💦）だったのですが、北欧色でとってもきれいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140547/4ff55408-c8d9-9ced-d0da-e65848f4bf53.png)

## ソースを確認してみる
前回同様に、Visual Studio Codeからソースを確認してみます。（ブラウザでも編集可能です）
まず、Power PagesのHTMLソースをみて一番気になったのは、CSSをインラインで書いていることです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140547/55109d11-a035-c29d-7c08-04a2d829d0ce.png)

これはスタイルシートの使い方としては、メンテナンス性の良くない書き方です😢
なぜかというと、同じようなデザインが続く場合に、スタイルは、できるだけ要素ごとにまとめて、外部ファイルにするのがセオリーです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140547/d8ddf565-9b2d-6172-65ec-6957ad106cdd.png)

## まずはページ内で分離できるか試す。
では、このインラインで書かれているスタイルシートをページ内で分離してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140547/48d4acf6-3b95-7777-6ddb-376bb29fbaed.png)

```ruby:スタイルを分離
<style>
  .sectionBlockLayoutInner{
    padding: 8px;
    margin: 0px;
    display: flex;
    flex-wrap: wrap;
    text-align: left;
    min-height: 374px;
  }
  .containerInner{
    padding: 0px;
    display: flex;
    flex-wrap: wrap;
  }
  .columnBlockLayoutInner{
    flex-grow: 1;
    display: flex;
    flex-direction: column;
    min-width: 300px;
    padding: 16px;
    color: red;
  }
</style>

<div class="row sectionBlockLayout sectionBlockLayoutInner">
  <div class="container containerInner">
    <div class="col-md-12 columnBlockLayout columnBlockLayoutInner">ここにスタイル適用可能？？</div>
  </div>
</div>
```

ざっくりですが、この様にスタイルを定義する部分とHTMLを分離して、Classを作成して要素に定義して、再度Power Shellを使ってアップロードしてみます。

```ruby:Power Platform CLI
pac paportal upload --path [ローカルファイルのパス]
```

## 変更内容を確認
アップロードが完了したら、Power Pagesの編集画面の右上にある「同期」ボタンを押して編集内容をサイトに展開します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140547/5b6ae4c6-db35-3529-aad7-cacb168c60fe.png)
その後に、「プレビュー」ボタンを押して、「デスクトップ」を押すと、新しいタブが開きブラウザで編集内容が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140547/2a6ca078-263d-2ac6-2405-8623c9c672ea.png)

それでは、編集した変更内容が反映できているのか確認してみます。
ブラウザのデベロッパー ツールを開き、ソースを確認すると、赤線の部分にきちんと変更した内容が反映されているのが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140547/1f438f2d-f374-ad33-d671-765dc284654a.png)

<span style="font-size: 200%; color: red;">「これで自分のスタイルを作成できるー！！！」</span>

と、思ったのもつかの間です。
Power Pagesの編集画面でページ要素を追加すると、、、、、、、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140547/10a27b9f-2ebe-6ee6-438d-14f21d442fac.png)

インラインに戻ってるー！！！！！💦💦💦
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140547/0e14c1a7-ba52-2263-fd3a-91809682f156.png)

うぅ、、、、、、😢
なぜ？？？
冷静にPower Pagesの編集システムを考えて予想してみると
Power Pagesの追加するブロックのHTMLのソースコードには、このように記載されています。

```
<div class="row sectionBlockLayout">
  <div class="container">
    <div class="col-md-12 columnBlockLayout">ここにスタイル適用可能？？</div>
  </div>
</div>
```

このdivのClassに、
- 「row」「container」「col-md-12」と記載されているのは、<strong>BootStrap</strong>のスタイル。
- 「sectionBlockLayout」「columnBlockLayout」は、大まかな<strong>Power Pagesのレイアウト</strong>で使われているスタイル。
- <strong>インラインでスタイル定義</strong>されているのが、たぶん編集画面で変更された内容を保持するためなんじゃないかと。

なので、ブラウザから要素を追加すると、編集機能を維持するために、インラインに戻してしまうのではないかと予想しています。
でも、Visual Studio Codeで文字を赤くしたスタイル定義は残っているので、きちんと理解してインラインに直しているのは、凄いと思いました。

ただ、これだと目指すオリジナルデザインはできない、、、

## 思い切って外部ファイル化
書き換えられてしまうのであれば、「スタイルシートを外部ファイルにしてしまったらどうだろか？」と、Visual Studio Code側でスタイルシートを外部ファイル化した後に、アップロードしてブラウザで確認してみると、、、、、（本来はHead内に入れるべきなので、お行儀はよろしくないです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140547/e0693cba-fe84-3139-0ad8-ff4ed78919a7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140547/650a4ce5-2d25-668a-b845-14f60826e0c4.png)


きちんと自分で作成したスタイルシートのファイルがアップロードされているは確認できて、HTMLソースにも外部ファイル化されているのは確認できました。
いやぁー！素晴らしい！なんだかいけそうな気がする～！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140547/a15cb109-99ad-ee51-fc36-4e8b20eb0b41.png)

ここまで実験したのに、このブログの書き出しの<strong>「期待した通りにならなかった」</strong>というのが、この写真の通りで外部ファイルに記載したスタイル定義が全部消えていました、、、、真っ白です😢
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140547/7513c5ed-a353-bcc8-fd21-d72f4e7813bc.png)
考えてみればソースの編集機能を保つためには、必要な処置なのかもしれませんね。

残念ですが、今回のハックはここまで！

ローカルで作ったファイルがアップロードできたのは確認したので、次回はJavaScriptを外部ファイルからDOMでアクセスできるのか、試してみたいと思います。