unimal-jp / spear

The spear OSS repository
https://late-cloud-6411.spearly.app
MIT License
10 stars 1 forks source link

Fix reference subloop logic / 参照フィールドタイプのループロジック修正 #197

Closed mantaroh closed 1 year ago

mantaroh commented 1 year ago

Changes

This PR will change the following :

  1. Change the mechanism of generating sub loop content from content type field.
  2. Drop escape process from image field type.
  3. Add try-catch to converting calendar field type.
  4. Fix the bug of hierarchy access of content type field.
  5. Add add add add testing code.

Change the mechanism of generating sub loop content from content type field.

In Spear, cms-loop in list or single content can refer the content field type.

Example: Loop of content type field E.g.,: The "blog" content type has "author" field which is content type field. (Furthermore, The "author" content type has "name" field which is text.) ```

{%= blog_title %}

  • {%= blog_author_name %}
``` We can implement like bellow, if we use the `cms-variable` attribute. (The both of samples will be same) ```

{%= blog_title %}

  • {%= foo_name %}
```

Before this PR, Spear will search from node element, so Spear also search the text node, attribute node. So Spear doesn't generate sub-loop correctly.

In this patch, Spear use the DOM. So we can convert correctly.

Drop escape process from image field type.

At the moment, Spear will escape the specific character from image field type value. For example, &id=abc will be &id=abc, So this PR will drop this step.

Add try-catch to converting calendar field type.

In calendar field, the value will be converted via specified function. This function is changeable by caller. So we need to take care the result of this function. (It might be happen the error)
So this PR will add the try-catch.

Fix the bug of hierarchy access of content type field.

Spear also can refer the content type field by hierarchy syntax.

Refer to the content type field by hierarchy syntax. 例:The "blog" content type has the "author" content type field. (The "author" content type has "name" text field.) ```

{%= blog_title %}

  • {%= blog_author_name %}
```

Add add add add testing code.

Add adddddddd many test 🙏🏼


変更点

大きく以下の修正をしています。

  1. 参照フィールドタイプのループロジック変更
  2. 画像フィールドタイプのエスケープ処理を削除
  3. 日付フィールドタイプの例外処理を追加
  4. 参照フィールドタイプの階層参照のバグ修正
  5. テストの拡充

参照フィールドタイプのループロジック変更

Spear で参照フィールドは cms-loop を用いてループ表記ができます。

参照フィールドのループ例 例:コンテンツタイプ「blog」の参照フィールド「author」をループ(コンテンツタイプ「author」にはテキストフィールド「name」がある) ```

{%= blog_title %}

  • {%= blog_author_name %}
``` 上記例は、`cms-variable`属性を使って以下のようにも記載可能です。 ```

{%= blog_title %}

  • {%= foo_name %}
```

前の実装では、置換対象のオリジナルHTMLからノードの捜索を行って置換をしていましたが、属性ノード・テキストノードを検索してしまい、正しく置換することができていませんでした。
今回の修正では、HTML 要素をベースとして置換対象を検索するように修正しています。

画像フィールドタイプのエスケープ処理を削除

現在、画像フィールドタイプの値にエスケープ処理を加えています。例えば &id=abc のようなクエリパラメータが付いている場合、 &id=abc のようにエスケープ処理されてしまうので、エスケープ処理を削除しています。

日付フィールドタイプの例外処理を追加

日付フィールドタイプは、オプションで指定した関数を使って変換をしています。この関数で例外が発生する可能性があるため、例外処理を追加しています

例外発生時は [Fail to convert time] 2023-09-07 00:00:00 のようにサーバーから受信した日付フィールドの値に加えて、エラーと分かるようにプレフィクスを付けています。

参照フィールドタイプの階層参照のバグ修正

参照フィールドタイプは、サブループを使うようにしていますが、以前の仕様で階層参照が出来るようになっています。

参照フィールドの階層アクセス 例:コンテンツタイプ「blog」の参照フィールド「author」をループ(コンテンツタイプ「author」にはテキストフィールド「name」がある) ```

{%= blog_title %}

  • {%= blog_author_name %}
``` この階層アクセスは最大3階層まで行えます。 例: `{%= blog_author_university_grade %}` (コンテンツタイプ「blog」の参照フィールド「author」、コンテンツタイプ「author」の参照フィールド「university」、コンテンツタイプ「university」のテキストフィールド「grade」にアクセス) 注意: - この参照方法は、ループ参照が出来るようになったため不要になります。

テストの拡充

今回修正した関数のテストを追加しています。

mantaroh commented 1 year ago

LGTM

細かい部分だけサジェストしてますが、意図があったり私の見落としとかがあったら無視してください!

ありがとうございます〜! const 定義お恥ずかしい 😳 サジェスト取り込ませていただきました!